el-header-and-footer 0.0.50 → 0.0.52

Sign up to get free protection for your applications and to get access to all the features.
@@ -213,12 +213,6 @@ export class ElHeaderAndFooterComponent {
213
213
  if (index >= 0) {
214
214
  images[index].setAttribute('src', newSrc);
215
215
  }
216
- else {
217
- console.warn(`Index ${index} is out of bounds. Total images: ${images.length}`);
218
- }
219
- }
220
- else {
221
- console.error('Editor element not found');
222
216
  }
223
217
  }
224
218
  initEditor() {
@@ -298,12 +292,10 @@ export class ElHeaderAndFooterComponent {
298
292
  editor.focus();
299
293
  const color = this.bgColor;
300
294
  editor.style.backgroundColor = color ? color : this.themeModeBgClr();
301
- console.log('bg Color => ', editor.style.backgroundColor);
302
295
  // }
303
296
  // if (editor) {
304
297
  const existingTable = editor.querySelector('table');
305
298
  if (existingTable) {
306
- console.log('A table already exists. No new table will be added.');
307
299
  this.toggleTableBorders();
308
300
  // Exit if a table is already present
309
301
  }
@@ -1064,7 +1056,7 @@ export class ElHeaderAndFooterComponent {
1064
1056
  editor.style.backgroundColor = this.CanvasColor ? this.CanvasColor : this.themeModeBgClr();
1065
1057
  const table = editor.querySelector('table');
1066
1058
  if (table) {
1067
- table.style.width = '674px';
1059
+ table.style.width = '100%';
1068
1060
  }
1069
1061
  this.cdr.detectChanges();
1070
1062
  }
@@ -1079,7 +1071,6 @@ export class ElHeaderAndFooterComponent {
1079
1071
  if (editor) {
1080
1072
  const existingTable = editor.querySelector('table');
1081
1073
  if (existingTable) {
1082
- console.log('A table already exists. No new table will be added.');
1083
1074
  return; // Exit if a table is already present
1084
1075
  }
1085
1076
  // Create the table HTML
@@ -1114,23 +1105,17 @@ export class ElHeaderAndFooterComponent {
1114
1105
  // const editor = document.getElementById(this.editorId);
1115
1106
  // if (editor) {
1116
1107
  // const table = editor.querySelector('table'); // Find the first table inside the editor
1117
- // console.log('table = ', table);
1118
1108
  // if (table) {
1119
1109
  // const cells = table.querySelectorAll('td'); // Select all table cells
1120
1110
  // cells.forEach((cell) => {
1121
1111
  // cell.style.border = 'none'; // Remove the border by setting it to 'none'
1122
1112
  // });
1123
- // console.log('Table borders removed');
1124
1113
  // // Convert the table element back to HTML string
1125
1114
  // const tableHTML = table.outerHTML;
1126
1115
  // // Insert the updated HTML into the editor
1127
1116
  // editor.focus();
1128
1117
  // document.execCommand('insertHTML', false, tableHTML); // Pass the HTML string, not the element
1129
- // } else {
1130
- // console.log('No table found to remove borders');
1131
- // }
1132
- // } else {
1133
- // console.log('Editor not found');
1118
+ // }
1134
1119
  // }
1135
1120
  // }
1136
1121
  toggleTableBorders() {
@@ -1149,7 +1134,6 @@ export class ElHeaderAndFooterComponent {
1149
1134
  });
1150
1135
  const existingTable = editor.querySelector('table');
1151
1136
  if (existingTable) {
1152
- console.log('A table already exists. No new table will be added.');
1153
1137
  // return; // Exit if a table is already present
1154
1138
  }
1155
1139
  // Toggle borders
@@ -1159,7 +1143,6 @@ export class ElHeaderAndFooterComponent {
1159
1143
  cell.style.border = 'none'; // Set border to 'none'
1160
1144
  });
1161
1145
  this.isTableBordered = false;
1162
- console.log('Table borders removed');
1163
1146
  }
1164
1147
  else {
1165
1148
  // Add borders
@@ -1167,15 +1150,8 @@ export class ElHeaderAndFooterComponent {
1167
1150
  cell.style.border = '2px solid ' + this.themeModeClrBorderForTable(); // Add a default border style
1168
1151
  });
1169
1152
  this.isTableBordered = true;
1170
- console.log('Table borders added');
1171
1153
  }
1172
1154
  }
1173
- else {
1174
- console.log('No table found to toggle borders');
1175
- }
1176
- }
1177
- else {
1178
- console.log('Editor not found');
1179
1155
  }
1180
1156
  }
