el-text-editor 0.0.87 → 0.0.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -963,13 +963,84 @@ export class ElTextEditorComponent {
|
|
963
963
|
// this.tableAdded = true;
|
964
964
|
// this.checkTableSelection();
|
965
965
|
// }
|
966
|
+
// addTable() {
|
967
|
+
// const tableWidth = 825;
|
968
|
+
// const cols = 3;
|
969
|
+
// const cellMinWidth = tableWidth / cols;
|
970
|
+
// let table = `<br /><table id="customTable" style="width: ${tableWidth}px; border-collapse: collapse;">`;
|
971
|
+
// table += `<tbody>`;
|
972
|
+
// table += `<tr id="tableHeaderRow" style="border-bottom: ${this.themeModeClrVerticalLineForTable()};" (click)="checkTableSelection()">`;
|
973
|
+
// for (let j = 0; j < cols; j++) {
|
974
|
+
// table += `<td class="header-cell"
|
975
|
+
// style="border-top: 2px solid black;
|
976
|
+
// font-weight: bold;
|
977
|
+
// text-align: start;
|
978
|
+
// word-wrap: break-word;
|
979
|
+
// word-break: break-all;
|
980
|
+
// white-space: normal;
|
981
|
+
// min-width: ${cellMinWidth}px;
|
982
|
+
// background-color: inherit !important;
|
983
|
+
// // pointer-events: none !important;
|
984
|
+
// display: table-cell !important;
|
985
|
+
// position: static !important;
|
986
|
+
// height:28px;"></td>`;
|
987
|
+
// }
|
988
|
+
// table += `</tr>`;
|
989
|
+
// for (let i = 0; i < 3; i++) {
|
990
|
+
// table += `<tr style="border-bottom: ${this.themeModeClrVerticalLineForTable()}">`;
|
991
|
+
// for (let j = 0; j < cols; j++) {
|
992
|
+
// table += `<td style="word-wrap: break-word;
|
993
|
+
// word-break: break-all;
|
994
|
+
// white-space: normal;
|
995
|
+
// min-width: ${cellMinWidth}px;
|
996
|
+
// display: table-cell !important;
|
997
|
+
// position: static !important;"> </td>`;
|
998
|
+
// }
|
999
|
+
// table += "</tr>";
|
1000
|
+
// }
|
1001
|
+
// table += `</tbody></table><br/>`;
|
1002
|
+
// const editor = document.getElementById("editor");
|
1003
|
+
// if (editor) {
|
1004
|
+
// editor.focus();
|
1005
|
+
// document.execCommand("insertHTML", false, table);
|
1006
|
+
// }
|
1007
|
+
// this.tableAdded = true;
|
1008
|
+
// this.checkTableSelection();
|
1009
|
+
// // Add styles to prevent table structure breaking
|
1010
|
+
// const style = document.createElement("style");
|
1011
|
+
// style.innerHTML = `
|
1012
|
+
// #customTable {
|
1013
|
+
// table-layout: fixed !important;
|
1014
|
+
// border-collapse: collapse !important;
|
1015
|
+
// }
|
1016
|
+
// #customTable tr {
|
1017
|
+
// display: table-row !important;
|
1018
|
+
// }
|
1019
|
+
// #customTable td {
|
1020
|
+
// display: table-cell !important;
|
1021
|
+
// position: static !important;
|
1022
|
+
// }
|
1023
|
+
// #customTable .header-cell {
|
1024
|
+
// position: static !important;
|
1025
|
+
// }
|
1026
|
+
// #customTable .header-cell > span {
|
1027
|
+
// display: inline !important;
|
1028
|
+
// position: static !important;
|
1029
|
+
// }
|
1030
|
+
// #customTable .header-cell:hover {
|
1031
|
+
// cursor: default !important;
|
1032
|
+
// }
|
1033
|
+
// `;
|
1034
|
+
// document.head.appendChild(style);
|
1035
|
+
// }
|
966
1036
|
addTable() {
|
967
1037
|
const tableWidth = 825;
|
968
1038
|
const cols = 3;
|
969
1039
|
const cellMinWidth = tableWidth / cols;
|
970
1040
|
let table = `<br /><table id="customTable" style="width: ${tableWidth}px; border-collapse: collapse;">`;
|
971
1041
|
table += `<tbody>`;
|
972
|
-
|
1042
|
+
// Table Header Row
|
1043
|
+
table += `<tr id="tableHeaderRow" style="border-bottom: ${this.themeModeClrVerticalLineForTable()};" onclick="checkTableSelection()">`;
|
973
1044
|
for (let j = 0; j < cols; j++) {
|
974
1045
|
table += `<td class="header-cell"
|
975
1046
|
style="border-top: 2px solid black;
|
@@ -980,12 +1051,13 @@ export class ElTextEditorComponent {
|
|
980
1051
|
white-space: normal;
|
981
1052
|
min-width: ${cellMinWidth}px;
|
982
1053
|
background-color: inherit !important;
|
983
|
-
// pointer-events: none !important;
|
984
1054
|
display: table-cell !important;
|
985
1055
|
position: static !important;
|
986
|
-
height:28px;"></td>`;
|
1056
|
+
height:28px;"></td>`;
|
987
1057
|
}
|
1058
|
+
// Properly closing the header row
|
988
1059
|
table += `</tr>`;
|
1060
|
+
// Data Rows
|
989
1061
|
for (let i = 0; i < 3; i++) {
|
990
1062
|
table += `<tr style="border-bottom: ${this.themeModeClrVerticalLineForTable()}">`;
|
991
1063
|
for (let j = 0; j < cols; j++) {
|
@@ -996,9 +1068,10 @@ height:28px;"></td>`;
|
|
996
1068
|
display: table-cell !important;
|
997
1069
|
position: static !important;"> </td>`;
|
998
1070
|
}
|
999
|
-
table +=
|
1071
|
+
table += `</tr>`;
|
1000
1072
|
}
|
1001
1073
|
table += `</tbody></table><br/>`;
|
1074
|
+
// Inserting into the editor
|
1002
1075
|
const editor = document.getElementById("editor");
|
1003
1076
|
if (editor) {
|
1004
1077
|
editor.focus();
|
@@ -1184,23 +1257,65 @@ height:28px;"></td>`;
|
|
1184
1257
|
// }
|
1185
1258
|
// }
|
1186
1259
|
// }
|
1260
|
+
// addColumn() {
|
1261
|
+
// if (this.selectedTable) {
|
1262
|
+
// const columnCount = this.selectedTable.rows[0].cells.length + 1; // New column count
|
1263
|
+
// const tableWidth = this.selectedTable.offsetWidth;
|
1264
|
+
// const minWidth = tableWidth / columnCount;
|
1265
|
+
// for (let i = 0; i < this.selectedTable.rows.length; i++) {
|
1266
|
+
// let cell = this.selectedTable.rows[i].insertCell(-1);
|
1267
|
+
// cell.innerHTML = ' ';
|
1268
|
+
// cell.style.wordWrap = 'break-word';
|
1269
|
+
// cell.style.wordBreak = 'break-all';
|
1270
|
+
// cell.style.whiteSpace = 'normal';
|
1271
|
+
// cell.style.minWidth = `${minWidth}px`;
|
1272
|
+
// cell.style.borderBottom = `2px solid ${this.themeModeClrVerticalLineColorForTable()}`
|
1273
|
+
// }
|
1274
|
+
// // Update existing rows' bottom border
|
1275
|
+
// for (let i = 0; i < this.selectedTable.rows.length; i++) {
|
1276
|
+
// this.selectedTable.rows[i].style.borderBottom = this.themeModeClrVerticalLineForTable();
|
1277
|
+
// }
|
1278
|
+
// }
|
1279
|
+
// }
|
1187
1280
|
addColumn() {
|
1188
1281
|
if (this.selectedTable) {
|
1189
1282
|
const columnCount = this.selectedTable.rows[0].cells.length + 1; // New column count
|
1190
1283
|
const tableWidth = this.selectedTable.offsetWidth;
|
1191
1284
|
const minWidth = tableWidth / columnCount;
|
1285
|
+
// Get the current header background color if any
|
1286
|
+
const firstHeaderCell = this.selectedTable.rows[0]
|
1287
|
+
.cells[0];
|
1288
|
+
const headerBgColor = firstHeaderCell
|
1289
|
+
? firstHeaderCell.style.backgroundColor
|
1290
|
+
: "";
|
1192
1291
|
for (let i = 0; i < this.selectedTable.rows.length; i++) {
|
1193
1292
|
let cell = this.selectedTable.rows[i].insertCell(-1);
|
1194
|
-
cell.innerHTML =
|
1195
|
-
cell.style.wordWrap =
|
1196
|
-
cell.style.wordBreak =
|
1197
|
-
cell.style.whiteSpace =
|
1293
|
+
cell.innerHTML = " ";
|
1294
|
+
cell.style.wordWrap = "break-word";
|
1295
|
+
cell.style.wordBreak = "break-all";
|
1296
|
+
cell.style.whiteSpace = "normal";
|
1198
1297
|
cell.style.minWidth = `${minWidth}px`;
|
1199
1298
|
cell.style.borderBottom = `2px solid ${this.themeModeClrVerticalLineColorForTable()}`;
|
1299
|
+
// If it's the first row, make it a header cell
|
1300
|
+
if (i === 0) {
|
1301
|
+
cell.classList.add("header-cell");
|
1302
|
+
cell.style.fontWeight = "bold";
|
1303
|
+
cell.style.textAlign = "start";
|
1304
|
+
cell.style.pointerEvents = "none";
|
1305
|
+
cell.style.display = "table-cell";
|
1306
|
+
cell.style.position = "static";
|
1307
|
+
cell.style.borderTop = "2px solid black";
|
1308
|
+
// cell.innerText = `Header ${columnCount}`;
|
1309
|
+
// Apply the same background color as existing headers
|
1310
|
+
if (headerBgColor) {
|
1311
|
+
cell.style.backgroundColor = headerBgColor;
|
1312
|
+
}
|
1313
|
+
}
|
1200
1314
|
}
|
1201
1315
|
// Update existing rows' bottom border
|
1202
1316
|
for (let i = 0; i < this.selectedTable.rows.length; i++) {
|
1203
|
-
this.selectedTable.rows[i].style.borderBottom =
|
1317
|
+
this.selectedTable.rows[i].style.borderBottom =
|
1318
|
+
this.themeModeClrVerticalLineForTable();
|
1204
1319
|
}
|
1205
1320
|
}
|
1206
1321
|
}
|
@@ -1881,4 +1996,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
1881
1996
|
type: ViewChild,
|
1882
1997
|
args: ['fullscreen']
|
1883
1998
|
}] } });
|
1884
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWwtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZWwtdGV4dC1lZGl0b3Ivc3JjL2xpYi9lbC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lbC10ZXh0LWVkaXRvci9zcmMvbGliL2VsLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ3RLLE9BQU8sRUFBcUMsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU10Rix5R0FBeUc7QUFDekcsT0FBTyxFQUFFLFFBQVEsRUFBYyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFhakQsTUFBTSxPQUFPLHFCQUFxQjtJQXNGaEMsWUFDVSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsUUFBbUIsRUFDbkIsU0FBdUI7UUFIdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQXhGeEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQVN4QixnQkFBVyxHQUFnQyxPQUFPLENBQUM7UUFDbkQsb0JBQWUsR0FBWSxJQUFJLENBQUMsQ0FBQywwQkFBMEI7UUFDMUQsMEJBQXFCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUMsQ0FBQyxxQkFBcUI7UUFDakcscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9DLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxjQUFTLEdB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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG4vLyBpbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZ3hGdWxsc2NyZWVuRGlyZWN0aXZlIH0gZnJvbSAnQHVsdGltYXRlL25neC1mdWxsc2NyZWVuJztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuLy8gaW1wb3J0IHsgSW1hZ2VFZGl0b3JNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21vZGFscy9pbWFnZS1lZGl0b3ItbW9kYWwvaW1hZ2UtZWRpdG9yLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGNvbXByZXNzLCBkZWNvbXByZXNzIH0gZnJvbSAnbHotc3RyaW5nJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RleHQtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWwtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VsLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFt7XHJcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVsVGV4dEVkaXRvckNvbXBvbmVudCksXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbFRleHRFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgZWRpdG9yVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgZWRpdG9yRnJvbTogYW55O1xyXG4gIEBJbnB1dCgpIGVkaXRvckFjdGlvbjogYW55O1xyXG4gIEBJbnB1dCgpIFVzZXJSb2xlOiBhbnk7XHJcbiAgQElucHV0KCkgc3R5bGU6IGFueTtcclxuICBASW5wdXQoKSBkaXNhYmxlVG9vbGJhcjogYW55O1xyXG4gIEBJbnB1dCgpIHBsYWNlSG9sZGVyOiBhbnk7XHJcbiAgQElucHV0KCkgcmVwb3J0SWQ6IGFueTtcclxuICBASW5wdXQoKSBiYWNrZ3JvdW5kSW1hZ2U6IGFueTtcclxuICBASW5wdXQoKSB0b29sYmFyTW9kZTogJ2ZpeGVkJyB8ICdidWJibGUnIHwgJ25vbmUnID0gJ2ZpeGVkJztcclxuICBASW5wdXQoKSBjb250ZW50RWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlOyAvLyBJbnB1dCBmb3IgaW5pdGlhbCB2YWx1ZVxyXG4gIEBPdXRwdXQoKSBjb250ZW50RWRpdGFibGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTsgLy8gT3V0cHV0IGZvciBjaGFuZ2VzXHJcbiAgQE91dHB1dCgpIGVkaXRvclRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgZWRpdG9yQWN0aW9uUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZWRpdG9yVGV4dENsZWFyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGltYWdlRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBpbWFnZUVkaXQyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHBsYWNlSG9sZGVyUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGlzT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBuZXdJbWFnZUFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgXHJcbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBcclxuICBAVmlld0NoaWxkKCd0ZXh0RWRpdG9yJykgVGV4dEVkaXRvciE6ICBFbGVtZW50UmVmPEVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2Z1bGxzY3JlZW4nKSBmdWxsc2NyZWVuITogTmd4RnVsbHNjcmVlbkRpcmVjdGl2ZVxyXG4gICAgXHJcbiAgc2FuaXRpemVkQ29udGVudCE6IFNhZmVIdG1sO1xyXG5cclxuXHJcbiAgc2hvd1Rvb2xiYXIgPSBmYWxzZTtcclxuICB0b29sYmFyVG9wID0gMDtcclxuICB0b29sYmFyTGVmdCA9IDA7XHJcblxyXG4gIGZvbnRzID0gWydBcmlhbCcsICdDb3VyaWVyIE5ldycsICdHZW9yZ2lhJywgJ1RpbWVzIE5ldyBSb21hbicsICdWZXJkYW5hJ107XHJcbiAgZm9udFNpemVzID0gWzEwLCAxMiwgMTQsIDE2LCAxOCwgMjAsIDI0LCAyOCwgMzIsIDM2XTtcclxuICBzZWxlY3RlZEZvbnQgPSAnQXJpYWwnO1xyXG4gIHNlbGVjdGVkRm9udFNpemUgPSAxNDtcclxuICBpc1RhYmxlU2VsZWN0ZWQgPSBmYWxzZTtcclxuICB0YWJsZUFkZGVkID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRUYWJsZTogSFRNTFRhYmxlRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIGlzUGxhY2Vob2xkZXJWaXNpYmxlID0gdHJ1ZTtcclxuICBzZWxlY3RlZENlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgXHJcbiAgaXNCb2xkQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNJdGFsaWNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1VuZGVybGluZUFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU3RyaWtldGhyb3VnaEFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU3Vic2NyaXB0QWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdXBlcnNjcmlwdEFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzZWxlY3RlZEZvcm1hdEJsb2NrOiBzdHJpbmcgPSAnbm9ybWFsJ1xyXG5cclxuICBzZWxlY3RlZEltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgaW1hZ2VFZGl0VXJsOiBzdHJpbmcgPSAnJztcclxuICBpbWFnZVBvc2l0aW9uWCA9IDA7XHJcbiAgaW1hZ2VQb3NpdGlvblkgPSAwO1xyXG4gIGltYWdlUmVzaXplU3RhcnRYID0gMDtcclxuICBpbWFnZVJlc2l6ZVN0YXJ0WSA9IDA7XHJcbiAgaW1hZ2VSZXNpemVTdGFydFdpZHRoID0gMDtcclxuICBpbWFnZVJlc2l6ZVN0YXJ0SGVpZ2h0ID0gMDtcclxuICBpbWFnZVJlc2l6ZURpcmVjdGlvbjogJ3RvcExlZnQnIHwgJ3RvcFJpZ2h0JyB8ICdib3R0b21MZWZ0JyB8ICdib3R0b21SaWdodCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgdW5kb1N0YWNrOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHJlZG9TdGFjazogc3RyaW5nW10gPSBbXTtcclxuICBoaXN0b3J5OiBzdHJpbmdbXSA9IFtdO1xyXG4gIGhpc3RvcnlJbmRleCA9IC0xO1xyXG4gIC8vIGVkaXRvclRleHQxID0gYGA7XHJcbiAgc2VsZWN0ZWRUZXh0Q29sb3I6IGFueTtcclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcclxuICBjb2xvcjogYW55ID0gJyNkZGQnO1xyXG4gIGNvbG9yRm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDtcclxuICBiYWNrZ3JvdW5kQ29sb3I6IGFueTtcclxuICBzZWxlY3RlZEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHBhcnNlZFRhYmxlOiB7IGhlYWRlcnM6IHN0cmluZ1tdLCByb3dzOiBzdHJpbmdbXVtdIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXNGdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY3VycmVudENhcmV0UG9zaXRpb246IGFueTtcclxuICB1c2VyUm9sZTogYW55W10gPSBbXTtcclxuICBzaG93RWRpdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRIZWFkQmdDb2xvcjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmdldFVzZXJSb2xlcygpXHJcblxyXG4gICAgXHJcbiAgfVxyXG5cclxuICB0aGVtZU1vZGUoKSB7XHJcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcclxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xyXG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjNDAzRjRBICFpbXBvcnRhbnQnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjRDBEMEQwICFpbXBvcnRhbnQnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGVtZU1vZGVDbHIoKSB7XHJcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcclxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xyXG4gICAgICByZXR1cm4gJyNmZmYgIWltcG9ydGFudCdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnIzAwMCAhaW1wb3J0YW50J1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lKCkge1xyXG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXHJcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcclxuICAgICAgcmV0dXJuICcycHggc29saWQgI0ZGRkZGRiAhaW1wb3J0YW50J1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcycHggc29saWQgI0QwRDBEMCAhaW1wb3J0YW50J1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGhlbWVNb2RlQmdDbHIoKSB7XHJcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcclxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xyXG4gICAgICByZXR1cm4gJyMyODI4MjggIWltcG9ydGFudCdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnI0YzRjNGMyAhaW1wb3J0YW50J1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGhlbWVNb2RlQm9yZGVyVG9wKCkge1xyXG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXHJcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcclxuICAgICAgcmV0dXJuICcycHggc29saWQgIzAwMCAhaW1wb3J0YW50J1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcycHggc29saWQgI2ZmZiAhaW1wb3J0YW50J1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1sncGxhY2VIb2xkZXInXSkge1xyXG4gICAgICB0aGlzLmluc2VydEF0Q2FyZXQodGhpcy5wbGFjZUhvbGRlcilcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlcG9ydElkJ10pIHtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgncmVwb3J0SWQnLCB0aGlzLnJlcG9ydElkKVxyXG4gICAgfSBcclxuXHJcbiAgICBpZiAoY2hhbmdlc1snVXNlclJvbGUnXSkgeyBcclxuICAgICAgdGhpcy5nZXRVc2VyUm9sZXMoKVxyXG4gICAgfVxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmluaXRFZGl0b3IoKTtcclxuICAgIHRoaXMuY2hlY2tQbGFjZWhvbGRlcigpO1xyXG4gICAgdGhpcy5zZXR1cEhpc3RvcnkoKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCB0aGlzLm9uRnVsbHNjcmVlbkNoYW5nZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdF9GdW5jKHRoaXMuZWRpdG9yVGV4dClcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsICgpID0+IHtcclxuICAgICAgdGhpcy5jaGVja0FjdGl2ZVN0YXRlcygpO1xyXG4gICAgICB0aGlzLmNoZWNrRm9ybWF0QmxvY2soKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5hZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKTtcclxuICAgIHRoaXMuYWRkQ2xpY2tMaXN0ZW5lclRvRWxlbWVudHMoKTtcclxuICAgIC8vIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHBhcmFtc1snZGF0YSddKTtcclxuICAgIC8vICAgaWYgKGRhdGEuZWRpdGVkSU1HKSB7XHJcbiAgICAvLyAgICAgY29uc3QgaW1nVXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnKTtcclxuICAgIC8vICAgICBpZiAoaW1nVXJsKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLnJlcGxhY2VJbWFnZVNyYyhpbWdVcmwsIGRhdGEuaW5kZXguaW5kZXgpXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pXHJcbiAgfVxyXG5cclxuICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAvLyBDbGVhbnVwIHRoZSBldmVudCBsaXN0ZW5lciB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmdWxsc2NyZWVuY2hhbmdlJywgdGhpcy5vbkZ1bGxzY3JlZW5DaGFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgSXNPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgdG9nZ2xlRnVsbHNjcmVlbjEoKSB7XHJcbiAgICAgIHRoaXMuSXNPcGVuID0gIXRoaXMuSXNPcGVuO1xyXG4gICAgICB0aGlzLmlzT3Blbi5lbWl0KHRoaXMuSXNPcGVuKVxyXG4gICAgICBpZiAodGhpcy5Jc09wZW4pIHsgXHJcbiAgICAgICAgdGhpcy5mdWxsc2NyZWVuLmVudGVyKHRoaXMuVGV4dEVkaXRvci5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZ1bGxzY3JlZW4uZXhpdCgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICBcclxuICBwcml2YXRlIG9uRnVsbHNjcmVlbkNoYW5nZSA9ICgpID0+IHtcclxuICAgIGlmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHtcclxuICAgICAgLy8gV2hlbiBmdWxsc2NyZWVuIG1vZGUgaXMgZXhpdGVkXHJcbiAgICAgIHRoaXMuSXNPcGVuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNPcGVuLmVtaXQodGhpcy5Jc09wZW4pO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgXHJcbiAgLy8gZW50ZXJGdWxsc2NyZWVuVmlkZW8oKSB7XHJcbiAgLy8gICBjb25zb2xlLmxvZygnZXZlbnQ6JywgZXZlbnQpO1xyXG4gIC8vICAgY29uc3QgZnVsbHNjcmVlbiA9IGV2ZW50O1xyXG4gIC8vICAgdGhpcy5pc09wZW4gPSBldmVudDtcclxuICAvLyAgIGlmIChmdWxsc2NyZWVuKSB7XHJcbiAgLy8gICAgIHRoaXMuZnVsbHNjcmVlbi5lbnRlcih0aGlzLlRleHRFZGl0b3IubmF0aXZlRWxlbWVudCk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLmZ1bGxzY3JlZW4uZXhpdCgpXHJcbiAgLy8gICB9XHJcbiAgICBcclxuICAvLyB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5lZGl0b3JUZXh0ID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuaW5pdEVkaXRvcigpO1xyXG4gICAgICB0aGlzLmluaXRfRnVuYyh0aGlzLmVkaXRvclRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuLy8gIHByaXZhdGUgYWRkQ2xpY2tMaXN0ZW5lclRvSW1hZ2VzKCkge1xyXG4vLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuLy8gICBpZiAoZWRpdG9yKSB7XHJcbi8vICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcclxuLy8gICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4vLyAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTUcnKSB7XHJcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbi8vICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xyXG5cclxuLy8gICAgICAgICBsZXQgY29udGFpbmVyID0gdGhpcy5zZWxlY3RlZEltYWdlLnBhcmVudEVsZW1lbnQ7XHJcbi8vICAgICAgICAgaWYgKCFjb250YWluZXIgfHwgY29udGFpbmVyLmNsYXNzTmFtZSAhPT0gJ2ltYWdlLWNvbnRhaW5lcicpIHtcclxuLy8gICAgICAgICAgIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4vLyAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICdpbWFnZS1jb250YWluZXInO1xyXG4vLyAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuLy8gICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbi8vICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgdGhpcy5zZWxlY3RlZEltYWdlKTtcclxuLy8gICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGVkSW1hZ2UpO1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgICBjb25zdCBleGlzdGluZ0J1dHRvbiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuaW1hZ2UtZWRpdC1idXR0b24nKTtcclxuLy8gICAgICAgICBpZiAoZXhpc3RpbmdCdXR0b24pIHtcclxuLy8gICAgICAgICAgIGV4aXN0aW5nQnV0dG9uLnJlbW92ZSgpO1xyXG4vLyAgICAgICAgIH1cclxuXHJcbi8vICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbi8vICAgICAgICAgLy8gYnV0dG9uLnRleHRDb250ZW50ID0gJ0VkaXQnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5pbm5lclRleHQgPSAnRWRpdCBJbWFnZSc7XHJcblxyXG4vLyAgICAgICAgIGJ1dHRvbi5jbGFzc05hbWUgPSAnaW1hZ2UtZWRpdC1idXR0b24gYnRuIGJ0bi1zbSc7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUudG9wID0gJzUwJSc7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSAnNTAlJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKSc7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnpJbmRleCA9ICcxMDAwJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmYnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICNmZmYnO1xyXG4vLyAgICAgICAgIC8vIGJ1dHRvbi5zdHlsZS5wYWRkaW5nID0gJzEwcHgnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5jb2xvciA9ICcjMzEzYTQ2JztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG5cclxuLy8gICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4vLyAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuLy8gICAgICAgICAgIHRoaXMuZWRpdEltYWdlKCk7XHJcbi8vICAgICAgICAgfSk7XHJcblxyXG4vLyAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChidXR0b24pO1xyXG4vLyAgICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XHJcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IG51bGw7XHJcbi8vICAgICAgIH1cclxuLy8gICAgIH0pO1xyXG4vLyAgIH1cclxuICAvLyB9XHJcbiAgZ2V0VXNlclJvbGVzKCkge1xyXG4gICAgdGhpcy51c2VyUm9sZSA9IHRoaXMuVXNlclJvbGVcclxuICB9XHJcbiAgLy8gcm9sZUNoZWNrKCkge1xyXG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnVzZXJSb2xlLmxlbmd0aDsgKytpKSB7XHJcbiAgLy8gICAgIGNvbnN0IHJvbGVOYW1lID0gW11cclxuICAvLyAgICAgICByb2xlTmFtZS5wdXNoKHRoaXMudXNlclJvbGVbaV0/Lm5hbWUpO1xyXG4gIC8vICAgICByZXR1cm4gdGhpcy51c2VyUm9sZVtpXT8ubmFtZTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHJvbGVDaGVjaygpIHtcclxuICAgIGxldCB1c2VyUm9sZU5hbWU6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSB0aGlzLnVzZXJSb2xlLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIHVzZXJSb2xlTmFtZS5wdXNoKHRoaXMudXNlclJvbGVbaV0/Lm5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZXJSb2xlTmFtZTtcclxuICB9XHJcblxyXG5cclxuLy8gcHJpdmF0ZSBhZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKSB7XHJcbi8vICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4vLyAgIGNvbnN0IHJvbGVzID0gdGhpcy5yb2xlQ2hlY2soKTsgLy8gR2V0IHVzZXIgcm9sZXMgZHluYW1pY2FsbHlcclxuLy8gICBjb25zdCBpc0FkbWluID0gcm9sZXMuaW5jbHVkZXMoJ0FkbWluJyk7XHJcbi8vICAgY29uc3QgaXNDcmVhdG9yID0gcm9sZXMuaW5jbHVkZXMoJ0NyZWF0b3InKTtcclxuLy8gICBjb25zdCBpc0FwcHJvdmVyID0gcm9sZXMuaW5jbHVkZXMoJ0FwcHJvdmVyJyk7XHJcbiAgXHJcbi8vICAgaWYgKGlzQ3JlYXRvciB8fCBpc0FkbWluKSB7XHJcbi8vICAgICBpZiAoZWRpdG9yKSB7XHJcbi8vICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcclxuLy8gICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4vLyAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTUcnKSB7XHJcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbi8vICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xyXG4vLyAgICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLnNlbGVjdGVkSW1hZ2UucGFyZW50RWxlbWVudDtcclxuLy8gICAgICAgICBpZiAoIWNvbnRhaW5lciB8fCBjb250YWluZXIuY2xhc3NOYW1lICE9PSAnaW1hZ2UtY29udGFpbmVyJykge1xyXG4vLyAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbi8vICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2ltYWdlLWNvbnRhaW5lcic7XHJcbi8vICAgICAgICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4vLyAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsgIFxyXG4vLyAgICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShjb250YWluZXIsIHRoaXMuc2VsZWN0ZWRJbWFnZSk7XHJcbi8vICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3RlZEltYWdlKTtcclxuLy8gICAgICAgICB9XHJcblxyXG4vLyAgICAgICAgIGNvbnN0IGV4aXN0aW5nQnV0dG9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xyXG4vLyAgICAgICAgIGlmIChleGlzdGluZ0J1dHRvbikge1xyXG4vLyAgICAgICAgICAgZXhpc3RpbmdCdXR0b24ucmVtb3ZlKCk7XHJcbi8vICAgICAgICAgfVxyXG5cclxuLy8gICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuLy8gICAgICAgICBidXR0b24udGV4dENvbnRlbnQgID0gJ0VkaXQgSW1hZ2UnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5jbGFzc05hbWUgPSAnaW1hZ2UtZWRpdC1idXR0b24gYnRuIGJ0bi1zbSc7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUudG9wID0gJzUwJSc7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSAnNTAlJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKSc7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnpJbmRleCA9ICcxMDAwJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmYnOyBcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUuYm9yZGVyID0gJzJweCBzb2xpZCAjZmZmJzsgXHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmNvbG9yID0gJyMzMTNhNDYnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XHJcblxyXG4vLyAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbi8vICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4vLyAgICAgICAgICAgdGhpcy5lZGl0SW1hZ2UoKTtcclxuLy8gICAgICAgICB9KTtcclxuXHJcbi8vICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcblxyXG4vLyAgICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XHJcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IG51bGw7XHJcbi8vICAgICAgICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xyXG4vLyAgICAgICAgIGJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4gYnV0dG9uLnJlbW92ZSgpKTtcclxuLy8gICAgICAgfVxyXG4vLyAgICAgfSk7XHJcbi8vICAgfVxyXG4vLyAgIH1cclxuICAvLyB9XHJcbiAgcHJpdmF0ZSBhZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKSB7XHJcbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gIGNvbnN0IHJvbGVzID0gdGhpcy5yb2xlQ2hlY2soKTsgLy8gR2V0IHVzZXIgcm9sZXMgZHluYW1pY2FsbHlcclxuICBjb25zdCBpc0FkbWluID0gcm9sZXMuaW5jbHVkZXMoJ0FkbWluJyk7XHJcbiAgY29uc3QgaXNDcmVhdG9yID0gcm9sZXMuaW5jbHVkZXMoJ0NyZWF0b3InKTtcclxuXHJcbiAgaWYgKGlzQ3JlYXRvciB8fCBpc0FkbWluKSB7XHJcbiAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTUcnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuICAgICAgICAgIHRoaXMuaW1hZ2VFZGl0VXJsID0gdGhpcy5zZWxlY3RlZEltYWdlLnNyYztcclxuICAgICAgICAgIGNvbnN0IGltYWdlcyA9IGVkaXRvci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XHJcbiAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbWFnZXNbaV0gPT09IHRoaXMuc2VsZWN0ZWRJbWFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGNvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgaWYgKCFjb250YWluZXIgfHwgY29udGFpbmVyLmNsYXNzTmFtZSAhPT0gJ2ltYWdlLWNvbnRhaW5lcicpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnaW1hZ2UtY29udGFpbmVyJztcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShjb250YWluZXIsIHRoaXMuc2VsZWN0ZWRJbWFnZSk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGVkSW1hZ2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQnV0dG9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xyXG4gICAgICAgICAgaWYgKGV4aXN0aW5nQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIGV4aXN0aW5nQnV0dG9uLnJlbW92ZSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gJ0VkaXQgSW1hZ2UnO1xyXG4gICAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdpbWFnZS1lZGl0LWJ1dHRvbiBidG4gYnRuLXNtJztcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gJzUwJSc7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9ICc1MCUnO1xyXG4gICAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknO1xyXG4gICAgICAgICAgYnV0dG9uLnN0eWxlLnpJbmRleCA9ICcxMDAwJztcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZic7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUuYm9yZGVyID0gJzJweCBzb2xpZCAjZmZmJztcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5jb2xvciA9ICcjMzEzYTQ2JztcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUudXNlclNlbGVjdCA9ICdub25lJztcclxuXHJcbiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRJbWFnZSgpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlRWRpdEJ1dHRvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gTW9uaXRvciBlZGl0b3IgY29udGVudCBjaGFuZ2VzIHRvIGhhbmRsZSBpbWFnZSBkZWxldGlvblxyXG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcclxuICAgICAgICBjb25zdCBidXR0b25zID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xyXG4gICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBidXR0b24ucGFyZW50RWxlbWVudDtcclxuICAgICAgICAgIGlmIChjb250YWluZXIgJiYgIWNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xyXG4gICAgICAgICAgICBidXR0b24ucmVtb3ZlKCk7IC8vIFJlbW92ZSB0aGUgYnV0dG9uIGlmIHRoZSBhc3NvY2lhdGVkIGltYWdlIGlzIGdvbmVcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZSgpOyAvLyBDbGVhbiB1cCB0aGUgY29udGFpbmVyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gT2JzZXJ2ZSBjaGFuZ2VzIGluIHRoZSBlZGl0b3JcclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlZGl0b3IsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxucHJpdmF0ZSByZW1vdmVFZGl0QnV0dG9ucygpIHtcclxuICBjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmltYWdlLWVkaXQtYnV0dG9uJyk7XHJcbiAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IGJ1dHRvbi5yZW1vdmUoKSk7XHJcbiAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gbnVsbDtcclxufVxyXG5cclxuXHJcbiAgLy8gcHJpdmF0ZSBhZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKSB7XHJcbiAgLy8gY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gIC8vIGlmIChlZGl0b3IpIHtcclxuICAvLyAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xyXG4gIC8vICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgLy8gICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcclxuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuICAvLyAgICAgICB0aGlzLmltYWdlRWRpdFVybCA9IHRoaXMuc2VsZWN0ZWRJbWFnZS5zcmM7XHJcblxyXG4gIC8vICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGltYWdlXHJcbiAgLy8gICAgICAgY29uc3QgaW1hZ2VzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcclxuICAvLyAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgICAgaWYgKGltYWdlc1tpXSA9PT0gdGhpcy5zZWxlY3RlZEltYWdlKSB7XHJcbiAgLy8gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBpO1xyXG4gIC8vICAgICAgICAgICBicmVhaztcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcblxyXG4gIC8vICAgICAgIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xyXG4gIC8vICAgICAgICAgdGhpcy5vblRleHRTZWxlY3QoKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gbnVsbDtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG4gIC8vIH1cclxuICBcclxuICBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0VsZW1lbnRzKCkge1xyXG4gIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICBpZiAoZWRpdG9yKSB7XHJcbiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTUcnKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gdGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xyXG4gICAgICAgIGNvbnN0IGltYWdlcyA9IGVkaXRvci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChpbWFnZXNbaV0gPT09IHRoaXMuc2VsZWN0ZWRJbWFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnVEQnIHx8IHRhcmdldC50YWdOYW1lID09PSAnVEgnKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGFyZ2V0LmNsb3Nlc3QoJ3RhYmxlJykgYXMgSFRNTFRhYmxlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YXJnZXQudGFnTmFtZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGNlbGxzW2ldID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdQJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1NQQU4nIHx8IHRhcmdldC50YWdOYW1lID09PSAnRElWJykge1xyXG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFyZ2V0LnRhZ05hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYWdyYXBocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKHBhcmFncmFwaHNbaV0gPT09IHRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgfVxyXG5cclxucmVwbGFjZUltYWdlU3JjKG5ld1NyYzogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gIFxyXG4gIGlmIChlZGl0b3IpIHtcclxuICAgIGVkaXRvci5mb2N1cygpXHJcbiAgICBjb25zdCBpbWFnZXMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0lNRycpO1xyXG4gICAgaWYgKGluZGV4ID49IDAgKSB7XHJcbiAgICAgIGltYWdlc1tpbmRleF0uc2V0QXR0cmlidXRlKCdzcmMnLCBuZXdTcmMpO1xyXG4gICAgfSBcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuICBwcml2YXRlIGluaXRFZGl0b3IoKSB7XHJcbiAgICAvLyBJbml0aWFsaXplIGVkaXRvciBjb250ZW50IGFuZCBsaXN0ZW5lcnNcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuXHJcbiAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLmVkaXRvclRleHQ7XHJcbiAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAvLyBIYW5kbGUgdGhlIGRpc2FibGVkIHN0YXRlIGlmIG5lY2Vzc2FyeVxyXG4gIH1cclxuXHJcbiAgb25Nb2RlbENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgVkFMVUUgPSB2YWx1ZVxyXG4gICAgICB0aGlzLmVkaXRvclRleHQgPSBWQUxVRTtcclxuICAgICAgdGhpcy5vbkNoYW5nZShWQUxVRSk7XHJcbiAgICAgIHRoaXMuZWRpdG9yVGV4dENoYW5nZS5lbWl0KFZBTFVFKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseUltYWdlU3R5bGVzKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGRpdi5pbm5lckhUTUwgPSBjb250ZW50O1xyXG4gICAgY29uc3QgaW1hZ2VzID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xyXG4gICAgaW1hZ2VzLmZvckVhY2goaW1nID0+IHtcclxuICAgICAgaWYgKGltZy5zdHlsZS5tYXhXaWR0aCA+PSAnNzAwcHgnKSB7XHJcbiAgICAgICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzcwMHB4JztcclxuICAgICAgICAvLyBpbWcud2lkdGggPSAzMDA7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcclxuICB9XHJcblxyXG4gIC8vIGluaXRfRnVuYyhodG1sOiBhbnkpIHtcclxuICAvLyAgIGlmIChodG1sKSB7XHJcbiAgLy8gICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgLy8gICAgIGlmIChlZGl0b3IpIHsgXHJcbiAgLy8gICAgICAgZWRpdG9yLmZvY3VzKClcclxuICAvLyAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gaHRtbDtcclxuICAvLyAgICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xyXG4gIC8vICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLnNhbml0aXplZENvbnRlbnQgYXMgc3RyaW5nO1xyXG4gIC8vICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuICAvLyAgICAgICAgIGlmIChlZGl0b3IpIHtcclxuICAvLyAgICAgICAgICAgZWRpdG9yLmZvY3VzKClcclxuICAvLyAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGVkaXRvci5pbm5lckhUTUwpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0pO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBcclxuLy8gICBpbml0X0Z1bmMoaHRtbDogYW55KSB7XHJcbi8vICAgaWYgKGh0bWwpIHtcclxuLy8gICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbi8vICAgICBpZiAoZWRpdG9yKSB7XHJcbi8vICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGVkaXRvciB3aXRoIHNhbml0aXplZCBjb250ZW50XHJcbiAgICAgIFxyXG4vLyAgICAgICB0aGlzLnNldEVkaXRvckNvbnRlbnQoaHRtbCk7XHJcblxyXG4vLyAgICAgICAvLyBTZXQgdXAgYSBNdXRhdGlvbk9ic2VydmVyIHRvIGhhbmRsZSBjb250ZW50IGNoYW5nZXNcclxuLy8gICAgICAgdGhpcy5zZXR1cE11dGF0aW9uT2JzZXJ2ZXIoZWRpdG9yKTtcclxuXHJcbi8vICAgICAgIC8vIE1vdmUgdGhlIGNhcmV0IHRvIHRoZSBlbmQgYWZ0ZXIgaW5pdGlhbCBjb250ZW50IHNldHVwXHJcbi8vICAgICAgIHRoaXMubW92ZUNhcmV0VG9FbmQoZWRpdG9yKTtcclxuXHJcbi8vICAgICAgIC8vIFRyYWNrIGNhcmV0IHBvc2l0aW9uIG9uIG1vdXNlIGNsaWNrXHJcbi8vICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuLy8gICAgICAgICBpZiAoZWRpdG9yKSB7ICAvLyBFbnN1cmUgZWRpdG9yIGlzIG5vdCBudWxsXHJcbi8vICAgICAgICAgICAvLyB0aGlzLnRyYWNrQ2FyZXRQb3NpdGlvbihlZGl0b3IpO1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfSk7XHJcbi8vICAgICB9XHJcbi8vICAgfSBlbHNlIHtcclxuLy8gICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XHJcbi8vICAgfVxyXG4vLyB9XHJcblxyXG4vLyBwcml2YXRlIHNldEVkaXRvckNvbnRlbnQoaHRtbDogc3RyaW5nKSB7XHJcbi8vICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuLy8gICBpZiAoZWRpdG9yKSB7XHJcbi8vICAgICAvLyBTYW5pdGl6ZSBhbmQgYXBwbHkgc3R5bGVzIHRvIHRoZSBIVE1MXHJcbi8vICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xyXG4vLyAgICAgZWRpdG9yLmlubmVySFRNTCA9IHRoaXMuc2FuaXRpemVkQ29udGVudCBhcyBzdHJpbmc7XHJcbi8vICAgfVxyXG4vLyB9XHJcblxyXG4vLyBwcml2YXRlIHNldHVwTXV0YXRpb25PYnNlcnZlcihlZGl0b3I6IEhUTUxFbGVtZW50KSB7XHJcbi8vICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XHJcbi8vICAgICAvLyBVcGRhdGUgbW9kZWwgd2l0aCB0aGUgY3VycmVudCBjb250ZW50XHJcbi8vICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XHJcbi8vICAgfSk7XHJcblxyXG4vLyAgIG9ic2VydmVyLm9ic2VydmUoZWRpdG9yLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcclxuLy8gfVxyXG5cclxuLy8gVGhpcyBmdW5jdGlvbiB0cmFja3MgdGhlIGNhcmV0IHBvc2l0aW9uIGJhc2VkIG9uIHRoZSBtb3VzZSBjbGlja1xyXG5wcml2YXRlIHRyYWNrQ2FyZXRQb3NpdGlvbihlZGl0b3I6IEhUTUxFbGVtZW50KSB7XHJcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgY29uc3Qgc3RhcnROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICBjb25zdCBzdGFydE9mZnNldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0O1xyXG5cclxuXHJcbiAgICAvLyBZb3UgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGluc2VydCBjb250ZW50IG9yIHBlcmZvcm0gYWN0aW9ucyBiYXNlZCBvbiB0aGUgY2FyZXQgcG9zaXRpb25cclxuICAgIC8vIEV4YW1wbGU6IFNhdmUgdGhlIGN1cnJlbnQgY2FyZXQgcG9zaXRpb24gZm9yIGZ1dHVyZSB1c2VcclxuICAgIHRoaXMuY3VycmVudENhcmV0UG9zaXRpb24gPSB7IG5vZGU6IHN0YXJ0Tm9kZSwgb2Zmc2V0OiBzdGFydE9mZnNldCB9O1xyXG4gIH1cclxuICB9XHJcbiAgXHJcbiAgLy8gTWV0aG9kIHRvIGdldCBjYXJldCBwb3NpdGlvbiBhbmQgaW5zZXJ0IG5ldyBkYXRhXHJcbnByaXZhdGUgaW5zZXJ0QXRDYXJldChuZXdEYXRhOiBzdHJpbmcpOiB2b2lkIHtcclxuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgXHJcbiAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgIC8vIEdldCB0aGUgY3VycmVudCByYW5nZSAoY2FyZXQgcG9zaXRpb24pXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIGRvY3VtZW50IGZyYWdtZW50IHRvIGluc2VydCAoYWxsb3dzIGhhbmRsaW5nIEhUTUwgc3RyaW5ncylcclxuICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG4gICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdEYXRhO1xyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgbmV3IGRhdGEgdG8gdGhlIGZyYWdtZW50IChzdXBwb3J0cyBIVE1MIGluc2VydGlvbilcclxuICAgIHdoaWxlICh0ZW1wRGl2LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQodGVtcERpdi5maXJzdENoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbnNlcnQgdGhlIGZyYWdtZW50IGF0IHRoZSBjYXJldCBwb3NpdGlvblxyXG4gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsgLy8gUmVtb3ZlIGFueSBzZWxlY3RlZCBjb250ZW50IGlmIGFwcGxpY2FibGVcclxuICAgIHJhbmdlLmluc2VydE5vZGUoZnJhZ21lbnQpO1xyXG5cclxuICAgIC8vIE1vdmUgdGhlIGNhcmV0IGFmdGVyIHRoZSBpbnNlcnRlZCBjb250ZW50XHJcbiAgICBjb25zdCBsYXN0Q2hpbGQgPSBmcmFnbWVudC5sYXN0Q2hpbGQ7XHJcblxyXG4gICAgaWYgKGxhc3RDaGlsZCkge1xyXG4gICAgICByYW5nZS5zZXRTdGFydEFmdGVyKGxhc3RDaGlsZCk7XHJcbiAgICAgIHJhbmdlLnNldEVuZEFmdGVyKGxhc3RDaGlsZCk7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIH1cclxuICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgIHRoaXMubW92ZUNhcmV0VG9FbmQoZWRpdG9yKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLnBsYWNlSG9sZGVyUmVtb3ZlLmVtaXQoKVxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vICAgLy8gTW92ZSBjYXJldCB0byB0aGUgZW5kIG9mIHRoZSBlZGl0b3IgY29udGVudFxyXG4vLyAgIHByaXZhdGUgbW92ZUNhcmV0VG9FbmQoZWRpdG9yOiBIVE1MRWxlbWVudCkge1xyXG4vLyAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4vLyAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgXHJcbi8vICAgICBpZiAoZWRpdG9yLmxhc3RDaGlsZCkge1xyXG4vLyAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcclxuLy8gICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpOyAvLyBDb2xsYXBzZSB0byB0aGUgZW5kXHJcbi8vICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbi8vICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICBcclxuLy8gICAgIH1cclxuLy8gICB9XHJcbiAgXHJcbiAgXHJcblxyXG5cclxuICBpbml0X0Z1bmMoaHRtbDogYW55KSB7XHJcbiAgaWYgKGh0bWwpIHtcclxuICAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGVkaXRvciB3aXRoIHNhbml0aXplZCBjb250ZW50XHJcbiAgICAgIHRoaXMuc2V0RWRpdG9yQ29udGVudChodG1sKTtcclxuXHJcbiAgICAgIC8vIFNldCB1cCBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gaGFuZGxlIGNvbnRlbnQgY2hhbmdlc1xyXG4gICAgICB0aGlzLnNldHVwTXV0YXRpb25PYnNlcnZlcihlZGl0b3IpO1xyXG4gICAgICBcclxuICAgICAgLy8gTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCBhZnRlciBpbml0aWFsIGNvbnRlbnQgc2V0dXBcclxuICAgICAgdGhpcy5tb3ZlQ2FyZXRUb0VuZChlZGl0b3IpO1xyXG4gICAgICAvLyAgVHJhY2sgY2FyZXQgcG9zaXRpb24gb24gbW91c2UgY2xpY2tcclxuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGlmIChlZGl0b3IpIHsgIC8vIEVuc3VyZSBlZGl0b3IgaXMgbm90IG51bGxcclxuICAgICAgICAgIHRoaXMudHJhY2tDYXJldFBvc2l0aW9uKGVkaXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuICB9XHJcbn1cclxuXHJcblxyXG5wcml2YXRlIHNldEVkaXRvckNvbnRlbnQoaHRtbDogc3RyaW5nKSB7XHJcbiAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICBpZiAoZWRpdG9yKSB7XHJcbiAgICAvLyBTYW5pdGl6ZSBhbmQgYXBwbHkgc3R5bGVzIHRvIHRoZSBIVE1MXHJcbiAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xyXG4gICAgZWRpdG9yLmlubmVySFRNTCA9IHRoaXMuc2FuaXRpemVkQ29udGVudCBhcyBzdHJpbmc7XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIHNldHVwTXV0YXRpb25PYnNlcnZlcihlZGl0b3I6IEhUTUxFbGVtZW50KSB7XHJcbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XHJcbiAgICAvLyBNb3ZlIHRoZSBjYXJldCB0byB0aGUgZW5kIGFmdGVyIGNvbnRlbnQgY2hhbmdlc1xyXG4gICAgLy8gdGhpcy5tb3ZlQ2FyZXRUb0VuZChlZGl0b3IpO1xyXG4gICAgLy8gVXBkYXRlIG1vZGVsIHdpdGggdGhlIGN1cnJlbnQgY29udGVudFxyXG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGVkaXRvci5pbm5lckhUTUwpO1xyXG4gIH0pO1xyXG5cclxuICBvYnNlcnZlci5vYnNlcnZlKGVkaXRvciwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XHJcbn1cclxuXHJcbnByaXZhdGUgbW92ZUNhcmV0VG9FbmQoZWRpdG9yOiBIVE1MRWxlbWVudCkge1xyXG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgXHJcbiAgaWYgKGVkaXRvci5sYXN0Q2hpbGQpIHtcclxuICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpO1xyXG4gICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpOyAvLyBDb2xsYXBzZSB0byB0aGUgZW5kXHJcbiAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyAgIGluaXRfRnVuYyhodG1sOiBhbnkpIHtcclxuLy8gICBpZiAoaHRtbCkge1xyXG4vLyAgICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuLy8gICAgIGlmIChlZGl0b3IpIHtcclxuLy8gICAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbi8vICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSBodG1sO1xyXG5cclxuLy8gICAgICAgLy8gU2FuaXRpemUgdGhlIGNvbnRlbnQgYW5kIGFwcGx5IHN0eWxlc1xyXG4vLyAgICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaHRtbCkpO1xyXG4vLyAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5zYW5pdGl6ZWRDb250ZW50IGFzIHN0cmluZztcclxuXHJcbi8vICAgICAgIC8vIFBsYWNlIHRoZSBjYXJldCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50XHJcbi8vICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuLy8gICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBcclxuLy8gICAgICAgaWYgKGVkaXRvci5sYXN0Q2hpbGQpIHtcclxuLy8gICAgICAgICAvLyBTZXQgdGhlIHJhbmdlIGF0IHRoZSBlbmQgb2YgdGhlIGVkaXRvcidzIGNvbnRlbnRcclxuLy8gICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTtcclxuLy8gICAgICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7IC8vIGNvbGxhcHNlIHRvIHRoZSBlbmRcclxuLy8gICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xyXG4vLyAgICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xyXG4vLyAgICAgICB9XHJcblxyXG4vLyAgICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XHJcbi8vICAgICAgICAgaWYgKGVkaXRvcikge1xyXG4vLyAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKGVkaXRvci5pbm5lckhUTUwpO1xyXG5cclxuLy8gICAgICAgICAgIC8vIEVuc3VyZSB0aGUgY2FyZXQgcmVtYWlucyBhdCB0aGUgZW5kIGFmdGVyIG5ldyBjb250ZW50IGlzIGFkZGVkXHJcbi8vICAgICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbi8vICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICBcclxuLy8gICAgICAgICAgIGlmIChlZGl0b3IubGFzdENoaWxkKSB7XHJcbi8vICAgICAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpO1xyXG4vLyAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7IC8vIGNvbGxhcHNlIHRvIHRoZSBlbmRcclxuLy8gICAgICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcclxuLy8gICAgICAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XHJcbi8vICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9KTtcclxuLy8gICAgIH1cclxuLy8gICB9IGVsc2Uge1xyXG4vLyAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbiAgZm9ybWF0KGNvbW1hbmQ6IHN0cmluZywgdmFsdWU/OiBhbnkpIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgICAgIGlmIChjb21tYW5kID09PSAnc3Vic2NyaXB0Jykge1xyXG4gICAgICAgIHRoaXMuaXNTdWJzY3JpcHRBY3RpdmUgPSAhdGhpcy5pc1N1YnNjcmlwdEFjdGl2ZTtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnc3Vic2NyaXB0JywgZmFsc2UsICcnKTtcclxuICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09PSAnc3VwZXJzY3JpcHQnKSB7XHJcbiAgICAgICAgdGhpcy5pc1N1cGVyc2NyaXB0QWN0aXZlID0gIXRoaXMuaXNTdXBlcnNjcmlwdEFjdGl2ZTtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnc3VwZXJzY3JpcHQnLCBmYWxzZSwgJycpOztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgdmFsdWUgPz8gJycpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3QgdGFnID0gdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bPD5dL2csICcnKVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZvcm1hdEJsb2NrID0gdGhpcy5mb3JtYXRCbG9ja0RlY29kZSh0YWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgIHRoaXMuY2hlY2tBY3RpdmVTdGF0ZXMoKTtcclxuICAgICB0aGlzLmNoZWNrRm9ybWF0QmxvY2soKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWN0aXZlU3RhdGVzKCkge1xyXG4gICAgdGhpcy5pc0JvbGRBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnYm9sZCcpO1xyXG4gICAgdGhpcy5pc0l0YWxpY0FjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKCdpdGFsaWMnKTtcclxuICAgIHRoaXMuaXNVbmRlcmxpbmVBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgndW5kZXJsaW5lJyk7XHJcbiAgICB0aGlzLmlzU3RyaWtldGhyb3VnaEFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKCdzdHJpa2V0aHJvdWdoJyk7XHJcbiAgICB0aGlzLmlzU3Vic2NyaXB0QWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ3N1YnNjcmlwdCcpO1xyXG4gICAgdGhpcy5pc1N1cGVyc2NyaXB0QWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ3N1cGVyc2NyaXB0Jyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0Zvcm1hdEJsb2NrKCkge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKGVkaXRvcikge1xyXG4gICAgICBjb25zdCBmb3JtYXRCbG9jayA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JtYXRCbG9jaycpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRm9ybWF0QmxvY2sgPSB0aGlzLmZvcm1hdEJsb2NrRGVjb2RlKGZvcm1hdEJsb2NrKTtcclxuICAgICAgLy8gWW91IGNhbiBmdXJ0aGVyIGhhbmRsZSB0aGUgZm9ybWF0QmxvY2sgdmFsdWUgYXMgbmVlZGVkXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRCbG9ja0RlY29kZShkYXRhOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoIChkYXRhKSB7XHJcbiAgICAgIGNhc2UgJ2gxJzpcclxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2gyJzpcclxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2gzJzpcclxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgMyc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2g0JzpcclxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2g1JzpcclxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2g2JzpcclxuICAgICAgICByZXR1cm4gJ2hlYWRpbmcgNic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3AnOlxyXG4gICAgICAgIHJldHVybiAnbm9ybWFsJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJ25vcm1hbCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGb250KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGb250ID0gZXZlbnQ7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udE5hbWUnLCBmYWxzZSwgdGhpcy5zZWxlY3RlZEZvbnQpO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJ0Q29kZUJsb2NrKCkge1xyXG4gICAgY29uc3QgY29kZSA9IGBcclxuICAgICAgPHByZSBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcclxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcclxuICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xyXG4gICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7XHJcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweCAxMHB4O1wiPlxyXG4gICAgICAgIDxjb2RlIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgICAgICAgICAgICAgICBmb250LWZhbWlseTogTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcclxuICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1wiIGNsYXNzPVwibGFuZ3VhZ2UtaHRtbFwiPkluc2VydCBjb2RlIGhlcmUuLi48L2NvZGU+XHJcbiAgICAgIDwvcHJlPlxyXG4gICAgYDtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIGNvZGUpO1xyXG4gIH1cclxuXHJcbiAgLy8gY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnRTaXplJywgZmFsc2UsICc3Jyk7XHJcbiAgLy8gICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gIC8vICAgaWYgKGVkaXRvcikge1xyXG4gIC8vICAgICBsZXQgZm9udEVsZW1lbnRzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb250Jyk7XHJcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgaWYgKGZvbnRFbGVtZW50c1tpXS5zaXplID09IFwiN1wiKSB7XHJcbiAgLy8gICAgICAgICBmb250RWxlbWVudHNbaV0ucmVtb3ZlQXR0cmlidXRlKFwic2l6ZVwiKTtcclxuICAvLyAgICAgICAgIGZvbnRFbGVtZW50c1tpXS5zdHlsZS5mb250U2l6ZSA9IHRoaXMuc2VsZWN0ZWRGb250U2l6ZSArICdweCc7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG4gIGNoYW5nZUZvbnRTaXplKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIFxyXG4gICAgaWYgKHNlbGVjdGVkVGV4dCAmJiBzZWxlY3RlZFRleHQucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGVkVGV4dC5nZXRSYW5nZUF0KDApO1xyXG4gICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IHRoaXMuc2VsZWN0ZWRGb250U2l6ZSArICdweCc7XHJcbiAgICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZExpbmsoKSB7XHJcbiAgICBsZXQgdXJsID0gcHJvbXB0KFwiRW50ZXIgdGhlIGxpbmsgaGVyZTogXCIsIFwiaHR0cDovL1wiKTtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjcmVhdGVMaW5rXCIsIGZhbHNlLCB1cmwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5zZXJ0c0ltYWdlKCkge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKGVkaXRvcikge1xyXG4gICAgICBlZGl0b3IuZm9jdXMoKTtcclxuICAgICAgbGV0IGltYWdlSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2VJbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgIGlmIChpbWFnZUlucHV0KSB7XHJcbiAgICAgICAgaW1hZ2VJbnB1dC5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBoYW5kbGVJbWFnZVVwbG9hZChldmVudDogYW55KSB7XHJcbiAgLy8gICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gIC8vICAgaWYgKGZpbGUpIHtcclxuICAvLyAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAvLyAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAvLyAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAvLyAgICAgICBpbWcuc3JjID0gZS50YXJnZXQucmVzdWx0O1xyXG4gIC8vICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgLy8gICAgICAgICAvLyBDcmVhdGUgdGhlIEhUTUwgc3RyaW5nIHdpdGggdGhlIGV4YWN0IHdpZHRoIGFuZCBoZWlnaHRcclxuICAvLyAgICAgICAgIGNvbnN0IGltZ0hUTUwgPSBgPGltZyBzcmM9XCIke2ltZy5zcmN9XCIgd2lkdGg9XCIkezc5NH1cIiA+YDtcclxuICAvLyAgICAgICAgIC8vIEluc2VydCB0aGUgaW1hZ2UgaW50byB0aGUgZWRpdG9yXHJcbiAgLy8gICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBpbWdIVE1MKTtcclxuICAvLyAgICAgICB9O1xyXG4gIC8vICAgICB9O1xyXG4gIC8vICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGhhbmRsZUltYWdlVXBsb2FkKGV2ZW50OiBhbnkpIHtcclxuICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gIGNvbnN0IGVkaXRvckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7IC8vIFJlZmVyZW5jZSB0byB0aGUgZWRpdG9yXHJcblxyXG4gIGlmIChmaWxlICYmIGVkaXRvckVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGVkaXRvcldpZHRoID0gZWRpdG9yRWxlbWVudC5vZmZzZXRXaWR0aDsgLy8gR2V0IHRoZSBlZGl0b3IncyB3aWR0aFxyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuXHJcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1nV2lkdGggPSBpbWcud2lkdGg7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBpbWFnZSB3aWR0aCBleGNlZWRzIHRoZSBlZGl0b3IncyB3aWR0aCwgZml0IGl0IHRvIHRoZSBlZGl0b3JcclxuICAgICAgICBjb25zdCBpbWdIVE1MID1cclxuICAgICAgICAgIGltZ1dpZHRoID4gZWRpdG9yV2lkdGhcclxuICAgICAgICAgICAgPyBgPGltZyBzcmM9XCIke2ltZy5zcmN9XCIgc3R5bGU9XCIgbWF4LXdpZHRoOiAkezcwMH1weDsgaGVpZ2h0OiBhdXRvO1wiPmBcclxuICAgICAgICAgICAgOiBgPGltZyBzcmM9XCIke2ltZy5zcmN9XCIgc3R5bGU9XCJ3aWR0aDogJHtpbWdXaWR0aH1weDsgaGVpZ2h0OiBhdXRvO1wiPmA7XHJcbiAgICAgICAgdGhpcy5uZXdJbWFnZUFkZGVkLmVtaXQoKVxyXG4gICAgICAgIC8vIEluc2VydCB0aGUgaW1hZ2UgaW50byB0aGUgZWRpdG9yXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgaW1nSFRNTCk7XHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG4gIC8vIGFkZFRhYmxlKCkge1xyXG4gIC8vICAgY29uc3QgdGFibGVXaWR0aCA9IDgyNTsgLy8gVGFibGUgd2lkdGggaW4gcGl4ZWxzXHJcbiAgLy8gICBjb25zdCBjb2xzID0gMzsgLy8gTnVtYmVyIG9mIGNvbHVtbnNcclxuICAvLyAgIGNvbnN0IGNlbGxNaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2xzOyAvLyBDYWxjdWxhdGUgbWluaW11bSB3aWR0aCBmb3IgZWFjaCBjZWxsXHJcblxyXG4gIC8vICAgbGV0IHRhYmxlID0gYDxiciAvPjx0YWJsZSBzdHlsZT1cIndpZHRoOiAke3RhYmxlV2lkdGh9cHg7XCI+YDtcclxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7IC8vIE51bWJlciBvZiByb3dzXHJcbiAgLy8gICAgIHRhYmxlICs9ICc8dHIgPic7XHJcbiAgLy8gICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XHJcbiAgLy8gICAgICAgdGFibGUgKz0gYDx0ZCBzdHlsZT1cIiB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgbWluLXdpZHRoOiAke2NlbGxNaW5XaWR0aH1weDtcIj4mbmJzcDs8L3RkPmA7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgdGFibGUgKz0gJzwvdHI+JztcclxuICAvLyAgIH1cclxuICAvLyAgICAgdGFibGUgKz0gJzwvdGFibGU+PGJyLyA+JztcclxuICAvLyAgICAgLy8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgdGFibGUpO1xyXG4gIC8vICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgLy8gICBpZiAoZWRpdG9yKSB7XHJcbiAgLy8gICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCB0YWJsZSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICB0aGlzLnRhYmxlQWRkZWQgPSB0cnVlO1xyXG4gIC8vICAgdGhpcy5jaGVja1RhYmxlU2VsZWN0aW9uKCk7XHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgaGFuZGxlVGFiS2V5KGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gU3RvcCBkZWZhdWx0IHRhYmJpbmcgYmVoYXZpb3JcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgICAgY29uc3QgdGFiTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpOyAvLyBDcmVhdGUgYSBzcGFuIGVsZW1lbnQgZm9yIHRoZSB0YWIgc3BhY2VcclxuICAgICAgdGFiTm9kZS5pbm5lckhUTUwgPSBcIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1wiOyAvLyBGb3VyIG5vbi1icmVha2luZyBzcGFjZXMgdG8gbWltaWMgdGFiXHJcbiAgICAgIFxyXG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpOyAvLyBSZW1vdmUgYW55IHNlbGVjdGVkIHRleHRcclxuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZSh0YWJOb2RlKTsgLy8gSW5zZXJ0IHRoZSB0YWIgc3BhY2UgYXMgc3BhblxyXG4gICAgICByYW5nZS5zZXRTdGFydEFmdGVyKHRhYk5vZGUpOyAvLyBNb3ZlIGN1cnNvciBhZnRlciB0aGUgaW5zZXJ0ZWQgc3BhblxyXG4gICAgICByYW5nZS5zZXRFbmRBZnRlcih0YWJOb2RlKTtcclxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuLy8gICBhZGRUYWJsZSgpIHtcclxuLy8gICBjb25zdCB0YWJsZVdpZHRoID0gODI1OyAvLyBUYWJsZSB3aWR0aCBpbiBwaXhlbHNcclxuLy8gICBjb25zdCBjb2xzID0gMzsgLy8gTnVtYmVyIG9mIGNvbHVtbnNcclxuLy8gICBjb25zdCBjZWxsTWluV2lkdGggPSB0YWJsZVdpZHRoIC8gY29sczsgLy8gQ2FsY3VsYXRlIG1pbmltdW0gd2lkdGggZm9yIGVhY2ggY2VsbFxyXG5cclxuLy8gICBsZXQgdGFibGUgPSBgPGJyIC8+PHRhYmxlIHN0eWxlPVwid2lkdGg6ICR7dGFibGVXaWR0aH1weDtcIj5gO1xyXG4vLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7IC8vIE51bWJlciBvZiByb3dzXHJcbi8vICAgICB0YWJsZSArPSBgPHRyIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJHt0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCl9XCI+YDsgLy8gQWRkIGJvcmRlci1ib3R0b20gdG8gdGhlIHJvd1xyXG4vLyAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcclxuLy8gICAgICAgdGFibGUgKz0gYDx0ZCBzdHlsZT1cIndvcmQtd3JhcDogYnJlYWstd29yZDsgd29yZC1icmVhazogYnJlYWstYWxsOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyBtaW4td2lkdGg6ICR7Y2VsbE1pbldpZHRofXB4O1wiPiZuYnNwOzwvdGQ+YDtcclxuLy8gICAgIH1cclxuLy8gICAgIHRhYmxlICs9ICc8L3RyPic7XHJcbi8vICAgfVxyXG4vLyAgIHRhYmxlICs9ICc8L3RhYmxlPjxici8+JztcclxuXHJcbi8vICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4vLyAgIGlmIChlZGl0b3IpIHtcclxuLy8gICAgIGVkaXRvci5mb2N1cygpO1xyXG4vLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgdGFibGUpO1xyXG4vLyAgIH1cclxuXHJcbi8vICAgdGhpcy50YWJsZUFkZGVkID0gdHJ1ZTtcclxuLy8gICB0aGlzLmNoZWNrVGFibGVTZWxlY3Rpb24oKTtcclxuLy8gfVxyXG5hZGRUYWJsZSgpIHtcclxuICBjb25zdCB0YWJsZVdpZHRoID0gODI1O1xyXG4gIGNvbnN0IGNvbHMgPSAzO1xyXG4gIGNvbnN0IGNlbGxNaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2xzO1xyXG5cclxuICBsZXQgdGFibGUgPSBgPGJyIC8+PHRhYmxlIGlkPVwiY3VzdG9tVGFibGVcIiBzdHlsZT1cIndpZHRoOiAke3RhYmxlV2lkdGh9cHg7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCI+YDtcclxuXHJcbiAgdGFibGUgKz0gYDx0Ym9keT5gO1xyXG4gIHRhYmxlICs9IGA8dHIgaWQ9XCJ0YWJsZUhlYWRlclJvd1wiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJHt0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCl9O1wiIChjbGljayk9XCJjaGVja1RhYmxlU2VsZWN0aW9uKClcIj5gO1xyXG4gIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XHJcbiAgICB0YWJsZSArPSBgPHRkIGNsYXNzPVwiaGVhZGVyLWNlbGxcIiBcclxuICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci10b3A6IDJweCBzb2xpZCBibGFjazsgXHJcbiAgICAgICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyBcclxuICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogc3RhcnQ7IFxyXG4gICAgICAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IFxyXG4gICAgICAgICAgICAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7IFxyXG4gICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOyBcclxuICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAke2NlbGxNaW5XaWR0aH1weDsgXHJcbiAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDsgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50O1xyXG5oZWlnaHQ6MjhweDtcIj48L3RkPmA7XHJcbiAgfVxyXG4gIHRhYmxlICs9IGA8L3RyPmA7XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICB0YWJsZSArPSBgPHRyIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJHt0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCl9XCI+YDtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XHJcbiAgICAgIHRhYmxlICs9IGA8dGQgc3R5bGU9XCJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAke2NlbGxNaW5XaWR0aH1weDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XCI+Jm5ic3A7PC90ZD5gO1xyXG4gICAgfVxyXG4gICAgdGFibGUgKz0gXCI8L3RyPlwiO1xyXG4gIH1cclxuICB0YWJsZSArPSBgPC90Ym9keT48L3RhYmxlPjxici8+YDtcclxuXHJcbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZGl0b3JcIik7XHJcbiAgaWYgKGVkaXRvcikge1xyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydEhUTUxcIiwgZmFsc2UsIHRhYmxlKTtcclxuICB9XHJcblxyXG4gIHRoaXMudGFibGVBZGRlZCA9IHRydWU7XHJcbiAgdGhpcy5jaGVja1RhYmxlU2VsZWN0aW9uKCk7XHJcblxyXG4gIC8vIEFkZCBzdHlsZXMgdG8gcHJldmVudCB0YWJsZSBzdHJ1Y3R1cmUgYnJlYWtpbmdcclxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcclxuICBzdHlsZS5pbm5lckhUTUwgPSBgXHJcbiAgI2N1c3RvbVRhYmxlIHtcclxuICAgIHRhYmxlLWxheW91dDogZml4ZWQgIWltcG9ydGFudDtcclxuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcclxuICB9XHJcbiAgI2N1c3RvbVRhYmxlIHRyIHtcclxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xyXG4gIH1cclxuICAjY3VzdG9tVGFibGUgdGQge1xyXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xyXG4gICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50O1xyXG4gIH1cclxuICAjY3VzdG9tVGFibGUgLmhlYWRlci1jZWxsIHtcclxuICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcclxuICB9XHJcbiAgI2N1c3RvbVRhYmxlIC5oZWFkZXItY2VsbCA+IHNwYW4ge1xyXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XHJcbiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gICNjdXN0b21UYWJsZSAuaGVhZGVyLWNlbGw6aG92ZXIge1xyXG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5gO1xyXG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG59XHJcbi8vIEZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgZmlyc3Qgcm93ICh0aGVhZCkgYmFja2dyb3VuZCBjb2xvclxyXG5zZXRUaGVhZEJnQ29sb3IoZXZlbnQ6IGFueSkge1xyXG4gIGNvbnN0IHNlbGVjdGVkQ29sb3IgPSBldmVudC50YXJnZXQudmFsdWU7XHJcblxyXG4gIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcclxuICAgIGNvbnN0IGhlYWRlclJvdyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5xdWVyeVNlbGVjdG9yKFwidHJcIikgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKGhlYWRlclJvdykge1xyXG4gICAgICBjb25zdCBoZWFkZXJDZWxscyA9IGhlYWRlclJvdy5xdWVyeVNlbGVjdG9yQWxsKFwiLmhlYWRlci1jZWxsXCIpO1xyXG4gICAgICBoZWFkZXJDZWxscy5mb3JFYWNoKChjZWxsOiBFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgKGNlbGwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGVkQ29sb3I7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG4gIGNoZWNrVGFibGVTZWxlY3Rpb24oZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBsZXQgdGFyZ2V0ID0gZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldC50YWdOYW1lID09PSAnVEQnIHx8IHRhcmdldC50YWdOYW1lID09PSAnVEgnKSkge1xyXG4gICAgICB0aGlzLmlzVGFibGVTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IHRhcmdldC5jbG9zZXN0KCd0YWJsZScpIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzVGFibGVTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyB0aGlzLmNoZWNrUGxhY2Vob2xkZXIoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrUGxhY2Vob2xkZXIoKSB7XHJcbiAgICAvLyBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgLy8gaWYgKGVkaXRvcikge1xyXG4gICAgLy8gICB0aGlzLmlzUGxhY2Vob2xkZXJWaXNpYmxlID0gZWRpdG9yLmlubmVySFRNTCA9PT0gJycgfHwgZWRpdG9yLmlubmVySFRNTCA9PT0gJzxicj4nO1xyXG4gICAgLy8gICBpZiAodGhpcy5pc1BsYWNlaG9sZGVyVmlzaWJsZSkge1xyXG4gICAgLy8gICAgIC8vIGVkaXRvci5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlclwiIHN0eWxlPVwiYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGNvbG9yOiAjMDAwMDAwXCI+SW5zZXJ0IHRleHQgaGVyZSAuLi48L3NwYW4+JztcclxuICAgIC8vICAgfSBlbHNlIHtcclxuICAgIC8vICAgICBsZXQgcGxhY2Vob2xkZXIgPSBlZGl0b3IucXVlcnlTZWxlY3RvcignLnBsYWNlaG9sZGVyJyk7XHJcbiAgICAvLyAgICAgaWYgKHBsYWNlaG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICBlZGl0b3IucmVtb3ZlQ2hpbGQocGxhY2Vob2xkZXIpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgb25Gb2N1cygpIHtcclxuICAgIC8vIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICAvLyBpZiAoZWRpdG9yICYmIHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUpIHtcclxuICAgIC8vICAgZWRpdG9yLmlubmVySFRNTCA9ICcnO1xyXG4gICAgLy8gICB0aGlzLmlzUGxhY2Vob2xkZXJWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICAvLyBjb2xvckNoYW5nZShuZXdDb2xvcjogc3RyaW5nKSB7XHJcbiAgLy8gICB0aGlzLmNvbG9yID0gbmV3Q29sb3I7XHJcbiAgLy8gfVxyXG5cclxuICBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLmNoZWNrUGxhY2Vob2xkZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIGFkZFJvdygpIHtcclxuICAvLyAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcclxuICAvLyAgICAgbGV0IHJvdyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5pbnNlcnRSb3coKTtcclxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgIGxldCBjZWxsID0gcm93Lmluc2VydENlbGwoaSk7XHJcbiAgLy8gICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7JztcclxuICAvLyAgICAgICBjZWxsLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBhZGRSb3coKSB7XHJcbiAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4gICAgbGV0IHJvdyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5pbnNlcnRSb3coKTtcclxuXHJcbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIGNvbHVtbnMgb2YgdGhlIGZpcnN0IHJvdyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBjZWxsc1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY2VsbCA9IHJvdy5pbnNlcnRDZWxsKGkpO1xyXG4gICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xyXG5cclxuICAgICAgLy8gQXBwbHkgYm90dG9tIGJvcmRlciBleHBsaWNpdGx5XHJcbiAgICAgIGNlbGwuc3R5bGUuYm9yZGVyQm90dG9tID0gYDJweCBzb2xpZCAke3RoaXMudGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lQ29sb3JGb3JUYWJsZSgpfWA7IC8vIFlvdSBjYW4gcmVwbGFjZSAnYmxhY2snIHdpdGggeW91ciB0aGVtZSBjb2xvclxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8gICBhZGRSb3coKSB7XHJcbi8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4vLyAgICAgbGV0IHJvdyA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5pbnNlcnRSb3coKTtcclxuLy8gICAgIHJvdy5zdHlsZS5ib3JkZXJCb3R0b20gPSB0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCk7IC8vIEFkZCBib3R0b20gYm9yZGVyIHRvIHRoZSByb3dcclxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbMF0uY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuLy8gICAgICAgbGV0IGNlbGwgPSByb3cuaW5zZXJ0Q2VsbChpKTtcclxuLy8gICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7JztcclxuLy8gICAgIH1cclxuLy8gICB9XHJcbi8vIH1cclxuXHJcblxyXG4gIC8vIGRlbGV0ZVJvdygpIHtcclxuICAvLyAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcclxuICAvLyAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLmRlbGV0ZVJvdygtMSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuLy8gICBkZWxldGVSb3coKSB7XHJcbi8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4vLyAgICAgbGV0IHJvd0luZGV4ID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoIC0gMTsgXHJcbi8vICAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xyXG4vLyAgICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4vLyAgICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbi8vICAgICAgICAgbGV0IHJvdyA9IHNlbGVjdGlvbi5hbmNob3JOb2RlPy5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KCd0cicpO1xyXG4vLyAgICAgICAgIGlmIChyb3cpIHtcclxuLy8gICAgICAgICAgIHJvd0luZGV4ID0gcm93LnJvd0luZGV4O1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfVxyXG4vLyAgICAgfVxyXG4vLyAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLmRlbGV0ZVJvdyhyb3dJbmRleCk7XHJcbi8vICAgfVxyXG4vLyB9XHJcblxyXG4gIGRlbGV0ZVJvdygpIHtcclxuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgY29uc3Qgcm93ID0gc2VsZWN0ZWROb2RlLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ3RyJyk7XHJcblxyXG4gICAgaWYgKHJvdykge1xyXG4gICAgICBjb25zdCB0YWJsZSA9IHJvdy5jbG9zZXN0KCd0YWJsZScpO1xyXG4gICAgICBpZiAodGFibGUpIHtcclxuICAgICAgICB0YWJsZS5kZWxldGVSb3cocm93LnJvd0luZGV4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbiAgLy8gYWRkQ29sdW1uKCkge1xyXG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgbGV0IGNlbGwgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5pbnNlcnRDZWxsKC0xKTtcclxuICAvLyAgICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xyXG4gIC8vICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4vLyAgIGFkZENvbHVtbigpIHtcclxuLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbi8vICAgICBjb25zdCBjb2x1bW5Db3VudCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aCArIDE7IC8vIE5ldyBjb2x1bW4gY291bnRcclxuLy8gICAgIGNvbnN0IHRhYmxlV2lkdGggPSB0aGlzLnNlbGVjdGVkVGFibGUub2Zmc2V0V2lkdGg7XHJcbi8vICAgICBjb25zdCBtaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2x1bW5Db3VudDtcclxuXHJcbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbi8vICAgICAgIGxldCBjZWxsID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uaW5zZXJ0Q2VsbCgtMSk7XHJcbi8vICAgICAgIGNlbGwuaW5uZXJIVE1MID0gJyZuYnNwOyc7XHJcbi8vICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XHJcbi8vICAgICAgIGNlbGwuc3R5bGUubWluV2lkdGggPSBgJHttaW5XaWR0aH1weGA7XHJcbi8vICAgICAgIGNlbGwuc3R5bGUud29yZFdyYXAgPSAnYnJlYWstd29yZCc7XHJcbi8vICAgICAgIGNlbGwuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XHJcbi8vICAgICAgIGNlbGwuc3R5bGUud2hpdGVTcGFjZSA9ICdub3JtYWwnO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjZWxscycgbWluV2lkdGhcclxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxscy5sZW5ndGg7IGorKykge1xyXG4vLyAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzW2pdLnN0eWxlLm1pbldpZHRoID0gYCR7bWluV2lkdGh9cHhgO1xyXG4vLyAgICAgICB9XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG4gIC8vIH1cclxuICBcclxuICBhZGRDb2x1bW4oKSB7XHJcbiAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4gICAgY29uc3QgY29sdW1uQ291bnQgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGggKyAxOyAvLyBOZXcgY29sdW1uIGNvdW50XHJcbiAgICBjb25zdCB0YWJsZVdpZHRoID0gdGhpcy5zZWxlY3RlZFRhYmxlLm9mZnNldFdpZHRoO1xyXG4gICAgY29uc3QgbWluV2lkdGggPSB0YWJsZVdpZHRoIC8gY29sdW1uQ291bnQ7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY2VsbCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmluc2VydENlbGwoLTEpO1xyXG4gICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xyXG4gICAgICBjZWxsLnN0eWxlLndvcmRXcmFwID0gJ2JyZWFrLXdvcmQnO1xyXG4gICAgICBjZWxsLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnO1xyXG4gICAgICBjZWxsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm9ybWFsJztcclxuICAgICAgY2VsbC5zdHlsZS5taW5XaWR0aCA9IGAke21pbldpZHRofXB4YDtcclxuICAgICAgY2VsbC5zdHlsZS5ib3JkZXJCb3R0b20gPSBgMnB4IHNvbGlkICR7dGhpcy50aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmVDb2xvckZvclRhYmxlKCl9YFxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBleGlzdGluZyByb3dzJyBib3R0b20gYm9yZGVyXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLnN0eWxlLmJvcmRlckJvdHRvbSA9IHRoaXMudGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgfVxyXG4gIFxyXG5cclxuXHJcblxyXG5cclxuICBkZWxldGVDb2x1bW4oKSB7XHJcbiAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcclxuICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIGxldCBjZWxsID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ3RkLCB0aCcpIGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50O1xyXG4gICAgICAgIGlmIChjZWxsKSB7XHJcbiAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gY2VsbC5jZWxsSW5kZXg7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmRlbGV0ZUNlbGwoY2VsbEluZGV4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiAgdGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKSB7XHJcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcclxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xyXG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjNDE0MTQxICFpbXBvcnRhbnQnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjNUY1RjVGICFpbXBvcnRhbnQnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmVDb2xvckZvclRhYmxlKCkge1xyXG4gICAgY29uc3QgY2xyTW9kZSA9IGRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCdkYXRhLWxheW91dC1jb2xvcicpXHJcbiAgICBpZiAoY2xyTW9kZSA9PSAnZGFyaycpIHtcclxuICAgICAgcmV0dXJuICcjNDE0MTQxJ1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcjNUY1RjVGJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRqdXN0VGFibGVXaWR0aChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5zdHlsZS53aWR0aCA9IGV2ZW50LnRhcmdldC52YWx1ZSArICdweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGp1c3RDZWxsV2lkdGgoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxscy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHNbal0uc3R5bGUud2lkdGggPSBldmVudC50YXJnZXQudmFsdWUgKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRqdXN0Q2VsbEhlaWdodChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS5oZWlnaHQgPSBldmVudC50YXJnZXQudmFsdWUgKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDYXJldFRvRW5kKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmIChzZWwpIHtcclxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xyXG4gICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xyXG4gICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIG9wZW5Db2xvclBpY2tlcihpbnB1dElkOiBzdHJpbmcpIHtcclxuICAvLyAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpO1xyXG4gIC8vICAgaWYgKGlucHV0RWxlbWVudCkge1xyXG4gIC8vICAgICBpbnB1dEVsZW1lbnQuY2xpY2soKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIHNldFRleHRDb2xvcihldmVudDogYW55KSB7XHJcbiAgLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgLy8gICBpZiAoZWRpdG9yKSB7XHJcbiAgLy8gICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIC8vICAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAvLyAgICAgdGhpcy5zZWxlY3RlZFRleHRDb2xvciA9IGNvbG9yO1xyXG4gIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgZmFsc2UsIGNvbG9yKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIHNldEJhY2tncm91bmRDb2xvcihldmVudDogYW55KSB7XHJcbiAgLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgLy8gICBpZiAoZWRpdG9yKSB7XHJcbiAgLy8gICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIC8vICAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAvLyAgICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcclxuICAvLyAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2hpbGl0ZUNvbG9yJywgZmFsc2UsIGNvbG9yKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgc2F2ZWRTZWxlY3Rpb246IFJhbmdlIHwgbnVsbCA9IG51bGw7XHJcblxyXG5vcGVuQ29sb3JQaWNrZXIoaW5wdXRJZDogc3RyaW5nKSB7XHJcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICBpZiAoaW5wdXRFbGVtZW50KSB7XHJcbiAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHNlbGVjdGlvblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgfVxyXG4gICAgaW5wdXRFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBzZXRUZXh0Q29sb3IoZXZlbnQ6IGFueSkge1xyXG4vLyAgIGlmICh0aGlzLnNhdmVkU2VsZWN0aW9uKSB7XHJcbi8vICAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuLy8gICAgIHRoaXMuc2VsZWN0ZWRUZXh0Q29sb3IgPSBjb2xvcjtcclxuXHJcbi8vICAgICAvLyBSZXN0b3JlIHRoZSBzYXZlZCBzZWxlY3Rpb25cclxuLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuLy8gICAgIGlmIChzZWxlY3Rpb24pIHtcclxuLy8gICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4vLyAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UodGhpcy5zYXZlZFNlbGVjdGlvbik7XHJcblxyXG4vLyAgICAgICAvLyBBcHBseSB0aGUgY29sb3IgdXNpbmcgYSBzcGFuXHJcbi8vICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zYXZlZFNlbGVjdGlvbjtcclxuLy8gICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuLy8gICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9IGNvbG9yO1xyXG4vLyAgICAgICBzcGFuLnRleHRDb250ZW50ID0gcmFuZ2UudG9TdHJpbmcoKTtcclxuXHJcbi8vICAgICAgIC8vIFJlcGxhY2UgdGhlIHNlbGVjdGVkIHRleHQgd2l0aCB0aGUgc3R5bGVkIHNwYW5cclxuLy8gICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcclxuLy8gICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuXHJcbi8vICAgICAgIC8vIENsZWFyIHRoZSBzYXZlZCBzZWxlY3Rpb25cclxuLy8gICAgICAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9IG51bGw7XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG4gIC8vIH1cclxuLy8gICBzZXRUZXh0Q29sb3IoZXZlbnQ6IGFueSkge1xyXG4vLyAgIGlmICh0aGlzLnNhdmVkU2VsZWN0aW9uKSB7XHJcbi8vICAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuLy8gICAgIHRoaXMuc2VsZWN0ZWRUZXh0Q29sb3IgPSBjb2xvcjtcclxuXHJcbi8vICAgICAvLyBSZXN0b3JlIHRoZSBzYXZlZCBzZWxlY3Rpb25cclxuLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuLy8gICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbi8vICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zYXZlZFNlbGVjdGlvbjtcclxuLy8gICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4vLyAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG5cclxuLy8gICAgICAgLy8gR2V0IHNlbGVjdGVkIGVsZW1lbnRzXHJcbi8vICAgICAgIGNvbnN0IHNlbGVjdGVkQ29udGVudCA9IHJhbmdlLmNsb25lQ29udGVudHMoKTtcclxuLy8gICAgICAgY29uc3QgZWxlbWVudHMgPSBBcnJheS5mcm9tKHNlbGVjdGVkQ29udGVudC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkgYXMgSFRNTEVsZW1lbnRbXTsgLy8g4pyFIEV4cGxpY2l0bHkgY2FzdCB0byBIVE1MRWxlbWVudFtdXHJcblxyXG4vLyAgICAgICAvLyBBcHBseSBjb2xvciB0byBlYWNoIGVsZW1lbnQgd2l0aG91dCBtb2RpZnlpbmcgc3RydWN0dXJlXHJcbi8vICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7XHJcbi8vICAgICAgICAgZWwuc3R5bGUuY29sb3IgPSBjb2xvcjtcclxuLy8gICAgICAgfSk7XHJcblxyXG4vLyAgICAgICAvLyBBcHBseSBjb2xvciB0byB0aGUgdG9wLWxldmVsIHRleHQgbm9kZXMgKHdpdGhvdXQgd3JhcHBpbmcgdGhlbSlcclxuLy8gICAgICAgQXJyYXkuZnJvbShzZWxlY3RlZENvbnRlbnQuY2hpbGROb2RlcykuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4vLyAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlLnRleHRDb250ZW50Py50cmltKCkgIT09IFwiXCIpIHtcclxuLy8gICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLnBhcmVudEVsZW1lbnQ7XHJcbi8vICAgICAgICAgICBpZiAocGFyZW50KSB7XHJcbi8vICAgICAgICAgICAgIHBhcmVudC5zdHlsZS5jb2xvciA9IGNvbG9yO1xyXG4vLyAgICAgICAgICAgfVxyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfSk7XHJcblxyXG4vLyAgICAgICAvLyBSZXBsYWNlIHNlbGVjdGVkIGNvbnRlbnRcclxuLy8gICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcclxuLy8gICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzZWxlY3RlZENvbnRlbnQpO1xyXG5cclxuLy8gICAgICAgLy8gQ2xlYXIgc2F2ZWQgc2VsZWN0aW9uXHJcbi8vICAgICAgIHRoaXMuc2F2ZWRTZWxlY3Rpb24gPSBudWxsO1xyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuLy8gfVxyXG5cclxuc2V0VGV4dENvbG9yKGV2ZW50OiBhbnkpIHtcclxuICBjb25zb2xlLmxvZyhcIkNsaWNrZWQgc2V0VGV4dENvbG9yXCIpO1xyXG4gIGlmICghdGhpcy5zYXZlZFNlbGVjdGlvbikge1xyXG4gICAgY29uc29sZS53YXJuKFwiTm8gc2F2ZWQgc2VsZWN0aW9uIGF2YWlsYWJsZSFcIik7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICB0aGlzLnNlbGVjdGVkVGV4dENvbG9yID0gY29sb3I7XHJcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG5cclxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xyXG4gICAgY29uc29sZS5lcnJvcihcIk5vIHZhbGlkIHNlbGVjdGlvbiBmb3VuZCFcIik7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgc2VsZWN0aW9uLmFkZFJhbmdlKHRoaXMuc2F2ZWRTZWxlY3Rpb24pO1xyXG4gIGNvbnN0IHJhbmdlID0gdGhpcy5zYXZlZFNlbGVjdGlvbjtcclxuXHJcbiAgY29uc3QgZ2V0VGFibGVDZWxsID0gKG5vZGU6IE5vZGUgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsID0+IHtcclxuICAgIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XHJcbiAgICBpZiAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XHJcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAoY3VycmVudE5vZGUgJiYgY3VycmVudE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gICAgICBpZiAoY3VycmVudE5vZGUudGFnTmFtZSA9PT0gXCJURFwiIHx8IGN1cnJlbnROb2RlLnRhZ05hbWUgPT09IFwiVEhcIikge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9O1xyXG5cclxuICBjb25zdCB0YWJsZUNlbGwgPVxyXG4gICAgZ2V0VGFibGVDZWxsKHJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKSB8fFxyXG4gICAgZ2V0VGFibGVDZWxsKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSB8fFxyXG4gICAgZ2V0VGFibGVDZWxsKHJhbmdlLmVuZENvbnRhaW5lcik7XHJcblxyXG4gIGlmICh0YWJsZUNlbGwpIHtcclxuICAgIGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nICR7dGFibGVDZWxsLnRhZ05hbWV9IGVsZW1lbnRgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFRleHQpIHtcclxuICAgICAgY29uc29sZS5sb2coYFNlbGVjdGVkIHRleHQgaW4gJHt0YWJsZUNlbGwudGFnTmFtZX06YCwgc2VsZWN0ZWRUZXh0KTtcclxuICAgICAgY29uc3QgdGV4dE5vZGVzOiBUZXh0W10gPSBbXTtcclxuICAgICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcclxuICAgICAgICB0YWJsZUNlbGwsXHJcbiAgICAgICAgTm9kZUZpbHRlci5TSE9XX1RFWFQsXHJcbiAgICAgICAgbnVsbFxyXG4gICAgICApO1xyXG4gICAgICBsZXQgbm9kZTogVGV4dCB8IG51bGw7XHJcblxyXG4gICAgICB3aGlsZSAoKG5vZGUgPSB3YWxrZXIubmV4dE5vZGUoKSBhcyBUZXh0IHwgbnVsbCkpIHtcclxuICAgICAgICB0ZXh0Tm9kZXMucHVzaChub2RlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChjb25zdCB0ZXh0Tm9kZSBvZiB0ZXh0Tm9kZXMpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gdGV4dE5vZGUudGV4dENvbnRlbnQgfHwgXCJcIjtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRleHQuaW5kZXhPZihzZWxlY3RlZFRleHQpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgYEZvdW5kIHNlbGVjdGVkIHRleHQgaW4gJHt0YWJsZUNlbGwudGFnTmFtZX0gdGV4dCBub2RlYFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XHJcbiAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gY29sb3I7XHJcbiAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gc2VsZWN0ZWRUZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGJlZm9yZVRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KTtcclxuICAgICAgICAgIGNvbnN0IGFmdGVyVGV4dCA9IHRleHQuc2xpY2UoaW5kZXggKyBzZWxlY3RlZFRleHQubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcclxuICAgICAgICAgIGlmIChiZWZvcmVUZXh0KVxyXG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiZWZvcmVUZXh0KSk7XHJcbiAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChzcGFuKTtcclxuICAgICAgICAgIGlmIChhZnRlclRleHQpXHJcbiAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGFmdGVyVGV4dCkpO1xyXG5cclxuICAgICAgICAgIHRleHROb2RlLnJlcGxhY2VXaXRoKGZyYWdtZW50KTtcclxuICAgICAgICAgIGJyZWFrOyAvLyBBcHBseSBvbmx5IG9uY2UgcGVyIHNlbGVjdGlvblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIk5vIFRIIG9yIFREIGVsZW1lbnQgZm91bmQgaW4gc2VsZWN0aW9uXCIpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9IG51bGw7XHJcbn1cclxuXHJcbiAgc2V0QmFja2dyb3VuZENvbG9yKGV2ZW50OiBhbnkpIHtcclxuICBpZiAodGhpcy5zYXZlZFNlbGVjdGlvbikge1xyXG4gICAgY29uc3QgY29sb3IgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xyXG5cclxuICAgIC8vIFJlc3RvcmUgdGhlIHNhdmVkIHNlbGVjdGlvblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLnNhdmVkU2VsZWN0aW9uKTtcclxuXHJcbiAgICAgIC8vIEFwcGx5IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHVzaW5nIGEgc3BhblxyXG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2F2ZWRTZWxlY3Rpb247XHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3I7XHJcbiAgICAgIHNwYW4udGV4dENvbnRlbnQgPSByYW5nZS50b1N0cmluZygpO1xyXG5cclxuICAgICAgLy8gUmVwbGFjZSB0aGUgc2VsZWN0ZWQgdGV4dCB3aXRoIHRoZSBzdHlsZWQgc3BhblxyXG4gICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuICAgICAgLy8gQ2xlYXIgdGhlIHNhdmVkIHNlbGVjdGlvblxyXG4gICAgICB0aGlzLnNhdmVkU2VsZWN0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgfVxyXG4gIFxyXG4gIC8vIGNvbG9yQ2hhbmdlZChldmVudDogYW55KSB7XHJcbiAgLy8gICB0aGlzLmNvbG9yID0gZXZlbnQuY29sb3IuaGV4OyBcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBsb2dFdmVudChldmVudDogYW55LCB0cmlnZ2VyOiBhbnkpIHtcclxuICAgIGNvbnN0IGNvbG9yID0gZXZlbnQ7XHJcbiAgICB0aGlzLnNldFRleHRDb2xvcihjb2xvcilcclxuICAgIHRoaXMuc2VsZWN0ZWRUZXh0Q29sb3IgPSBldmVudFxyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvcmVDb2xvcicsIGZhbHNlLCBldmVudCk7XHJcbiAgICAvLyB0aGlzLmxvZ3MudW5zaGlmdChbdGhpcy5sb2dzLmxlbmd0aCArIDEsIHRyaWdnZXIsIGV2ZW50XSk7XHJcbiAgfVxyXG4gIFxyXG5cclxuICBlZGl0SW1hZ2UoKSB7XHJcbiAgICBsZXQgZGF0YSBcclxuICAgIHN3aXRjaCAodGhpcy5lZGl0b3JGcm9tLm5hbWUpIHtcclxuICAgICAgY2FzZSAnc2VjdGlvbi1jb250ZW50JzpcclxuICAgICAgICBkYXRhID0geyBlZGl0SU1HOiB0cnVlLCBmcm9tOiAnaHRtbEVkaXRvcicsIGluZGV4OiB0aGlzLnNlbGVjdGVkSXRlbUluZGV4LCBpZDogdGhpcy5lZGl0b3JGcm9tLmlkIH07XHJcbiAgICAgICAgY29uc3QgY29tcHJlc3NlZERhdGE6IHN0cmluZyA9IGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSk7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnLCBjb21wcmVzc2VkRGF0YSk7XHJcbiAgICAgICAgY29uc3QgY29tcHJlc3NlZERhdGEyID0gY29tcHJlc3MoSlNPTi5zdHJpbmdpZnkodGhpcy5zYW5pdGl6ZWRDb250ZW50KSk7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndGV4dEVkaXRvcicsIGNvbXByZXNzZWREYXRhMik7XHJcbiAgICAgICAgLy8gYWxlcnQoJ2dvIHRvIGVkaXRvciEnKVxyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb0lNR0VkaXRvcihkYXRhKTtcclxuICAgICAgICB0aGlzLmltYWdlRWRpdC5lbWl0KClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3JlYXRlLWRvY3VtZW50JzpcclxuICAgICAgICB0aGlzLmltYWdlRWRpdC5lbWl0KClcclxuICAgICAgICBkYXRhID0geyBlZGl0SU1HOiB0cnVlLCBmcm9tOiAnY3JlYXRlRG9jdW1lbnQnLCBpbmRleDogdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCwgaWQ6IHRoaXMuZWRpdG9yRnJvbS5pZCwgc2VjdGlvbjogdGhpcy5lZGl0b3JGcm9tLnNlY3Rpb24sIHJlcG9ydFNlY3Rpb25JZDogdGhpcy5lZGl0b3JGcm9tLnJlcG9ydFNlY3Rpb25JZCB9O1xyXG4gICAgICAgIC8vIHRoaXMub3BlbkRpYWxvZyhkYXRhKVxyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhMyA9IGNvbXByZXNzKEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSk7XHJcbiAgICAgICAgY29uc3QgY29tcHJlc3NlZERhdGE0ID0gY29tcHJlc3ModGhpcy5lZGl0b3JUZXh0KTtcclxuXHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJywgY29tcHJlc3NlZERhdGEzKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0ZXh0RWRpdG9yMicsIGNvbXByZXNzZWREYXRhNCk7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvSU1HRWRpdG9yKGRhdGEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIG51bGxcclxuICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcpO1xyXG4gICAgICAgIC8vIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wMicpO1xyXG4gICAgICAgIC8vIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3RlbXBsYXRlRWRpdG9yJyk7XHJcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGV4dEVkaXRvcicpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMuZWRpdG9yRnJvbSA9PT0gJ3NlY3Rpb24tY29udGVudCcpIHtcclxuICAgIC8vICAgY29uc3QgZGF0YSA9IHtlZGl0SU1HOiB0cnVlLCBmcm9tOiAnaHRtbEVkaXRvcicsIGluZGV4OiB0aGlzLnNlbGVjdGVkSXRlbUluZGV4fVxyXG4gICAgLy8gICB0aGlzLm5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YSlcclxuICAgIC8vICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmltYWdlRWRpdFVybCkpXHJcbiAgICAvLyAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3RleHRFZGl0b3InLCB0aGlzLmVkaXRvclRleHQpXHJcbiAgICAvLyB9IFxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBvcGVuRGlhbG9nKCBpdGVtOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIGxldCBkYXRhOiBhbnk7XHJcbiAgICAvLyAgIGRhdGEgPSBpdGVtXHJcbiAgICAvLyBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEltYWdlRWRpdG9yTW9kYWxDb21wb25lbnQse1xyXG4gICAgLy8gICBtaW5XaWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6ICcxMDB2aCcsIHBhbmVsQ2xhc3M6ICd0aGVtZS0yQjI5MzYnICxkaXNhYmxlQ2xvc2U6IHRydWUsIGRhdGE6IGRhdGFcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdyZXN1bHQgPT09PiBpbWcgPSAnLCByZXN1bHQpXHJcbiAgICAvLyAgIGNvbnN0IGltZ1VybCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wMicpO1xyXG4gICAgLy8gICAgIGlmIChpbWdVcmwpIHtcclxuICAgIC8vICAgICAgIHRoaXMucmVwbGFjZUltYWdlU3JjKGltZ1VybCwgIHJlc3VsdC5pbmRleC5pbmRleCk7XHJcbiAgICAvLyAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcDInKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VJbWFnZVNSQyhuZXdTcmM6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xyXG4gICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0aGlzLmVkaXRvclRleHQsICd0ZXh0L2h0bWwnKTtcclxuICAgIGNvbnN0IGltZ1RhZ3MgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xyXG5cclxuICBpZiAoaW1nVGFncyAmJiBpbWdUYWdzLmxlbmd0aCA+IDApIHtcclxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgaW1nVGFncy5sZW5ndGgpIHtcclxuICAgICAgLy8gVXBkYXRlIHRoZSBzcmMgYXR0cmlidXRlIG9mIHRoZSBpbWcgYXQgdGhlIHNwZWNpZmllZCBpbmRleFxyXG4gICAgICBcclxuICAgICAgaW1nVGFnc1tpbmRleF0uc2V0QXR0cmlidXRlKCdzcmMnLCBuZXdTcmMpO1xyXG4gICAgICB0aGlzLmVkaXRvclRleHQgPSBkb2MuYm9keS5pbm5lckhUTUw7XHJcbiAgICBcclxuICAgIH0gXHJcbiAgfSBcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hZG1pbi9pbWFnZS1lZGl0b3InXSwgeyBxdWVyeVBhcmFtczoge2RhdGEgOiBKU09OLnN0cmluZ2lmeShkYXRhKX0gfSlcclxuICB9XHJcblxyXG4gIC8vICBvblRleHRTZWxlY3QoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAvLyAgIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xyXG4gIC8vICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgLy8gICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7XHJcbiAgLy8gICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAvLyAgICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gIC8vICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gIC8vICAgICAgICAgdGhpcy50b29sYmFyVG9wID0gcmVjdC5ib3R0b20gKyB3aW5kb3cuc2Nyb2xsWSArIDEwO1xyXG4gIC8vICAgICAgICAgdGhpcy50b29sYmFyTGVmdCA9IHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYICsgKHJlY3Qud2lkdGggLyAyKSAtIDUwO1xyXG4gIC8vICAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IHRydWU7XHJcbiAgLy8gICAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmYWxzZTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gb25UZXh0U2VsZWN0KGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gIGlmICh0aGlzLnRvb2xiYXJNb2RlID09PSAnYnViYmxlJykge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcclxuICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsWSA9ICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFggPSAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7XHJcbiAgICAgICAgdGhpcy50b29sYmFyVG9wID0gcmVjdC50b3AgKyBzY3JvbGxZIC0gNzU7XHJcbiAgICAgICAgdGhpcy50b29sYmFyTGVmdCA9IHJlY3QubGVmdCArIHNjcm9sbFggKyAocmVjdC53aWR0aCAvIDIpIC0gMzI1O1xyXG4gICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbi8vICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4vLyAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGE7XHJcbi8vICAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xyXG4vLyAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbi8vICAgICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKHBhc3RlZFRleHQpKSB7XHJcbi8vICAgICAgICAgY29uc3QgaHRtbCA9IHRoaXMuY29udmVydFRleHRUb1RhYmxlKHBhc3RlZFRleHQpO1xyXG4vLyAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQoaHRtbCk7XHJcbi8vICAgICAgIH0gZWxzZSB7XHJcbi8vICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChwYXN0ZWRUZXh0KTtcclxuLy8gICAgICAgfVxyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuXHJcbiAgLy8gb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcclxuICAvLyAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgLy8gICBjb25zdCBjbGlwYm9hcmREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcclxuICAvLyAgIGlmIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgLy8gICAgIC8vIEhhbmRsZSBpbWFnZSBkYXRhXHJcbiAgLy8gICAgIGNvbnN0IGl0ZW1zID0gY2xpcGJvYXJkRGF0YS5pdGVtcztcclxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAgIGlmIChpdGVtc1tpXS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XHJcbiAgLy8gICAgICAgICBjb25zdCBmaWxlID0gaXRlbXNbaV0uZ2V0QXNGaWxlKCk7XHJcbiAgLy8gICAgICAgICBpZiAoZmlsZSkge1xyXG4gIC8vICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gIC8vICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgICAgICAgIGNvbnN0IGltZ0h0bWwgPSBgPGltZyBzcmM9XCIke2UudGFyZ2V0LnJlc3VsdH1cIiBhbHQ9XCJQYXN0ZWQgSW1hZ2VcIiBzdHlsZT1cIm1heC13aWR0aDogMTAwJTtcIi8+YDtcclxuICAvLyAgICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGltZ0h0bWwpO1xyXG4gIC8vICAgICAgICAgICB9O1xyXG4gIC8vICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAvLyAgICAgICAgICAgcmV0dXJuOyAvLyBFeGl0IGlmIGFuIGltYWdlIGlzIGhhbmRsZWRcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuXHJcbiAgLy8gICAgIC8vIEhhbmRsZSB0ZXh0IG9yIHRhYmxlIGRhdGFcclxuICAvLyAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xyXG4gIC8vICAgICBpZiAodGhpcy5pc1RhYmxlRGF0YShwYXN0ZWRUZXh0KSkge1xyXG4gIC8vICAgICAgIGNvbnN0IGh0bWwgPSB0aGlzLmNvbnZlcnRUZXh0VG9UYWJsZShwYXN0ZWRUZXh0KTtcclxuICAvLyAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWwpO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQocGFzdGVkVGV4dCk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGE7XHJcbiAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsaXBib2FyZERhdGEuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gY2xpcGJvYXJkRGF0YS5pdGVtc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0udHlwZS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKSB7XHJcbiAgICAgICAgICAvLyBIYW5kbGUgaW1hZ2UgcGFzdGVcclxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBpdGVtLmdldEFzRmlsZSgpO1xyXG4gICAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBpbWdIdG1sID0gYDxpbWcgc3JjPVwiJHtlLnRhcmdldC5yZXN1bHR9XCIgYWx0PVwiUGFzdGVkIEltYWdlXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7XCIgLz5gO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQoaW1nSHRtbCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFwidGV4dC9odG1sXCIpIHtcclxuICAgICAgICAgIC8vIEhhbmRsZSBIVE1MIHBhc3RlXHJcbiAgICAgICAgICAvLyBjb25zdCBodG1sRGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvaHRtbFwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJykpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGh0bWwgPSB0aGlzLmNvbnZlcnRUZXh0VG9UYWJsZShjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvaHRtbCcpKTtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWxEYXRhKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gXCJ0ZXh0L3BsYWluXCIpIHtcclxuICAgICAgICAgIC8vIEhhbmRsZSBwbGFpbiB0ZXh0IHBhc3RlXHJcbiAgICAgICAgICBpZiAodGhpcy5pc1RhYmxlRGF0YShjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKSkpIHtcclxuICAgICAgICAgICAgY29uc3QgaHRtbCA9IHRoaXMuY29udmVydFRleHRUb1RhYmxlKGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpKTtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gY29uc3QgcGxhaW5UZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9wbGFpblwiKTtcclxuICAgICAgICAgIC8vIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQocGxhaW5UZXh0KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRXhjZWxEYXRhKGh0bWw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGh0bWwuaW5jbHVkZXMoJ3htbG5zOm89XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2VcIicpIHx8IFxyXG4gICAgICAgICAgaHRtbC5pbmNsdWRlcygneG1sbnM6eD1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOmV4Y2VsXCInKTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRFeGNlbEh0bWxUb1RhYmxlKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcbiAgICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcclxuICAgIGNvbnN0IHRhYmxlID0gZG9jLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XHJcbiAgICByZXR1cm4gdGFibGUgPyB0YWJsZS5vdXRlckhUTUwgOiAnJzsgLy8gRXh0cmFjdCBvbmx5IHRoZSB0YWJsZSBwYXJ0XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICBpc1RhYmxlRGF0YSh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJvd3MgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcclxuICAgIHJldHVybiByb3dzLmxlbmd0aCA+IDEgJiYgcm93c1swXS5zcGxpdCgnXFx0JykubGVuZ3RoID4gMTtcclxuICB9XHJcblxyXG4gIC8vIGNvbnZlcnRUZXh0VG9UYWJsZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIC8vICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcihyb3cgPT4gcm93LnRyaW0oKSAhPT0gJycpO1xyXG4gIC8vICAgY29uc3QgdGFibGVSb3dzID0gcm93cy5tYXAocm93ID0+IHtcclxuICAvLyAgICAgY29uc3QgY2VsbHMgPSByb3cuc3BsaXQoJ1xcdCcpLm1hcChjZWxsID0+IGA8dGQgY2xhc3M9XCJweC0xIHB5LTFcIiA+JHtjZWxsfTwvdGQ+YCkuam9pbignJyk7XHJcbiAgLy8gICAgIHJldHVybiBgPHRyIGNsYXNzPVwidGFibGUtYm9yZGVyLXRvcFwiIHN0eWxlPVwiYm9yZGVyLXRvcDogJHt0aGlzLnRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCl9OyB3aWR0aDogMTAwJSAhaW1wb3J0YW50XCI+JHtjZWxsc308L3RyPmA7XHJcbiAgLy8gICB9KS5qb2luKCcnKTtcclxuICAvLyAgIHJldHVybiBgPHRhYmxlPiR7dGFibGVSb3dzfTwvdGFibGU+YDtcclxuICAvLyB9XHJcblxyXG4gIGNvbnZlcnRUZXh0VG9UYWJsZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcihyb3cgPT4gcm93LnRyaW0oKSAhPT0gJycpO1xyXG4gICAgY29uc3QgY29sdW1uQ291bnQgPSByb3dzWzBdPy5zcGxpdCgnXFx0JykubGVuZ3RoIHx8IDE7IC8vIEdldCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZnJvbSB0aGUgZmlyc3Qgcm93XHJcbiAgICBjb25zdCBjb2x1bW5XaWR0aCA9IDEwMCAvIGNvbHVtbkNvdW50OyAvLyBDYWxjdWxhdGUgY29sdW1uIHdpZHRoXHJcblxyXG4gICAgY29uc3QgdGFibGVSb3dzID0gcm93cy5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgY2VsbHMgPSByb3cuc3BsaXQoJ1xcdCcpLm1hcChjZWxsID0+IGBcclxuICAgICAgICA8dGQgY2xhc3M9XCJweC0xIHB5LTEgdGV4dC10cnVuY2F0ZVwiIFxyXG4gICAgICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogJHtjb2x1bW5XaWR0aH0lOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDtcIj5cclxuICAgICAgICAgICR7Y2VsbH1cclxuICAgICAgICA8L3RkPmApLmpvaW4oJycpO1xyXG5cclxuICAgICAgLy8gQWRkIGEgYm9yZGVyLXRvcCBmb3IgYWxsIHJvd3MgZXhjZXB0IHRoZSBmaXJzdCBhbmQgYm9yZGVyLWJvdHRvbSBmb3IgdGhlIGxhc3Qgcm93XHJcbiAgICAgIGNvbnN0IGJvcmRlclRvcCA9IGluZGV4ID09PSAwID8gJycgOiBgYm9yZGVyLXRvcDogJHt0aGlzLnRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCl9O2A7XHJcbiAgICAgIGNvbnN0IGJvcmRlckJvdHRvbSA9IGluZGV4ID09PSByb3dzLmxlbmd0aCAtIDEgPyBgYm9yZGVyLWJvdHRvbTogJHt0aGlzLnRoZW1lTW9kZVRhYmxlQm9yZGVyVG9wKCl9O2AgOiAnJztcclxuXHJcbiAgICAgIHJldHVybiBgXHJcbiAgICAgICAgPHRyIFxyXG4gICAgICAgICAgc3R5bGU9XCIke2JvcmRlclRvcH0gJHtib3JkZXJCb3R0b219IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAke2NlbGxzfVxyXG4gICAgICAgIDwvdHI+YDtcclxuICAgIH0pLmpvaW4oJycpO1xyXG5cclxuICAgIHJldHVybiBgXHJcbiAgICAgIDx0YWJsZSBzdHlsZT1cInRhYmxlLWxheW91dDogZml4ZWQ7IHdpZHRoOiAxMDAlO1wiPiBcclxuICAgICAgICAke3RhYmxlUm93c31cclxuICAgICAgPC90YWJsZT5gO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBpbnNlcnRIdG1sQXRDYXJldChodG1sOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJhbmdlID0gd2luZG93LmdldFNlbGVjdGlvbigpPy5nZXRSYW5nZUF0KDApO1xyXG4gICAgaWYgKHJhbmdlKSB7XHJcbiAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcbiAgICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG4gICAgICBsZXQgbm9kZTtcclxuICAgICAgd2hpbGUgKChub2RlID0gdGVtcERpdi5maXJzdENoaWxkKSkge1xyXG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShmcmFnKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGhlbWVNb2RlVGFibGVCb3JkZXJUb3AoKSB7XHJcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcclxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xyXG4gICAgICByZXR1cm4gJzFweCBzb2xpZCAjRDBEMEQwOyAhaW1wb3J0YW50J1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcxcHggc29saWQgIzQxNDE0MSAhaW1wb3J0YW50J1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiBcclxuICBwdWJsaWMgb3BlbkZ1bGxzY3JlZW4oKSB7XHJcbiAgICB2YXIgZWxlbTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0ZXh0RWRpdG9yXCIpO1xyXG4gICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSB0cnVlO1xyXG4gICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChlbGVtLm1velJlcXVlc3RGdWxsU2NyZWVuKSB7XHJcbiAgICAgIGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcclxuICAgIH0gZWxzZSBpZiAoZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xyXG4gICAgICBlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xyXG4gICAgICBlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3R5bGUgPSB7XHJcbiAgICAgICdtaW4taGVpZ2h0JzogJzkwdmgnLFxyXG4gICAgICAnbWF4LWhlaWdodCc6ICc5MHZoJyxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZUZ1bGxzY3JlZW4oKSB7XHJcbiAgICBpZiAoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcclxuICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcclxuICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdHlsZSA9IHtcclxuICAgICAgICAnbWluLWhlaWdodCc6ICc0MDBweCcsXHJcbiAgICAgICAgJ21heC1oZWlnaHQnOiAnNDAwcHgnLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGNsZWFyVGV4dEVkaXRvcigpIHtcclxuICAgIHRoaXMuZWRpdG9yVGV4dENsZWFyLmVtaXQoKVxyXG4gIH1cclxuXHJcbiAgc2V0dXBIaXN0b3J5KCkge1xyXG4gICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgXHJcbiAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHRoaXMub25JbnB1dCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSW5wdXQoKSB7XHJcbiAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVN0YXRlKCkge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gIFxyXG4gICAgaWYgKGVkaXRvcikge1xyXG4gICAgICBjb25zdCBlZGl0b3JDb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDtcclxuICAgICAgaWYgKHRoaXMuaGlzdG9yeUluZGV4ID09PSB0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKGVkaXRvckNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMucmVkb1N0YWNrID0gW107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuaGlzdG9yeUluZGV4ICsgMSk7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZWRpdG9yQ29udGVudCk7XHJcbiAgICAgICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpc3RvcnlJbmRleCsrO1xyXG4gICAgfVxyXG4gIH1cclxuICB1bmRvKCkge1xyXG4gICAgaWYgKHRoaXMuaGlzdG9yeUluZGV4ID4gMCkge1xyXG4gICAgICB0aGlzLnJlZG9TdGFjay5wdXNoKHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF0pO1xyXG4gICAgICB0aGlzLmhpc3RvcnlJbmRleC0tO1xyXG4gICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgXHJcbiAgICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5SW5kZXhdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWRvKCkge1xyXG4gICAgaWYgKHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgcmVkb0NvbnRlbnQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKTtcclxuICAgICAgdGhpcy5oaXN0b3J5LnB1c2gocmVkb0NvbnRlbnQhKTtcclxuICAgICAgdGhpcy5oaXN0b3J5SW5kZXgrKztcclxuICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gIFxyXG4gICAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWRDb250ZW50ID0gcmVkb0NvbnRlbnQhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLy8gICBmb3JtYXRUZXh0V2l0aERhdGVzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbi8vICAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIGRldGVjdCBZWVlZLU1NLUREIGZvcm1hdHRlZCBkYXRlc1xyXG4vLyAgIGNvbnN0IGRhdGVSZWdleCA9IC9cXGJcXGR7NH0tXFxkezJ9LVxcZHsyfVxcYi9nO1xyXG5cclxuLy8gICAvLyBSZXBsYWNlIGZvdW5kIGRhdGVzIHdpdGggYSBmb3JtYXR0ZWQgdmVyc2lvblxyXG4vLyAgIHJldHVybiB0ZXh0LnJlcGxhY2UoZGF0ZVJlZ2V4LCAoZGF0ZVN0cikgPT4ge1xyXG4vLyAgICAgLy8gQ29udmVydCB0aGUgZGV0ZWN0ZWQgZGF0ZSBzdHJpbmcgaW50byBhIERhdGUgb2JqZWN0XHJcbi8vICAgICBjb25zdCBkYXRlT2JqID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICBcclxuLy8gICAgIC8vIEZvcm1hdCB0aGUgZGF0ZSB0byAnTW9udGggRGF5LCBZZWFyJyAoZS5nLiwgT2N0b2JlciAxMCwgMjAyNClcclxuLy8gICAgIHJldHVybiBkYXRlT2JqLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XHJcbi8vICAgICAgIHllYXI6ICdudW1lcmljJyxcclxuLy8gICAgICAgbW9udGg6ICdsb25nJyxcclxuLy8gICAgICAgZGF5OiAnbnVtZXJpYycsXHJcbi8vICAgICB9KTtcclxuLy8gICB9KTtcclxuICAvLyB9XHJcbiAgXHJcbiAgZm9ybWF0VGV4dFdpdGhEYXRlcyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBkZXRlY3QgWVlZWS1NTS1ERCBmb3JtYXR0ZWQgZGF0ZXNcclxuICBjb25zdCBkYXRlUmVnZXggPSAvXFxiXFxkezR9LVxcZHsyfS1cXGR7Mn1cXGIvZztcclxuXHJcbiAgLy8gUmVwbGFjZSBmb3VuZCBkYXRlcyB3aXRoIGEgZm9ybWF0dGVkIHZlcnNpb25cclxuICByZXR1cm4gdGV4dC5yZXBsYWNlKGRhdGVSZWdleCwgKGRhdGVTdHIpID0+IHtcclxuICAgIC8vIENvbnZlcnQgdGhlIGRldGVjdGVkIGRhdGUgc3RyaW5nIGludG8gYSBEYXRlIG9iamVjdFxyXG4gICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGRhdGVTdHIpO1xyXG5cclxuICAgIC8vIEV4dHJhY3QgZGF5LCBtb250aCwgYW5kIHllYXJcclxuICAgIGNvbnN0IGRheSA9IGRhdGVPYmouZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsgLy8gRW5zdXJlIGRheSBpcyB0d28gZGlnaXRzXHJcbiAgICBjb25zdCBtb250aCA9IGRhdGVPYmoudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ3Nob3J0JyB9KTsgLy8gR2V0IGFiYnJldmlhdGVkIG1vbnRoIG5hbWVcclxuICAgIGNvbnN0IHllYXIgPSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7IC8vIEdldCBmdWxsIHllYXJcclxuXHJcbiAgICAvLyBGb3JtYXQgdGhlIGRhdGUgYXMgJ2RkL21tbS95eXl5J1xyXG4gICAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XHJcbiAgfSk7XHJcbn1cclxuXHJcblxyXG59IiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lciBlbHMtdGV4dC1lZGl0b3IgcHgtMFwiIGlkPVwidGV4dEVkaXRvclwiICNmdWxsc2NyZWVuPVwibmd4RnVsbHNjcmVlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dEVkaXRvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neEZ1bGxzY3JlZW4+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidG9vbGJhck1vZGUgPT09ICdmaXhlZCdcIiBjbGFzcz1cImJ0bi10b29sYmFyIGVscy1idG4tdG9vbGJhciBwLTIgcHktMiBtYi0wXCIgcm9sZT1cInRvb2xiYXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJ0aGVtZU1vZGVCZ0NscigpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAncG9pbnRlci1ldmVudHMnOiBkaXNhYmxlVG9vbGJhciA/ICdub25lJyA6ICdhdXRvJyxcclxuICAgICdib3JkZXItdG9wLWxlZnQtcmFkaXVzJzogSXNPcGVuID8gJzAnIDogJzIwcHgnLFxyXG4gICAgJ2JvcmRlci10b3AtcmlnaHQtcmFkaXVzJzogSXNPcGVuID8gJzAnIDogJzIwcHgnXHJcbn1cIlxyXG5hcmlhLWxhYmVsPVwiVG9vbGJhciB3aXRoIGJ1dHRvbiBncm91cHNcIlxyXG5zdHlsZT1cImJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDtcIlxyXG4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiSGVhZGVyIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy1mb3JtLXNlbGVjdCBib3JkZXIgZWxzLXRvb2xiYXItZHJvcGRvd24tYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZSB0ZXh0LXN0YXJ0XCIgW3N0eWxlLmJvcmRlci1yYWRpdXNdPVwiJzVweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiaGVhZGVyRHJvcGRvd25cIiBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tzZWxlY3RlZEZvcm1hdEJsb2NrIHwgdGl0bGVjYXNlfX08L3NwYW4+IDxpIGNsYXNzPVwibWRpIG1kaS1jaGV2cm9uLWRvd24gXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93blwiIGNsYXNzPVwiZWxzLXRleHQtZm9ybWF0XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDE+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgxPkhlYWRpbmcgMTwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDI+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgyPkhlYWRpbmcgMjwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDM+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkhlYWRpbmcgMzwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDQ+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkhlYWRpbmcgNDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDU+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1PkhlYWRpbmcgNTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDY+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg2PkhlYWRpbmcgNjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8cD4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5Ob3JtYWw8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkZvbnQgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8IS0tIDxzZWxlY3QgY2xhc3M9XCJlbHMtZm9ybS1zZWxlY3QgXCIgc3R5bGU9XCIgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50OyBjb2xvcjogI2ZmZjtib3JkZXI6IDJweCBzb2xpZCAjN0Q2RDZEICFpbXBvcnRhbnQ7XCIgXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRm9udFwiIChjaGFuZ2UpPVwiY2hhbmdlRm9udCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uIGNsYXNzPVwiZWxzLWZvcm0tb3B0aW9uXCIgKm5nRm9yPVwibGV0IGZvbnQgb2YgZm9udHNcIiBbdmFsdWVdPVwiZm9udFwiPnt7IGZvbnQgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLWZvcm0tc2VsZWN0IGJvcmRlciBlbHMtdG9vbGJhci1kcm9wZG93bi1idXR0b24gZHJvcGRvd24tdG9nZ2xlIHRleHQtc3RhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiaGVhZGVyRHJvcGRvd25cIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIFtzdHlsZS5ib3JkZXJdPVwidGhlbWVNb2RlKClcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwid2lkdGg6IDg1cHg7IGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDtcIiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57e3NlbGVjdGVkRm9udCB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlY2FzZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1jaGV2cm9uLWRvd24gXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93blwiIGNsYXNzPVwiZWxzLXRleHQtZm9ybWF0XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cInRoZW1lTW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAqbmdGb3I9XCJsZXQgZm9udCBvZiBmb250c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VGb250KGZvbnQpXCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZvbnQgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInB5LTBcIiAgc3R5bGU9XCJoZWlnaHQ6IGZpdC1jb250ZW50O1wiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbWUtMiBtci0yIFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzQm9sZEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnYm9sZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1ib2xkXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc0l0YWxpY0FjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnaXRhbGljJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWl0YWxpY1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNVbmRlcmxpbmVBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3VuZGVybGluZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC11bmRlcmxpbmVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzU3RyaWtldGhyb3VnaEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3RyaWtldGhyb3VnaCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdHJpa2V0aHJvdWdoLXZhcmlhbnRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBpZD1cInRleHRDb2xvclBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwMCU7IGxlZnQ6IDA7IHotaW5kZXg6IDEwMDsgb3BhY2l0eTogMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFRleHRDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoJ3RleHRDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY29sb3ItdGV4dCBpY29uLXdpdGgtdW5kZXJsaW5lXCIgW3N0eWxlLmNvbG9yXT1cInNlbGVjdGVkVGV4dENvbG9yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkJhY2tncm91bmQgQ29sb3JcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW3N0eWxlLmNvbG9yXT1cImJhY2tncm91bmRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoJ2JnQ29sb3JQaWNrZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktYWxwaGEtYS1ib3hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGlkPVwiYmdDb2xvclBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwMCU7IGxlZnQ6IDA7IHotaW5kZXg6IDEwMDsgb3BhY2l0eTogMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldEJhY2tncm91bmRDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1saW5lIG1zLTIgYm9yZGVyXCIgW3N0eWxlLmJvcmRlci1sZWZ0XT1cInRoZW1lTW9kZUNsclZlcnRpY2FsTGluZSgpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1saXN0LW51bWJlcmVkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1saXN0LWJ1bGxldGVkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cInFsLWFsaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiAgYXJyb3ctbm9uZSB0ZXh0LXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25CYXNpYzFcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1sZWZ0IFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkJhc2ljMVwiIHN0eWxlPVwid2lkdGg6IDNweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiB0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUxlZnQnKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tbGVmdFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiB0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUNlbnRlcicpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1jZW50ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlSaWdodCcpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1yaWdodFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiB0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUZ1bGwnKVwiPjxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tanVzdGlmeVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2FsLWxpbmUgbXMtMiBib3JkZXJcIiBbc3R5bGUuYm9yZGVyLWxlZnRdPVwidGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdWJzY3JpcHRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N1YnNjcmlwdCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdWJzY3JpcHRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzU3VwZXJzY3JpcHRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N1cGVyc2NyaXB0JylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1cGVyc2NyaXB0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkTGluaygpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWxpbmstdmFyaWFudFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiaW5zZXJ0c0ltYWdlKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktaW1hZ2VcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImltYWdlSW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9XCJoYW5kbGVJbWFnZVVwbG9hZCgkZXZlbnQpXCIgYWNjZXB0PVwiaW1hZ2UvKlwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJhZGRUYWJsZSgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXRhYmxlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkUm93KClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXBsdXMtYWZ0ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3coKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ29sdW1uKClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXBsdXMtYWZ0ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBcclxuICAgICAgICAgICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgXHJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwidEhlYWRCZ0NvbG9yXCIgXHJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCd0SGVhZGJnQ29sb3JQaWNrZXInKVwiIFxyXG4gICAgICAgID4gXHJcbiAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtZWRpdFwiPjwvaT4gXHJcbiAgICAgICAgPC9idXR0b24+IFxyXG4gICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgIHR5cGU9XCJjb2xvclwiIFxyXG4gICAgICAgICAgaWQ9XCJ0SGVhZGJnQ29sb3JQaWNrZXJcIiBcclxuICAgICAgICAgIHN0eWxlPVwiIFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7IFxyXG4gICAgICAgICAgICB0b3A6IDEwMCU7IFxyXG4gICAgICAgICAgICBsZWZ0OiAwOyBcclxuICAgICAgICAgICAgei1pbmRleDogMTAwOyBcclxuICAgICAgICAgICAgb3BhY2l0eTogMDsgXHJcbiAgICAgICAgICBcIiBcclxuICAgICAgICAgIChjaGFuZ2UpPVwic2V0VGhlYWRCZ0NvbG9yKCRldmVudClcIiBcclxuICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwidW5kbygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXVuZG9cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwicmVkbygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXJlZG9cIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWRJbWFnZVwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24tMlwiIChjbGljayk9XCJlZGl0SW1hZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTtcIj5FZGl0IEltYWdlPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImNsZWFyVGV4dEVkaXRvcigpXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiB3aWR0aDogZml0LWNvbnRlbnQgIWltcG9ydGFudDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktY2xvc2UtY2lyY2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4xKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiSXNPcGVuOyBlbHNlIGZ1bGxzY3JlZW5JY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mdWxsc2NyZWVuLWV4aXRcIj48L2k+IDwhLS0gQ29sbGFwc2UgSWNvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Z1bGxzY3JlZW5JY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZnVsbHNjcmVlblwiPjwvaT4gPCEtLSBFeHBhbmQgSWNvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidG9vbGJhck1vZGUgPT09ICdidWJibGUnXCIgY2xhc3M9XCJidWJibGUtdG9vbGJhciBib3JkZXIgcC0yXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7J3RvcC5weCc6IHRvb2xiYXJUb3AsICdsZWZ0LnB4JzogdG9vbGJhckxlZnQsICdkaXNwbGF5Jzogc2hvd1Rvb2xiYXIgPyAnYmxvY2snIDogJ25vbmUnfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJGb250IE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImVscy1mb3JtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGb250XCIgKGNoYW5nZSk9XCJjaGFuZ2VGb250KCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGZvbnQgb2YgZm9udHNcIiBbdmFsdWVdPVwiZm9udFwiPnt7IGZvbnQgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzQm9sZEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdib2xkJylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYm9sZFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzSXRhbGljQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2l0YWxpYycpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWl0YWxpY1wiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzVW5kZXJsaW5lQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3VuZGVybGluZScpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXVuZGVybGluZVwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzU3RyaWtldGhyb3VnaEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdHJpa2V0aHJvdWdoJylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3RyaWtldGhyb3VnaC12YXJpYW50XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Jsb2NrcXVvdGUnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtcXVvdGUtY2xvc2VcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImluc2VydENvZGVCbG9jaygpXCI+PGkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1jb2RlLXRhZ3NcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2luc2VydE9yZGVyZWRMaXN0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtbGlzdC1udW1iZXJlZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2luc2VydFVub3JkZXJlZExpc3QnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1saXN0LWJ1bGxldGVkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkNvbG9yIEZvcm1hdHRpbmdcIj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwicWwtYWxpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IGFycm93LW5vbmUgdGV4dC1zZWNvbmRhcnlcIiBpZD1cImRyb3Bkb3duQmFzaWMxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY29sb3ItZmlsbFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bkJhc2ljMVwiIHN0eWxlPVwid2lkdGg6IDMwMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3Itc2tldGNoIGNvbG9yPVwiI2ZmZlwiIChvbkNoYW5nZUNvbXBsZXRlKT1cInNldFRleHRDb2xvcigkZXZlbnQpXCI+PC9jb2xvci1za2V0Y2g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiBjdXN0b20tY29sb3ItdHJpZ2dlclwiIG5neC1jb2xvcnMtdHJpZ2dlciBbKG5nTW9kZWwpXT1cImNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJsb2dFdmVudCgkZXZlbnQsICduZ01vZGVsQ2hhbmdlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibG9nRXZlbnQoJGV2ZW50LCAnY2hhbmdlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJsb2dFdmVudCgkZXZlbnQsICdpbnB1dCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jb2xvci10ZXh0IGljb24td2l0aC11bmRlcmxpbmVcIiBbc3R5bGUuY29sb3JdPVwiY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie2NvbG9yOiBjb2xvcn1cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1jb2xvcnMgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiID48L25neC1jb2xvcnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJ0ZXh0Q29sb3JQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwMCU7IGxlZnQ6IDA7IHotaW5kZXg6IDEwMDsgb3BhY2l0eTogMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VGV4dENvbG9yKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoJ3RleHRDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jb2xvci10ZXh0IGljb24td2l0aC11bmRlcmxpbmVcIiBbc3R5bGUuY29sb3JdPVwic2VsZWN0ZWRUZXh0Q29sb3JcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiQmFja2dyb3VuZCBDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGlkPVwiYmdDb2xvclBpY2tlclwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT1cInNldEJhY2tncm91bmRDb2xvcigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCdiZ0NvbG9yUGlja2VyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktYWxwaGEtYS1ib3hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkJhY2tncm91bmQgQ29sb3JcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbc3R5bGUuY29sb3JdPVwiYmFja2dyb3VuZENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbG9yUGlja2VyKCdiZ0NvbG9yUGlja2VyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktYWxwaGEtYS1ib3hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHN0eWxlPVwid2lkdGg6IDBweCAhaW1wb3J0YW50O1wiIGlkPVwiYmdDb2xvclBpY2tlclwiIFtjcFByZXNldENvbG9yc109XCJbJyNmZmYnLCAnIzAwMCcsICcjMjg4OWU5JywgJyNlOTIwZTknLCAnI2ZmZjUwMCcsICdyZ2IoMjM2LDY0LDY0KSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGNvbG9yUGlja2VyKV09XCJjb2xvclwiIChjaGFuZ2UpPVwic2V0QmFja2dyb3VuZENvbG9yKCRldmVudClcIiAvPiAtLT5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBpZD1cImJnQ29sb3JQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwMCU7IGxlZnQ6IDA7IHotaW5kZXg6IDEwMDsgb3BhY2l0eTogMDtcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0QmFja2dyb3VuZENvbG9yKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJIZWFkZXIgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiBpZD1cImhlYWRlckRyb3Bkb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgxPicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTFcIj48L2k+IEhlYWRpbmcgMTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDI+JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItMlwiPjwvaT4gSGVhZGluZyAyPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMz4nKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci0zXCI+PC9pPiBIZWFkaW5nIDM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg0PicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTRcIj48L2k+IEhlYWRpbmcgNDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDU+JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItNVwiPjwvaT4gSGVhZGluZyA1PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoNj4nKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci02XCI+PC9pPiBIZWFkaW5nIDY8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiSGVhZGVyIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1kcm9wZG93bi1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCIgaWQ9XCJoZWFkZXJEcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDogODVweDtcIj57e3NlbGVjdGVkRm9ybWF0QmxvY2sgfCB0aXRsZWNhc2V9fTwvc3Bhbj4gPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWNoZXZyb24tZG93biB0ZXh0LWRhcmtcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDE+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgxPkhlYWRpbmcgMTwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDI+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgyPkhlYWRpbmcgMjwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDM+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkhlYWRpbmcgMzwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDQ+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkhlYWRpbmcgNDwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDU+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1PkhlYWRpbmcgNTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDY+JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg2PkhlYWRpbmcgNjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcGItMFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8cD4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5Ob3JtYWw8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ3N1cGVyc2NyaXB0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1cGVyc2NyaXB0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ3N1YnNjcmlwdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdWJzY3JpcHRcIj48L2k+PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N1YnNjcmlwdEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdWJzY3JpcHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdWJzY3JpcHRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N1cGVyc2NyaXB0QWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N1cGVyc2NyaXB0JylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3VwZXJzY3JpcHRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwicWwtYWxpZ25cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gYXJyb3ctbm9uZSB0ZXh0LXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJkcm9wZG93bkJhc2ljMVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tbGVmdCBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCIgc3R5bGU9XCJ3aWR0aDogM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5TGVmdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tbGVmdFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUNlbnRlcicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tY2VudGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5UmlnaHQnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLXJpZ2h0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5RnVsbCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tanVzdGlmeVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdyZW1vdmVGb3JtYXQnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jbGVhclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJhZGRMaW5rKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1saW5rLXZhcmlhbnRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiaW5zZXJ0c0ltYWdlKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1pbWFnZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJpbWFnZUlucHV0XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPVwiaGFuZGxlSW1hZ2VVcGxvYWQoJGV2ZW50KVwiIGFjY2VwdD1cImltYWdlLypcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkVGFibGUoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXRhYmxlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiYWRkUm93KClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcGx1cy1hZnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImlzVGFibGVTZWxlY3RlZFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3coKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcmVtb3ZlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbHVtbigpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUNvbHVtbigpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1yZW1vdmVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWRJbWFnZVwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24tMlwiIChjbGljayk9XCJlZGl0SW1hZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTtcIj5FZGl0IEltYWdlPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiBjdXN0b20tY29sb3ItdHJpZ2dlclwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtY29sb3ItdGV4dCBpY29uLXdpdGgtdW5kZXJsaW5lXCIgW3N0eWxlLmNvbG9yXT1cImNvbG9yXCI+PC9pPlxyXG4gICAgICAgIDxuZ3gtY29sb3JzIFsobmdNb2RlbCldPVwiY29sb3JcIiAoY2hhbmdlKT1cImNvbG9yQ2hhbmdlZCgkZXZlbnQpXCI+PC9uZ3gtY29sb3JzPlxyXG4gICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwXCIgbmdiRHJvcGRvd24gYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIG5nYkRyb3Bkb3duVG9nZ2xlICAoY2xpY2spPVwiYWRkVGFibGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS10YWJsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51ICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkIHx8IHRhYmxlQWRkZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJhZGRSb3coKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXBsdXMtYWZ0ZXJcIj48L2k+IEFkZCBSb3dcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJkZWxldGVSb3coKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtcm93LXJlbW92ZVwiPjwvaT4gRGVsZXRlIFJvd1xyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cImFkZENvbHVtbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcGx1cy1hZnRlclwiPjwvaT4gQWRkIENvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cImRlbGV0ZUNvbHVtbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcmVtb3ZlXCI+PC9pPiBEZWxldGUgQ29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidGFibGVXaWR0aFwiPlRhYmxlIFdpZHRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInRhYmxlV2lkdGhcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIChjaGFuZ2UpPVwiYWRqdXN0VGFibGVXaWR0aCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY2VsbFdpZHRoXCI+Q2VsbCBXaWR0aDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJjZWxsV2lkdGhcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIChjaGFuZ2UpPVwiYWRqdXN0Q2VsbFdpZHRoKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjZWxsSGVpZ2h0XCI+Q2VsbCBIZWlnaHQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwiY2VsbEhlaWdodFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgKGNoYW5nZSk9XCJhZGp1c3RDZWxsSGVpZ2h0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJIZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gPGRpdiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCIgaWQ9XCJlZGl0b3JcIiBjbGFzcz1cInAtMyBjdXN0b20tc2Nyb2xsYmFyIG5vbi1mb2N1c1wiICNlZGl0b3JcclxuICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDIwcHggIWltcG9ydGFudDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMjBweCAhaW1wb3J0YW50O1wiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRoZW1lTW9kZUJnQ2xyKClcIiBbc3R5bGUuYm9yZGVyLXRvcF09XCJ0aGVtZU1vZGVCb3JkZXJUb3AoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieydmb250LWZhbWlseSc6IHNlbGVjdGVkRm9udCwgJ2ZvbnQtc2l6ZSc6IHNlbGVjdGVkRm9udFNpemUgKyAncHgnfVwiIFtzdHlsZV09XCJzdHlsZVwiXHJcbiAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiSXNPcGVuID8gJzg1dmggIWltcG9ydGFudCcgOiAgJzQwNXB4ICFpbXBvcnRhbnQnXCJcclxuICAgICAgICAoaW5wdXQpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJJbnNlcnQgdGV4dCBoZXJlIC4uLlwiIHJlYWRvbmx5IChtb3VzZXVwKT1cIm9uVGV4dFNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICBbaW5uZXJIVE1MXT1cInNhbml0aXplZENvbnRlbnRcIiAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAoY2xpY2spPVwiY2hlY2tUYWJsZVNlbGVjdGlvbigkZXZlbnQpXCI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgICA8IS0tIDxkaXYgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIGlkPVwiZWRpdG9yXCIgY2xhc3M9XCJwLTMgY3VzdG9tLXNjcm9sbGJhciBub24tZm9jdXMgb3ZlcmZsb3ctYXV0b1wiICNlZGl0b3JcclxuICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmUgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgXCIgW3N0eWxlLmJhY2tncm91bmRdPVwidGhlbWVNb2RlQmdDbHIoKVwiXHJcbiAgICAgICAgW3N0eWxlLmJvcmRlci10b3BdPVwidGhlbWVNb2RlQm9yZGVyVG9wKClcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnZm9udC1mYW1pbHknOiBzZWxlY3RlZEZvbnQsICdmb250LXNpemUnOiBzZWxlY3RlZEZvbnRTaXplICsgJ3B4JyxcclxuICAgICAgICAgICAnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyc6IGlzT3BlbiA/ICcwJyA6JzIwcHgnLFxyXG4gICAgICAgICAgICdib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyc6IGlzT3BlbiA/ICcwJyA6JzIwcHgnXHJcbiAgICAgICAgfVwiXHJcbiAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiSXNPcGVuID8gJzkzdmgnIDogJzQwNXB4J1wiIChpbnB1dCk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIkluc2VydCB0ZXh0IGhlcmUgLi4uXCJcclxuICAgICAgICByZWFkb25seSAobW91c2V1cCk9XCJvblRleHRTZWxlY3QoJGV2ZW50KVwiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkQ29udGVudFwiIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoYmx1cik9XCJvbkJsdXIoKVwiIChjbGljayk9XCJjaGVja1RhYmxlU2VsZWN0aW9uKCRldmVudClcIj5cclxuICAgIDwvZGl2PiAtLT5cclxuICAgIDxkaXYgW2F0dHIuY29udGVudGVkaXRhYmxlXT1cImNvbnRlbnRFZGl0YWJsZVwiIGlkPVwiZWRpdG9yXCIgY2xhc3M9XCJwLTMgY3VzdG9tLXNjcm9sbGJhciBub24tZm9jdXMgb3ZlcmZsb3ctYXV0b1wiICNlZGl0b3JcclxuICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50OyBvdmVyZmxvdzogYXV0bztcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJ0aGVtZU1vZGVCZ0NscigpXCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyLXRvcF09XCJ0aGVtZU1vZGVCb3JkZXJUb3AoKVwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICdmb250LWZhbWlseSc6IHNlbGVjdGVkRm9udCwgXHJcbiAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogc2VsZWN0ZWRGb250U2l6ZSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyc6IElzT3BlbiA/ICcwJyA6JzIwcHgnLFxyXG4gICAgICAgICAgICAgICAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJzogSXNPcGVuID8gJzAnIDonMjBweCcsXHJcbiAgICAgICAgICAgICAgICAnbWluLWhlaWdodCc6IElzT3BlbiA/ICc5M3ZoJyA6ICc0MDVweCcsXHJcbiAgICAgICAgICAgICAgICAnbWF4LWhlaWdodCc6IElzT3BlbiA/ICc5M3ZoJyA6ICc0MDVweCdcclxuICAgICAgICAgICAgfVwiIHBsYWNlaG9sZGVyPVwiSW5zZXJ0IHRleHQgaGVyZSAuLi5cIiByZWFkb25seSAobW91c2V1cCk9XCJvblRleHRTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgKGlucHV0KT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIFtpbm5lckhUTUxdPVwic2FuaXRpemVkQ29udGVudFwiIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cygpXCJcclxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiIChjbGljayk9XCJjaGVja1RhYmxlU2VsZWN0aW9uKCRldmVudClcIiAoa2V5ZG93bi5UYWIpPVwiaGFuZGxlVGFiS2V5KCRldmVudClcIj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDx0YWJsZSAqbmdJZj1cInBhcnNlZFRhYmxlXCI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiBwYXJzZWRUYWJsZS5oZWFkZXJzXCI+e3sgaGVhZGVyIH19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgcGFyc2VkVGFibGUucm93c1wiPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjZWxsIG9mIHJvd1wiPnt7IGNlbGwgfX08L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuPC9kaXY+Il19
|
1999
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWwtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZWwtdGV4dC1lZGl0b3Ivc3JjL2xpYi9lbC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9lbC10ZXh0LWVkaXRvci9zcmMvbGliL2VsLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ3RLLE9BQU8sRUFBcUMsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU10Rix5R0FBeUc7QUFDekcsT0FBTyxFQUFFLFFBQVEsRUFBYyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFhakQsTUFBTSxPQUFPLHFCQUFxQjtJQXNGaEMsWUFDVSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsUUFBbUIsRUFDbkIsU0FBdUI7UUFIdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQXhGeEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQVN4QixnQkFBVyxHQUFnQyxPQUFPLENBQUM7UUFDbkQsb0JBQWUsR0FBWSxJQUFJLENBQUMsQ0FBQywwQkFBMEI7UUFDMUQsMEJBQXFCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUMsQ0FBQyxxQkFBcUI7UUFDakcscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9DLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxjQUFTLEdB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QWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDRSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbi8vIGltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE5neEZ1bGxzY3JlZW5EaXJlY3RpdmUgfSBmcm9tICdAdWx0aW1hdGUvbmd4LWZ1bGxzY3JlZW4nO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG4vLyBpbXBvcnQgeyBJbWFnZUVkaXRvck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWxzL2ltYWdlLWVkaXRvci1tb2RhbC9pbWFnZS1lZGl0b3ItbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgY29tcHJlc3MsIGRlY29tcHJlc3MgfSBmcm9tICdsei1zdHJpbmcnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGV4dC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbC10ZXh0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWwtdGV4dC1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRWxUZXh0RWRpdG9yQ29tcG9uZW50KSxcclxuICAgIG11bHRpOiB0cnVlXHJcbiAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVsVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSBlZGl0b3JUZXh0OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBlZGl0b3JGcm9tOiBhbnk7XHJcbiAgQElucHV0KCkgZWRpdG9yQWN0aW9uOiBhbnk7XHJcbiAgQElucHV0KCkgVXNlclJvbGU6IGFueTtcclxuICBASW5wdXQoKSBzdHlsZTogYW55O1xyXG4gIEBJbnB1dCgpIGRpc2FibGVUb29sYmFyOiBhbnk7XHJcbiAgQElucHV0KCkgcGxhY2VIb2xkZXI6IGFueTtcclxuICBASW5wdXQoKSByZXBvcnRJZDogYW55O1xyXG4gIEBJbnB1dCgpIGJhY2tncm91bmRJbWFnZTogYW55O1xyXG4gIEBJbnB1dCgpIHRvb2xiYXJNb2RlOiAnZml4ZWQnIHwgJ2J1YmJsZScgfCAnbm9uZScgPSAnZml4ZWQnO1xyXG4gIEBJbnB1dCgpIGNvbnRlbnRFZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7IC8vIElucHV0IGZvciBpbml0aWFsIHZhbHVlXHJcbiAgQE91dHB1dCgpIGNvbnRlbnRFZGl0YWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpOyAvLyBPdXRwdXQgZm9yIGNoYW5nZXNcclxuICBAT3V0cHV0KCkgZWRpdG9yVGV4dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0b3JBY3Rpb25SZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0b3JUZXh0Q2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaW1hZ2VFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGltYWdlRWRpdDIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcGxhY2VIb2xkZXJSZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaXNPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIG5ld0ltYWdlQWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBcclxuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIFxyXG4gIEBWaWV3Q2hpbGQoJ3RleHRFZGl0b3InKSBUZXh0RWRpdG9yITogIEVsZW1lbnRSZWY8RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnZnVsbHNjcmVlbicpIGZ1bGxzY3JlZW4hOiBOZ3hGdWxsc2NyZWVuRGlyZWN0aXZlXHJcbiAgICBcclxuICBzYW5pdGl6ZWRDb250ZW50ITogU2FmZUh0bWw7XHJcblxyXG5cclxuICBzaG93VG9vbGJhciA9IGZhbHNlO1xyXG4gIHRvb2xiYXJUb3AgPSAwO1xyXG4gIHRvb2xiYXJMZWZ0ID0gMDtcclxuXHJcbiAgZm9udHMgPSBbJ0FyaWFsJywgJ0NvdXJpZXIgTmV3JywgJ0dlb3JnaWEnLCAnVGltZXMgTmV3IFJvbWFuJywgJ1ZlcmRhbmEnXTtcclxuICBmb250U2l6ZXMgPSBbMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjQsIDI4LCAzMiwgMzZdO1xyXG4gIHNlbGVjdGVkRm9udCA9ICdBcmlhbCc7XHJcbiAgc2VsZWN0ZWRGb250U2l6ZSA9IDE0O1xyXG4gIGlzVGFibGVTZWxlY3RlZCA9IGZhbHNlO1xyXG4gIHRhYmxlQWRkZWQgPSBmYWxzZTtcclxuICBzZWxlY3RlZFRhYmxlOiBIVE1MVGFibGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgaXNQbGFjZWhvbGRlclZpc2libGUgPSB0cnVlO1xyXG4gIHNlbGVjdGVkQ2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICBcclxuICBpc0JvbGRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0l0YWxpY0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzVW5kZXJsaW5lQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdHJpa2V0aHJvdWdoQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdWJzY3JpcHRBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1N1cGVyc2NyaXB0QWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNlbGVjdGVkRm9ybWF0QmxvY2s6IHN0cmluZyA9ICdub3JtYWwnXHJcblxyXG4gIHNlbGVjdGVkSW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICBpbWFnZUVkaXRVcmw6IHN0cmluZyA9ICcnO1xyXG4gIGltYWdlUG9zaXRpb25YID0gMDtcclxuICBpbWFnZVBvc2l0aW9uWSA9IDA7XHJcbiAgaW1hZ2VSZXNpemVTdGFydFggPSAwO1xyXG4gIGltYWdlUmVzaXplU3RhcnRZID0gMDtcclxuICBpbWFnZVJlc2l6ZVN0YXJ0V2lkdGggPSAwO1xyXG4gIGltYWdlUmVzaXplU3RhcnRIZWlnaHQgPSAwO1xyXG4gIGltYWdlUmVzaXplRGlyZWN0aW9uOiAndG9wTGVmdCcgfCAndG9wUmlnaHQnIHwgJ2JvdHRvbUxlZnQnIHwgJ2JvdHRvbVJpZ2h0JyB8IG51bGwgPSBudWxsO1xyXG5cclxuICB1bmRvU3RhY2s6IHN0cmluZ1tdID0gW107XHJcbiAgcmVkb1N0YWNrOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGhpc3Rvcnk6IHN0cmluZ1tdID0gW107XHJcbiAgaGlzdG9yeUluZGV4ID0gLTE7XHJcbiAgLy8gZWRpdG9yVGV4dDEgPSBgYDtcclxuICBzZWxlY3RlZFRleHRDb2xvcjogYW55O1xyXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcclxuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xyXG4gIGNvbG9yOiBhbnkgPSAnI2RkZCc7XHJcbiAgY29sb3JGb3JtQ29udHJvbCE6IEZvcm1Db250cm9sO1xyXG4gIGJhY2tncm91bmRDb2xvcjogYW55O1xyXG4gIHNlbGVjdGVkSXRlbUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcGFyc2VkVGFibGU6IHsgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IHN0cmluZ1tdW10gfSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpc0Z1bGxTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdXJyZW50Q2FyZXRQb3NpdGlvbjogYW55O1xyXG4gIHVzZXJSb2xlOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dFZGl0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdEhlYWRCZ0NvbG9yOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICApIHtcclxuICAgIHRoaXMuZ2V0VXNlclJvbGVzKClcclxuXHJcbiAgICBcclxuICB9XHJcblxyXG4gIHRoZW1lTW9kZSgpIHtcclxuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxyXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XHJcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICM0MDNGNEEgIWltcG9ydGFudCdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICNEMEQwRDAgIWltcG9ydGFudCdcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRoZW1lTW9kZUNscigpIHtcclxuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxyXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XHJcbiAgICAgIHJldHVybiAnI2ZmZiAhaW1wb3J0YW50J1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcjMDAwICFpbXBvcnRhbnQnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmUoKSB7XHJcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcclxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xyXG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjRkZGRkZGICFpbXBvcnRhbnQnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjRDBEMEQwICFpbXBvcnRhbnQnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGVtZU1vZGVCZ0NscigpIHtcclxuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxyXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XHJcbiAgICAgIHJldHVybiAnIzI4MjgyOCAhaW1wb3J0YW50J1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcjRjNGM0YzICFpbXBvcnRhbnQnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGVtZU1vZGVCb3JkZXJUb3AoKSB7XHJcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcclxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xyXG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjMDAwICFpbXBvcnRhbnQnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJzJweCBzb2xpZCAjZmZmICFpbXBvcnRhbnQnXHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydwbGFjZUhvbGRlciddKSB7XHJcbiAgICAgIHRoaXMuaW5zZXJ0QXRDYXJldCh0aGlzLnBsYWNlSG9sZGVyKVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1sncmVwb3J0SWQnXSkge1xyXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdyZXBvcnRJZCcsIHRoaXMucmVwb3J0SWQpXHJcbiAgICB9IFxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydVc2VyUm9sZSddKSB7IFxyXG4gICAgICB0aGlzLmdldFVzZXJSb2xlcygpXHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdEVkaXRvcigpO1xyXG4gICAgdGhpcy5jaGVja1BsYWNlaG9sZGVyKCk7XHJcbiAgICB0aGlzLnNldHVwSGlzdG9yeSgpO1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIHRoaXMub25GdWxsc2NyZWVuQ2hhbmdlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0X0Z1bmModGhpcy5lZGl0b3JUZXh0KVxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlU3RhdGVzKCk7XHJcbiAgICAgIHRoaXMuY2hlY2tGb3JtYXRCbG9jaygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpO1xyXG4gICAgdGhpcy5hZGRDbGlja0xpc3RlbmVyVG9FbGVtZW50cygpO1xyXG4gICAgLy8gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgIC8vICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocGFyYW1zWydkYXRhJ10pO1xyXG4gICAgLy8gICBpZiAoZGF0YS5lZGl0ZWRJTUcpIHtcclxuICAgIC8vICAgICBjb25zdCBpbWdVcmwgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcpO1xyXG4gICAgLy8gICAgIGlmIChpbWdVcmwpIHtcclxuICAgIC8vICAgICAgIHRoaXMucmVwbGFjZUltYWdlU3JjKGltZ1VybCwgZGF0YS5pbmRleC5pbmRleClcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZWRpdEltYWdlRnJvbVRlbXAnKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSlcclxuICB9XHJcblxyXG4gICBuZ09uRGVzdHJveSgpIHtcclxuICAgIC8vIENsZWFudXAgdGhlIGV2ZW50IGxpc3RlbmVyIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCB0aGlzLm9uRnVsbHNjcmVlbkNoYW5nZSk7XHJcbiAgfVxyXG5cclxuICBJc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICB0b2dnbGVGdWxsc2NyZWVuMSgpIHtcclxuICAgICAgdGhpcy5Jc09wZW4gPSAhdGhpcy5Jc09wZW47XHJcbiAgICAgIHRoaXMuaXNPcGVuLmVtaXQodGhpcy5Jc09wZW4pXHJcbiAgICAgIGlmICh0aGlzLklzT3BlbikgeyBcclxuICAgICAgICB0aGlzLmZ1bGxzY3JlZW4uZW50ZXIodGhpcy5UZXh0RWRpdG9yLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZnVsbHNjcmVlbi5leGl0KClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gIHByaXZhdGUgb25GdWxsc2NyZWVuQ2hhbmdlID0gKCkgPT4ge1xyXG4gICAgaWYgKCFkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCkge1xyXG4gICAgICAvLyBXaGVuIGZ1bGxzY3JlZW4gbW9kZSBpcyBleGl0ZWRcclxuICAgICAgdGhpcy5Jc09wZW4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc09wZW4uZW1pdCh0aGlzLklzT3Blbik7XHJcbiAgICB9XHJcbiAgfTtcclxuICBcclxuICAvLyBlbnRlckZ1bGxzY3JlZW5WaWRlbygpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKCdldmVudDonLCBldmVudCk7XHJcbiAgLy8gICBjb25zdCBmdWxsc2NyZWVuID0gZXZlbnQ7XHJcbiAgLy8gICB0aGlzLmlzT3BlbiA9IGV2ZW50O1xyXG4gIC8vICAgaWYgKGZ1bGxzY3JlZW4pIHtcclxuICAvLyAgICAgdGhpcy5mdWxsc2NyZWVuLmVudGVyKHRoaXMuVGV4dEVkaXRvci5uYXRpdmVFbGVtZW50KTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuZnVsbHNjcmVlbi5leGl0KClcclxuICAvLyAgIH1cclxuICAgIFxyXG4gIC8vIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmVkaXRvclRleHQgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5pbml0RWRpdG9yKCk7XHJcbiAgICAgIHRoaXMuaW5pdF9GdW5jKHRoaXMuZWRpdG9yVGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4vLyAgcHJpdmF0ZSBhZGRDbGlja0xpc3RlbmVyVG9JbWFnZXMoKSB7XHJcbi8vICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4vLyAgIGlmIChlZGl0b3IpIHtcclxuLy8gICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xyXG4vLyAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbi8vICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcclxuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuLy8gICAgICAgICB0aGlzLmltYWdlRWRpdFVybCA9IHRoaXMuc2VsZWN0ZWRJbWFnZS5zcmM7XHJcblxyXG4vLyAgICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLnNlbGVjdGVkSW1hZ2UucGFyZW50RWxlbWVudDtcclxuLy8gICAgICAgICBpZiAoIWNvbnRhaW5lciB8fCBjb250YWluZXIuY2xhc3NOYW1lICE9PSAnaW1hZ2UtY29udGFpbmVyJykge1xyXG4vLyAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbi8vICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2ltYWdlLWNvbnRhaW5lcic7XHJcbi8vICAgICAgICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4vLyAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcclxuLy8gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoY29udGFpbmVyLCB0aGlzLnNlbGVjdGVkSW1hZ2UpO1xyXG4vLyAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0ZWRJbWFnZSk7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICAgIGNvbnN0IGV4aXN0aW5nQnV0dG9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1lZGl0LWJ1dHRvbicpO1xyXG4vLyAgICAgICAgIGlmIChleGlzdGluZ0J1dHRvbikge1xyXG4vLyAgICAgICAgICAgZXhpc3RpbmdCdXR0b24ucmVtb3ZlKCk7XHJcbi8vICAgICAgICAgfVxyXG5cclxuLy8gICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuLy8gICAgICAgICAvLyBidXR0b24udGV4dENvbnRlbnQgPSAnRWRpdCc7XHJcbi8vICAgICAgICAgYnV0dG9uLmlubmVyVGV4dCA9ICdFZGl0IEltYWdlJztcclxuXHJcbi8vICAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdpbWFnZS1lZGl0LWJ1dHRvbiBidG4gYnRuLXNtJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSAnNTAlJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9ICc1MCUnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlKC01MCUsIC01MCUpJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUuekluZGV4ID0gJzEwMDAnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZic7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmJvcmRlciA9ICcycHggc29saWQgI2ZmZic7XHJcbi8vICAgICAgICAgLy8gYnV0dG9uLnN0eWxlLnBhZGRpbmcgPSAnMTBweCc7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmNvbG9yID0gJyMzMTNhNDYnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcblxyXG4vLyAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbi8vICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4vLyAgICAgICAgICAgdGhpcy5lZGl0SW1hZ2UoKTtcclxuLy8gICAgICAgICB9KTtcclxuXHJcbi8vICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcbi8vICAgICAgIH0gZWxzZSB7XHJcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gbnVsbDtcclxuLy8gICAgICAgfVxyXG4vLyAgICAgfSk7XHJcbi8vICAgfVxyXG4gIC8vIH1cclxuICBnZXRVc2VyUm9sZXMoKSB7XHJcbiAgICB0aGlzLnVzZXJSb2xlID0gdGhpcy5Vc2VyUm9sZVxyXG4gIH1cclxuICAvLyByb2xlQ2hlY2soKSB7XHJcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudXNlclJvbGUubGVuZ3RoOyArK2kpIHtcclxuICAvLyAgICAgY29uc3Qgcm9sZU5hbWUgPSBbXVxyXG4gIC8vICAgICAgIHJvbGVOYW1lLnB1c2godGhpcy51c2VyUm9sZVtpXT8ubmFtZSk7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLnVzZXJSb2xlW2ldPy5uYW1lO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgcm9sZUNoZWNrKCkge1xyXG4gICAgbGV0IHVzZXJSb2xlTmFtZTogc3RyaW5nW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHRoaXMudXNlclJvbGUubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdXNlclJvbGVOYW1lLnB1c2godGhpcy51c2VyUm9sZVtpXT8ubmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlclJvbGVOYW1lO1xyXG4gIH1cclxuXHJcblxyXG4vLyBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcclxuLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbi8vICAgY29uc3Qgcm9sZXMgPSB0aGlzLnJvbGVDaGVjaygpOyAvLyBHZXQgdXNlciByb2xlcyBkeW5hbWljYWxseVxyXG4vLyAgIGNvbnN0IGlzQWRtaW4gPSByb2xlcy5pbmNsdWRlcygnQWRtaW4nKTtcclxuLy8gICBjb25zdCBpc0NyZWF0b3IgPSByb2xlcy5pbmNsdWRlcygnQ3JlYXRvcicpO1xyXG4vLyAgIGNvbnN0IGlzQXBwcm92ZXIgPSByb2xlcy5pbmNsdWRlcygnQXBwcm92ZXInKTtcclxuICBcclxuLy8gICBpZiAoaXNDcmVhdG9yIHx8IGlzQWRtaW4pIHtcclxuLy8gICAgIGlmIChlZGl0b3IpIHtcclxuLy8gICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xyXG4vLyAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbi8vICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcclxuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuLy8gICAgICAgICB0aGlzLmltYWdlRWRpdFVybCA9IHRoaXMuc2VsZWN0ZWRJbWFnZS5zcmM7XHJcbi8vICAgICAgICAgbGV0IGNvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRJbWFnZS5wYXJlbnRFbGVtZW50O1xyXG4vLyAgICAgICAgIGlmICghY29udGFpbmVyIHx8IGNvbnRhaW5lci5jbGFzc05hbWUgIT09ICdpbWFnZS1jb250YWluZXInKSB7XHJcbi8vICAgICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuLy8gICAgICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSAnaW1hZ2UtY29udGFpbmVyJztcclxuLy8gICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XHJcbi8vICAgICAgICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAgXHJcbi8vICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgdGhpcy5zZWxlY3RlZEltYWdlKTtcclxuLy8gICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGVkSW1hZ2UpO1xyXG4vLyAgICAgICAgIH1cclxuXHJcbi8vICAgICAgICAgY29uc3QgZXhpc3RpbmdCdXR0b24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmltYWdlLWVkaXQtYnV0dG9uJyk7XHJcbi8vICAgICAgICAgaWYgKGV4aXN0aW5nQnV0dG9uKSB7XHJcbi8vICAgICAgICAgICBleGlzdGluZ0J1dHRvbi5yZW1vdmUoKTtcclxuLy8gICAgICAgICB9XHJcblxyXG4vLyAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4vLyAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCAgPSAnRWRpdCBJbWFnZSc7XHJcbi8vICAgICAgICAgYnV0dG9uLmNsYXNzTmFtZSA9ICdpbWFnZS1lZGl0LWJ1dHRvbiBidG4gYnRuLXNtJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSAnNTAlJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9ICc1MCUnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlKC01MCUsIC01MCUpJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUuekluZGV4ID0gJzEwMDAnO1xyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2ZmZic7IFxyXG4vLyAgICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICNmZmYnOyBcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAnIzMxM2E0Nic7XHJcbi8vICAgICAgICAgYnV0dG9uLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcclxuLy8gICAgICAgICBidXR0b24uc3R5bGUudXNlclNlbGVjdCA9ICdub25lJztcclxuXHJcbi8vICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuLy8gICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbi8vICAgICAgICAgICB0aGlzLmVkaXRJbWFnZSgpO1xyXG4vLyAgICAgICAgIH0pO1xyXG5cclxuLy8gICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuXHJcbi8vICAgICAgIH0gZWxzZSB7XHJcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuLy8gICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gbnVsbDtcclxuLy8gICAgICAgICBjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmltYWdlLWVkaXQtYnV0dG9uJyk7XHJcbi8vICAgICAgICAgYnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiBidXR0b24ucmVtb3ZlKCkpO1xyXG4vLyAgICAgICB9XHJcbi8vICAgICB9KTtcclxuLy8gICB9XHJcbi8vICAgfVxyXG4gIC8vIH1cclxuICBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcclxuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgY29uc3Qgcm9sZXMgPSB0aGlzLnJvbGVDaGVjaygpOyAvLyBHZXQgdXNlciByb2xlcyBkeW5hbWljYWxseVxyXG4gIGNvbnN0IGlzQWRtaW4gPSByb2xlcy5pbmNsdWRlcygnQWRtaW4nKTtcclxuICBjb25zdCBpc0NyZWF0b3IgPSByb2xlcy5pbmNsdWRlcygnQ3JlYXRvcicpO1xyXG5cclxuICBpZiAoaXNDcmVhdG9yIHx8IGlzQWRtaW4pIHtcclxuICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IHRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gICAgICAgICAgdGhpcy5pbWFnZUVkaXRVcmwgPSB0aGlzLnNlbGVjdGVkSW1hZ2Uuc3JjO1xyXG4gICAgICAgICAgY29uc3QgaW1hZ2VzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcclxuICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGltYWdlc1tpXSA9PT0gdGhpcy5zZWxlY3RlZEltYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgY29udGFpbmVyID0gdGhpcy5zZWxlY3RlZEltYWdlLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgICBpZiAoIWNvbnRhaW5lciB8fCBjb250YWluZXIuY2xhc3NOYW1lICE9PSAnaW1hZ2UtY29udGFpbmVyJykge1xyXG4gICAgICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSA9ICdpbWFnZS1jb250YWluZXInO1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgdGhpcy5zZWxlY3RlZEltYWdlKTtcclxuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0ZWRJbWFnZSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdCdXR0b24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmltYWdlLWVkaXQtYnV0dG9uJyk7XHJcbiAgICAgICAgICBpZiAoZXhpc3RpbmdCdXR0b24pIHtcclxuICAgICAgICAgICAgZXhpc3RpbmdCdXR0b24ucmVtb3ZlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSAnRWRpdCBJbWFnZSc7XHJcbiAgICAgICAgICBidXR0b24uY2xhc3NOYW1lID0gJ2ltYWdlLWVkaXQtYnV0dG9uIGJ0biBidG4tc20nO1xyXG4gICAgICAgICAgYnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSAnNTAlJztcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gJzUwJSc7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKSc7XHJcbiAgICAgICAgICBidXR0b24uc3R5bGUuekluZGV4ID0gJzEwMDAnO1xyXG4gICAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjZmZmJztcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICNmZmYnO1xyXG4gICAgICAgICAgYnV0dG9uLnN0eWxlLmNvbG9yID0gJyMzMTNhNDYnO1xyXG4gICAgICAgICAgYnV0dG9uLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgICAgIGJ1dHRvbi5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xyXG5cclxuICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdEltYWdlKCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVFZGl0QnV0dG9ucygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBNb25pdG9yIGVkaXRvciBjb250ZW50IGNoYW5nZXMgdG8gaGFuZGxlIGltYWdlIGRlbGV0aW9uXHJcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBlZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnLmltYWdlLWVkaXQtYnV0dG9uJyk7XHJcbiAgICAgICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGJ1dHRvbi5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgaWYgKGNvbnRhaW5lciAmJiAhY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpKSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5yZW1vdmUoKTsgLy8gUmVtb3ZlIHRoZSBidXR0b24gaWYgdGhlIGFzc29jaWF0ZWQgaW1hZ2UgaXMgZ29uZVxyXG4gICAgICAgICAgICBjb250YWluZXIucmVtb3ZlKCk7IC8vIENsZWFuIHVwIHRoZSBjb250YWluZXJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBPYnNlcnZlIGNoYW5nZXMgaW4gdGhlIGVkaXRvclxyXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGVkaXRvciwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5wcml2YXRlIHJlbW92ZUVkaXRCdXR0b25zKCkge1xyXG4gIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW1hZ2UtZWRpdC1idXR0b24nKTtcclxuICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gYnV0dG9uLnJlbW92ZSgpKTtcclxuICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xyXG4gIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xyXG59XHJcblxyXG5cclxuICAvLyBwcml2YXRlIGFkZENsaWNrTGlzdGVuZXJUb0ltYWdlcygpIHtcclxuICAvLyBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgLy8gaWYgKGVkaXRvcikge1xyXG4gIC8vICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XHJcbiAgLy8gICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAvLyAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xyXG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IHRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gIC8vICAgICAgIHRoaXMuaW1hZ2VFZGl0VXJsID0gdGhpcy5zZWxlY3RlZEltYWdlLnNyYztcclxuXHJcbiAgLy8gICAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaW1hZ2VcclxuICAvLyAgICAgICBjb25zdCBpbWFnZXMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xyXG4gIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgICBpZiAoaW1hZ2VzW2ldID09PSB0aGlzLnNlbGVjdGVkSW1hZ2UpIHtcclxuICAvLyAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGk7XHJcbiAgLy8gICAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuXHJcbiAgLy8gICAgICAgaWYgKHRoaXMudG9vbGJhck1vZGUgPT09ICdidWJibGUnKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLm9uVGV4dFNlbGVjdCgpO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfSBlbHNlIHtcclxuICAvLyAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xyXG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBudWxsO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcbiAgLy8gfVxyXG4gIFxyXG4gIHByaXZhdGUgYWRkQ2xpY2tMaXN0ZW5lclRvRWxlbWVudHMoKSB7XHJcbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gIGlmIChlZGl0b3IpIHtcclxuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSB0YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuICAgICAgICB0aGlzLmltYWdlRWRpdFVybCA9IHRoaXMuc2VsZWN0ZWRJbWFnZS5zcmM7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VzID0gZWRpdG9yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGltYWdlc1tpXSA9PT0gdGhpcy5zZWxlY3RlZEltYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUgPSB0YXJnZXQuY2xvc2VzdCgndGFibGUnKSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5zZWxlY3RlZFRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhcmdldC50YWdOYW1lKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoY2VsbHNbaV0gPT09IHRhcmdldCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gaTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1AnIHx8IHRhcmdldC50YWdOYW1lID09PSAnU1BBTicgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnKSB7XHJcbiAgICAgICAgY29uc3QgcGFyYWdyYXBocyA9IGVkaXRvci5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YXJnZXQudGFnTmFtZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhZ3JhcGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAocGFyYWdyYXBoc1tpXSA9PT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICB9XHJcblxyXG5yZXBsYWNlSW1hZ2VTcmMobmV3U3JjOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcclxuICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgXHJcbiAgaWYgKGVkaXRvcikge1xyXG4gICAgZWRpdG9yLmZvY3VzKClcclxuICAgIGNvbnN0IGltYWdlcyA9IGVkaXRvci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnSU1HJyk7XHJcbiAgICBpZiAoaW5kZXggPj0gMCApIHtcclxuICAgICAgaW1hZ2VzW2luZGV4XS5zZXRBdHRyaWJ1dGUoJ3NyYycsIG5ld1NyYyk7XHJcbiAgICB9IFxyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgaW5pdEVkaXRvcigpIHtcclxuICAgIC8vIEluaXRpYWxpemUgZWRpdG9yIGNvbnRlbnQgYW5kIGxpc3RlbmVyc1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG5cclxuICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9IHRoaXMuZWRpdG9yVGV4dDtcclxuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZShlZGl0b3IuaW5uZXJIVE1MKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoZWNrUGxhY2Vob2xkZXIoKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIC8vIEhhbmRsZSB0aGUgZGlzYWJsZWQgc3RhdGUgaWYgbmVjZXNzYXJ5XHJcbiAgfVxyXG5cclxuICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBWQUxVRSA9IHZhbHVlXHJcbiAgICAgIHRoaXMuZWRpdG9yVGV4dCA9IFZBTFVFO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKFZBTFVFKTtcclxuICAgICAgdGhpcy5lZGl0b3JUZXh0Q2hhbmdlLmVtaXQoVkFMVUUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5SW1hZ2VTdHlsZXMoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGNvbnRlbnQ7XHJcbiAgICBjb25zdCBpbWFnZXMgPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnaW1nJyk7XHJcbiAgICBpbWFnZXMuZm9yRWFjaChpbWcgPT4ge1xyXG4gICAgICBpZiAoaW1nLnN0eWxlLm1heFdpZHRoID49ICc3MDBweCcpIHtcclxuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnNzAwcHgnO1xyXG4gICAgICAgIC8vIGltZy53aWR0aCA9IDMwMDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGltZy5zdHlsZS5tYXhXaWR0aCA9ICcxMDAlJztcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xyXG4gIH1cclxuXHJcbiAgLy8gaW5pdF9GdW5jKGh0bWw6IGFueSkge1xyXG4gIC8vICAgaWYgKGh0bWwpIHtcclxuICAvLyAgICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAvLyAgICAgaWYgKGVkaXRvcikgeyBcclxuICAvLyAgICAgICBlZGl0b3IuZm9jdXMoKVxyXG4gIC8vICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSBodG1sO1xyXG4gIC8vICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMuYXBwbHlJbWFnZVN0eWxlcyhodG1sKSk7XHJcbiAgLy8gICAgICAgZWRpdG9yLmlubmVySFRNTCA9IHRoaXMuc2FuaXRpemVkQ29udGVudCBhcyBzdHJpbmc7XHJcbiAgLy8gICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xyXG4gIC8vICAgICAgICAgaWYgKGVkaXRvcikge1xyXG4gIC8vICAgICAgICAgICBlZGl0b3IuZm9jdXMoKVxyXG4gIC8vICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG51bGw7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG4gIFxyXG4vLyAgIGluaXRfRnVuYyhodG1sOiBhbnkpIHtcclxuLy8gICBpZiAoaHRtbCkge1xyXG4vLyAgICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuLy8gICAgIGlmIChlZGl0b3IpIHtcclxuLy8gICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZWRpdG9yIHdpdGggc2FuaXRpemVkIGNvbnRlbnRcclxuICAgICAgXHJcbi8vICAgICAgIHRoaXMuc2V0RWRpdG9yQ29udGVudChodG1sKTtcclxuXHJcbi8vICAgICAgIC8vIFNldCB1cCBhIE11dGF0aW9uT2JzZXJ2ZXIgdG8gaGFuZGxlIGNvbnRlbnQgY2hhbmdlc1xyXG4vLyAgICAgICB0aGlzLnNldHVwTXV0YXRpb25PYnNlcnZlcihlZGl0b3IpO1xyXG5cclxuLy8gICAgICAgLy8gTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGVuZCBhZnRlciBpbml0aWFsIGNvbnRlbnQgc2V0dXBcclxuLy8gICAgICAgdGhpcy5tb3ZlQ2FyZXRUb0VuZChlZGl0b3IpO1xyXG5cclxuLy8gICAgICAgLy8gVHJhY2sgY2FyZXQgcG9zaXRpb24gb24gbW91c2UgY2xpY2tcclxuLy8gICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4vLyAgICAgICAgIGlmIChlZGl0b3IpIHsgIC8vIEVuc3VyZSBlZGl0b3IgaXMgbm90IG51bGxcclxuLy8gICAgICAgICAgIC8vIHRoaXMudHJhY2tDYXJldFBvc2l0aW9uKGVkaXRvcik7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9KTtcclxuLy8gICAgIH1cclxuLy8gICB9IGVsc2Uge1xyXG4vLyAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbnVsbDtcclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbi8vIHByaXZhdGUgc2V0RWRpdG9yQ29udGVudChodG1sOiBzdHJpbmcpIHtcclxuLy8gICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4vLyAgIGlmIChlZGl0b3IpIHtcclxuLy8gICAgIC8vIFNhbml0aXplIGFuZCBhcHBseSBzdHlsZXMgdG8gdGhlIEhUTUxcclxuLy8gICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMuYXBwbHlJbWFnZVN0eWxlcyhodG1sKSk7XHJcbi8vICAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5zYW5pdGl6ZWRDb250ZW50IGFzIHN0cmluZztcclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbi8vIHByaXZhdGUgc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcclxuLy8gICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcclxuLy8gICAgIC8vIFVwZGF0ZSBtb2RlbCB3aXRoIHRoZSBjdXJyZW50IGNvbnRlbnRcclxuLy8gICAgIHRoaXMub25Nb2RlbENoYW5nZShlZGl0b3IuaW5uZXJIVE1MKTtcclxuLy8gICB9KTtcclxuXHJcbi8vICAgb2JzZXJ2ZXIub2JzZXJ2ZShlZGl0b3IsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xyXG4vLyB9XHJcblxyXG4vLyBUaGlzIGZ1bmN0aW9uIHRyYWNrcyB0aGUgY2FyZXQgcG9zaXRpb24gYmFzZWQgb24gdGhlIG1vdXNlIGNsaWNrXHJcbnByaXZhdGUgdHJhY2tDYXJldFBvc2l0aW9uKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcclxuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCBzdGFydE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XHJcblxyXG5cclxuICAgIC8vIFlvdSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gaW5zZXJ0IGNvbnRlbnQgb3IgcGVyZm9ybSBhY3Rpb25zIGJhc2VkIG9uIHRoZSBjYXJldCBwb3NpdGlvblxyXG4gICAgLy8gRXhhbXBsZTogU2F2ZSB0aGUgY3VycmVudCBjYXJldCBwb3NpdGlvbiBmb3IgZnV0dXJlIHVzZVxyXG4gICAgdGhpcy5jdXJyZW50Q2FyZXRQb3NpdGlvbiA9IHsgbm9kZTogc3RhcnROb2RlLCBvZmZzZXQ6IHN0YXJ0T2Zmc2V0IH07XHJcbiAgfVxyXG4gIH1cclxuICBcclxuICAvLyBNZXRob2QgdG8gZ2V0IGNhcmV0IHBvc2l0aW9uIGFuZCBpbnNlcnQgbmV3IGRhdGFcclxucHJpdmF0ZSBpbnNlcnRBdENhcmV0KG5ld0RhdGE6IHN0cmluZyk6IHZvaWQge1xyXG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICBcclxuICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHJhbmdlIChjYXJldCBwb3NpdGlvbilcclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgZG9jdW1lbnQgZnJhZ21lbnQgdG8gaW5zZXJ0IChhbGxvd3MgaGFuZGxpbmcgSFRNTCBzdHJpbmdzKVxyXG4gICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0ZW1wRGl2LmlubmVySFRNTCA9IG5ld0RhdGE7XHJcblxyXG4gICAgLy8gQXBwZW5kIHRoZSBuZXcgZGF0YSB0byB0aGUgZnJhZ21lbnQgKHN1cHBvcnRzIEhUTUwgaW5zZXJ0aW9uKVxyXG4gICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkge1xyXG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluc2VydCB0aGUgZnJhZ21lbnQgYXQgdGhlIGNhcmV0IHBvc2l0aW9uXHJcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpOyAvLyBSZW1vdmUgYW55IHNlbGVjdGVkIGNvbnRlbnQgaWYgYXBwbGljYWJsZVxyXG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShmcmFnbWVudCk7XHJcblxyXG4gICAgLy8gTW92ZSB0aGUgY2FyZXQgYWZ0ZXIgdGhlIGluc2VydGVkIGNvbnRlbnRcclxuICAgIGNvbnN0IGxhc3RDaGlsZCA9IGZyYWdtZW50Lmxhc3RDaGlsZDtcclxuXHJcbiAgICBpZiAobGFzdENoaWxkKSB7XHJcbiAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIobGFzdENoaWxkKTtcclxuICAgICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIobGFzdENoaWxkKTtcclxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgfVxyXG4gICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgdGhpcy5tb3ZlQ2FyZXRUb0VuZChlZGl0b3IpXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGxhY2VIb2xkZXJSZW1vdmUuZW1pdCgpXHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gICAvLyBNb3ZlIGNhcmV0IHRvIHRoZSBlbmQgb2YgdGhlIGVkaXRvciBjb250ZW50XHJcbi8vICAgcHJpdmF0ZSBtb3ZlQ2FyZXRUb0VuZChlZGl0b3I6IEhUTUxFbGVtZW50KSB7XHJcbi8vICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbi8vICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICBcclxuLy8gICAgIGlmIChlZGl0b3IubGFzdENoaWxkKSB7XHJcbi8vICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpO1xyXG4vLyAgICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7IC8vIENvbGxhcHNlIHRvIHRoZSBlbmRcclxuLy8gICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcclxuLy8gICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICAgIFxyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuICBcclxuICBcclxuXHJcblxyXG4gIGluaXRfRnVuYyhodG1sOiBhbnkpIHtcclxuICBpZiAoaHRtbCkge1xyXG4gICAgbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZWRpdG9yIHdpdGggc2FuaXRpemVkIGNvbnRlbnRcclxuICAgICAgdGhpcy5zZXRFZGl0b3JDb250ZW50KGh0bWwpO1xyXG5cclxuICAgICAgLy8gU2V0IHVwIGEgTXV0YXRpb25PYnNlcnZlciB0byBoYW5kbGUgY29udGVudCBjaGFuZ2VzXHJcbiAgICAgIHRoaXMuc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcik7XHJcbiAgICAgIFxyXG4gICAgICAvLyBNb3ZlIHRoZSBjYXJldCB0byB0aGUgZW5kIGFmdGVyIGluaXRpYWwgY29udGVudCBzZXR1cFxyXG4gICAgICB0aGlzLm1vdmVDYXJldFRvRW5kKGVkaXRvcik7XHJcbiAgICAgIC8vICBUcmFjayBjYXJldCBwb3NpdGlvbiBvbiBtb3VzZSBjbGlja1xyXG4gICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGVkaXRvcikgeyAgLy8gRW5zdXJlIGVkaXRvciBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgdGhpcy50cmFja0NhcmV0UG9zaXRpb24oZWRpdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbnByaXZhdGUgc2V0RWRpdG9yQ29udGVudChodG1sOiBzdHJpbmcpIHtcclxuICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gIGlmIChlZGl0b3IpIHtcclxuICAgIC8vIFNhbml0aXplIGFuZCBhcHBseSBzdHlsZXMgdG8gdGhlIEhUTUxcclxuICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMuYXBwbHlJbWFnZVN0eWxlcyhodG1sKSk7XHJcbiAgICBlZGl0b3IuaW5uZXJIVE1MID0gdGhpcy5zYW5pdGl6ZWRDb250ZW50IGFzIHN0cmluZztcclxuICB9XHJcbn1cclxuXHJcbnByaXZhdGUgc2V0dXBNdXRhdGlvbk9ic2VydmVyKGVkaXRvcjogSFRNTEVsZW1lbnQpIHtcclxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcclxuICAgIC8vIE1vdmUgdGhlIGNhcmV0IHRvIHRoZSBlbmQgYWZ0ZXIgY29udGVudCBjaGFuZ2VzXHJcbiAgICAvLyB0aGlzLm1vdmVDYXJldFRvRW5kKGVkaXRvcik7XHJcbiAgICAvLyBVcGRhdGUgbW9kZWwgd2l0aCB0aGUgY3VycmVudCBjb250ZW50XHJcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XHJcbiAgfSk7XHJcblxyXG4gIG9ic2VydmVyLm9ic2VydmUoZWRpdG9yLCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcclxufVxyXG5cclxucHJpdmF0ZSBtb3ZlQ2FyZXRUb0VuZChlZGl0b3I6IEhUTUxFbGVtZW50KSB7XHJcbiAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICBcclxuICBpZiAoZWRpdG9yLmxhc3RDaGlsZCkge1xyXG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7XHJcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7IC8vIENvbGxhcHNlIHRvIHRoZSBlbmRcclxuICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcclxuICB9XHJcbn1cclxuXHJcbi8vICAgaW5pdF9GdW5jKGh0bWw6IGFueSkge1xyXG4vLyAgIGlmIChodG1sKSB7XHJcbi8vICAgICBsZXQgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4vLyAgICAgaWYgKGVkaXRvcikge1xyXG4vLyAgICAgICBlZGl0b3IuZm9jdXMoKTtcclxuLy8gICAgICAgZWRpdG9yLmlubmVySFRNTCA9IGh0bWw7XHJcblxyXG4vLyAgICAgICAvLyBTYW5pdGl6ZSB0aGUgY29udGVudCBhbmQgYXBwbHkgc3R5bGVzXHJcbi8vICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMuYXBwbHlJbWFnZVN0eWxlcyhodG1sKSk7XHJcbi8vICAgICAgIGVkaXRvci5pbm5lckhUTUwgPSB0aGlzLnNhbml0aXplZENvbnRlbnQgYXMgc3RyaW5nO1xyXG5cclxuLy8gICAgICAgLy8gUGxhY2UgdGhlIGNhcmV0IGF0IHRoZSBlbmQgb2YgdGhlIGNvbnRlbnRcclxuLy8gICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4vLyAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIFxyXG4vLyAgICAgICBpZiAoZWRpdG9yLmxhc3RDaGlsZCkge1xyXG4vLyAgICAgICAgIC8vIFNldCB0aGUgcmFuZ2UgYXQgdGhlIGVuZCBvZiB0aGUgZWRpdG9yJ3MgY29udGVudFxyXG4vLyAgICAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlZGl0b3IpO1xyXG4vLyAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gY29sbGFwc2UgdG8gdGhlIGVuZFxyXG4vLyAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbi8vICAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XHJcbi8vICAgICAgIH1cclxuXHJcbi8vICAgICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHtcclxuLy8gICAgICAgICBpZiAoZWRpdG9yKSB7XHJcbi8vICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoZWRpdG9yLmlubmVySFRNTCk7XHJcblxyXG4vLyAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBjYXJldCByZW1haW5zIGF0IHRoZSBlbmQgYWZ0ZXIgbmV3IGNvbnRlbnQgaXMgYWRkZWRcclxuLy8gICAgICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuLy8gICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICAgIFxyXG4vLyAgICAgICAgICAgaWYgKGVkaXRvci5sYXN0Q2hpbGQpIHtcclxuLy8gICAgICAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7XHJcbi8vICAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsgLy8gY29sbGFwc2UgdG8gdGhlIGVuZFxyXG4vLyAgICAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xyXG4vLyAgICAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcclxuLy8gICAgICAgICAgIH1cclxuLy8gICAgICAgICB9XHJcbi8vICAgICAgIH0pO1xyXG4vLyAgICAgfVxyXG4vLyAgIH0gZWxzZSB7XHJcbi8vICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBudWxsO1xyXG4vLyAgIH1cclxuLy8gfVxyXG5cclxuICBmb3JtYXQoY29tbWFuZDogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKGVkaXRvcikge1xyXG4gICAgICBlZGl0b3IuZm9jdXMoKTtcclxuICAgICAgaWYgKGNvbW1hbmQgPT09ICdzdWJzY3JpcHQnKSB7XHJcbiAgICAgICAgdGhpcy5pc1N1YnNjcmlwdEFjdGl2ZSA9ICF0aGlzLmlzU3Vic2NyaXB0QWN0aXZlO1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdWJzY3JpcHQnLCBmYWxzZSwgJycpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT09ICdzdXBlcnNjcmlwdCcpIHtcclxuICAgICAgICB0aGlzLmlzU3VwZXJzY3JpcHRBY3RpdmUgPSAhdGhpcy5pc1N1cGVyc2NyaXB0QWN0aXZlO1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdzdXBlcnNjcmlwdCcsIGZhbHNlLCAnJyk7O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCB2YWx1ZSA/PyAnJyk7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICBjb25zdCB0YWcgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1s8Pl0vZywgJycpXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9ybWF0QmxvY2sgPSB0aGlzLmZvcm1hdEJsb2NrRGVjb2RlKHRhZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgdGhpcy5jaGVja0FjdGl2ZVN0YXRlcygpO1xyXG4gICAgIHRoaXMuY2hlY2tGb3JtYXRCbG9jaygpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBY3RpdmVTdGF0ZXMoKSB7XHJcbiAgICB0aGlzLmlzQm9sZEFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKCdib2xkJyk7XHJcbiAgICB0aGlzLmlzSXRhbGljQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ2l0YWxpYycpO1xyXG4gICAgdGhpcy5pc1VuZGVybGluZUFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN0YXRlKCd1bmRlcmxpbmUnKTtcclxuICAgIHRoaXMuaXNTdHJpa2V0aHJvdWdoQWN0aXZlID0gZG9jdW1lbnQucXVlcnlDb21tYW5kU3RhdGUoJ3N0cmlrZXRocm91Z2gnKTtcclxuICAgIHRoaXMuaXNTdWJzY3JpcHRBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3Vic2NyaXB0Jyk7XHJcbiAgICB0aGlzLmlzU3VwZXJzY3JpcHRBY3RpdmUgPSBkb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSgnc3VwZXJzY3JpcHQnKTtcclxuICB9XHJcblxyXG4gIGNoZWNrRm9ybWF0QmxvY2soKSB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdEJsb2NrID0gZG9jdW1lbnQucXVlcnlDb21tYW5kVmFsdWUoJ2Zvcm1hdEJsb2NrJyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtYXRCbG9jayA9IHRoaXMuZm9ybWF0QmxvY2tEZWNvZGUoZm9ybWF0QmxvY2spO1xyXG4gICAgICAvLyBZb3UgY2FuIGZ1cnRoZXIgaGFuZGxlIHRoZSBmb3JtYXRCbG9jayB2YWx1ZSBhcyBuZWVkZWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdEJsb2NrRGVjb2RlKGRhdGE6IHN0cmluZyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGRhdGEpIHtcclxuICAgICAgY2FzZSAnaDEnOlxyXG4gICAgICAgIHJldHVybiAnaGVhZGluZyAxJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaDInOlxyXG4gICAgICAgIHJldHVybiAnaGVhZGluZyAyJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaDMnOlxyXG4gICAgICAgIHJldHVybiAnaGVhZGluZyAzJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaDQnOlxyXG4gICAgICAgIHJldHVybiAnaGVhZGluZyA0JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaDUnOlxyXG4gICAgICAgIHJldHVybiAnaGVhZGluZyA1JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaDYnOlxyXG4gICAgICAgIHJldHVybiAnaGVhZGluZyA2JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncCc6XHJcbiAgICAgICAgcmV0dXJuICdub3JtYWwnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnbm9ybWFsJztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUZvbnQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZvbnQgPSBldmVudDtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdmb250TmFtZScsIGZhbHNlLCB0aGlzLnNlbGVjdGVkRm9udCk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRDb2RlQmxvY2soKSB7XHJcbiAgICBjb25zdCBjb2RlID0gYFxyXG4gICAgICA8cHJlIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1xyXG4gICAgICAgICAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xyXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xyXG4gICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XHJcbiAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDVweDtcclxuICAgICAgICAgICAgICAgICAgcGFkZGluZzogNXB4IDEwcHg7XCI+XHJcbiAgICAgICAgPGNvZGUgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xyXG4gICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XCIgY2xhc3M9XCJsYW5ndWFnZS1odG1sXCI+SW5zZXJ0IGNvZGUgaGVyZS4uLjwvY29kZT5cclxuICAgICAgPC9wcmU+XHJcbiAgICBgO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydEhUTUwnLCBmYWxzZSwgY29kZSk7XHJcbiAgfVxyXG5cclxuICAvLyBjaGFuZ2VGb250U2l6ZShldmVudDogYW55KSB7XHJcbiAgLy8gICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9udFNpemUnLCBmYWxzZSwgJzcnKTtcclxuICAvLyAgIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgLy8gICBpZiAoZWRpdG9yKSB7XHJcbiAgLy8gICAgIGxldCBmb250RWxlbWVudHMgPSBlZGl0b3IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ZvbnQnKTtcclxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb250RWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgICBpZiAoZm9udEVsZW1lbnRzW2ldLnNpemUgPT0gXCI3XCIpIHtcclxuICAvLyAgICAgICAgIGZvbnRFbGVtZW50c1tpXS5yZW1vdmVBdHRyaWJ1dGUoXCJzaXplXCIpO1xyXG4gIC8vICAgICAgICAgZm9udEVsZW1lbnRzW2ldLnN0eWxlLmZvbnRTaXplID0gdGhpcy5zZWxlY3RlZEZvbnRTaXplICsgJ3B4JztcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcbiAgY2hhbmdlRm9udFNpemUoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgXHJcbiAgICBpZiAoc2VsZWN0ZWRUZXh0ICYmIHNlbGVjdGVkVGV4dC5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0ZWRUZXh0LmdldFJhbmdlQXQoMCk7XHJcbiAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gdGhpcy5zZWxlY3RlZEZvbnRTaXplICsgJ3B4JztcclxuICAgICAgICByYW5nZS5zdXJyb3VuZENvbnRlbnRzKHNwYW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkTGluaygpIHtcclxuICAgIGxldCB1cmwgPSBwcm9tcHQoXCJFbnRlciB0aGUgbGluayBoZXJlOiBcIiwgXCJodHRwOi8vXCIpO1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNyZWF0ZUxpbmtcIiwgZmFsc2UsIHVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnNlcnRzSW1hZ2UoKSB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgIGVkaXRvci5mb2N1cygpO1xyXG4gICAgICBsZXQgaW1hZ2VJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZUlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgaWYgKGltYWdlSW5wdXQpIHtcclxuICAgICAgICBpbWFnZUlucHV0LmNsaWNrKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGhhbmRsZUltYWdlVXBsb2FkKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgLy8gICBpZiAoZmlsZSkge1xyXG4gIC8vICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gIC8vICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gIC8vICAgICAgIGltZy5zcmMgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgLy8gICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAvLyAgICAgICAgIC8vIENyZWF0ZSB0aGUgSFRNTCBzdHJpbmcgd2l0aCB0aGUgZXhhY3Qgd2lkdGggYW5kIGhlaWdodFxyXG4gIC8vICAgICAgICAgY29uc3QgaW1nSFRNTCA9IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiB3aWR0aD1cIiR7Nzk0fVwiID5gO1xyXG4gIC8vICAgICAgICAgLy8gSW5zZXJ0IHRoZSBpbWFnZSBpbnRvIHRoZSBlZGl0b3JcclxuICAvLyAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIGltZ0hUTUwpO1xyXG4gIC8vICAgICAgIH07XHJcbiAgLy8gICAgIH07XHJcbiAgLy8gICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgaGFuZGxlSW1hZ2VVcGxvYWQoZXZlbnQ6IGFueSkge1xyXG4gIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgY29uc3QgZWRpdG9yRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTsgLy8gUmVmZXJlbmNlIHRvIHRoZSBlZGl0b3JcclxuXHJcbiAgaWYgKGZpbGUgJiYgZWRpdG9yRWxlbWVudCkge1xyXG4gICAgY29uc3QgZWRpdG9yV2lkdGggPSBlZGl0b3JFbGVtZW50Lm9mZnNldFdpZHRoOyAvLyBHZXQgdGhlIGVkaXRvcidzIHdpZHRoXHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gZS50YXJnZXQucmVzdWx0O1xyXG5cclxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBpbWdXaWR0aCA9IGltZy53aWR0aDtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGltYWdlIHdpZHRoIGV4Y2VlZHMgdGhlIGVkaXRvcidzIHdpZHRoLCBmaXQgaXQgdG8gdGhlIGVkaXRvclxyXG4gICAgICAgIGNvbnN0IGltZ0hUTUwgPVxyXG4gICAgICAgICAgaW1nV2lkdGggPiBlZGl0b3JXaWR0aFxyXG4gICAgICAgICAgICA/IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiBzdHlsZT1cIiBtYXgtd2lkdGg6ICR7NzAwfXB4OyBoZWlnaHQ6IGF1dG87XCI+YFxyXG4gICAgICAgICAgICA6IGA8aW1nIHNyYz1cIiR7aW1nLnNyY31cIiBzdHlsZT1cIndpZHRoOiAke2ltZ1dpZHRofXB4OyBoZWlnaHQ6IGF1dG87XCI+YDtcclxuICAgICAgICB0aGlzLm5ld0ltYWdlQWRkZWQuZW1pdCgpXHJcbiAgICAgICAgLy8gSW5zZXJ0IHRoZSBpbWFnZSBpbnRvIHRoZSBlZGl0b3JcclxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBpbWdIVE1MKTtcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuXHJcbiAgLy8gYWRkVGFibGUoKSB7XHJcbiAgLy8gICBjb25zdCB0YWJsZVdpZHRoID0gODI1OyAvLyBUYWJsZSB3aWR0aCBpbiBwaXhlbHNcclxuICAvLyAgIGNvbnN0IGNvbHMgPSAzOyAvLyBOdW1iZXIgb2YgY29sdW1uc1xyXG4gIC8vICAgY29uc3QgY2VsbE1pbldpZHRoID0gdGFibGVXaWR0aCAvIGNvbHM7IC8vIENhbGN1bGF0ZSBtaW5pbXVtIHdpZHRoIGZvciBlYWNoIGNlbGxcclxuXHJcbiAgLy8gICBsZXQgdGFibGUgPSBgPGJyIC8+PHRhYmxlIHN0eWxlPVwid2lkdGg6ICR7dGFibGVXaWR0aH1weDtcIj5gO1xyXG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHsgLy8gTnVtYmVyIG9mIHJvd3NcclxuICAvLyAgICAgdGFibGUgKz0gJzx0ciA+JztcclxuICAvLyAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcclxuICAvLyAgICAgICB0YWJsZSArPSBgPHRkIHN0eWxlPVwiIHdvcmQtd3JhcDogYnJlYWstd29yZDsgd29yZC1icmVhazogYnJlYWstYWxsOyB3aGl0ZS1zcGFjZTogbm9ybWFsOyBtaW4td2lkdGg6ICR7Y2VsbE1pbldpZHRofXB4O1wiPiZuYnNwOzwvdGQ+YDtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICB0YWJsZSArPSAnPC90cj4nO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgICB0YWJsZSArPSAnPC90YWJsZT48YnIvID4nO1xyXG4gIC8vICAgICAvLyBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCB0YWJsZSk7XHJcbiAgLy8gICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAvLyAgIGlmIChlZGl0b3IpIHtcclxuICAvLyAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgLy8gICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHRhYmxlKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMudGFibGVBZGRlZCA9IHRydWU7XHJcbiAgLy8gICB0aGlzLmNoZWNrVGFibGVTZWxlY3Rpb24oKTtcclxuICAvLyB9XHJcblxyXG5cclxuICBoYW5kbGVUYWJLZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBTdG9wIGRlZmF1bHQgdGFiYmluZyBiZWhhdmlvclxyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgICBjb25zdCB0YWJOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7IC8vIENyZWF0ZSBhIHNwYW4gZWxlbWVudCBmb3IgdGhlIHRhYiBzcGFjZVxyXG4gICAgICB0YWJOb2RlLmlubmVySFRNTCA9IFwiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XCI7IC8vIEZvdXIgbm9uLWJyZWFraW5nIHNwYWNlcyB0byBtaW1pYyB0YWJcclxuICAgICAgXHJcbiAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7IC8vIFJlbW92ZSBhbnkgc2VsZWN0ZWQgdGV4dFxyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKHRhYk5vZGUpOyAvLyBJbnNlcnQgdGhlIHRhYiBzcGFjZSBhcyBzcGFuXHJcbiAgICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIodGFiTm9kZSk7IC8vIE1vdmUgY3Vyc29yIGFmdGVyIHRoZSBpbnNlcnRlZCBzcGFuXHJcbiAgICAgIHJhbmdlLnNldEVuZEFmdGVyKHRhYk5vZGUpO1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4vLyAgIGFkZFRhYmxlKCkge1xyXG4vLyAgIGNvbnN0IHRhYmxlV2lkdGggPSA4MjU7IC8vIFRhYmxlIHdpZHRoIGluIHBpeGVsc1xyXG4vLyAgIGNvbnN0IGNvbHMgPSAzOyAvLyBOdW1iZXIgb2YgY29sdW1uc1xyXG4vLyAgIGNvbnN0IGNlbGxNaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2xzOyAvLyBDYWxjdWxhdGUgbWluaW11bSB3aWR0aCBmb3IgZWFjaCBjZWxsXHJcblxyXG4vLyAgIGxldCB0YWJsZSA9IGA8YnIgLz48dGFibGUgc3R5bGU9XCJ3aWR0aDogJHt0YWJsZVdpZHRofXB4O1wiPmA7XHJcbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHsgLy8gTnVtYmVyIG9mIHJvd3NcclxuLy8gICAgIHRhYmxlICs9IGA8dHIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAke3RoaXMudGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKX1cIj5gOyAvLyBBZGQgYm9yZGVyLWJvdHRvbSB0byB0aGUgcm93XHJcbi8vICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xyXG4vLyAgICAgICB0YWJsZSArPSBgPHRkIHN0eWxlPVwid29yZC13cmFwOiBicmVhay13b3JkOyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IHdoaXRlLXNwYWNlOiBub3JtYWw7IG1pbi13aWR0aDogJHtjZWxsTWluV2lkdGh9cHg7XCI+Jm5ic3A7PC90ZD5gO1xyXG4vLyAgICAgfVxyXG4vLyAgICAgdGFibGUgKz0gJzwvdHI+JztcclxuLy8gICB9XHJcbi8vICAgdGFibGUgKz0gJzwvdGFibGU+PGJyLz4nO1xyXG5cclxuLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbi8vICAgaWYgKGVkaXRvcikge1xyXG4vLyAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbi8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCB0YWJsZSk7XHJcbi8vICAgfVxyXG5cclxuLy8gICB0aGlzLnRhYmxlQWRkZWQgPSB0cnVlO1xyXG4vLyAgIHRoaXMuY2hlY2tUYWJsZVNlbGVjdGlvbigpO1xyXG4vLyB9XHJcbi8vIGFkZFRhYmxlKCkge1xyXG4vLyAgIGNvbnN0IHRhYmxlV2lkdGggPSA4MjU7XHJcbi8vICAgY29uc3QgY29scyA9IDM7XHJcbi8vICAgY29uc3QgY2VsbE1pbldpZHRoID0gdGFibGVXaWR0aCAvIGNvbHM7XHJcblxyXG4vLyAgIGxldCB0YWJsZSA9IGA8YnIgLz48dGFibGUgaWQ9XCJjdXN0b21UYWJsZVwiIHN0eWxlPVwid2lkdGg6ICR7dGFibGVXaWR0aH1weDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcIj5gO1xyXG5cclxuLy8gICB0YWJsZSArPSBgPHRib2R5PmA7XHJcbi8vICAgdGFibGUgKz0gYDx0ciBpZD1cInRhYmxlSGVhZGVyUm93XCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAke3RoaXMudGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKX07XCIgKGNsaWNrKT1cImNoZWNrVGFibGVTZWxlY3Rpb24oKVwiPmA7XHJcbi8vICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcclxuLy8gICAgIHRhYmxlICs9IGA8dGQgY2xhc3M9XCJoZWFkZXItY2VsbFwiIFxyXG4vLyAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXRvcDogMnB4IHNvbGlkIGJsYWNrOyBcclxuLy8gICAgICAgICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7IFxyXG4vLyAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBzdGFydDsgXHJcbi8vICAgICAgICAgICAgICAgICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsgXHJcbi8vICAgICAgICAgICAgICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgXHJcbi8vICAgICAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7IFxyXG4vLyAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6ICR7Y2VsbE1pbldpZHRofXB4OyBcclxuLy8gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OyBcclxuLy8gICAgICAgICAgICAgICAgICAgICAvLyAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcclxuLy8gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xyXG4vLyAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XHJcbi8vIGhlaWdodDoyOHB4O1wiPjwvdGQ+YDtcclxuLy8gICB9XHJcbi8vICAgdGFibGUgKz0gYDwvdHI+YDtcclxuXHJcbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcclxuLy8gICAgIHRhYmxlICs9IGA8dHIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAke3RoaXMudGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKX1cIj5gO1xyXG4vLyAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzOyBqKyspIHtcclxuLy8gICAgICAgdGFibGUgKz0gYDx0ZCBzdHlsZT1cIndvcmQtd3JhcDogYnJlYWstd29yZDsgXHJcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsgXHJcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7IFxyXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBtaW4td2lkdGg6ICR7Y2VsbE1pbldpZHRofXB4O1xyXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcIj4mbmJzcDs8L3RkPmA7XHJcbi8vICAgICB9XHJcbi8vICAgICB0YWJsZSArPSBcIjwvdHI+XCI7XHJcbi8vICAgfVxyXG4vLyAgIHRhYmxlICs9IGA8L3Rib2R5PjwvdGFibGU+PGJyLz5gO1xyXG5cclxuLy8gICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVkaXRvclwiKTtcclxuLy8gICBpZiAoZWRpdG9yKSB7XHJcbi8vICAgICBlZGl0b3IuZm9jdXMoKTtcclxuLy8gICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5zZXJ0SFRNTFwiLCBmYWxzZSwgdGFibGUpO1xyXG4vLyAgIH1cclxuXHJcbi8vICAgdGhpcy50YWJsZUFkZGVkID0gdHJ1ZTtcclxuLy8gICB0aGlzLmNoZWNrVGFibGVTZWxlY3Rpb24oKTtcclxuXHJcbi8vICAgLy8gQWRkIHN0eWxlcyB0byBwcmV2ZW50IHRhYmxlIHN0cnVjdHVyZSBicmVha2luZ1xyXG4vLyAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xyXG4vLyAgIHN0eWxlLmlubmVySFRNTCA9IGBcclxuLy8gICAjY3VzdG9tVGFibGUge1xyXG4vLyAgICAgdGFibGUtbGF5b3V0OiBmaXhlZCAhaW1wb3J0YW50O1xyXG4vLyAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSAhaW1wb3J0YW50O1xyXG4vLyAgIH1cclxuLy8gICAjY3VzdG9tVGFibGUgdHIge1xyXG4vLyAgICAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XHJcbi8vICAgfVxyXG4vLyAgICNjdXN0b21UYWJsZSB0ZCB7XHJcbi8vICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XHJcbi8vICAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XHJcbi8vICAgfVxyXG4vLyAgICNjdXN0b21UYWJsZSAuaGVhZGVyLWNlbGwge1xyXG4vLyAgICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50O1xyXG4vLyAgIH1cclxuLy8gICAjY3VzdG9tVGFibGUgLmhlYWRlci1jZWxsID4gc3BhbiB7XHJcbi8vICAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcclxuLy8gICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcclxuLy8gICB9XHJcbi8vICAgI2N1c3RvbVRhYmxlIC5oZWFkZXItY2VsbDpob3ZlciB7XHJcbi8vICAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcclxuLy8gICB9XHJcbi8vIGA7XHJcbi8vICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XHJcbi8vIH1cclxuXHJcbmFkZFRhYmxlKCkge1xyXG4gIGNvbnN0IHRhYmxlV2lkdGggPSA4MjU7XHJcbiAgY29uc3QgY29scyA9IDM7XHJcbiAgY29uc3QgY2VsbE1pbldpZHRoID0gdGFibGVXaWR0aCAvIGNvbHM7XHJcblxyXG4gIGxldCB0YWJsZSA9IGA8YnIgLz48dGFibGUgaWQ9XCJjdXN0b21UYWJsZVwiIHN0eWxlPVwid2lkdGg6ICR7dGFibGVXaWR0aH1weDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcIj5gO1xyXG4gIHRhYmxlICs9IGA8dGJvZHk+YDtcclxuXHJcbiAgLy8gVGFibGUgSGVhZGVyIFJvd1xyXG4gIHRhYmxlICs9IGA8dHIgaWQ9XCJ0YWJsZUhlYWRlclJvd1wiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJHt0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCl9O1wiIG9uY2xpY2s9XCJjaGVja1RhYmxlU2VsZWN0aW9uKClcIj5gO1xyXG5cclxuICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHM7IGorKykge1xyXG4gICAgdGFibGUgKz0gYDx0ZCBjbGFzcz1cImhlYWRlci1jZWxsXCIgXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXItdG9wOiAycHggc29saWQgYmxhY2s7IFxyXG4gICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsgXHJcbiAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHN0YXJ0OyBcclxuICAgICAgICAgICAgICAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOyBcclxuICAgICAgICAgICAgICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyBcclxuICAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgXHJcbiAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogJHtjZWxsTWluV2lkdGh9cHg7IFxyXG4gICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7IFxyXG4gICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OjI4cHg7XCI+PC90ZD5gO1xyXG4gIH1cclxuXHJcbiAgLy8gUHJvcGVybHkgY2xvc2luZyB0aGUgaGVhZGVyIHJvd1xyXG4gIHRhYmxlICs9IGA8L3RyPmA7XHJcblxyXG4gIC8vIERhdGEgUm93c1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XHJcbiAgICB0YWJsZSArPSBgPHRyIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJHt0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCl9XCI+YDtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrKSB7XHJcbiAgICAgIHRhYmxlICs9IGA8dGQgc3R5bGU9XCJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAke2NlbGxNaW5XaWR0aH1weDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XCI+Jm5ic3A7PC90ZD5gO1xyXG4gICAgfVxyXG4gICAgdGFibGUgKz0gYDwvdHI+YDtcclxuICB9XHJcblxyXG4gIHRhYmxlICs9IGA8L3Rib2R5PjwvdGFibGU+PGJyLz5gO1xyXG5cclxuICAvLyBJbnNlcnRpbmcgaW50byB0aGUgZWRpdG9yXHJcbiAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZGl0b3JcIik7XHJcbiAgaWYgKGVkaXRvcikge1xyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImluc2VydEhUTUxcIiwgZmFsc2UsIHRhYmxlKTtcclxuICB9XHJcblxyXG4gIHRoaXMudGFibGVBZGRlZCA9IHRydWU7XHJcbiAgdGhpcy5jaGVja1RhYmxlU2VsZWN0aW9uKCk7XHJcblxyXG4gIC8vIEFkZCBzdHlsZXMgdG8gcHJldmVudCB0YWJsZSBzdHJ1Y3R1cmUgYnJlYWtpbmdcclxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcclxuICBzdHlsZS5pbm5lckhUTUwgPSBgXHJcbiAgI2N1c3RvbVRhYmxlIHtcclxuICAgIHRhYmxlLWxheW91dDogZml4ZWQgIWltcG9ydGFudDtcclxuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UgIWltcG9ydGFudDtcclxuICB9XHJcbiAgI2N1c3RvbVRhYmxlIHRyIHtcclxuICAgIGRpc3BsYXk6IHRhYmxlLXJvdyAhaW1wb3J0YW50O1xyXG4gIH1cclxuICAjY3VzdG9tVGFibGUgdGQge1xyXG4gICAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xyXG4gICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50O1xyXG4gIH1cclxuICAjY3VzdG9tVGFibGUgLmhlYWRlci1jZWxsIHtcclxuICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDtcclxuICB9XHJcbiAgI2N1c3RvbVRhYmxlIC5oZWFkZXItY2VsbCA+IHNwYW4ge1xyXG4gICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7XHJcbiAgICBwb3NpdGlvbjogc3RhdGljICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG4gICNjdXN0b21UYWJsZSAuaGVhZGVyLWNlbGw6aG92ZXIge1xyXG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XHJcbiAgfVxyXG5gO1xyXG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xyXG59XHJcblxyXG5cclxuLy8gRnVuY3Rpb24gdG8gY2hhbmdlIHRoZSBmaXJzdCByb3cgKHRoZWFkKSBiYWNrZ3JvdW5kIGNvbG9yXHJcbnNldFRoZWFkQmdDb2xvcihldmVudDogYW55KSB7XHJcbiAgY29uc3Qgc2VsZWN0ZWRDb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4gICAgY29uc3QgaGVhZGVyUm93ID0gdGhpcy5zZWxlY3RlZFRhYmxlLnF1ZXJ5U2VsZWN0b3IoXCJ0clwiKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBpZiAoaGVhZGVyUm93KSB7XHJcbiAgICAgIGNvbnN0IGhlYWRlckNlbGxzID0gaGVhZGVyUm93LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaGVhZGVyLWNlbGxcIik7XHJcbiAgICAgIGhlYWRlckNlbGxzLmZvckVhY2goKGNlbGw6IEVsZW1lbnQpID0+IHtcclxuICAgICAgICAoY2VsbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gc2VsZWN0ZWRDb2xvcjtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuXHJcbiAgY2hlY2tUYWJsZVNlbGVjdGlvbihldmVudD86IE1vdXNlRXZlbnQpIHtcclxuICAgIGxldCB0YXJnZXQgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKHRhcmdldCAmJiAodGFyZ2V0LnRhZ05hbWUgPT09ICdURCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpKSB7XHJcbiAgICAgIHRoaXMuaXNUYWJsZVNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlID0gdGFyZ2V0LmNsb3Nlc3QoJ3RhYmxlJykgYXMgSFRNTFRhYmxlRWxlbWVudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNUYWJsZVNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIHRoaXMuY2hlY2tQbGFjZWhvbGRlcigpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tQbGFjZWhvbGRlcigpIHtcclxuICAgIC8vIGxldCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICAvLyBpZiAoZWRpdG9yKSB7XHJcbiAgICAvLyAgIHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUgPSBlZGl0b3IuaW5uZXJIVE1MID09PSAnJyB8fCBlZGl0b3IuaW5uZXJIVE1MID09PSAnPGJyPic7XHJcbiAgICAvLyAgIGlmICh0aGlzLmlzUGxhY2Vob2xkZXJWaXNpYmxlKSB7XHJcbiAgICAvLyAgICAgLy8gZWRpdG9yLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz1cInBsYWNlaG9sZGVyXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgY29sb3I6ICMwMDAwMDBcIj5JbnNlcnQgdGV4dCBoZXJlIC4uLjwvc3Bhbj4nO1xyXG4gICAgLy8gICB9IGVsc2Uge1xyXG4gICAgLy8gICAgIGxldCBwbGFjZWhvbGRlciA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCcucGxhY2Vob2xkZXInKTtcclxuICAgIC8vICAgICBpZiAocGxhY2Vob2xkZXIpIHtcclxuICAgIC8vICAgICAgIGVkaXRvci5yZW1vdmVDaGlsZChwbGFjZWhvbGRlcik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKCkge1xyXG4gICAgLy8gbGV0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIC8vIGlmIChlZGl0b3IgJiYgdGhpcy5pc1BsYWNlaG9sZGVyVmlzaWJsZSkge1xyXG4gICAgLy8gICBlZGl0b3IuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAvLyAgIHRoaXMuaXNQbGFjZWhvbGRlclZpc2libGUgPSBmYWxzZTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIC8vIGNvbG9yQ2hhbmdlKG5ld0NvbG9yOiBzdHJpbmcpIHtcclxuICAvLyAgIHRoaXMuY29sb3IgPSBuZXdDb2xvcjtcclxuICAvLyB9XHJcblxyXG4gIG9uQmx1cigpIHtcclxuICAgIHRoaXMuY2hlY2tQbGFjZWhvbGRlcigpO1xyXG4gIH1cclxuXHJcbiAgLy8gYWRkUm93KCkge1xyXG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4gIC8vICAgICBsZXQgcm93ID0gdGhpcy5zZWxlY3RlZFRhYmxlLmluc2VydFJvdygpO1xyXG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgbGV0IGNlbGwgPSByb3cuaW5zZXJ0Q2VsbChpKTtcclxuICAvLyAgICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xyXG4gIC8vICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIGFkZFJvdygpIHtcclxuICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbiAgICBsZXQgcm93ID0gdGhpcy5zZWxlY3RlZFRhYmxlLmluc2VydFJvdygpO1xyXG5cclxuICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgY29sdW1ucyBvZiB0aGUgZmlyc3Qgcm93IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNlbGxzXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjZWxsID0gcm93Lmluc2VydENlbGwoaSk7XHJcbiAgICAgIGNlbGwuaW5uZXJIVE1MID0gJyZuYnNwOyc7XHJcblxyXG4gICAgICAvLyBBcHBseSBib3R0b20gYm9yZGVyIGV4cGxpY2l0bHlcclxuICAgICAgY2VsbC5zdHlsZS5ib3JkZXJCb3R0b20gPSBgMnB4IHNvbGlkICR7dGhpcy50aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmVDb2xvckZvclRhYmxlKCl9YDsgLy8gWW91IGNhbiByZXBsYWNlICdibGFjaycgd2l0aCB5b3VyIHRoZW1lIGNvbG9yXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLyAgIGFkZFJvdygpIHtcclxuLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbi8vICAgICBsZXQgcm93ID0gdGhpcy5zZWxlY3RlZFRhYmxlLmluc2VydFJvdygpO1xyXG4vLyAgICAgcm93LnN0eWxlLmJvcmRlckJvdHRvbSA9IHRoaXMudGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lRm9yVGFibGUoKTsgLy8gQWRkIGJvdHRvbSBib3JkZXIgdG8gdGhlIHJvd1xyXG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4vLyAgICAgICBsZXQgY2VsbCA9IHJvdy5pbnNlcnRDZWxsKGkpO1xyXG4vLyAgICAgICBjZWxsLmlubmVySFRNTCA9ICcmbmJzcDsnO1xyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuLy8gfVxyXG5cclxuXHJcbiAgLy8gZGVsZXRlUm93KCkge1xyXG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJsZSkge1xyXG4gIC8vICAgICB0aGlzLnNlbGVjdGVkVGFibGUuZGVsZXRlUm93KC0xKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4vLyAgIGRlbGV0ZVJvdygpIHtcclxuLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbi8vICAgICBsZXQgcm93SW5kZXggPSB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGggLSAxOyBcclxuLy8gICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XHJcbi8vICAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbi8vICAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuLy8gICAgICAgICBsZXQgcm93ID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ3RyJyk7XHJcbi8vICAgICAgICAgaWYgKHJvdykge1xyXG4vLyAgICAgICAgICAgcm93SW5kZXggPSByb3cucm93SW5kZXg7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9XHJcbi8vICAgICB9XHJcbi8vICAgICB0aGlzLnNlbGVjdGVkVGFibGUuZGVsZXRlUm93KHJvd0luZGV4KTtcclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbiAgZGVsZXRlUm93KCkge1xyXG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICBjb25zdCByb3cgPSBzZWxlY3RlZE5vZGUucGFyZW50RWxlbWVudD8uY2xvc2VzdCgndHInKTtcclxuXHJcbiAgICBpZiAocm93KSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlID0gcm93LmNsb3Nlc3QoJ3RhYmxlJyk7XHJcbiAgICAgIGlmICh0YWJsZSkge1xyXG4gICAgICAgIHRhYmxlLmRlbGV0ZVJvdyhyb3cucm93SW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuICAvLyBhZGRDb2x1bW4oKSB7XHJcbiAgLy8gICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbiAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgICBsZXQgY2VsbCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmluc2VydENlbGwoLTEpO1xyXG4gIC8vICAgICAgIGNlbGwuaW5uZXJIVE1MID0gJyZuYnNwOyc7XHJcbiAgLy8gICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGJsYWNrJztcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbi8vICAgYWRkQ29sdW1uKCkge1xyXG4vLyAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcclxuLy8gICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbMF0uY2VsbHMubGVuZ3RoICsgMTsgLy8gTmV3IGNvbHVtbiBjb3VudFxyXG4vLyAgICAgY29uc3QgdGFibGVXaWR0aCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5vZmZzZXRXaWR0aDtcclxuLy8gICAgIGNvbnN0IG1pbldpZHRoID0gdGFibGVXaWR0aCAvIGNvbHVtbkNvdW50O1xyXG5cclxuLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuLy8gICAgICAgbGV0IGNlbGwgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5pbnNlcnRDZWxsKC0xKTtcclxuLy8gICAgICAgY2VsbC5pbm5lckhUTUwgPSAnJm5ic3A7JztcclxuLy8gICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGJsYWNrJztcclxuLy8gICAgICAgY2VsbC5zdHlsZS5taW5XaWR0aCA9IGAke21pbldpZHRofXB4YDtcclxuLy8gICAgICAgY2VsbC5zdHlsZS53b3JkV3JhcCA9ICdicmVhay13b3JkJztcclxuLy8gICAgICAgY2VsbC5zdHlsZS53b3JkQnJlYWsgPSAnYnJlYWstYWxsJztcclxuLy8gICAgICAgY2VsbC5zdHlsZS53aGl0ZVNwYWNlID0gJ25vcm1hbCc7XHJcbi8vICAgICB9XHJcblxyXG4vLyAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNlbGxzJyBtaW5XaWR0aFxyXG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xyXG4vLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XHJcbi8vICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHNbal0uc3R5bGUubWluV2lkdGggPSBgJHttaW5XaWR0aH1weGA7XHJcbi8vICAgICAgIH1cclxuLy8gICAgIH1cclxuLy8gICB9XHJcbiAgLy8gfVxyXG4gIFxyXG4gIC8vIGFkZENvbHVtbigpIHtcclxuICAvLyBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbiAgLy8gICBjb25zdCBjb2x1bW5Db3VudCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzWzBdLmNlbGxzLmxlbmd0aCArIDE7IC8vIE5ldyBjb2x1bW4gY291bnRcclxuICAvLyAgIGNvbnN0IHRhYmxlV2lkdGggPSB0aGlzLnNlbGVjdGVkVGFibGUub2Zmc2V0V2lkdGg7XHJcbiAgLy8gICBjb25zdCBtaW5XaWR0aCA9IHRhYmxlV2lkdGggLyBjb2x1bW5Db3VudDtcclxuXHJcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgIGxldCBjZWxsID0gdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uaW5zZXJ0Q2VsbCgtMSk7XHJcbiAgLy8gICAgIGNlbGwuaW5uZXJIVE1MID0gJyZuYnNwOyc7XHJcbiAgLy8gICAgIGNlbGwuc3R5bGUud29yZFdyYXAgPSAnYnJlYWstd29yZCc7XHJcbiAgLy8gICAgIGNlbGwuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XHJcbiAgLy8gICAgIGNlbGwuc3R5bGUud2hpdGVTcGFjZSA9ICdub3JtYWwnO1xyXG4gIC8vICAgICBjZWxsLnN0eWxlLm1pbldpZHRoID0gYCR7bWluV2lkdGh9cHhgO1xyXG4gIC8vICAgICBjZWxsLnN0eWxlLmJvcmRlckJvdHRvbSA9IGAycHggc29saWQgJHt0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUNvbG9yRm9yVGFibGUoKX1gXHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgLy8gVXBkYXRlIGV4aXN0aW5nIHJvd3MnIGJvdHRvbSBib3JkZXJcclxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAvLyAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uc3R5bGUuYm9yZGVyQm90dG9tID0gdGhpcy50aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmVGb3JUYWJsZSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICAvLyB9XHJcblxyXG4gIGFkZENvbHVtbigpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcclxuICAgICAgY29uc3QgY29sdW1uQ291bnQgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXS5jZWxscy5sZW5ndGggKyAxOyAvLyBOZXcgY29sdW1uIGNvdW50XHJcbiAgICAgIGNvbnN0IHRhYmxlV2lkdGggPSB0aGlzLnNlbGVjdGVkVGFibGUub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGNvbnN0IG1pbldpZHRoID0gdGFibGVXaWR0aCAvIGNvbHVtbkNvdW50O1xyXG5cclxuICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IGhlYWRlciBiYWNrZ3JvdW5kIGNvbG9yIGlmIGFueVxyXG4gICAgICBjb25zdCBmaXJzdEhlYWRlckNlbGwgPSB0aGlzLnNlbGVjdGVkVGFibGUucm93c1swXVxyXG4gICAgICAgIC5jZWxsc1swXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29uc3QgaGVhZGVyQmdDb2xvciA9IGZpcnN0SGVhZGVyQ2VsbFxyXG4gICAgICAgID8gZmlyc3RIZWFkZXJDZWxsLnN0eWxlLmJhY2tncm91bmRDb2xvclxyXG4gICAgICAgIDogXCJcIjtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2VsbCA9IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmluc2VydENlbGwoLTEpO1xyXG4gICAgICAgIGNlbGwuaW5uZXJIVE1MID0gXCImbmJzcDtcIjtcclxuICAgICAgICBjZWxsLnN0eWxlLndvcmRXcmFwID0gXCJicmVhay13b3JkXCI7XHJcbiAgICAgICAgY2VsbC5zdHlsZS53b3JkQnJlYWsgPSBcImJyZWFrLWFsbFwiO1xyXG4gICAgICAgIGNlbGwuc3R5bGUud2hpdGVTcGFjZSA9IFwibm9ybWFsXCI7XHJcbiAgICAgICAgY2VsbC5zdHlsZS5taW5XaWR0aCA9IGAke21pbldpZHRofXB4YDtcclxuICAgICAgICBjZWxsLnN0eWxlLmJvcmRlckJvdHRvbSA9IGAycHggc29saWQgJHt0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUNvbG9yRm9yVGFibGUoKX1gO1xyXG5cclxuICAgICAgICAvLyBJZiBpdCdzIHRoZSBmaXJzdCByb3csIG1ha2UgaXQgYSBoZWFkZXIgY2VsbFxyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoXCJoZWFkZXItY2VsbFwiKTtcclxuICAgICAgICAgIGNlbGwuc3R5bGUuZm9udFdlaWdodCA9IFwiYm9sZFwiO1xyXG4gICAgICAgICAgY2VsbC5zdHlsZS50ZXh0QWxpZ24gPSBcInN0YXJ0XCI7XHJcbiAgICAgICAgICBjZWxsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcclxuICAgICAgICAgIGNlbGwuc3R5bGUuZGlzcGxheSA9IFwidGFibGUtY2VsbFwiO1xyXG4gICAgICAgICAgY2VsbC5zdHlsZS5wb3NpdGlvbiA9IFwic3RhdGljXCI7XHJcbiAgICAgICAgICBjZWxsLnN0eWxlLmJvcmRlclRvcCA9IFwiMnB4IHNvbGlkIGJsYWNrXCI7XHJcbiAgICAgICAgICAvLyBjZWxsLmlubmVyVGV4dCA9IGBIZWFkZXIgJHtjb2x1bW5Db3VudH1gO1xyXG5cclxuICAgICAgICAgIC8vIEFwcGx5IHRoZSBzYW1lIGJhY2tncm91bmQgY29sb3IgYXMgZXhpc3RpbmcgaGVhZGVyc1xyXG4gICAgICAgICAgaWYgKGhlYWRlckJnQ29sb3IpIHtcclxuICAgICAgICAgICAgY2VsbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBoZWFkZXJCZ0NvbG9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIHJvd3MnIGJvdHRvbSBib3JkZXJcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLnN0eWxlLmJvcmRlckJvdHRvbSA9XHJcbiAgICAgICAgICB0aGlzLnRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUZvclRhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgXHJcblxyXG5cclxuXHJcblxyXG4gIGRlbGV0ZUNvbHVtbigpIHtcclxuICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xyXG4gICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgbGV0IGNlbGwgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZT8ucGFyZW50RWxlbWVudD8uY2xvc2VzdCgndGQsIHRoJykgYXMgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKGNlbGwpIHtcclxuICAgICAgICAgIGxldCBjZWxsSW5kZXggPSBjZWxsLmNlbGxJbmRleDtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uZGVsZXRlQ2VsbChjZWxsSW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuICB0aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmVGb3JUYWJsZSgpIHtcclxuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxyXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XHJcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICM0MTQxNDEgIWltcG9ydGFudCdcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnMnB4IHNvbGlkICM1RjVGNUYgIWltcG9ydGFudCdcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRoZW1lTW9kZUNsclZlcnRpY2FsTGluZUNvbG9yRm9yVGFibGUoKSB7XHJcbiAgICBjb25zdCBjbHJNb2RlID0gZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGF5b3V0LWNvbG9yJylcclxuICAgIGlmIChjbHJNb2RlID09ICdkYXJrJykge1xyXG4gICAgICByZXR1cm4gJyM0MTQxNDEnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyM1RjVGNUYnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGp1c3RUYWJsZVdpZHRoKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlLnN0eWxlLndpZHRoID0gZXZlbnQudGFyZ2V0LnZhbHVlICsgJ3B4JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkanVzdENlbGxXaWR0aChldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYmxlKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGUucm93c1tpXS5jZWxsc1tqXS5zdHlsZS53aWR0aCA9IGV2ZW50LnRhcmdldC52YWx1ZSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGp1c3RDZWxsSGVpZ2h0KGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFibGUpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkVGFibGUucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5zZWxlY3RlZFRhYmxlLnJvd3NbaV0uY2VsbHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZS5yb3dzW2ldLmNlbGxzW2pdLnN0eWxlLmhlaWdodCA9IGV2ZW50LnRhcmdldC52YWx1ZSArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENhcmV0VG9FbmQoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbCkge1xyXG4gICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XHJcbiAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XHJcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gb3BlbkNvbG9yUGlja2VyKGlucHV0SWQ6IHN0cmluZykge1xyXG4gIC8vICAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7XHJcbiAgLy8gICBpZiAoaW5wdXRFbGVtZW50KSB7XHJcbiAgLy8gICAgIGlucHV0RWxlbWVudC5jbGljaygpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0VGV4dENvbG9yKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAvLyAgIGlmIChlZGl0b3IpIHtcclxuICAvLyAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgLy8gICAgIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIC8vICAgICB0aGlzLnNlbGVjdGVkVGV4dENvbG9yID0gY29sb3I7XHJcbiAgLy8gICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdmb3JlQ29sb3InLCBmYWxzZSwgY29sb3IpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0QmFja2dyb3VuZENvbG9yKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAvLyAgIGlmIChlZGl0b3IpIHtcclxuICAvLyAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgLy8gICAgIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIC8vICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IGNvbG9yO1xyXG4gIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaGlsaXRlQ29sb3InLCBmYWxzZSwgY29sb3IpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlZFNlbGVjdGlvbjogUmFuZ2UgfCBudWxsID0gbnVsbDtcclxuXHJcbm9wZW5Db2xvclBpY2tlcihpbnB1dElkOiBzdHJpbmcpIHtcclxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbnB1dElkKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIGlmIChpbnB1dEVsZW1lbnQpIHtcclxuICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICB0aGlzLnNhdmVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICB9XHJcbiAgICBpbnB1dEVsZW1lbnQuY2xpY2soKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIHNldFRleHRDb2xvcihldmVudDogYW55KSB7XHJcbi8vICAgaWYgKHRoaXMuc2F2ZWRTZWxlY3Rpb24pIHtcclxuLy8gICAgIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4vLyAgICAgdGhpcy5zZWxlY3RlZFRleHRDb2xvciA9IGNvbG9yO1xyXG5cclxuLy8gICAgIC8vIFJlc3RvcmUgdGhlIHNhdmVkIHNlbGVjdGlvblxyXG4vLyAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4vLyAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4vLyAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbi8vICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLnNhdmVkU2VsZWN0aW9uKTtcclxuXHJcbi8vICAgICAgIC8vIEFwcGx5IHRoZSBjb2xvciB1c2luZyBhIHNwYW5cclxuLy8gICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNhdmVkU2VsZWN0aW9uO1xyXG4vLyAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4vLyAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gY29sb3I7XHJcbi8vICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSByYW5nZS50b1N0cmluZygpO1xyXG5cclxuLy8gICAgICAgLy8gUmVwbGFjZSB0aGUgc2VsZWN0ZWQgdGV4dCB3aXRoIHRoZSBzdHlsZWQgc3BhblxyXG4vLyAgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xyXG4vLyAgICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuLy8gICAgICAgLy8gQ2xlYXIgdGhlIHNhdmVkIHNlbGVjdGlvblxyXG4vLyAgICAgICB0aGlzLnNhdmVkU2VsZWN0aW9uID0gbnVsbDtcclxuLy8gICAgIH1cclxuLy8gICB9XHJcbiAgLy8gfVxyXG4vLyAgIHNldFRleHRDb2xvcihldmVudDogYW55KSB7XHJcbi8vICAgaWYgKHRoaXMuc2F2ZWRTZWxlY3Rpb24pIHtcclxuLy8gICAgIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4vLyAgICAgdGhpcy5zZWxlY3RlZFRleHRDb2xvciA9IGNvbG9yO1xyXG5cclxuLy8gICAgIC8vIFJlc3RvcmUgdGhlIHNhdmVkIHNlbGVjdGlvblxyXG4vLyAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4vLyAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuLy8gICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNhdmVkU2VsZWN0aW9uO1xyXG4vLyAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbi8vICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcblxyXG4vLyAgICAgICAvLyBHZXQgc2VsZWN0ZWQgZWxlbWVudHNcclxuLy8gICAgICAgY29uc3Qgc2VsZWN0ZWRDb250ZW50ID0gcmFuZ2UuY2xvbmVDb250ZW50cygpO1xyXG4vLyAgICAgICBjb25zdCBlbGVtZW50cyA9IEFycmF5LmZyb20oc2VsZWN0ZWRDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKSBhcyBIVE1MRWxlbWVudFtdOyAvLyDinIUgRXhwbGljaXRseSBjYXN0IHRvIEhUTUxFbGVtZW50W11cclxuXHJcbi8vICAgICAgIC8vIEFwcGx5IGNvbG9yIHRvIGVhY2ggZWxlbWVudCB3aXRob3V0IG1vZGlmeWluZyBzdHJ1Y3R1cmVcclxuLy8gICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWwpID0+IHtcclxuLy8gICAgICAgICBlbC5zdHlsZS5jb2xvciA9IGNvbG9yO1xyXG4vLyAgICAgICB9KTtcclxuXHJcbi8vICAgICAgIC8vIEFwcGx5IGNvbG9yIHRvIHRoZSB0b3AtbGV2ZWwgdGV4dCBub2RlcyAod2l0aG91dCB3cmFwcGluZyB0aGVtKVxyXG4vLyAgICAgICBBcnJheS5mcm9tKHNlbGVjdGVkQ29udGVudC5jaGlsZE5vZGVzKS5mb3JFYWNoKChub2RlKSA9PiB7XHJcbi8vICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIG5vZGUudGV4dENvbnRlbnQ/LnRyaW0oKSAhPT0gXCJcIikge1xyXG4vLyAgICAgICAgICAgY29uc3QgcGFyZW50ID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50RWxlbWVudDtcclxuLy8gICAgICAgICAgIGlmIChwYXJlbnQpIHtcclxuLy8gICAgICAgICAgICAgcGFyZW50LnN0eWxlLmNvbG9yID0gY29sb3I7XHJcbi8vICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9KTtcclxuXHJcbi8vICAgICAgIC8vIFJlcGxhY2Ugc2VsZWN0ZWQgY29udGVudFxyXG4vLyAgICAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xyXG4vLyAgICAgICByYW5nZS5pbnNlcnROb2RlKHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4vLyAgICAgICAvLyBDbGVhciBzYXZlZCBzZWxlY3Rpb25cclxuLy8gICAgICAgdGhpcy5zYXZlZFNlbGVjdGlvbiA9IG51bGw7XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG4vLyB9XHJcblxyXG5zZXRUZXh0Q29sb3IoZXZlbnQ6IGFueSkge1xyXG4gIGNvbnNvbGUubG9nKFwiQ2xpY2tlZCBzZXRUZXh0Q29sb3JcIik7XHJcbiAgaWYgKCF0aGlzLnNhdmVkU2VsZWN0aW9uKSB7XHJcbiAgICBjb25zb2xlLndhcm4oXCJObyBzYXZlZCBzZWxlY3Rpb24gYXZhaWxhYmxlIVwiKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvbG9yID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIHRoaXMuc2VsZWN0ZWRUZXh0Q29sb3IgPSBjb2xvcjtcclxuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKFwiTm8gdmFsaWQgc2VsZWN0aW9uIGZvdW5kIVwiKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICBzZWxlY3Rpb24uYWRkUmFuZ2UodGhpcy5zYXZlZFNlbGVjdGlvbik7XHJcbiAgY29uc3QgcmFuZ2UgPSB0aGlzLnNhdmVkU2VsZWN0aW9uO1xyXG5cclxuICBjb25zdCBnZXRUYWJsZUNlbGwgPSAobm9kZTogTm9kZSB8IG51bGwpOiBIVE1MRWxlbWVudCB8IG51bGwgPT4ge1xyXG4gICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZTtcclxuICAgIGlmIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcclxuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XHJcbiAgICAgIGlmIChjdXJyZW50Tm9kZS50YWdOYW1lID09PSBcIlREXCIgfHwgY3VycmVudE5vZGUudGFnTmFtZSA9PT0gXCJUSFwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50RWxlbWVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHRhYmxlQ2VsbCA9XHJcbiAgICBnZXRUYWJsZUNlbGwocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIpIHx8XHJcbiAgICBnZXRUYWJsZUNlbGwocmFuZ2Uuc3RhcnRDb250YWluZXIpIHx8XHJcbiAgICBnZXRUYWJsZUNlbGwocmFuZ2UuZW5kQ29udGFpbmVyKTtcclxuXHJcbiAgaWYgKHRhYmxlQ2VsbCkge1xyXG4gICAgY29uc29sZS5sb2coYFByb2Nlc3NpbmcgJHt0YWJsZUNlbGwudGFnTmFtZX0gZWxlbWVudGApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkVGV4dCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhgU2VsZWN0ZWQgdGV4dCBpbiAke3RhYmxlQ2VsbC50YWdOYW1lfTpgLCBzZWxlY3RlZFRleHQpO1xyXG4gICAgICBjb25zdCB0ZXh0Tm9kZXM6IFRleHRbXSA9IFtdO1xyXG4gICAgICBjb25zdCB3YWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxyXG4gICAgICAgIHRhYmxlQ2VsbCxcclxuICAgICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVCxcclxuICAgICAgICBudWxsXHJcbiAgICAgICk7XHJcbiAgICAgIGxldCBub2RlOiBUZXh0IHwgbnVsbDtcclxuXHJcbiAgICAgIHdoaWxlICgobm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpIGFzIFRleHQgfCBudWxsKSkge1xyXG4gICAgICAgIHRleHROb2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHRleHROb2RlIG9mIHRleHROb2Rlcykge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSB0ZXh0Tm9kZS50ZXh0Q29udGVudCB8fCBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGV4dC5pbmRleE9mKHNlbGVjdGVkVGV4dCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICBgRm91bmQgc2VsZWN0ZWQgdGV4dCBpbiAke3RhYmxlQ2VsbC50YWdOYW1lfSB0ZXh0IG5vZGVgXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcclxuICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSBjb2xvcjtcclxuICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBzZWxlY3RlZFRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmVmb3JlVGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpO1xyXG4gICAgICAgICAgY29uc3QgYWZ0ZXJUZXh0ID0gdGV4dC5zbGljZShpbmRleCArIHNlbGVjdGVkVGV4dC5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG4gICAgICAgICAgaWYgKGJlZm9yZVRleHQpXHJcbiAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGJlZm9yZVRleHQpKTtcclxuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHNwYW4pO1xyXG4gICAgICAgICAgaWYgKGFmdGVyVGV4dClcclxuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYWZ0ZXJUZXh0KSk7XHJcblxyXG4gICAgICAgICAgdGV4dE5vZGUucmVwbGFjZVdpdGgoZnJhZ21lbnQpO1xyXG4gICAgICAgICAgYnJlYWs7IC8vIEFwcGx5IG9ubHkgb25jZSBwZXIgc2VsZWN0aW9uXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnNvbGUubG9nKFwiTm8gVEggb3IgVEQgZWxlbWVudCBmb3VuZCBpbiBzZWxlY3Rpb25cIik7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICB0aGlzLnNhdmVkU2VsZWN0aW9uID0gbnVsbDtcclxufVxyXG5cclxuICBzZXRCYWNrZ3JvdW5kQ29sb3IoZXZlbnQ6IGFueSkge1xyXG4gIGlmICh0aGlzLnNhdmVkU2VsZWN0aW9uKSB7XHJcbiAgICBjb25zdCBjb2xvciA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gY29sb3I7XHJcblxyXG4gICAgLy8gUmVzdG9yZSB0aGUgc2F2ZWQgc2VsZWN0aW9uXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHRoaXMuc2F2ZWRTZWxlY3Rpb24pO1xyXG5cclxuICAgICAgLy8gQXBwbHkgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgYSBzcGFuXHJcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zYXZlZFNlbGVjdGlvbjtcclxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjtcclxuICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHJhbmdlLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAvLyBSZXBsYWNlIHRoZSBzZWxlY3RlZCB0ZXh0IHdpdGggdGhlIHN0eWxlZCBzcGFuXHJcbiAgICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcbiAgICAgIHJhbmdlLmluc2VydE5vZGUoc3Bhbik7XHJcblxyXG4gICAgICAvLyBDbGVhciB0aGUgc2F2ZWQgc2VsZWN0aW9uXHJcbiAgICAgIHRoaXMuc2F2ZWRTZWxlY3Rpb24gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICB9XHJcbiAgXHJcbiAgLy8gY29sb3JDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIHRoaXMuY29sb3IgPSBldmVudC5jb2xvci5oZXg7IFxyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGxvZ0V2ZW50KGV2ZW50OiBhbnksIHRyaWdnZXI6IGFueSkge1xyXG4gICAgY29uc3QgY29sb3IgPSBldmVudDtcclxuICAgIHRoaXMuc2V0VGV4dENvbG9yKGNvbG9yKVxyXG4gICAgdGhpcy5zZWxlY3RlZFRleHRDb2xvciA9IGV2ZW50XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnZm9yZUNvbG9yJywgZmFsc2UsIGV2ZW50KTtcclxuICAgIC8vIHRoaXMubG9ncy51bnNoaWZ0KFt0aGlzLmxvZ3MubGVuZ3RoICsgMSwgdHJpZ2dlciwgZXZlbnRdKTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGVkaXRJbWFnZSgpIHtcclxuICAgIGxldCBkYXRhIFxyXG4gICAgc3dpdGNoICh0aGlzLmVkaXRvckZyb20ubmFtZSkge1xyXG4gICAgICBjYXNlICdzZWN0aW9uLWNvbnRlbnQnOlxyXG4gICAgICAgIGRhdGEgPSB7IGVkaXRJTUc6IHRydWUsIGZyb206ICdodG1sRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgsIGlkOiB0aGlzLmVkaXRvckZyb20uaWQgfTtcclxuICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YTogc3RyaW5nID0gY29tcHJlc3MoSlNPTi5zdHJpbmdpZnkodGhpcy5pbWFnZUVkaXRVcmwpKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcsIGNvbXByZXNzZWREYXRhKTtcclxuICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YTIgPSBjb21wcmVzcyhKU09OLnN0cmluZ2lmeSh0aGlzLnNhbml0aXplZENvbnRlbnQpKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd0ZXh0RWRpdG9yJywgY29tcHJlc3NlZERhdGEyKTtcclxuICAgICAgICAvLyBhbGVydCgnZ28gdG8gZWRpdG9yIScpXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvSU1HRWRpdG9yKGRhdGEpO1xyXG4gICAgICAgIHRoaXMuaW1hZ2VFZGl0LmVtaXQoKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjcmVhdGUtZG9jdW1lbnQnOlxyXG4gICAgICAgIHRoaXMuaW1hZ2VFZGl0LmVtaXQoKVxyXG4gICAgICAgIGRhdGEgPSB7IGVkaXRJTUc6IHRydWUsIGZyb206ICdjcmVhdGVEb2N1bWVudCcsIGluZGV4OiB0aGlzLnNlbGVjdGVkSXRlbUluZGV4LCBpZDogdGhpcy5lZGl0b3JGcm9tLmlkLCBzZWN0aW9uOiB0aGlzLmVkaXRvckZyb20uc2VjdGlvbiwgcmVwb3J0U2VjdGlvbklkOiB0aGlzLmVkaXRvckZyb20ucmVwb3J0U2VjdGlvbklkIH07XHJcbiAgICAgICAgLy8gdGhpcy5vcGVuRGlhbG9nKGRhdGEpXHJcbiAgICAgICAgY29uc3QgY29tcHJlc3NlZERhdGEzID0gY29tcHJlc3MoSlNPTi5zdHJpbmdpZnkodGhpcy5pbWFnZUVkaXRVcmwpKTtcclxuICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YTQgPSBjb21wcmVzcyh0aGlzLmVkaXRvclRleHQpO1xyXG5cclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcDInLCBjb21wcmVzc2VkRGF0YTMpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3RleHRFZGl0b3IyJywgY29tcHJlc3NlZERhdGE0KTtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9JTUdFZGl0b3IoZGF0YSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgbnVsbFxyXG4gICAgICAgIC8vIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wJyk7XHJcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJyk7XHJcbiAgICAgICAgLy8gc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgndGVtcGxhdGVFZGl0b3InKTtcclxuICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCd0ZXh0RWRpdG9yJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICAvLyBpZiAodGhpcy5lZGl0b3JGcm9tID09PSAnc2VjdGlvbi1jb250ZW50Jykge1xyXG4gICAgLy8gICBjb25zdCBkYXRhID0ge2VkaXRJTUc6IHRydWUsIGZyb206ICdodG1sRWRpdG9yJywgaW5kZXg6IHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXh9XHJcbiAgICAvLyAgIHRoaXMubmF2aWdhdGVUb0lNR0VkaXRvcihkYXRhKVxyXG4gICAgLy8gICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdlZGl0SW1hZ2VGcm9tVGVtcCcsIEpTT04uc3RyaW5naWZ5KHRoaXMuaW1hZ2VFZGl0VXJsKSlcclxuICAgIC8vICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgndGV4dEVkaXRvcicsIHRoaXMuZWRpdG9yVGV4dClcclxuICAgIC8vIH0gXHJcbiAgICBcclxuICB9XHJcblxyXG4gIG9wZW5EaWFsb2coIGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgLy8gbGV0IGRhdGE6IGFueTtcclxuICAgIC8vICAgZGF0YSA9IGl0ZW1cclxuICAgIC8vIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oSW1hZ2VFZGl0b3JNb2RhbENvbXBvbmVudCx7XHJcbiAgICAvLyAgIG1pbldpZHRoOiAnMTAwJScsIG1pbkhlaWdodDogJzEwMHZoJywgcGFuZWxDbGFzczogJ3RoZW1lLTJCMjkzNicgLGRpc2FibGVDbG9zZTogdHJ1ZSwgZGF0YTogZGF0YVxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgIC8vICAgY29uc29sZS5sb2coJ3Jlc3VsdCA9PT0+IGltZyA9ICcsIHJlc3VsdClcclxuICAgIC8vICAgY29uc3QgaW1nVXJsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZWRpdEltYWdlRnJvbVRlbXAyJyk7XHJcbiAgICAvLyAgICAgaWYgKGltZ1VybCkge1xyXG4gICAgLy8gICAgICAgdGhpcy5yZXBsYWNlSW1hZ2VTcmMoaW1nVXJsLCAgcmVzdWx0LmluZGV4LmluZGV4KTtcclxuICAgIC8vICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2VkaXRJbWFnZUZyb21UZW1wMicpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVwbGFjZUltYWdlU1JDKG5ld1NyYzogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcbiAgICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRoaXMuZWRpdG9yVGV4dCwgJ3RleHQvaHRtbCcpO1xyXG4gICAgY29uc3QgaW1nVGFncyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJyk7XHJcblxyXG4gIGlmIChpbWdUYWdzICYmIGltZ1RhZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBpbWdUYWdzLmxlbmd0aCkge1xyXG4gICAgICAvLyBVcGRhdGUgdGhlIHNyYyBhdHRyaWJ1dGUgb2YgdGhlIGltZyBhdCB0aGUgc3BlY2lmaWVkIGluZGV4XHJcbiAgICAgIFxyXG4gICAgICBpbWdUYWdzW2luZGV4XS5zZXRBdHRyaWJ1dGUoJ3NyYycsIG5ld1NyYyk7XHJcbiAgICAgIHRoaXMuZWRpdG9yVGV4dCA9IGRvYy5ib2R5LmlubmVySFRNTDtcclxuICAgIFxyXG4gICAgfSBcclxuICB9IFxyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb0lNR0VkaXRvcihkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FkbWluL2ltYWdlLWVkaXRvciddLCB7IHF1ZXJ5UGFyYW1zOiB7ZGF0YSA6IEpTT04uc3RyaW5naWZ5KGRhdGEpfSB9KVxyXG4gIH1cclxuXHJcbiAgLy8gIG9uVGV4dFNlbGVjdChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gIC8vICAgaWYgKHRoaXMudG9vbGJhck1vZGUgPT09ICdidWJibGUnKSB7XHJcbiAgLy8gICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAvLyAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gIC8vICAgICAgIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XHJcbiAgLy8gICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJUb3AgPSByZWN0LmJvdHRvbSArIHdpbmRvdy5zY3JvbGxZICsgMTA7XHJcbiAgLy8gICAgICAgICB0aGlzLnRvb2xiYXJMZWZ0ID0gcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFggKyAocmVjdC53aWR0aCAvIDIpIC0gNTA7XHJcbiAgLy8gICAgICAgICB0aGlzLnNob3dUb29sYmFyID0gdHJ1ZTtcclxuICAvLyAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiBvblRleHRTZWxlY3QoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgaWYgKHRoaXMudG9vbGJhck1vZGUgPT09ICdidWJibGUnKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBzY3JvbGxZID0gIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsWCA9ICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICAgICAgICB0aGlzLnRvb2xiYXJUb3AgPSByZWN0LnRvcCArIHNjcm9sbFkgLSA3NTtcclxuICAgICAgICB0aGlzLnRvb2xiYXJMZWZ0ID0gcmVjdC5sZWZ0ICsgc2Nyb2xsWCArIChyZWN0LndpZHRoIC8gMikgLSAzMjU7XHJcbiAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93VG9vbGJhciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dUb29sYmFyID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcclxuLy8gICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbi8vICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcclxuLy8gICAgIGlmIChjbGlwYm9hcmREYXRhKSB7XHJcbi8vICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcclxuLy8gICAgICAgaWYgKHRoaXMuaXNUYWJsZURhdGEocGFzdGVkVGV4dCkpIHtcclxuLy8gICAgICAgICBjb25zdCBodG1sID0gdGhpcy5jb252ZXJ0VGV4dFRvVGFibGUocGFzdGVkVGV4dCk7XHJcbi8vICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChodG1sKTtcclxuLy8gICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KHBhc3RlZFRleHQpO1xyXG4vLyAgICAgICB9XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG5cclxuICAvLyBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xyXG4gIC8vICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAvLyAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhO1xyXG4gIC8vICAgaWYgKGNsaXBib2FyZERhdGEpIHtcclxuICAvLyAgICAgLy8gSGFuZGxlIGltYWdlIGRhdGFcclxuICAvLyAgICAgY29uc3QgaXRlbXMgPSBjbGlwYm9hcmREYXRhLml0ZW1zO1xyXG4gIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgICAgaWYgKGl0ZW1zW2ldLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcclxuICAvLyAgICAgICAgIGNvbnN0IGZpbGUgPSBpdGVtc1tpXS5nZXRBc0ZpbGUoKTtcclxuICAvLyAgICAgICAgIGlmIChmaWxlKSB7XHJcbiAgLy8gICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgLy8gICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgY29uc3QgaW1nSHRtbCA9IGA8aW1nIHNyYz1cIiR7ZS50YXJnZXQucmVzdWx0fVwiIGFsdD1cIlBhc3RlZCBJbWFnZVwiIHN0eWxlPVwibWF4LXdpZHRoOiAxMDAlO1wiLz5gO1xyXG4gIC8vICAgICAgICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQoaW1nSHRtbCk7XHJcbiAgLy8gICAgICAgICAgIH07XHJcbiAgLy8gICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gIC8vICAgICAgICAgICByZXR1cm47IC8vIEV4aXQgaWYgYW4gaW1hZ2UgaXMgaGFuZGxlZFxyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG5cclxuICAvLyAgICAgLy8gSGFuZGxlIHRleHQgb3IgdGFibGUgZGF0YVxyXG4gIC8vICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgLy8gICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKHBhc3RlZFRleHQpKSB7XHJcbiAgLy8gICAgICAgY29uc3QgaHRtbCA9IHRoaXMuY29udmVydFRleHRUb1RhYmxlKHBhc3RlZFRleHQpO1xyXG4gIC8vICAgICAgIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQoaHRtbCk7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChwYXN0ZWRUZXh0KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcclxuICAgIGlmIChjbGlwYm9hcmREYXRhKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xpcGJvYXJkRGF0YS5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjbGlwYm9hcmREYXRhLml0ZW1zW2ldO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcclxuICAgICAgICAgIC8vIEhhbmRsZSBpbWFnZSBwYXN0ZVxyXG4gICAgICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XHJcbiAgICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGltZ0h0bWwgPSBgPGltZyBzcmM9XCIke2UudGFyZ2V0LnJlc3VsdH1cIiBhbHQ9XCJQYXN0ZWQgSW1hZ2VcIiBzdHlsZT1cIm1heC13aWR0aDogMTAwJTtcIiAvPmA7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChpbWdIdG1sKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gXCJ0ZXh0L2h0bWxcIikge1xyXG4gICAgICAgICAgLy8gSGFuZGxlIEhUTUwgcGFzdGVcclxuICAgICAgICAgIC8vIGNvbnN0IGh0bWxEYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9odG1sXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNUYWJsZURhdGEoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L2h0bWwnKSkpIHtcclxuICAgICAgICAgICAgY29uc3QgaHRtbCA9IHRoaXMuY29udmVydFRleHRUb1RhYmxlKGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJykpO1xyXG4gICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWwpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvaHRtbCcpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMuaW5zZXJ0SHRtbEF0Q2FyZXQoaHRtbERhdGEpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBcInRleHQvcGxhaW5cIikge1xyXG4gICAgICAgICAgLy8gSGFuZGxlIHBsYWluIHRleHQgcGFzdGVcclxuICAgICAgICAgIGlmICh0aGlzLmlzVGFibGVEYXRhKGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBodG1sID0gdGhpcy5jb252ZXJ0VGV4dFRvVGFibGUoY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJykpO1xyXG4gICAgICAgICAgICB0aGlzLmluc2VydEh0bWxBdENhcmV0KGh0bWwpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRIdG1sQXRDYXJldChjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBjb25zdCBwbGFpblRleHQgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0L3BsYWluXCIpO1xyXG4gICAgICAgICAgLy8gdGhpcy5pbnNlcnRIdG1sQXRDYXJldChwbGFpblRleHQpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNFeGNlbERhdGEoaHRtbDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gaHRtbC5pbmNsdWRlcygneG1sbnM6bz1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZVwiJykgfHwgXHJcbiAgICAgICAgICBodG1sLmluY2x1ZGVzKCd4bWxuczp4PVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWxcIicpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydEV4Y2VsSHRtbFRvVGFibGUoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcclxuICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xyXG4gICAgY29uc3QgdGFibGUgPSBkb2MucXVlcnlTZWxlY3RvcigndGFibGUnKTtcclxuICAgIHJldHVybiB0YWJsZSA/IHRhYmxlLm91dGVySFRNTCA6ICcnOyAvLyBFeHRyYWN0IG9ubHkgdGhlIHRhYmxlIHBhcnRcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gIGlzVGFibGVEYXRhKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgcm93cyA9IHRleHQuc3BsaXQoJ1xcbicpO1xyXG4gICAgcmV0dXJuIHJvd3MubGVuZ3RoID4gMSAmJiByb3dzWzBdLnNwbGl0KCdcXHQnKS5sZW5ndGggPiAxO1xyXG4gIH1cclxuXHJcbiAgLy8gY29udmVydFRleHRUb1RhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgLy8gICBjb25zdCByb3dzID0gdGV4dC5zcGxpdCgnXFxuJykuZmlsdGVyKHJvdyA9PiByb3cudHJpbSgpICE9PSAnJyk7XHJcbiAgLy8gICBjb25zdCB0YWJsZVJvd3MgPSByb3dzLm1hcChyb3cgPT4ge1xyXG4gIC8vICAgICBjb25zdCBjZWxscyA9IHJvdy5zcGxpdCgnXFx0JykubWFwKGNlbGwgPT4gYDx0ZCBjbGFzcz1cInB4LTEgcHktMVwiID4ke2NlbGx9PC90ZD5gKS5qb2luKCcnKTtcclxuICAvLyAgICAgcmV0dXJuIGA8dHIgY2xhc3M9XCJ0YWJsZS1ib3JkZXItdG9wXCIgc3R5bGU9XCJib3JkZXItdG9wOiAke3RoaXMudGhlbWVNb2RlVGFibGVCb3JkZXJUb3AoKX07IHdpZHRoOiAxMDAlICFpbXBvcnRhbnRcIj4ke2NlbGxzfTwvdHI+YDtcclxuICAvLyAgIH0pLmpvaW4oJycpO1xyXG4gIC8vICAgcmV0dXJuIGA8dGFibGU+JHt0YWJsZVJvd3N9PC90YWJsZT5gO1xyXG4gIC8vIH1cclxuXHJcbiAgY29udmVydFRleHRUb1RhYmxlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByb3dzID0gdGV4dC5zcGxpdCgnXFxuJykuZmlsdGVyKHJvdyA9PiByb3cudHJpbSgpICE9PSAnJyk7XHJcbiAgICBjb25zdCBjb2x1bW5Db3VudCA9IHJvd3NbMF0/LnNwbGl0KCdcXHQnKS5sZW5ndGggfHwgMTsgLy8gR2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBmcm9tIHRoZSBmaXJzdCByb3dcclxuICAgIGNvbnN0IGNvbHVtbldpZHRoID0gMTAwIC8gY29sdW1uQ291bnQ7IC8vIENhbGN1bGF0ZSBjb2x1bW4gd2lkdGhcclxuXHJcbiAgICBjb25zdCB0YWJsZVJvd3MgPSByb3dzLm1hcCgocm93LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBjZWxscyA9IHJvdy5zcGxpdCgnXFx0JykubWFwKGNlbGwgPT4gYFxyXG4gICAgICAgIDx0ZCBjbGFzcz1cInB4LTEgcHktMSB0ZXh0LXRydW5jYXRlXCIgXHJcbiAgICAgICAgICAgIHN0eWxlPVwibWF4LXdpZHRoOiAke2NvbHVtbldpZHRofSU7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgJHtjZWxsfVxyXG4gICAgICAgIDwvdGQ+YCkuam9pbignJyk7XHJcblxyXG4gICAgICAvLyBBZGQgYSBib3JkZXItdG9wIGZvciBhbGwgcm93cyBleGNlcHQgdGhlIGZpcnN0IGFuZCBib3JkZXItYm90dG9tIGZvciB0aGUgbGFzdCByb3dcclxuICAgICAgY29uc3QgYm9yZGVyVG9wID0gaW5kZXggPT09IDAgPyAnJyA6IGBib3JkZXItdG9wOiAke3RoaXMudGhlbWVNb2RlVGFibGVCb3JkZXJUb3AoKX07YDtcclxuICAgICAgY29uc3QgYm9yZGVyQm90dG9tID0gaW5kZXggPT09IHJvd3MubGVuZ3RoIC0gMSA/IGBib3JkZXItYm90dG9tOiAke3RoaXMudGhlbWVNb2RlVGFibGVCb3JkZXJUb3AoKX07YCA6ICcnO1xyXG5cclxuICAgICAgcmV0dXJuIGBcclxuICAgICAgICA8dHIgXHJcbiAgICAgICAgICBzdHlsZT1cIiR7Ym9yZGVyVG9wfSAke2JvcmRlckJvdHRvbX0gd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcIj5cclxuICAgICAgICAgICR7Y2VsbHN9XHJcbiAgICAgICAgPC90cj5gO1xyXG4gICAgfSkuam9pbignJyk7XHJcblxyXG4gICAgcmV0dXJuIGBcclxuICAgICAgPHRhYmxlIHN0eWxlPVwidGFibGUtbGF5b3V0OiBmaXhlZDsgd2lkdGg6IDEwMCU7XCI+IFxyXG4gICAgICAgICR7dGFibGVSb3dzfVxyXG4gICAgICA8L3RhYmxlPmA7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGluc2VydEh0bWxBdENhcmV0KGh0bWw6IHN0cmluZykge1xyXG4gICAgY29uc3QgcmFuZ2UgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk/LmdldFJhbmdlQXQoMCk7XHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcclxuICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XHJcbiAgICAgIGxldCBub2RlO1xyXG4gICAgICB3aGlsZSAoKG5vZGUgPSB0ZW1wRGl2LmZpcnN0Q2hpbGQpKSB7XHJcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChub2RlKTtcclxuICAgICAgfVxyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKGZyYWcpO1xyXG4gICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0aGVtZU1vZGVUYWJsZUJvcmRlclRvcCgpIHtcclxuICAgIGNvbnN0IGNsck1vZGUgPSBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGF0YS1sYXlvdXQtY29sb3InKVxyXG4gICAgaWYgKGNsck1vZGUgPT0gJ2RhcmsnKSB7XHJcbiAgICAgIHJldHVybiAnMXB4IHNvbGlkICNEMEQwRDA7ICFpbXBvcnRhbnQnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJzFweCBzb2xpZCAjNDE0MTQxICFpbXBvcnRhbnQnXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuIFxyXG4gIHB1YmxpYyBvcGVuRnVsbHNjcmVlbigpIHtcclxuICAgIHZhciBlbGVtOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRleHRFZGl0b3JcIik7XHJcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IHRydWU7XHJcbiAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xyXG4gICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XHJcbiAgICB9IGVsc2UgaWYgKGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcclxuICAgICAgZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG4gICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgIGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuICAgIH0gZWxzZSBpZiAoZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XHJcbiAgICAgIGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHlsZSA9IHtcclxuICAgICAgJ21pbi1oZWlnaHQnOiAnOTB2aCcsXHJcbiAgICAgICdtYXgtaGVpZ2h0JzogJzkwdmgnLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlRnVsbHNjcmVlbigpIHtcclxuICAgIGlmIChkb2N1bWVudC5leGl0RnVsbHNjcmVlbikge1xyXG4gICAgICBkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpO1xyXG4gICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN0eWxlID0ge1xyXG4gICAgICAgICdtaW4taGVpZ2h0JzogJzQwMHB4JyxcclxuICAgICAgICAnbWF4LWhlaWdodCc6ICc0MDBweCcsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgY2xlYXJUZXh0RWRpdG9yKCkge1xyXG4gICAgdGhpcy5lZGl0b3JUZXh0Q2xlYXIuZW1pdCgpXHJcbiAgfVxyXG5cclxuICBzZXR1cEhpc3RvcnkoKSB7XHJcbiAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICBcclxuICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gdGhpcy5vbklucHV0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JbnB1dCgpIHtcclxuICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlU3RhdGUoKSB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgXHJcbiAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgIGNvbnN0IGVkaXRvckNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MO1xyXG4gICAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPT09IHRoaXMuaGlzdG9yeS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2goZWRpdG9yQ29udGVudCk7XHJcbiAgICAgICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhpc3RvcnkgPSB0aGlzLmhpc3Rvcnkuc2xpY2UoMCwgdGhpcy5oaXN0b3J5SW5kZXggKyAxKTtcclxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaChlZGl0b3JDb250ZW50KTtcclxuICAgICAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaGlzdG9yeUluZGV4Kys7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVuZG8oKSB7XHJcbiAgICBpZiAodGhpcy5oaXN0b3J5SW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMucmVkb1N0YWNrLnB1c2godGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeUluZGV4XSk7XHJcbiAgICAgIHRoaXMuaGlzdG9yeUluZGV4LS07XHJcbiAgICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICBcclxuICAgICAgaWYgKGVkaXRvcikge1xyXG4gICAgICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCA9IHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnlJbmRleF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZG8oKSB7XHJcbiAgICBpZiAodGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCByZWRvQ29udGVudCA9IHRoaXMucmVkb1N0YWNrLnBvcCgpO1xyXG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChyZWRvQ29udGVudCEpO1xyXG4gICAgICB0aGlzLmhpc3RvcnlJbmRleCsrO1xyXG4gICAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgXHJcbiAgICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLnNhbml0aXplZENvbnRlbnQgPSByZWRvQ29udGVudCE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4vLyAgIGZvcm1hdFRleHRXaXRoRGF0ZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuLy8gICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gZGV0ZWN0IFlZWVktTU0tREQgZm9ybWF0dGVkIGRhdGVzXHJcbi8vICAgY29uc3QgZGF0ZVJlZ2V4ID0gL1xcYlxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxiL2c7XHJcblxyXG4vLyAgIC8vIFJlcGxhY2UgZm91bmQgZGF0ZXMgd2l0aCBhIGZvcm1hdHRlZCB2ZXJzaW9uXHJcbi8vICAgcmV0dXJuIHRleHQucmVwbGFjZShkYXRlUmVnZXgsIChkYXRlU3RyKSA9PiB7XHJcbi8vICAgICAvLyBDb252ZXJ0IHRoZSBkZXRlY3RlZCBkYXRlIHN0cmluZyBpbnRvIGEgRGF0ZSBvYmplY3RcclxuLy8gICAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgIFxyXG4vLyAgICAgLy8gRm9ybWF0IHRoZSBkYXRlIHRvICdNb250aCBEYXksIFllYXInIChlLmcuLCBPY3RvYmVyIDEwLCAyMDI0KVxyXG4vLyAgICAgcmV0dXJuIGRhdGVPYmoudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcclxuLy8gICAgICAgeWVhcjogJ251bWVyaWMnLFxyXG4vLyAgICAgICBtb250aDogJ2xvbmcnLFxyXG4vLyAgICAgICBkYXk6ICdudW1lcmljJyxcclxuLy8gICAgIH0pO1xyXG4vLyAgIH0pO1xyXG4gIC8vIH1cclxuICBcclxuICBmb3JtYXRUZXh0V2l0aERhdGVzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIGRldGVjdCBZWVlZLU1NLUREIGZvcm1hdHRlZCBkYXRlc1xyXG4gIGNvbnN0IGRhdGVSZWdleCA9IC9cXGJcXGR7NH0tXFxkezJ9LVxcZHsyfVxcYi9nO1xyXG5cclxuICAvLyBSZXBsYWNlIGZvdW5kIGRhdGVzIHdpdGggYSBmb3JtYXR0ZWQgdmVyc2lvblxyXG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoZGF0ZVJlZ2V4LCAoZGF0ZVN0cikgPT4ge1xyXG4gICAgLy8gQ29udmVydCB0aGUgZGV0ZWN0ZWQgZGF0ZSBzdHJpbmcgaW50byBhIERhdGUgb2JqZWN0XHJcbiAgICBjb25zdCBkYXRlT2JqID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcblxyXG4gICAgLy8gRXh0cmFjdCBkYXksIG1vbnRoLCBhbmQgeWVhclxyXG4gICAgY29uc3QgZGF5ID0gZGF0ZU9iai5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOyAvLyBFbnN1cmUgZGF5IGlzIHR3byBkaWdpdHNcclxuICAgIGNvbnN0IG1vbnRoID0gZGF0ZU9iai50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pOyAvLyBHZXQgYWJicmV2aWF0ZWQgbW9udGggbmFtZVxyXG4gICAgY29uc3QgeWVhciA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKTsgLy8gR2V0IGZ1bGwgeWVhclxyXG5cclxuICAgIC8vIEZvcm1hdCB0aGUgZGF0ZSBhcyAnZGQvbW1tL3l5eXknXHJcbiAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcclxuICB9KTtcclxufVxyXG5cclxuXHJcbn0iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGVscy10ZXh0LWVkaXRvciBweC0wXCIgaWQ9XCJ0ZXh0RWRpdG9yXCIgI2Z1bGxzY3JlZW49XCJuZ3hGdWxsc2NyZWVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0RWRpdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4RnVsbHNjcmVlbj5cclxuICAgIDxkaXYgKm5nSWY9XCJ0b29sYmFyTW9kZSA9PT0gJ2ZpeGVkJ1wiIGNsYXNzPVwiYnRuLXRvb2xiYXIgZWxzLWJ0bi10b29sYmFyIHAtMiBweS0yIG1iLTBcIiByb2xlPVwidG9vbGJhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRoZW1lTW9kZUJnQ2xyKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICdwb2ludGVyLWV2ZW50cyc6IGRpc2FibGVUb29sYmFyID8gJ25vbmUnIDogJ2F1dG8nLFxyXG4gICAgJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnOiBJc09wZW4gPyAnMCcgOiAnMjBweCcsXHJcbiAgICAnYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMnOiBJc09wZW4gPyAnMCcgOiAnMjBweCdcclxufVwiXHJcbmFyaWEtbGFiZWw9XCJUb29sYmFyIHdpdGggYnV0dG9uIGdyb3Vwc1wiXHJcbnN0eWxlPVwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMjBweCAhaW1wb3J0YW50OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMjBweCAhaW1wb3J0YW50O1wiXHJcbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJIZWFkZXIgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLWZvcm0tc2VsZWN0IGJvcmRlciBlbHMtdG9vbGJhci1kcm9wZG93bi1idXR0b24gZHJvcGRvd24tdG9nZ2xlIHRleHQtc3RhcnRcIiBbc3R5bGUuYm9yZGVyLXJhZGl1c109XCInNXB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJoZWFkZXJEcm9wZG93blwiIFtzdHlsZS5ib3JkZXJdPVwidGhlbWVNb2RlKClcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3NlbGVjdGVkRm9ybWF0QmxvY2sgfCB0aXRsZWNhc2V9fTwvc3Bhbj4gPGkgY2xhc3M9XCJtZGkgbWRpLWNoZXZyb24tZG93biBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duXCIgY2xhc3M9XCJlbHMtdGV4dC1mb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGhlbWVNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMT4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDE+SGVhZGluZyAxPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMj4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDI+SGVhZGluZyAyPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMz4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+SGVhZGluZyAzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoND4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQ+SGVhZGluZyA0PC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoNT4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDU+SGVhZGluZyA1PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoNj4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDY+SGVhZGluZyA2PC9oNj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxwPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPk5vcm1hbDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiRm9udCBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDwhLS0gPHNlbGVjdCBjbGFzcz1cImVscy1mb3JtLXNlbGVjdCBcIiBzdHlsZT1cIiBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7IGNvbG9yOiAjZmZmO2JvcmRlcjogMnB4IHNvbGlkICM3RDZENkQgIWltcG9ydGFudDtcIiBcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGb250XCIgKGNoYW5nZSk9XCJjaGFuZ2VGb250KCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24gY2xhc3M9XCJlbHMtZm9ybS1vcHRpb25cIiAqbmdGb3I9XCJsZXQgZm9udCBvZiBmb250c1wiIFt2YWx1ZV09XCJmb250XCI+e3sgZm9udCB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtZm9ybS1zZWxlY3QgYm9yZGVyIGVscy10b29sYmFyLWRyb3Bkb3duLWJ1dHRvbiBkcm9wZG93bi10b2dnbGUgdGV4dC1zdGFydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJoZWFkZXJEcm9wZG93blwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgW3N0eWxlLmJvcmRlcl09XCJ0aGVtZU1vZGUoKVwiIFtzdHlsZS5jb2xvcl09XCJ0aGVtZU1vZGVDbHIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDogODVweDsgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50O1wiIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPnt7c2VsZWN0ZWRGb250IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVjYXNlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWNoZXZyb24tZG93biBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImhlYWRlckRyb3Bkb3duXCIgY2xhc3M9XCJlbHMtdGV4dC1mb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwidGhlbWVNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUZvbnQoZm9udClcIiBbc3R5bGUuY29sb3JdPVwidGhlbWVNb2RlQ2xyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZm9udCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHktMFwiICBzdHlsZT1cImhlaWdodDogZml0LWNvbnRlbnQ7XCIgW3N0eWxlLmNvbG9yXT1cInRoZW1lTW9kZUNscigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtZS0yIG1yLTIgXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNCb2xkQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdib2xkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWJvbGRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzSXRhbGljQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaXRhbGljXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1VuZGVybGluZUFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgndW5kZXJsaW5lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXVuZGVybGluZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdHJpa2V0aHJvdWdoQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdzdHJpa2V0aHJvdWdoJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN0cmlrZXRocm91Z2gtdmFyaWFudFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGlkPVwidGV4dENvbG9yUGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTAwJTsgbGVmdDogMDsgei1pbmRleDogMTAwOyBvcGFjaXR5OiAwO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VGV4dENvbG9yKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcigndGV4dENvbG9yUGlja2VyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jb2xvci10ZXh0IGljb24td2l0aC11bmRlcmxpbmVcIiBbc3R5bGUuY29sb3JdPVwic2VsZWN0ZWRUZXh0Q29sb3JcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiQmFja2dyb3VuZCBDb2xvclwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbc3R5bGUuY29sb3JdPVwiYmFja2dyb3VuZENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcignYmdDb2xvclBpY2tlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1hbHBoYS1hLWJveFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJiZ0NvbG9yUGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTAwJTsgbGVmdDogMDsgei1pbmRleDogMTAwOyBvcGFjaXR5OiAwO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0QmFja2dyb3VuZENvbG9yKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2FsLWxpbmUgbXMtMiBib3JkZXJcIiBbc3R5bGUuYm9yZGVyLWxlZnRdPVwidGhlbWVNb2RlQ2xyVmVydGljYWxMaW5lKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2luc2VydE9yZGVyZWRMaXN0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWxpc3QtbnVtYmVyZWRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIj48aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWxpc3QtYnVsbGV0ZWRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwicWwtYWxpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uICBhcnJvdy1ub25lIHRleHQtc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkcm9wZG93bkJhc2ljMVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIG5nYkRyb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWxlZnQgXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCIgc3R5bGU9XCJ3aWR0aDogM3B4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5TGVmdCcpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1sZWZ0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5Q2VudGVyJylcIj48aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLWNlbnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiB0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JylcIj48aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWFsaWduLXJpZ2h0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIHRleHQtZGFya1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5RnVsbCcpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1qdXN0aWZ5XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtbGluZSBtcy0yIGJvcmRlclwiIFtzdHlsZS5ib3JkZXItbGVmdF09XCJ0aGVtZU1vZGVDbHJWZXJ0aWNhbExpbmUoKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1N1YnNjcmlwdEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3Vic2NyaXB0JylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1YnNjcmlwdFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdXBlcnNjcmlwdEFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3VwZXJzY3JpcHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3VwZXJzY3JpcHRcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJhZGRMaW5rKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbGluay12YXJpYW50XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJpbnNlcnRzSW1hZ2UoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1pbWFnZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiaW1hZ2VJbnB1dFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT1cImhhbmRsZUltYWdlVXBsb2FkKCRldmVudClcIiBhY2NlcHQ9XCJpbWFnZS8qXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZFRhYmxlKClcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktdGFibGVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRSb3coKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcGx1cy1hZnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1yZW1vdmVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb2x1bW4oKVwiPjxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1jb2x1bW4tcGx1cy1hZnRlclwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUNvbHVtbigpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1yZW1vdmVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFxyXG4gICAgICAgICAgKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiBcclxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJ0SGVhZEJnQ29sb3JcIiBcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoJ3RIZWFkYmdDb2xvclBpY2tlcicpXCIgXHJcbiAgICAgICAgPiBcclxuICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1lZGl0XCI+PC9pPiBcclxuICAgICAgICA8L2J1dHRvbj4gXHJcbiAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgdHlwZT1cImNvbG9yXCIgXHJcbiAgICAgICAgICBpZD1cInRIZWFkYmdDb2xvclBpY2tlclwiIFxyXG4gICAgICAgICAgc3R5bGU9XCIgXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgXHJcbiAgICAgICAgICAgIHRvcDogMTAwJTsgXHJcbiAgICAgICAgICAgIGxlZnQ6IDA7IFxyXG4gICAgICAgICAgICB6LWluZGV4OiAxMDA7IFxyXG4gICAgICAgICAgICBvcGFjaXR5OiAwOyBcclxuICAgICAgICAgIFwiIFxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJzZXRUaGVhZEJnQ29sb3IoJGV2ZW50KVwiIFxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJ1bmRvKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdW5kb1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJyZWRvKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktcmVkb1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJzZWxlY3RlZEltYWdlXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbi0yXCIgKGNsaWNrKT1cImVkaXRJbWFnZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO1wiPkVkaXQgSW1hZ2U8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiY2xlYXJUZXh0RWRpdG9yKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiIHdpZHRoOiBmaXQtY29udGVudCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1jbG9zZS1jaXJjbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbjEoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJJc09wZW47IGVsc2UgZnVsbHNjcmVlbkljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZ1bGxzY3JlZW4tZXhpdFwiPjwvaT4gPCEtLSBDb2xsYXBzZSBJY29uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZnVsbHNjcmVlbkljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mdWxsc2NyZWVuXCI+PC9pPiA8IS0tIEV4cGFuZCBJY29uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJ0b29sYmFyTW9kZSA9PT0gJ2J1YmJsZSdcIiBjbGFzcz1cImJ1YmJsZS10b29sYmFyIGJvcmRlciBwLTJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsndG9wLnB4JzogdG9vbGJhclRvcCwgJ2xlZnQucHgnOiB0b29sYmFyTGVmdCwgJ2Rpc3BsYXknOiBzaG93VG9vbGJhciA/ICdibG9jaycgOiAnbm9uZSd9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkZvbnQgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZWxzLWZvcm0tc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIiAoY2hhbmdlKT1cImNoYW5nZUZvbnQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZm9udCBvZiBmb250c1wiIFt2YWx1ZV09XCJmb250XCI+e3sgZm9udCB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNCb2xkQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ2JvbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1ib2xkXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNJdGFsaWNBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnaXRhbGljJylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaXRhbGljXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNVbmRlcmxpbmVBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgndW5kZXJsaW5lJylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtdW5kZXJsaW5lXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdHJpa2V0aHJvdWdoQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdHJpa2V0aHJvdWdoLXZhcmlhbnRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnYmxvY2txdW90ZScpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1xdW90ZS1jbG9zZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiaW5zZXJ0Q29kZUJsb2NrKClcIj48aSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWNvZGUtdGFnc1wiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0T3JkZXJlZExpc3QnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1saXN0LW51bWJlcmVkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnaW5zZXJ0VW5vcmRlcmVkTGlzdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWxpc3QtYnVsbGV0ZWRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiQ29sb3IgRm9ybWF0dGluZ1wiPiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJxbC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgYXJyb3ctbm9uZSB0ZXh0LXNlY29uZGFyeVwiIGlkPVwiZHJvcGRvd25CYXNpYzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jb2xvci1maWxsXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd25NZW51IGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duQmFzaWMxXCIgc3R5bGU9XCJ3aWR0aDogMzAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvci1za2V0Y2ggY29sb3I9XCIjZmZmXCIgKG9uQ2hhbmdlQ29tcGxldGUpPVwic2V0VGV4dENvbG9yKCRldmVudClcIj48L2NvbG9yLXNrZXRjaD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIGN1c3RvbS1jb2xvci10cmlnZ2VyXCIgbmd4LWNvbG9ycy10cmlnZ2VyIFsobmdNb2RlbCldPVwiY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImxvZ0V2ZW50KCRldmVudCwgJ25nTW9kZWxDaGFuZ2UnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsb2dFdmVudCgkZXZlbnQsICdjaGFuZ2UnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImxvZ0V2ZW50KCRldmVudCwgJ2lucHV0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLXRleHQgaWNvbi13aXRoLXVuZGVybGluZVwiIFtzdHlsZS5jb2xvcl09XCJjb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7Y29sb3I6IGNvbG9yfVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LWNvbG9ycyBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgPjwvbmd4LWNvbG9ycz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBpZD1cInRleHRDb2xvclBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTAwJTsgbGVmdDogMDsgei1pbmRleDogMTAwOyBvcGFjaXR5OiAwO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRUZXh0Q29sb3IoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Db2xvclBpY2tlcigndGV4dENvbG9yUGlja2VyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNvbG9yLXRleHQgaWNvbi13aXRoLXVuZGVybGluZVwiIFtzdHlsZS5jb2xvcl09XCJzZWxlY3RlZFRleHRDb2xvclwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJCYWNrZ3JvdW5kIENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgaWQ9XCJiZ0NvbG9yUGlja2VyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPVwic2V0QmFja2dyb3VuZENvbG9yKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoJ2JnQ29sb3JQaWNrZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1hbHBoYS1hLWJveFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiQmFja2dyb3VuZCBDb2xvclwiIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIFtzdHlsZS5jb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sb3JQaWNrZXIoJ2JnQ29sb3JQaWNrZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS1hbHBoYS1hLWJveFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgc3R5bGU9XCJ3aWR0aDogMHB4ICFpbXBvcnRhbnQ7XCIgaWQ9XCJiZ0NvbG9yUGlja2VyXCIgW2NwUHJlc2V0Q29sb3JzXT1cIlsnI2ZmZicsICcjMDAwJywgJyMyODg5ZTknLCAnI2U5MjBlOScsICcjZmZmNTAwJywgJ3JnYigyMzYsNjQsNjQpJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoY29sb3JQaWNrZXIpXT1cImNvbG9yXCIgKGNoYW5nZSk9XCJzZXRCYWNrZ3JvdW5kQ29sb3IoJGV2ZW50KVwiIC8+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGlkPVwiYmdDb2xvclBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTAwJTsgbGVmdDogMDsgei1pbmRleDogMTAwOyBvcGFjaXR5OiAwO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRCYWNrZ3JvdW5kQ29sb3IoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkhlYWRlciBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCIgdHlwZT1cImJ1dHRvblwiIGlkPVwiaGVhZGVyRHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItMVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJoZWFkZXJEcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDE+JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItMVwiPjwvaT4gSGVhZGluZyAxPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMj4nKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci0yXCI+PC9pPiBIZWFkaW5nIDI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGgzPicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTNcIj48L2k+IEhlYWRpbmcgMzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdmb3JtYXRCbG9jaycsICc8aDQ+JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1oZWFkZXItNFwiPjwvaT4gSGVhZGluZyA0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoNT4nKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWhlYWRlci01XCI+PC9pPiBIZWFkaW5nIDU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnZm9ybWF0QmxvY2snLCAnPGg2PicpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtaGVhZGVyLTZcIj48L2k+IEhlYWRpbmcgNjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJIZWFkZXIgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkRyb3Bkb3duIGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWRyb3Bkb3duLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIiBpZD1cImhlYWRlckRyb3Bkb3duXCJcclxuICAgICAgICAgICAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiA4NXB4O1wiPnt7c2VsZWN0ZWRGb3JtYXRCbG9jayB8IHRpdGxlY2FzZX19PC9zcGFuPiA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktY2hldnJvbi1kb3duIHRleHQtZGFya1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiaGVhZGVyRHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMT4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDE+SGVhZGluZyAxPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMj4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDI+SGVhZGluZyAyPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoMz4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+SGVhZGluZyAzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoND4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQ+SGVhZGluZyA0PC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoNT4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDU+SGVhZGluZyA1PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxoNj4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDY+SGVhZGluZyA2PC9oNj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwYi0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2Zvcm1hdEJsb2NrJywgJzxwPicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPk5vcm1hbDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnc3VwZXJzY3JpcHQnKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtc3VwZXJzY3JpcHRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImZvcm1hdCgnc3Vic2NyaXB0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1YnNjcmlwdFwiPjwvaT48L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzU3Vic2NyaXB0QWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmb3JtYXQoJ3N1YnNjcmlwdCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LXN1YnNjcmlwdFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiBbY2xhc3MuYWN0aXZlXT1cImlzU3VwZXJzY3JpcHRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcm1hdCgnc3VwZXJzY3JpcHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1zdXBlcnNjcmlwdFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBlbHMtYnV0dG9uLWdyb3VwIG1yLTJcIiByb2xlPVwiZ3JvdXBcIiBhcmlhLWxhYmVsPVwiVGV4dCBGb3JtYXR0aW5nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiRHJvcGRvd24gY2xhc3M9XCJxbC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbiBhcnJvdy1ub25lIHRleHQtc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cImRyb3Bkb3duQmFzaWMxXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgbmdiRHJvcGRvd25Ub2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1sZWZ0IFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25CYXNpYzFcIiBzdHlsZT1cIndpZHRoOiAzcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1sZWZ0XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5Q2VudGVyJylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1jZW50ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlSaWdodCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1mb3JtYXQtYWxpZ24tcmlnaHRcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlGdWxsJylcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1hbGlnbi1qdXN0aWZ5XCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUZXh0IEZvcm1hdHRpbmdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJmb3JtYXQoJ3JlbW92ZUZvcm1hdCcpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZm9ybWF0LWNsZWFyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRleHQgRm9ybWF0dGluZ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgKGNsaWNrKT1cImFkZExpbmsoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWxpbmstdmFyaWFudFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJpbnNlcnRzSW1hZ2UoKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWltYWdlXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImltYWdlSW5wdXRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9XCJoYW5kbGVJbWFnZVVwbG9hZCgkZXZlbnQpXCIgYWNjZXB0PVwiaW1hZ2UvKlwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZWxzLWJ1dHRvbi1ncm91cCBtci0yXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRhYmxlIE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJhZGRUYWJsZSgpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktdGFibGVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiIChjbGljayk9XCJhZGRSb3coKVwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1wbHVzLWFmdGVyXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNUYWJsZVNlbGVjdGVkXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13aGl0ZSBlbHMtdG9vbGJhci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCI+PGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLXJvdy1yZW1vdmVcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ29sdW1uKClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXBsdXMtYWZ0ZXJcIj48L2k+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWRcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1uKClcIj48aSBjbGFzcz1cIm1kaSBtZGktdGFibGUtY29sdW1uLXJlbW92ZVwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXAgbXItMlwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJUYWJsZSBPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWxlY3RlZEltYWdlXCIgY2xhc3M9XCJidG4gYnRuLXdoaXRlIGVscy10b29sYmFyLWJ1dHRvbi0yXCIgKGNsaWNrKT1cImVkaXRJbWFnZSgpXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO1wiPkVkaXQgSW1hZ2U8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uIGN1c3RvbS1jb2xvci10cmlnZ2VyXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLWZvcm1hdC1jb2xvci10ZXh0IGljb24td2l0aC11bmRlcmxpbmVcIiBbc3R5bGUuY29sb3JdPVwiY29sb3JcIj48L2k+XHJcbiAgICAgICAgPG5neC1jb2xvcnMgWyhuZ01vZGVsKV09XCJjb2xvclwiIChjaGFuZ2UpPVwiY29sb3JDaGFuZ2VkKCRldmVudClcIj48L25neC1jb2xvcnM+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGVscy1idXR0b24tZ3JvdXBcIiBuZ2JEcm9wZG93biBhcmlhLWxhYmVsPVwiVGFibGUgT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2hpdGUgZWxzLXRvb2xiYXItYnV0dG9uXCIgbmdiRHJvcGRvd25Ub2dnbGUgIChjbGljayk9XCJhZGRUYWJsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgKm5nSWY9XCJpc1RhYmxlU2VsZWN0ZWQgfHwgdGFibGVBZGRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cImFkZFJvdygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcGx1cy1hZnRlclwiPjwvaT4gQWRkIFJvd1xyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS10YWJsZS1yb3ctcmVtb3ZlXCI+PC9pPiBEZWxldGUgUm93XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiYWRkQ29sdW1uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1wbHVzLWFmdGVyXCI+PC9pPiBBZGQgQ29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiZGVsZXRlQ29sdW1uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRhYmxlLWNvbHVtbi1yZW1vdmVcIj48L2k+IERlbGV0ZSBDb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0YWJsZVdpZHRoXCI+VGFibGUgV2lkdGg8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwidGFibGVXaWR0aFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgKGNoYW5nZSk9XCJhZGp1c3RUYWJsZVdpZHRoKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjZWxsV2lkdGhcIj5DZWxsIFdpZHRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImNlbGxXaWR0aFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgKGNoYW5nZSk9XCJhZGp1c3RDZWxsV2lkdGgoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNlbGxIZWlnaHRcIj5DZWxsIEhlaWdodDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJjZWxsSGVpZ2h0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAoY2hhbmdlKT1cImFkanVzdENlbGxIZWlnaHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhlaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8ZGl2IGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBpZD1cImVkaXRvclwiIGNsYXNzPVwicC0zIGN1c3RvbS1zY3JvbGxiYXIgbm9uLWZvY3VzXCIgI2VkaXRvclxyXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMjBweCAhaW1wb3J0YW50OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMjBweCAhaW1wb3J0YW50OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAyMHB4ICFpbXBvcnRhbnQ7XCIgW3N0eWxlLmJhY2tncm91bmRdPVwidGhlbWVNb2RlQmdDbHIoKVwiIFtzdHlsZS5ib3JkZXItdG9wXT1cInRoZW1lTW9kZUJvcmRlclRvcCgpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7J2ZvbnQtZmFtaWx5Jzogc2VsZWN0ZWRGb250LCAnZm9udC1zaXplJzogc2VsZWN0ZWRGb250U2l6ZSArICdweCd9XCIgW3N0eWxlXT1cInN0eWxlXCJcclxuICAgICAgICBbc3R5bGUubWluLWhlaWdodF09XCJJc09wZW4gPyAnODV2aCAhaW1wb3J0YW50JyA6ICAnNDA1cHggIWltcG9ydGFudCdcIlxyXG4gICAgICAgIChpbnB1dCk9XCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIkluc2VydCB0ZXh0IGhlcmUgLi4uXCIgcmVhZG9ubHkgKG1vdXNldXApPVwib25UZXh0U2VsZWN0KCRldmVudClcIlxyXG4gICAgICAgIFtpbm5lckhUTUxdPVwic2FuaXRpemVkQ29udGVudFwiIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIiAoZm9jdXMpPVwib25Gb2N1cygpXCIgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgIChjbGljayk9XCJjaGVja1RhYmxlU2VsZWN0aW9uKCRldmVudClcIj5cclxuICAgIDwvZGl2PiAtLT5cclxuICAgIDwhLS0gPGRpdiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCIgaWQ9XCJlZGl0b3JcIiBjbGFzcz1cInAtMyBjdXN0b20tc2Nyb2xsYmFyIG5vbi1mb2N1cyBvdmVyZmxvdy1hdXRvXCIgI2VkaXRvclxyXG4gICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICAgICBcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJ0aGVtZU1vZGVCZ0NscigpXCJcclxuICAgICAgICBbc3R5bGUuYm9yZGVyLXRvcF09XCJ0aGVtZU1vZGVCb3JkZXJUb3AoKVwiXHJcbiAgICAgICAgXHJcbiAgICAgICAgW25nU3R5bGVdPVwieydmb250LWZhbWlseSc6IHNlbGVjdGVkRm9udCwgJ2ZvbnQtc2l6ZSc6IHNlbGVjdGVkRm9udFNpemUgKyAncHgnLFxyXG4gICAgICAgICAgICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJzogaXNPcGVuID8gJzAnIDonMjBweCcsXHJcbiAgICAgICAgICAgJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJzogaXNPcGVuID8gJzAnIDonMjBweCdcclxuICAgICAgICB9XCJcclxuICAgICAgICBbc3R5bGUubWluLWhlaWdodF09XCJJc09wZW4gPyAnOTN2aCcgOiAnNDA1cHgnXCIgKGlucHV0KT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiSW5zZXJ0IHRleHQgaGVyZSAuLi5cIlxyXG4gICAgICAgIHJlYWRvbmx5IChtb3VzZXVwKT1cIm9uVGV4dFNlbGVjdCgkZXZlbnQpXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRDb250ZW50XCIgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgKGNsaWNrKT1cImNoZWNrVGFibGVTZWxlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgPC9kaXY+IC0tPlxyXG4gICAgPGRpdiBbYXR0ci5jb250ZW50ZWRpdGFibGVdPVwiY29udGVudEVkaXRhYmxlXCIgaWQ9XCJlZGl0b3JcIiBjbGFzcz1cInAtMyBjdXN0b20tc2Nyb2xsYmFyIG5vbi1mb2N1cyBvdmVyZmxvdy1hdXRvXCIgI2VkaXRvclxyXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBhdXRvO1wiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInRoZW1lTW9kZUJnQ2xyKClcIlxyXG4gICAgICAgIFtzdHlsZS5ib3JkZXItdG9wXT1cInRoZW1lTW9kZUJvcmRlclRvcCgpXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5Jzogc2VsZWN0ZWRGb250LCBcclxuICAgICAgICAgICAgICAgICdmb250LXNpemUnOiBzZWxlY3RlZEZvbnRTaXplICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICdib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzJzogSXNPcGVuID8gJzAnIDonMjBweCcsXHJcbiAgICAgICAgICAgICAgICAnYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnOiBJc09wZW4gPyAnMCcgOicyMHB4JyxcclxuICAgICAgICAgICAgICAgICdtaW4taGVpZ2h0JzogSXNPcGVuID8gJzkzdmgnIDogJzQwNXB4JyxcclxuICAgICAgICAgICAgICAgICdtYXgtaGVpZ2h0JzogSXNPcGVuID8gJzkzdmgnIDogJzQwNXB4J1xyXG4gICAgICAgICAgICB9XCIgcGxhY2Vob2xkZXI9XCJJbnNlcnQgdGV4dCBoZXJlIC4uLlwiIHJlYWRvbmx5IChtb3VzZXVwKT1cIm9uVGV4dFNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAoaW5wdXQpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgW2lubmVySFRNTF09XCJzYW5pdGl6ZWRDb250ZW50XCIgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIlxyXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigpXCIgKGNsaWNrKT1cImNoZWNrVGFibGVTZWxlY3Rpb24oJGV2ZW50KVwiIChrZXlkb3duLlRhYik9XCJoYW5kbGVUYWJLZXkoJGV2ZW50KVwiPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHRhYmxlICpuZ0lmPVwicGFyc2VkVGFibGVcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHBhcnNlZFRhYmxlLmhlYWRlcnNcIj57eyBoZWFkZXIgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiBwYXJzZWRUYWJsZS5yb3dzXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93XCI+e3sgY2VsbCB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcblxyXG48L2Rpdj4iXX0=
|