1181
1157
  themeMode() {
@@ -1229,14 +1205,14 @@ ElHeaderAndFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
1229
1205
  provide: NG_VALUE_ACCESSOR,
1230
1206
  useExisting: forwardRef(() => ElHeaderAndFooterComponent),
1231
1207
  multi: true
1232
- }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: NgbDropdown, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container els-text-editor px-0\" style=\"border-radius: 20px !important;\">\r\n <div class=\"btn-toolbar els-btn-toolbar p-2 py-2 mb-0\" role=\"toolbar\" [id]=\"editorId+'toolbar'\"\r\n [style.background]=\"themeModeBgClr()\" aria-label=\"Toolbar with button groups\"\r\n style=\"border-top-left-radius: 20px !important; border-top-right-radius: 20px !important;\">\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Header Options\">\r\n <!-- <div class=\"dropdown\">\r\n <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff; width: 150px; border: 2px solid #7D6D6D !important;\" (change)=\"onFormatChange($event)\">\r\n <option [value]=\"'<h1>'\">Heading 1</option>v\r\n <option [value]=\"'<h2>'\">Heading 2</option>\r\n <option [value]=\"'<h3>'\">Heading 3</option>\r\n <option [value]=\"'<h4>'\">Heading 4</option>\r\n <option [value]=\"'<h5>'\">Heading 5</option>\r\n <option [value]=\"'<h6>'\">Heading 6</option>\r\n <option selected [value]=\"'<p>'\">Normal</option>\r\n </select>\r\n </div> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button\r\n class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\" ngbDropdownToggle>\r\n <span>{{selectedFormatBlock | titlecase}}</span> <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\"\r\n [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h1>')\">\r\n <h1>Heading 1</h1>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h2>')\">\r\n <h2>Heading 2</h2>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h3>')\">\r\n <h3>Heading 3</h3>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h4>')\">\r\n <h4>Heading 4</h4>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h5>')\">\r\n <h5>Heading 5</h5>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h6>')\">\r\n <h6>Heading 6</h6>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<p>')\">\r\n <p>Normal</p>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div ngbDropdown class=\"dropdown\">\r\n <button class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" style=\"width: 100px\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\" [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\" (click)=\"changeFont(font)\"\r\n [style.color]=\"themeModeClr()\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div> -->\r\n <div class=\"btn-group els-button-group\" role=\"group\" aria-label=\"Font Options\">\r\n <!-- <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff;border: 2px solid #7D6D6D !important;\" \r\n [(ngModel)]=\"selectedFont\" (change)=\"changeFont($event)\">\r\n <option class=\"els-form-option\" *ngFor=\"let font of fonts\" [value]=\"font\">{{ font }}</option>\r\n </select> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button\r\n class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" style=\"width: 100px\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\"\r\n [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\"\r\n (click)=\"changeFont(font)\" [style.color]=\"themeModeClr()\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"py-0\" style=\"height: fit-content;\" [style.color]=\"themeModeClr()\">\r\n <div class=\"btn-group els-button-group mr-2 \" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-sm els-toolbar-button\" [class.active]=\"isBoldActive\"\r\n (click)=\"format('bold', editorId)\">\r\n <i class=\"mdi mdi-format-bold\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isItalicActive\"\r\n (click)=\"format('italic', editorId)\">\r\n <i class=\"mdi mdi-format-italic\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isUnderlineActive\"\r\n (click)=\"format('underline', editorId)\">\r\n <i class=\"mdi mdi-format-underline\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isStrikethroughActive\"\r\n (click)=\"format('strikethrough', editorId)\">\r\n <i class=\"mdi mdi-format-strikethrough-variant\"></i>\r\n </button>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Text Color\">\r\n <!-- <input type=\"color\" id=\"textColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setTextColor($event)\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"position: relative;\"\r\n (click)=\"openColorPicker('textColorPicker')\">\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\" [style.color]=\"selectedTextColor\"></i>\r\n </button> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\"\r\n [style.color]=\"selectedTextColor\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setTextColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Background Color\" style=\"position: relative;\">\r\n <!-- <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [style.color]=\"backgroundColor\"\r\n (click)=\"openColorPicker('bgColorPicker')\">\r\n <i class=\"mdi mdi-alpha-a-box\"></i>\r\n </button>\r\n <input type=\"color\" id=\"bgColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setBackgroundColor($event)\"> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-alpha-a-box\" [style.color]=\"backgroundColor\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"vertical-line ms-2 border\" [style.border-left]=\"themeModeClrVerticalLine()\"></div>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertOrderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-numbered\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertUnorderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-bulleted\"></i></button>\r\n <!-- <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button arrow-none text-secondary\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-align-left \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 3px;\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyLeft', editorId)\"><i class=\"mdi mdi-format-align-left\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyCenter', editorId)\"><i\r\n class=\"mdi mdi-format-align-center\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyRight', editorId)\"><i\r\n class=\"mdi mdi-format-align-right\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyFull', editorId)\"><i\r\n class=\"mdi mdi-format-align-justify\"></i></button>\r\n </div>\r\n </div> -->\r\n <div class=\"vertical-line ms-2 border\" [style.border-left]=\"themeModeClrVerticalLine()\"></div>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSubscriptActive\"\r\n (click)=\"format('subscript', editorId)\">\r\n <i class=\"mdi mdi-format-subscript\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSuperscriptActive\"\r\n (click)=\"format('superscript', editorId)\">\r\n <i class=\"mdi mdi-format-superscript\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-outline-primary arrow-none els-toolbar-button border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-fill\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\"\r\n (onChangeComplete)=\"setCanvasBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group-2 mr-3\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"getToday()\">Date</button>\r\n </div> -->\r\n <!-- <div class=\"btn-group els-button-group-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"insertPageNumber()\">Page\r\n No</button>\r\n\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addLink()\"><i\r\n class=\"mdi mdi-link-variant\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"insertsImage(editorId)\"><i\r\n class=\"mdi mdi-image\"></i></button>\r\n <input type=\"file\" id=\"imageInput\" style=\"display: none;\" (change)=\"handleImageUpload($event)\">\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <!-- <button class=\"btn btn-white els-toolbar-button\" (click)=\"toggleTableBorders()\"><i \r\n class=\"mdi\" [ngClass]=\"{ isTableBordered ? 'mdi-border-none' : 'mdi-border-all' }\"></i>\r\n </button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"toggleTableBorders()\">\r\n <i class=\"mdi\" [ngClass]=\"isTableBordered ? 'mdi-border-none' : 'mdi-border-all'\"></i>\r\n </button>\r\n\r\n <!-- <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"deleteRow()\"><i\r\n class=\"mdi mdi-table-row-remove\"></i></button> -->\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteRow()\"><i class=\"mdi mdi-table-row-remove\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button>\r\n </div> -->\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"undo()\">\r\n <i class=\"mdi mdi-undo\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"redo()\">\r\n <i class=\"mdi mdi-redo\"></i>\r\n </button>\r\n\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <!-- <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"clearTextEditor()\">\r\n <i class=\"mdi mdi-close-circle\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div contenteditable=\"true\" [id]=\"editorId\" class=\"els-border p-3\" #editorHeader style=\"position: relative !important; \r\n height: 130px; \r\n max-width: 100%; \r\n overflow: hidden; \r\n border-bottom-left-radius: 20px !important; \r\n border-bottom-right-radius: 20px !important; \r\n border-bottom-left-radius: 20px !important;\" [style.border-top]=\"themeModeBorderTop()\"\r\n [ngStyle]=\"{'font-family': selectedFont, 'font-size': selectedFontSize + 'px'}\" [style]=\"style\"\r\n contenteditable=\"true\" (input)=\"onModelChange($event)\" placeholder=\"Insert text here ...\"\r\n (mouseup)=\"onTextSelect($event)\" [innerHTML]=\"sanitizedContent\" (paste)=\"onPaste($event)\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (click)=\"checkTableSelection($event)\">\r\n </div>\r\n <table *ngIf=\"parsedTable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of parsedTable.headers\">{{ header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of parsedTable.rows\">\r\n <td *ngFor=\"let cell of row\">{{ cell }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>", styles: ["*{font-family:Noto Sans Telugu UI,sans-serif}#editor{min-height:125px;max-height:125px;overflow-y:auto}#editor img{max-width:100%;height:auto}.bubble-toolbar{position:absolute;background-color:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 5px #00000026;z-index:1000;display:none}.els-text-editor{box-sizing:border-box}.els-btn-toolbar{width:\"1028px\"}.els-toolbar-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.els-toolbar-button-2{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:100px}.els-toolbar-dropdown-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;color:#fff}.els-toolbar-dropdown-button:focus{outline:none}.els-form-select{cursor:pointer;display:inline-block;height:100%;padding:2px 5px 2px 8px;position:relative;width:100%;border:none;color:#000}.els-button-group{margin-right:15px}.els-form-select:focus{outline:none}.els-border{border:#353343}.els-border:focus{outline:none}.els-dropdown-item{width:50px!important}.els-toolbar-button.active,.btn-toolbar .btn.active,.btn-toolbar .btn:hover{color:#06c}.dropdown-toggle:after{display:none}.table-container{overflow-x:auto;width:100%}table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse;table-layout:fixed}table td,table th{padding:.75rem;vertical-align:top;border:1px solid #dee2e6;word-wrap:break-word}@media (max-width: 576px){table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;border-spacing:0}table thead,table tbody,table tr,table th,table td{display:block}table thead tr{position:absolute;top:-9999px;left:-9999px}table tr{margin-bottom:.625rem;border:1px solid #ccc}table td,table th{border:none;border-bottom:1px solid #ddd;position:relative;padding-left:50%;white-space:normal;text-align:left}table td:before,table th:before{position:absolute;top:.75rem;left:.75rem;width:45%;padding-right:.75rem;white-space:nowrap;text-align:left;font-weight:700}}table.resizable{overflow:hidden;resize:both}.btn-group .btn{display:flex;align-items:center;justify-content:center}.btn-group .mdi{font-size:18px}.icon-with-underline{text-decoration:underline}pre{background-color:#f0f0f0;border:1px solid #ccc;border-radius:5px;overflow-x:auto}code{display:block;white-space:pre-wrap;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#888;border-radius:10px;cursor:pointer}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#555}.custom-scrollbar::-webkit-scrollbar-track{background:transparent;border-radius:10px}.pasted-table{border-collapse:collapse;width:100%}.pasted-table td{border:1px solid black;padding:8px}.pasted-table tr:nth-child(even){background-color:#f2f2f2}.pasted-table tr:hover{background-color:#ddd}.vertical-line{height:28px;margin:0 auto}.els-text-format{font-weight:800!important}.els-text-format>button{color:#000!important}.els-text-format>button:hover{background-color:#7d6d6d!important;color:#fff!important}\n"], components: [{ type: i3.SketchComponent, selector: "color-sketch", inputs: ["disableAlpha", "presetColors", "width"] }], directives: [{ type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "titlecase": i5.TitleCasePipe } });
1208
+ }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: NgbDropdown, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container els-text-editor px-0\" style=\"border-radius: 20px !important;\">\r\n <div class=\"btn-toolbar els-btn-toolbar p-2 py-2 mb-0\" role=\"toolbar\" [id]=\"editorId+'toolbar'\"\r\n [style.background]=\"themeModeBgClr()\" aria-label=\"Toolbar with button groups\"\r\n style=\"border-top-left-radius: 20px !important; border-top-right-radius: 20px !important;\">\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Header Options\">\r\n <!-- <div class=\"dropdown\">\r\n <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff; width: 150px; border: 2px solid #7D6D6D !important;\" (change)=\"onFormatChange($event)\">\r\n <option [value]=\"'<h1>'\">Heading 1</option>v\r\n <option [value]=\"'<h2>'\">Heading 2</option>\r\n <option [value]=\"'<h3>'\">Heading 3</option>\r\n <option [value]=\"'<h4>'\">Heading 4</option>\r\n <option [value]=\"'<h5>'\">Heading 5</option>\r\n <option [value]=\"'<h6>'\">Heading 6</option>\r\n <option selected [value]=\"'<p>'\">Normal</option>\r\n </select>\r\n </div> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button\r\n class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\" ngbDropdownToggle>\r\n <span>{{selectedFormatBlock | titlecase}}</span> <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\"\r\n [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h1>')\">\r\n <h1>Heading 1</h1>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h2>')\">\r\n <h2>Heading 2</h2>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h3>')\">\r\n <h3>Heading 3</h3>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h4>')\">\r\n <h4>Heading 4</h4>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h5>')\">\r\n <h5>Heading 5</h5>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h6>')\">\r\n <h6>Heading 6</h6>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<p>')\">\r\n <p>Normal</p>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div ngbDropdown class=\"dropdown\">\r\n <button class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" style=\"width: 100px\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\" [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\" (click)=\"changeFont(font)\"\r\n [style.color]=\"themeModeClr()\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div> -->\r\n <div class=\"btn-group els-button-group\" role=\"group\" aria-label=\"Font Options\">\r\n <!-- <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff;border: 2px solid #7D6D6D !important;\" \r\n [(ngModel)]=\"selectedFont\" (change)=\"changeFont($event)\">\r\n <option class=\"els-form-option\" *ngFor=\"let font of fonts\" [value]=\"font\">{{ font }}</option>\r\n </select> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button\r\n class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" style=\"width: 100px\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\"\r\n [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\"\r\n (click)=\"changeFont(font)\" [style.color]=\"themeModeClr()\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"py-0\" style=\"height: fit-content;\" [style.color]=\"themeModeClr()\">\r\n <div class=\"btn-group els-button-group mr-2 \" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-sm els-toolbar-button\" [class.active]=\"isBoldActive\"\r\n (click)=\"format('bold', editorId)\">\r\n <i class=\"mdi mdi-format-bold\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isItalicActive\"\r\n (click)=\"format('italic', editorId)\">\r\n <i class=\"mdi mdi-format-italic\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isUnderlineActive\"\r\n (click)=\"format('underline', editorId)\">\r\n <i class=\"mdi mdi-format-underline\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isStrikethroughActive\"\r\n (click)=\"format('strikethrough', editorId)\">\r\n <i class=\"mdi mdi-format-strikethrough-variant\"></i>\r\n </button>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Text Color\">\r\n <!-- <input type=\"color\" id=\"textColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setTextColor($event)\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"position: relative;\"\r\n (click)=\"openColorPicker('textColorPicker')\">\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\" [style.color]=\"selectedTextColor\"></i>\r\n </button> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\"\r\n [style.color]=\"selectedTextColor\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setTextColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Background Color\" style=\"position: relative;\">\r\n <!-- <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [style.color]=\"backgroundColor\"\r\n (click)=\"openColorPicker('bgColorPicker')\">\r\n <i class=\"mdi mdi-alpha-a-box\"></i>\r\n </button>\r\n <input type=\"color\" id=\"bgColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setBackgroundColor($event)\"> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-alpha-a-box\" [style.color]=\"backgroundColor\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"vertical-line ms-2 border\" [style.border-left]=\"themeModeClrVerticalLine()\"></div>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertOrderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-numbered\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertUnorderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-bulleted\"></i></button>\r\n <!-- <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button arrow-none text-secondary\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-align-left \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 3px;\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyLeft', editorId)\"><i class=\"mdi mdi-format-align-left\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyCenter', editorId)\"><i\r\n class=\"mdi mdi-format-align-center\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyRight', editorId)\"><i\r\n class=\"mdi mdi-format-align-right\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyFull', editorId)\"><i\r\n class=\"mdi mdi-format-align-justify\"></i></button>\r\n </div>\r\n </div> -->\r\n <div class=\"vertical-line ms-2 border\" [style.border-left]=\"themeModeClrVerticalLine()\"></div>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSubscriptActive\"\r\n (click)=\"format('subscript', editorId)\">\r\n <i class=\"mdi mdi-format-subscript\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSuperscriptActive\"\r\n (click)=\"format('superscript', editorId)\">\r\n <i class=\"mdi mdi-format-superscript\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-outline-primary arrow-none els-toolbar-button border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-fill\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\"\r\n (onChangeComplete)=\"setCanvasBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group-2 mr-3\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"getToday()\">Date</button>\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"insertPageNumber()\">Page\r\n No</button>\r\n\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addLink()\"><i\r\n class=\"mdi mdi-link-variant\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"insertsImage(editorId)\"><i\r\n class=\"mdi mdi-image\"></i></button>\r\n <input type=\"file\" id=\"imageInput\" style=\"display: none;\" (change)=\"handleImageUpload($event)\">\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <!-- <button class=\"btn btn-white els-toolbar-button\" (click)=\"toggleTableBorders()\"><i \r\n class=\"mdi\" [ngClass]=\"{ isTableBordered ? 'mdi-border-none' : 'mdi-border-all' }\"></i>\r\n </button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"toggleTableBorders()\">\r\n <i class=\"mdi\" [ngClass]=\"isTableBordered ? 'mdi-border-none' : 'mdi-border-all'\"></i>\r\n </button>\r\n\r\n <!-- <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"deleteRow()\"><i\r\n class=\"mdi mdi-table-row-remove\"></i></button> -->\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteRow()\"><i class=\"mdi mdi-table-row-remove\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button>\r\n </div> -->\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"undo()\">\r\n <i class=\"mdi mdi-undo\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"redo()\">\r\n <i class=\"mdi mdi-redo\"></i>\r\n </button>\r\n\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <!-- <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"clearTextEditor()\">\r\n <i class=\"mdi mdi-close-circle\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div contenteditable=\"true\" [id]=\"editorId\" class=\"els-border p-3\" #editorHeader style=\"position: relative !important; \r\n height: 130px; \r\n max-width: 100%; \r\n overflow: hidden; \r\n border-bottom-left-radius: 20px !important; \r\n border-bottom-right-radius: 20px !important; \r\n border-bottom-left-radius: 20px !important;\" [style.border-top]=\"themeModeBorderTop()\"\r\n [ngStyle]=\"{'font-family': selectedFont, 'font-size': selectedFontSize + 'px'}\" [style]=\"style\"\r\n contenteditable=\"true\" (input)=\"onModelChange($event)\" placeholder=\"Insert text here ...\"\r\n (mouseup)=\"onTextSelect($event)\" [innerHTML]=\"sanitizedContent\" (paste)=\"onPaste($event)\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (click)=\"checkTableSelection($event)\">\r\n </div>\r\n <table *ngIf=\"parsedTable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of parsedTable.headers\">{{ header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of parsedTable.rows\">\r\n <td *ngFor=\"let cell of row\">{{ cell }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>", styles: ["*{font-family:Noto Sans Telugu UI,sans-serif}#editor{min-height:125px;max-height:125px;overflow-y:auto}#editor img{max-width:100%;height:auto}.bubble-toolbar{position:absolute;background-color:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 5px #00000026;z-index:1000;display:none}.els-text-editor{box-sizing:border-box}.els-btn-toolbar{width:\"1028px\"}.els-toolbar-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.els-toolbar-button-2{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:100px}.els-toolbar-dropdown-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;color:#fff}.els-toolbar-dropdown-button:focus{outline:none}.els-form-select{cursor:pointer;display:inline-block;height:100%;padding:2px 5px 2px 8px;position:relative;width:100%;border:none;color:#000}.els-button-group{margin-right:15px}.els-form-select:focus{outline:none}.els-border{border:#353343}.els-border:focus{outline:none}.els-dropdown-item{width:50px!important}.els-toolbar-button.active,.btn-toolbar .btn.active,.btn-toolbar .btn:hover{color:#06c}.dropdown-toggle:after{display:none}.table-container{overflow-x:auto;width:100%}table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse;table-layout:fixed}table td,table th{padding:.75rem;vertical-align:top;border:1px solid #dee2e6;word-wrap:break-word}@media (max-width: 576px){table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;border-spacing:0}table thead,table tbody,table tr,table th,table td{display:block}table thead tr{position:absolute;top:-9999px;left:-9999px}table tr{margin-bottom:.625rem;border:1px solid #ccc}table td,table th{border:none;border-bottom:1px solid #ddd;position:relative;padding-left:50%;white-space:normal;text-align:left}table td:before,table th:before{position:absolute;top:.75rem;left:.75rem;width:45%;padding-right:.75rem;white-space:nowrap;text-align:left;font-weight:700}}table.resizable{overflow:hidden;resize:both}.btn-group .btn{display:flex;align-items:center;justify-content:center}.btn-group .mdi{font-size:18px}.icon-with-underline{text-decoration:underline}pre{background-color:#f0f0f0;border:1px solid #ccc;border-radius:5px;overflow-x:auto}code{display:block;white-space:pre-wrap;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#888;border-radius:10px;cursor:pointer}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#555}.custom-scrollbar::-webkit-scrollbar-track{background:transparent;border-radius:10px}.pasted-table{border-collapse:collapse;width:100%}.pasted-table td{border:1px solid black;padding:8px}.pasted-table tr:nth-child(even){background-color:#f2f2f2}.pasted-table tr:hover{background-color:#ddd}.vertical-line{height:28px;margin:0 auto}.els-text-format{font-weight:800!important}.els-text-format>button{color:#000!important}.els-text-format>button:hover{background-color:#7d6d6d!important;color:#fff!important}\n"], components: [{ type: i3.SketchComponent, selector: "color-sketch", inputs: ["disableAlpha", "presetColors", "width"] }], directives: [{ type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "titlecase": i5.TitleCasePipe } });
1233
1209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ElHeaderAndFooterComponent, decorators: [{
1234
1210
  type: Component,
1235
1211
  args: [{ selector: 'el-header-and-footer', providers: [{
1236
1212
  provide: NG_VALUE_ACCESSOR,
1237
1213
  useExisting: forwardRef(() => ElHeaderAndFooterComponent),
1238
1214
  multi: true
1239
- }], template: "<div class=\"container els-text-editor px-0\" style=\"border-radius: 20px !important;\">\r\n <div class=\"btn-toolbar els-btn-toolbar p-2 py-2 mb-0\" role=\"toolbar\" [id]=\"editorId+'toolbar'\"\r\n [style.background]=\"themeModeBgClr()\" aria-label=\"Toolbar with button groups\"\r\n style=\"border-top-left-radius: 20px !important; border-top-right-radius: 20px !important;\">\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Header Options\">\r\n <!-- <div class=\"dropdown\">\r\n <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff; width: 150px; border: 2px solid #7D6D6D !important;\" (change)=\"onFormatChange($event)\">\r\n <option [value]=\"'<h1>'\">Heading 1</option>v\r\n <option [value]=\"'<h2>'\">Heading 2</option>\r\n <option [value]=\"'<h3>'\">Heading 3</option>\r\n <option [value]=\"'<h4>'\">Heading 4</option>\r\n <option [value]=\"'<h5>'\">Heading 5</option>\r\n <option [value]=\"'<h6>'\">Heading 6</option>\r\n <option selected [value]=\"'<p>'\">Normal</option>\r\n </select>\r\n </div> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button\r\n class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\" ngbDropdownToggle>\r\n <span>{{selectedFormatBlock | titlecase}}</span> <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\"\r\n [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h1>')\">\r\n <h1>Heading 1</h1>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h2>')\">\r\n <h2>Heading 2</h2>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h3>')\">\r\n <h3>Heading 3</h3>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h4>')\">\r\n <h4>Heading 4</h4>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h5>')\">\r\n <h5>Heading 5</h5>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h6>')\">\r\n <h6>Heading 6</h6>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<p>')\">\r\n <p>Normal</p>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div ngbDropdown class=\"dropdown\">\r\n <button class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" style=\"width: 100px\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\" [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\" (click)=\"changeFont(font)\"\r\n [style.color]=\"themeModeClr()\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div> -->\r\n <div class=\"btn-group els-button-group\" role=\"group\" aria-label=\"Font Options\">\r\n <!-- <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff;border: 2px solid #7D6D6D !important;\" \r\n [(ngModel)]=\"selectedFont\" (change)=\"changeFont($event)\">\r\n <option class=\"els-form-option\" *ngFor=\"let font of fonts\" [value]=\"font\">{{ font }}</option>\r\n </select> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button\r\n class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" style=\"width: 100px\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\"\r\n [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\"\r\n (click)=\"changeFont(font)\" [style.color]=\"themeModeClr()\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"py-0\" style=\"height: fit-content;\" [style.color]=\"themeModeClr()\">\r\n <div class=\"btn-group els-button-group mr-2 \" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-sm els-toolbar-button\" [class.active]=\"isBoldActive\"\r\n (click)=\"format('bold', editorId)\">\r\n <i class=\"mdi mdi-format-bold\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isItalicActive\"\r\n (click)=\"format('italic', editorId)\">\r\n <i class=\"mdi mdi-format-italic\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isUnderlineActive\"\r\n (click)=\"format('underline', editorId)\">\r\n <i class=\"mdi mdi-format-underline\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isStrikethroughActive\"\r\n (click)=\"format('strikethrough', editorId)\">\r\n <i class=\"mdi mdi-format-strikethrough-variant\"></i>\r\n </button>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Text Color\">\r\n <!-- <input type=\"color\" id=\"textColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setTextColor($event)\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"position: relative;\"\r\n (click)=\"openColorPicker('textColorPicker')\">\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\" [style.color]=\"selectedTextColor\"></i>\r\n </button> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\"\r\n [style.color]=\"selectedTextColor\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setTextColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Background Color\" style=\"position: relative;\">\r\n <!-- <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [style.color]=\"backgroundColor\"\r\n (click)=\"openColorPicker('bgColorPicker')\">\r\n <i class=\"mdi mdi-alpha-a-box\"></i>\r\n </button>\r\n <input type=\"color\" id=\"bgColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setBackgroundColor($event)\"> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-alpha-a-box\" [style.color]=\"backgroundColor\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"vertical-line ms-2 border\" [style.border-left]=\"themeModeClrVerticalLine()\"></div>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertOrderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-numbered\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertUnorderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-bulleted\"></i></button>\r\n <!-- <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button arrow-none text-secondary\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-align-left \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 3px;\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyLeft', editorId)\"><i class=\"mdi mdi-format-align-left\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyCenter', editorId)\"><i\r\n class=\"mdi mdi-format-align-center\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyRight', editorId)\"><i\r\n class=\"mdi mdi-format-align-right\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyFull', editorId)\"><i\r\n class=\"mdi mdi-format-align-justify\"></i></button>\r\n </div>\r\n </div> -->\r\n <div class=\"vertical-line ms-2 border\" [style.border-left]=\"themeModeClrVerticalLine()\"></div>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSubscriptActive\"\r\n (click)=\"format('subscript', editorId)\">\r\n <i class=\"mdi mdi-format-subscript\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSuperscriptActive\"\r\n (click)=\"format('superscript', editorId)\">\r\n <i class=\"mdi mdi-format-superscript\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-outline-primary arrow-none els-toolbar-button border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-fill\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\"\r\n (onChangeComplete)=\"setCanvasBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group-2 mr-3\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"getToday()\">Date</button>\r\n </div> -->\r\n <!-- <div class=\"btn-group els-button-group-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"insertPageNumber()\">Page\r\n No</button>\r\n\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addLink()\"><i\r\n class=\"mdi mdi-link-variant\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"insertsImage(editorId)\"><i\r\n class=\"mdi mdi-image\"></i></button>\r\n <input type=\"file\" id=\"imageInput\" style=\"display: none;\" (change)=\"handleImageUpload($event)\">\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <!-- <button class=\"btn btn-white els-toolbar-button\" (click)=\"toggleTableBorders()\"><i \r\n class=\"mdi\" [ngClass]=\"{ isTableBordered ? 'mdi-border-none' : 'mdi-border-all' }\"></i>\r\n </button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"toggleTableBorders()\">\r\n <i class=\"mdi\" [ngClass]=\"isTableBordered ? 'mdi-border-none' : 'mdi-border-all'\"></i>\r\n </button>\r\n\r\n <!-- <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"deleteRow()\"><i\r\n class=\"mdi mdi-table-row-remove\"></i></button> -->\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteRow()\"><i class=\"mdi mdi-table-row-remove\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button>\r\n </div> -->\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"undo()\">\r\n <i class=\"mdi mdi-undo\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"redo()\">\r\n <i class=\"mdi mdi-redo\"></i>\r\n </button>\r\n\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <!-- <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"clearTextEditor()\">\r\n <i class=\"mdi mdi-close-circle\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div contenteditable=\"true\" [id]=\"editorId\" class=\"els-border p-3\" #editorHeader style=\"position: relative !important; \r\n height: 130px; \r\n max-width: 100%; \r\n overflow: hidden; \r\n border-bottom-left-radius: 20px !important; \r\n border-bottom-right-radius: 20px !important; \r\n border-bottom-left-radius: 20px !important;\" [style.border-top]=\"themeModeBorderTop()\"\r\n [ngStyle]=\"{'font-family': selectedFont, 'font-size': selectedFontSize + 'px'}\" [style]=\"style\"\r\n contenteditable=\"true\" (input)=\"onModelChange($event)\" placeholder=\"Insert text here ...\"\r\n (mouseup)=\"onTextSelect($event)\" [innerHTML]=\"sanitizedContent\" (paste)=\"onPaste($event)\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (click)=\"checkTableSelection($event)\">\r\n </div>\r\n <table *ngIf=\"parsedTable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of parsedTable.headers\">{{ header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of parsedTable.rows\">\r\n <td *ngFor=\"let cell of row\">{{ cell }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>", styles: ["*{font-family:Noto Sans Telugu UI,sans-serif}#editor{min-height:125px;max-height:125px;overflow-y:auto}#editor img{max-width:100%;height:auto}.bubble-toolbar{position:absolute;background-color:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 5px #00000026;z-index:1000;display:none}.els-text-editor{box-sizing:border-box}.els-btn-toolbar{width:\"1028px\"}.els-toolbar-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.els-toolbar-button-2{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:100px}.els-toolbar-dropdown-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;color:#fff}.els-toolbar-dropdown-button:focus{outline:none}.els-form-select{cursor:pointer;display:inline-block;height:100%;padding:2px 5px 2px 8px;position:relative;width:100%;border:none;color:#000}.els-button-group{margin-right:15px}.els-form-select:focus{outline:none}.els-border{border:#353343}.els-border:focus{outline:none}.els-dropdown-item{width:50px!important}.els-toolbar-button.active,.btn-toolbar .btn.active,.btn-toolbar .btn:hover{color:#06c}.dropdown-toggle:after{display:none}.table-container{overflow-x:auto;width:100%}table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse;table-layout:fixed}table td,table th{padding:.75rem;vertical-align:top;border:1px solid #dee2e6;word-wrap:break-word}@media (max-width: 576px){table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;border-spacing:0}table thead,table tbody,table tr,table th,table td{display:block}table thead tr{position:absolute;top:-9999px;left:-9999px}table tr{margin-bottom:.625rem;border:1px solid #ccc}table td,table th{border:none;border-bottom:1px solid #ddd;position:relative;padding-left:50%;white-space:normal;text-align:left}table td:before,table th:before{position:absolute;top:.75rem;left:.75rem;width:45%;padding-right:.75rem;white-space:nowrap;text-align:left;font-weight:700}}table.resizable{overflow:hidden;resize:both}.btn-group .btn{display:flex;align-items:center;justify-content:center}.btn-group .mdi{font-size:18px}.icon-with-underline{text-decoration:underline}pre{background-color:#f0f0f0;border:1px solid #ccc;border-radius:5px;overflow-x:auto}code{display:block;white-space:pre-wrap;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#888;border-radius:10px;cursor:pointer}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#555}.custom-scrollbar::-webkit-scrollbar-track{background:transparent;border-radius:10px}.pasted-table{border-collapse:collapse;width:100%}.pasted-table td{border:1px solid black;padding:8px}.pasted-table tr:nth-child(even){background-color:#f2f2f2}.pasted-table tr:hover{background-color:#ddd}.vertical-line{height:28px;margin:0 auto}.els-text-format{font-weight:800!important}.els-text-format>button{color:#000!important}.els-text-format>button:hover{background-color:#7d6d6d!important;color:#fff!important}\n"] }]
1215
+ }], template: "<div class=\"container els-text-editor px-0\" style=\"border-radius: 20px !important;\">\r\n <div class=\"btn-toolbar els-btn-toolbar p-2 py-2 mb-0\" role=\"toolbar\" [id]=\"editorId+'toolbar'\"\r\n [style.background]=\"themeModeBgClr()\" aria-label=\"Toolbar with button groups\"\r\n style=\"border-top-left-radius: 20px !important; border-top-right-radius: 20px !important;\">\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Header Options\">\r\n <!-- <div class=\"dropdown\">\r\n <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff; width: 150px; border: 2px solid #7D6D6D !important;\" (change)=\"onFormatChange($event)\">\r\n <option [value]=\"'<h1>'\">Heading 1</option>v\r\n <option [value]=\"'<h2>'\">Heading 2</option>\r\n <option [value]=\"'<h3>'\">Heading 3</option>\r\n <option [value]=\"'<h4>'\">Heading 4</option>\r\n <option [value]=\"'<h5>'\">Heading 5</option>\r\n <option [value]=\"'<h6>'\">Heading 6</option>\r\n <option selected [value]=\"'<p>'\">Normal</option>\r\n </select>\r\n </div> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button\r\n class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\" ngbDropdownToggle>\r\n <span>{{selectedFormatBlock | titlecase}}</span> <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\"\r\n [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h1>')\">\r\n <h1>Heading 1</h1>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h2>')\">\r\n <h2>Heading 2</h2>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h3>')\">\r\n <h3>Heading 3</h3>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h4>')\">\r\n <h4>Heading 4</h4>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h5>')\">\r\n <h5>Heading 5</h5>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<h6>')\">\r\n <h6>Heading 6</h6>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" [style.color]=\"themeModeClr()\"\r\n (click)=\"format('formatBlock', editorId, '<p>')\">\r\n <p>Normal</p>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div ngbDropdown class=\"dropdown\">\r\n <button class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" style=\"width: 100px\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\" [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\" (click)=\"changeFont(font)\"\r\n [style.color]=\"themeModeClr()\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div> -->\r\n <div class=\"btn-group els-button-group\" role=\"group\" aria-label=\"Font Options\">\r\n <!-- <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff;border: 2px solid #7D6D6D !important;\" \r\n [(ngModel)]=\"selectedFont\" (change)=\"changeFont($event)\">\r\n <option class=\"els-form-option\" *ngFor=\"let font of fonts\" [value]=\"font\">{{ font }}</option>\r\n </select> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button\r\n class=\"btn btn-white els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" style=\"width: 100px\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\"\r\n [style.border]=\"themeMode()\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\"\r\n (click)=\"changeFont(font)\" [style.color]=\"themeModeClr()\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"py-0\" style=\"height: fit-content;\" [style.color]=\"themeModeClr()\">\r\n <div class=\"btn-group els-button-group mr-2 \" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-sm els-toolbar-button\" [class.active]=\"isBoldActive\"\r\n (click)=\"format('bold', editorId)\">\r\n <i class=\"mdi mdi-format-bold\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isItalicActive\"\r\n (click)=\"format('italic', editorId)\">\r\n <i class=\"mdi mdi-format-italic\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isUnderlineActive\"\r\n (click)=\"format('underline', editorId)\">\r\n <i class=\"mdi mdi-format-underline\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isStrikethroughActive\"\r\n (click)=\"format('strikethrough', editorId)\">\r\n <i class=\"mdi mdi-format-strikethrough-variant\"></i>\r\n </button>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Text Color\">\r\n <!-- <input type=\"color\" id=\"textColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setTextColor($event)\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"position: relative;\"\r\n (click)=\"openColorPicker('textColorPicker')\">\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\" [style.color]=\"selectedTextColor\"></i>\r\n </button> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\"\r\n [style.color]=\"selectedTextColor\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setTextColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Background Color\" style=\"position: relative;\">\r\n <!-- <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [style.color]=\"backgroundColor\"\r\n (click)=\"openColorPicker('bgColorPicker')\">\r\n <i class=\"mdi mdi-alpha-a-box\"></i>\r\n </button>\r\n <input type=\"color\" id=\"bgColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setBackgroundColor($event)\"> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-alpha-a-box\" [style.color]=\"backgroundColor\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"vertical-line ms-2 border\" [style.border-left]=\"themeModeClrVerticalLine()\"></div>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertOrderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-numbered\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertUnorderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-bulleted\"></i></button>\r\n <!-- <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button arrow-none text-secondary\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-align-left \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 3px;\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyLeft', editorId)\"><i class=\"mdi mdi-format-align-left\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyCenter', editorId)\"><i\r\n class=\"mdi mdi-format-align-center\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyRight', editorId)\"><i\r\n class=\"mdi mdi-format-align-right\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyFull', editorId)\"><i\r\n class=\"mdi mdi-format-align-justify\"></i></button>\r\n </div>\r\n </div> -->\r\n <div class=\"vertical-line ms-2 border\" [style.border-left]=\"themeModeClrVerticalLine()\"></div>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSubscriptActive\"\r\n (click)=\"format('subscript', editorId)\">\r\n <i class=\"mdi mdi-format-subscript\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSuperscriptActive\"\r\n (click)=\"format('superscript', editorId)\">\r\n <i class=\"mdi mdi-format-superscript\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-outline-primary arrow-none els-toolbar-button border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-fill\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\"\r\n (onChangeComplete)=\"setCanvasBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group-2 mr-3\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"getToday()\">Date</button>\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"insertPageNumber()\">Page\r\n No</button>\r\n\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addLink()\"><i\r\n class=\"mdi mdi-link-variant\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"insertsImage(editorId)\"><i\r\n class=\"mdi mdi-image\"></i></button>\r\n <input type=\"file\" id=\"imageInput\" style=\"display: none;\" (change)=\"handleImageUpload($event)\">\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <!-- <button class=\"btn btn-white els-toolbar-button\" (click)=\"toggleTableBorders()\"><i \r\n class=\"mdi\" [ngClass]=\"{ isTableBordered ? 'mdi-border-none' : 'mdi-border-all' }\"></i>\r\n </button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"toggleTableBorders()\">\r\n <i class=\"mdi\" [ngClass]=\"isTableBordered ? 'mdi-border-none' : 'mdi-border-all'\"></i>\r\n </button>\r\n\r\n <!-- <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"deleteRow()\"><i\r\n class=\"mdi mdi-table-row-remove\"></i></button> -->\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteRow()\"><i class=\"mdi mdi-table-row-remove\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button>\r\n </div> -->\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"undo()\">\r\n <i class=\"mdi mdi-undo\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"redo()\">\r\n <i class=\"mdi mdi-redo\"></i>\r\n </button>\r\n\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <!-- <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"clearTextEditor()\">\r\n <i class=\"mdi mdi-close-circle\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div contenteditable=\"true\" [id]=\"editorId\" class=\"els-border p-3\" #editorHeader style=\"position: relative !important; \r\n height: 130px; \r\n max-width: 100%; \r\n overflow: hidden; \r\n border-bottom-left-radius: 20px !important; \r\n border-bottom-right-radius: 20px !important; \r\n border-bottom-left-radius: 20px !important;\" [style.border-top]=\"themeModeBorderTop()\"\r\n [ngStyle]=\"{'font-family': selectedFont, 'font-size': selectedFontSize + 'px'}\" [style]=\"style\"\r\n contenteditable=\"true\" (input)=\"onModelChange($event)\" placeholder=\"Insert text here ...\"\r\n (mouseup)=\"onTextSelect($event)\" [innerHTML]=\"sanitizedContent\" (paste)=\"onPaste($event)\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (click)=\"checkTableSelection($event)\">\r\n </div>\r\n <table *ngIf=\"parsedTable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of parsedTable.headers\">{{ header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of parsedTable.rows\">\r\n <td *ngFor=\"let cell of row\">{{ cell }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>", styles: ["*{font-family:Noto Sans Telugu UI,sans-serif}#editor{min-height:125px;max-height:125px;overflow-y:auto}#editor img{max-width:100%;height:auto}.bubble-toolbar{position:absolute;background-color:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 5px #00000026;z-index:1000;display:none}.els-text-editor{box-sizing:border-box}.els-btn-toolbar{width:\"1028px\"}.els-toolbar-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.els-toolbar-button-2{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:100px}.els-toolbar-dropdown-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;color:#fff}.els-toolbar-dropdown-button:focus{outline:none}.els-form-select{cursor:pointer;display:inline-block;height:100%;padding:2px 5px 2px 8px;position:relative;width:100%;border:none;color:#000}.els-button-group{margin-right:15px}.els-form-select:focus{outline:none}.els-border{border:#353343}.els-border:focus{outline:none}.els-dropdown-item{width:50px!important}.els-toolbar-button.active,.btn-toolbar .btn.active,.btn-toolbar .btn:hover{color:#06c}.dropdown-toggle:after{display:none}.table-container{overflow-x:auto;width:100%}table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse;table-layout:fixed}table td,table th{padding:.75rem;vertical-align:top;border:1px solid #dee2e6;word-wrap:break-word}@media (max-width: 576px){table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;border-spacing:0}table thead,table tbody,table tr,table th,table td{display:block}table thead tr{position:absolute;top:-9999px;left:-9999px}table tr{margin-bottom:.625rem;border:1px solid #ccc}table td,table th{border:none;border-bottom:1px solid #ddd;position:relative;padding-left:50%;white-space:normal;text-align:left}table td:before,table th:before{position:absolute;top:.75rem;left:.75rem;width:45%;padding-right:.75rem;white-space:nowrap;text-align:left;font-weight:700}}table.resizable{overflow:hidden;resize:both}.btn-group .btn{display:flex;align-items:center;justify-content:center}.btn-group .mdi{font-size:18px}.icon-with-underline{text-decoration:underline}pre{background-color:#f0f0f0;border:1px solid #ccc;border-radius:5px;overflow-x:auto}code{display:block;white-space:pre-wrap;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#888;border-radius:10px;cursor:pointer}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#555}.custom-scrollbar::-webkit-scrollbar-track{background:transparent;border-radius:10px}.pasted-table{border-collapse:collapse;width:100%}.pasted-table td{border:1px solid black;padding:8px}.pasted-table tr:nth-child(even){background-color:#f2f2f2}.pasted-table tr:hover{background-color:#ddd}.vertical-line{height:28px;margin:0 auto}.els-text-format{font-weight:800!important}.els-text-format>button{color:#000!important}.els-text-format>button:hover{background-color:#7d6d6d!important;color:#fff!important}\n"] }]
1240
1216
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.Renderer2 }, { type: i2.DomSanitizer }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { dropdown: [{
1241
1217
  type: ViewChild,
1242
1218
  args: [NgbDropdown, { static: true }]
@@ -1267,4 +1243,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1267
1243
  }], editorTextClear: [{
1268
1244
  type: Output
1269
1245
  }] } });
1270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWwtaGVhZGVyLWFuZC1mb290ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZWwtaGVhZGVyLWFuZC1mb290ZXIvc3JjL2xpYi9lbC1oZWFkZXItYW5kLWZvb3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lbC1oZWFkZXItYW5kLWZvb3Rlci9zcmMvbGliL2VsLWhlYWRlci1hbmQtZm9vdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQTRCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SyxPQUFPLEVBQXFDLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7O0FBWXpELE1BQU0sT0FBTywwQkFBMEI7SUE2RXJDLFlBQ1UsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLFFBQW1CLEVBQ25CLFNBQXVCLEVBQ3ZCLEdBQXNCO1FBSnRCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE5RXZCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLFVBQUssR0FBWSxLQUFLLENBQUM7UUFJdkIsZ0JBQVcsR0FBZ0MsT0FBTyxDQUFDO1FBQ2xELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDOUMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMv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QU8sSUFBSSxNQUFNLEVBQUU7WUFDckIsT0FBTyw4QkFBOEIsQ0FBQTtTQUN0QzthQUFNO1lBQ0wsT0FBTyw4QkFBOEIsQ0FBQTtTQUN0QztJQUNILENBQUM7O3VIQTMwQ1UsMEJBQTBCOzJHQUExQiwwQkFBMEIsa2JBTjFCLENBQUM7WUFDVixPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLENBQUM7WUFDekQsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLG9FQUlRLFdBQVcsbUZDbEJ2QixranJCQStTTTsyRkQvUk8sMEJBQTBCO2tCQVZ0QyxTQUFTOytCQUNFLHNCQUFzQixhQUdyQixDQUFDOzRCQUNWLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDOzRCQUN6RCxLQUFLLEVBQUUsSUFBSTt5QkFDWixDQUFDOzZNQUl1QyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRTlCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2FmZUh0bWwsIERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOZ2JEcm9wZG93biB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWwtaGVhZGVyLWFuZC1mb290ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZWwtaGVhZGVyLWFuZC1mb290ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbC1oZWFkZXItYW5kLWZvb3Rlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWxIZWFkZXJBbmRGb290ZXJDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIEVsSGVhZGVyQW5kRm9vdGVyQ29tcG9uZW50IGltcGxlbWVudHMgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuIFxuIEBWaWV3Q2hpbGQoTmdiRHJvcGRvd24sIHsgc3RhdGljOiB0cnVlIH0pIGRyb3Bkb3duITogTmdiRHJvcGRvd247XG5cbiAgQElucHV0KCkgZWRpdG9ySWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlZGl0b3JUZXh0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZWRpdG9yRnJvbTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVkaXRvckFjdGlvbjogYW55O1xuICBASW5wdXQoKSBzdHlsZTogYW55O1xuICBASW5wdXQoKSBiZ0NvbG9yOiBhbnk7XG4gIEBJbnB1dCgpIHRvb2xiYXJNb2RlOiAnZml4ZWQnIHwgJ2J1YmJsZScgfCAnbm9uZScgPSAnZml4ZWQnO1xuICBAT3V0cHV0KCkgZWRpdG9yVGV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgZWRpdG9yQWN0aW9uUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVkaXRvckNvbG91ckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIFxuICBAT3V0cHV0KCkgZWRpdG9yVGV4dENsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgc2FuaXRpemVkQ29udGVudCE6IFNhZmVIdG1sO1xuXG5cbiAgc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgdG9vbGJhclRvcCA9IDA7XG4gIHRvb2xiYXJMZWZ0ID0gMDtcblxuICBmb250cyA9IFsnQXJpYWwnLCAnQ291cmllciBOZXcnLCAnR2VvcmdpYScsICdUaW1lcyBOZXcgUm9tYW4nLCAnVmVyZGFuYSddO1xuICBmb250U2l6ZXMgPSBbMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjQsIDI4LCAzMiwgMzZdO1xuICBzZWxlY3RlZEZvbnQgPSAnQXJpYWwnO1xuICBzZWxlY3RlZEZvbnRTaXplID0gMTQ7XG4gIGlzVGFibGVTZWxlY3RlZCA9IGZhbHNlO1xuICB0YWJsZUFkZGVkID0gZmFsc2U7XG4gIHNlbGVjdGVkVGFibGU6IEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgaXNQbGFjZWhvbGRlclZpc2libGUgPSB0cnVlO1xuICBzZWxlY3RlZENlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIFxuICBpc0JvbGRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJdGFsaWNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVbmRlcmxpbmVBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTdHJpa2V0aHJvdWdoQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3Vic2NyaXB0QWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3VwZXJzY3JpcHRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNUYWJsZUJvcmRlcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VsZWN0ZWRGb3JtYXRCbG9jazogc3RyaW5nID0gJ25vcm1hbCdcblxuICB1bmRvU3RhY2s6IHN0cmluZ1tdID0gW107XG4gIHJlZG9TdGFjazogc3RyaW5nW10gPSBbXTtcbiAgaGlzdG9yeTogc3RyaW5nW10gPSBbXTtcbiAgaGlzdG9yeUluZGV4ID0gLTE7XG5cbiAgc2VsZWN0ZWRJbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBpbWFnZUVkaXRVcmw6IHN0cmluZyA9ICcnO1xuICBpbWFnZVBvc2l0aW9uWCA9IDA7XG4gIGltYWdlUG9zaXRpb25ZID0gMDtcbiAgaW1hZ2VSZXNpemVTdGFydFggPSAwO1xuICBpbWFnZVJlc2l6ZVN0YXJ0WSA9IDA7XG4gIGltYWdlUmVzaXplU3RhcnRXaWR0aCA9IDA7XG4gIGltYWdlUmVzaXplU3RhcnRIZWlnaHQgPSAwO1xuICBpbWFnZVJlc2l6ZURpcmVjdGlvbjogJ3RvcExlZnQnIHwgJ3RvcFJpZ2h0JyB8ICdib3R0b21MZWZ0JyB8ICdib3R0b21SaWdodCcgfCBudWxsID0gbnVsbDtcblxuICAvLyBlZGl0b3JUZXh0MSA9IGBgO1xuICBzZWxlY3RlZFRleHRDb2xvcjogYW55O1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG4gIGNvbG9yOiBhbnkgPSAnI2RkZCc7XG4gIGNvbG9yRm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcbiAgYmFja2dyb3VuZENvbG9yOiBhbnk7XG4gIHNlbGVjdGVkSXRlbUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBwYXJzZWRUYWJsZTogeyBoZWFkZXJzOiBzdHJpbmdbXSwgcm93czogc3RyaW5nW11bXSB9IHwgbnVsbCA9IG51bGw7XG5cbiAgaXNGdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIHRvZGF5OiBzdHJpbmcgPSAnJztcbiAgQ2FudmFzQ29sb3I6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHsgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2JnQ29sb3InXSkge1xuICAgICAgY29uc3QgZXZlbnQgPSB7IGNvbG9yOnsgaGV4IDogdGhpcy5iZ0NvbG9yfSB9XG4gICAgICB0aGlzLnNldENhbnZhc0JhY2tncm91bmRDb2xvcihldmVudCwgdGhpcy5lZGl0b3JJZClcbiAgICAgIC8vIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAgICAgLy8gaWYgKGVkaXRvcikge1xuICAgICAgLy8gICBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5iZ0NvbG9yO1xuICAgICAgLy8gfVxuICAgIH1cbiAgICAvLyBlbHNlIHtcbiAgICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuXG4gICAgLy8gICBpZiAoZWRpdG9yKSB7XG4gICAgLy8gICAgIGVkaXRvci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJnQ29sb3I/IHRoaXMuYmdDb2xvciA6IHRoaXMudGhlbWVNb2RlQmdDbHIoKTtcbiAgICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2JhY2tDb2xvcicsIHRydWUsIHRoaXMudGhlbWVNb2RlQmdDbHIoKSlcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgfVxuICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuICAgIHRoaXMuY2hlY2tQbGFjZWhvbGRlcigpO1xuICAgICB0aGlzLnNldHVwSGlzdG9yeSgpOyBcbiAgICAgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRfRnVuYyh0aGlzLmVkaXRvclRleHQpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja0FjdGl2ZVN0YXRlcygpO1xuICAgICAgdGhpcy5jaGVja0Zvcm1hdEJsb2NrKHRoaXMuZWRpdG9ySWQpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkQ2xpY2tMaXN0ZW5lclRvSW1hZ2VzKCk7XG4gICAgdGhpcy5hZGRDbGlja0xpc3RlbmVyVG9FbGVtZW50cygpO1xuXG4gICAgXG4gICAgLy8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2hpbGl0ZUNvbG9yJywgdHJ1ZSwgdGhpcy50aGVtZU1vZGVCZ0NscigpKVxuICAgIC8vIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgLy8gICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShwYXJhbXNbJ2RhdGEnXSk7XG4gICAgLy8gICBpZiAoZGF0YS5lZGl0ZWRJTUcpIHtcbiAgICAvLyAgICAgY29uc3QgaW1nVXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnKTtcbiAgICAvLyAgICAgaWYgKGltZ1VybCkge1xuICAgIC8vICAgICAgIHRoaXMucmVwbGFjZUltYWdlU3JjKGltZ1VybCwgZGF0YS5pbmRleC5pbmRleClcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcpO1xuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgICAgICAgICBcbiAgICBcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvclRleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuICAgICAgdGhpcy5pbml0X0Z1bmModGhpcy5lZGl0b3JUZXh0KTtcbiAgICB9XG4gIH1cblxuICAvLyBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcbiAgLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIC8vICAgaWYgKGVkaXRvcikge1xuICAvLyAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gIC8vICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgLy8gICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAvLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IHRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAvLyAgICAgICAgIHRoaXMuaW1hZ2VFZGl0VXJsID0gdGhpcy5zZWxlY3RlZEltYWdlLnNyYztcbiAgLy8gICAgICAgICAvLyBQb3NpdGlvbiB0aGUgZWRpdCBidXR0b24gbmVhciB0aGUgc2VsZWN0ZWQgaW1hZ2VcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcbiAgLy8gICB9XG4gIC8vIH1cbiAgXG4gIHByaXZhdGUgYWRkQ2xpY2tMaXN0ZW5lclRvSW1hZ2VzKCkge1xuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuXG4gICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGltYWdlXG4gICAgICAgIGNvbnN0IGltYWdlcyA9IGVkaXRvci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGltYWdlc1tpXSA9PT0gdGhpcy5zZWxlY3RlZEltYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xuICAgICAgICAgIHRoaXMub25UZXh0U2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgYWRkQ2xpY2tMaXN0ZW5lclRvRWxlbWVudHMoKSB7XG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIC8vIEhhbmRsZSBpbWFnZXNcbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuaW1hZ2VFZGl0VXJsID0gdGhpcy5zZWxlY3RlZEltYWdlLnNyYztcblxuICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpbWFnZVxuICAgICAgICBjb25zdCBpbWFnZXMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpbWFnZXNbaV0gPT09IHRoaXMuc2VsZWN0ZWRJbWFnZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGFyZ2V0LmNsb3Nlc3QoJ3RhYmxlJykgYXMgSFRNTFRhYmxlRWxlbWVudDtcblxuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YXJnZXQudGFnTmFtZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoY2VsbHNbaV0gPT09IHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1AnIHx8IHRhcmdldC50YWdOYW1lID09PSAnU1BBTicgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKSB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFyZ2V0LnRhZ05hbWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFncmFwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocGFyYWdyYXBoc1tpXSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICB9XG5cbnJlcGxhY2VJbWFnZVNyYyhuZXdTcmM6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIGVkaXRvci5mb2N1cygpXG4gICAgY29uc3QgaW1hZ2VzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdJTUcnKTtcblxuICAgIGlmIChpbmRleCA+PSAwICkge1xuICAgICAgaW1hZ2VzW2luZGV4XS5zZXRBdHRyaWJ1dGUoJ3NyYycsIG5ld1NyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgSW5kZXggJHtpbmRleH0gaXMgb3V0IG9mIGJvdW5kcy4gVG90YWwgaW1hZ2VzOiAke2ltYWdlcy5sZW5ndGh9YCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZCcpO1xuICB9XG59XG5cblxuXG4gIHByaXZhdGUgaW5pdEVkaXRvcigpIHtcbiAgICAvLyBJbml0aWFsaXplIGVkaXRvciBjb250ZW50IGFuZCBsaXN0ZW5lcnNcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcblxuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLmVkaXRvclRleHQ7XG4gICAgICAvLyBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy50aGVtZU1vZGVCZ0NscigpO1xuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBIYW5kbGUgdGhlIGRpc2FibGVkIHN0YXRlIGlmIG5lY2Vzc2FyeVxuICB9XG5cbiAgLy8gb25Nb2RlbENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gIC8vICAgaWYgKHZhbHVlKSB7XG4gIC8vICAgICBjb25zdCBWQUxVRSA9IHZhbHVlXG4gIC8vICAgICB0aGlzLmVkaXRvclRleHQgPSB0aGlzLm1haW5DYW52YXMoVkFMVUUpO1xuICAvLyAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLm1haW5DYW52YXMoVkFMVUUpKTtcbiAgLy8gICAgIHRoaXMuZWRpdG9yVGV4dENoYW5nZS5lbWl0KHRoaXMubWFpbkNhbnZhcyhWQUxVRSkpO1xuICAvLyAgICAgLy8gICAgIHRoaXMuZWRpdG9yVGV4dCA9IGA8ZGl2IHN0eWxlPVwicGFkZGluZzogMTBweCA2MHB4O1wiPiR7dGhpcy5tYWluQ2FudmFzKFZBTFVFKX08L2Rpdj5gO1xuICAvLyAgICAgLy8gdGhpcy5vbkNoYW5nZShgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDEwcHggNjBweDtcIj4ke3RoaXMubWFpbkNhbnZhcyhWQUxVRSl9PC9kaXY+YCk7XG4gIC8vICAgICAvLyB0aGlzLmVkaXRvclRleHRDaGFuZ2UuZW1pdChgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDEwcHggNjBweDtcIj4ke3RoaXMubWFpbkNhbnZhcyhWQUxVRSl9PC9kaXY+YCk7XG4gICAgICBcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcbiAgLy8gICB9XG4gIC8vIH1cbiAgXG5vbk1vZGVsQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgY29uc3QgdmFsdWUgPSBldmVudDsgLy8gR2V0IHRoZSBpbm5lckhUTUwgY29udGVudFxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBjYW52YXNIVE1MID0gdGhpcy5tYWluQ2FudmFzKHZhbHVlKTsgLy8gR2V0IHRoZSB1cGRhdGVkIGNvbnRlbnQgd2l0aCBzdHlsZXNcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKVxuICAgIGNvbnN0IGhhc1BhZGRpbmcgPSBjYW52YXNIVE1MLmluY2x1ZGVzKCdwYWRkaW5nOiAxMHB4IDYwcHg7Jyk7XG4gICAgdGhpcy5lZGl0b3JUZXh0ID0gaGFzUGFkZGluZ1xuICAgICAgPyBjYW52YXNIVE1MXG4gICAgICA6IGAke3ZhbHVlfWA7XG5cbiAgICAvLyB0aGlzLmVkaXRvclRleHRDaGFuZ2UuZW1pdCh0aGlzLm1haW5DYW52YXModmFsdWUpKVxuICAgIC8vIHRoaXMuZWRpdG9yVGV4dCA9IGhhc1BhZGRpbmdcbiAgICAvLyAgID8gY2FudmFzSFRNTFxuICAgIC8vICAgOiBgPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7IGVkaXRvcj8uc3R5bGUuYmFja2dyb3VuZENvbG9yfHwgdGhpcy5iZ0NvbG9yID8gdGhpcy5iZ0NvbG9yIDogdGhpcy50aGVtZU1vZGVCZ0Nscn1cIj4ke3ZhbHVlfTwvZGl2PmA7XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZWRpdG9yVGV4dCk7XG4gICAgdGhpcy5lZGl0b3JUZXh0Q2hhbmdlLmVtaXQodGhpcy5lZGl0b3JUZXh0KTtcblxuICB9IGVsc2Uge1xuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIH1cbn1cblxuXG4gIGFwcGx5SW1hZ2VTdHlsZXMoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gY29udGVudDtcbiAgICBjb25zdCBpbWFnZXMgPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnaW1nJyk7XG4gICAgaW1hZ2VzLmZvckVhY2goaW1nID0+IHtcbiAgICAgIGlmIChpbWcuc3R5bGUubWF4V2lkdGggPj0gJzcwMHB4Jykge1xuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnNzAwcHgnO1xuICAgICAgICAvLyBpbWcud2lkdGggPSAzMDA7XG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICBpbml0X0Z1bmMoaHRtbDogYW55KSB7XG4gICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGVkaXRvci5mb2N1cygpXG4gICAgICBjb25zdCBjb2xvciA9IHRoaXMuYmdDb2xvclxuICAgICAgZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yID8gY29sb3IgOiB0aGlzLnRoZW1lTW9kZUJnQ2xyKCk7XG4gICAgICBjb25zb2xlLmxvZygnYmcgQ29sb3IgPT4gJywgZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvcilcbiAgICAvLyB9XG4gICAgLy8gaWYgKGVkaXRvcikge1xuICAgICAgY29uc3QgZXhpc3RpbmdUYWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgaWYgKGV4aXN0aW5nVGFibGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0EgdGFibGUgYWxyZWFkeSBleGlzdHMuIE5vIG5ldyB0YWJsZSB3aWxsIGJlIGFkZGVkLicpO1xuICAgICAgICB0aGlzLnRvZ2dsZVRhYmxlQm9yZGVycygpXG4gICAgICAgICAvLyBFeGl0IGlmIGEgdGFibGUgaXMgYWxyZWFkeSBwcmVzZW50XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChodG1sKSB7XG4gICAgICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZCk7XG4gICAgICBpZiAoZWRpdG9yKSB7IFxuICAgICAgICBlZGl0b3IuZm9jdXMoKVxuICAgICAgICAvLyBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy50aGVtZU1vZGVCZ0NscigpO1xuICAgICAgICAgdGhpcy5zZXRFZGl0b3JDb250ZW50KGh0bWwpO1xuXG4gICAgICAvLyBTZXQgdXAgYSBNdXRhdGlvbk9ic2VydmVyIHRvIGhhbmRsZSBjb250ZW50IGNoYW5nZXNcbiAgICAgIHRoaXMuc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcik7XG5cbiAgICAgIC8vIE1vdmUgdGhlIGNhcmV0IHRvIHRoZSBlbmQgYWZ0ZXIgaW5pdGlhbCBjb250ZW50IHNldHVwXG4gICAgICB0aGlzLm1vdmVDYXJldFRvRW5kKGVkaXRvcik7XG4gICAgICAgIC8vIGVkaXRvci5mb2N1cygpXG4gICAgICAgIC8vIGVkaXRvci5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICAvLyB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xuICAgICAgICAvLyBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5zYW5pdGl6ZWRDb250ZW50IGFzIHN0cmluZztcbiAgICAgICAgLy8gZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICAvLyAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgLy8gICAgIGVkaXRvci5mb2N1cygpXG4gICAgICAgIC8vICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEVkaXRvckNvbnRlbnQoaHRtbDogc3RyaW5nKSB7XG4gIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIC8vIFNhbml0aXplIGFuZCBhcHBseSBzdHlsZXMgdG8gdGhlIEhUTUxcbiAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xuICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLnNhbml0aXplZENvbnRlbnQgYXMgc3RyaW5nO1xuICB9XG59XG5cbnByaXZhdGUgc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgLy8gTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCBhZnRlciBjb250ZW50IGNoYW5nZXNcbiAgICB0aGlzLm1vdmVDYXJldFRvRW5kKGVkaXRvcik7XG4gICAgLy8gVXBkYXRlIG1vZGVsIHdpdGggdGhlIGN1cnJlbnQgY29udGVudFxuICAgIHRoaXMub25Nb2RlbENoYW5nZShlZGl0b3IuaW5uZXJIVE1MKTtcbiAgfSk7XG5cbiAgb2JzZXJ2ZXIub2JzZXJ2ZShlZGl0b3IsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xufVxuXG5wcml2YXRlIG1vdmVDYXJldFRvRW5kKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcbiAgLy8gY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAvLyBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIFxuICAvLyBpZiAoZWRpdG9yLmxhc3RDaGlsZCkge1xuICAvLyAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpO1xuICAvLyAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIGVuZFxuICAvLyAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIC8vICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gIC8vIH1cbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoc2VsZWN0aW9uPy5yYW5nZUNvdW50KSB7XG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoZWRpdG9yLmNvbnRhaW5zKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkge1xuICAgICAgcmV0dXJuIHJhbmdlLmNsb25lUmFuZ2UoKTsgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGNhcmV0IHJhbmdlXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuICAvLyBmb3JtYXQoY29tbWFuZDogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xuICAvLyAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCB2YWx1ZSA/PyAnJyk7XG4gIC8vICAgLy8gIGlmIChjb21tYW5kID09PSAndW5kZXJsaW5lJykge1xuICAvLyAgIC8vICAgICAvLyBUb2dnbGUgdW5kZXJsaW5lXG4gIC8vICAgLy8gICAgIGNvbnN0IGlzVW5kZXJsaW5lZCA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKCd1bmRlcmxpbmUnKTtcbiAgLy8gICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3VuZGVybGluZScsIGZhbHNlLCBpc1VuZGVybGluZWQgPyAnZmFsc2UnIDogJ3RydWUnKTtcbiAgLy8gICAvLyB9IGVsc2Uge1xuICAvLyAgIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgJycpO1xuICAvLyAgIC8vIH1cbiAgLy8gfVxuXG4gIG9uRm9ybWF0Q2hhbmdlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YTtcbiAgICB0aGlzLnNlbGVjdGVkRm9ybWF0QmxvY2sgPSB2YWx1ZTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtYXQoJ2Zvcm1hdEJsb2NrJywgdGhpcy5lZGl0b3JJZCwgdmFsdWUpO1xuICB9XG59XG5cblxuICBmb3JtYXQoY29tbWFuZDogc3RyaW5nLCBlZGl0b3JJZDogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVkaXRvcklkKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIGlmIChjb21tYW5kID09PSAnc3Vic2NyaXB0Jykge1xuICAgICAgICB0aGlzLmlzU3Vic2NyaXB0QWN0aXZlID0gIXRoaXMuaXNTdWJzY3JpcHRBY3RpdmU7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdWJzY3JpcHQnLCBmYWxzZSwgJycpO1xuICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09PSAnc3VwZXJzY3JpcHQnKSB7XG4gICAgICAgIHRoaXMuaXNTdXBlcnNjcmlwdEFjdGl2ZSA9ICF0aGlzLmlzU3VwZXJzY3JpcHRBY3RpdmU7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdXBlcnNjcmlwdCcsIGZhbHNlLCAnJyk7O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlID8/ICcnKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgdGFnID0gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bPD5dL2csICcnKVxuICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlZGl0b3JJZCArICd0b29sYmFyJyk7XG4gICAgICAgICAgaWYgKHRvb2xiYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtYXRCbG9jayA9IHRoaXMuZm9ybWF0QmxvY2tEZWNvZGUodGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgIHRoaXMuY2hlY2tBY3RpdmVTdGF0ZXMoKTtcbiAgICAgdGhpcy5jaGVja0Zvcm1hdEJsb2NrKGVkaXRvcklkKTtcbiAgfVxuXG4gIGNoZWNrQWN0aXZlU3RhdGVzKCkge1xuICAgIHRoaXMuaXNCb2xkQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2JvbGQnKTtcbiAgICB0aGlzLmlzSXRhbGljQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2l0YWxpYycpO1xuICAgIHRoaXMuaXNVbmRlcmxpbmVBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgndW5kZXJsaW5lJyk7XG4gICAgdGhpcy5pc1N0cmlrZXRocm91Z2hBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3RyaWtldGhyb3VnaCcpO1xuICAgIHRoaXMuaXNTdWJzY3JpcHRBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3Vic2NyaXB0Jyk7XG4gICAgdGhpcy5pc1N1cGVyc2NyaXB0QWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ3N1cGVyc2NyaXB0Jyk7XG4gIH1cblxuICBjaGVja0Zvcm1hdEJsb2NrKGVkaXRvcklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlZGl0b3JJZCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgY29uc3QgZm9ybWF0QmxvY2sgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRWYWx1ZSgnZm9ybWF0QmxvY2snKTtcbiAgICAgICBjb25zdCB0b29sYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdG9ySWQgKyAndG9vbGJhcicpO1xuICAgICAgaWYgKHRvb2xiYXIpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvcm1hdEJsb2NrID0gdGhpcy5mb3JtYXRCbG9ja0RlY29kZShmb3JtYXRCbG9jayk7XG4gICAgICB9XG4gICAgICAvLyBZb3UgY2FuIGZ1cnRoZXIgaGFuZGxlIHRoZSBmb3JtYXRCbG9jayB2YWx1ZSBhcyBuZWVkZWRcbiAgICB9XG4gIH1cblxuICBmb3JtYXRCbG9ja0RlY29kZShkYXRhOiBzdHJpbmcpOiBhbnkge1xuICAgIHN3aXRjaCAoZGF0YSkge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDInOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDMnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDQnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDUnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncCc6XG4gICAgICAgIHJldHVybiAnbm9ybWFsJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ25vcm1hbCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUZvbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRGb250ID0gZXZlbnRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udE5hbWUnLCBmYWxzZSwgdGhpcy5zZWxlY3RlZEZvbnQpO1xuICB9XG5cbiAgaW5zZXJ0Q29kZUJsb2NrKCkge1xuICAgIGNvbnN0IGNvZGUgPSBgXG4gICAgICA8cHJlIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1xuICAgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNXB4O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogNXB4IDEwcHg7XCI+XG4gICAgICAgIDxjb2RlIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcIiBjbGFzcz1cImxhbmd1YWdlLWh0bWxcIj5JbnNlcnQgY29kZSBoZXJlLi4uPC9jb2RlPlxuICAgICAgPC9wcmU+XG4gICAgYDtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBjb2RlKTtcbiAgfVxuXG4gIC8vIGNoYW5nZUZvbnRTaXplKGV2ZW50OiBhbnkpIHtcbiAgLy8gICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzcnKTtcbiAgLy8gICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICAvLyAgIGlmIChlZGl0b3IpIHtcbiAgLy8gICAgIGxldCBmb250RWxlbWVudHMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZvbnQnKTtcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgIGlmIChmb250RWxlbWVudHNbaV0uc2l6ZSA9PSBcIjdcIikge1xuICAvLyAgICAgICAgIGZvbnRFbGVtZW50c1tpXS5yZW1vdmVBdHRyaWJ1dGUoXCJzaXplXCIpO1xuICAvLyAgICAgICAgIGZvbnRFbGVtZW50c1tpXS5zdHlsZS5mb250U2l6ZSA9IHRoaXMuc2VsZWN0ZWRGb250U2l6ZSArICdweCc7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBcbiAgICBpZiAoc2VsZWN0ZWRUZXh0ICYmIHNlbGVjdGVkVGV4dC5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGVkVGV4dC5nZXRSYW5nZUF0KDApO1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gdGhpcy5zZWxlY3RlZEZvbnRTaXplICsgJ3B4JztcbiAgICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcbiAgICB9XG4gIH1cblxuICBhZGRMaW5rKCkge1xuICAgIGxldCB1cmwgPSBwcm9tcHQoXCJFbnRlciB0aGUgbGluayBoZXJlOiBcIiwgXCJodHRwOi8vXCIpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY3JlYXRlTGlua1wiLCBmYWxzZSwgdXJsKTtcbiAgICB9XG4gIH1cblxuICBpbnNlcnRzSW1hZ2UoZWRpdG9ySWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVkaXRvcklkKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIGxldCBpbWFnZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlSW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGltYWdlSW5wdXQpIHtcbiAgICAgICAgaW1hZ2VJbnB1dC5jbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICBoYW5kbGVJbWFnZVVwbG9hZChldmVudDogYW55KSB7XG4gIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gIGlmIChmaWxlKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWcuc3JjID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBIVE1MIHN0cmluZyB3aXRoIHRoZSBleGFjdCB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgICAgIGNvbnN0IGltZ0hUTUwgPSBgPGltZyBzcmM9XCIke2ltZy5zcmN9XCIgd2lkdGg9XCIke2ltZy53aWR0aH1cIiBoZWlnaHQ9XCIke2ltZy5oZWlnaHR9XCI+YDtcbiAgICAgICAgLy8gSW5zZXJ0IHRoZSBpbWFnZSBpbnRvIHRoZSBlZGl0b3JcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgaW1nSFRNTCk7XG4gICAgICB9O1xuICAgIH07XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gIH1cbn1cblxuICBcbiAgdGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKSB7XG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjNDE0MTQxICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICM1RjVGNUYgIWltcG9ydGFudCdcbiAgICB9XG4gIH1cblxuICB0aGVtZU1vZGVDbHJCb3JkZXJGb3JUYWJsZSgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnIzQxNDE0MSdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcjNUY1RjVGJ1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrVGFibGVTZWxlY3Rpb24oZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgbGV0IHRhcmdldCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldCAmJiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpKSB7XG4gICAgICB0aGlzLmlzVGFibGVTZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSB0YXJnZXQuY2xvc2VzdCgndGFibGUnKSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzVGFibGVTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XG4gIH1cblxuICBjaGVja1BsYWNlaG9sZGVyKCkge1xuICAgIC8vIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gICAgLy8gaWYgKGVkaXRvcikge1xuICAgIC8vICAgdGhpcy5pc1BsYWNlaG9sZGVyVmlzaWJsZSA9IGVkaXRvci5pbm5lckhUTUwgPT09ICcnIHx8IGVkaXRvci5pbm5lckhUTUwgPT09ICc8YnI+JztcbiAgICAvLyAgIGlmICh0aGlzLmlzUGxhY2Vob2xkZXJWaXNpYmxlKSB7XG4gICAgLy8gICAgIC8vIGVkaXRvci5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlclwiIHN0eWxlPVwiYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiAjMDAwMDAwXCI+SW5zZXJ0IHRleHQgaGVyZSAuLi48L3NwYW4+JztcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIGxldCBwbGFjZWhvbGRlciA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCcucGxhY2Vob2xkZXInKTtcbiAgICAvLyAgICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgLy8gICAgICAgZWRpdG9yLnJlbW92ZUNoaWxkKHBsYWNlaG9sZGVyKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgfVxuXG4gIG9uRm9jdXMoKSB7XG4gICAgLy8gbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICAvLyBpZiAoZWRpdG9yICYmIHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUpIHtcbiAgICAvLyAgIGVkaXRvci5pbm5lckhUTUwgPSAnJztcbiAgICAvLyAgIHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUgPSBmYWxzZTtcbiAgICAvLyB9XG4gIH1cblxuICAvLyBjb2xvckNoYW5nZShuZXdDb2xvcjogc3RyaW5nKSB7XG4gIC8vICAgdGhpcy5jb2xvciA9IG5ld0NvbG9yO1xuICAvLyB9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMuY2hlY2tQbGFjZWhvbGRlcigpO1xuICB9XG5cbiAgYWRkUm93KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbiAgICAgIGxldCByb3cgPSB0aGlzLnNlbGVjdGVkVGFibGUuaW5zZXJ0Um93KCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjZWxsID0gcm93Lmluc2VydENlbGwoaSk7XG4gICAgICAgIGNlbGwuaW5uZXJIVE1MID0gJyZuYnNwOyc7XG4gICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZGVsZXRlUm93KCkge1xuICAvLyAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5kZWxldGVSb3coLTEpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4vLyAgIGRlbGV0ZVJvdygpIHtcbi8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuLy8gICAgIGxldCByb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aCAtIDE7IFxuLy8gICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4vLyAgICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuLy8gICAgICAgaWYgKHNlbGVjdGlvbikge1xuLy8gICAgICAgICBsZXQgcm93ID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ3RyJyk7XG4vLyAgICAgICAgIGlmIChyb3cpIHtcbi8vICAgICAgICAgICByb3dJbmRleCA9IHJvdy5yb3dJbmRleDtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgICB0aGlzLnNlbGVjdGVkVGFibGUuZGVsZXRlUm93KHJvd0luZGV4KTtcbi8vICAgfVxuLy8gfVxuXG4gIGRlbGV0ZVJvdygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSByZXR1cm47XG5cbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgIGNvbnN0IHJvdyA9IHNlbGVjdGVkTm9kZS5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KCd0cicpO1xuXG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgdGFibGUgPSByb3cuY2xvc2VzdCgndGFibGUnKTtcbiAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICB0YWJsZS5kZWxldGVSb3cocm93LnJvd0luZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4gIC8vIGFkZENvbHVtbigpIHtcbiAgLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgIGxldCBjZWxsID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uaW5zZXJ0Q2VsbCgtMSk7XG4gIC8vICAgICAgIGNlbGwuaW5uZXJIVE1MID0gJyZuYnNwOyc7XG4gIC8vICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgYWRkQ29sdW1uKCkge1xuICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgY29uc3QgY29sdW1uQ291bnQgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGggKyAxOyAvLyBOZXcgY29sdW1uIGNvdW50XG4gICAgY29uc3QgdGFibGVXaWR0aCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBtaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2x1bW5Db3VudDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjZWxsID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uaW5zZXJ0Q2VsbCgtMSk7XG4gICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xuICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSB0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCk7XG4gICAgICBjZWxsLnN0eWxlLm1pbldpZHRoID0gYCR7bWluV2lkdGh9cHhgO1xuICAgICAgY2VsbC5zdHlsZS53b3JkV3JhcCA9ICdicmVhay13b3JkJztcbiAgICAgIGNlbGwuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XG4gICAgICBjZWxsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm9ybWFsJztcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2VsbHMnIG1pbldpZHRoXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxscy5sZW5ndGg7IGorKykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS5taW5XaWR0aCA9IGAke21pbldpZHRofXB4YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4gIGRlbGV0ZUNvbHVtbigpIHtcbiAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBsZXQgY2VsbCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlPy5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KCd0ZCwgdGgnKSBhcyBIVE1MVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbC5jZWxsSW5kZXg7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uZGVsZXRlQ2VsbChjZWxsSW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4gIC8vIGRlbGV0ZUNvbHVtbigpIHtcbiAgLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmRlbGV0ZUNlbGwoLTEpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGFkanVzdFRhYmxlV2lkdGgoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5zdHlsZS53aWR0aCA9IGV2ZW50LnRhcmdldC52YWx1ZSArICdweCc7XG4gICAgfVxuICB9XG5cbiAgYWRqdXN0Q2VsbFdpZHRoKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS53aWR0aCA9IGV2ZW50LnRhcmdldC52YWx1ZSArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGp1c3RDZWxsSGVpZ2h0KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS5oZWlnaHQgPSBldmVudC50YXJnZXQudmFsdWUgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYXJldFRvRW5kKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmIChzZWwpIHtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgb3BlbkNvbG9yUGlja2VyKGlucHV0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpO1xuICAgIGlmIChpbnB1dEVsZW1lbnQpIHtcbiAgICAgIGlucHV0RWxlbWVudC5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIHNldFRleHRDb2xvcihldmVudDogYW55LCBlZGl0b3JJZDogYW55KSB7XG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgY29uc3QgY29sb3IgPSBldmVudC5jb2xvci5oZXg7XG4gICAgICB0aGlzLnNlbGVjdGVkVGV4dENvbG9yID0gY29sb3I7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgdHJ1ZSwgY29sb3IpO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2hpbGl0ZUNvbG9yJywgdHJ1ZSwgdGhpcy5iYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEJhY2tncm91bmRDb2xvcihldmVudDogYW55LCBlZGl0b3JJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgY29uc3QgY29sb3IgPSBldmVudC5jb2xvci5oZXg7XG4gICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2hpbGl0ZUNvbG9yJywgdHJ1ZSwgY29sb3IpO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIHRydWUsIHRoaXMuc2VsZWN0ZWRUZXh0Q29sb3IpO1xuICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGNvbG9yQ2hhbmdlZChldmVudDogYW55KSB7XG4gIC8vICAgdGhpcy5jb2xvciA9IGV2ZW50LmNvbG9yLmhleDsgXG4gIC8vIH1cblxuICBwdWJsaWMgbG9nRXZlbnQoZXZlbnQ6IGFueSwgdHJpZ2dlcjogYW55KSB7XG4gICAgY29uc3QgY29sb3IgPSBldmVudDtcbiAgICB0aGlzLnNldFRleHRDb2xvcihjb2xvciwgdGhpcy5lZGl0b3JJZClcbiAgICB0aGlzLnNlbGVjdGVkVGV4dENvbG9yID0gZXZlbnRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgZmFsc2UsIGV2ZW50KTtcbiAgICAvLyB0aGlzLmxvZ3MudW5zaGlmdChbdGhpcy5sb2dzLmxlbmd0aCArIDEsIHRyaWdnZXIsIGV2ZW50XSk7XG4gIH1cblxuICBlZGl0SW1hZ2UoKSB7XG4gICAgbGV0IGRhdGEgXG4gICAgc3dpdGNoICh0aGlzLmVkaXRvckZyb20pIHtcbiAgICAgIGNhc2UgJ3NlY3Rpb24tY29udGVudCc6XG4gICAgICAgIGRhdGEgPSB7IGVkaXRJTUc6IHRydWUsIGZyb206ICdodG1sRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggfTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvSU1HRWRpdG9yKGRhdGEpO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcsIEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSk7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3RleHRFZGl0b3InLCB0aGlzLmVkaXRvclRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RlbXBsYXRlJzpcbiAgICAgICAgZGF0YSA9IHsgZWRpdElNRzogdHJ1ZSwgZnJvbTogJ3RlbXBsYXRlRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggfTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvSU1HRWRpdG9yKGRhdGEpO1xuICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcDInLCBKU09OLnN0cmluZ2lmeSh0aGlzLmltYWdlRWRpdFVybCkpO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0ZW1wbGF0ZUVkaXRvcicsIHRoaXMuZWRpdG9yVGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnKTtcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJyk7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RlbXBsYXRlRWRpdG9yJyk7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RleHRFZGl0b3InKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIGlmICh0aGlzLmVkaXRvckZyb20gPT09ICdzZWN0aW9uLWNvbnRlbnQnKSB7XG4gICAgLy8gICBjb25zdCBkYXRhID0ge2VkaXRJTUc6IHRydWUsIGZyb206ICdodG1sRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXh9XG4gICAgLy8gICB0aGlzLm5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YSlcbiAgICAvLyAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wJywgSlNPTi5zdHJpbmdpZnkodGhpcy5pbWFnZUVkaXRVcmwpKVxuICAgIC8vICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndGV4dEVkaXRvcicsIHRoaXMuZWRpdG9yVGV4dClcbiAgICAvLyB9IFxuICAgIFxuICB9XG5cbiAgbmF2aWdhdGVUb0lNR0VkaXRvcihkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hZG1pbi9pbWFnZS1lZGl0b3InXSwgeyBxdWVyeVBhcmFtczoge2RhdGEgOiBKU09OLnN0cmluZ2lmeShkYXRhKX0gfSlcbiAgfVxuXG4gIC8vICBvblRleHRTZWxlY3QoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgLy8gICBpZiAodGhpcy50b29sYmFyTW9kZSA9PT0gJ2J1YmJsZScpIHtcbiAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgLy8gICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XG4gIC8vICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gIC8vICAgICAgIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gIC8vICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAvLyAgICAgICAgIHRoaXMudG9vbGJhclRvcCA9IHJlY3QuYm90dG9tICsgd2luZG93LnNjcm9sbFkgKyAxMDtcbiAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJMZWZ0ID0gcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFggKyAocmVjdC53aWR0aCAvIDIpIC0gNTA7XG4gIC8vICAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IHRydWU7XG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiBvblRleHRTZWxlY3QoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWSA9ICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBzY3JvbGxYID0gIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICB0aGlzLnRvb2xiYXJUb3AgPSByZWN0LnRvcCArIHNjcm9sbFkgLSA3NTtcbiAgICAgICAgdGhpcy50b29sYmFyTGVmdCA9IHJlY3QubGVmdCArIHNjcm9sbFggKyAocmVjdC53aWR0aCAvIDIpIC0gMzI1O1xuICAgICAgICB0aGlzLnNob3dUb29sYmFyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5cbm9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgaWYgKHRoaXMuaXNUYWJsZURhdGEocGFzdGVkVGV4dCkpIHtcbiAgICAgICAgY29uc3QgaHRtbCA9IHRoaXMuY29udmVydFRleHRUb1RhYmxlKHBhc3RlZFRleHQpO1xuICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChwYXN0ZWRUZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1RhYmxlRGF0YSh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3dzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHJvd3MubGVuZ3RoID4gMSAmJiByb3dzWzBdLnNwbGl0KCdcXHQnKS5sZW5ndGggPiAxO1xuICB9XG5cbiAgY29udmVydFRleHRUb1RhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcihyb3cgPT4gcm93LnRyaW0oKSAhPT0gJycpO1xuICAgIGNvbnN0IHRhYmxlUm93cyA9IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IHJvdy5zcGxpdCgnXFx0JykubWFwKGNlbGwgPT4gYDx0ZCBjbGFzcz1cInB4LTEgcHktMSAgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjMDAwXCI+JHtjZWxsfTwvdGQ+YCkuam9pbignJyk7XG4gICAgICByZXR1cm4gYDx0ciA+JHtjZWxsc308L3RyPmA7XG4gICAgfSkuam9pbignJyk7XG4gICAgcmV0dXJuIGA8dGFibGU+JHt0YWJsZVJvd3N9PC90YWJsZT5gO1xuICB9XG5cbiAgaW5zZXJ0SHRtbEF0Q2FyZXQoaHRtbDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmFuZ2UgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIGxldCBub2RlO1xuICAgICAgd2hpbGUgKChub2RlID0gdGVtcERpdi5maXJzdENoaWxkKSkge1xuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShmcmFnKTtcbiAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuIFxuICBwdWJsaWMgb3BlbkZ1bGxzY3JlZW4oKSB7XG4gICAgdmFyIGVsZW06IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGV4dEVkaXRvclwiKTtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IHRydWU7XG4gICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgIGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgfVxuICAgIHRoaXMuc3R5bGUgPSB7XG4gICAgICAnbWluLWhlaWdodCc6ICc5MHZoJyxcbiAgICAgICdtYXgtaGVpZ2h0JzogJzkwdmgnLFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUZ1bGxzY3JlZW4oKSB7XG4gICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICBkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpO1xuICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuc3R5bGUgPSB7XG4gICAgICAgICdtaW4taGVpZ2h0JzogJzQwMHB4JyxcbiAgICAgICAgJ21heC1oZWlnaHQnOiAnNDAwcHgnLFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5DYW52YXNDb2xvclBpY2tlcihpbnB1dElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKTtcbiAgICBpZiAoaW5wdXRFbGVtZW50KSB7XG4gICAgICBpbnB1dEVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBzZXRDYW52YXNCYWNrZ3JvdW5kQ29sb3IoZXZlbnQ6IGFueSwgZWRpdG9ySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuQ2FudmFzQ29sb3IgPSBldmVudC5jb2xvci5oZXg7XG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGxldCBjb2xvciA9ICcnO1xuICAgICAgLy8gZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMudGhlbWVNb2RlQmdDbHIoKVxuICAgICAgdGhpcy5iZ0NvbG9yID0gZXZlbnQuY29sb3IuaGV4XG4gICAgICBjb2xvciA9IGV2ZW50LmNvbG9yLmhleCBcbiAgICAgIHRoaXMuZWRpdG9yQ29sb3VyQ2hhbmdlLmVtaXQoe1xuICAgICAgICBjb25maWc6IGVkaXRvcklkLFxuICAgICAgICBjb2xvcjogdGhpcy5iZ0NvbG9yXG4gICAgICB9KVxuICAgICAgZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgICAgLy8gdGhpcy5iZ0NvbG9yID0gdGhpcy5DYW52YXNDb2xvcjtcbiAgICAgIHRoaXMubWFpbkNhbnZhcygpXG4gICAgICAvLyBvbk1vZGVsQ2hhbmdlXG4gICAgICAvLyB0aGlzLmluaXRfRnVuYyhgPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7Y29sb3J9O1wiPiR7dGhpcy5lZGl0b3JUZXh0fTwvZGl2PmApO1xuICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRvZGF5KCkge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBkYXkgPSBjdXJyZW50RGF0ZS5nZXREYXRlKCkgO1xuICAgIGNvbnN0IG1vbnRoID0gY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDE7IFxuICAgIGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBgJHt5ZWFyfS0ke21vbnRoLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0tJHtkYXkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgdGhpcy50b2RheSA9IGZvcm1hdHRlZERhdGU7XG4gICAgLy8gY29uc3QgbGFiZWwgPSBgeygke3RoaXMudG9kYXl9KX1gO1xuICAgIGNvbnN0IGxhYmVsID0gYHsoZGF0ZSl9YDtcbiAgICBjb25zdCBodG1sQ29udGVudCA9IGAgJHtsYWJlbH0gYDtcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvclRleHQgKz0gYDxkaXY+ICR7aHRtbENvbnRlbnR9IDwvZGl2PmA7XG4gICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLmVkaXRvclRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRpdG9yVGV4dCArPSBgPGRpdj4gJHtodG1sQ29udGVudH0gPC9kaXY+YDtcbiAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuZWRpdG9yVGV4dDtcbiAgICB9XG4gIH1cblxuICBpbnNlcnRQYWdlTnVtYmVyKCkge1xuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSAneyhwYWdlKX0nO1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yVGV4dCArPSBgPGRpdj4gJHtwYWdlTnVtYmVyfSA8L2Rpdj5gO1xuICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5lZGl0b3JUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkaXRvclRleHQgKz0gYDxkaXY+ICR7cGFnZU51bWJlcn0gPC9kaXY+YDtcbiAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuZWRpdG9yVGV4dDtcbiAgICB9XG4gIH1cblxuICBjbGVhclRleHRFZGl0b3IoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3JUZXh0Q2xlYXIuZW1pdCgpXG4gICAgICBsZXQgZGF0YTogYW55O1xuICAgICAgLy8gZGF0YS5jb2xvci5oZXggPSAnI2ZmZmZmZidcbiAgICAgIGRhdGEgPSB7XG4gICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgaGV4OiAnJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaGlsaXRlQ29sb3InLCB0cnVlLCB0aGlzLnRoZW1lTW9kZUJnQ2xyKCkpXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJydcbiAgICAgIHRoaXMuc2V0Q2FudmFzQmFja2dyb3VuZENvbG9yKGRhdGEsIHRoaXMuZWRpdG9ySWQpXG4gICAgfVxuICB9XG5cbiAgXG4gIHNldHVwSGlzdG9yeSgpIHtcbiAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgXG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gdGhpcy5vbklucHV0KCkpO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXQoKSB7XG4gICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgfVxuXG4gIHNhdmVTdGF0ZSgpIHtcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgXG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgY29uc3QgZWRpdG9yQ29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XG4gICAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPT09IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuaGlzdG9yeUluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgrKztcbiAgICB9XG4gIH1cbiAgdW5kbygpIHtcbiAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPiAwKSB7XG4gICAgICB0aGlzLnJlZG9TdGFjay5wdXNoKHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF0pO1xuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgtLTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICBcbiAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeUluZGV4XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWRvKCkge1xuICAgIGlmICh0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZWRvQ29udGVudCA9IHRoaXMucmVkb1N0YWNrLnBvcCgpO1xuICAgICAgdGhpcy5oaXN0b3J5LnB1c2gocmVkb0NvbnRlbnQhKTtcbiAgICAgIHRoaXMuaGlzdG9yeUluZGV4Kys7XG4gICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgXG4gICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHJlZG9Db250ZW50ITtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBtYWluQ2FudmFzKGRhdGE/OiBhbnkpIHtcbiAgLy8gICBsZXQgQkcgPSAnJ1xuICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAvLyAgIGlmIChlZGl0b3IpIHtcbiAgLy8gICAgIGVkaXRvci5mb2N1cygpXG4gIC8vICAgICBpZiAoZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvciA9PT0gJ3JnYig1MywgNTEsIDY3KScpIHtcbiAgLy8gICAgICAgQkcgPSAncmdiKDI1NSwgMjU1LCAyNTUpJ1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgQkcgPSBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGAke2RhdGF9YFxuICAvLyAgICB9XG4gIC8vICAgZWxzZSB7XG4gIC8vICAgICByZXR1cm4gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke0JHfT4ke2RhdGF9PC9kaXY+YFxuICAvLyAgICB9XG4gICAgXG4gIC8vIH1cbiAgLy8gbWFpbkNhbnZhcyhkYXRhPzogYW55KTogc3RyaW5nIHtcbiAgLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgLy8gICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5DYW52YXNDb2xvciA/IHRoaXMuQ2FudmFzQ29sb3IgOiB0aGlzLnRoZW1lTW9kZUJnQ2xyKClcbiAgLy8gICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcblxuICAvLyAgIH1cbiAgICBcbiAgLy8gICBjb25zdCBCRyA9IGVkaXRvcj8uc3R5bGU/LmJhY2tncm91bmRDb2xvcjtcbiAgLy8gcmV0dXJuIGAke2RhdGF9YDtcbiAgLy8gfVs2NzRweF1cbiAgXG4gIG1haW5DYW52YXMoZGF0YT86IGFueSk6IHN0cmluZyB7XG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuXG4gIGlmIChlZGl0b3IpIHtcbiAgICBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5DYW52YXNDb2xvciA/IHRoaXMuQ2FudmFzQ29sb3IgOiB0aGlzLnRoZW1lTW9kZUJnQ2xyKCk7XG4gICAgXG4gICAgY29uc3QgdGFibGUgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICBpZiAodGFibGUpIHtcbiAgICAgIHRhYmxlLnN0eWxlLndpZHRoID0gJzY3NHB4JzsgXG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGNvbnN0IEJHID0gZWRpdG9yPy5zdHlsZT8uYmFja2dyb3VuZENvbG9yOyBcbiAgcmV0dXJuIGAke2RhdGF9YDtcbn1cblxuICBcbiAgYWRkVGFibGUoKSB7XG4gIGNvbnN0IGNvbHMgPSAzOyAvLyBOdW1iZXIgb2YgY29sdW1uc1xuICBjb25zdCBjZWxsSGVpZ2h0ID0gJzEwMHB4JzsgLy8gU2V0IGEgZml4ZWQgaGVpZ2h0IGZvciBjZWxsc1xuXG4gIC8vIENoZWNrIGlmIGEgdGFibGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGVkaXRvclxuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIGNvbnN0IGV4aXN0aW5nVGFibGUgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICBpZiAoZXhpc3RpbmdUYWJsZSkge1xuICAgICAgY29uc29sZS5sb2coJ0EgdGFibGUgYWxyZWFkeSBleGlzdHMuIE5vIG5ldyB0YWJsZSB3aWxsIGJlIGFkZGVkLicpO1xuICAgICAgcmV0dXJuOyAvLyBFeGl0IGlmIGEgdGFibGUgaXMgYWxyZWFkeSBwcmVzZW50XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHRoZSB0YWJsZSBIVE1MXG4gICAgbGV0IHRhYmxlID0gYDx0YWJsZSBzdHlsZT1cIlxuICAgICAgd2lkdGg6IDEwMCU7IFxuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICBcIj5gO1xuXG4gICAgdGFibGUgKz0gYDx0cj5gOyAvLyBTZXQgcm93IGhlaWdodFxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcbiAgICAgIHRhYmxlICs9IGA8dGQgc3R5bGU9XCJcbiAgICAgICAgYm9yZGVyOiAke3RoaXMudGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKX07XG4gICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsgLyogQWxpZ24gdGV4dCB0byB0aGUgbGVmdCAqL1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOyAvKiBBbGlnbiBjb250ZW50IHRvIHRoZSB0b3AgKi9cbiAgICAgIFwiPiZuYnNwOzwvdGQ+YDsgLy8gVXNlIG5vbi1icmVha2luZyBzcGFjZSB0byBrZWVwIHRoZSBjZWxsIGNvbnRlbnRcbiAgICB9XG5cbiAgICB0YWJsZSArPSAnPC90cj4nO1xuICAgIHRhYmxlICs9ICc8L3RhYmxlPic7XG4gICAgdGhpcy5pc1RhYmxlQm9yZGVyZWQgPSB0cnVlO1xuICAgIC8vIEluc2VydCB0aGUgdGFibGUgaW50byB0aGUgZWRpdG9yXG4gICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgdGFibGUpO1xuXG4gICAgdGhpcy50YWJsZUFkZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrVGFibGVTZWxlY3Rpb24oKTtcbiAgfVxufVxuXG5cbiAgLy8gcmVtb3ZlVGFibGVCb3JkZXJzKCkge1xuICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuXG4gIC8vICAgaWYgKGVkaXRvcikge1xuICAvLyAgICAgY29uc3QgdGFibGUgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigndGFibGUnKTsgLy8gRmluZCB0aGUgZmlyc3QgdGFibGUgaW5zaWRlIHRoZSBlZGl0b3JcbiAgLy8gICAgIGNvbnNvbGUubG9nKCd0YWJsZSA9ICcsIHRhYmxlKTtcblxuICAvLyAgICAgaWYgKHRhYmxlKSB7XG4gIC8vICAgICAgIGNvbnN0IGNlbGxzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbCgndGQnKTsgLy8gU2VsZWN0IGFsbCB0YWJsZSBjZWxsc1xuICAvLyAgICAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gIC8vICAgICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7IC8vIFJlbW92ZSB0aGUgYm9yZGVyIGJ5IHNldHRpbmcgaXQgdG8gJ25vbmUnXG4gIC8vICAgICAgIH0pO1xuICAvLyAgICAgICBjb25zb2xlLmxvZygnVGFibGUgYm9yZGVycyByZW1vdmVkJyk7XG5cbiAgLy8gICAgICAgLy8gQ29udmVydCB0aGUgdGFibGUgZWxlbWVudCBiYWNrIHRvIEhUTUwgc3RyaW5nXG4gIC8vICAgICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRhYmxlLm91dGVySFRNTDtcblxuICAvLyAgICAgICAvLyBJbnNlcnQgdGhlIHVwZGF0ZWQgSFRNTCBpbnRvIHRoZSBlZGl0b3JcbiAgLy8gICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gIC8vICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHRhYmxlSFRNTCk7IC8vIFBhc3MgdGhlIEhUTUwgc3RyaW5nLCBub3QgdGhlIGVsZW1lbnRcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdObyB0YWJsZSBmb3VuZCB0byByZW1vdmUgYm9yZGVycycpO1xuICAvLyAgICAgfVxuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBjb25zb2xlLmxvZygnRWRpdG9yIG5vdCBmb3VuZCcpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gdG9nZ2xlVGFibGVCb3JkZXJzKCkge1xuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcblxuICBpZiAoZWRpdG9yKSB7XG4gICAgY29uc3QgdGFibGUgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigndGFibGUnKTsgLy8gRmluZCB0aGUgZmlyc3QgdGFibGUgaW5zaWRlIHRoZSBlZGl0b3JcbiAgICBpZiAodGFibGUpIHtcbiAgICAgIGNvbnN0IGNlbGxzID0gdGFibGUucXVlcnlTZWxlY3RvckFsbCgndGQnKTsgLy8gU2VsZWN0IGFsbCB0YWJsZSBjZWxsc1xuICAgICAgbGV0IGhhc0JvcmRlcnMgPSBmYWxzZTtcblxuICAgICAgLy8gQ2hlY2sgaWYgYW55IGNlbGwgY3VycmVudGx5IGhhcyBhIGJvcmRlclxuICAgICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgICBjb25zdCBib3JkZXJTdHlsZSA9IGNlbGwuc3R5bGUuYm9yZGVyOyAvLyBDaGVjayB0aGUgaW5saW5lIHN0eWxlIGZvciBib3JkZXJzXG4gICAgICAgIGlmIChib3JkZXJTdHlsZSAmJiBib3JkZXJTdHlsZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgaGFzQm9yZGVycyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgIGNvbnN0IGV4aXN0aW5nVGFibGUgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICBpZiAoZXhpc3RpbmdUYWJsZSkge1xuICAgICAgY29uc29sZS5sb2coJ0EgdGFibGUgYWxyZWFkeSBleGlzdHMuIE5vIG5ldyB0YWJsZSB3aWxsIGJlIGFkZGVkLicpO1xuICAgICAgLy8gcmV0dXJuOyAvLyBFeGl0IGlmIGEgdGFibGUgaXMgYWxyZWFkeSBwcmVzZW50XG4gICAgfVxuXG4gICAgICAvLyBUb2dnbGUgYm9yZGVyc1xuICAgICAgaWYgKGhhc0JvcmRlcnMgfHwgdGhpcy5pc1RhYmxlQm9yZGVyZWQpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGJvcmRlcnNcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJ25vbmUnOyAvLyBTZXQgYm9yZGVyIHRvICdub25lJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc1RhYmxlQm9yZGVyZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coJ1RhYmxlIGJvcmRlcnMgcmVtb3ZlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIGJvcmRlcnNcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzJweCBzb2xpZCAnK3RoaXMudGhlbWVNb2RlQ2xyQm9yZGVyRm9yVGFibGUoKTsgLy8gQWRkIGEgZGVmYXVsdCBib3JkZXIgc3R5bGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNUYWJsZUJvcmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS5sb2coJ1RhYmxlIGJvcmRlcnMgYWRkZWQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ05vIHRhYmxlIGZvdW5kIHRvIHRvZ2dsZSBib3JkZXJzJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdFZGl0b3Igbm90IGZvdW5kJyk7XG4gIH1cbn1cblxuXG5cbiAgIHRoZW1lTW9kZSgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICM0MTQxNDEgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcycHggc29saWQgI0QwRDBEMCAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZUNscigpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnI2ZmZiAhaW1wb3J0YW50J1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyMwMDAgIWltcG9ydGFudCdcbiAgICB9XG4gIH1cblxuICB0aGVtZU1vZGVCZ0NscigpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnIzI4MjgyOCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcjRjNGM0YzJ1xuICAgIH1cbiAgfVxuXG4gIHRoZW1lTW9kZUNsclZlcnRpY2FsTGluZSgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICNGRkZGRkYgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcycHggc29saWQgI0QwRDBEMCAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG5cbiAgdGhlbWVNb2RlQm9yZGVyVG9wKCkge1xuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xuICAgICAgcmV0dXJuICcycHggc29saWQgIzAwMDAwMCAhaW1wb3J0YW50J1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjZmZmZmZmICFpbXBvcnRhbnQnXG4gICAgfVxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lciBlbHMtdGV4dC1lZGl0b3IgcHgtMFwiIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjBweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImJ0bi10b29sYmFyIGVscy1idG4tdG9vbGJhciBwLTIgcHktMiBtYi0wXCIgcm9sZT1cInRvb2xiYXJcIiBbaWRdPVwiZWRpdG9ySWQrJ3Rvb2xiYXInXCJcclxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJ0aGVtZU1vZGVCZ0NscigpXCIgYXJpYS1sYWJlbD1cIlRvb2xiYXIgd2l0aCBidXR0b24gZ3JvdXBzXCJcclxuICAgICAgICBzdHlsZT1cImJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDtcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJIZWFkZXIgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImVscy1mb3JtLXNlbGVjdCBcIiBzdHlsZT1cIiBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7IGNvbG9yOiAjZmZmOyB3aWR0aDogMTUwcHg7IGJvcmRlcjogMnB4IHNvbGlkICM3RDZENkQgIWltcG9ydGFudDtcIiAoY2hhbmdlKT1cIm9uRm9ybWF0Q2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCInPGgxPidcIj5IZWFkaW5nIDE8L29wdGlvbj52XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiJzxoMj4nXCI+SGVhZGluZyAyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiJzxoMz4nXCI+SGVhZGluZyAzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiJzxoND4nXCI+SGVhZGluZyA0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiJzxoNT4nXCI+SGVhZGluZyA1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiJzxoNj4nXCI+SGVhZGluZyA2PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZCBbdmFsdWVdPVwiJzxwPidcIj5Ob3JtYWw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtZm9ybS1zZWxlY3QgYm9yZGVyIGVscy10b29sYmFyLWRyb3Bkb3duLWJ1dHRvbiBkcm9wZG93bi10b2dnbGUgdGV4dC1zdGFydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJoZWFkZXJEcm9wZG93blwiIFtzdHlsZS5ib3JkZXJdPVwidGhlbWVNb2RlKClcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NlbGVjdGVkRm9ybWF0QmxvY2sgfCB0aXRsZWNhc2V9fTwvc3Bhbj4gPGkgY2xhc3M9XCJtZGkgbWRpLWNoZXZyb24tZG93biBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duXCIgY2xhc3M9XCJlbHMtdGV4dC1mb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGhlbWVNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgZWRpdG9ySWQsICc8aDE+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgxPkhlYWRpbmcgMTwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsIGVkaXRvcklkLCAnPGgyPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj5IZWFkaW5nIDI8L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCBlZGl0b3JJZCwgJzxoMz4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+SGVhZGluZyAzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgZWRpdG9ySWQsICc8aDQ+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkhlYWRpbmcgNDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsIGVkaXRvcklkLCAnPGg1PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNT5IZWFkaW5nIDU8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCBlZGl0b3JJZCwgJzxoNj4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDY+SGVhZGluZyA2PC9oNj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgZWRpdG9ySWQsICc8cD4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5Ob3JtYWw8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLWZvcm0tc2VsZWN0IGJvcmRlciBlbHMtdG9vbGJhci1kcm9wZG93bi1idXR0b24gZHJvcGRvd24tdG9nZ2xlIHRleHQtc3RhcnRcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJoZWFkZXJEcm9wZG93blwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDg1cHg7IGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDtcIiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57e3NlbGVjdGVkRm9udCB8XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVjYXNlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktY2hldnJvbi1kb3duIFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duXCIgY2xhc3M9XCJlbHMtdGV4dC1mb3JtYXRcIiBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRzXCIgKGNsaWNrKT1cImNoYW5nZUZvbnQoZm9udClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZvbnQgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJGb250IE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPCEtLSA8c2VsZWN0IGNsYXNzPVwiZWxzLWZvcm0tc2VsZWN0IFwiIHN0eWxlPVwiIGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsgY29sb3I6ICNmZmY7Ym9yZGVyOiAycHggc29saWQgIzdENkQ2RCAhaW1wb3J0YW50O1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRm9udFwiIChjaGFuZ2UpPVwiY2hhbmdlRm9udCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gY2xhc3M9XCJlbHMtZm9ybS1vcHRpb25cIiAqbmdGb3I9XCJsZXQgZm9udCBvZiBmb250c1wiIFt2YWx1ZV09XCJmb250XCI+e3sgZm9udCB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy1mb3JtLXNlbGVjdCBib3JkZXIgZWxzLXRvb2xiYXItZHJvcGRvd24tYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSB0ZXh0LXN0YXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cImhlYWRlckRyb3Bkb3duXCIgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIiBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiA4NXB4OyBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3tzZWxlY3RlZEZvbnQgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZWNhc2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktY2hldnJvbi1kb3duIFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25cIiBjbGFzcz1cImVscy10ZXh0LWZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgKm5nRm9yPVwibGV0IGZvbnQgb2YgZm9udHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlRm9udChmb250KVwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmb250IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS0wXCIgc3R5bGU9XCJoZWlnaHQ6IGZpdC1jb250ZW50O1wiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMiBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0JvbGRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2JvbGQnLCBlZGl0b3JJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWJvbGRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzSXRhbGljQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnLCBlZGl0b3JJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWl0YWxpY1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNVbmRlcmxpbmVBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3VuZGVybGluZScsIGVkaXRvcklkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtdW5kZXJsaW5lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N0cmlrZXRocm91Z2hBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnLCBlZGl0b3JJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN0cmlrZXRocm91Z2gtdmFyaWFudFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJ0ZXh0Q29sb3JQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwMCU7IGxlZnQ6IDA7IHotaW5kZXg6IDEwMDsgb3BhY2l0eTogMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VGV4dENvbG9yKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoJ3RleHRDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jb2xvci10ZXh0IGljb24td2l0aC11bmRlcmxpbmVcIiBbc3R5bGUuY29sb3JdPVwic2VsZWN0ZWRUZXh0Q29sb3JcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInFsLWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IGVscy10b29sYmFyLWJ1dHRvbiBhcnJvdy1ub25lIHRleHQtc2Vjb25kYXJ5IGJvcmRlci1ub25lIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRyb3Bkb3duQmFzaWMxXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLXRleHQgaWNvbi13aXRoLXVuZGVybGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInNlbGVjdGVkVGV4dENvbG9yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvci1za2V0Y2ggY29sb3I9XCIjZmZmXCIgW3ByZXNldENvbG9yc109XCJbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlQ29tcGxldGUpPVwic2V0VGV4dENvbG9yKCRldmVudCwgZWRpdG9ySWQpXCI+PC9jb2xvci1za2V0Y2g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkJhY2tncm91bmQgQ29sb3JcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbc3R5bGUuY29sb3JdPVwiYmFja2dyb3VuZENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCdiZ0NvbG9yUGlja2VyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktYWxwaGEtYS1ib3hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBpZD1cImJnQ29sb3JQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwMCU7IGxlZnQ6IDA7IHotaW5kZXg6IDEwMDsgb3BhY2l0eTogMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0QmFja2dyb3VuZENvbG9yKCRldmVudClcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInFsLWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IGVscy10b29sYmFyLWJ1dHRvbiBhcnJvdy1ub25lIHRleHQtc2Vjb25kYXJ5IGJvcmRlci1ub25lIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRyb3Bkb3duQmFzaWMxXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktYWxwaGEtYS1ib3hcIiBbc3R5bGUuY29sb3JdPVwiYmFja2dyb3VuZENvbG9yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvci1za2V0Y2ggY29sb3I9XCIjZmZmXCIgW3ByZXNldENvbG9yc109XCJbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlQ29tcGxldGUpPVwic2V0QmFja2dyb3VuZENvbG9yKCRldmVudCwgZWRpdG9ySWQpXCI+PC9jb2xvci1za2V0Y2g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtbGluZSBtcy0yIGJvcmRlclwiIFtzdHlsZS5ib3JkZXItbGVmdF09XCJ0aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmUoKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRPcmRlcmVkTGlzdCcsIGVkaXRvcklkKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtbGlzdC1udW1iZXJlZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2luc2VydFVub3JkZXJlZExpc3QnLCBlZGl0b3JJZClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWxpc3QtYnVsbGV0ZWRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJxbC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gYXJyb3ctbm9uZSB0ZXh0LXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25CYXNpYzFcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1sZWZ0IFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkJhc2ljMVwiIHN0eWxlPVwid2lkdGg6IDNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIHN0eWxlPVwiY29sb3I6ICM3QTc5ODI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JywgZWRpdG9ySWQpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1sZWZ0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgc3R5bGU9XCJjb2xvcjogIzdBNzk4MjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUNlbnRlcicsIGVkaXRvcklkKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1jZW50ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBzdHlsZT1cImNvbG9yOiAjN0E3OTgyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5UmlnaHQnLCBlZGl0b3JJZClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tcmlnaHRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBzdHlsZT1cImNvbG9yOiAjN0E3OTgyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5RnVsbCcsIGVkaXRvcklkKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1qdXN0aWZ5XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2FsLWxpbmUgbXMtMiBib3JkZXJcIiBbc3R5bGUuYm9yZGVyLWxlZnRdPVwidGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdWJzY3JpcHRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N1YnNjcmlwdCcsIGVkaXRvcklkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3Vic2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N1cGVyc2NyaXB0QWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdXBlcnNjcmlwdCcsIGVkaXRvcklkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3VwZXJzY3JpcHRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInFsLWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBhcnJvdy1ub25lIGVscy10b29sYmFyLWJ1dHRvbiAgYm9yZGVyLW5vbmUgcC0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkcm9wZG93bkJhc2ljMVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLWZpbGxcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAyMDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yLXNrZXRjaCBjb2xvcj1cIiNmZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlQ29tcGxldGUpPVwic2V0Q2FudmFzQmFja2dyb3VuZENvbG9yKCRldmVudCwgZWRpdG9ySWQpXCI+PC9jb2xvci1za2V0Y2g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cC0yIG1yLTNcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgIHB4LTFcIiBzdHlsZT1cImhlaWdodDogMjRweDtcIiAoY2xpY2spPVwiZ2V0VG9kYXkoKVwiPkRhdGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cC0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlICBweC0xXCIgc3R5bGU9XCJoZWlnaHQ6IDI0cHg7XCIgKGNsaWNrKT1cImluc2VydFBhZ2VOdW1iZXIoKVwiPlBhZ2VcclxuICAgICAgICAgICAgICAgICAgICBObzwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkTGluaygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWxpbmstdmFyaWFudFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiaW5zZXJ0c0ltYWdlKGVkaXRvcklkKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1pbWFnZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiaW1hZ2VJbnB1dFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT1cImhhbmRsZUltYWdlVXBsb2FkKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFRhYmxlKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktdGFibGVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVUYWJsZUJvcmRlcnMoKVwiPjxpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaVwiIFtuZ0NsYXNzXT1cInsgaXNUYWJsZUJvcmRlcmVkID8gJ21kaS1ib3JkZXItbm9uZScgOiAnbWRpLWJvcmRlci1hbGwnIH1cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlVGFibGVCb3JkZXJzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaVwiIFtuZ0NsYXNzXT1cImlzVGFibGVCb3JkZXJlZCA/ICdtZGktYm9yZGVyLW5vbmUnIDogJ21kaS1ib3JkZXItYWxsJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFJvdygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1yZW1vdmVcIj48L2k+PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ29sdW1uKClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXBsdXMtYWZ0ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkVGFibGUoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXRhYmxlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkUm93KClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcGx1cy1hZnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3coKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbHVtbigpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUNvbHVtbigpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1yZW1vdmVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWRJbWFnZVwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24tMlwiIChjbGljayk9XCJlZGl0SW1hZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTtcIj5FZGl0IEltYWdlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJ1bmRvKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdW5kb1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJyZWRvKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktcmVkb1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJzZWxlY3RlZEltYWdlXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbi0yXCIgKGNsaWNrKT1cImVkaXRJbWFnZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+RWRpdCBJbWFnZTwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJjbGVhclRleHRFZGl0b3IoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1jbG9zZS1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDxkaXYgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIFtpZF09XCJlZGl0b3JJZFwiIGNsYXNzPVwiZWxzLWJvcmRlciBwLTNcIiAjZWRpdG9ySGVhZGVyIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7IFxyXG4gICAgICAgICAgICAgICBoZWlnaHQ6IDEzMHB4OyBcclxuICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlOyBcclxuICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsgXHJcbiAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDsgXHJcbiAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IFxyXG4gICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7XCIgW3N0eWxlLmJvcmRlci10b3BdPVwidGhlbWVNb2RlQm9yZGVyVG9wKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnZm9udC1mYW1pbHknOiBzZWxlY3RlZEZvbnQsICdmb250LXNpemUnOiBzZWxlY3RlZEZvbnRTaXplICsgJ3B4J31cIiBbc3R5bGVdPVwic3R5bGVcIlxyXG4gICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiAoaW5wdXQpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJJbnNlcnQgdGV4dCBoZXJlIC4uLlwiXHJcbiAgICAgICAgKG1vdXNldXApPVwib25UZXh0U2VsZWN0KCRldmVudClcIiBbaW5uZXJIVE1MXT1cInNhbml0aXplZENvbnRlbnRcIiAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIiAoY2xpY2spPVwiY2hlY2tUYWJsZVNlbGVjdGlvbigkZXZlbnQpXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx0YWJsZSAqbmdJZj1cInBhcnNlZFRhYmxlXCI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiBwYXJzZWRUYWJsZS5oZWFkZXJzXCI+e3sgaGVhZGVyIH19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgcGFyc2VkVGFibGUucm93c1wiPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjZWxsIG9mIHJvd1wiPnt7IGNlbGwgfX08L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG48L2Rpdj4iXX0=
1246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWwtaGVhZGVyLWFuZC1mb290ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZWwtaGVhZGVyLWFuZC1mb290ZXIvc3JjL2xpYi9lbC1oZWFkZXItYW5kLWZvb3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lbC1oZWFkZXItYW5kLWZvb3Rlci9zcmMvbGliL2VsLWhlYWRlci1hbmQtZm9vdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQTRCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SyxPQUFPLEVBQXFDLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7O0FBWXpELE1BQU0sT0FBTywwQkFBMEI7SUE2RXJDLFlBQ1UsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLFFBQW1CLEVBQ25CLFNBQXVCLEVBQ3ZCLEdBQXNCO1FBSnRCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE5RXZCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLFVBQUssR0FBWSxLQUFLLENBQUM7UUFJdkIsZ0JBQVcsR0FBZ0MsT0FBTyxDQUFDO1FBQ2xELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDOUMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMv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QUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2FmZUh0bWwsIERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOZ2JEcm9wZG93biB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWwtaGVhZGVyLWFuZC1mb290ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZWwtaGVhZGVyLWFuZC1mb290ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbC1oZWFkZXItYW5kLWZvb3Rlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWxIZWFkZXJBbmRGb290ZXJDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIEVsSGVhZGVyQW5kRm9vdGVyQ29tcG9uZW50IGltcGxlbWVudHMgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuIFxuIEBWaWV3Q2hpbGQoTmdiRHJvcGRvd24sIHsgc3RhdGljOiB0cnVlIH0pIGRyb3Bkb3duITogTmdiRHJvcGRvd247XG5cbiAgQElucHV0KCkgZWRpdG9ySWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBlZGl0b3JUZXh0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZWRpdG9yRnJvbTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVkaXRvckFjdGlvbjogYW55O1xuICBASW5wdXQoKSBzdHlsZTogYW55O1xuICBASW5wdXQoKSBiZ0NvbG9yOiBhbnk7XG4gIEBJbnB1dCgpIHRvb2xiYXJNb2RlOiAnZml4ZWQnIHwgJ2J1YmJsZScgfCAnbm9uZScgPSAnZml4ZWQnO1xuICBAT3V0cHV0KCkgZWRpdG9yVGV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgZWRpdG9yQWN0aW9uUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVkaXRvckNvbG91ckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIFxuICBAT3V0cHV0KCkgZWRpdG9yVGV4dENsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgc2FuaXRpemVkQ29udGVudCE6IFNhZmVIdG1sO1xuXG5cbiAgc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgdG9vbGJhclRvcCA9IDA7XG4gIHRvb2xiYXJMZWZ0ID0gMDtcblxuICBmb250cyA9IFsnQXJpYWwnLCAnQ291cmllciBOZXcnLCAnR2VvcmdpYScsICdUaW1lcyBOZXcgUm9tYW4nLCAnVmVyZGFuYSddO1xuICBmb250U2l6ZXMgPSBbMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjQsIDI4LCAzMiwgMzZdO1xuICBzZWxlY3RlZEZvbnQgPSAnQXJpYWwnO1xuICBzZWxlY3RlZEZvbnRTaXplID0gMTQ7XG4gIGlzVGFibGVTZWxlY3RlZCA9IGZhbHNlO1xuICB0YWJsZUFkZGVkID0gZmFsc2U7XG4gIHNlbGVjdGVkVGFibGU6IEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgaXNQbGFjZWhvbGRlclZpc2libGUgPSB0cnVlO1xuICBzZWxlY3RlZENlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIFxuICBpc0JvbGRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJdGFsaWNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVbmRlcmxpbmVBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTdHJpa2V0aHJvdWdoQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3Vic2NyaXB0QWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3VwZXJzY3JpcHRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNUYWJsZUJvcmRlcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VsZWN0ZWRGb3JtYXRCbG9jazogc3RyaW5nID0gJ25vcm1hbCdcblxuICB1bmRvU3RhY2s6IHN0cmluZ1tdID0gW107XG4gIHJlZG9TdGFjazogc3RyaW5nW10gPSBbXTtcbiAgaGlzdG9yeTogc3RyaW5nW10gPSBbXTtcbiAgaGlzdG9yeUluZGV4ID0gLTE7XG5cbiAgc2VsZWN0ZWRJbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBpbWFnZUVkaXRVcmw6IHN0cmluZyA9ICcnO1xuICBpbWFnZVBvc2l0aW9uWCA9IDA7XG4gIGltYWdlUG9zaXRpb25ZID0gMDtcbiAgaW1hZ2VSZXNpemVTdGFydFggPSAwO1xuICBpbWFnZVJlc2l6ZVN0YXJ0WSA9IDA7XG4gIGltYWdlUmVzaXplU3RhcnRXaWR0aCA9IDA7XG4gIGltYWdlUmVzaXplU3RhcnRIZWlnaHQgPSAwO1xuICBpbWFnZVJlc2l6ZURpcmVjdGlvbjogJ3RvcExlZnQnIHwgJ3RvcFJpZ2h0JyB8ICdib3R0b21MZWZ0JyB8ICdib3R0b21SaWdodCcgfCBudWxsID0gbnVsbDtcblxuICAvLyBlZGl0b3JUZXh0MSA9IGBgO1xuICBzZWxlY3RlZFRleHRDb2xvcjogYW55O1xuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG4gIGNvbG9yOiBhbnkgPSAnI2RkZCc7XG4gIGNvbG9yRm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcbiAgYmFja2dyb3VuZENvbG9yOiBhbnk7XG4gIHNlbGVjdGVkSXRlbUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBwYXJzZWRUYWJsZTogeyBoZWFkZXJzOiBzdHJpbmdbXSwgcm93czogc3RyaW5nW11bXSB9IHwgbnVsbCA9IG51bGw7XG5cbiAgaXNGdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIHRvZGF5OiBzdHJpbmcgPSAnJztcbiAgQ2FudmFzQ29sb3I6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHsgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2JnQ29sb3InXSkge1xuICAgICAgY29uc3QgZXZlbnQgPSB7IGNvbG9yOnsgaGV4IDogdGhpcy5iZ0NvbG9yfSB9XG4gICAgICB0aGlzLnNldENhbnZhc0JhY2tncm91bmRDb2xvcihldmVudCwgdGhpcy5lZGl0b3JJZClcbiAgICAgIC8vIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAgICAgLy8gaWYgKGVkaXRvcikge1xuICAgICAgLy8gICBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5iZ0NvbG9yO1xuICAgICAgLy8gfVxuICAgIH1cbiAgICAvLyBlbHNlIHtcbiAgICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuXG4gICAgLy8gICBpZiAoZWRpdG9yKSB7XG4gICAgLy8gICAgIGVkaXRvci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJnQ29sb3I/IHRoaXMuYmdDb2xvciA6IHRoaXMudGhlbWVNb2RlQmdDbHIoKTtcbiAgICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2JhY2tDb2xvcicsIHRydWUsIHRoaXMudGhlbWVNb2RlQmdDbHIoKSlcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgfVxuICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuICAgIHRoaXMuY2hlY2tQbGFjZWhvbGRlcigpO1xuICAgICB0aGlzLnNldHVwSGlzdG9yeSgpOyBcbiAgICAgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRfRnVuYyh0aGlzLmVkaXRvclRleHQpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja0FjdGl2ZVN0YXRlcygpO1xuICAgICAgdGhpcy5jaGVja0Zvcm1hdEJsb2NrKHRoaXMuZWRpdG9ySWQpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkQ2xpY2tMaXN0ZW5lclRvSW1hZ2VzKCk7XG4gICAgdGhpcy5hZGRDbGlja0xpc3RlbmVyVG9FbGVtZW50cygpO1xuXG4gICAgXG4gICAgLy8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2hpbGl0ZUNvbG9yJywgdHJ1ZSwgdGhpcy50aGVtZU1vZGVCZ0NscigpKVxuICAgIC8vIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgLy8gICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShwYXJhbXNbJ2RhdGEnXSk7XG4gICAgLy8gICBpZiAoZGF0YS5lZGl0ZWRJTUcpIHtcbiAgICAvLyAgICAgY29uc3QgaW1nVXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnKTtcbiAgICAvLyAgICAgaWYgKGltZ1VybCkge1xuICAgIC8vICAgICAgIHRoaXMucmVwbGFjZUltYWdlU3JjKGltZ1VybCwgZGF0YS5pbmRleC5pbmRleClcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcpO1xuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgICAgICAgICBcbiAgICBcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvclRleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5pdEVkaXRvcigpO1xuICAgICAgdGhpcy5pbml0X0Z1bmModGhpcy5lZGl0b3JUZXh0KTtcbiAgICB9XG4gIH1cblxuICAvLyBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcbiAgLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gIC8vICAgaWYgKGVkaXRvcikge1xuICAvLyAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gIC8vICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgLy8gICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAvLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IHRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAvLyAgICAgICAgIHRoaXMuaW1hZ2VFZGl0VXJsID0gdGhpcy5zZWxlY3RlZEltYWdlLnNyYztcbiAgLy8gICAgICAgICAvLyBQb3NpdGlvbiB0aGUgZWRpdCBidXR0b24gbmVhciB0aGUgc2VsZWN0ZWQgaW1hZ2VcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcbiAgLy8gICB9XG4gIC8vIH1cbiAgXG4gIHByaXZhdGUgYWRkQ2xpY2tMaXN0ZW5lclRvSW1hZ2VzKCkge1xuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xuXG4gICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGltYWdlXG4gICAgICAgIGNvbnN0IGltYWdlcyA9IGVkaXRvci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGltYWdlc1tpXSA9PT0gdGhpcy5zZWxlY3RlZEltYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xuICAgICAgICAgIHRoaXMub25UZXh0U2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgYWRkQ2xpY2tMaXN0ZW5lclRvRWxlbWVudHMoKSB7XG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgIC8vIEhhbmRsZSBpbWFnZXNcbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuaW1hZ2VFZGl0VXJsID0gdGhpcy5zZWxlY3RlZEltYWdlLnNyYztcblxuICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpbWFnZVxuICAgICAgICBjb25zdCBpbWFnZXMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChpbWFnZXNbaV0gPT09IHRoaXMuc2VsZWN0ZWRJbWFnZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGFyZ2V0LmNsb3Nlc3QoJ3RhYmxlJykgYXMgSFRNTFRhYmxlRWxlbWVudDtcblxuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YXJnZXQudGFnTmFtZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoY2VsbHNbaV0gPT09IHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1AnIHx8IHRhcmdldC50YWdOYW1lID09PSAnU1BBTicgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKSB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFyZ2V0LnRhZ05hbWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFncmFwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAocGFyYWdyYXBoc1tpXSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICB9XG5cbnJlcGxhY2VJbWFnZVNyYyhuZXdTcmM6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIGVkaXRvci5mb2N1cygpXG4gICAgY29uc3QgaW1hZ2VzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdJTUcnKTtcblxuICAgIGlmIChpbmRleCA+PSAwICkge1xuICAgICAgaW1hZ2VzW2luZGV4XS5zZXRBdHRyaWJ1dGUoJ3NyYycsIG5ld1NyYyk7XG4gICAgfSBcbiAgfVxufVxuXG5cblxuICBwcml2YXRlIGluaXRFZGl0b3IoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBlZGl0b3IgY29udGVudCBhbmQgbGlzdGVuZXJzXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZCk7XG5cbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5lZGl0b3JUZXh0O1xuICAgICAgLy8gZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMudGhlbWVNb2RlQmdDbHIoKTtcbiAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGVkaXRvci5pbm5lckhUTUwpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tQbGFjZWhvbGRlcigpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIHRoZSBkaXNhYmxlZCBzdGF0ZSBpZiBuZWNlc3NhcnlcbiAgfVxuXG4gIC8vIG9uTW9kZWxDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xuICAvLyAgIGlmICh2YWx1ZSkge1xuICAvLyAgICAgY29uc3QgVkFMVUUgPSB2YWx1ZVxuICAvLyAgICAgdGhpcy5lZGl0b3JUZXh0ID0gdGhpcy5tYWluQ2FudmFzKFZBTFVFKTtcbiAgLy8gICAgIHRoaXMub25DaGFuZ2UodGhpcy5tYWluQ2FudmFzKFZBTFVFKSk7XG4gIC8vICAgICB0aGlzLmVkaXRvclRleHRDaGFuZ2UuZW1pdCh0aGlzLm1haW5DYW52YXMoVkFMVUUpKTtcbiAgLy8gICAgIC8vICAgICB0aGlzLmVkaXRvclRleHQgPSBgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDEwcHggNjBweDtcIj4ke3RoaXMubWFpbkNhbnZhcyhWQUxVRSl9PC9kaXY+YDtcbiAgLy8gICAgIC8vIHRoaXMub25DaGFuZ2UoYDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDYwcHg7XCI+JHt0aGlzLm1haW5DYW52YXMoVkFMVUUpfTwvZGl2PmApO1xuICAvLyAgICAgLy8gdGhpcy5lZGl0b3JUZXh0Q2hhbmdlLmVtaXQoYDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxMHB4IDYwcHg7XCI+JHt0aGlzLm1haW5DYW52YXMoVkFMVUUpfTwvZGl2PmApO1xuICAgICAgXG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XG4gIC8vICAgfVxuICAvLyB9XG4gIFxub25Nb2RlbENoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gIGNvbnN0IHZhbHVlID0gZXZlbnQ7IC8vIEdldCB0aGUgaW5uZXJIVE1MIGNvbnRlbnRcbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgY2FudmFzSFRNTCA9IHRoaXMubWFpbkNhbnZhcyh2YWx1ZSk7IC8vIEdldCB0aGUgdXBkYXRlZCBjb250ZW50IHdpdGggc3R5bGVzXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZClcbiAgICBjb25zdCBoYXNQYWRkaW5nID0gY2FudmFzSFRNTC5pbmNsdWRlcygncGFkZGluZzogMTBweCA2MHB4OycpO1xuICAgIHRoaXMuZWRpdG9yVGV4dCA9IGhhc1BhZGRpbmdcbiAgICAgID8gY2FudmFzSFRNTFxuICAgICAgOiBgJHt2YWx1ZX1gO1xuXG4gICAgLy8gdGhpcy5lZGl0b3JUZXh0Q2hhbmdlLmVtaXQodGhpcy5tYWluQ2FudmFzKHZhbHVlKSlcbiAgICAvLyB0aGlzLmVkaXRvclRleHQgPSBoYXNQYWRkaW5nXG4gICAgLy8gICA/IGNhbnZhc0hUTUxcbiAgICAvLyAgIDogYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAkeyBlZGl0b3I/LnN0eWxlLmJhY2tncm91bmRDb2xvcnx8IHRoaXMuYmdDb2xvciA/IHRoaXMuYmdDb2xvciA6IHRoaXMudGhlbWVNb2RlQmdDbHJ9XCI+JHt2YWx1ZX08L2Rpdj5gO1xuXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLmVkaXRvclRleHQpO1xuICAgIHRoaXMuZWRpdG9yVGV4dENoYW5nZS5lbWl0KHRoaXMuZWRpdG9yVGV4dCk7XG5cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xuICB9XG59XG5cblxuICBhcHBseUltYWdlU3R5bGVzKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmlubmVySFRNTCA9IGNvbnRlbnQ7XG4gICAgY29uc3QgaW1hZ2VzID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAgIGltYWdlcy5mb3JFYWNoKGltZyA9PiB7XG4gICAgICBpZiAoaW1nLnN0eWxlLm1heFdpZHRoID49ICc3MDBweCcpIHtcbiAgICAgICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzcwMHB4JztcbiAgICAgICAgLy8gaW1nLndpZHRoID0gMzAwO1xuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xuICB9XG5cbiAgaW5pdF9GdW5jKGh0bWw6IGFueSkge1xuICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKVxuICAgICAgY29uc3QgY29sb3IgPSB0aGlzLmJnQ29sb3JcbiAgICAgIGVkaXRvci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvciA/IGNvbG9yIDogdGhpcy50aGVtZU1vZGVCZ0NscigpO1xuICAgIC8vIH1cbiAgICAvLyBpZiAoZWRpdG9yKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1RhYmxlID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICBpZiAoZXhpc3RpbmdUYWJsZSkge1xuICAgICAgICB0aGlzLnRvZ2dsZVRhYmxlQm9yZGVycygpXG4gICAgICAgICAvLyBFeGl0IGlmIGEgdGFibGUgaXMgYWxyZWFkeSBwcmVzZW50XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChodG1sKSB7XG4gICAgICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZCk7XG4gICAgICBpZiAoZWRpdG9yKSB7IFxuICAgICAgICBlZGl0b3IuZm9jdXMoKVxuICAgICAgICAvLyBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy50aGVtZU1vZGVCZ0NscigpO1xuICAgICAgICAgdGhpcy5zZXRFZGl0b3JDb250ZW50KGh0bWwpO1xuXG4gICAgICAvLyBTZXQgdXAgYSBNdXRhdGlvbk9ic2VydmVyIHRvIGhhbmRsZSBjb250ZW50IGNoYW5nZXNcbiAgICAgIHRoaXMuc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcik7XG5cbiAgICAgIC8vIE1vdmUgdGhlIGNhcmV0IHRvIHRoZSBlbmQgYWZ0ZXIgaW5pdGlhbCBjb250ZW50IHNldHVwXG4gICAgICB0aGlzLm1vdmVDYXJldFRvRW5kKGVkaXRvcik7XG4gICAgICAgIC8vIGVkaXRvci5mb2N1cygpXG4gICAgICAgIC8vIGVkaXRvci5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICAvLyB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xuICAgICAgICAvLyBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5zYW5pdGl6ZWRDb250ZW50IGFzIHN0cmluZztcbiAgICAgICAgLy8gZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICAvLyAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgLy8gICAgIGVkaXRvci5mb2N1cygpXG4gICAgICAgIC8vICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEVkaXRvckNvbnRlbnQoaHRtbDogc3RyaW5nKSB7XG4gIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgaWYgKGVkaXRvcikge1xuICAgIC8vIFNhbml0aXplIGFuZCBhcHBseSBzdHlsZXMgdG8gdGhlIEhUTUxcbiAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xuICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLnNhbml0aXplZENvbnRlbnQgYXMgc3RyaW5nO1xuICB9XG59XG5cbnByaXZhdGUgc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgLy8gTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCBhZnRlciBjb250ZW50IGNoYW5nZXNcbiAgICB0aGlzLm1vdmVDYXJldFRvRW5kKGVkaXRvcik7XG4gICAgLy8gVXBkYXRlIG1vZGVsIHdpdGggdGhlIGN1cnJlbnQgY29udGVudFxuICAgIHRoaXMub25Nb2RlbENoYW5nZShlZGl0b3IuaW5uZXJIVE1MKTtcbiAgfSk7XG5cbiAgb2JzZXJ2ZXIub2JzZXJ2ZShlZGl0b3IsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xufVxuXG5wcml2YXRlIG1vdmVDYXJldFRvRW5kKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcbiAgLy8gY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAvLyBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIFxuICAvLyBpZiAoZWRpdG9yLmxhc3RDaGlsZCkge1xuICAvLyAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpO1xuICAvLyAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gQ29sbGFwc2UgdG8gdGhlIGVuZFxuICAvLyAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIC8vICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gIC8vIH1cbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICBpZiAoc2VsZWN0aW9uPy5yYW5nZUNvdW50KSB7XG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoZWRpdG9yLmNvbnRhaW5zKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSkge1xuICAgICAgcmV0dXJuIHJhbmdlLmNsb25lUmFuZ2UoKTsgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGNhcmV0IHJhbmdlXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuICAvLyBmb3JtYXQoY29tbWFuZDogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xuICAvLyAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCB2YWx1ZSA/PyAnJyk7XG4gIC8vICAgLy8gIGlmIChjb21tYW5kID09PSAndW5kZXJsaW5lJykge1xuICAvLyAgIC8vICAgICAvLyBUb2dnbGUgdW5kZXJsaW5lXG4gIC8vICAgLy8gICAgIGNvbnN0IGlzVW5kZXJsaW5lZCA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKCd1bmRlcmxpbmUnKTtcbiAgLy8gICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ3VuZGVybGluZScsIGZhbHNlLCBpc1VuZGVybGluZWQgPyAnZmFsc2UnIDogJ3RydWUnKTtcbiAgLy8gICAvLyB9IGVsc2Uge1xuICAvLyAgIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgJycpO1xuICAvLyAgIC8vIH1cbiAgLy8gfVxuXG4gIG9uRm9ybWF0Q2hhbmdlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YTtcbiAgICB0aGlzLnNlbGVjdGVkRm9ybWF0QmxvY2sgPSB2YWx1ZTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtYXQoJ2Zvcm1hdEJsb2NrJywgdGhpcy5lZGl0b3JJZCwgdmFsdWUpO1xuICB9XG59XG5cblxuICBmb3JtYXQoY29tbWFuZDogc3RyaW5nLCBlZGl0b3JJZDogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVkaXRvcklkKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIGlmIChjb21tYW5kID09PSAnc3Vic2NyaXB0Jykge1xuICAgICAgICB0aGlzLmlzU3Vic2NyaXB0QWN0aXZlID0gIXRoaXMuaXNTdWJzY3JpcHRBY3RpdmU7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdWJzY3JpcHQnLCBmYWxzZSwgJycpO1xuICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09PSAnc3VwZXJzY3JpcHQnKSB7XG4gICAgICAgIHRoaXMuaXNTdXBlcnNjcmlwdEFjdGl2ZSA9ICF0aGlzLmlzU3VwZXJzY3JpcHRBY3RpdmU7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdXBlcnNjcmlwdCcsIGZhbHNlLCAnJyk7O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoY29tbWFuZCwgZmFsc2UsIHZhbHVlID8/ICcnKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgdGFnID0gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bPD5dL2csICcnKVxuICAgICAgICAgIGNvbnN0IHRvb2xiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlZGl0b3JJZCArICd0b29sYmFyJyk7XG4gICAgICAgICAgaWYgKHRvb2xiYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtYXRCbG9jayA9IHRoaXMuZm9ybWF0QmxvY2tEZWNvZGUodGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgIHRoaXMuY2hlY2tBY3RpdmVTdGF0ZXMoKTtcbiAgICAgdGhpcy5jaGVja0Zvcm1hdEJsb2NrKGVkaXRvcklkKTtcbiAgfVxuXG4gIGNoZWNrQWN0aXZlU3RhdGVzKCkge1xuICAgIHRoaXMuaXNCb2xkQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2JvbGQnKTtcbiAgICB0aGlzLmlzSXRhbGljQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2l0YWxpYycpO1xuICAgIHRoaXMuaXNVbmRlcmxpbmVBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgndW5kZXJsaW5lJyk7XG4gICAgdGhpcy5pc1N0cmlrZXRocm91Z2hBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3RyaWtldGhyb3VnaCcpO1xuICAgIHRoaXMuaXNTdWJzY3JpcHRBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3Vic2NyaXB0Jyk7XG4gICAgdGhpcy5pc1N1cGVyc2NyaXB0QWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ3N1cGVyc2NyaXB0Jyk7XG4gIH1cblxuICBjaGVja0Zvcm1hdEJsb2NrKGVkaXRvcklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlZGl0b3JJZCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgY29uc3QgZm9ybWF0QmxvY2sgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRWYWx1ZSgnZm9ybWF0QmxvY2snKTtcbiAgICAgICBjb25zdCB0b29sYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdG9ySWQgKyAndG9vbGJhcicpO1xuICAgICAgaWYgKHRvb2xiYXIpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvcm1hdEJsb2NrID0gdGhpcy5mb3JtYXRCbG9ja0RlY29kZShmb3JtYXRCbG9jayk7XG4gICAgICB9XG4gICAgICAvLyBZb3UgY2FuIGZ1cnRoZXIgaGFuZGxlIHRoZSBmb3JtYXRCbG9jayB2YWx1ZSBhcyBuZWVkZWRcbiAgICB9XG4gIH1cblxuICBmb3JtYXRCbG9ja0RlY29kZShkYXRhOiBzdHJpbmcpOiBhbnkge1xuICAgIHN3aXRjaCAoZGF0YSkge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDInOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDMnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDQnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDUnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncCc6XG4gICAgICAgIHJldHVybiAnbm9ybWFsJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ25vcm1hbCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUZvbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRGb250ID0gZXZlbnRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udE5hbWUnLCBmYWxzZSwgdGhpcy5zZWxlY3RlZEZvbnQpO1xuICB9XG5cbiAgaW5zZXJ0Q29kZUJsb2NrKCkge1xuICAgIGNvbnN0IGNvZGUgPSBgXG4gICAgICA8cHJlIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1xuICAgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNXB4O1xuICAgICAgICAgICAgICAgICAgcGFkZGluZzogNXB4IDEwcHg7XCI+XG4gICAgICAgIDxjb2RlIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcIiBjbGFzcz1cImxhbmd1YWdlLWh0bWxcIj5JbnNlcnQgY29kZSBoZXJlLi4uPC9jb2RlPlxuICAgICAgPC9wcmU+XG4gICAgYDtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBjb2RlKTtcbiAgfVxuXG4gIC8vIGNoYW5nZUZvbnRTaXplKGV2ZW50OiBhbnkpIHtcbiAgLy8gICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzcnKTtcbiAgLy8gICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xuICAvLyAgIGlmIChlZGl0b3IpIHtcbiAgLy8gICAgIGxldCBmb250RWxlbWVudHMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZvbnQnKTtcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgIGlmIChmb250RWxlbWVudHNbaV0uc2l6ZSA9PSBcIjdcIikge1xuICAvLyAgICAgICAgIGZvbnRFbGVtZW50c1tpXS5yZW1vdmVBdHRyaWJ1dGUoXCJzaXplXCIpO1xuICAvLyAgICAgICAgIGZvbnRFbGVtZW50c1tpXS5zdHlsZS5mb250U2l6ZSA9IHRoaXMuc2VsZWN0ZWRGb250U2l6ZSArICdweCc7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBcbiAgICBpZiAoc2VsZWN0ZWRUZXh0ICYmIHNlbGVjdGVkVGV4dC5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGVkVGV4dC5nZXRSYW5nZUF0KDApO1xuICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gdGhpcy5zZWxlY3RlZEZvbnRTaXplICsgJ3B4JztcbiAgICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcbiAgICB9XG4gIH1cblxuICBhZGRMaW5rKCkge1xuICAgIGxldCB1cmwgPSBwcm9tcHQoXCJFbnRlciB0aGUgbGluayBoZXJlOiBcIiwgXCJodHRwOi8vXCIpO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY3JlYXRlTGlua1wiLCBmYWxzZSwgdXJsKTtcbiAgICB9XG4gIH1cblxuICBpbnNlcnRzSW1hZ2UoZWRpdG9ySWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVkaXRvcklkKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgIGxldCBpbWFnZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlSW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgaWYgKGltYWdlSW5wdXQpIHtcbiAgICAgICAgaW1hZ2VJbnB1dC5jbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICBoYW5kbGVJbWFnZVVwbG9hZChldmVudDogYW55KSB7XG4gIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gIGlmIChmaWxlKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWcuc3JjID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBIVE1MIHN0cmluZyB3aXRoIHRoZSBleGFjdCB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgICAgIGNvbnN0IGltZ0hUTUwgPSBgPGltZyBzcmM9XCIke2ltZy5zcmN9XCIgd2lkdGg9XCIke2ltZy53aWR0aH1cIiBoZWlnaHQ9XCIke2ltZy5oZWlnaHR9XCI+YDtcbiAgICAgICAgLy8gSW5zZXJ0IHRoZSBpbWFnZSBpbnRvIHRoZSBlZGl0b3JcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgaW1nSFRNTCk7XG4gICAgICB9O1xuICAgIH07XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gIH1cbn1cblxuICBcbiAgdGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKSB7XG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjNDE0MTQxICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICM1RjVGNUYgIWltcG9ydGFudCdcbiAgICB9XG4gIH1cblxuICB0aGVtZU1vZGVDbHJCb3JkZXJGb3JUYWJsZSgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnIzQxNDE0MSdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcjNUY1RjVGJ1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrVGFibGVTZWxlY3Rpb24oZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgbGV0IHRhcmdldCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldCAmJiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpKSB7XG4gICAgICB0aGlzLmlzVGFibGVTZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSB0YXJnZXQuY2xvc2VzdCgndGFibGUnKSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzVGFibGVTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XG4gIH1cblxuICBjaGVja1BsYWNlaG9sZGVyKCkge1xuICAgIC8vIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XG4gICAgLy8gaWYgKGVkaXRvcikge1xuICAgIC8vICAgdGhpcy5pc1BsYWNlaG9sZGVyVmlzaWJsZSA9IGVkaXRvci5pbm5lckhUTUwgPT09ICcnIHx8IGVkaXRvci5pbm5lckhUTUwgPT09ICc8YnI+JztcbiAgICAvLyAgIGlmICh0aGlzLmlzUGxhY2Vob2xkZXJWaXNpYmxlKSB7XG4gICAgLy8gICAgIC8vIGVkaXRvci5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlclwiIHN0eWxlPVwiYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiAjMDAwMDAwXCI+SW5zZXJ0IHRleHQgaGVyZSAuLi48L3NwYW4+JztcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIGxldCBwbGFjZWhvbGRlciA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCcucGxhY2Vob2xkZXInKTtcbiAgICAvLyAgICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgLy8gICAgICAgZWRpdG9yLnJlbW92ZUNoaWxkKHBsYWNlaG9sZGVyKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgfVxuXG4gIG9uRm9jdXMoKSB7XG4gICAgLy8gbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcbiAgICAvLyBpZiAoZWRpdG9yICYmIHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUpIHtcbiAgICAvLyAgIGVkaXRvci5pbm5lckhUTUwgPSAnJztcbiAgICAvLyAgIHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUgPSBmYWxzZTtcbiAgICAvLyB9XG4gIH1cblxuICAvLyBjb2xvckNoYW5nZShuZXdDb2xvcjogc3RyaW5nKSB7XG4gIC8vICAgdGhpcy5jb2xvciA9IG5ld0NvbG9yO1xuICAvLyB9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMuY2hlY2tQbGFjZWhvbGRlcigpO1xuICB9XG5cbiAgYWRkUm93KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbiAgICAgIGxldCByb3cgPSB0aGlzLnNlbGVjdGVkVGFibGUuaW5zZXJ0Um93KCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjZWxsID0gcm93Lmluc2VydENlbGwoaSk7XG4gICAgICAgIGNlbGwuaW5uZXJIVE1MID0gJyZuYnNwOyc7XG4gICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZGVsZXRlUm93KCkge1xuICAvLyAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5kZWxldGVSb3coLTEpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4vLyAgIGRlbGV0ZVJvdygpIHtcbi8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuLy8gICAgIGxldCByb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aCAtIDE7IFxuLy8gICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4vLyAgICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuLy8gICAgICAgaWYgKHNlbGVjdGlvbikge1xuLy8gICAgICAgICBsZXQgcm93ID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ3RyJyk7XG4vLyAgICAgICAgIGlmIChyb3cpIHtcbi8vICAgICAgICAgICByb3dJbmRleCA9IHJvdy5yb3dJbmRleDtcbi8vICAgICAgICAgfVxuLy8gICAgICAgfVxuLy8gICAgIH1cbi8vICAgICB0aGlzLnNlbGVjdGVkVGFibGUuZGVsZXRlUm93KHJvd0luZGV4KTtcbi8vICAgfVxuLy8gfVxuXG4gIGRlbGV0ZVJvdygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSByZXR1cm47XG5cbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgIGNvbnN0IHJvdyA9IHNlbGVjdGVkTm9kZS5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KCd0cicpO1xuXG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgdGFibGUgPSByb3cuY2xvc2VzdCgndGFibGUnKTtcbiAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICB0YWJsZS5kZWxldGVSb3cocm93LnJvd0luZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4gIC8vIGFkZENvbHVtbigpIHtcbiAgLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgIGxldCBjZWxsID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uaW5zZXJ0Q2VsbCgtMSk7XG4gIC8vICAgICAgIGNlbGwuaW5uZXJIVE1MID0gJyZuYnNwOyc7XG4gIC8vICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgYWRkQ29sdW1uKCkge1xuICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgY29uc3QgY29sdW1uQ291bnQgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGggKyAxOyAvLyBOZXcgY29sdW1uIGNvdW50XG4gICAgY29uc3QgdGFibGVXaWR0aCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5vZmZzZXRXaWR0aDtcbiAgICBjb25zdCBtaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2x1bW5Db3VudDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjZWxsID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uaW5zZXJ0Q2VsbCgtMSk7XG4gICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xuICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSB0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCk7XG4gICAgICBjZWxsLnN0eWxlLm1pbldpZHRoID0gYCR7bWluV2lkdGh9cHhgO1xuICAgICAgY2VsbC5zdHlsZS53b3JkV3JhcCA9ICdicmVhay13b3JkJztcbiAgICAgIGNlbGwuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XG4gICAgICBjZWxsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm9ybWFsJztcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2VsbHMnIG1pbldpZHRoXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxscy5sZW5ndGg7IGorKykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS5taW5XaWR0aCA9IGAke21pbldpZHRofXB4YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4gIGRlbGV0ZUNvbHVtbigpIHtcbiAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBsZXQgY2VsbCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlPy5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KCd0ZCwgdGgnKSBhcyBIVE1MVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbC5jZWxsSW5kZXg7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uZGVsZXRlQ2VsbChjZWxsSW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4gIC8vIGRlbGV0ZUNvbHVtbigpIHtcbiAgLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmRlbGV0ZUNlbGwoLTEpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGFkanVzdFRhYmxlV2lkdGgoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5zdHlsZS53aWR0aCA9IGV2ZW50LnRhcmdldC52YWx1ZSArICdweCc7XG4gICAgfVxuICB9XG5cbiAgYWRqdXN0Q2VsbFdpZHRoKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS53aWR0aCA9IGV2ZW50LnRhcmdldC52YWx1ZSArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGp1c3RDZWxsSGVpZ2h0KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS5oZWlnaHQgPSBldmVudC50YXJnZXQudmFsdWUgKyAncHgnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYXJldFRvRW5kKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmIChzZWwpIHtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgb3BlbkNvbG9yUGlja2VyKGlucHV0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpO1xuICAgIGlmIChpbnB1dEVsZW1lbnQpIHtcbiAgICAgIGlucHV0RWxlbWVudC5jbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIHNldFRleHRDb2xvcihldmVudDogYW55LCBlZGl0b3JJZDogYW55KSB7XG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgY29uc3QgY29sb3IgPSBldmVudC5jb2xvci5oZXg7XG4gICAgICB0aGlzLnNlbGVjdGVkVGV4dENvbG9yID0gY29sb3I7XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgdHJ1ZSwgY29sb3IpO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2hpbGl0ZUNvbG9yJywgdHJ1ZSwgdGhpcy5iYWNrZ3JvdW5kQ29sb3IpO1xuICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEJhY2tncm91bmRDb2xvcihldmVudDogYW55LCBlZGl0b3JJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGVkaXRvci5mb2N1cygpO1xuICAgICAgY29uc3QgY29sb3IgPSBldmVudC5jb2xvci5oZXg7XG4gICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2hpbGl0ZUNvbG9yJywgdHJ1ZSwgY29sb3IpO1xuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIHRydWUsIHRoaXMuc2VsZWN0ZWRUZXh0Q29sb3IpO1xuICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGNvbG9yQ2hhbmdlZChldmVudDogYW55KSB7XG4gIC8vICAgdGhpcy5jb2xvciA9IGV2ZW50LmNvbG9yLmhleDsgXG4gIC8vIH1cblxuICBwdWJsaWMgbG9nRXZlbnQoZXZlbnQ6IGFueSwgdHJpZ2dlcjogYW55KSB7XG4gICAgY29uc3QgY29sb3IgPSBldmVudDtcbiAgICB0aGlzLnNldFRleHRDb2xvcihjb2xvciwgdGhpcy5lZGl0b3JJZClcbiAgICB0aGlzLnNlbGVjdGVkVGV4dENvbG9yID0gZXZlbnRcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgZmFsc2UsIGV2ZW50KTtcbiAgICAvLyB0aGlzLmxvZ3MudW5zaGlmdChbdGhpcy5sb2dzLmxlbmd0aCArIDEsIHRyaWdnZXIsIGV2ZW50XSk7XG4gIH1cblxuICBlZGl0SW1hZ2UoKSB7XG4gICAgbGV0IGRhdGEgXG4gICAgc3dpdGNoICh0aGlzLmVkaXRvckZyb20pIHtcbiAgICAgIGNhc2UgJ3NlY3Rpb24tY29udGVudCc6XG4gICAgICAgIGRhdGEgPSB7IGVkaXRJTUc6IHRydWUsIGZyb206ICdodG1sRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggfTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvSU1HRWRpdG9yKGRhdGEpO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcsIEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSk7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3RleHRFZGl0b3InLCB0aGlzLmVkaXRvclRleHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RlbXBsYXRlJzpcbiAgICAgICAgZGF0YSA9IHsgZWRpdElNRzogdHJ1ZSwgZnJvbTogJ3RlbXBsYXRlRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggfTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvSU1HRWRpdG9yKGRhdGEpO1xuICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcDInLCBKU09OLnN0cmluZ2lmeSh0aGlzLmltYWdlRWRpdFVybCkpO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0ZW1wbGF0ZUVkaXRvcicsIHRoaXMuZWRpdG9yVGV4dCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnKTtcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJyk7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RlbXBsYXRlRWRpdG9yJyk7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RleHRFZGl0b3InKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIGlmICh0aGlzLmVkaXRvckZyb20gPT09ICdzZWN0aW9uLWNvbnRlbnQnKSB7XG4gICAgLy8gICBjb25zdCBkYXRhID0ge2VkaXRJTUc6IHRydWUsIGZyb206ICdodG1sRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXh9XG4gICAgLy8gICB0aGlzLm5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YSlcbiAgICAvLyAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wJywgSlNPTi5zdHJpbmdpZnkodGhpcy5pbWFnZUVkaXRVcmwpKVxuICAgIC8vICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndGV4dEVkaXRvcicsIHRoaXMuZWRpdG9yVGV4dClcbiAgICAvLyB9IFxuICAgIFxuICB9XG5cbiAgbmF2aWdhdGVUb0lNR0VkaXRvcihkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hZG1pbi9pbWFnZS1lZGl0b3InXSwgeyBxdWVyeVBhcmFtczoge2RhdGEgOiBKU09OLnN0cmluZ2lmeShkYXRhKX0gfSlcbiAgfVxuXG4gIC8vICBvblRleHRTZWxlY3QoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgLy8gICBpZiAodGhpcy50b29sYmFyTW9kZSA9PT0gJ2J1YmJsZScpIHtcbiAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgLy8gICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XG4gIC8vICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gIC8vICAgICAgIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gIC8vICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAvLyAgICAgICAgIHRoaXMudG9vbGJhclRvcCA9IHJlY3QuYm90dG9tICsgd2luZG93LnNjcm9sbFkgKyAxMDtcbiAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJMZWZ0ID0gcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFggKyAocmVjdC53aWR0aCAvIDIpIC0gNTA7XG4gIC8vICAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IHRydWU7XG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiBvblRleHRTZWxlY3QoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsWSA9ICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBzY3JvbGxYID0gIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICB0aGlzLnRvb2xiYXJUb3AgPSByZWN0LnRvcCArIHNjcm9sbFkgLSA3NTtcbiAgICAgICAgdGhpcy50b29sYmFyTGVmdCA9IHJlY3QubGVmdCArIHNjcm9sbFggKyAocmVjdC53aWR0aCAvIDIpIC0gMzI1O1xuICAgICAgICB0aGlzLnNob3dUb29sYmFyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5cbm9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcbiAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgaWYgKHRoaXMuaXNUYWJsZURhdGEocGFzdGVkVGV4dCkpIHtcbiAgICAgICAgY29uc3QgaHRtbCA9IHRoaXMuY29udmVydFRleHRUb1RhYmxlKHBhc3RlZFRleHQpO1xuICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChwYXN0ZWRUZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1RhYmxlRGF0YSh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByb3dzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG4gICAgcmV0dXJuIHJvd3MubGVuZ3RoID4gMSAmJiByb3dzWzBdLnNwbGl0KCdcXHQnKS5sZW5ndGggPiAxO1xuICB9XG5cbiAgY29udmVydFRleHRUb1RhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcihyb3cgPT4gcm93LnRyaW0oKSAhPT0gJycpO1xuICAgIGNvbnN0IHRhYmxlUm93cyA9IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICBjb25zdCBjZWxscyA9IHJvdy5zcGxpdCgnXFx0JykubWFwKGNlbGwgPT4gYDx0ZCBjbGFzcz1cInB4LTEgcHktMSAgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjMDAwXCI+JHtjZWxsfTwvdGQ+YCkuam9pbignJyk7XG4gICAgICByZXR1cm4gYDx0ciA+JHtjZWxsc308L3RyPmA7XG4gICAgfSkuam9pbignJyk7XG4gICAgcmV0dXJuIGA8dGFibGU+JHt0YWJsZVJvd3N9PC90YWJsZT5gO1xuICB9XG5cbiAgaW5zZXJ0SHRtbEF0Q2FyZXQoaHRtbDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmFuZ2UgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIGxldCBub2RlO1xuICAgICAgd2hpbGUgKChub2RlID0gdGVtcERpdi5maXJzdENoaWxkKSkge1xuICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShmcmFnKTtcbiAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuIFxuICBwdWJsaWMgb3BlbkZ1bGxzY3JlZW4oKSB7XG4gICAgdmFyIGVsZW06IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGV4dEVkaXRvclwiKTtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IHRydWU7XG4gICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgIGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgIGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICB9IGVsc2UgaWYgKGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgfVxuICAgIHRoaXMuc3R5bGUgPSB7XG4gICAgICAnbWluLWhlaWdodCc6ICc5MHZoJyxcbiAgICAgICdtYXgtaGVpZ2h0JzogJzkwdmgnLFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9zZUZ1bGxzY3JlZW4oKSB7XG4gICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICBkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpO1xuICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuc3R5bGUgPSB7XG4gICAgICAgICdtaW4taGVpZ2h0JzogJzQwMHB4JyxcbiAgICAgICAgJ21heC1oZWlnaHQnOiAnNDAwcHgnLFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5DYW52YXNDb2xvclBpY2tlcihpbnB1dElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKTtcbiAgICBpZiAoaW5wdXRFbGVtZW50KSB7XG4gICAgICBpbnB1dEVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBzZXRDYW52YXNCYWNrZ3JvdW5kQ29sb3IoZXZlbnQ6IGFueSwgZWRpdG9ySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuQ2FudmFzQ29sb3IgPSBldmVudC5jb2xvci5oZXg7XG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIGxldCBjb2xvciA9ICcnO1xuICAgICAgLy8gZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMudGhlbWVNb2RlQmdDbHIoKVxuICAgICAgdGhpcy5iZ0NvbG9yID0gZXZlbnQuY29sb3IuaGV4XG4gICAgICBjb2xvciA9IGV2ZW50LmNvbG9yLmhleCBcbiAgICAgIHRoaXMuZWRpdG9yQ29sb3VyQ2hhbmdlLmVtaXQoe1xuICAgICAgICBjb25maWc6IGVkaXRvcklkLFxuICAgICAgICBjb2xvcjogdGhpcy5iZ0NvbG9yXG4gICAgICB9KVxuICAgICAgZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xuICAgICAgLy8gdGhpcy5iZ0NvbG9yID0gdGhpcy5DYW52YXNDb2xvcjtcbiAgICAgIHRoaXMubWFpbkNhbnZhcygpXG4gICAgICAvLyBvbk1vZGVsQ2hhbmdlXG4gICAgICAvLyB0aGlzLmluaXRfRnVuYyhgPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICR7Y29sb3J9O1wiPiR7dGhpcy5lZGl0b3JUZXh0fTwvZGl2PmApO1xuICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRvZGF5KCkge1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBkYXkgPSBjdXJyZW50RGF0ZS5nZXREYXRlKCkgO1xuICAgIGNvbnN0IG1vbnRoID0gY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDE7IFxuICAgIGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBgJHt5ZWFyfS0ke21vbnRoLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0tJHtkYXkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgdGhpcy50b2RheSA9IGZvcm1hdHRlZERhdGU7XG4gICAgLy8gY29uc3QgbGFiZWwgPSBgeygke3RoaXMudG9kYXl9KX1gO1xuICAgIGNvbnN0IGxhYmVsID0gYHsoZGF0ZSl9YDtcbiAgICBjb25zdCBodG1sQ29udGVudCA9IGAgJHtsYWJlbH0gYDtcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvclRleHQgKz0gYDxkaXY+ICR7aHRtbENvbnRlbnR9IDwvZGl2PmA7XG4gICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLmVkaXRvclRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRpdG9yVGV4dCArPSBgPGRpdj4gJHtodG1sQ29udGVudH0gPC9kaXY+YDtcbiAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuZWRpdG9yVGV4dDtcbiAgICB9XG4gIH1cblxuICBpbnNlcnRQYWdlTnVtYmVyKCkge1xuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSAneyhwYWdlKX0nO1xuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yVGV4dCArPSBgPGRpdj4gJHtwYWdlTnVtYmVyfSA8L2Rpdj5gO1xuICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5lZGl0b3JUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkaXRvclRleHQgKz0gYDxkaXY+ICR7cGFnZU51bWJlcn0gPC9kaXY+YDtcbiAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuZWRpdG9yVGV4dDtcbiAgICB9XG4gIH1cblxuICBjbGVhclRleHRFZGl0b3IoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZCk7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3JUZXh0Q2xlYXIuZW1pdCgpXG4gICAgICBsZXQgZGF0YTogYW55O1xuICAgICAgLy8gZGF0YS5jb2xvci5oZXggPSAnI2ZmZmZmZidcbiAgICAgIGRhdGEgPSB7XG4gICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgaGV4OiAnJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaGlsaXRlQ29sb3InLCB0cnVlLCB0aGlzLnRoZW1lTW9kZUJnQ2xyKCkpXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJydcbiAgICAgIHRoaXMuc2V0Q2FudmFzQmFja2dyb3VuZENvbG9yKGRhdGEsIHRoaXMuZWRpdG9ySWQpXG4gICAgfVxuICB9XG5cbiAgXG4gIHNldHVwSGlzdG9yeSgpIHtcbiAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgXG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gdGhpcy5vbklucHV0KCkpO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5wdXQoKSB7XG4gICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgfVxuXG4gIHNhdmVTdGF0ZSgpIHtcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgXG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgY29uc3QgZWRpdG9yQ29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XG4gICAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPT09IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuaGlzdG9yeUluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgrKztcbiAgICB9XG4gIH1cbiAgdW5kbygpIHtcbiAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPiAwKSB7XG4gICAgICB0aGlzLnJlZG9TdGFjay5wdXNoKHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF0pO1xuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgtLTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICBcbiAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeUluZGV4XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWRvKCkge1xuICAgIGlmICh0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZWRvQ29udGVudCA9IHRoaXMucmVkb1N0YWNrLnBvcCgpO1xuICAgICAgdGhpcy5oaXN0b3J5LnB1c2gocmVkb0NvbnRlbnQhKTtcbiAgICAgIHRoaXMuaGlzdG9yeUluZGV4Kys7XG4gICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgXG4gICAgICBpZiAoZWRpdG9yKSB7XG4gICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHJlZG9Db250ZW50ITtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBtYWluQ2FudmFzKGRhdGE/OiBhbnkpIHtcbiAgLy8gICBsZXQgQkcgPSAnJ1xuICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAvLyAgIGlmIChlZGl0b3IpIHtcbiAgLy8gICAgIGVkaXRvci5mb2N1cygpXG4gIC8vICAgICBpZiAoZWRpdG9yLnN0eWxlLmJhY2tncm91bmRDb2xvciA9PT0gJ3JnYig1MywgNTEsIDY3KScpIHtcbiAgLy8gICAgICAgQkcgPSAncmdiKDI1NSwgMjU1LCAyNTUpJ1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgQkcgPSBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGAke2RhdGF9YFxuICAvLyAgICB9XG4gIC8vICAgZWxzZSB7XG4gIC8vICAgICByZXR1cm4gYDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAke0JHfT4ke2RhdGF9PC9kaXY+YFxuICAvLyAgICB9XG4gICAgXG4gIC8vIH1cbiAgLy8gbWFpbkNhbnZhcyhkYXRhPzogYW55KTogc3RyaW5nIHtcbiAgLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgLy8gICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5DYW52YXNDb2xvciA/IHRoaXMuQ2FudmFzQ29sb3IgOiB0aGlzLnRoZW1lTW9kZUJnQ2xyKClcbiAgLy8gICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcblxuICAvLyAgIH1cbiAgICBcbiAgLy8gICBjb25zdCBCRyA9IGVkaXRvcj8uc3R5bGU/LmJhY2tncm91bmRDb2xvcjtcbiAgLy8gcmV0dXJuIGAke2RhdGF9YDtcbiAgLy8gfVs2NzRweF1cbiAgXG4gIG1haW5DYW52YXMoZGF0YT86IGFueSk6IHN0cmluZyB7XG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuXG4gIGlmIChlZGl0b3IpIHtcbiAgICBlZGl0b3Iuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5DYW52YXNDb2xvciA/IHRoaXMuQ2FudmFzQ29sb3IgOiB0aGlzLnRoZW1lTW9kZUJnQ2xyKCk7XG4gICAgXG4gICAgY29uc3QgdGFibGUgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICBpZiAodGFibGUpIHtcbiAgICAgIHRhYmxlLnN0eWxlLndpZHRoID0gJzEwMCUnOyBcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY29uc3QgQkcgPSBlZGl0b3I/LnN0eWxlPy5iYWNrZ3JvdW5kQ29sb3I7IFxuICByZXR1cm4gYCR7ZGF0YX1gO1xufVxuXG4gIFxuICBhZGRUYWJsZSgpIHtcbiAgY29uc3QgY29scyA9IDM7IC8vIE51bWJlciBvZiBjb2x1bW5zXG4gIGNvbnN0IGNlbGxIZWlnaHQgPSAnMTAwcHgnOyAvLyBTZXQgYSBmaXhlZCBoZWlnaHQgZm9yIGNlbGxzXG5cbiAgLy8gQ2hlY2sgaWYgYSB0YWJsZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZWRpdG9yXG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICBpZiAoZWRpdG9yKSB7XG4gICAgY29uc3QgZXhpc3RpbmdUYWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgIGlmIChleGlzdGluZ1RhYmxlKSB7XG4gICAgICByZXR1cm47IC8vIEV4aXQgaWYgYSB0YWJsZSBpcyBhbHJlYWR5IHByZXNlbnRcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHRhYmxlIEhUTUxcbiAgICBsZXQgdGFibGUgPSBgPHRhYmxlIHN0eWxlPVwiXG4gICAgICB3aWR0aDogMTAwJTsgXG4gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIFwiPmA7XG5cbiAgICB0YWJsZSArPSBgPHRyPmA7IC8vIFNldCByb3cgaGVpZ2h0XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xuICAgICAgdGFibGUgKz0gYDx0ZCBzdHlsZT1cIlxuICAgICAgICBib3JkZXI6ICR7dGhpcy50aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmVGb3JUYWJsZSgpfTtcbiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OyAvKiBBbGlnbiB0ZXh0IHRvIHRoZSBsZWZ0ICovXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7IC8qIEFsaWduIGNvbnRlbnQgdG8gdGhlIHRvcCAqL1xuICAgICAgXCI+Jm5ic3A7PC90ZD5gOyAvLyBVc2Ugbm9uLWJyZWFraW5nIHNwYWNlIHRvIGtlZXAgdGhlIGNlbGwgY29udGVudFxuICAgIH1cblxuICAgIHRhYmxlICs9ICc8L3RyPic7XG4gICAgdGFibGUgKz0gJzwvdGFibGU+JztcbiAgICB0aGlzLmlzVGFibGVCb3JkZXJlZCA9IHRydWU7XG4gICAgLy8gSW5zZXJ0IHRoZSB0YWJsZSBpbnRvIHRoZSBlZGl0b3JcbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCB0YWJsZSk7XG5cbiAgICB0aGlzLnRhYmxlQWRkZWQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tUYWJsZVNlbGVjdGlvbigpO1xuICB9XG59XG5cblxuICAvLyByZW1vdmVUYWJsZUJvcmRlcnMoKSB7XG4gIC8vICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZCk7XG5cbiAgLy8gICBpZiAoZWRpdG9yKSB7XG4gIC8vICAgICBjb25zdCB0YWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZScpOyAvLyBGaW5kIHRoZSBmaXJzdCB0YWJsZSBpbnNpZGUgdGhlIGVkaXRvclxuXG4gIC8vICAgICBpZiAodGFibGUpIHtcbiAgLy8gICAgICAgY29uc3QgY2VsbHMgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpOyAvLyBTZWxlY3QgYWxsIHRhYmxlIGNlbGxzXG4gIC8vICAgICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+IHtcbiAgLy8gICAgICAgICBjZWxsLnN0eWxlLmJvcmRlciA9ICdub25lJzsgLy8gUmVtb3ZlIHRoZSBib3JkZXIgYnkgc2V0dGluZyBpdCB0byAnbm9uZSdcbiAgLy8gICAgICAgfSk7XG5cbiAgLy8gICAgICAgLy8gQ29udmVydCB0aGUgdGFibGUgZWxlbWVudCBiYWNrIHRvIEhUTUwgc3RyaW5nXG4gIC8vICAgICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRhYmxlLm91dGVySFRNTDtcblxuICAvLyAgICAgICAvLyBJbnNlcnQgdGhlIHVwZGF0ZWQgSFRNTCBpbnRvIHRoZSBlZGl0b3JcbiAgLy8gICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gIC8vICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHRhYmxlSFRNTCk7IC8vIFBhc3MgdGhlIEhUTUwgc3RyaW5nLCBub3QgdGhlIGVsZW1lbnRcbiAgLy8gICAgIH0gXG4gIC8vICAgfVxuICAvLyB9XG5cbiB0b2dnbGVUYWJsZUJvcmRlcnMoKSB7XG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuXG4gIGlmIChlZGl0b3IpIHtcbiAgICBjb25zdCB0YWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZScpOyAvLyBGaW5kIHRoZSBmaXJzdCB0YWJsZSBpbnNpZGUgdGhlIGVkaXRvclxuICAgIGlmICh0YWJsZSkge1xuICAgICAgY29uc3QgY2VsbHMgPSB0YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpOyAvLyBTZWxlY3QgYWxsIHRhYmxlIGNlbGxzXG4gICAgICBsZXQgaGFzQm9yZGVycyA9IGZhbHNlO1xuXG4gICAgICAvLyBDaGVjayBpZiBhbnkgY2VsbCBjdXJyZW50bHkgaGFzIGEgYm9yZGVyXG4gICAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvcmRlclN0eWxlID0gY2VsbC5zdHlsZS5ib3JkZXI7IC8vIENoZWNrIHRoZSBpbmxpbmUgc3R5bGUgZm9yIGJvcmRlcnNcbiAgICAgICAgaWYgKGJvcmRlclN0eWxlICYmIGJvcmRlclN0eWxlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICBoYXNCb3JkZXJzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAgY29uc3QgZXhpc3RpbmdUYWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgIGlmIChleGlzdGluZ1RhYmxlKSB7XG4gICAgICAvLyByZXR1cm47IC8vIEV4aXQgaWYgYSB0YWJsZSBpcyBhbHJlYWR5IHByZXNlbnRcbiAgICB9XG5cbiAgICAgIC8vIFRvZ2dsZSBib3JkZXJzXG4gICAgICBpZiAoaGFzQm9yZGVycyB8fCB0aGlzLmlzVGFibGVCb3JkZXJlZCkge1xuICAgICAgICAvLyBSZW1vdmUgYm9yZGVyc1xuICAgICAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XG4gICAgICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7IC8vIFNldCBib3JkZXIgdG8gJ25vbmUnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzVGFibGVCb3JkZXJlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIGJvcmRlcnNcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzJweCBzb2xpZCAnK3RoaXMudGhlbWVNb2RlQ2xyQm9yZGVyRm9yVGFibGUoKTsgLy8gQWRkIGEgZGVmYXVsdCBib3JkZXIgc3R5bGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXNUYWJsZUJvcmRlcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IFxuICB9XG59XG5cblxuXG4gICB0aGVtZU1vZGUoKSB7XG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjNDE0MTQxICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICNEMEQwRDAgIWltcG9ydGFudCdcbiAgICB9XG4gIH1cblxuICB0aGVtZU1vZGVDbHIoKSB7XG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gJyNmZmYgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcjMDAwICFpbXBvcnRhbnQnXG4gICAgfVxuICB9XG5cbiAgdGhlbWVNb2RlQmdDbHIoKSB7XG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gJyMyODI4MjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnI0YzRjNGMydcbiAgICB9XG4gIH1cblxuICB0aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmUoKSB7XG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjRkZGRkZGICFpbXBvcnRhbnQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICNEMEQwRDAgIWltcG9ydGFudCdcbiAgICB9XG4gIH1cblxuXG4gIHRoZW1lTW9kZUJvcmRlclRvcCgpIHtcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICMwMDAwMDAgIWltcG9ydGFudCdcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcycHggc29saWQgI2ZmZmZmZiAhaW1wb3J0YW50J1xuICAgIH1cbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXIgZWxzLXRleHQtZWRpdG9yIHB4LTBcIiBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDIwcHggIWltcG9ydGFudDtcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJidG4tdG9vbGJhciBlbHMtYnRuLXRvb2xiYXIgcC0yIHB5LTIgbWItMFwiIHJvbGU9XCJ0b29sYmFyXCIgW2lkXT1cImVkaXRvcklkKyd0b29sYmFyJ1wiXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwidGhlbWVNb2RlQmdDbHIoKVwiIGFyaWEtbGFiZWw9XCJUb29sYmFyIHdpdGggYnV0dG9uIGdyb3Vwc1wiXHJcbiAgICAgICAgc3R5bGU9XCJib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiSGVhZGVyIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJlbHMtZm9ybS1zZWxlY3QgXCIgc3R5bGU9XCIgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50OyBjb2xvcjogI2ZmZjsgd2lkdGg6IDE1MHB4OyBib3JkZXI6IDJweCBzb2xpZCAjN0Q2RDZEICFpbXBvcnRhbnQ7XCIgKGNoYW5nZSk9XCJvbkZvcm1hdENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiJzxoMT4nXCI+SGVhZGluZyAxPC9vcHRpb24+dlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIic8aDI+J1wiPkhlYWRpbmcgMjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIic8aDM+J1wiPkhlYWRpbmcgMzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIic8aDQ+J1wiPkhlYWRpbmcgNDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIic8aDU+J1wiPkhlYWRpbmcgNTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIic8aDY+J1wiPkhlYWRpbmcgNjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQgW3ZhbHVlXT1cIic8cD4nXCI+Tm9ybWFsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLWZvcm0tc2VsZWN0IGJvcmRlciBlbHMtdG9vbGJhci1kcm9wZG93bi1idXR0b24gZHJvcGRvd24tdG9nZ2xlIHRleHQtc3RhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiaGVhZGVyRHJvcGRvd25cIiBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tzZWxlY3RlZEZvcm1hdEJsb2NrIHwgdGl0bGVjYXNlfX08L3NwYW4+IDxpIGNsYXNzPVwibWRpIG1kaS1jaGV2cm9uLWRvd24gXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93blwiIGNsYXNzPVwiZWxzLXRleHQtZm9ybWF0XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsIGVkaXRvcklkLCAnPGgxPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMT5IZWFkaW5nIDE8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCBlZGl0b3JJZCwgJzxoMj4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDI+SGVhZGluZyAyPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgZWRpdG9ySWQsICc8aDM+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkhlYWRpbmcgMzwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsIGVkaXRvcklkLCAnPGg0PicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND5IZWFkaW5nIDQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtIHBiLTBcIiB0eXBlPVwiYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCBlZGl0b3JJZCwgJzxoNT4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDU+SGVhZGluZyA1PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgZWRpdG9ySWQsICc8aDY+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg2PkhlYWRpbmcgNjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsIGVkaXRvcklkLCAnPHA+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm9ybWFsPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy1mb3JtLXNlbGVjdCBib3JkZXIgZWxzLXRvb2xiYXItZHJvcGRvd24tYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSB0ZXh0LXN0YXJ0XCJcclxuICAgICAgICAgICAgICAgIGlkPVwiaGVhZGVyRHJvcGRvd25cIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIFtzdHlsZS5ib3JkZXJdPVwidGhlbWVNb2RlKClcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiA4NXB4OyBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3tzZWxlY3RlZEZvbnQgfFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlY2FzZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWNoZXZyb24tZG93biBcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93blwiIGNsYXNzPVwiZWxzLXRleHQtZm9ybWF0XCIgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAqbmdGb3I9XCJsZXQgZm9udCBvZiBmb250c1wiIChjbGljayk9XCJjaGFuZ2VGb250KGZvbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmb250IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiRm9udCBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDwhLS0gPHNlbGVjdCBjbGFzcz1cImVscy1mb3JtLXNlbGVjdCBcIiBzdHlsZT1cIiBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7IGNvbG9yOiAjZmZmO2JvcmRlcjogMnB4IHNvbGlkICM3RDZENkQgIWltcG9ydGFudDtcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIiAoY2hhbmdlKT1cImNoYW5nZUZvbnQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGNsYXNzPVwiZWxzLWZvcm0tb3B0aW9uXCIgKm5nRm9yPVwibGV0IGZvbnQgb2YgZm9udHNcIiBbdmFsdWVdPVwiZm9udFwiPnt7IGZvbnQgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtZm9ybS1zZWxlY3QgYm9yZGVyIGVscy10b29sYmFyLWRyb3Bkb3duLWJ1dHRvbiBkcm9wZG93bi10b2dnbGUgdGV4dC1zdGFydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJoZWFkZXJEcm9wZG93blwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDogODVweDsgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50O1wiIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPnt7c2VsZWN0ZWRGb250IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVjYXNlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWNoZXZyb24tZG93biBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duXCIgY2xhc3M9XCJlbHMtdGV4dC1mb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGhlbWVNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUZvbnQoZm9udClcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZm9udCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMFwiIHN0eWxlPVwiaGVpZ2h0OiBmaXQtY29udGVudDtcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTIgXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNCb2xkQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdib2xkJywgZWRpdG9ySWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1ib2xkXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0l0YWxpY0FjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnaXRhbGljJywgZWRpdG9ySWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1pdGFsaWNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzVW5kZXJsaW5lQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCd1bmRlcmxpbmUnLCBlZGl0b3JJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXVuZGVybGluZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdHJpa2V0aHJvdWdoQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdHJpa2V0aHJvdWdoJywgZWRpdG9ySWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdHJpa2V0aHJvdWdoLXZhcmlhbnRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJjb2xvclwiIGlkPVwidGV4dENvbG9yUGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFRleHRDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCd0ZXh0Q29sb3JQaWNrZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY29sb3ItdGV4dCBpY29uLXdpdGgtdW5kZXJsaW5lXCIgW3N0eWxlLmNvbG9yXT1cInNlbGVjdGVkVGV4dENvbG9yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJxbC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBlbHMtdG9vbGJhci1idXR0b24gYXJyb3ctbm9uZSB0ZXh0LXNlY29uZGFyeSBib3JkZXItbm9uZSBwLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkcm9wZG93bkJhc2ljMVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jb2xvci10ZXh0IGljb24td2l0aC11bmRlcmxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJzZWxlY3RlZFRleHRDb2xvclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3Itc2tldGNoIGNvbG9yPVwiI2ZmZlwiIFtwcmVzZXRDb2xvcnNdPVwiW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZUNvbXBsZXRlKT1cInNldFRleHRDb2xvcigkZXZlbnQsIGVkaXRvcklkKVwiPjwvY29sb3Itc2tldGNoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJCYWNrZ3JvdW5kIENvbG9yXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cImJhY2tncm91bmRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcignYmdDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWFscGhhLWEtYm94XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJiZ0NvbG9yUGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMDAlOyBsZWZ0OiAwOyB6LWluZGV4OiAxMDA7IG9wYWNpdHk6IDA7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldEJhY2tncm91bmRDb2xvcigkZXZlbnQpXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJxbC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBlbHMtdG9vbGJhci1idXR0b24gYXJyb3ctbm9uZSB0ZXh0LXNlY29uZGFyeSBib3JkZXItbm9uZSBwLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkcm9wZG93bkJhc2ljMVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWFscGhhLWEtYm94XCIgW3N0eWxlLmNvbG9yXT1cImJhY2tncm91bmRDb2xvclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3Itc2tldGNoIGNvbG9yPVwiI2ZmZlwiIFtwcmVzZXRDb2xvcnNdPVwiW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZUNvbXBsZXRlKT1cInNldEJhY2tncm91bmRDb2xvcigkZXZlbnQsIGVkaXRvcklkKVwiPjwvY29sb3Itc2tldGNoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2FsLWxpbmUgbXMtMiBib3JkZXJcIiBbc3R5bGUuYm9yZGVyLWxlZnRdPVwidGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0T3JkZXJlZExpc3QnLCBlZGl0b3JJZClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWxpc3QtbnVtYmVyZWRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JywgZWRpdG9ySWQpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1saXN0LWJ1bGxldGVkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwicWwtYWxpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIGFycm93LW5vbmUgdGV4dC1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRyb3Bkb3duQmFzaWMxXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tbGVmdCBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAzcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBzdHlsZT1cImNvbG9yOiAjN0E3OTgyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5TGVmdCcsIGVkaXRvcklkKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tbGVmdFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIHN0eWxlPVwiY29sb3I6ICM3QTc5ODI7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlDZW50ZXInLCBlZGl0b3JJZClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tY2VudGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgc3R5bGU9XCJjb2xvcjogIzdBNzk4MjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JywgZWRpdG9ySWQpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLXJpZ2h0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgc3R5bGU9XCJjb2xvcjogIzdBNzk4MjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUZ1bGwnLCBlZGl0b3JJZClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tanVzdGlmeVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1saW5lIG1zLTIgYm9yZGVyXCIgW3N0eWxlLmJvcmRlci1sZWZ0XT1cInRoZW1lTW9kZUNsclZlcnRpY2FsTGluZSgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzU3Vic2NyaXB0QWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdWJzY3JpcHQnLCBlZGl0b3JJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1YnNjcmlwdFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdXBlcnNjcmlwdEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3VwZXJzY3JpcHQnLCBlZGl0b3JJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1cGVyc2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJxbC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgYXJyb3ctbm9uZSBlbHMtdG9vbGJhci1idXR0b24gIGJvcmRlci1ub25lIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25CYXNpYzFcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jb2xvci1maWxsXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvci1za2V0Y2ggY29sb3I9XCIjZmZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZUNvbXBsZXRlKT1cInNldENhbnZhc0JhY2tncm91bmRDb2xvcigkZXZlbnQsIGVkaXRvcklkKVwiPjwvY29sb3Itc2tldGNoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwLTIgbXItM1wiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSAgcHgtMVwiIHN0eWxlPVwiaGVpZ2h0OiAyNHB4O1wiIChjbGljayk9XCJnZXRUb2RheSgpXCI+RGF0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAtMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSAgcHgtMVwiIHN0eWxlPVwiaGVpZ2h0OiAyNHB4O1wiIChjbGljayk9XCJpbnNlcnRQYWdlTnVtYmVyKClcIj5QYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgTm88L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZExpbmsoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1saW5rLXZhcmlhbnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydHNJbWFnZShlZGl0b3JJZClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktaW1hZ2VcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImltYWdlSW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9XCJoYW5kbGVJbWFnZVVwbG9hZCgkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJhZGRUYWJsZSgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXRhYmxlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlVGFibGVCb3JkZXJzKClcIj48aSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGlcIiBbbmdDbGFzc109XCJ7IGlzVGFibGVCb3JkZXJlZCA/ICdtZGktYm9yZGVyLW5vbmUnIDogJ21kaS1ib3JkZXItYWxsJyB9XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVRhYmxlQm9yZGVycygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGlcIiBbbmdDbGFzc109XCJpc1RhYmxlQm9yZGVyZWQgPyAnbWRpLWJvcmRlci1ub25lJyA6ICdtZGktYm9yZGVyLWFsbCdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJhZGRSb3coKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcGx1cy1hZnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJkZWxldGVSb3coKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbHVtbigpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1uKClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFRhYmxlKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFJvdygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXBsdXMtYWZ0ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcGx1cy1hZnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VcIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uLTJcIiAoY2xpY2spPVwiZWRpdEltYWdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+RWRpdCBJbWFnZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwidW5kbygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXVuZG9cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwicmVkbygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXJlZG9cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWRJbWFnZVwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24tMlwiIChjbGljayk9XCJlZGl0SW1hZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO1wiPkVkaXQgSW1hZ2U8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiY2xlYXJUZXh0RWRpdG9yKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktY2xvc2UtY2lyY2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICA8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBbaWRdPVwiZWRpdG9ySWRcIiBjbGFzcz1cImVscy1ib3JkZXIgcC0zXCIgI2VkaXRvckhlYWRlciBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OyBcclxuICAgICAgICAgICAgICAgaGVpZ2h0OiAxMzBweDsgXHJcbiAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsgXHJcbiAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47IFxyXG4gICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7IFxyXG4gICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMjBweCAhaW1wb3J0YW50OyBcclxuICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMjBweCAhaW1wb3J0YW50O1wiIFtzdHlsZS5ib3JkZXItdG9wXT1cInRoZW1lTW9kZUJvcmRlclRvcCgpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7J2ZvbnQtZmFtaWx5Jzogc2VsZWN0ZWRGb250LCAnZm9udC1zaXplJzogc2VsZWN0ZWRGb250U2l6ZSArICdweCd9XCIgW3N0eWxlXT1cInN0eWxlXCJcclxuICAgICAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCIgKGlucHV0KT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiSW5zZXJ0IHRleHQgaGVyZSAuLi5cIlxyXG4gICAgICAgIChtb3VzZXVwKT1cIm9uVGV4dFNlbGVjdCgkZXZlbnQpXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRDb250ZW50XCIgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIlxyXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigpXCIgKGNsaWNrKT1cImNoZWNrVGFibGVTZWxlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dGFibGUgKm5nSWY9XCJwYXJzZWRUYWJsZVwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgcGFyc2VkVGFibGUuaGVhZGVyc1wiPnt7IGhlYWRlciB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHBhcnNlZFRhYmxlLnJvd3NcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3dcIj57eyBjZWxsIH19PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuPC9kaXY+Il19