ms-data-grid 0.0.124 → 0.0.125
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.
|
@@ -2715,6 +2715,23 @@ export class DataGridComponent {
|
|
|
2715
2715
|
const dateObj = keyValue instanceof Date ? keyValue : new Date(keyValue);
|
|
2716
2716
|
groupKey = this.commonSevice.formatDateValue(dateObj, this.dateFormat || 'dd/MM/yyyy');
|
|
2717
2717
|
}
|
|
2718
|
+
// Handle objects (like {id, name, value})
|
|
2719
|
+
else if (typeof keyValue === 'object' && keyValue !== null && !Array.isArray(keyValue)) {
|
|
2720
|
+
// Try common property names for objects
|
|
2721
|
+
groupKey = keyValue.value ??
|
|
2722
|
+
keyValue.name ??
|
|
2723
|
+
keyValue.id ??
|
|
2724
|
+
keyValue.label ??
|
|
2725
|
+
keyValue[Object.keys(keyValue)[0]] ??
|
|
2726
|
+
"_Blank";
|
|
2727
|
+
// If it's still an object after extraction, convert to string
|
|
2728
|
+
if (typeof groupKey === 'object') {
|
|
2729
|
+
groupKey = "_Blank";
|
|
2730
|
+
}
|
|
2731
|
+
else {
|
|
2732
|
+
groupKey = this.toTitleCase(String(groupKey).trim());
|
|
2733
|
+
}
|
|
2734
|
+
}
|
|
2718
2735
|
else {
|
|
2719
2736
|
groupKey = keyValue ? this.toTitleCase(String(keyValue).trim()) : "_Blank";
|
|
2720
2737
|
}
|
|
@@ -6053,4 +6070,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
6053
6070
|
type: ViewChild,
|
|
6054
6071
|
args: ['fullscreenImageTemplate']
|
|
6055
6072
|
}] } });
|
|
6056
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBSU4sU0FBUyxFQUVULFlBQVksRUFFWixZQUFZLEVBTVosdUJBQXVCLEVBRXZCLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFVTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUdyRSxPQUFPLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQXlCbkQsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUMxQixpQ0FBYSxDQUFBO0lBQ2IsOENBQTBCLENBQUE7SUFDMUIsOENBQTBCLENBQUE7SUFDMUIsaURBQTZCLENBQUE7SUFDN0IsMENBQXNCLENBQUE7SUFDdEIsMENBQXNCLENBQUE7SUFDdEIsaURBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQVJXLGdCQUFn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MUMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXFCbkQsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE2RmQsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQTZPQSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0UsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUV2QixvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUdqQyxvQkFBb0I7c0JBRG5CLFNBQVM7dUJBQUMsc0JBQXNCO2dCQWk2Qkksc0JBQXNCO3NCQUExRCxTQUFTO3VCQUFDLHdCQUF3QjtnQkFDRSxzQkFBc0I7c0JBQTFELFNBQVM7dUJBQUMsd0JBQXdCO2dCQXFnQk4sY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBMGlEM0IsU0FBUztzQkFEUixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVSdEMsT0FBTztzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXlKMUMsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBOGJjLHVCQUF1QjtzQkFBNUQsU0FBUzt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgTmdab25lLFxuICBSZW5kZXJlcjIsXG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgVGVtcGxhdGVSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5qZWN0LFxuICBJbmplY3RvclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNwbGl0Q29sdW1uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zcGxpdC1jb2x1bW5zLnNlcnZpY2UnO1xuaW1wb3J0IHsgIFJvd0FjdGlvblNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3Jvdy1hY3Rpb24uc2VydmljZSdcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBDZGtEcmFnLFxuICBDZGtEcmFnRHJvcCxcbiAgQ2RrRHJhZ0VuZCxcbiAgQ2RrRHJhZ0VudGVyLFxuICBDZGtEcmFnRXhpdCxcbiAgQ2RrRHJhZ01vdmUsXG4gIENka0RyYWdTb3J0RXZlbnQsXG4gIENka0RyYWdTdGFydCxcbiAgRHJhZ0Ryb3AsXG4gIG1vdmVJdGVtSW5BcnJheSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICB0cmlnZ2VyLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIGFuaW1hdGUsXG4gIHF1ZXJ5LFxuICBzdGFnZ2VyLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENka0Ryb3BMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBTVEFUVVNFU19CQURHRV9NQVAgfSBmcm9tICcuL3N0YXR1c2VzJztcbmltcG9ydCB7IENvcHlTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvcHktc2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2VsbEhvc3REaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NlbGxIb3N0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtYXRDdXJyZW5jeVBpcGUgfSBmcm9tICcuLi9waXBlcy9mb3JtYXQtY3VycmVuY3kucGlwZSc7XG5pbXBvcnQgJ2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzJztcblxuaW50ZXJmYWNlIENlbGxQb3NpdGlvbiB7XG4gIHJvd0luZGV4OiBudW1iZXI7XG4gIGNvbEluZGV4OiBudW1iZXI7XG4gIHN1YkNvbEluZGV4OiBudW1iZXI7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFHcmlkQ29uZmlnIHtcbiAgZm9udEZhaW1seTogc3RyaW5nO1xuICBib2R5VGV4dEZvbnRzU2l6ZTogbnVtYmVyO1xuICBoZWFkZXJUZXh0Rm9udHNTaXplOiBudW1iZXI7XG4gIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgc2hvd1ZlcnRpY2FsQm9yZGVyOiBib29sZWFuO1xuICBzZWxlY3RlZFRhYmxlTGF5b3V0OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICBnbG9iYWxTZWFyY2g6IHN0cmluZztcbiAgZmlsdGVyTmFtZXM6IHN0cmluZztcbiAgdG90YWxDb3VudDogbnVtYmVyO1xuICByb3dTaGFkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgYWN0aXZlRmlsdGVyczogYm9vbGVhbjtcbn1cblxuXG5leHBvcnQgZW51bSBSb3dBbmltYXRpb25UeXBlIHtcbiAgTm9uZSA9ICdub25lJyxcbiAgU3ByZWFkID0gJ3NwcmVhZEFuaW1hdGlvbicsXG4gIEJvdW5jZSA9ICdib3VuY2VBbmltYXRpb24nLFxuICBTbGlkZVVwID0gJ3NsaWRlVXBGcm9tQm90dG9tJyxcbiAgRmxpcCA9ICdmbGlwQW5pbWF0aW9uJyxcbiAgU2tldyA9ICdza2V3QW5pbWF0aW9uJyxcbiAgU2xpZGVSaWdodCA9ICdzbGlkZUZyb21SaWdodCcsXG59XG5cblxuZXhwb3J0IGNvbnN0IHNvcnRpbmdBbmltYXRpb24gPSB0cmlnZ2VyKCdsaXN0U29ydCcsIFtcbiAgdHJhbnNpdGlvbignKiA9PiAqJywgW1xuICAgIC8vIFF1ZXJ5IGFsbCBlbGVtZW50cyBlbnRlcmluZyBvciBsZWF2aW5nXG4gICAgcXVlcnkoJzplbnRlciwgOmxlYXZlJywgc3R5bGUoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgd2lkdGg6ICcxMDAlJyB9KSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgIC8vIEFuaW1hdGUgbGVhdmluZyBlbGVtZW50cyB1cHdhcmQgd2l0aCBmYWRlIG91dFxuICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMHB4KScsIG9wYWNpdHk6IDAgfSkpXG4gICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgIC8vIFN0YWdnZXIgdGhlIGVudGVyaW5nIGVsZW1lbnRzIGZvciBhIHNtb290aGVyIGVmZmVjdFxuICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMjBweCknLCBvcGFjaXR5OiAwIH0pLFxuICAgICAgc3RhZ2dlcig1MCwgW1xuICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6IDEgfSkpXG4gICAgICBdKVxuICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgXSlcbl0pO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2FjY29yZGlvblRvZ2dsZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBvdmVyZmxvdzogJ3Vuc2V0JyB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicsIG92ZXJmbG93OiAndW5zZXQnIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA8PT4gZXhwYW5kZWQnLCBhbmltYXRlKCczMDBtcyBlYXNlLWluJykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3NsaWRlVG9nZ2xlJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzBweCcsIG9wYWNpdHk6IDAsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IGhlaWdodDogJyonLCBvcGFjaXR5OiAxIH0pKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnKicsIG9wYWNpdHk6IDEsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4Jywgb3BhY2l0eTogMCB9KSlcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignc2xpZGVVcCcsIFtcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMCUpJywgb3BhY2l0eTogMCB9KSksXG4gICAgICBzdGF0ZSgnKicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6IDEgfSkpLFxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnKSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBhbmltYXRlKCczMDBtcyBlYXNlLWluJykpLFxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3Jvd0R5bmFtaWMnLCBbXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQUkVBRCAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBzcHJlYWRBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZVgoMC43KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMzUwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlWCgxKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig0MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMjIwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGVYKDAuNyknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEJPVU5DRSAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBib3VuY2VBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0xMHB4KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig0NSwgW1xuICAgICAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgICAgJzUwMG1zIGN1YmljLWJlemllciguNjgsLTAuNTUsLjI3LDEuNTUpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyMDBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBORVcgMTogRkxJUCAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBmbGlwQW5pbWF0aW9uJywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAncm90YXRlWCgtODBkZWcpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDcwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCc0NTBtcyBlYXNlLW91dCcsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAncm90YXRlWCgwKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig1MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAncm90YXRlWCg4MGRlZyknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIE5FVyAyOiBTS0VXIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNrZXdBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdza2V3WSg2ZGVnKSB0cmFuc2xhdGVZKDhweCknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNjAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzMyMG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdza2V3WSgwZGVnKSB0cmFuc2xhdGVZKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyMjBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdza2V3WSgtNmRlZykgdHJhbnNsYXRlWSgtOHB4KScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gc2xpZGVVcEZyb21Cb3R0b20nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwMHZoKScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnNTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNsaWRlRnJvbVJpZ2h0JywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDB2dyknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNjAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzUwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDUwcHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG5cblxuICAgIF0pXG5cblxuICBdLFxuXG59KVxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQge1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuICAvLyAqKioqKioqKioqICBJbnB1dCBHb2VzIEhlcmUgKioqKioqKioqKiogLy9cbiAgLy8gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cbiAgLy8gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cblxuXG4gIEBJbnB1dCgpIHJvd0FuaW1hdGlvbjogUm93QW5pbWF0aW9uVHlwZSA9IFJvd0FuaW1hdGlvblR5cGUuTm9uZTtcblxuICAvLyBQYWdpbmF0aW9uIENvbmZpZyBTdG9yZSBIZXJlXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25Db25maWc6IGFueSA9IG51bGw7XG5cbiAgLy8gVGhlIGRhdGFzZXQgc3RvcmUgaGVyZTtcbiAgQElucHV0KCkgZGF0YVNldDogYW55W10gPSBbXTtcblxuICAvLyBUaGUgY29sdW1ucyBTdG9yZSBIZXJlXG4gIEBJbnB1dCgpIGNvbHVtbnM6IGFueVtdID0gW107XG5cbiAgLy8gUm93IEhlaWdodDtcbiAgQElucHV0KCkgcm93SGVpZ2h0OiBudW1iZXIgPSA0NDtcblxuICAvLyBIZWFkZXIgUm93IEhlaWdodDtcbiAgQElucHV0KCkgaGVhZGVyUm93SGVpZ2h0OiBudW1iZXIgPSA1MDtcblxuICAvLyBTaG93IFZlcnRpY2FsIEJvcmRlcnM7XG4gIEBJbnB1dCgpIHNob3dWZXJ0aWNhbEJvcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEV2ZW4gUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBldmVuUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG5cbiAgLy8gRXZlbiBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjJmMmYyJztcblxuICAvLyBIZWFkZXIgUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZjZmOGZmJztcblxuICAvLyBIZWFkZXIgUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBjaGVja2JveGVzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gU2hvdyBDb2x1bW5zIEdyb3VwaW5nO1xuICBASW5wdXQoKSBzaG93Q29sdW1uc0dyb3VwaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gUm93IEhvdmVyZWQgQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgcm93SG92ZXJDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3JnYmEoMCwgMTIzLCAyNTUsIDAuMSknO1xuXG4gIC8vIExlZnQgUGlubmVkQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgbGVmdFBpbm5lZEJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIEJvZHkgQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgYm9keUJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIFJpZ2h0IFBpbm5lZCBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSByaWdodFBpbm5lZEJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIFNpZGUgTWVudSBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSBzaWRlbWVudUJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZmYnO1xuXG4gIC8vIEJvZHkgdGV4dCBjb2xvcjtcbiAgQElucHV0KCkgYm9keVRleHRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyMwYzExMmInO1xuXG4gIC8vIEhlYWRlciB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBoZWFkZXJUZXh0Q29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjMmExZjczJztcblxuICAvLyBIZWFkZXIgdGV4dCBjb2xvcjtcbiAgQElucHV0KCkgY2hlY2tib3hlc0NvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnIzJhMWY3Myc7XG5cbiAgLy8gSGVhZGVyIHRleHQgc2l6ZTtcbiAgQElucHV0KCkgaGVhZGVyVGV4dEZvbnRzU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gMTQ7XG5cbiAgLy8gQm9keSB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBib2R5VGV4dEZvbnRzU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gMTQ7XG5cbiAgLy8gSGVhZGVyIGZvbnQgd2VpZ2h0O1xuICBASW5wdXQoKSBoZWFkZXJGb250V2VpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQgPSA1MDA7XG5cbiAgLy8gQm9keSBGb250IFdlaWdodDtcbiAgQElucHV0KCkgYm9keUZvbnRXZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IDQwMDtcblxuICAvLyBDaGVja2VkIFJvdyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBjaGVja2VkUm93QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnYWxpY2VibHVlJztcblxuICAvLyBkcm9wZG93bnMgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgZHJvcGRvd25zQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmOCc7XG5cblxuICBASW5wdXQoKSBmb290ZXJSb3dCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuXG4gIC8vIEZvb3RlciByb3cgSGVpZ2h0O1xuICBASW5wdXQoKSBmb290ZXJSb3dIZWlnaHQ6IG51bWJlciA9IDQ2O1xuXG4gIC8vIEZvb3RlciByb3cgSGVpZ2h0O1xuICBASW5wdXQoKSB0b3BHcm91cGVkQmFkZ2VzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcblxuICAvLyBTaG93IFJvdyB3aXNlIGdyb3VwaW5nO1xuICBASW5wdXQoKSBzaG93Um93c0dyb3VwaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdyBSb3cgd2lzZSBncm91cGluZztcbiAgQElucHV0KCkgc2hvd0ZpbHRlclJvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8vIFNob3cgUm93IHdpc2UgZ3JvdXBpbmc7XG4gIEBJbnB1dCgpIGZvbnRGYWltbHk6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdzYW5zLXNlcmlmJztcblxuICAvLyBTaG93IFNpZGVDb2x1bW47XG4gIEBJbnB1dCgpIHNob3dTaWRlTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZvb3RlciBQYWRkaW5nXG4gIEBJbnB1dCgpIGZvb3RlclBhZGRpbmc6IG51bWJlciA9IDNcblxuXG4gIC8vIEZvb3RlciBQYWRkaW5nXG4gIEBJbnB1dCgpIHRvcEZpbHRlclJvd0hlaWdodDogbnVtYmVyID0gNTA7XG5cbiAgLy8gU2hvdyBSb3dzIHNoYWRpbmdcbiAgQElucHV0KCkgcm93U2hhZGluZ0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTaG93IFJvd3Mgc2hhZGluZ1xuICBASW5wdXQoKSBzaG93U2VyaWFsTnVtYmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2luZ2xlIFNwYSBVcmwgQXR0YWNoIHRvIGljb25zXG4gIEBJbnB1dCgpIHNpbmdsZVNwYUFzc2V0c1BhdGg6IHN0cmluZyA9ICdhc3NldHMvJztcblxuXG4gIC8vIEFwcGxpZWQgRmlsdGVyc1xuICBASW5wdXQoKSBmaWx0ZXJzQ29uZmlnOiBhbnlbXSA9IFtdO1xuXG5cbiAgLy8gQXBwbGllZCBGaWx0ZXJzXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL1ZlcnRpY2FsIFNjcm9sbGJhciBzdHlsZVxuICBASW5wdXQoKSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoOiAnYXV0bycgfCAndGhpbicgPSAnYXV0byc7XG5cbiAgLy9Ib3JpemludGFsIFNjcm9sbGJhciBzdHlsZVxuICBASW5wdXQoKSBob3JpemludGFsU2Nyb2xsYmFyV2lkdGg6ICdhdXRvJyB8ICd0aGluJyA9ICdhdXRvJztcblxuICAvLyBTaG93IENlbGwgZGV0YWlscyBib3hcbiAgQElucHV0KCkgc2hvd0NlbGxEZXRhaWxzQm94OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9EYXRlIGZvcm1hdFxuXG4gIEBJbnB1dCgpIGRhdGVGb3JtYXQ6IHN0cmluZyA9ICcnXG5cbiAgLy9EYXRlIGZvcm1hdFxuICBASW5wdXQoKSB0YWJsZVNlYXJjaDogc3RyaW5nID0gJyc7XG5cblxuICAvL0RhdGUgZm9ybWF0XG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gWydlZGl0JywgJ2RlbGV0ZSddO1xuXG5cbiAgLy8gVGFibGUgQ29uZmlnIGZvciBwYWdpbmF0aW9ucyBpcyBoZXJlXG4gIEBJbnB1dCgpIGNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpIHNlbGVjdGVkVGFiOiBzdHJpbmcgPSAnJztcblxuICAvLyBTZWxlY3Rpb24gdGFzayBiYXJcbiAgQElucHV0KCkgc2hvd1Rhc2tiYXIgPSBmYWxzZVxuXG4gIC8vIFRhYmxlIE5hbWUgZm9yIHN0YXRlIG1hbmFnZVxuICBASW5wdXQoKSB0YWJsZU5hbWUgPSB0cnVlXG5cblxuICAvLyBMaXN0aW5nIHR5cGVcbiAgQElucHV0KCkgbGlzdGluZ1R5cGU6IHN0cmluZyB8IGJvb2xlYW4gPSAnJztcblxuICAvLyBMaXN0aW5nIHR5cGVcblxuICBASW5wdXQoKSBjaGVja2JveFN0YXRlOiB7IHJlc2V0OiBib29sZWFuIH0gPSB7XG4gICAgcmVzZXQ6IHRydWVcbiAgfVxuXG4gIC8vIFRhc2tiYXIgYWN0aW9uc1xuICBASW5wdXQoKSB0YXNrYmFyQWN0aW9uczogYW55W10gPSBbXVxuXG5cbiAgLy8gU29ydGluZyBDb25maWcgdG8gc2hvdyBzb3J0IGljb25zXG4gIEBJbnB1dCgpIHNvcnRpbmdDb25maWc6IHsgZmllbGQ6IHN0cmluZywgb3JkZXJfYnk6IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG5cblxuICBASW5wdXQoKSB0YWJsZUZpbHRlclZpZXdJZDogYW55ID0gJyc7XG5cblxuICBASW5wdXQoKSBzZWxlY3RlZFRhYmxlTGF5b3V0OiBhbnkgPSAnbWVkaXVtJ1xuXG4gIEBJbnB1dCgpIGNsb3NlRHJvcGRvd246IHsgcHJlc2V0OiB7IGNsb3NlZDogYm9vbGVhbiwgbG9hZGluZzogYm9vbGVhbiB9IH0gPSB7IHByZXNldDogeyBjbG9zZWQ6IGZhbHNlLCBsb2FkaW5nOiBmYWxzZSB9IH07XG5cbiAgLy8gVGFibGUgVmlld1xuXG4gIC8vIEdsb2JhbFNlYXJjaFxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcblxuICAvLyBOZXN0ZWQgVGFibGUgUm93IEZvbnRzaXplXG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlcm93Rm9udHNpemUgPSAxNDtcblxuICAvLyBOZXN0ZWQgdGFibGUgcm93IEhlYWRlciByb3cgSGVpZ2h0XG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlSGVhZGVyUm93SGVpZ2h0ID0gNDA7XG5cbiAgLy8gTmVzdGVkIFRhYmxlIHJvdyBoZWlnaHRcbiAgQElucHV0KCkgbmVzdGVkVGFibGVyb3dIZWlnaHQgPSA0NTtcblxuICBASW5wdXQoKSBwYWNrYWdlRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dVbkxpbms6IGFueTtcblxuICBASW5wdXQoKSBncmlkVHlwZTogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgY3VycmVuY3lTeW1ib2w6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGN1cnJlbmN5Rm9ybWF0OiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBsZWZ0UGlubmVkQm94c2hhZG93OiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSByaWdodFBpbm5lZEJveHNoYWRvdzogc3RyaW5nID0gJyc7XG5cbiAgLy8gR2xvYmFsU2VhcmNoXG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyM4YWM1ZmYnO1xuXG4gIC8vIEdsb2JhbFNlYXJjaFxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmNmY4ZmYnO1xuXG5cbiAgQElucHV0KCkgbmVzdGVkVGFibGVSb3dCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZWFlYWVhJztcblxuICBASW5wdXQoKSB0YWJsZVZpZXc6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgYnV0dG9uczogeyBuYW1lOiBzdHJpbmc7IGlzX3Nob3dJY29uOiBib29sZWFuOyBpY29uOiBzdHJpbmcsIGhhc19wZXJtaXNzaW9uOiBib29sZWFuIH1bXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscyA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgc2hvd1RvdGFsQW1vdW50Um93ID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBlbmFibGVHbG9iYWxTZWFyY2ggPSB0cnVlO1xuXG5cbiAgQElucHV0KCkgdGFibGVUeXBlID0gJyc7XG5cblxuICBASW5wdXQoKSBlbmFibGVFeHBvcnQgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIHNob3dGdWxsU2NyZWVuQnV0dG9uID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBlbmFibGVDdXQgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIHRhYnM6IHN0cmluZ1tdID0gW107XG5cbiAgQElucHV0KCkgc2hvd0NoZWNrYm94ZXMgPSB0cnVlO1xuXG5cbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zID0gWzEwLCAyNSwgNTAsIDc1LCAxMDAsIDE1MCwgMjAwLCAyNTAsIDMwMCwgNTAwXTtcblxuXG4gIEBJbnB1dCgpIHJlc2V0QWxsRmlsdGVycyA9IHsgcmVzZXRBbGw6IGZhbHNlIH07XG5cbiAgQElucHV0KCkgZGVmYXVsdENvbmZpZzogRGF0YUdyaWRDb25maWcgfCBudWxsID0gbnVsbDtcblxuXG4gIEBJbnB1dCgpIGNvbHVtblRocmVlZG90c011bnVDb25maWcgPSB7XG4gICAgc2hvd1BpbmxlZnQ6IHRydWUsXG4gICAgc2hvd1BpbnJpZ2h0OiB0cnVlLFxuICAgIHNob3dBc2NlbmRpbmc6IHRydWUsXG4gICAgc2hvd0Rlc2NlbmRpbmc6IHRydWUsXG4gICAgc2hvd0ZpbHRlcjogdHJ1ZSxcbiAgICBzaG93Um93c0dyb3VwaW5nOiB0aGlzLnNob3dSb3dzR3JvdXBpbmcsXG4gICAgc2hvd0F1dG9zaXplQWxsQ29sdW1uczogdHJ1ZSxcbiAgICBzaG93QXV0b3NpemVUaGlzQ29sdW1uOiBmYWxzZSxcbiAgICBzaG93Q2hvc2VDb2x1bW5zOiBmYWxzZSxcbiAgICBzaG93UmVzZXRDb2x1bW5zOiBmYWxzZSxcbiAgfTtcblxuLy8gZm9yIGFjdGlvbiB2YWxpZGF0aW9uO1xuICBASW5wdXQoKSB2YWxpZGF0ZUljb24gOiBib29sZWFuID0gZmFsc2U7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBPdXQgUHV0IEV2ZW50c1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5cbiAgLy9DaGFuZ2UgVGFibGUgTGF5b3V0XG4gIEBWaWV3Q2hpbGRyZW4oQ2VsbEhvc3REaXJlY3RpdmUpIGNlbGxIb3N0cyE6IFF1ZXJ5TGlzdDxDZWxsSG9zdERpcmVjdGl2ZT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VMYXlvdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgcHVibGljIGN1c3RvbUNlbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8vIEZpbHRlciBBcHBseSBldmVudDtcbiAgQE91dHB1dCgpIHB1YmxpYyBmaWx0ZXJPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIGdlbmVyaWNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHRhYmxlUHJlc2V0Q29uZmlnOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgc29ydGluZ09yZGVyT3B0aW9uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXG5cblxuXG5cbiAgc3RvcmVQcmVzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNGdWxsU2NyZWVuID0gZmFsc2U7XG4gIGFjdGl2ZVRhYjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGdyb3VwZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBhY3RpdmVDb2w6IGFueSA9IG51bGw7XG4gIGFjdGl2ZUZpbHRlckNlbGw6IGFueSA9IG51bGw7XG4gIHNob3dBY3Rpb25zRHJvcERvd24gPSBmYWxzZTtcbiAgc2lkZU1lbnVWaXNpYmxlID0gZmFsc2U7XG4gIHBpdm90TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb2x1bW5TZWFyY2g6IHN0cmluZyA9ICcnO1xuICBleHBhbmRBbGxBY2NvcmRpYW5zID0gdHJ1ZTtcbiAgY3VycmVudE9wZW5lZFNpZGVNZW51ZTogJ2NvbHMnIHwgJ2ZpbHRycycgfCBudWxsID0gbnVsbDtcbiAgb3JpZ2luYWxDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBvcmlnaW5hbERhdGFTZXQ6IGFueVtdID0gW107XG4gIGFjdGl2ZVRvcEJ1dHRvbjogc3RyaW5nIHwgbnVsbCA9ICcnO1xuICBmaWx0ZXJDb2x1bW5zTGlzdDogYW55W10gPSBbXTtcbiAgZ3JvdXBCb3hQYWRkaW5nID0gMjAwO1xuICBwcmVzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJlc2V0RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHNlYXJjaFRleHRQcmVzZXRUYWJsZSA9ICcnO1xuICBhZGRGaWx0ZXJDb2x1bW5JbnB1dCA9ICcnO1xuICBzZWFyY2hJbkRyb3Bkb3duID0gJyc7XG4gIHByaXZhdGUgc2VjcmV0S2V5ID0gJ3RiLXN1cGVyLWFkbWluJ1xuICBhZGRGaWx0ZXJEcm9wZG93blNlYXJjaCA9ICcnXG4gIHRvcFNob3dIaWRlQ29sdW1ucyA9ICcnO1xuICBjaG9zZUNvbHVtbnNTZWFyY2ggPSAnJ1xuICBzaWRlTmVzdGVkRmlsdGVyU2VhcmNoID0gJydcbiAgZWRpdGluRHJvcGRvd25TZWFyY2ggPSAnJztcbiAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIGNvbmZpcm1EZWxldGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvcmlnaW5hbEFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGZvbnRGYW1pbGllczogc3RyaW5nW10gPSBbXG4gICAgLy8gQ29tbW9uIEV4Y2VsIGZvbnRzXG4gICAgJ0FyaWFsJyxcbiAgICAnQXJpYWwgQmxhY2snLFxuICAgICdCYWhuc2NocmlmdCcsXG4gICAgJ0NhbGlicmknLFxuICAgICdDYW1icmlhJyxcbiAgICAnQ2FtYnJpYSBNYXRoJyxcbiAgICAnbWF0aCcsXG4gICAgJ0NhbmRhcmEnLFxuICAgICdDb21pYyBTYW5zIE1TJyxcbiAgICAnQ29uc29sYXMnLFxuICAgICdDb25zdGFudGlhJyxcbiAgICAnQ29yYmVsJyxcbiAgICAnQ291cmllciBOZXcnLFxuICAgICdFYnJpbWEnLFxuICAgICdGcmFua2xpbiBHb3RoaWMgTWVkaXVtJyxcbiAgICAnR2FicmlvbGEnLFxuICAgICdHYWR1Z2knLFxuICAgICdHZW9yZ2lhJyxcbiAgICAnSW1wYWN0JyxcbiAgICAnSW5rIEZyZWUnLFxuICAgICdKYXZhbmVzZSBUZXh0JyxcbiAgICAnTGVlbGF3YWRlZSBVSScsXG4gICAgJ0x1Y2lkYSBDb25zb2xlJyxcbiAgICAnTHVjaWRhIFNhbnMgVW5pY29kZScsXG4gICAgJ01hbGd1biBHb3RoaWMnLFxuICAgICdNaWNyb3NvZnQgSGltYWxheWEnLFxuICAgICdNaWNyb3NvZnQgSmhlbmdIZWknLFxuICAgICdNaWNyb3NvZnQgTmV3IFRhaSBMdWUnLFxuICAgICdNaWNyb3NvZnQgUGhhZ3NQYScsXG4gICAgJ01pY3Jvc29mdCBTYW5zIFNlcmlmJyxcbiAgICAnTWljcm9zb2Z0IFRhaSBMZScsXG4gICAgJ01pY3Jvc29mdCBZYUhlaScsXG4gICAgJ01pY3Jvc29mdCBZaSBCYWl0aScsXG4gICAgJ01vbmdvbGlhbiBCYWl0aScsXG4gICAgJ01TIEdvdGhpYycsXG4gICAgJ01TIFBHb3RoaWMnLFxuICAgICdNUyBVSSBHb3RoaWMnLFxuICAgICdNViBCb2xpJyxcbiAgICAnTmlybWFsYSBVSScsXG4gICAgJ1BhbGF0aW5vIExpbm90eXBlJyxcbiAgICAnU2Vnb2UgUHJpbnQnLFxuICAgICdTZWdvZSBTY3JpcHQnLFxuICAgICdTZWdvZSBVSScsXG4gICAgJ1NlZ29lIFVJIEhpc3RvcmljJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLFxuICAgICdTZWdvZSBVSSBTeW1ib2wnLFxuICAgICdTaW1TdW4nLFxuICAgICdTaXRrYSBTbWFsbCcsXG4gICAgJ1N5bGZhZW4nLFxuICAgICdTeW1ib2wnLFxuICAgICdUYWhvbWEnLFxuICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICdUcmVidWNoZXQgTVMnLFxuICAgICdWZXJkYW5hJyxcbiAgICAnV2ViZGluZ3MnLFxuICAgICdXaW5nZGluZ3MnLFxuICAgICdZdSBHb3RoaWMnLFxuICAgICdzYW5zLXNlcmlmJyxcbiAgICAnc2VyaWYnLFxuICAgICdtb25vc3BhY2UnLFxuICAgICdJbnRlcidcbiAgXTtcblxuICBmb250U2l6ZXM6IHN0cmluZ1tdID0gW1xuICAgICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInLCAnMTQnLCAnMTYnLCAnMTgnLCAnMjAnLCAnMjQnXG4gIF07XG5cbiAgaGFzU2Nyb2xsID0gZmFsc2U7XG5cblxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb2x1bW5TZXJ2aWNlOiBTcGxpdENvbHVtbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBjb21tb25TZXZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjb3B5U2VydmljZTogQ29weVNlcnZpY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGZvcm1hdEN1cnJlbmN5OiBGb3JtYXRDdXJyZW5jeVBpcGUsXG4gICAgIHByaXZhdGUgYWN0aW9uVmFsaWRhdG9yIDogUm93QWN0aW9uU2VydmljZVxuXG4gICkgeyB9XG5cbiAgQFZpZXdDaGlsZCgnY2VsbFRleHQnLCB7IHN0YXRpYzogZmFsc2UgfSkgY2VsbFRleHQhOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ25lc3RlZEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBuZXN0ZWRIZWFkZXIhOiBFbGVtZW50UmVmO1xuICBcbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICB0aGlzLmNvbXB1dGVWaWV3cG9ydFJvd3MoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuIFxuICAgICAgaWYgKHRoaXMuY2VsbFRleHQpIHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5jZWxsVGV4dC5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiBcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnJlbmRlckN1c3RvbUNlbGxzKCk7XG4gICAgdGhpcy5idWlsZFBhZ2VTaXplS2V5TWFwKCk7XG4gICAgIH0sIDEwMDApO1xuIFxuICB9XG5cbiAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cbiAgY3JlYXRlQ2VsbEluamVjdG9yKHJvdzogYW55LCBjb2w6IGFueSk6IEluamVjdG9yIHtcbiAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6ICdyb3dEYXRhJywgdXNlVmFsdWU6IHJvdyB9LFxuICAgICAgICB7IHByb3ZpZGU6ICdjb2xEYXRhJywgdXNlVmFsdWU6IGNvbCB9XG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yXG4gICAgfSk7XG4gIH1cblxuXG4gIHByaXZhdGUgcmVuZGVyQ3VzdG9tQ2VsbHMoKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdHMgPSB0aGlzLmNlbGxIb3N0cy50b0FycmF5KCk7XG4gICAgbGV0IGhvc3RJbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnZpc2libGVSb3dzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgaG9zdCA9IGhvc3RzW2hvc3RJbmRleCsrXTtcbiAgICAgICAgaWYgKCFob3N0IHx8ICFjb2wuY2VsbFJlbmRlcmVyKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyID0gaG9zdC52aWV3Q29udGFpbmVyUmVmO1xuICAgICAgICB2aWV3Q29udGFpbmVyLmNsZWFyKCk7XG5cbiAgICAgICAgY29uc3QgY29tcFJlZiA9IHZpZXdDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbC5jZWxsUmVuZGVyZXIpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSxcbiAgICAgICAgICBhcGk6IHRoaXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKChjb21wUmVmLmluc3RhbmNlIGFzIGFueSkuZ3JpZEluaXQpIHtcbiAgICAgICAgICAoY29tcFJlZi5pbnN0YW5jZSBhcyBhbnkpLmdyaWRJbml0KHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gc2hvdWxkUmVzdG9yZVNjcm9sbCA9IGZhbHNlO1xuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICB0aGlzLmFkZFN0eWxlc1RvSW1hZ2VzKCk7XG4gICAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBpZiAoXG4gICAgICB0aGlzLnNob3VsZFJlc3RvcmVTY3JvbGwgJiZcbiAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHk/Lm5hdGl2ZUVsZW1lbnRcbiAgICApIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQ7XG4gICAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5zaG91bGRSZXN0b3JlU2Nyb2xsID0gZmFsc2U7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyAgaWYgKHRoaXMudGFicz8ubGVuZ3RoKSB7XG4gICAgLy8gICB0aGlzLmFjdGl2ZVRhYiA9IHRoaXMudGFic1swXTtcbiAgICAvLyB9XG4gICAgLy8gdGhpcy5hdXRvc2l6ZUFsbENvbHVtbnMoKTtcbiAgICBpZiAoIXRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlKSB7XG4gICAgICAvLyB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8oKTtcbiAgICB9XG5cbiAgICAvLyBjb25zdCB1c2VyID0gdGhpcy5nZXREZWNyeXB0KCd1c2VyJyk7XG4gICAgLy8gdGhpcy5jdXJyZW5jeUZvcm1hdCA9IHVzZXI/LmN1cnJlbmN5X2Zvcm1hdDtcbiAgICAvLyB0aGlzLmN1cnJlbmN5U3ltYm9sID0gdXNlcj8uY3VycmVuY3lfc3ltYm9sO1xuICAgIC8vIHRoaXMuZGF0ZUZvcm1hdCA9IHVzZXI/LmRhdGVfZm9ybWF0O1xuICAgIGlmICghdGhpcy5kYXRlRm9ybWF0KSB7XG4gICAgICBjb25zdCBzdG9yZWREYXRlRm9ybWF0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGVmb3JtYXQnKTtcbiAgICAgIGlmIChzdG9yZWREYXRlRm9ybWF0KSB7XG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCA9IHN0b3JlZERhdGVGb3JtYXQgPyBKU09OLnBhcnNlKHN0b3JlZERhdGVGb3JtYXQpIDogJ2RkL01NL3l5eXknO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5jdXJyZW5jeUZvcm1hdCkge1xuICAgICAgY29uc3Qgc3RvcmVkQ3VycmVuY3lGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVuY3lGb3JtYXQnKTtcbiAgICAgIGlmIChzdG9yZWRDdXJyZW5jeUZvcm1hdCkge1xuICAgICAgICB0aGlzLmN1cnJlbmN5Rm9ybWF0ID0gc3RvcmVkQ3VycmVuY3lGb3JtYXQgPyBKU09OLnBhcnNlKHN0b3JlZEN1cnJlbmN5Rm9ybWF0KSA6ICcxLDIzNCw1NjcuODknO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5jdXJyZW5jeVN5bWJvbCkge1xuICAgICAgY29uc3Qgc3RvcmVkQ3VycmVuY3lTeW1ib2wgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVuY3lTeW1ib2wnKTtcbiAgICAgIGlmIChzdG9yZWRDdXJyZW5jeVN5bWJvbCkge1xuICAgICAgICB0aGlzLmN1cnJlbmN5U3ltYm9sID0gc3RvcmVkQ3VycmVuY3lTeW1ib2wgPyBKU09OLnBhcnNlKHN0b3JlZEN1cnJlbmN5U3ltYm9sKSA6ICckJztcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIC8vIHByaXZhdGUgZ2V0RGVjcnlwdChrZXk6c3RyaW5nKXtcbiAgLy8gICAgIGNvbnN0IHZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KVxuICAvLyAgICAgdHJ5IHtcbiAgLy8gICAgICAgcmV0dXJuIEpTT04ucGFyc2UoQ3J5cHRvSlMuQUVTLmRlY3J5cHQodmFsdWUgYXMgc3RyaW5nLCB0aGlzLnNlY3JldEtleSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpKVxuICAvLyAgICAgfSBjYXRjaCAoZSkge1xuICAvLyAgICAgICByZXR1cm4gbnVsbDtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG5cbiAgZGF0YVNldExvYWRpbmcgPSBmYWxzZTtcbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyl7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSkge1xuICAgICAgYXdhaXQgdGhpcy5zZXRDb2x1bW5zQ29sdW1uRHJvcGRvd25WYWx1cygpO1xuXG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3RhYnMnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ3RhYnMnXSkge1xuICAgICAgICBjb25zdCBhbGxUYWJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYWN0aXZlVGFicycpIHx8ICd7fScpO1xuICAgICAgICAgbGV0IHNhdmVkVGFiIFxuICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA/ICggc2F2ZWRUYWIgPSB0aGlzLnNlbGVjdGVkVGFiICkgOiAoIHNhdmVkVGFiID0gYWxsVGFic1t0aGlzLnRhYmxlVHlwZV0pXG4gICAgICAgIC8vIGNvbnN0IHNhdmVkVGFiID0gYWxsVGFic1t0aGlzLnRhYmxlVHlwZV07XG4gICAgICAgIGlmICh0aGlzLnRhYnMuaW5jbHVkZXMoJ0N1cnJlbnQgUG9saWN5JykpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRoaXMudGFicz8uWzFdIHx8ICdDdXJyZW50IFBvbGljeSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSBzYXZlZFRhYiB8fCB0aGlzLnRhYnM/LlswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmICh0aGlzLnRhYmxlVHlwZSkge1xuICAgICAgICAvLyAgIHRoaXMuc2V0QWN0aXZlVGFiKHRoaXMuYWN0aXZlVGFiKTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZmlsdGVyc0NvbmZpZyddKSB7XG4gICAgICB0aGlzLmNoZWNrRmlsdGVyQ2hhbmdlc0VmZmVjdCgpO1xuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcm9wdGlvbkxpc3QoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddPy5jdXJyZW50VmFsdWU/Lmxlbmd0aCkge1xuXG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuXG4gICAgICB0aGlzLm9yaWdpbmFsQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAgIC4uLmNvbCxcbiAgICAgICAgcXVlcnk6IGNvbC5xdWVyeSA/IHsgLi4uY29sLnF1ZXJ5IH0gOiBudWxsLFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICAgIDogW10sXG4gICAgICB9KSk7XG5cblxuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgICB0aGlzLnNldFNlY3Rpb25zV2lkdGgoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snZGF0YVNldCddKSB7XG4gICAgICB0aGlzLmRhdGFTZXQgPSB0aGlzLmRhdGFTZXQ/Lm1hcCgocm93LCBpKSA9PiAoe1xuICAgICAgICAuLi5yb3csXG4gICAgICAgIF9fdmlydHVhbEluZGV4OiBpICsgMSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMub3JpZ2luYWxEYXRhU2V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuZGF0YVNldCk7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcHV0ZVZpZXdwb3J0Um93cygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgICAgaWYodGhpcy5jb21tb25TZXZpY2U/Lm1haW5Db250YWluZXJMZWZ0ID4gMjAwKVxuICAgICAgICAgIHRoaXMuc2hvdWxkUmVzdG9yZVNjcm9sbCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5jZW50ZXJQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdm9pZCB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIHRoaXMuZGF0YVNldExvYWRpbmcgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPVxuICAgICAgICAgICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0YVNldExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYXBwbHlSb3dzU2VsZWN0aW9uU3RhdGUoKTtcblxuICAgICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5mb3JFYWNoKGdyb3VwZWRDb2wgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0NvbHVtbkFzR3JvdXBlZCh0aGlzLmNvbHVtbnMsIGdyb3VwZWRDb2wuZmllbGQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5ncm91cEJveFBhZGRpbmcgPSB0aGlzLmNvbHVtbnNHcm91cGVkQm94Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2NoZWNrYm94U3RhdGUnXT8uY3VycmVudFZhbHVlPy5yZXNldCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0ZSh0aGlzLnRhYmxlVHlwZSk7XG5cbiAgICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgICBvYmo6IGlkcyxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRUeXBlOiAnb25TZWxlY3RSb3cnLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG5cbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2Nsb3NlRHJvcGRvd24nXSAmJiB0aGlzLmNsb3NlRHJvcGRvd24ucHJlc2V0LmNsb3NlZCkge1xuICAgICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSBudWxsO1xuICAgICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucHJlc2V0TmFtZSA9ICcnO1xuICAgIH1cblxuICAgIC8vIGlmIChjaGFuZ2VzWydvZGRSb3dzQmFja2dyb3VuZENvbG9yJ10pIHtcbiAgICAvLyAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSAhIXRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICAvLyB9XG5cbiAgICBpZiAoY2hhbmdlc1sncmVzZXRBbGxGaWx0ZXJzJ10gJiYgdGhpcy5yZXNldEFsbEZpbHRlcnMucmVzZXRBbGwpIHtcbiAgICAgIHRoaXMuY2xlYXJBbGxGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlVmlldyddKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgdmlld1ZhbHVlID0gdGhpcy50YWJsZVZpZXc7XG4gICAgICAgIGxldCB0ZW1wcm9yeVNlbGVjdGVkID0gQXJyYXkuaXNBcnJheSh2aWV3VmFsdWUpXG4gICAgICAgICAgPyB2aWV3VmFsdWUuZmluZChpdGVtID0+IGl0ZW0uaXNfdGVtcClcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgaWYgKCF0ZW1wcm9yeVNlbGVjdGVkKSB7XG4gICAgICAgICAgdGVtcHJvcnlTZWxlY3RlZCA9IEFycmF5LmlzQXJyYXkodmlld1ZhbHVlKVxuICAgICAgICAgICAgPyB2aWV3VmFsdWUuZmluZChpdGVtID0+IGl0ZW0uaXNfZGVmYXVsdClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlID0gdGVtcHJvcnlTZWxlY3RlZCB8fCBudWxsO1xuICAgICAgICB0aGlzLnByZXNldE5hbWUgPSB0ZW1wcm9yeVNlbGVjdGVkPy5uYW1lIHx8ICcnO1xuICAgICAgICB0aGlzLnN0b3JlUHJlc2V0TmFtZSA9IHRlbXByb3J5U2VsZWN0ZWQ/Lm5hbWUgfHwgJyc7XG4gICAgICAgIHRoaXMucHJlc2V0RmlsdGVyID0gdGVtcHJvcnlTZWxlY3RlZD8uYWN0aXZlRmlsdGVycyB8fCBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLnJvd1NoYWRpbmdFbmFibGVkO1xuICAgICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyO1xuICAgICAgICAgIHRoaXMuZm9udEZhaW1seSA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLmZvbnRGYWltbHk7XG4gICAgICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuaGVhZGVyVGV4dEZvbnRzU2l6ZTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0O1xuICAgICAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZTtcbiAgICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5nbG9iYWxTZWFyY2g7XG4gICAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCh0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQpO1xuICAgICAgICAgIHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvciA9IHRlbXByb3J5U2VsZWN0ZWQ/LmNvbmZpZz8ub2RkUm93c0JhY2tncm91bmRDb2xvciB8fCAnI2YxZjFmMSc7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZENvbHVtbnMgPSB0ZW1wcm9yeVNlbGVjdGVkPy5jb25maWc/Lmdyb3VwZWRDb2x1bW5zO1xuICAgICAgICAgIGlmKGdyb3VwZWRDb2x1bW5zPy5sZW5ndGgpe1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucyA9IHN0cnVjdHVyZWRDbG9uZShncm91cGVkQ29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMuZGF0YVNldCwgdGhpcy5ncm91cGVkQ29sdW1ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSAgZWxzZSBpZih0aGlzLmRlZmF1bHRDb25maWcpe1xuICAgICAgICAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSB0aGlzLmRlZmF1bHRDb25maWcucm93U2hhZGluZ0VuYWJsZWQgfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSB0aGlzLmRlZmF1bHRDb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZm9udEZhaW1seSA9IHRoaXMuZGVmYXVsdENvbmZpZy5mb250RmFpbWx5IHx8ICdJbnRlcic7XG4gICAgICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5kZWZhdWx0Q29uZmlnLmhlYWRlclRleHRGb250c1NpemUgfHwgMTQ7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gdGhpcy5kZWZhdWx0Q29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQgfHwgJ21lZGl1bSc7XG4gICAgICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRoaXMuZGVmYXVsdENvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNDtcbiAgICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSB0aGlzLmRlZmF1bHRDb25maWcuZ2xvYmFsU2VhcmNoO1xuICAgICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQodGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZvbnRGYWltbHkgPSAnSW50ZXInO1xuICAgICAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IDE0O1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9ICdtZWRpdW0nO1xuICAgICAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSAxNDtcbiAgICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8oKTtcbiAgICAgICAgICAgdGhpcy5wcmVzZXROYW1lID0gJydcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBpZihjaGFuZ2VzWydwYWdlU2l6ZU9wdGlvbnMnXSAmJiBjaGFuZ2VzWydwYWdlU2l6ZU9wdGlvbnMnXT8uY3VycmVudFZhbHVlKXtcbiAgICAgIHRoaXMuYnVpbGRQYWdlU2l6ZUtleU1hcCgpO1xuICAgIH1cblxuICB9XG5cblxuICBcblxuICBhc3luYyBzZXRDb2x1bW5zQ29sdW1uRHJvcGRvd25WYWx1cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29sdW1ucykgcmV0dXJuO1xuICAgIC8vIEp1c3QgcmVtb3ZlZCB0ZW1wb3JhcnkgZm9yIHN1cGVyIGFkbWluIHdpbGwgc2V0IGl0IGFnYWluXG4gICAgLy8gaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgLy8gICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcihjID0+IGM/LmZpZWxkPy50cmltKCkgIT09ICdpc19kZWxldGVkJylcbiAgICAvLyB9XG4gICAgdGhpcy5jb2x1bW5zID0gYXdhaXQgdGhpcy5jb21tb25TZXZpY2UuY29weURyb3Bkb3duRGF0YVJlY3Vyc2l2ZWx5KHRoaXMuY29sdW1ucyk7XG4gIH1cblxuXG5cblxuICBhcHBseVJvd3NTZWxlY3Rpb25TdGF0ZSgpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkc0Zyb21TdGF0ZSA9IHRoaXMucmVzdG9yZVNlbGVjdGlvbih0aGlzLnRhYmxlVHlwZSk7XG4gICAgaWYgKHNlbGVjdGVkSWRzRnJvbVN0YXRlLnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBpZHMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgICAgb2JqOiBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRUeXBlOiBcIm9uU2VsZWN0Um93XCIsXG4gICAgICB9XG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGlvblN0YXRlKHRhYmxlVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YXRhYmxlU2VsZWN0aW9ucycpIHx8ICd7XCJzZWxlY3RlZFJvd3NcIjoge319Jyk7XG4gICAgaWYgKHN0b3JlZC5zZWxlY3RlZFJvd3MgJiYgc3RvcmVkLnNlbGVjdGVkUm93c1t0YWJsZVR5cGVdKSB7XG4gICAgICBkZWxldGUgc3RvcmVkLnNlbGVjdGVkUm93c1t0YWJsZVR5cGVdO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICdkYXRhdGFibGVTZWxlY3Rpb25zJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHN0b3JlZClcbiAgICApO1xuICB9XG5cblxuXG4gIGFzeW5jIGFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpIHtcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IGF3YWl0IHRoaXMuY29tbW9uU2V2aWNlLmFwcGx5RmlsdGVyc1RvQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgdGhpcy5jb2x1bW5zID0gWy4uLnVwZGF0ZWRDb2x1bW5zXTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgbGVmdFBpbm5lZENvbHVtbnM6IGFueVtdID0gW107XG4gIGNlbnRlckNvbHVtbnM6IGFueVtdID0gW107XG4gIHJpZ2h0UGlubmVkQ29sdW1uczogYW55W10gPSBbXTtcblxuICBwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnM6IGFueVtdID0gW107XG4gIHByZXZpZXdDZW50ZXJDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuXG4gIC8vIE1haW4gQ29udGFpbmVyIFRlbXBsYXRlIFJlZmVyZW5jZXNcbiAgQFZpZXdDaGlsZCgnZGF0YUdyaWRDb250YWluZXInKVxuICBkYXRhR3JpZENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0YXNrTWFuYWdlbWVudENvbnRhaW5lcicpXG4gIHRhc2tNYW5hZ2VtZW50Q29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ25lc3RlZFRhYmxlQ29udGFpbmVyJylcbiAgbmVzdGVkVGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyBCb2R5IFRlbXBsYXRlIFJlZmVyZW5jZXNcbiAgQFZpZXdDaGlsZCgnbGVmdFBpbm5lZEJvZHknKVxuICBsZWZ0UGlubmVkQm9keSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjZW50ZXJQaW5uZWRCb2R5JylcbiAgY2VudGVyUGlubmVkQm9keSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdyaWdodFBpbm5lZEJvZHknKVxuICByaWdodFBpbm5lZEJvZHkhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyBIZWFkZXJzIFRlbXBsYXRlIFJlZmVyZW5jZXNcbiAgQFZpZXdDaGlsZCgnbGVmdFBpbm5lZEhlYWRlcicpXG4gIGxlZnRQaW5uZWRIZWFkZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2VudGVyUGlubmVkSGVhZGVyJylcbiAgY2VudGVyUGlubmVkSGVhZGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0UGlubmVkSGVhZGVyJylcbiAgcmlnaHRQaW5uZWRIZWFkZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZ2xvYmFsU2VhcmNoSW5wdXQnKVxuICBnbG9iYWxTZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnY29sdW1uc0dyb3VwZWRCb3gnKVxuICBjb2x1bW5zR3JvdXBlZEJveCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8vIENlbnRlciBGYWtlIHNjcm9sbGJhcmRcbiAgQFZpZXdDaGlsZCgnY2VudGVyRmFrZVNjcm9sbGJhcicpXG4gIGNlbnRlckZha2VTY3JvbGxiYXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgYXN5bmMgdXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKGNvbHVtbnM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb250YWluZXIpIHJldHVybjtcbiAgICBsZXQgY29udGFpbmVyV2lkdGggPVxuICAgICAgdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMDtcbiAgICAvLyBXcmFwIGluIGEgcHJvbWlzZSBzbyB3ZSBjYW4gYXdhaXRcbiAgICBjb25zdCB7IGxlZnQsIGNlbnRlciwgcmlnaHQgfTogYW55ID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBwcmVwYXJlZCA9IHRoaXMuY29sdW1uU2VydmljZS5wcmVwYXJlQ29sdW1ucyhcbiAgICAgICAgY29sdW1ucyA/IGNvbHVtbnMgOiB0aGlzLmNvbHVtbnMsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgICApO1xuICAgICAgcmVzb2x2ZShwcmVwYXJlZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmxlZnRQaW5uZWRDb2x1bW5zID0gbGVmdDtcbiAgICB0aGlzLmNlbnRlckNvbHVtbnMgPSBjZW50ZXI7XG4gICAgdGhpcy5yaWdodFBpbm5lZENvbHVtbnMgPSByaWdodDtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMCkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hQcmV2aWV3Q29sdW1ucyhjb2x1bW5zOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuZGF0YUdyaWRDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgIC8vIFdyYXAgcHJlcGFyZUNvbHVtbnMgaW4gYSBQcm9taXNlIHRvIG1ha2UgaXQgYXdhaXRhYmxlXG4gICAgY29uc3QgeyBsZWZ0LCBjZW50ZXIsIHJpZ2h0IH06IGFueSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgcHJlcGFyZWQgPSB0aGlzLmNvbHVtblNlcnZpY2UucHJlcGFyZUNvbHVtbnMoXG4gICAgICAgIGNvbHVtbnMgPyBjb2x1bW5zIDogdGhpcy5jb2x1bW5zLFxuICAgICAgICBjb250YWluZXJXaWR0aFxuICAgICAgKTtcbiAgICAgIHJlc29sdmUocHJlcGFyZWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMgPSBsZWZ0O1xuICAgIHRoaXMucHJldmlld0NlbnRlckNvbHVtbnMgPSBjZW50ZXI7XG4gICAgdGhpcy5wcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zID0gcmlnaHQ7XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDEwKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBhc3luYyBTZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCkge1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlTGVhZkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCB2aXNpYmxlQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG5cbiAgICBpZiAodmlzaWJsZUNvdW50ID09PSAwKSByZXR1cm47XG5cbiAgICBsZXQgY29udGFpbmVyV2lkdGggPVxuICAgICAgdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMDtcbiAgICBpZiAodGhpcy5zaG93U2VyaWFsTnVtYmVyKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBpZiAodGhpcy5zaG93U2lkZU1lbnUpIGNvbnRhaW5lcldpZHRoIC09IDI5O1xuICAgIC8vIGlmICh0aGlzLmdyaWRUeXBlID09ICdBc3NldHMnIHx8IHRoaXMuZ3JpZFR5cGUgPT0gJ1Rhc2tzJykgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgLy8gY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgLy8gaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgLy8gaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICAvLyBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpIGNvbnRhaW5lcldpZHRoIC09IDMwO1xuICAgIC8vIGNvbnRhaW5lcldpZHRoIC09IDU7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5TZXJ2aWNlLmFzc2lnbkRlZmF1bHRXaWR0aHMoXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICBjb250YWluZXJXaWR0aFxuICAgICk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIHNldFNlY3Rpb25zV2lkdGgoKSB7XG4gICAgY29uc3QgbGVmdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sZWZ0LXBpbm5lZC1ib2R5JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgY2VudGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuY2VudGVyLXNjcm9sbGFibGUtYm9keSdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHJpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnJpZ2h0LXBpbm5lZC1ib2R5JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKGxlZnQpIHtcbiAgICAgIGxlZnQuc3R5bGUubWluV2lkdGggPSBgJHt0aGlzLmxlZnRQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH1gO1xuICAgIH1cbiAgICBpZiAoY2VudGVyKSB7XG4gICAgICBsZWZ0LnN0eWxlLm1pbldpZHRoID0gYCR7dGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH1gO1xuICAgIH1cbiAgICBpZiAocmlnaHQpIHtcbiAgICAgIGxlZnQuc3R5bGUubWluV2lkdGggPSBgJHt0aGlzLnJpZ2h0UGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh9YDtcbiAgICB9XG4gIH1cblxuICAvLyBvbkNlbnRlckJvZHlTY3JvbGwoKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAvLyAgIGNvbnN0IHNjcm9sbExlZnQgPSB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gIC8vICAgLy8gU3luYyB2ZXJ0aWNhbCBzY3JvbGwgd2l0aCBsZWZ0ICYgcmlnaHQgcGlubmVkIGJvZGllc1xuICAvLyAgIHRoaXMubGVmdFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5yaWdodFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG5cbiAgLy8gICAvLyBTeW5jIGhvcml6b250YWwgc2Nyb2xsIHdpdGggY2VudGVyIGhlYWRlclxuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gIC8vICAgdGhpcy5jZW50ZXJGYWtlU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gIC8vIH1cblxuICAvLyBvbkxlZnRCb2R5U2Nyb2xsKCk6IHZvaWQge1xuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMubGVmdFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMucmlnaHRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyB9XG4gIC8vIG9uUmlnaHRCb2R5U2Nyb2xsKCk6IHZvaWQge1xuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMucmlnaHRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLmxlZnRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyB9XG5cbiAgZmFrZVNjcm9sbGJhclNjcm9sbExlZnQgPSAwO1xuICAvLyBvbkZha2VTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gIC8vICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAvLyAgIHRoaXMuZmFrZVNjcm9sbGJhclNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gIC8vIH1cblxuXG5cblxuICAvLyBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgZmllbGQ6IHN0cmluZyk6IGFueSB7XG4gIC8vICAgcmV0dXJuIGZpZWxkPy5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBvYmopO1xuICAvLyB9XG5nZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgZmllbGQ6IHN0cmluZyk6IGFueSB7XG4gIGlmICghb2JqIHx8ICFmaWVsZCkgcmV0dXJuIG51bGw7XG4gIFxuICAvLyBHZXQgdGhlIHJhdyB2YWx1ZVxuICBjb25zdCB2YWx1ZSA9IGZpZWxkLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIG9iaik7XG4gIFxuICAvLyDinIUgSWYgaXQncyBhIHN0YXR1cyBmaWVsZCwgY2FwaXRhbGl6ZSB0aGUgdmFsdWVcbiAgaWYgKHRoaXMuaXNTdGF0dXNGaWVsZChmaWVsZCkgJiYgdmFsdWUpIHtcbiAgICAvLyBIYW5kbGUgb2JqZWN0IHdpdGggdmFsdWUvbmFtZSBwcm9wZXJ0aWVzXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlID8gdGhpcy5jYXBpdGFsaXplU3RhdHVzKHZhbHVlLnZhbHVlKSA6IHZhbHVlLnZhbHVlLFxuICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lID8gdGhpcy5jYXBpdGFsaXplU3RhdHVzKHZhbHVlLm5hbWUpIDogdmFsdWUubmFtZVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIHBsYWluIHN0cmluZy9udW1iZXIgdmFsdWVzXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMuY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gdmFsdWU7XG59XG4gIGlzTmVzdGVkVmFsdWVBcnJheShvYmo6IGFueSwgZmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghb2JqIHx8ICFmaWVsZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHZhbHVlID0gZmllbGRcbiAgICAgIC5zcGxpdCgnLicpXG4gICAgICAucmVkdWNlKChhY2MsIHBhcnQpID0+IChhY2MgJiYgYWNjW3BhcnRdICE9PSB1bmRlZmluZWQgPyBhY2NbcGFydF0gOiB1bmRlZmluZWQpLCBvYmopO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfVxuXG4gIG9uUmVzaXplR3JvdXAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbDogYW55LCBpc1JpZ2h0UGlubmVkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBzdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY29sLmNoaWxkcmVuIHx8IFtdO1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCBjaGlsZFdpZHRoczogeyBmaWVsZDogc3RyaW5nOyB3aWR0aDogbnVtYmVyIH1bXSA9IGNoaWxkcmVuLm1hcChcbiAgICAgIChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgW2ZpZWxkPVwiJHtjaGlsZC5maWVsZH1cIl1gXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmllbGQ6IGNoaWxkLmZpZWxkLFxuICAgICAgICAgIHdpZHRoOiBlbD8ub2Zmc2V0V2lkdGggfHwgMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdG90YWxJbml0aWFsV2lkdGggPSBjaGlsZFdpZHRocy5yZWR1Y2UoXG4gICAgICAoc3VtLCBjb2wpID0+IHN1bSArIGNvbC53aWR0aCxcbiAgICAgIDBcbiAgICApO1xuXG4gICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBsZXQgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XG5cbiAgICAgIGlmIChpc1JpZ2h0UGlubmVkKSB7XG4gICAgICAgIGRlbHRhWCA9IC1kZWx0YVg7XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXZlbnQgc2hyaW5raW5nIHRvbyBzbWFsbFxuICAgICAgaWYgKHRvdGFsSW5pdGlhbFdpZHRoICsgZGVsdGFYIDwgY2hpbGRyZW4ubGVuZ3RoICogODApIHJldHVybjtcblxuICAgICAgbGV0IHRvdGFsTmV3V2lkdGggPSAwO1xuXG4gICAgICBjaGlsZFdpZHRocy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCByYXRpbyA9IGNoaWxkLndpZHRoIC8gdG90YWxJbml0aWFsV2lkdGg7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoY2hpbGQud2lkdGggKyBkZWx0YVggKiByYXRpbywgODApO1xuICAgICAgICB0b3RhbE5ld1dpZHRoICs9IG5ld1dpZHRoO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtjaGlsZC5maWVsZH1cIl1gKTtcbiAgICAgICAgY2hpbGRFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBlbEh0bWwgPSBlbCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBlbEh0bWwuc3R5bGUubWluV2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgICAgZWxIdG1sLnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGNoaWxkLmZpZWxkLCBuZXdXaWR0aCk7XG4gICAgICB9KTtcblxuICAgICAgLy8g4pyFIFVwZGF0ZSBncm91cCBoZWFkZXIgd2lkdGggaW4gRE9NXG4gICAgICBjb25zdCBncm91cEhlYWRlckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYFtncm91cD1cIiR7Y29sLmhlYWRlcn1cIl1gXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGdyb3VwSGVhZGVyRWwpIHtcbiAgICAgICAgZ3JvdXBIZWFkZXJFbC5zdHlsZS53aWR0aCA9IGAke3RvdGFsTmV3V2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdGFibGVfY29uZmlnOiB7XG4gICAgICAgICAgIHJvd1NoYWRpbmdFbmFibGVkOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkIHx8IGZhbHNlLFxuICAgICAgICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyIHx8IGZhbHNlLFxuICAgICAgICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHkgfHwgJ0ludGVyJyxcbiAgICAgICAgICAgaGVhZGVyVGV4dEZvbnRzU2l6ZTogdGhpcy5oZWFkZXJUZXh0Q29sb3IgfHwgMTQsXG4gICAgICAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCB8fCAnbWVkaXVtZCcsXG4gICAgICAgICAgIGJvZHlUZXh0Rm9udHNTaXplOiB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE0LFxuICAgICAgICAgICBnbG9iYWxTZWFyY2g6IHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCxcbiAgICAgICAgICAgZmlsdGVyTmFtZXM6ICcnLFxuICAgICAgICAgICB0b3RhbENvdW50OiAwLFxuICAgICAgICAgICBhY3RpdmVGaWx0ZXJzOiB0cnVlLFxuICAgICAgICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiAnI2YxZjFmMSdcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoZmllbGQ6IHN0cmluZywgd2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZSA9IChjb2x1bW5zOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICB1cGRhdGUoY29sLmNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSB7XG4gICAgICAgICAgY29sLndpZHRoID0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdXBkYXRlKHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZygpe1xuICAgIHJldHVybiB7XG4gICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdGFibGVfY29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICByb3dTaGFkaW5nRW5hYmxlZDogdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHNob3dWZXJ0aWNhbEJvcmRlcjogdGhpcy5zaG93VmVydGljYWxCb3JkZXIgfHwgZmFsc2UsXG4gICAgICAgICAgICAgICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHkgIHx8ICdJbnRlcicsXG4gICAgICAgICAgICAgICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiBOdW1iZXIodGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplKSB8fCAxNCxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCB8fCAnbWVkaXVtZCcsXG4gICAgICAgICAgICAgICAgICBib2R5VGV4dEZvbnRzU2l6ZTogTnVtYmVyKHRoaXMuYm9keVRleHRGb250c1NpemUpIHx8IDE0LFxuICAgICAgICAgICAgICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLmdsb2JhbFNlYXJjaFRleHQsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lczogJycsXG4gICAgICAgICAgICAgICAgICB0b3RhbENvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRmlsdGVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6ICcjZjFmMWYxJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH1cbiAgfVxuXG4gIGNsZWFuQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfX3R5cGVuYW1lLFxuICAgICAgICBfaWQsXG4gICAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZSxcbiAgICAgICAgZmlsdGVyVmFsdWUsXG4gICAgICAgIGV4cGFuZGVkRmlsdGVyLFxuICAgICAgICBjZWxsUmVuZGVyZXIsXG4gICAgICAgIGZpbHRlclJlbmRlcmVyLFxuICAgICAgICBjZWxsQ29tcG9uZW50UmVmLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgaXNSb3dHcm91cGVkLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9ID0gY29sO1xuXG4gICAgICAvLyBDbGVhbiBkcm9wZG93biB2YWx1ZXMgKF9fdHlwZW5hbWUgcmVtb3ZlZClcbiAgICAgIGNvbnN0IGNsZWFuZWREcm9wZG93biA9IEFycmF5LmlzQXJyYXkoY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKVxuICAgICAgICA/IGNvbHVtbl9kcm9wZG93bl92YWx1ZS5tYXAoKHsgX190eXBlbmFtZSwgLi4uZFJlc3QgfSkgPT4gZFJlc3QpXG4gICAgICAgIDogY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgPyAoKHsgX190eXBlbmFtZSwgLi4uZFJlc3QgfSkgPT4gZFJlc3QpKGNvbHVtbl9kcm9wZG93bl92YWx1ZSlcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIC8vIENsZWFuIHF1ZXJ5IChfX3R5cGVuYW1lIHJlbW92ZWQpXG4gICAgICBjb25zdCBjbGVhbmVkUXVlcnkgPSBBcnJheS5pc0FycmF5KHF1ZXJ5KVxuICAgICAgICA/IHF1ZXJ5Lm1hcCgoeyBfX3R5cGVuYW1lLCAuLi5xUmVzdCB9KSA9PiBxUmVzdClcbiAgICAgICAgOiBxdWVyeVxuICAgICAgICAgID8gKCh7IF9fdHlwZW5hbWUsIF9pZHMsIC4uLnFSZXN0IH0pID0+IHFSZXN0KShxdWVyeSlcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogY2xlYW5lZERyb3Bkb3duLFxuICAgICAgICBxdWVyeTogY2xlYW5lZFF1ZXJ5LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uUmVzaXplQ29sdW1uKGV2ZW50OiBNb3VzZUV2ZW50LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBzdGFydFggPSBldmVudC5jbGllbnRYO1xuXG4gICAgY29uc3QgdGFyZ2V0RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYFtmaWVsZD1cIiR7Y29sLmZpZWxkfVwiXWBcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IHRhcmdldEVsPy5vZmZzZXRXaWR0aCB8fCAxNTA7XG5cbiAgICBjb25zdCBtYXRjaGluZ0VscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7Y29sLmZpZWxkfVwiXWApO1xuXG4gICAgLy8g8J+RiSBBZGQgaGlnaGxpZ2h0IHdoaWxlIHJlc2l6aW5nXG4gICAgaWYgKGNvbD8ucGlubmVkID09ICdyaWdodCcpIHtcbiAgICAgIG1hdGNoaW5nRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmctaGlnaGxpZ2h0LXJpZ2h0Jyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZy1oaWdobGlnaHQnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgbGV0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xuXG4gICAgICAvLyDwn5GJIFJldmVyc2UgaWYgdGhlIGNvbHVtbiBpcyBwaW5uZWQgdG8gdGhlIHJpZ2h0XG4gICAgICBpZiAoY29sLnBpbm5lZCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICBkZWx0YVggPSAtZGVsdGFYO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3V2lkdGggPSBpbml0aWFsV2lkdGggKyBkZWx0YVg7XG4gICAgICBpZiAobmV3V2lkdGggPCA4MCkgcmV0dXJuO1xuXG4gICAgICBtYXRjaGluZ0Vscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWwgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubWluV2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChjb2wuZmllbGQsIG5ld1dpZHRoKTtcbiAgICAgIGNvbC53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgICBtYXRjaGluZ0Vscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nLWhpZ2hsaWdodCcpO1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nLWhpZ2hsaWdodC1yaWdodCcpO1xuICAgICAgfSk7XG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICB9XG5cblxuXG4gIG9uUmVzaXplR3JvdXBCb3goZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcblxuICAgIGNvbnN0IHRhcmdldEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dyb3VwQm94SGVhZGVyRGl2Jyk7XG4gICAgY29uc3QgaW5pdGlhbFdpZHRoID0gdGFyZ2V0RWw/Lm9mZnNldFdpZHRoIHx8IDE1MDtcblxuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XG5cbiAgICAgIGxldCBuZXdXaWR0aCA9IGluaXRpYWxXaWR0aCArIGRlbHRhWDtcbiAgICAgIGlmIChuZXdXaWR0aCA8IDEwMCkgbmV3V2lkdGggPSAxMDA7XG5cbiAgICAgIGlmICh0YXJnZXRFbCkge1xuICAgICAgICB0YXJnZXRFbC5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgdGFyZ2V0RWwuc3R5bGUubWluV2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIHRoaXMuZ3JvdXBCb3hQYWRkaW5nID0gbmV3V2lkdGg7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICB9XG5cbiAgb25QYXN0ZUluRmlsdGVyUm93U2VhcmNoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgY29sOiBhbnkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UoY29sKTtcbiAgICAgIHRoaXMuYXBwbHlEcm9wZG93bkZpbHRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgb25GaWx0ZXJDaGFuZ2UoY29sOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGNvbC5maWx0ZXJWYWx1ZT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyID0gY29sO1xuICAgIGlmICghY29sPy5xdWVyeSkge1xuICAgICAgY29sLnF1ZXJ5ID0ge1xuICAgICAgICBmaXJzdF9jb25kaXRpb246IGNvbC50eXBlID09ICdkYXRlJyA/ICdlcXVhbCcgOiAnY29udGFpbicsXG4gICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiBudWxsLFxuICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGwsXG4gICAgICAgIGNvbmRpdGlvbjogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICBjb2wucXVlcnkuZmlyc3RfdmFsdWUgPSBmaWx0ZXJWYWx1ZTtcbiAgICB0aGlzLmZpcnN0VmFsdWUgPSBmaWx0ZXJWYWx1ZTtcbiAgfVxuXG4gIC8vIEdldCBCb2R5IEhlaWdodFxuICBnZXQgYm9keVdyYXBwZXJIZWlnaHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCByb3dzID0gdGhpcy5zaG93Q29sdW1uc0dyb3VwaW5nICYmIHRoaXMuc2hvd0ZpbHRlclJvdyA/IDMgOiAodGhpcy5zaG93Q29sdW1uc0dyb3VwaW5nIHx8IHRoaXMuc2hvd0ZpbHRlclJvdyA/IDIgOiAxKTtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmhlYWRlclJvd0hlaWdodCAqIHJvd3MgKyAodGhpcy5oYXNTY3JvbGwgPyAxNyA6IDApO1xuICAgIHJldHVybiBgY2FsYygxMDAlIC0gJHtvZmZzZXR9cHgpYDtcbiAgfVxuXG4gIC8vIFJvdyBIb3ZlciBMb2dpYyBIZXJlXG4gIGhvdmVyZWRSb3dJZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIG9uUm93SG92ZXIocm93OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyZWRSb3dJZCA9IHJvdy5faWQgfHwgcm93LmlkO1xuICB9XG5cbiAgb25Sb3dMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyZWRSb3dJZCA9IG51bGw7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkluZGV4ID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5oYXNQYXJlbnRXaXRoQ2xhc3ModGFyZ2V0LCBbXG4gICAgICAgICd0aHJlZS1kb3RzJyxcbiAgICAgICAgJ2ZpbHRlci1pY29uLXdyYXBwZXInLFxuICAgICAgICAnY29sdW1uLW1lbnUnLFxuICAgICAgICAnZmlsdGVyLW1lbnUnLFxuICAgICAgXSlcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5zaG93QWN0aW9uc0Ryb3BEb3duID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGluc2lkZVRvcEZpbHRlclJvdyA9IHRhcmdldC5jbG9zZXN0KCcuZmlsdGVyLXRhZ3MnKSB8fCB0YXJnZXQuY2xvc2VzdCgnLmFkZC1maWx0ZXItYnV0dG9uLW1lbnUnKSB8fFxuICAgICAgdGFyZ2V0LmNsb3Nlc3QoJy50YWJsZS1yaWdodC10b3AtYWN0aW9ucycpIHx8IHRhcmdldC5jbG9zZXN0KCcudGFibGUtbGF5b3V0JykgfHwgdGFyZ2V0LmNsb3Nlc3QoJy5maWx0ZXItcm93LWZpbHRlci13cmFwcGVyJyk7XG4gICAgY29uc3QgaXNDbGlja2VkSW5zaWRlVGhyZWVEb3RzRmlsdGVyID0gdGFyZ2V0LmNsb3Nlc3QoJy50aHJlZS1kb3RzLWZpbHRlcicpIHx8IHRhcmdldC5jbG9zZXN0KCcuZmlsdGVyLW1lbnUtY29udGFpbmVyJyk7XG4gICAgaWYgKCFpc0NsaWNrZWRJbnNpZGVUaHJlZURvdHNGaWx0ZXIpIHtcbiAgICAgIHRoaXMuY2xvc2VUaHJlZURvdHNNZW51RmlsdGVyKCk7XG4gICAgfVxuICAgIGlmICghaW5zaWRlVG9wRmlsdGVyUm93KSB7XG4gICAgICB0aGlzLmNsb3NlRmlsdGVyRHJvcGRvd25zKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLnNldC1kZWZhdWx0LXByZXNldCcpKSB7XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2V0LWRlZmF1bHQtcHJlc2V0Jyk/LmNsYXNzTGlzdD8ucmVtb3ZlKCdzaG93Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmZ1bGwtdGV4dC1ib3gnKSAmJiAhdGFyZ2V0LmNsb3Nlc3QoJy5kYXRhLWdyaWQtaGVhZGVyLXdyYXBwZXInKSkge1xuICAgICAgdGhpcy5jb2xsYXBzZUFsbEV4cGFuZGVkQ2VsbHMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuZGF0YS1ncmlkLXRhYmxlLXdyYXBwZXInKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICAgIHRoaXMuYWN0aXZlQ2VsbCA9ICcnO1xuICAgIH1cblxuICAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuZGF0YS1ncmlkLWJvZHknKSkge1xuICAgICAgdGhpcy5lZGl0aW5nS2V5ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGNsb3NlVGhyZWVEb3RzTWVudUZpbHRlcigpIHtcbiAgICB0aGlzLmlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICB9XG5cblxuICBjbG9zZUZpbHRlckRyb3Bkb3ducyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGhhc1BhcmVudFdpdGhDbGFzcyhcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBjbGFzc0xpc3Q6IHN0cmluZ1tdXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBlbDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcblxuICAgIHdoaWxlIChlbCAhPT0gbnVsbCkge1xuICAgICAgaWYgKFxuICAgICAgICBlbC5jbGFzc0xpc3QgJiZcbiAgICAgICAgY2xhc3NMaXN0LnNvbWUoKGNsYXNzTmFtZSkgPT4gZWwhLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzTWVudWVIaWRkZW4gPSBmYWxzZTtcbiAgb3BlblRocmVlRG90c01lbnUoZXZlbnQ6IE1vdXNlRXZlbnQsIGNoaWxkOiBhbnksIGtlZXBPcmlnaW5hbFBvc2l0aW9uID0gZmFsc2UpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNNZW51ZUhpZGRlbiA9IHRydWU7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aDtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IGNoaWxkO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFg7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbHVtbi1tZW51JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBpZiAoeCA+IChjb250YWluZXJXaWR0aCAvIDIpKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7eCAtIDI0MH1weGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudCEuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTWVudWVIaWRkZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAwKTtcbiAgfVxuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gQ29sdW1uIFRocmVlIERvdHMgQWN0aW9uc1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBzb3J0QXNjKGNvbDogYW55KSB7XG4gICAgaWYgKCFjb2wuaXNfc29ydGFibGUpIHJldHVybjtcbiAgICBjb2whLm9yZGVyX2J5ID0gJ2FzYyc7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvcmRlcjogJ2FzYycsXG4gICAgICBjb2x1bW46IGNvbFxuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zb3J0aW5nT3JkZXJPcHRpb25zLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc29ydERlc2MoY29sOiBhbnkpIHtcbiAgICBpZiAoIWNvbC5pc19zb3J0YWJsZSkgcmV0dXJuO1xuICAgIGNvbCEub3JkZXJfYnkgPSAnZGVzYyc7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvcmRlcjogJ2Rlc2MnLFxuICAgICAgY29sdW1uOiBjb2xcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc29ydGluZ09yZGVyT3B0aW9ucy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHJlc2V0U29ydChjb2w6IGFueSkge1xuICAgIHRoaXMuc29ydGluZ0NvbmZpZyA9IHsgZmllbGQ6ICcnLCBvcmRlcl9ieTogJycgfTtcbiAgICBjb25zdCBldmVudCA9IHsgZmllbGQ6IG51bGwsIG9yZGVyX2J5OiBudWxsIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zb3J0aW5nT3JkZXJPcHRpb25zLmVtaXQoZXZlbnQpO1xuICB9XG5cblxuICBhc3luYyB1cGRhdGVDb2x1bW5QaW5JblNvdXJjZUJ5RmllbGQoXG4gICAgY29sdW1uOiBhbnksXG4gICAgcGlubmVkOiAnbGVmdCcgfCAncmlnaHQnIHwgbnVsbCxcbiAgICBpc05lc3RlZFRhYmxlOiBhbnkgPSBmYWxzZSxcbiAgICBjb2x1bW5zPzogYW55XG4gICkge1xuICAgIGRlYnVnZ2VyXG4gICAgaWYgKGlzTmVzdGVkVGFibGUpIHtcbiAgICAgIHRoaXMucGluVW5waW5Db2x1bShjb2x1bW4sIHBpbm5lZCwgY29sdW1ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZSA9IChjb2x1bW5zOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICB1cGRhdGUoY29sLmNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIGNvbC5waW5uZWQgPSBwaW5uZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICB1cGRhdGUodGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZpc2libGVMZWFmQ29sdW1ucyA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoY29sdW1uLmNoaWxkcmVuKSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5pc192aXNpYmxlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgYXV0b3NpemVDb2x1bW4oY29sczogYW55IHwgYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG5cbiAgICAvLyBOb3JtYWxpemUgaW5wdXQgdG8gYW4gYXJyYXlcbiAgICBjb25zdCBjb2x1bW5zVG9SZXNpemUgPSBBcnJheS5pc0FycmF5KGNvbHMpID8gY29scyA6IFtjb2xzXTtcblxuICAgIC8vIEhlbHBlcjogRmxhdHRlbiBhbGwgdmlzaWJsZSBsZWFmIGNvbHVtbnNcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoO1xuXG4gICAgaWYgKHZpc2libGVDb3VudCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDA7XG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpIGNvbnRhaW5lcldpZHRoIC09IDMwO1xuICAgIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGNvbnN0IGVxdWFsV2lkdGggPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gdmlzaWJsZUNvdW50KTtcblxuICAgIC8vIFJlc2l6ZSBlYWNoIHBhc3NlZCBjb2x1bW5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zVG9SZXNpemUpIHtcbiAgICAgIGlmIChjb2wgJiYgY29sLmZpZWxkKSB7XG4gICAgICAgIGNvbC53aWR0aCA9IGVxdWFsV2lkdGg7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBlcXVhbFdpZHRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH0sIDEwMDApO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gIH1cblxuICBnZXRHcm91cFdpZHRoKGdyb3VwOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICBncm91cD8uY2hpbGRyZW5cbiAgICAgICAgPy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2w/LmlzX3Zpc2libGUpXG4gICAgICAgID8ucmVkdWNlKChhY2M6IG51bWJlciwgY29sOiBhbnkpID0+IGFjYyArIChjb2w/LndpZHRoIHx8IDApLCAwKSB8fCAwXG4gICAgKTtcbiAgfVxuXG4gIGF1dG9zaXplQWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG5cbiAgICBjb25zdCBnZXRWaXNpYmxlTGVhZkNvbHVtbnMgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoY29sdW1uLmNoaWxkcmVuKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmlzX3Zpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBjb25zdCBlcXVhbFdpZHRoID0gTWF0aC5tYXgoTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAvIHZpc2libGVDb3VudCksIDE1MCk7XG5cbiAgICAvLyBVcGRhdGUgd2lkdGhzIGZvciBhbGwgdmlzaWJsZSBjb2x1bW5zXG4gICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBjb2wud2lkdGggPSBlcXVhbFdpZHRoO1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChjb2wuZmllbGQsIGVxdWFsV2lkdGgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbHVtbkFzR3JvdXBlZChjb2x1bW5zOiBhbnlbXSwgZmllbGQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSB7XG4gICAgICAgIGNvbC5pc1Jvd0dyb3VwZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5tYXJrQ29sdW1uQXNHcm91cGVkKGNvbC5jaGlsZHJlbiwgZmllbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdyb3VwQnkoY29sOiBhbnkpIHtcbiAgICB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMudHJhbnNsYXRlWSA9IDA7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICBpZiAoIWNvbCkgcmV0dXJuO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGlmIChjb2w/LmlzX2dyb3VwYWJsZSkge1xuICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5wdXNoKGNvbCk7XG4gICAgICB0aGlzLm1hcmtDb2x1bW5Bc0dyb3VwZWQodGhpcy5jb2x1bW5zLCBjb2wuZmllbGQpO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ncm91cEJveFBhZGRpbmcgPSB0aGlzLmNvbHVtbnNHcm91cGVkQm94Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSwgMTApO1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgZ3JvdXBEYXRhQXN5bmMoZGF0YTogYW55W10sIGdyb3VwRmllbGRzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55W10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ncm91cERhdGEoZGF0YSwgZ3JvdXBGaWVsZHMpO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9LCAwKTtcbiAgICB9KTtcbiAgfVxuXG5cblxuXG4gIGNob29zZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICAgIHRoaXMuc2hvd0NvbHVtblBhbmVsID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICByZXNldENvbHVtbnMoKSB7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuXG4gICAgLy8gdGhpcy5jb2x1bW5zID0gc3RydWN0dXJlZENsb25lKHRoaXMub3JpZ2luYWxDb2x1bW5zKTtcbiAgICAvLyBEZWVwIGNvcHkgbmVzdGVkIG9iamVjdHMgYnV0IGtlZXAgY2xhc3MgcmVmcyBzYWZlXG4gICAgdGhpcy5vcmlnaW5hbENvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgLi4uY29sLFxuICAgICAgLy8gRGVlcCBjb3B5IG5lc3RlZCBvYmplY3RzIGJ1dCBrZWVwIGNsYXNzIHJlZnMgc2FmZVxuICAgICAgcXVlcnk6IGNvbC5xdWVyeSA/IHsgLi4uY29sLnF1ZXJ5IH0gOiBudWxsLFxuICAgICAgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlOiBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgID8gWy4uLmNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVdXG4gICAgICAgIDogW10sXG4gICAgfSkpO1xuXG4gICAgdGhpcy5TZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY2xlYXJGaWx0ZXIoY29sOiBhbnkpIHtcbiAgICBjb2wuZmlyc3RWYWx1ZSA9ICcnO1xuICAgIGNvbC5zZWNvbmRWYWx1ZSA9ICcnO1xuICAgIGNvbC5maXJzdENvbmRpdGlvbiA9ICdjb250YWluJztcbiAgICBjb2wuc2Vjb25kQ29uZGl0aW9uID0gbnVsbDtcbiAgICBjb2wubG9naWMgPSAnQU5EJztcbiAgICBjb2wuc2VsZWN0QWxsID0gZmFsc2U7XG4gICAgY29sLnNlbGVjdGVkT3B0aW9ucyA9IHt9O1xuICAgIGNvbC5zZWFyY2hWYWx1ZSA9ICcnO1xuXG4gIH1cblxuXG4gIGFwcGx5RmlsdGVyKGNvbDogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJDb2x1bW5zTGlzdC5wdXNoKGNvbCk7XG4gIH1cblxuICAvLyBSb3dzIFNlbGVjdGlvbiBMb2dpYyBHb2VzIEhlcmVcblxuICBzZWxlY3RlZFJvd3M6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIC8qKlxuICAgKiBHZXQgbm9ybWFsaXplZCBJRCBmcm9tIHJvdy5cbiAgICovXG4gIHByaXZhdGUgZ2V0Um93SWQocm93OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiByb3cuaWQgPz8gcm93Ll9pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgYSBzaW5nbGUgcm93IHNlbGVjdGlvbi5cbiAgICovXG4gIHRvZ2dsZVJvd1NlbGVjdGlvbihyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRSb3dJZChyb3cpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmFkZChpZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWRzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG5cbiAgICB0aGlzLnNhdmVTZWxlY3Rpb24oaWRzLCB0aGlzLnRhYmxlVHlwZSk7XG5cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgIG9iajogaWRzXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiBcIm9uU2VsZWN0Um93XCIsXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG5cblxuICB0b2dnbGVTZWxlY3RBbGwoZGF0YTogYW55W10pOiB2b2lkIHtcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZ2V0QWxsTGVhZlJvd3MoZGF0YSk7XG4gICAgY29uc3QgYWxsSWRzID0gbGVhZlJvd3MubWFwKHIgPT4gdGhpcy5nZXRSb3dJZChyKSk7XG5cbiAgICBjb25zdCBhbGxTZWxlY3RlZCA9IGFsbElkcy5ldmVyeShpZCA9PiB0aGlzLnNlbGVjdGVkUm93cy5oYXMoaWQpKTtcblxuICAgIGlmIChhbGxTZWxlY3RlZCkge1xuICAgICAgYWxsSWRzLmZvckVhY2goaWQgPT4gdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKGlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsbElkcy5mb3JFYWNoKGlkID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmFkZChpZCkpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgaWRzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGlkc1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLnNhdmVTZWxlY3Rpb24oaWRzLCB0aGlzLnRhYmxlVHlwZSk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyh0aGlzLmdldFJvd0lkKHJvdykpO1xuICB9XG5cbiAgaXNBbGxTZWxlY3RlZChkYXRhOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxlYWZSb3dzID0gdGhpcy5nZXRBbGxMZWFmUm93cyhkYXRhKTtcbiAgICByZXR1cm4gbGVhZlJvd3MubGVuZ3RoID4gMCAmJiBsZWFmUm93cy5ldmVyeShyID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyh0aGlzLmdldFJvd0lkKHIpKSk7XG4gIH1cblxuXG4gIGlzSW5kZXRlcm1pbmF0ZVN0YXRlKGRhdGE6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmdldEFsbExlYWZSb3dzKGRhdGEpO1xuICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSBsZWFmUm93cy5maWx0ZXIociA9PiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyKSkpLmxlbmd0aDtcblxuICAgIHJldHVybiBzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50IDwgbGVhZlJvd3MubGVuZ3RoO1xuICB9XG5cblxuICBnZXRBbGxMZWFmUm93cyhkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBsZWFmOiBhbnlbXSA9IFtdO1xuXG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZTogYW55KSA9PiB7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybjtcblxuICAgICAgaWYgKG5vZGUuaXNHcm91cCkge1xuICAgICAgICBub2RlLmNoaWxkcmVuPy5mb3JFYWNoKHRyYXZlcnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlYWYucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGF0YS5mb3JFYWNoKHRyYXZlcnNlKTtcbiAgICByZXR1cm4gbGVhZjtcbiAgfVxuXG5cblxuXG4gIC8vIFNpZGUgTWVudSBXb3JraW5nIEdvZXMgSGVyZVxuICB0b2dnbGVTaWRlTWVudShjbGlja2VkT246ICdjb2xzJyB8ICdmaWx0cnMnKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSBjbGlja2VkT24pIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9IGNsaWNrZWRPbjtcbiAgICAgIHRoaXMuc2lkZU1lbnVWaXNpYmxlID0gIXRoaXMuc2lkZU1lbnVWaXNpYmxlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnNpZGVNZW51VmlzaWJsZSAmJlxuICAgICAgY2xpY2tlZE9uICE9IHRoaXMuY3VycmVudE9wZW5lZFNpZGVNZW51ZVxuICAgICkge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbmVkU2lkZU1lbnVlID0gY2xpY2tlZE9uO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPSBjbGlja2VkT247XG4gICAgICB0aGlzLnNpZGVNZW51VmlzaWJsZSA9ICF0aGlzLnNpZGVNZW51VmlzaWJsZTtcbiAgICB9XG4gICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB0b2dnbGVHcm91cFZpc2liaWxpdHkoY29sOiBhbnkpIHtcbiAgICBjb25zdCBhbGxWaXNpYmxlID0gY29sLmNoaWxkcmVuLmV2ZXJ5KChjaGlsZDogYW55KSA9PiBjaGlsZC5pc192aXNpYmxlKTtcbiAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4gKGNoaWxkLmlzX3Zpc2libGUgPSAhYWxsVmlzaWJsZSkpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgIHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIGlzQ29sdW1uVmlzaWJsZShjb2x1bW5zOiBhbnkpIHtcbiAgICBpZiAoY29sdW1ucz8uY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBjb2x1bW5zLmNoaWxkcmVuLmV2ZXJ5KChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQuaXNfdmlzaWJsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbnM/LmlzX3Zpc2libGU7XG4gIH1cblxuICAvLyBhbGxDb2x1bW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gIC8vICAgY29uc3QgZmxhdHRlbiA9IHRoaXMuZmxhdHRlbkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgLy8gICByZXR1cm4gZmxhdHRlbi5ldmVyeSgoY29sKSA9PiBjb2wuaXNfdmlzaWJsZSk7XG4gIC8vIH1cbmFsbENvbHVtbnNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgZmxhdHRlbiA9IHRoaXMuZmxhdHRlbkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgY29uc3Qgbm9uQWx3YXlzVmlzaWJsZSA9IGZsYXR0ZW4uZmlsdGVyKGNvbCA9PiAhY29sLmlzX2Fsd2F5c192aXNpYmxlKTtcbiAgXG4gIC8vIFJldHVybiB0cnVlIGlmIGFsbCBub24tYWx3YXlzLXZpc2libGUgY29sdW1ucyBhcmUgdmlzaWJsZVxuICByZXR1cm4gbm9uQWx3YXlzVmlzaWJsZS5sZW5ndGggPiAwICYmIG5vbkFsd2F5c1Zpc2libGUuZXZlcnkoY29sID0+IGNvbC5pc192aXNpYmxlKTtcbn1cblxuICBwcml2YXRlIGZpbmRDb2x1bW5CeUZpZWxkKGZpZWxkOiBzdHJpbmcsIGNvbHM6IGFueVtdKTogYW55IHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xuICAgICAgaWYgKGNvbC5maWVsZCA9PT0gZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgIH1cbiAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kQ29sdW1uQnlGaWVsZChmaWVsZCwgY29sLmNoaWxkcmVuKTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuXG4gIGFzeW5jIHRvZ2dsZUNvbHVtblZpc2liaWxpdHkoY29sdW1uOiBhbnksIGlzVmlzaWJsZTogYm9vbGVhbikge1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIGlmICh0aGlzLnZpc2libGVDb2x1bW5zKCk/Lmxlbmd0aCA8PSAyICYmIGNvbHVtbi5pc192aXNpYmxlIHx8IChjb2x1bW4/LmlzX2Fsd2F5c192aXNpYmxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbCA9IHRoaXMuZmluZENvbHVtbkJ5RmllbGQoY29sdW1uLmZpZWxkLCB0aGlzLmNvbHVtbnMpO1xuICAgIGlmIChjb2wpIHtcbiAgICAgIGNvbC5pc192aXNpYmxlID0gaXNWaXNpYmxlO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgIH1cbiAgfVxuXG5hc3luYyB0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBmbGF0dGVuLmZpbHRlcihjb2wgPT4gY29sLmlzX3Zpc2libGUpO1xuICAgIFxuICAgIC8vIEdldCBjb2x1bW5zIHRoYXQgYXJlIG5vdCBhbHdheXMgdmlzaWJsZVxuICAgIGNvbnN0IG5vbkFsd2F5c1Zpc2libGUgPSBmbGF0dGVuLmZpbHRlcihjb2wgPT4gIWNvbC5pc19hbHdheXNfdmlzaWJsZSk7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgYWxsIG5vbi1hbHdheXMtdmlzaWJsZSBjb2x1bW5zIGFyZSBjdXJyZW50bHkgdmlzaWJsZVxuICAgIGNvbnN0IGFsbE5vbkFsd2F5c1Zpc2libGVBcmVWaXNpYmxlID0gbm9uQWx3YXlzVmlzaWJsZS5ldmVyeShjb2wgPT4gY29sLmlzX3Zpc2libGUpO1xuXG4gICAgaWYgKGFsbE5vbkFsd2F5c1Zpc2libGVBcmVWaXNpYmxlKSB7XG4gICAgICAvLyBISURFIEFMTCAoYnV0IGtlZXAgbWluaW11bSAyIHZpc2libGUpXG4gICAgICAvLyBGaXJzdCwgaGlkZSBhbGwgbm9uLWFsd2F5cy12aXNpYmxlIGNvbHVtbnNcbiAgICAgIG5vbkFsd2F5c1Zpc2libGUuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICBjb2wuaXNfdmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFRoZW4sIG1ha2Ugc3VyZSBhdCBsZWFzdCAyIGNvbHVtbnMgYXJlIHZpc2libGUgKGluY2x1ZGluZyBhbHdheXMtdmlzaWJsZSBvbmVzKVxuICAgICAgY29uc3QgYWx3YXlzVmlzaWJsZUNvdW50ID0gZmxhdHRlbi5maWx0ZXIoY29sID0+IGNvbC5pc19hbHdheXNfdmlzaWJsZSkubGVuZ3RoO1xuICAgICAgY29uc3QgY29sdW1uc05lZWRlZCA9IE1hdGgubWF4KDAsIDIgLSBhbHdheXNWaXNpYmxlQ291bnQpO1xuICAgICAgXG4gICAgICBpZiAoY29sdW1uc05lZWRlZCA+IDApIHtcbiAgICAgICAgLy8gU2hvdyB0aGUgZmlyc3QgJ2NvbHVtbnNOZWVkZWQnIG5vbi1hbHdheXMtdmlzaWJsZSBjb2x1bW5zXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oY29sdW1uc05lZWRlZCwgbm9uQWx3YXlzVmlzaWJsZS5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgICBub25BbHdheXNWaXNpYmxlW2ldLmlzX3Zpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNIT1cgQUxMIC0gbWFrZSBhbGwgY29sdW1ucyB2aXNpYmxlXG4gICAgICBmbGF0dGVuLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgY29sLmlzX3Zpc2libGUgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIFxuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgXG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG5cbiAgcHJpdmF0ZSB3YWl0KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cblxuXG5cbiAgdmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IHRoaXMuZmxhdHRlbkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGZsYXR0ZW4uZmlsdGVyKChjOiBhbnkpID0+IGMuaXNfdmlzaWJsZSk7XG4gICAgcmV0dXJuIHZpc2libGVDb2x1bW5zO1xuICB9XG5cbiAgZmxhdHRlbkNvbHVtbnMoY29sczogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGNvbHMucmVkdWNlKChhY2M6IGFueVtdLCBjb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAvLyByZWN1cnNpdmVseSBmbGF0dGVuIGNoaWxkcmVuXG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KHRoaXMuZmxhdHRlbkNvbHVtbnMoY29sLmNoaWxkcmVuKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBsZWFmIGNvbHVtblxuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChjb2wpO1xuICAgICAgfVxuICAgIH0sIFtdKTtcbiAgfVxuXG5cbiAgZmlsdGVyZWRDb2x1bW5zKGNvbHM6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuY29sdW1uU2VhcmNoLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIGNvbHNcbiAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICBpZiAoY29sLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IHRoaXMuZmlsdGVyZWRDb2x1bW5zKGNvbC5jaGlsZHJlbik7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sLmhlYWRlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgfHxcbiAgICAgICAgICAgIGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5jb2wsIGNoaWxkcmVuOiBmaWx0ZXJlZENoaWxkcmVuIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjb2wuaGVhZGVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSA/IGNvbCA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG5cbiAgZ2V0IGFjY29yZGlvblN0YXRlKCk6ICdhbGwnIHwgJ25vbmUnIHwgJ3NvbWUnIHtcbiAgICBjb25zdCBncm91cHMgPSB0aGlzLmdldEFsbEdyb3VwQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IGV4cGFuZGVkQ291bnQgPSBncm91cHMuZmlsdGVyKChjb2wpID0+IGNvbC5leHBhbmRlZCkubGVuZ3RoO1xuXG4gICAgaWYgKGV4cGFuZGVkQ291bnQgPT09IDApIHJldHVybiAnbm9uZSc7XG4gICAgaWYgKGV4cGFuZGVkQ291bnQgPT09IGdyb3Vwcy5sZW5ndGgpIHJldHVybiAnYWxsJztcbiAgICByZXR1cm4gJ3NvbWUnO1xuICB9XG5cbiAgZ2V0IGZpbHRlckFjY29yZGlvblN0YXRlKCk6ICdhbGwnIHwgJ25vbmUnIHwgJ3NvbWUnIHtcbiAgICBjb25zdCBncm91cHMgPSB0aGlzLmdldEFsbEdyb3VwQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IGV4cGFuZGVkQ291bnQgPSBncm91cHMuZmlsdGVyKChjb2wpID0+IGNvbC5leHBhbmRlZEZpbHRlcikubGVuZ3RoO1xuXG4gICAgaWYgKGV4cGFuZGVkQ291bnQgPT09IDApIHJldHVybiAnbm9uZSc7XG4gICAgaWYgKGV4cGFuZGVkQ291bnQgPT09IGdyb3Vwcy5sZW5ndGgpIHJldHVybiAnYWxsJztcbiAgICByZXR1cm4gJ3NvbWUnO1xuICB9XG5cbiAgLy8gUmVjdXJzaXZlbHkgY29sbGVjdCBhbGwgZ3JvdXAgY29sdW1uc1xuICBwcml2YXRlIGdldEFsbEdyb3VwQ29sdW1ucyhjb2xzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgZ3JvdXBzOiBhbnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBncm91cHMucHVzaChjb2wpO1xuICAgICAgICBncm91cHMgPSBncm91cHMuY29uY2F0KHRoaXMuZ2V0QWxsR3JvdXBDb2x1bW5zKGNvbC5jaGlsZHJlbikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBzO1xuICB9XG5cbiAgLy8gVG9nZ2xlIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGVcbiAgdG9nZ2xlQWxsQWNjb3JkaW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB0aGlzLmFjY29yZGlvblN0YXRlID09PSAnYWxsJyA/IGZhbHNlIDogdHJ1ZTtcbiAgICB0aGlzLnNldEFjY29yZGlvblN0YXRlKHRoaXMuY29sdW1ucywgbmV4dFN0YXRlKTtcbiAgfVxuXG4gIHRvZ2dsZUFsbEZpbHRlckFjY29yZGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdGhpcy5maWx0ZXJBY2NvcmRpb25TdGF0ZSA9PT0gJ2FsbCcgPyBmYWxzZSA6IHRydWU7XG4gICAgdGhpcy5zZXRGaWx0ZXJBY2NvcmRpb25TdGF0ZSh0aGlzLmNvbHVtbnMsIG5leHRTdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEFjY29yZGlvblN0YXRlKGNvbHM6IGFueVtdLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAobGV0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29sLmV4cGFuZGVkID0gc3RhdGU7XG4gICAgICAgIHRoaXMuc2V0QWNjb3JkaW9uU3RhdGUoY29sLmNoaWxkcmVuLCBzdGF0ZSk7IC8vIFJlY3Vyc2l2ZWx5IGhhbmRsZSBuZXN0ZWRcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIHByaXZhdGUgc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUoY29sczogYW55W10sIHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChsZXQgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBjb2wuZXhwYW5kZWRGaWx0ZXIgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXJBY2NvcmRpb25TdGF0ZShjb2wuY2hpbGRyZW4sIHN0YXRlKTsgLy8gUmVjdXJzaXZlbHkgaGFuZGxlIG5lc3RlZFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNob3dDb2x1bW5QYW5lbCA9IGZhbHNlO1xuXG4gIGNsb3NlTW9kYWxDb2x1bW5QYW5lbCgpIHtcbiAgICB0aGlzLnNob3dDb2x1bW5QYW5lbCA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcbiAgb25Fc2NhcGUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZU1vZGFsQ29sdW1uUGFuZWwoKTtcbiAgfVxuXG4gIC8vIENoZWNrIElmICBBbnkgY29sdW1uIGhhdmUgcmlnaHQgcGlubmVkXG4gIGdldCBoYXNSaWdodFBpbm5lZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldGhhc1JpZ2h0UGlubmVkQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgZ2V0IGhhc0xlZnRQaW5uZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRoYXNMZWZ0UGlubmVkQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgZ2V0IGRhdGFTZXRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldEV4cGFuZGVkUm93Q291bnQodGhpcy5kYXRhU2V0KTtcbiAgfVxuXG5cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25SZXNpemUoZXZlbnQ6IFVJRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlKSB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8oKTtcbiAgICBjb25zdCBoID0gdGhpcy5tYWluU2Nyb2xsPy5uYXRpdmVFbGVtZW50Py5jbGllbnRIZWlnaHQgPz8gMDtcbiAgICB0aGlzLnZpZXdwb3J0Um93cyA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChoIC8gdGhpcy5yb3dIZWlnaHQpKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsVG9wKTtcbiAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgfSwgMTAwKTtcbiAgfVxuXG4gIGF1dG9TaXplQ29sdW1uc0J5UmF0aW8oKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuXG4gICAgY29uc3QgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zID0gKGNvbHVtbnM6IGFueVtdKTogYW55W10gPT4ge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4uZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5pc192aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG5cbiAgICBpZiAodmlzaWJsZUNvbHVtbnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDA7XG5cbiAgICBpZiAodGhpcy5zaG93U2VyaWFsTnVtYmVyKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBpZiAodGhpcy5zaG93U2lkZU1lbnUpIGNvbnRhaW5lcldpZHRoIC09IDI5O1xuICAgIGlmICh0aGlzLmdyaWRUeXBlID09ICdBc3NldHMnIHx8IHRoaXMuZ3JpZFR5cGUgPT0gJ1Rhc2tzJylcbiAgICAgIGNvbnRhaW5lcldpZHRoIC09IDMwO1xuICAgIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGNvbnN0IHRvdGFsT2xkV2lkdGggPSB2aXNpYmxlQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAoc3VtLCBjb2wpID0+IHN1bSArIChjb2wud2lkdGggfHwgMCksXG4gICAgICAwXG4gICAgKTtcbiAgICBpZiAodG90YWxPbGRXaWR0aCA9PT0gMCkgcmV0dXJuO1xuICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29uc3QgcmF0aW8gPSBjb2wud2lkdGggLyB0b3RhbE9sZFdpZHRoO1xuICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heChNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoICogcmF0aW8pLCAxMDApO1xuICAgICAgY29sLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGNvbC5maWVsZCwgbmV3V2lkdGgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICB9LCA0MDApO1xuICB9XG5cblxuICBhc3luYyByZWZyZXNoSGVhZGVycygpIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcihhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMCkpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG5cbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhhc0FueVZpc2libGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldGhhc1Zpc2libGVDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuICBnZXQgaGFzQW55SW5WaXNpYmxlQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRoYXNJblZpc2libGVDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuICBnZXQgY29sdW1uc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRUb3RhbENvbHVtbnNMZW5ndGgodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIHRhYmxlSGVhZGVyQW5kQm9keUhlaWdodCgpIHtcbiAgICByZXR1cm4gYGNhbGMoMTAwJSAtICR7dGhpcy5mb290ZXJSb3dIZWlnaHR9KWA7XG4gIH1cblxuICBkcmFnZ2luZ0luR3JvdXBBcmVhID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnY2VudGVyU2Nyb2xsJykgY2VudGVyU2Nyb2xsITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIHZpc2libGVSb3dDb3VudCA9IDI1O1xuICBzdGFydEluZGV4ID0gMDtcbiAgdmlzaWJsZVJvd3M6IGFueVtdID0gW107XG5cbiAgcHJpdmF0ZSBmbGF0dGVuR3JvdXBlZFJvd3MoXG4gICAgcm93czogYW55W10gPSBbXSxcbiAgICBsZXZlbCA9IDAsXG4gICAgcmVzdWx0OiBhbnlbXSA9IFtdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICByZXN1bHQucHVzaCh7IC4uLnJvdywgX19kZXB0aDogbGV2ZWwgfSk7XG4gICAgICBpZiAocm93LmlzR3JvdXAgJiYgcm93LmlzRXhwYW5kICYmIHJvdy5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZmxhdHRlbkdyb3VwZWRSb3dzKHJvdy5jaGlsZHJlbiwgbGV2ZWwgKyAxLCBbXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXNzaWduVmlydHVhbEluZGV4ZXModGhpcy52aXNpYmxlUm93cyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzc2lnblZpcnR1YWxJbmRleGVzKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGxldCBjdXJyZW50SW5kZXggPSAxO1xuICAgIGNvbnN0IHdhbGsgPSAoaXRlbXM6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgaXRlbS5fX3ZpcnR1YWxJbmRleCA9IGN1cnJlbnRJbmRleCsrO1xuICAgICAgICBpZiAoaXRlbT8uaXNHcm91cCkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwID0gaXRlbTtcbiAgICAgICAgICBpZiAoZ3JvdXAuaXNFeHBhbmQgJiYgQXJyYXkuaXNBcnJheShncm91cC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIHdhbGsoZ3JvdXAuY2hpbGRyZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgd2FsayhkYXRhKTtcbiAgICAvLyBjb25zb2xlLmxvZygnVGhpcyBkYXRhc2V0OiAnLCB0aGlzLnZpc2libGVSb3dzKVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cblxuICB1cGRhdGVWaXNpYmxlUm93cyhzY3JvbGxUb3A6IG51bWJlcikge1xuXG4gICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZGF0YVNldDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmxhdERhdGEgPSB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyh0aGlzLmRhdGFTZXQpO1xuXG4gICAgaWYgKHRoaXMuZGF0YVNldD8ubGVuZ3RoIDw9IDE1KSB7XG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gZmxhdERhdGE7XG4gICAgICB0aGlzLmZpcnN0SW5kZXggPSAwO1xuICAgICAgdGhpcy5zdGFydEluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVuZGVyU3RhcnQgPSAwO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b3RhbCA9IGZsYXREYXRhLmxlbmd0aDtcbiAgICBjb25zdCBtYXhGaXJzdCA9IE1hdGgubWF4KDAsIHRvdGFsIC0gdGhpcy52aWV3cG9ydFJvd3MpO1xuICAgIGNvbnN0IGZpcnN0ID0gTWF0aC5taW4oTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCksIG1heEZpcnN0KTtcbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIGZpcnN0KTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih0b3RhbCwgZmlyc3QgKyB0aGlzLnZpZXdwb3J0Um93cyk7XG5cbiAgICB0aGlzLmZpcnN0SW5kZXggPSBmaXJzdDtcbiAgICB0aGlzLnN0YXJ0SW5kZXggPSBmaXJzdDtcbiAgICB0aGlzLnJlbmRlclN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy52aXNpYmxlUm93cyA9IGZsYXREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHRoaXMuYXNzaWduVmlydHVhbEluZGV4ZXModGhpcy52aXNpYmxlUm93cyk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICB0cmFja0J5UmVuZGVyZWRJbmRleCA9IChpOiBudW1iZXIsIF9yb3c6IGFueSkgPT4gdGhpcy5yZW5kZXJTdGFydCArIGk7XG5cbiAgcHJpdmF0ZSBpc1N5bmNpbmdGcm9tTWFpbiA9IGZhbHNlO1xuICBwcml2YXRlIGlzU3luY2luZ0Zyb21GYWtlID0gZmFsc2U7XG4gIHByaXZhdGUgbWFpblNjcm9sbFJhZjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLmlkIHx8IGl0ZW0uX2lkO1xuICB9XG5cbiAgZmxhdHRlbmVkRGF0YTogYW55W10gPSBbXTtcblxuICB1cGRhdGVGbGF0dGVuZWREYXRhKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mbGF0dGVuZWREYXRhID0gdGhpcy5mbGF0dGVuR3JvdXBlZFJvd3ModGhpcy5kYXRhU2V0KTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICAvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgSURzXG4gIHByaXZhdGUgZmFrZVNjcm9sbFJhZjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cblxuICAvLyBvbk1haW5TY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gIC8vICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuICAvLyAgICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgICAgdGhpcy5zdGFydEluZGV4ID0gMDtcbiAgLy8gICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgICByZXR1cm47XG4gIC8vICAgICB9XG4gIC8vICAgICBjb25zdCBvdmVyc2NhbiA9IHRoaXMub3ZlcnNjYW4gKiAyO1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCk7XG4gIC8vICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIHRoaXMuc3RhcnRJbmRleCAtIG92ZXJzY2FuKTtcbiAgLy8gICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRoaXMuZmxhdHRlbmVkRGF0YS5sZW5ndGgsIHRoaXMuc3RhcnRJbmRleCArIHRoaXMudmlld3BvcnRSb3dzICsgb3ZlcnNjYW4pO1xuICAvLyAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZmxhdHRlbmVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gfVxuICB0cmFuc2xhdGVZID0gMDtcblxuICBsYXN0U2Nyb2xsVG9wID0gMDtcbiAgcGVuZGluZ0FuaW1hdGlvbkZyYW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBvbk1haW5TY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuICAgIGlmIChNYXRoLmFicyhzY3JvbGxUb3AgLSB0aGlzLmxhc3RTY3JvbGxUb3ApIDwgKDEwKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnBlbmRpbmdBbmltYXRpb25GcmFtZSkgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5wZW5kaW5nQW5pbWF0aW9uRnJhbWUpO1xuICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdBbmltYXRpb25GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBzY3JvbGxpbmdEb3duID0gc2Nyb2xsVG9wID4gdGhpcy5sYXN0U2Nyb2xsVG9wO1xuICAgICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuXG4gICAgICBjb25zdCBvdmVyc2NhbiA9IDU7XG4gICAgICBjb25zdCBuZXdTdGFydEluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCk7XG4gICAgICBjb25zdCBkeW5hbWljT3ZlcnNjYW4gPSBzY3JvbGxpbmdEb3duID8gb3ZlcnNjYW4gOiBvdmVyc2NhbjtcblxuICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBuZXdTdGFydEluZGV4IC0gZHluYW1pY092ZXJzY2FuKTtcbiAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKFxuICAgICAgICB0aGlzLmZsYXR0ZW5lZERhdGEubGVuZ3RoLFxuICAgICAgICBuZXdTdGFydEluZGV4ICsgdGhpcy52aWV3cG9ydFJvd3MgKyBkeW5hbWljT3ZlcnNjYW5cbiAgICAgICk7XG4gICAgICB0aGlzLnRyYW5zbGF0ZVkgPSBzdGFydCAqIHRoaXMucm93SGVpZ2h0O1xuICAgICAgaWYgKHRoaXMuc3RhcnRJbmRleCAhPT0gc3RhcnQgfHwgdGhpcy52aXNpYmxlUm93cy5sZW5ndGggIT09IGVuZCAtIHN0YXJ0KSB7XG4gICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5kYXRhU2V0LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wZW5kaW5nQW5pbWF0aW9uRnJhbWUgPSBudWxsO1xuICAgIH0pO1xuICB9XG5cblxuICAvLyBvbk1haW5TY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gIC8vICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gIC8vICAgaWYgKHRoaXMuaXNTeW5jaW5nRnJvbUZha2UpIHtcbiAgLy8gICAgIHRoaXMuaXNTeW5jaW5nRnJvbUZha2UgPSBmYWxzZTtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuICAvLyAgIGlmIChNYXRoLmFicyhzY3JvbGxUb3AgLSB0aGlzLmxhc3RTY3JvbGxUb3ApIDwgdGhpcy5yb3dIZWlnaHQgLyAyKSByZXR1cm47XG4gIC8vICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuXG4gIC8vICAgaWYgKHRoaXMuZmFrZVNjcm9sbFJhZikgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5mYWtlU2Nyb2xsUmFmKTtcblxuICAvLyAgIHRoaXMuZmFrZVNjcm9sbFJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gIC8vICAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAvLyAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICAgIHJldHVybjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNvbnN0IGZsYXREYXRhID0gdGhpcy5mbGF0dGVuR3JvdXBlZFJvd3ModGhpcy5kYXRhU2V0KTtcbiAgLy8gICAgIGNvbnN0IHRvdGFsUm93cyA9IGZsYXREYXRhLmxlbmd0aDtcbiAgLy8gICAgIGNvbnN0IG5ld1N0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgLy8gICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgbmV3U3RhcnRJbmRleCAtICh0aGlzLm92ZXJzY2FuICogMikpO1xuICAvLyAgICAgY29uc3QgZW5kID0gTWF0aC5taW4odG90YWxSb3dzLCBuZXdTdGFydEluZGV4ICsgdGhpcy52aWV3cG9ydFJvd3MgKyAodGhpcy5vdmVyc2NhbiAqIDIpKTtcblxuICAvLyAgICAgdGhpcy50cmFuc2xhdGVZID0gc3RhcnQgKiB0aGlzLnJvd0hlaWdodDtcbiAgLy8gICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0O1xuICAvLyAgICAgdGhpcy52aXNpYmxlUm93cyA9IGZsYXREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cblxuICBnZXQgaXNTY3JvbGxiYXJWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5tYWluU2Nyb2xsKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZWwgPSB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudDtcbiAgICByZXR1cm4gZWwuc2Nyb2xsSGVpZ2h0ID4gZWwuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kKHJvdzogYW55KSB7XG4gICAgaWYgKHJvdy5kZXRhaWxzKSB7XG4gICAgICByb3cuaXNEZXRhaWxzRXhwYW5kID0gIXJvdy5pc0RldGFpbHNFeHBhbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy5pc0V4cGFuZCA9ICFyb3cuaXNFeHBhbmQ7XG4gICAgfVxuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgLy8gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIH0sIDEwMCk7XG4gIH1cblxuICAvLyBvbk1haW5GYWtlU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIGlmICh0aGlzLmlzU3luY2luZ0Zyb21NYWluKSB7XG4gIC8vICAgICB0aGlzLmlzU3luY2luZ0Zyb21NYWluID0gZmFsc2U7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gIC8vICAgaWYgKHRoaXMubWFpblNjcm9sbFJhZikgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5tYWluU2Nyb2xsUmFmKTtcbiAgLy8gICB0aGlzLm1haW5TY3JvbGxSYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAvLyAgICAgdGhpcy5pc1N5bmNpbmdGcm9tRmFrZSA9IHRydWU7XG4gIC8vICAgICB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vICAgICBjb25zdCBvdmVyc2NhbiA9IHRoaXMub3ZlcnNjYW4gPz8gMDtcbiAgLy8gICAgIHRoaXMuc3RhcnRJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAvLyAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCB0aGlzLnN0YXJ0SW5kZXggLSBvdmVyc2Nhbik7XG4gIC8vICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihcbiAgLy8gICAgICAgdGhpcy5mbGF0dGVuZWREYXRhLmxlbmd0aCxcbiAgLy8gICAgICAgdGhpcy5zdGFydEluZGV4ICsgdGhpcy52aWV3cG9ydFJvd3MgKyBvdmVyc2NhblxuICAvLyAgICAgKTtcbiAgLy8gICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmZsYXR0ZW5lZERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuXG5cblxuXG4gIHZpZXdwb3J0Um93cyA9IDA7IC8vIGhvdyBtYW55IHJvd3MgZml0IGluIHZpZXdwb3J0IChjb21wdXRlZClcbiAgZmlyc3RJbmRleCA9IDA7IC8vIGluZGV4IG9mIHRoZSBmaXJzdCB2aXNpYmxlIHJvdyAoY2xhbXBlZClcbiAgcmVuZGVyU3RhcnQgPSAwOyAvLyB3aGVyZSB0aGUgc2xpY2UgYWN0dWFsbHkgc3RhcnRzIChmaXJzdEluZGV4IC0gb3ZlcnNjYW4sIGNsYW1wZWQpXG5cbiAgcHJpdmF0ZSBzY3JvbGxSYWY6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBlbmRpbmdTY3JvbGxUb3AgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ21haW5TY3JvbGwnKSBtYWluU2Nyb2xsITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2Zha2VTY3JvbGwnKSBmYWtlU2Nyb2xsITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2hvcml6aW50YWxGYWtlU2Nyb2xsJylcbiAgaG9yaXppbnRhbEZha2VTY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2VudGVyU2Nyb2xsYWJsZUJvZHknKVxuICBjZW50ZXJTY3JvbGxhYmxlQm9keSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBwcml2YXRlIG92ZXJzY2FuID0gMTA7IC8vIGJ1ZmZlciByb3dzIGFib3ZlIGFuZCBiZWxvd1xuXG4gIGNvbXB1dGVWaWV3cG9ydFJvd3MoKSB7XG4gICAgaWYgKHRoaXMuZmFrZVNjcm9sbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5mYWtlU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYWluU2Nyb2xsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgY29uc3QgaCA9IHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCA/PyAwO1xuXG4gICAgICAvLyByb3dzIHZpc2libGUgaW4gdmlld3BvcnRcbiAgICAgIGNvbnN0IHJvd3NJblZpZXdwb3J0ID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGggLyB0aGlzLnJvd0hlaWdodCkpO1xuXG4gICAgICAvLyBhZGQgYnVmZmVyIHJvd3MgKG92ZXJzY2FuKVxuICAgICAgdGhpcy52aWV3cG9ydFJvd3MgPSByb3dzSW5WaWV3cG9ydCArIHRoaXMub3ZlcnNjYW47XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuXG4gIG9uSG9yaXpvbnRhbEZha2VTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gICAgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICBpZiAodGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgIH1cbiAgfVxuXG4gIG9uQ2VudGVyQm9keVNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHk/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmNlbnRlclBpbm5lZEhlYWRlcikge1xuICAgICAgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmhvcml6aW50YWxGYWtlU2Nyb2xsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmhvcml6aW50YWxGYWtlU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgb25DZW50ZXJIZWFkZXJTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0aGlzLmhvcml6aW50YWxGYWtlU2Nyb2xsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmhvcml6aW50YWxGYWtlU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBpZiAodGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gIH1cblxuICAvLyBEcmFnZ2luZyBMb2dpYyBpcyBpbXBsZW1lbnRlZCBoZXJlXG4gIC8vIHByaXZhdGUgaW5pdGlhbEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBkcmFnZ2luZ0NvbHVtbjogYW55O1xuICBkcmFnU3RhcnRJbmRleDogYW55ID0gMDtcbiAgLy8gb25EcmFnU3RhcnQoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gIC8vICAgdGhpcy5kcmFnZ2luZ0NvbHVtbiA9IGRhdGEuY29sdW1uO1xuICAvLyAgIHRoaXMuZHJhZ1N0YXJ0SW5kZXggPSBpbmRleDtcbiAgLy8gfVxuICAvLyBvbkRyYWdNb3ZlKGRhdGE6IGFueSkge1xuICAvLyAgIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gZGF0YS5ldmVudDtcbiAgLy8gICBjb25zdCBoZWFkZXJzID0gQXJyYXkuZnJvbShcbiAgLy8gICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5vbmUtcm93LWhlYWRlci1jZWxscycpXG4gIC8vICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIC8vICAgaGVhZGVycy5mb3JFYWNoKChoZWFkZXJFbCwgaWR4KSA9PiB7XG4gIC8vICAgICBjb25zdCByZWN0ID0gaGVhZGVyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIGlkeCAhPT0gdGhpcy5kcmFnU3RhcnRJbmRleCAmJlxuICAvLyAgICAgICBjbGllbnRYID4gcmVjdC5sZWZ0ICYmXG4gIC8vICAgICAgIGNsaWVudFggPCByZWN0LnJpZ2h0ICYmXG4gIC8vICAgICAgIGNsaWVudFkgPiByZWN0LnRvcCAmJlxuICAvLyAgICAgICBjbGllbnRZIDwgcmVjdC5ib3R0b21cbiAgLy8gICAgICkge1xuICAvLyAgICAgICBjb25zdCBvdGhlckluZGV4ID0gaWR4O1xuICAvLyAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmRyYWdTdGFydEluZGV4fSAtLT4gJHtvdGhlckluZGV4fWApO1xuICAvLyAgICAgICB0aGlzLnN3YXBDb2x1bW4odGhpcy5kcmFnU3RhcnRJbmRleCwgb3RoZXJJbmRleCk7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdVcGRhdGVkIENvbHVtbnM6ICcsIHRoaXMuY29sdW1ucyk7XG4gIC8vICAgICAgIHRoaXMuZHJhZ1N0YXJ0SW5kZXggPSBvdGhlckluZGV4OyAvLyB1cGRhdGUgaW5kZXhcbiAgLy8gICAgIH1cbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIC8vIHN3YXBDb2x1bW4ocHJldml1c0luZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyKSB7XG4gIC8vICAgY29uc3QgY29sdW1ucyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmNvbHVtbnMpO1xuICAvLyAgIGNvbnN0IGZsYXR0ZW5Db2x1bW5zID0gdGhpcy5mbGF0dGVuQ29sdW1ucyhjb2x1bW5zKTtcblxuICAvLyAgIGNvbnN0IHZpc2libGVGbGF0dGVuQ29sdW1ucyA9IGZsYXR0ZW5Db2x1bW5zLmZpbHRlcihcbiAgLy8gICAgIChjb2wpID0+IGNvbC5pc192aXNpYmxlXG4gIC8vICAgKTtcbiAgLy8gICBjb25zdCBwcmV2aXVzQ29sdW1uID0gdmlzaWJsZUZsYXR0ZW5Db2x1bW5zW3ByZXZpdXNJbmRleF07XG4gIC8vICAgY29uc3QgY3VycmVudENvbHVtbiA9IHZpc2libGVGbGF0dGVuQ29sdW1uc1tjdXJyZW50SW5kZXhdO1xuXG4gIC8vICAgY29uc29sZS5sb2coJ1ByZXZpdXMgQ29sdW1uOiAnLCBwcmV2aXVzQ29sdW1uKTtcbiAgLy8gICBjb25zb2xlLmxvZygnY3VycmVudCBjbHVtbjogJywgY3VycmVudENvbHVtbik7XG4gIC8vIH1cblxuICAvLyBvbkRyYWdFbmQoZGF0YTogYW55KSB7XG4gIC8vICAgdGhpcy5kcmFnZ2luZ0NvbHVtbiA9IG51bGw7XG4gIC8vICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IG51bGw7XG4gIC8vIH1cblxuICAvLyBDREsgRFJBRyBEUk9QIExPR0lDIEdPRVMgSEVSRVxuXG5cbiAgY2FuRW50ZXJUb1Jvd3NHcm91cGluZyA9IChkcmFnOiBDZGtEcmFnPGFueT4sIGRyb3A6IENka0Ryb3BMaXN0PGFueT4pID0+IHtcbiAgICAvLyBFeGFtcGxlOiBCbG9jayBpZiBhbHJlYWR5IHBpbm5lZCBsZWZ0XG4gICAgY29uc3QgZGF0YSA9IGRyYWcuZGF0YTtcbiAgICBpZiAoZGF0YT8uY2hpbGRyZW4gJiYgZGF0YT8uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZGF0YS5jaGlsZHJlbi5zb21lKFxuICAgICAgICAoY29sOiBhbnkpID0+IGNvbC5pc192aXNpYmxlICYmIGNvbC5pc19ncm91cGFibGVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhLmlzX3Zpc2libGUgJiYgZGF0YS5pc19ncm91cGFibGU7XG4gIH07XG5cbiAgLy8gb25EcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlPGFueT4pIHtcbiAgLy8gICBjb25zdCBwb2ludGVyWCA9IGV2ZW50LnBvaW50ZXJQb3NpdGlvbi54O1xuICAvLyAgIGNvbnN0IHBvaW50ZXJZID0gZXZlbnQucG9pbnRlclBvc2l0aW9uLnk7XG5cbiAgLy8gICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gIC8vICAgICAncm93cy1ncm91cGluZy10b3AtY29udGFpbmVyJ1xuICAvLyAgICk7XG5cbiAgLy8gICBpZiAodGFyZ2V0RWxlbWVudCkge1xuICAvLyAgICAgY29uc3QgcmVjdCA9IHRhcmdldEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgLy8gICAgIGNvbnN0IGlzT3ZlclRhcmdldCA9XG4gIC8vICAgICAgIHBvaW50ZXJYID49IHJlY3QubGVmdCAmJlxuICAvLyAgICAgICBwb2ludGVyWCA8PSByZWN0LnJpZ2h0ICYmXG4gIC8vICAgICAgIHBvaW50ZXJZID49IHJlY3QudG9wICYmXG4gIC8vICAgICAgIHBvaW50ZXJZIDw9IHJlY3QuYm90dG9tO1xuXG4gIC8vICAgICBpZiAoaXNPdmVyVGFyZ2V0KSB7XG4gIC8vICAgICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IHRydWU7XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cblxuICBlbnRlclRvVG9wUm93R3JvdXBpbmcoZHJvcExpc3Q6IENka0RyYWdFbnRlcjxhbnk+KSB7XG4gICAgY29uc3QgZHJhZ2dpbmdEYXRhID0gZHJvcExpc3QuaXRlbS5kYXRhO1xuICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IHRydWU7XG4gICAgLy8gY29uc29sZS5sb2coXCJEcmFnZ2luZyBpbiBncm91cCBhcmVhXCIpXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZHJhZ2dpbmdEYXRhPy5jaGlsZHJlbikpIHtcbiAgICAgIGNvbnN0IHRhcmdldEdyb3VwID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAgIChjb2wpID0+IGNvbC5oZWFkZXIgPT09IGRyYWdnaW5nRGF0YS5oZWFkZXJcbiAgICAgICk7XG4gICAgICBpZiAodGFyZ2V0R3JvdXApIHtcbiAgICAgICAgZHJhZ2dpbmdEYXRhLmNoaWxkcmVuLmZvckVhY2goKGRyYWdnZWRDaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IHRhcmdldEdyb3VwLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnZWRDaGlsZC5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nQ2hpbGQpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ2hpbGQuaXNSb3dHcm91cGVkID0gISFtYXRjaGluZ0NoaWxkLmlzX2dyb3VwYWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIFRyeSBmaW5kaW5nIGl0IGluIHRvcC1sZXZlbCBjb2x1bW5zIGZpcnN0XG4gICAgICBsZXQgdGFyZ2V0Q29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpZWxkID09PSBkcmFnZ2luZ0RhdGEuZmllbGRcbiAgICAgICk7XG5cbiAgICAgIGlmICh0YXJnZXRDb2x1bW4pIHtcbiAgICAgICAgdGFyZ2V0Q29sdW1uLmlzUm93R3JvdXBlZCA9ICEhdGFyZ2V0Q29sdW1uLmlzX2dyb3VwYWJsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGdyb3VwIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dpbmdEYXRhLmZpZWxkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nQ2hpbGQpIHtcbiAgICAgICAgICAgICAgbWF0Y2hpbmdDaGlsZC5pc1Jvd0dyb3VwZWQgPSAhIW1hdGNoaW5nQ2hpbGQuaXNfZ3JvdXBhYmxlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDinIUgUmVmcmVzaCBVSVxuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25Ecm9wTGlzdEVudGVyKFxuICAgIGRyb3BMaXN0OiBDZGtEcmFnRW50ZXI8YW55PixcbiAgICBzZWN0aW9uOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCdcbiAgKSB7XG4gICAgY29uc3QgZHJhZ2dpbmdEYXRhID0gZHJvcExpc3QuaXRlbS5kYXRhO1xuXG4gICAgY29uc3QgdGFyZ2V0Q29sdW1uOiBhbnkgPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgIChjb2wpID0+IGNvbC5oZWFkZXIgPT0gZHJhZ2dpbmdEYXRhLmhlYWRlclxuICAgICk7XG5cbiAgICBpZiAoIXRhcmdldENvbHVtbikgcmV0dXJuO1xuXG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShkcmFnZ2luZ0RhdGE/LmNoaWxkcmVuKSAmJlxuICAgICAgQXJyYXkuaXNBcnJheSh0YXJnZXRDb2x1bW4/LmNoaWxkcmVuKVxuICAgICkge1xuICAgICAgZHJhZ2dpbmdEYXRhLmNoaWxkcmVuLmZvckVhY2goKGRyYWdnZWRDaGlsZDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSB0YXJnZXRDb2x1bW4uY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnZWRDaGlsZC5maWVsZFxuICAgICAgICApO1xuICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgIG1hdGNoaW5nQ2hpbGQucGlubmVkID0gc2VjdGlvbiA9PT0gJ2NlbnRlcicgPyBudWxsIDogc2VjdGlvbjtcbiAgICAgICAgICBtYXRjaGluZ0NoaWxkWydpc1Jvd0dyb3VwZWQnXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0Q29sdW1uLnBpbm5lZCA9IHNlY3Rpb24gPT09ICdjZW50ZXInID8gbnVsbCA6IHNlY3Rpb247XG4gICAgICB0YXJnZXRDb2x1bW5bJ2lzUm93R3JvdXBlZCddID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyBlbnRlclRvVG9wR3JvdXBpbmdSb3coZHJvcExpc3Q6IENka0RyYWdFbnRlcjxhbnk+KSB7XG4gIC8vICAgdGhpcy5zaG91bGREaXNhYmxlRHJvcGxpc3RTb3J0aW5nID0gdGhpcy5pc0Rpc2FibGVDb2x1bW5Hcm91cGluZztcbiAgLy8gICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSB0cnVlO1xuICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gY29uc3QgaW5kZXggPSB0aGlzLmdyb3VwZWRDb2x1bW5zLmZpbmRJbmRleChcbiAgLy8gICAoY29sKSA9PiBjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAvLyApO1xuICAvLyBpZiAoaW5kZXggIT09IC0xKSB7XG4gIC8vICAgdGhpcy5ncm91cGVkQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAvLyB9XG5cbiAgLy8gLy8gMi4gVHJhdmVyc2UgdGhpcy5jb2x1bW5zIHRvIGZpbmQgYW5kIHVwZGF0ZSB0aGUgbWF0Y2hpbmcgY29sdW1uXG4gIC8vIHRoaXMuY29sdW1ucy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAvLyAgIGlmIChncm91cD8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShncm91cC5jaGlsZHJlbikpIHtcbiAgLy8gICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gIC8vICAgICAgIGlmIChjaGlsZC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gIC8vICAgICAgICAgY2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pO1xuICAvLyAgIH0gZWxzZSBpZiAoZ3JvdXAuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAvLyAgICAgZ3JvdXAuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gIC8vICAgfVxuICAvLyB9KTtcbiAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIH1cblxuICBleGl0ZWRGcm9tVGhlVG9wUm93KGRyb3BMaXN0OiBDZGtEcmFnRXhpdDxhbnk+KSB7XG4gICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gZmFsc2U7XG4gICAgdGhpcy5pc0Rpc2FibGVDb2x1bW5Hcm91cGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvdWxkRGlzYWJsZURyb3BsaXN0U29ydGluZyA9IGZhbHNlO1xuICAgIGNvbnN0IGRyYWdnaW5nRGF0YSA9IGRyb3BMaXN0Lml0ZW0uZGF0YTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkcmFnZ2luZ0RhdGE/LmNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgdGFyZ2V0R3JvdXAgPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbCkgPT4gY29sLmhlYWRlciA9PT0gZHJhZ2dpbmdEYXRhLmhlYWRlclxuICAgICAgKTtcbiAgICAgIGlmICh0YXJnZXRHcm91cCkge1xuICAgICAgICBkcmFnZ2luZ0RhdGEuY2hpbGRyZW4uZm9yRWFjaCgoZHJhZ2dlZENoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gdGFyZ2V0R3JvdXAuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dlZENoaWxkLmZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgICAgbWF0Y2hpbmdDaGlsZC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdGFyZ2V0Q29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpZWxkID09PSBkcmFnZ2luZ0RhdGEuZmllbGRcbiAgICAgICk7XG5cbiAgICAgIGlmICh0YXJnZXRDb2x1bW4pIHtcbiAgICAgICAgdGFyZ2V0Q29sdW1uLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgZ3JvdXAgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gZ3JvdXAuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2luZ0RhdGEuZmllbGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBzaG91bGREaXNhYmxlRHJvcGxpc3RTb3J0aW5nID0gZmFsc2U7XG4gIGlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gZmFsc2U7XG4gIGNoZWNrQ29sdW1uR3JvdXBpbmdTdGF0dXMoY29sOiBhbnkpIHtcbiAgICBpZiAoY29sPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikpIHtcbiAgICAgIGNvbnN0IGFsbENoaWxkcmVuRGlzYWJsZWQgPSBjb2wuY2hpbGRyZW4uZXZlcnkoXG4gICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5pc19ncm91cGFibGUgPT09IGZhbHNlXG4gICAgICApO1xuICAgICAgdGhpcy5pc0Rpc2FibGVDb2x1bW5Hcm91cGluZyA9IGFsbENoaWxkcmVuRGlzYWJsZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgPSBjb2wuaXNfZ3JvdXBhYmxlID09PSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY3VycmVudERyYWdnaW5nQ29sdW1uOiBhbnkgPSBudWxsO1xuICBkcmFnU3RhcnRPbkdyb3VwKGNvbDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4gPSBjb2w7XG4gIH1cblxuICBvblNvcnRHcm91cCA9IGFzeW5jIChldmVudDogQ2RrRHJhZ1NvcnRFdmVudDxhbnk+LCBzZWN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBjb2x1bW5zID0gKHRoaXMgYXMgYW55KVtzZWN0aW9uXTtcbiAgICBpZiAoZXZlbnQucHJldmlvdXNJbmRleCA9PT0gZXZlbnQuY3VycmVudEluZGV4KSByZXR1cm47XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoY29sOiBhbnkpID0+IHtcbiAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xuICAgICAgICByZXR1cm4gY29sLmNoaWxkcmVuLnNvbWUoKGNoaWxkOiBhbnkpID0+IGNoaWxkLmlzX3Zpc2libGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbC5pc192aXNpYmxlO1xuICAgIH0pO1xuICAgIGNvbnN0IHByZXZpb3VzSGVhZGVyID0gdmlzaWJsZUNvbHVtbnNbZXZlbnQucHJldmlvdXNJbmRleF0uaGVhZGVyO1xuICAgIGNvbnN0IGN1cnJlbnRIZWFkZXIgPSB2aXNpYmxlQ29sdW1uc1tldmVudC5jdXJyZW50SW5kZXhdLmhlYWRlcjtcbiAgICBjb25zdCB2aXNpYmxlUHJldkluZGV4ID0gdmlzaWJsZUNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuaGVhZGVyID09PSBwcmV2aW91c0hlYWRlclxuICAgICk7XG4gICAgY29uc3QgdmlzaWJsZUN1cnJJbmRleCA9IHZpc2libGVDb2x1bW5zLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmhlYWRlciA9PT0gY3VycmVudEhlYWRlclxuICAgICk7XG4gICAgY29uc3QgZ2V0RmllbGRzID0gKGl0ZW06IGFueSk6IHN0cmluZ1tdID0+IHtcbiAgICAgIGlmIChpdGVtPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmNoaWxkcmVuLm1hcCgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtpdGVtLmZpZWxkXTtcbiAgICB9O1xuICAgIGNvbnN0IHByZXZGaWVsZHMgPSBnZXRGaWVsZHModmlzaWJsZUNvbHVtbnNbdmlzaWJsZVByZXZJbmRleF0pO1xuICAgIGNvbnN0IGN1cnJGaWVsZHMgPSBnZXRGaWVsZHModmlzaWJsZUNvbHVtbnNbdmlzaWJsZUN1cnJJbmRleF0pO1xuICAgIGNvbnN0IGFsbEZpZWxkcyA9IFsuLi5wcmV2RmllbGRzLCAuLi5jdXJyRmllbGRzXTtcbiAgICBjb25zdCBjZWxscyA9IGFsbEZpZWxkcy5sZW5ndGhcbiAgICAgID8gKFtdIGFzIEhUTUxFbGVtZW50W10pLmNvbmNhdChcbiAgICAgICAgLi4uYWxsRmllbGRzLm1hcCgoZmllbGQpID0+XG4gICAgICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApKSBhcyBIVE1MRWxlbWVudFtdXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIDogW107XG4gICAgY29uc3QgZmlyc3RQb3NpdGlvbnMgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBudW1iZXI+KCk7XG4gICAgY2VsbHMuZm9yRWFjaCgoZWwpID0+IGZpcnN0UG9zaXRpb25zLnNldChlbCwgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwidGhpcyAuY29sdW5zXCIsIHRoaXMuY29sdW1ucyk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KCh0aGlzIGFzIGFueSlbc2VjdGlvbl0sIHZpc2libGVQcmV2SW5kZXgsIHZpc2libGVDdXJySW5kZXgpO1xuXG4gICAgY29uc3QgcHJldkNvbEluZGV4SW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaGVhZGVyID09PSBwcmV2aW91c0hlYWRlcik7XG4gICAgY29uc3QgY3VyckNvbEluZGV4SW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaGVhZGVyID09PSBjdXJyZW50SGVhZGVyKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5jb2x1bW5zLCBwcmV2Q29sSW5kZXhJbkNvbHVtbnMsIGN1cnJDb2xJbmRleEluQ29sdW1ucyk7XG4gICAgLy8gYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5uZ1pvbmUub25TdGFibGUpO1xuICAgIC8vIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAvLyBXYWl0IGEgdGljayB0byBtYWtlIHN1cmUgZWxlbWVudHMgYXJlIHJlbmRlcmVkXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGFsbEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkQ2VsbHMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYClcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gICAgICAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9sZExlZnQgPSBmaXJzdFBvc2l0aW9ucy5nZXQoZWwpO1xuICAgICAgICAgIGlmIChvbGRMZWZ0ID09IG51bGwpIHJldHVybjsgLy8gc2tpcCBpZiBvbGQgcG9zaXRpb24gbm90IGF2YWlsYWJsZVxuXG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcblxuICAgICAgICAgICAgLy8gRm9yY2UgcmVmbG93XG4gICAgICAgICAgICB2b2lkIGVsLm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyB9KTtcbiAgfVxuXG5cbiAgb25Ecm9wR3JvdXAoKSB7XG4gICAgdGhpcy5sZWZ0UGlubmVkQ29sdW1ucyA9IHRoaXMuZGVlcENsb25lQ29sdW1ucyh0aGlzLnByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyk7XG4gICAgdGhpcy5jZW50ZXJDb2x1bW5zID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHRoaXMucHJldmlld0NlbnRlckNvbHVtbnMpO1xuICAgIHRoaXMucmlnaHRQaW5uZWRDb2x1bW5zID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHRoaXMucHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVlcENsb25lQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sdW1ucykpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBjb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnkgPyB7IC4uLmNvbC5xdWVyeSB9IDogbnVsbCxcbiAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogQXJyYXkuaXNBcnJheShjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKVxuICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICA6IFtdLFxuICAgICAgLy8gUmVjdXJzaXZlbHkgZGVlcCBjbG9uZSBjaGlsZHJlbiBpZiBwcmVzZW50XG4gICAgICBjaGlsZHJlbjogQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pXG4gICAgICAgID8gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKGNvbC5jaGlsZHJlbilcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSkpO1xuICB9XG5cblxuICBhc3luYyBvbkRyb3BUb3BHcm91cChldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xuICAgIGlmICh0aGlzLmlzT3V0c2lkZUNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBkcmFnZ2VkRGF0YSA9IGV2ZW50Lml0ZW0uZGF0YTtcbiAgICBpZiAoZHJhZ2dlZERhdGE/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoZHJhZ2dlZERhdGEuY2hpbGRyZW4pKSB7XG4gICAgICBkcmFnZ2VkRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sLmlzX3Zpc2libGUgJiYgY29sLmlzX2dyb3VwYWJsZSkge1xuICAgICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRyYWdnZWREYXRhLmlzX3Zpc2libGUgJiYgZHJhZ2dlZERhdGEuaXNfZ3JvdXBhYmxlKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChkcmFnZ2VkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBbXTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgb25Hcm91cFJlb3JkZXIoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmdyb3VwZWRDb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMDApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IHRoaXMuY29sdW1uc0dyb3VwZWRCb3g/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICB9LCAxMCk7XG4gIH1cblxuICBhc3luYyB1bmdyb3VwQ29sdW1uKGNvbHVtbjogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtbnMuZmluZEluZGV4KFxuICAgICAgICAoY29sKSA9PiBjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICBpZiAoZ3JvdXA/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgY2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIGdyb3VwLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sIDEwMDApO1xuXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gdW5ncm91cENvbHVtbjpcIiwgZXJyKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIHNob3VsZFRoZUdyb3VwSGVhZGVyU2hvdyhncm91cDogYW55KSB7XG4gICAgaWYgKGdyb3VwPy5jaGlsZHJlbiAmJiBncm91cC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBncm91cC5jaGlsZHJlbi5zb21lKFxuICAgICAgICAoY29sOiBhbnkpID0+IGNvbC5pc192aXNpYmxlICYmICFjb2w/LmlzUm93R3JvdXBlZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwPy5pc192aXNpYmxlICYmICFncm91cD8uaXNSb3dHcm91cGVkO1xuICB9XG5cblxuICAvLyBvbkNoaWxkRHJhZ1N0YXJ0KCkge1xuICAvLyAgIGRlYnVnZ2VyO1xuICAvLyB9XG5cbiAgLy8gZHJvcExpc3RJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gZ2VuZXJhdGVEcm9wTGlzdElkcygpIHtcbiAgLy8gICB0aGlzLmRyb3BMaXN0SWRzID0gW107XG5cbiAgLy8gICBjb25zdCBzZWN0aW9uS2V5cyA9IFtcbiAgLy8gICAgICdsZWZ0UGlubmVkQ29sdW1ucycsXG4gIC8vICAgICAnY2VudGVyQ29sdW1ucycsXG4gIC8vICAgICAncmlnaHRQaW5uZWRDb2x1bW5zJyxcbiAgLy8gICBdO1xuXG4gIC8vICAgc2VjdGlvbktleXMuZm9yRWFjaCgoc2VjdGlvbktleSkgPT4ge1xuICAvLyAgICAgY29uc3Qgc2VjdGlvbkNvbHMgPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25LZXldO1xuXG4gIC8vICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAvLyAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICAgIGNvbC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55LCBjaGlsZEluZGV4OiBudW1iZXIpID0+IHtcbiAgLy8gICAgICAgICAgIGlmIChjaGlsZD8uaXNfdmlzaWJsZSAmJiAhY2hpbGQuaXNSb3dHcm91cGVkKSB7XG4gIC8vICAgICAgICAgICAgIGNvbnN0IGlkID0gYCR7c2VjdGlvbktleX0ke2l9YDtcbiAgLy8gICAgICAgICAgICAgdGhpcy5kcm9wTGlzdElkcy5wdXNoKGlkKTtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9KTtcbiAgLy8gICAgICAgfSBlbHNlIGlmIChjb2w/LmlzX3Zpc2libGUgJiYgIWNvbC5pc1Jvd0dyb3VwZWQpIHtcbiAgLy8gICAgICAgICBjb25zdCBpZCA9IGAke3NlY3Rpb25LZXl9JHtpfWA7XG4gIC8vICAgICAgICAgdGhpcy5kcm9wTGlzdElkcy5wdXNoKGlkKTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBvbkNoaWxkRHJvcGxpc3RTb3J0ZWQgPSBhc3luYyAoZXZlbnQ6IENka0RyYWdTb3J0RXZlbnQ8YW55Piwgc2VjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggPT09IGV2ZW50LmN1cnJlbnRJbmRleCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGlubmVkID1cbiAgICAgIHNlY3Rpb24gPT0gJ3ByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucydcbiAgICAgICAgPyAnbGVmdCdcbiAgICAgICAgOiBzZWN0aW9uID09ICdwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zJ1xuICAgICAgICAgID8gJ3JpZ2h0J1xuICAgICAgICAgIDogXCJcIjtcblxuICAgIGNvbnN0IGNvbHVtbiA9IGV2ZW50Lml0ZW0uZGF0YTtcbiAgICBsZXQgZ3JvdXAgPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgIChjb2w6IGFueSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmXG4gICAgICAgIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZD8uZmllbGQgPT09IGNvbHVtbj8uZmllbGQpXG4gICAgKTtcbiAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChcbiAgICAgIChjb2wpID0+IGNvbC5oZWFkZXIgPT09IGdyb3VwLmhlYWRlclxuICAgICk7XG4gICAgY29uc3QgZmlsdGVyZWRHcm91cCA9IGdyb3VwPy5jaGlsZHJlbi5maWx0ZXIoKGNvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBpc1Bpbm5lZE1hdGNoID1cbiAgICAgICAgKHBpbm5lZCA9PT0gXCJcIiAmJiAoIWNvbD8ucGlubmVkIHx8IGNvbD8ucGlubmVkID09PSBcIlwiKSkgfHwgY29sPy5waW5uZWQgPT09IHBpbm5lZDtcbiAgICAgIHJldHVybiBpc1Bpbm5lZE1hdGNoICYmIGNvbD8uaXNfdmlzaWJsZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByZXZpb3VzRmllbGQgPSBmaWx0ZXJlZEdyb3VwW2V2ZW50LnByZXZpb3VzSW5kZXhdLmZpZWxkO1xuICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IGZpbHRlcmVkR3JvdXBbZXZlbnQuY3VycmVudEluZGV4XS5maWVsZDtcbiAgICBjb25zdCB2aXNpYmxlUHJldkluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT0gcHJldmlvdXNGaWVsZFxuICAgICk7XG4gICAgY29uc3QgdmlzaWJsZUN1cnJJbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpZWxkID09IGN1cnJlbnRGaWVsZFxuICAgICk7XG4gICAgY29uc3QgYWxsRmllbGRzID0gW3ByZXZpb3VzRmllbGQsIGN1cnJlbnRGaWVsZF07XG4gICAgY29uc3QgY2VsbHMgPSBhbGxGaWVsZHMubGVuZ3RoXG4gICAgICA/IChbXSBhcyBIVE1MRWxlbWVudFtdKS5jb25jYXQoXG4gICAgICAgIC4uLmFsbEZpZWxkcy5tYXAoKGZpZWxkKSA9PlxuICAgICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXVxuICAgICAgICApXG4gICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgZ3JvdXBJblNlY3Rpb24gPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dLmZpbmQoXG4gICAgICAoY29sOiBhbnkpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJlxuICAgICAgICBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQ/LmZpZWxkID09PSBjb2x1bW4/LmZpZWxkKVxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJHcm91cEluU2VjdGlvbiA9ICh0aGlzIGFzIGFueSlbc2VjdGlvbl0uZmluZChcbiAgICAgIChjb2w6IGFueSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmXG4gICAgICAgIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZD8uZmllbGQgPT09IGNvbHVtbj8uZmllbGQpXG4gICAgKTtcblxuICAgIGNvbnN0IGdyb3VwSW5TZWN0aW9uSW5kZXggPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmhlYWRlciA9PT0gZ3JvdXBJblNlY3Rpb24uaGVhZGVyXG4gICAgKTtcblxuICAgIGNvbnN0IGZpcnN0UG9zaXRpb25zID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgbnVtYmVyPigpO1xuICAgIGNlbGxzLmZvckVhY2goKGVsKSA9PiBmaXJzdFBvc2l0aW9ucy5zZXQoZWwsIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICB0aGlzLmNvbHVtbnNbZ3JvdXBJbmRleF0/LmNoaWxkcmVuLFxuICAgICAgdmlzaWJsZVByZXZJbmRleCxcbiAgICAgIHZpc2libGVDdXJySW5kZXhcbiAgICApO1xuXG4gICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgKHRoaXMgYXMgYW55KVtzZWN0aW9uXT8uW2dyb3VwSW5TZWN0aW9uSW5kZXhdLmNoaWxkcmVuLFxuICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICk7XG5cbiAgICAvLyBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmdab25lLm9uU3RhYmxlKTtcbiAgICAvLyBhbGxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAvLyAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oXG4gICAgLy8gICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYClcbiAgICAvLyAgICkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAvLyAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgIC8vICAgICBjb25zdCBuZXdMZWZ0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAvLyAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCkhO1xuICAgIC8vICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcbiAgICAvLyAgICAgaWYgKGRlbHRhWCAhPT0gMCkge1xuICAgIC8vICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgICAvLyAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgIC8vICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7ZGVsdGFYfXB4KWA7XG4gICAgLy8gICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAvLyAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJztcbiAgICAvLyAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwKSc7XG5cbiAgICAvLyAgICAgICBjb25zdCBoYW5kbGUgPSAoKSA9PiB7XG4gICAgLy8gICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG4gICAgLy8gICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAvLyAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAnJztcbiAgICAvLyAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgIC8vICAgICAgIH07XG4gICAgLy8gICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH0pO1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgYWxsRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKVxuICAgICAgICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgICAgICAgdXBkYXRlZENlbGxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCk7XG4gICAgICAgICAgaWYgKG9sZExlZnQgPT0gbnVsbCkgcmV0dXJuOyAvLyBzYWZldHkgY2hlY2tcblxuICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG9sZExlZnQgLSBuZXdMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRlbHRhWCAhPT0gMCkge1xuICAgICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7ZGVsdGFYfXB4KWA7XG5cbiAgICAgICAgICAgIC8vIEZvcmNlIHJlZmxvd1xuICAgICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcblxuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICd0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwKSc7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICcnO1xuICAgICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBjb25zb2xlLmdyb3VwKCdHcm91cDogJywgZ3JvdXApO1xuICB9XG5cblxuICBvbkNoaWxkRHJvcGxpc3REcm9wZWQoY2RrRHJhZ0Ryb3BldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xuICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDIpO1xuICB9XG5cbiAgLy8gUm93cyBHcm91cGluZyBMb2dpYyBHb2VzIEhlcmVcblxuICBncm91cERhdGEoZGF0YTogYW55W10sIGdyb3VwRmllbGRzOiBzdHJpbmdbXSk6IGFueVtdIHtcbiAgICBsZXQgZGF0YVNldCA9IHN0cnVjdHVyZWRDbG9uZShkYXRhKTtcbiAgICBpZiAoIWdyb3VwRmllbGRzLmxlbmd0aCkgcmV0dXJuIGRhdGE7XG4gICAgY29uc3QgW2N1cnJlbnRGaWVsZCwgLi4ucmVzdEZpZWxkc10gPSBncm91cEZpZWxkcztcbiAgICBjb25zdCBncm91cGVkTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPigpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU2V0KSB7XG4gICAgICBsZXQga2V5VmFsdWUgPSBjdXJyZW50RmllbGQuc3BsaXQoJy4nKS5yZWR1Y2UoKG9iaiwgaykgPT4gb2JqPy5ba10sIGl0ZW0pO1xuICAgICAgbGV0IGdyb3VwS2V5OiBzdHJpbmc7XG4gICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgaXNfZGVsZXRlZCBmaWVsZFxuICAgICAgaWYgKGN1cnJlbnRGaWVsZCA9PT0gJ2lzX2RlbGV0ZWQnIHx8IGN1cnJlbnRGaWVsZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpc19kZWxldGVkJykpIHtcbiAgICAgIGlmIChrZXlWYWx1ZSA9PT0gdHJ1ZSB8fCBrZXlWYWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIGdyb3VwS2V5ID0gJ0FyY2hpdmVkJztcbiAgICAgIH0gZWxzZSBpZiAoa2V5VmFsdWUgPT09IGZhbHNlIHx8IGtleVZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgIGdyb3VwS2V5ID0gJ1VuYXJjaGl2ZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBLZXkgPSBcIl9CbGFua1wiO1xuICAgICAgfVxuICAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleVZhbHVlKSkge1xuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBcIl9CbGFua1wiO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlWYWx1ZVswXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWVcbiAgICAgICAgICAgIC5tYXAob2JqID0+IChvYmo/LmRlcGFydG1lbnRfbmFtZSB8fCBvYmoucm9sZU5hbWUgfHwgb2JqPy5mdWxsX25hbWUpID8/IFwiX0JsYW5rXCIpXG4gICAgICAgICAgICAuam9pbihcIixcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBrZXlWYWx1ZVxuICAgICAgICAgICAgLm1hcCh2YWwgPT4gdmFsID8/IFwiX0JsYW5rXCIpXG4gICAgICAgICAgICAuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgICAgLy8gQ2hlY2sgZm9yIERhdGUgb2JqZWN0IE9SIGRhdGUgc3RyaW5nXG4gICAgZWxzZSBpZiAoa2V5VmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8ICh0eXBlb2Yga2V5VmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihEYXRlLnBhcnNlKGtleVZhbHVlKSkpKSB7XG4gICAgICBjb25zdCBkYXRlT2JqID0ga2V5VmFsdWUgaW5zdGFuY2VvZiBEYXRlID8ga2V5VmFsdWUgOiBuZXcgRGF0ZShrZXlWYWx1ZSk7XG4gICAgICBncm91cEtleSA9IHRoaXMuY29tbW9uU2V2aWNlLmZvcm1hdERhdGVWYWx1ZShkYXRlT2JqLCB0aGlzLmRhdGVGb3JtYXQgfHwgJ2RkL01NL3l5eXknKTtcbiAgICB9IFxuICAgICAgZWxzZSB7XG4gICAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWUgPyB0aGlzLnRvVGl0bGVDYXNlKFN0cmluZyhrZXlWYWx1ZSkudHJpbSgpKSA6IFwiX0JsYW5rXCI7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIGlmICh0eXBlb2Yga2V5VmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihEYXRlLnBhcnNlKGtleVZhbHVlKSkpIHtcbiAgICAgIC8vICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGtleVZhbHVlKTtcbiAgICAgIC8vICAgZ3JvdXBLZXkgPSB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUoZGF0ZU9iaiwgdGhpcy5kYXRlRm9ybWF0IHx8ICdkZC9NTS95eXl5Jyk7XG4gICAgICAvLyB9XG5cbiAgICAgIGlmICghZ3JvdXBlZE1hcC5oYXMoZ3JvdXBLZXkpKSBncm91cGVkTWFwLnNldChncm91cEtleSwgW10pO1xuICAgICAgZ3JvdXBlZE1hcC5nZXQoZ3JvdXBLZXkpIS5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cGVkTWFwLmVudHJpZXMoKSkubWFwKChbZ3JvdXBWYWx1ZSwgZ3JvdXBJdGVtc10pID0+ICh7XG4gICAgICBpc0dyb3VwOiB0cnVlLFxuICAgICAgZ3JvdXBGaWVsZDogY3VycmVudEZpZWxkLFxuICAgICAgZ3JvdXBWYWx1ZSxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmdyb3VwRGF0YShncm91cEl0ZW1zLCByZXN0RmllbGRzKSxcbiAgICAgIGlzRXhwYW5kOiBmYWxzZSxcbiAgICB9KSk7XG4gIH1cblxuICB0b1RpdGxlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgPy50b0xvd2VyQ2FzZSgpXG4gICAgICA/LnNwbGl0KCcgJylcbiAgICAgID8ubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXG4gICAgICA/LmpvaW4oJyAnKTtcbiAgfVxuXG5cbiAgY291bnRMZWFmUm93cyhncm91cDogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoIWdyb3VwLmNoaWxkcmVuIHx8ICFncm91cC5jaGlsZHJlbi5sZW5ndGgpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIGdyb3VwLmNoaWxkcmVuLnJlZHVjZSgoY291bnQ6IG51bWJlciwgY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKGNoaWxkLmlzR3JvdXAgPyB0aGlzLmNvdW50TGVhZlJvd3MoY2hpbGQpIDogMSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBpc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgdG9nZ2xlQWN0aXZlRmlsdGVyKCkge1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gIXRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9ucyh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZSA9PT0gdGhpcy5hY3RpdmVUb3BCdXR0b24pIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gdHlwZTtcbiAgICBlbHNlIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gdHlwZTtcbiAgICB0aGlzLmFjdGl2ZVN1YkJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYWN0aXZlU3ViQnV0dG9uID0gJyc7XG4gIHRvZ2dsZVN1YkFjdGlvbnModHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/ICAodGhpcy5wcmVzZXROYW1lID0gJycpIDogKCB0aGlzLnByZXNldE5hbWUgPSAgdGhpcy5zdG9yZVByZXNldE5hbWUpXG4gICAgaWYgKHR5cGUgPT09IHRoaXMuYWN0aXZlU3ViQnV0dG9uKSB0aGlzLmFjdGl2ZVN1YkJ1dHRvbiA9ICcnO1xuICAgIGVsc2UgdGhpcy5hY3RpdmVTdWJCdXR0b24gPSB0eXBlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRvZ2dsZUFjdGlvbnNEcm9wZG93bigpIHtcbiAgICB0aGlzLnNob3dBY3Rpb25zRHJvcERvd24gPSAhdGhpcy5zaG93QWN0aW9uc0Ryb3BEb3duO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuICBhc3luYyBjaGFuZ2VUYWJsZUxheW91dChldmVudDogRXZlbnQsIGxheW91dFR5cGU6IHN0cmluZykge1xuICAgIGxldCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIGlmICh0YXJnZXQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gbGF5b3V0VHlwZTtcbiAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQobGF5b3V0VHlwZSlcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3ModGhpcy5tYWluU2Nyb2xsPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxUb3ApO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgfVxuICAgIHRoaXMub25Gb250Q2hhbmdlKClcbiAgfVxuXG4gIHNldFRhYmxlTGF5b3V0KGxheW91dFR5cGU6IHN0cmluZykge1xuICAgIGlmICghbGF5b3V0VHlwZSkgcmV0dXJuO1xuICAgIGlmIChsYXlvdXRUeXBlID09PSAnc21hbGwnKSB7XG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDM2O1xuICAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSA0MDtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDEwO1xuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDEwO1xuXG4gICAgfSBlbHNlIGlmIChsYXlvdXRUeXBlID09PSAnbWVkaXVtJykge1xuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA0NDtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gNDQ7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNDtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNDtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDYwO1xuICAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSA1MjtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE2O1xuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDE2O1xuICAgIH1cbiAgICAvLyB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc3RhcnRJbmRleERhdGEoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpICogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0O1xuICB9XG5cbiAgZ2V0IGVuZEluZGV4KCkge1xuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnN0YXJ0SW5kZXggKyB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQsIHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVQYWdlcygpOiAobnVtYmVyIHwgc3RyaW5nKVtdIHtcbiAgICBjb25zdCBwYWdlczogKG51bWJlciB8IHN0cmluZylbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIDw9IDcpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzOyBpKyspIHtcbiAgICAgICAgcGFnZXMucHVzaChpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZXMucHVzaCgxKTtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA+IDMpIHtcbiAgICAgICAgcGFnZXMucHVzaCgnLi4uJyk7XG4gICAgICB9XG4gICAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgyLCB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpO1xuICAgICAgbGV0IGVuZCA9IE1hdGgubWluKHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIC0gMSwgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgKyAxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA8IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIC0gMikge1xuICAgICAgICBwYWdlcy5wdXNoKCcuLi4nKTtcbiAgICAgIH1cbiAgICAgIHBhZ2VzLnB1c2godGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG5cbiAgc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duID0gJyc7XG4gIHRvZ2dsZUNvbHVtbkluRmlsdGVyRHJvcGRvd24oY29sOiBhbnkpIHtcblxuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRnJvbUZpbHRlcihvcHRpb246IGFueSkge1xuXG4gIH1cblxuICBoYW5kbGVCYWNrc3BhY2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gSWYgc2VhcmNoIGlzIGVtcHR5LCByZW1vdmUgbGFzdCB0YWdcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duICYmIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zW3RoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihsYXN0KTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCdmaWx0ZXJNZW51ZVNlYXJjaElucHV0JykgZmlsdGVyTWVudWVTZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD5cbiAgQFZpZXdDaGlsZCgnZmlsdGVyTWVudWVUZXh0Y2hJbnB1dCcpIGZpbHRlck1lbnVlVGV4dGNoSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+XG5cbiAgb3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sOiBhbnkpIHtcbiAgICBpZiAoY29sLnR5cGUgPT0gJ2ltYWdlJyB8fCAhY29sPy50eXBlIHx8ICFjb2wuaXNfc2VhcmNoX2FibGUpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyID0gY29sO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLmFkZEZpbHRlckNvbHVtbklucHV0ID0gJyc7XG4gICAgaWYgKGNvbC50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5jbGVhcigpO1xuICAgICAgY29uc3Qgc2F2ZWRJZHMgPSBjb2w/LnF1ZXJ5Py5faWRzIHx8IFtdO1xuICAgICAgc2F2ZWRJZHMuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5maWx0ZXIoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uKVxuICAgICAgKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJNZW51ZVNlYXJjaElucHV0KSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJNZW51ZVNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2wudHlwZSkpIHtcbiAgICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPSBjb2wucXVlcnkuZmlyc3RfY29uZGl0aW9uID8gY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvbiA6ICgoY29sLnR5cGUgPT0gJ2RhdGUnIHx8IGNvbC50eXBlID09ICd0aW1lJyB8fCBjb2wudHlwZSA9PSAnbnVtYmVyJykgPyAnZXF1YWwnIDogJ2NvbnRhaW4nKTtcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IGNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8ICcnO1xuICAgICAgdGhpcy5jb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5jb25kaXRpb24gfHwgJ25vbmUnO1xuICAgICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfY29uZGl0aW9uID8gY29sPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA6ICgoY29sLnR5cGUgPT0gJ2RhdGUnIHx8IGNvbC50eXBlID09ICd0aW1lJyB8fCBjb2wudHlwZSA9PSAnbnVtYmVyJykgPyAnZXF1YWwnIDogJ2NvbnRhaW4nKTtcbiAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUgfHwgJyc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYoIHRoaXMuZmlsdGVyTWVudWVUZXh0Y2hJbnB1dCl7XG4gICAgICAgICAgdGhpcy5maWx0ZXJNZW51ZVRleHRjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNGaWx0ZXJPcGVuID0gZmFsc2VcbiAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI6IGFueTtcbiAgc2hvd0ZpbHRlcnMgPSB0aGlzLnNob3dTaWRlTWVudSA/IGZhbHNlIDogZmFsc2U7XG5cblxuICBvcGVuRmlsdGVyRnJvbURpc2FibGVkU2VhcmNoZWRJbnB1dChjb2w6IGFueSkge1xuICAgIGlmIChjb2wudHlwZSAhPT0gJ2Ryb3Bkb3duJyAmJiBjb2wudHlwZSAhPT0gJ2FycmF5JyB8fCAhY29sLmlzX3NlYXJjaF9hYmxlKSByZXR1cm47XG4gICAgdGhpcy5vcGVuRmlsdGVyKGNvbCk7XG4gIH1cblxuICBvcGVuRmlsdGVyKGNvbDogYW55KSB7XG4gICAgaWYoIWNvbC5pc19zZWFyY2hfYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IGNvbDtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGxcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5zZWFyY2hUZXh0Rm9yRmlsdGVyRHJvcERvd24gPSAnJztcbiAgICB0aGlzLmFkZEZpbHRlckNvbHVtbklucHV0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlciA9IGNvbDtcblxuICAgIGlmIChjb2wudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2wudHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5jbGVhcigpO1xuICAgICAgY29uc3Qgc2F2ZWRJZHMgPSBjb2w/LnF1ZXJ5Py5faWRzIHx8IFtdO1xuICAgICAgc2F2ZWRJZHMuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5maWx0ZXIoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2wudHlwZSkpIHtcbiAgICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5maXJzdF9jb25kaXRpb24gfHwgKGNvbC50eXBlID09ICdudW1iZXInIHx8IGNvbC50eXBlID09ICd0aW1lJyB8fCBjb2wudHlwZSA9PSAnZGF0ZScpID8gJ2VxdWFsJyA6ICdjb250YWluJztcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IGNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8ICcnO1xuICAgICAgdGhpcy5jb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5jb25kaXRpb24gfHwgJ25vbmUnO1xuICAgICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfY29uZGl0aW9uIHx8KGNvbC50eXBlID09ICdudW1iZXInIHx8IGNvbC50eXBlID09ICd0aW1lJyB8fCBjb2wudHlwZSA9PSAnZGF0ZScpID8gJ2VxdWFsJyA6ICdjb250YWluJztcbiAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUgfHwgJyc7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgZmlyc3RWYWx1ZTogYW55ID0gJyc7XG4gIGZpcnN0Q29uZGl0aW9uID0gJyc7XG4gIHNlY29uZFZhbHVlOiBhbnkgPSAnJztcbiAgc2Vjb25kQ29uZGl0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgY29uZGl0aW9uOiBzdHJpbmcgfCBudWxsID0gJyc7XG5cbiAgcmVzZXRUZXh0RmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLmZpcnN0Q29uZGl0aW9uID0gJ2NvbnRhaW4nO1xuICAgIHRoaXMuZmlyc3RWYWx1ZSA9ICcnO1xuICAgIHRoaXMuY29uZGl0aW9uID0gJ25vbmUnO1xuICAgIHRoaXMuc2Vjb25kQ29uZGl0aW9uID0gbnVsbDtcbiAgICB0aGlzLnNlY29uZFZhbHVlID0gJyc7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gJyc7XG4gIH1cblxuICB0b2dnbGVBbGxWYWx1c1NlbGVjdGlvbkluRHJvcGRvd25GaWx0ZXIoY29sdW1uOiBhbnkpIHtcblxuICB9XG5cblxuICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IGFueVtdID0gW11cblxuICBjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICB0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihvcHRpb246IGFueSkge1xuICAgIGRlYnVnZ2VyXG4gICAgY29uc3QgaWQgPSBvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb247XG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmFkZChpZCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLmZpbHRlcigob3B0aW9uOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb24pKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJlc2V0RmlsdGVyQ2hhbmdlcygpIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMhLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIC8vIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiRmlsdGVyZWQgQ29sdW1ucyBBcmU6IFwiLCBmaWx0ZXJlZENvbHVtbnMpO1xuICB9XG5cbiAgYXBwbHlEcm9wZG93bkZpbHRlcigpIHtcbiAgICAgICAgIC8vIC0tLSBWQUxJREFUSU9OIEJFRk9SRSBBTllUSElORyAtLS1cbiAgY29uc3QgY29sdW1uc3MgPSB0aGlzLmZpbmRDb2x1bW4odGhpcy5jb2x1bW5zLCB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyLmZpZWxkKTtcbiAgaWYgKCFjb2x1bW5zcykgcmV0dXJuO1xuXG4gIGlmIChjb2x1bW5zcy50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbnNzLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzIHx8IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnLCAndGltZSddLmluY2x1ZGVzKGNvbHVtbnNzLnR5cGUpKSB7XG4gICAgY29uc3QgaXNFbXB0eSA9XG4gICAgICB0aGlzLmZpcnN0VmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLmZpcnN0VmFsdWUgPT09ICcnO1xuXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICB0aGlzLmNsb3NlQWxsRXhwYW5kZWRSb3dzKCk7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5maW5kQ29sdW1uKHRoaXMuY29sdW1ucywgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlci5maWVsZCk7XG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbi50eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgY29sdW1uLnF1ZXJ5ID0gY29sdW1uLnF1ZXJ5IHx8IHt9O1xuICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcyA9IGNvbHVtbi5xdWVyeS5faWRzIHx8IFtdO1xuXG4gICAgICAgIC8vIFJlbW92ZSBzdGFsZSBJRHMgKG5vdCBwcmVzZW50IGluIFNldClcbiAgICAgICAgY29sdW1uLnF1ZXJ5Ll9pZHMgPSBjb2x1bW4ucXVlcnkuX2lkcy5maWx0ZXIoXG4gICAgICAgICAgKGlkOiBhbnkpID0+IHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhpZCkgICAvLyA8LS0gdXNlIC5oYXMoKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCBuZXcgb25lcyBpZiBtaXNzaW5nXG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgICAgIGlmICghY29sdW1uLnF1ZXJ5Ll9pZHMuaW5jbHVkZXMoaWQpKSB7XG4gICAgICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcy5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2x1bW4udHlwZSkpIHtcbiAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgIGZpcnN0X2NvbmRpdGlvbjogdGhpcy5maXJzdENvbmRpdGlvbiB8fCAnY29udGFpbicsXG4gICAgICAgICAgZmlyc3RfdmFsdWU6IHRoaXMuZmlyc3RWYWx1ZSB8fCBudWxsLFxuICAgICAgICAgIGNvbmRpdGlvbjogdGhpcy5zZWNvbmRWYWx1ZSA/IHRoaXMuY29uZGl0aW9uIDogJ25vbmUnLFxuICAgICAgICAgIHNlY29uZF9jb25kaXRpb246IHRoaXMuc2Vjb25kVmFsdWUgPyB0aGlzLnNlY29uZENvbmRpdGlvbiA6IG51bGwsXG4gICAgICAgICAgc2Vjb25kX3ZhbHVlOiB0aGlzLnNlY29uZFZhbHVlIHx8IG51bGwsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgIF9pZHM6IGNvbHVtbi5faWRzXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cblxuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxucHJpdmF0ZSBmaW5kQ29sdW1uKGNvbHVtbnM6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogYW55IHtcbiAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSByZXR1cm4gY29sO1xuICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRDb2x1bW4oY29sLmNoaWxkcmVuLCBmaWVsZCk7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4gIC8vIGFwcGx5RmlsdGVyRnJvbUZpbHRlclJvdyhjb2x1bW46IGFueSkge1xuICAvLyAgIGNvbnN0IGZpbHRlciA9IHtcbiAgLy8gICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gIC8vICAgICBzZWFyY2g6IGNvbHVtbi5zZWFyY2gsXG4gIC8vICAgICBxdWVyeTogY29sdW1uLnF1ZXJ5LFxuICAvLyAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gIC8vICAgICBfaWRzOiBjb2x1bW4uX2lkc1xuICAvLyAgIH07XG4gIC8vICAgdGhpcy5maWx0ZXJzQ29uZmlnLnB1c2goZmlsdGVyKTtcbiAgLy8gICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAvLyAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgLy8gICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAvLyAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgLy8gICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJlZENvbHVtbnMpO1xuICAvLyB9XG5cbiAgaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sdW1uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzQ29uZmlnPy5zb21lKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gIH1cblxuICAvLyBTaWRlIEZpbHRlcnMgTG9naWMgaXMgaGVyZVxuXG4gIHRvZ2dsZVNlbGVjdEFsbFNpZGVGaWx0ZXJzKGNvbDogYW55LCBldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCk/LmNoZWNrZWQ7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBjb2w/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubWFwKFxuICAgICAgICAob3B0OiBhbnkpID0+IG9wdC5pZCB8fCBvcHQuX2lkIHx8IG9wdFxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzID0gbmV3IFNldDxzdHJpbmc+KGNvbC5xdWVyeS5faWRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cblxuICBpc0FsbFNpZGVGaWx0ZXJPcHRpb25zU2VsZWN0ZWQoY29sOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNvbD8ucXVlcnk/Ll9pZHMgfHwgIUFycmF5LmlzQXJyYXkoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sLnF1ZXJ5Ll9pZHMubGVuZ3RoID09PSBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLmxlbmd0aDtcbiAgfVxuXG4gIG9uT3B0aW9uVG9nZ2xlKGNvbDogYW55LCBvcHRpb246IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbklkID0gb3B0aW9uLmlkIHx8IG9wdGlvbi5faWQgfHwgb3B0aW9uO1xuICAgIGlmICghY29sLnF1ZXJ5Ll9pZHMpIHtcbiAgICAgIGNvbC5xdWVyeS5faWRzID0gW107XG4gICAgfVxuICAgIGNvbnN0IGlkeCA9IGNvbC5xdWVyeS5faWRzLmluZGV4T2Yob3B0aW9uSWQpO1xuICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbC5xdWVyeS5faWRzLnB1c2gob3B0aW9uSWQpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG5cblxuICByZXNldFNpZGVGaWx0ZXIoY29sOiBhbnkpIHtcbiAgICBjb25zdCByZXNldENvbHVtblJlY3Vyc2l2ZWx5ID0gKGNvbHVtbnM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgIGNvbHVtbi5xdWVyeSA9IHtcbiAgICAgICAgICAgIF9pZHM6IFtdLFxuICAgICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxuICAgICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxuICAgICAgICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW4/LmNoaWxkcmVuKSAmJiBjb2x1bW4/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAocmVzZXRDb2x1bW5SZWN1cnNpdmVseShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIHJlc2V0Q29sdW1uUmVjdXJzaXZlbHkodGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gbnVsbDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cbiAgY2xlYXJBbGxGaWx0ZXJzKHNob3VsZFVwZGF0ZUNvbmZpZ0xpc3RpbmcgPSBmYWxzZSkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMgPSBbXTtcbiAgICB0aGlzLnRhYmxlVmlldz8uZm9yRWFjaCgoZWxlKSA9PiB7IGVsZS5pc190ZW1wID0gZmFsc2UgfSk7XG4gICAgY29uc3QgcmVzZXRBbGxSZWN1cnNpdmVseSA9IChjb2x1bW5zOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sdW1uLnF1ZXJ5KSB7XG4gICAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgICAgX2lkczogW10sXG4gICAgICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbj8uY2hpbGRyZW4pICYmIGNvbHVtbi5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICByZXNldEFsbFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJlc2V0QWxsUmVjdXJzaXZlbHkodGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyc0NvbmZpZyA9IFtdO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAvLyB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IGZhbHNlO1xuICAgIC8vIHRoaXMuZm9udEZhaW1seSA9ICdJbnRlcic7XG4gICAgLy8gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gMTQ7XG4gICAgLy8gdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gJ21lZGl1bWQnO1xuICAgIC8vIHRoaXMuYm9keVRleHRGb250c1NpemUgPSAxNDtcbiAgICAvLyB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSAnJztcbiAgICBjb25zdCBldmVudCA9IHsgZXZlbnRUeXBlOiAncmVzZXQnLCBkYXRhOiB7IHRhYmxlVHlwZTogdGhpcy50YWJsZVR5cGUgfSB9O1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIGlmKCFzaG91bGRVcGRhdGVDb25maWdMaXN0aW5nKXtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgICAgIGlmKCFzaG91bGRVcGRhdGVDb25maWdMaXN0aW5nKXtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgICB9XG4gICAgfSwgMzAwKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGFwcGx5U2lkZUZpbHRlcihjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uLnF1ZXJ5LmZpcnN0X3ZhbHVlICYmICFjb2x1bW4/LnF1ZXJ5Py5faWRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIC8vIENsb3NlIGV4cGFuZGVkIHJvd3MgYmVmb3JlIGFwcGx5aW5nIHNpZGUgZmlsdGVyXG4gIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcblxuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICBzZWFyY2g6IGNvbHVtbi5zZWFyY2gsXG4gICAgICBxdWVyeTogY29sdW1uLnF1ZXJ5LFxuICAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gICAgICBfaWRzOiBjb2x1bW4uX2lkcyB8fCBbXVxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5maWx0ZXJzQ29uZmlnLmZpbmRJbmRleChmID0+IGYuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG5cbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIC8vIFJlcGxhY2UgdGhlIGV4aXN0aW5nIGZpbHRlclxuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgbmV3IGZpbHRlclxuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cbiAgcmVtb3ZlU2lkZUZpbHRlcihjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uLnF1ZXJ5LmZpcnN0X3ZhbHVlICYmICFjb2x1bW4/LnF1ZXJ5Py5faWRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIC8vIENsb3NlIGV4cGFuZGVkIHJvd3MgYmVmb3JlIHJlbW92aW5nIGZpbHRlclxuICAgIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZykubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGNvbGxhcHNlQWxsRXhwYW5kZWRDZWxscygpIHtcbiAgICBpZiAodGhpcy5leHBhbmRlZENlbGxzPy5zaXplID4gMCkge1xuICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cblxuXG4gIHRyYWNrQnlGaWVsZChpbmRleDogbnVtYmVyLCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbD8uZmllbGQ7XG4gIH1cblxuICBnZXQgYWN0aXZlRmlsdGVyZWRDb2x1bW5zKCk6IGFueVtdIHtcbiAgICBjb25zdCBjb2xsZWN0RmlsdGVyZWQgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoY29sbGVjdEZpbHRlcmVkKGNvbC5jaGlsZHJlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNJbkZpbHRlcnNDb25maWcgPSB0aGlzLmZpbHRlcnNDb25maWcuc29tZShmID0+IGYuZmllbGQgPT09IGNvbC5maWVsZCk7XG4gICAgICAgIGlmIChpc0luRmlsdGVyc0NvbmZpZykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICByZXR1cm4gY29sbGVjdEZpbHRlcmVkKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuXG5cblxuICB0b2dnbGVPcGVuRmlsdGVyKCkge1xuICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSAhdGhpcy5zaG93RmlsdGVycztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG5cblxuICAvLyBDZWxsIEVkaXRpbmcgV29yayBzdGFydCBoZXJlXG5cbiAgZWRpdGluZ0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGFjdGl2ZUNlbGw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHNldEFjdGl2ZUNlbGwocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5hY3RpdmVDZWxsID0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2x1bW4uZmllbGQpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGlzQWN0aXZlQ2VsbChyb3c6IGFueSwgY29sOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVDZWxsID09PSAoKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIGNvbC5maWVsZCk7XG4gIH1cblxuICBAVmlld0NoaWxkKCd0ZXh0QXJlYWRJbnB1dCcpIHRleHRBcmVhZElucHV0ITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjtcbiAgbWVudVJlYWR5ID0gZmFsc2U7XG4gIGVuYWJsZUVkaXQocm93OiBhbnksIGNvbHVtbjogYW55LCBjbGlja2VkRnJvbURldGFpbHNCb3ggPSBmYWxzZSwgY2VsbENvbnRhaW5lcj86IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5lZGl0aW5Ecm9wZG93blNlYXJjaCA9ICcnO1xuICAgIGlmIChyb3c/Ll9fdmlydHVhbEluZGV4ID09IDApIHJldHVybjtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT0gJ2ltYWdlJyB8fCAhY29sdW1uPy5pc19lZGl0YWJsZSkgcmV0dXJuO1xuICAgIHRoaXMubWVudVJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2x1bW4uZmllbGQpO1xuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnZHJvcGRvd24nfHwgY29sdW1uLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duTWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZWxsLWVkaXRpbmctZHJvcGRvd24tbWVudScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoZHJvcGRvd25NZW51KSB7XG4gICAgICAgICAgY29uc3QgcmVjdCA9IGRyb3Bkb3duTWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodDtcblxuICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHdpbmRvd0hlaWdodCkge1xuICAgICAgICAgICAgZHJvcGRvd25NZW51LnN0eWxlLnRvcCA9IGAtJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyb3Bkb3duTWVudS5zdHlsZS50b3AgPSAnMTAwJSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVudVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFjbGlja2VkRnJvbURldGFpbHNCb3ggJiYgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbi5maWVsZCk/Lmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aGlzLnRvZ2dsZUV4cGFuZE9mTG9uZ0NlbGxUZXh0KHJvdywgY29sdW1uLCB0aGlzLmNvbHVtbnMsIGZhbHNlKVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghY2VsbENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBmb2N1c2FibGUgPSBjZWxsQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCwgW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXG4gICAgICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAoZm9jdXNhYmxlIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgZm9jdXNhYmxlLmZvY3VzKCk7XG5cbiAgICAgICAgaWYgKGZvY3VzYWJsZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHwgZm9jdXNhYmxlIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuICAgICAgICAgIGZvY3VzYWJsZS5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBkaXNhYmxlRWRpdChyb3c6IGFueSwgY29sdW1uOiBhbnksIGNvbnRyb2w/OiBhbnkpIHtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIGlmICghdGhpcy5lZGl0aW5nS2V5KSByZXR1cm5cbiAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5wcmlzdGluZSkge1xuICAgIHRoaXMuZWRpdGluZ0tleSA9IG51bGw7XG4gICAgcmV0dXJuO1xuICB9XG4gICAgdGhpcy5jaGVja1Jvd0VkaXRBbmRFbWl0VmFsdWUocm93LCBjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGRdKVxuICAgIHRoaXMuZWRpdGluZ0tleSA9IG51bGw7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sdW1uPy5maWVsZCk7XG4gICAgaWYgKCFjdXJyZW50IHx8IChjb2x1bW4udHlwZSA9PSAnZW1haWwnICYmICF0aGlzLnZhbGlkYXRlRW1haWwoY3VycmVudCkpKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFJvdyA9IHRoaXMub3JpZ2luYWxEYXRhU2V0LmZpbmQoaXRlbSA9PiBpdGVtLmlkID09IHJvdy5pZCB8fCBpdGVtLmlkID09IHJvdy5faWQpO1xuICAgICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9yaWdpbmFsUm93LCBjb2x1bW4/LmZpZWxkKTtcbiAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4sIG9yaWdpbmFsKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICB2YWxpZGF0ZUVtYWlsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbWFpbFJlZ2V4LnRlc3QodmFsdWUpO1xuICB9XG4gIGFsbG93T25seU51bWJlcnMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LndoaWNoID8gZXZlbnQud2hpY2ggOiBldmVudC5rZXlDb2RlO1xuICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tSb3dFZGl0QW5kRW1pdFZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsdWU/OiBhbnkpIHtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbFJvdyA9IHRoaXMub3JpZ2luYWxEYXRhU2V0Py5maW5kKFxuICAgICAgKHI6IGFueSkgPT4gci5pZCA9PT0gcm93LmlkIHx8IHIuX2lkID09PSByb3cuX2lkXG4gICAgKTtcbiAgICBpZiAoIW9yaWdpbmFsUm93KSByZXR1cm47XG4gICAgLy8gY29uc3QgY2xlYW4gPSAob2JqOiBhbnkpID0+IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XG4gICAgLy8gY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbi5maWVsZCk7XG4gICAgLy8gY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUob3JpZ2luYWxSb3csIGNvbHVtbi5maWVsZCk7XG4gICAgY29uc3Qgb3JpZ2luVmFsdWUgPSB0aGlzLmRhdGFTZXQuZmluZCgocjogYW55KSA9PiByLmlkID09PSByb3cuaWQpO1xuICAgIGNvbnN0IGNoYW5nZWRWYWx1ZSA9IG9yaWdpblZhbHVlLnZlcmlmaWVkID09IHZhbHVlO1xuICAgIC8vIGlmIChjaGFuZ2VkVmFsdWUpIHJldHVybjtcbiAgICAvLyBjb25zdCBoYXNDaGFuZ2VkID0gdGhpcy5jb21tb25TZXZpY2UuaGFzRmllbGRDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgb3JpZ2luYWxWYWx1ZSwgY29sdW1uLnR5cGUpO1xuICAgIC8vIGlmICghaGFzQ2hhbmdlZCkgcmV0dXJuO1xuICAgIC8vIHRoaXMuc2V0TmVzdGVkVmFsdWUob3JpZ2luYWxSb3csIGNvbHVtbiwgdmFsdWUpO1xuXG4gICAgY29uc3Qgc2VuZE9iaiA9IHtcbiAgICAgIGRhdGE6IHsgLi4ub3JpZ2luVmFsdWUgfSxcbiAgICAgIGV2ZW50VHlwZTogJ29uQ2VsbEVkaXQnLFxuICAgICAgdmFsdWU6IGNvbHVtbi50eXBlICE9PSAnYXJyYXknID8gdmFsdWUgOiB1bmRlZmluZWQsXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgdmFsdWVzOiBjb2x1bW4udHlwZSA9PSAnYXJyYXknID8gdmFsdWUgOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHNlbmRPYmopXG4gICAgLy8gfSwgMTAwKTtcbiAgfVxuXG5cbiAgaXNFZGl0aW5nKHJvdzogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdLZXkgPT09ICgocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIHNldE5lc3RlZFZhbHVlKG9iajogYW55LCBjb2x1bW46IGFueSwgb3B0aW9uOiBhbnksIGNhbGxlZEZyb21JbnB1dCA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgcGF0aCA9IGNvbHVtbi5maWVsZDtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzLnBvcCgpO1xuICAgIGNvbnN0IHBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IGFjY1trZXldID8/PSB7fSwgb2JqKTtcblxuICAgIGlmIChwYXJlbnQgJiYgbGFzdEtleSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgICAgICBjb25zdCBsb29rdXAgPSBjb2x1bW4uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdO1xuICAgICAgICBwYXJlbnRbbGFzdEtleV0gPSBvcHRpb24ubWFwKHNlbGVjdGVkSXRlbSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHR5cGVvZiBzZWxlY3RlZEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHNlbGVjdGVkSXRlbS5pZCA/PyBzZWxlY3RlZEl0ZW0uX2lkID8/IHNlbGVjdGVkSXRlbS52YWx1ZSA/PyBzZWxlY3RlZEl0ZW0ubmFtZSA/PyBzZWxlY3RlZEl0ZW1cbiAgICAgICAgICAgIDogc2VsZWN0ZWRJdGVtO1xuXG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBsb29rdXAuZmluZCgob3B0OiBhbnkpID0+XG4gICAgICAgICAgICAob3B0Ll9pZCAmJiBvcHQuX2lkID09PSBzZWxlY3RlZElkKSB8fCAob3B0LmlkICYmIG9wdC5pZCA9PT0gc2VsZWN0ZWRJZClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIG1hdGNoID8geyAuLi5tYXRjaCB9IDogeyBpZDogc2VsZWN0ZWRJZCwgdmFsdWU6IHNlbGVjdGVkSWQgfTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBsb29rdXAgPSBjb2x1bW4uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gb3B0aW9uLmlkID8/IG9wdGlvbi5faWQgPz8gb3B0aW9uLnZhbHVlID8/IG9wdGlvbi5uYW1lID8/IG9wdGlvbjtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBsb29rdXAuZmluZCgob3B0OiBhbnkpID0+IChvcHQuX2lkICYmIG9wdC5faWQgPT09IHNlbGVjdGVkSWQpIHx8IChvcHQuaWQgJiYgb3B0LmlkID09PSBzZWxlY3RlZElkKSk7XG5cbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0gbWF0Y2ggPyB7IC4uLm1hdGNoIH0gOiB7IGlkOiBzZWxlY3RlZElkLCB2YWx1ZTogc2VsZWN0ZWRJZCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0geyBpZDogb3B0aW9uLCB2YWx1ZTogb3B0aW9uIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3JpZ2luYWxEYXRhU2V0ICYmIEFycmF5LmlzQXJyYXkodGhpcy5vcmlnaW5hbERhdGFTZXQpKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFJvd0luZGV4ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQuZmluZEluZGV4KHIgPT5cbiAgICAgICAgci5pZCA9PT0gb2JqLmlkIHx8IHIuX2lkID09PSBvYmouX2lkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbmFsUm93SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUGFyZW50ID0ga2V5cy5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4gYWNjW2tleV0gPz89IHt9LCB0aGlzLm9yaWdpbmFsRGF0YVNldFtvcmlnaW5hbFJvd0luZGV4XSk7XG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCAmJiBsYXN0S2V5KSB7XG4gICAgICAgICAgb3JpZ2luYWxQYXJlbnRbbGFzdEtleV0gPSBwYXJlbnRbbGFzdEtleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gM++4j+KDoyBVcGRhdGUgY3VycmVudCBkYXRhc2V0XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGlmICh0aGlzLmRhdGFTZXQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTZXQpKSB7XG4gICAgICBjb25zdCBkYXRhc2V0Um93SW5kZXggPSB0aGlzLmRhdGFTZXQuZmluZEluZGV4KHIgPT5cbiAgICAgICAgci5pZCA9PT0gb2JqLmlkIHx8IHIuX2lkID09PSBvYmouX2lkXG4gICAgICApO1xuICAgICAgaWYgKGRhdGFzZXRSb3dJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgZGF0YXNldFBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IGFjY1trZXldID8/PSB7fSwgdGhpcy5kYXRhU2V0W2RhdGFzZXRSb3dJbmRleF0pO1xuICAgICAgICBpZiAoZGF0YXNldFBhcmVudCAmJiBsYXN0S2V5KSB7XG4gICAgICAgICAgZGF0YXNldFBhcmVudFtsYXN0S2V5XSA9IHBhcmVudFtsYXN0S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYWxsZWRGcm9tSW5wdXQpIHtcbiAgICAgIHRoaXMuY2hlY2tSb3dFZGl0QW5kRW1pdFZhbHVlKG9iaiwgY29sdW1uLCBvcHRpb24pO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuICAvLyBNdWx0aXBsZSBzZWxlY3QgRWRpdGluZyBsb2dpYyBpbXBsZW1lbnRlZCBoZXJlXG5cbiAgYXJyYXlUZW1wTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPigpO1xuXG4gIHByaXZhdGUgYXJyYXlLZXkocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cm93LmlkIHx8IHJvdy5faWR9XyR7Y29sLmZpZWxkfWA7XG4gIH1cblxuICBnZXRBcnJheU9wdGlvbklkKG9wdGlvbjogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLmlkID8/IG9wdGlvbi5faWQ7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb247XG4gIH1cblxuICBnZXRBcnJheU9wdGlvbkxhYmVsKG9wdGlvbjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLnZhbHVlID8/IG9wdGlvbi5uYW1lID8/ICcnO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9wdGlvbik7XG4gIH1cblxuICBnZXRBcnJheVRlbXAocm93OiBhbnksIGNvbDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYXJyYXlLZXkocm93LCBjb2wpO1xuXG4gICAgaWYgKCF0aGlzLmFycmF5VGVtcE1hcC5oYXMoa2V5KSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpO1xuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gQXJyYXkuaXNBcnJheShjdXJyZW50KVxuICAgICAgICA/IGN1cnJlbnQubWFwKHYgPT4gdGhpcy5nZXRBcnJheU9wdGlvbklkKHYpKVxuICAgICAgICA6IFtdO1xuXG4gICAgICB0aGlzLmFycmF5VGVtcE1hcC5zZXQoa2V5LCBub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheVRlbXBNYXAuZ2V0KGtleSkhO1xuICB9XG5cblxuICBpc0FycmF5U2VsZWN0ZWQocm93OiBhbnksIGNvbDogYW55LCBvcHRpb246IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKS5pbmNsdWRlcyhpZCk7XG4gIH1cblxuICB0b2dnbGVBcnJheVRlbXAocm93OiBhbnksIGNvbDogYW55LCBvcHRpb246IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdGlvbik7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKTtcblxuICAgIHRoaXMuYXJyYXlUZW1wTWFwLnNldChcbiAgICAgIHRoaXMuYXJyYXlLZXkocm93LCBjb2wpLFxuICAgICAgbGlzdC5pbmNsdWRlcyhpZCkgPyBsaXN0LmZpbHRlcih2ID0+IHYgIT09IGlkKSA6IFsuLi5saXN0LCBpZF1cbiAgICApO1xuICB9XG5cbiAgY29tbWl0QXJyYXkocm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5nZXRBcnJheVRlbXAocm93LCBjb2wpO1xuICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCBjb2wsIGlkcywgdHJ1ZSk7XG4gIH1cblxuXG4gIG9uQXJyYXlCbHVyKHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY29tbWl0QXJyYXkocm93LCBjb2wpO1xuICB9XG5cblxuICBjbGVhbnVwQXJyYXkocm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5hcnJheVRlbXBNYXAuZGVsZXRlKHRoaXMuYXJyYXlLZXkocm93LCBjb2wpKTtcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSBudWxsO1xuICB9XG5cblxuICBkaXNwbGF5QXJyYXlWYWx1ZXMoaWRzOiBhbnlbXSwgY29sPzogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbCkgcmV0dXJuIGlkcy5qb2luKCcsICcpO1xuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxhbnksIGFueT4oKTtcbiAgICAoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXSkuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcbiAgICAgIG1hcC5zZXQodGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdCksIG9wdCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKGlkID0+IG1hcC5nZXQoaWQpPy52YWx1ZSA/PyBtYXAuZ2V0KGlkKT8ubmFtZSA/PyBpZClcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgZGlzcGxheUFycmF5TGFiZWxzKHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5nZXRBcnJheVRlbXAocm93LCBjb2wpO1xuXG4gICAgaWYgKCFpZHMubGVuZ3RoKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPGFueSwgYW55PigpO1xuICAgIChjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdKS5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xuICAgICAgbWFwLnNldCh0aGlzLmdldEFycmF5T3B0aW9uSWQob3B0KSwgb3B0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHNcbiAgICAgIC5tYXAoaWQgPT4gbWFwLmdldChpZCk/LnZhbHVlID8/IG1hcC5nZXQoaWQpPy5uYW1lID8/IGlkKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuXG5cblxuXG4gIGdvVG9QYWdlKHBhZ2U6IGFueSkge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWc/LnBhZ2UgPT0gcGFnZSkgcmV0dXJuO1xuICAgIGlmIChwYWdlIDwgMSB8fCBwYWdlID4gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMpIHJldHVybjtcbiAgICB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA9IHBhZ2U7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbGltaXQ6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCxcbiAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdwYWdlQ2hhbmdlJyxcbiAgICB9O1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPSAxO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZykubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgb2JqOiB7XG4gICAgICAgICAgbGltaXQ6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCxcbiAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRUeXBlOiAncGFnZUNoYW5nZScsXG4gICAgICB9O1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgICB9LCA3MDApO1xuICB9XG5cbiAgYWN0aW9uUHJlc2V0KGRhdGE6IGFueSwgdHlwZTogYW55KSB7XG4gICAgZGF0YS5jb2x1bW5zID0gZGF0YT8uY29sdW1ucz8ubWFwKCh7IF9pZCwgZmlsdGVyVmFsdWUsIHNlYXJjaCwgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLCBxdWVyeSwgX190eXBlbmFtZSwgLi4ucmVzdCB9OiBhbnkpID0+IHJlc3QpO1xuICAgIHRoaXMudGFibGVWaWV3Py5mb3JFYWNoKChlbGUpID0+IHsgZWxlLmlzX3RlbXAgPSBmYWxzZSB9KTtcblxuICAgIHtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gZGF0YS5jb25maWcuZm9udEZhaW1seSxcbiAgICAgICAgZGF0YT8uZmlsdGVycz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGVsZW1lbnQuX190eXBlbmFtZTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQucXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdHlwZW9mIGVsZW1lbnQucXVlcnkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5xdWVyeSkubGVuZ3RoID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IGRhdGEuY29uZmlnLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IGRhdGEuY29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQsXG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZGF0YS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgICB0aGlzLmN1cnJlbnRJZEZvclVwZGF0ZVByZXNldCA9IGRhdGEuaWQ7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcgPSBkYXRhLmZpbHRlcnM7XG4gICAgfVxuICAgIGRlbGV0ZSBkYXRhPy5fX3R5cGVuYW1lO1xuICAgIGRlbGV0ZSBkYXRhPy5pc190ZW1wO1xuICAgIGRlbGV0ZSBkYXRhPy5jb25maWcuX190eXBlbmFtZTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiB0eXBlXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBjdXJyZW50SWRGb3JVcGRhdGVQcmVzZXQgPSAnJztcbiAgY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlOiBhbnk7XG4gIHRlbXBfc3RhdGUgPSB7XG4gICAgaWQ6ICcnLFxuICAgIGlzX3RlbXA6IGZhbHNlXG4gIH1cbiAgYXN5bmMgc2VsZWN0RmlsdGVyKGRhdGE6IGFueSkge1xuICAgIHRoaXMudGVtcF9zdGF0ZSA9IHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgaXNfdGVtcDogdHJ1ZVxuICAgIH1cbiAgICB0aGlzLnRhYmxlVmlldz8uZm9yRWFjaCgoZWxlKSA9PiB7IGVsZS5pc190ZW1wID0gZmFsc2UgfSk7XG4gICAgdGhpcy50YWJsZVZpZXcgPSB0aGlzLnRhYmxlVmlldy5tYXAoaXRlbSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGlzX3RlbXA6IGl0ZW0uaWQgPT0gZGF0YT8uaWRcbiAgICB9KSk7XG4gICAgdGhpcy5jb2x1bW5zID0gZGF0YS5jb2x1bW5zO1xuICAgIHtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gZGF0YS5jb25maWcuZm9udEZhaW1seSxcbiAgICAgICAgZGF0YS5maWx0ZXJzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBlbGVtZW50Ll9fdHlwZW5hbWU7XG5cbiAgICAgICAgICBpZiAoZWxlbWVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQucXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdHlwZW9mIGVsZW1lbnQucXVlcnkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5xdWVyeSkubGVuZ3RoID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgLy8gdGhpcy5nbG9iYWxTZWFyY2ggPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IGRhdGEuY29uZmlnLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IGRhdGEuY29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQsXG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZGF0YS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgICB0aGlzLmN1cnJlbnRJZEZvclVwZGF0ZVByZXNldCA9IGRhdGEuaWQ7XG4gICAgICB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSA9IHN0cnVjdHVyZWRDbG9uZShkYXRhKTtcbiAgICAgIHRoaXMucHJlc2V0TmFtZSA9IGRhdGE/Lm5hbWU7XG4gICAgICB0aGlzLnByZXNldEZpbHRlciA9IGRhdGE/LmFjdGl2ZUZpbHRlcnMgfHwgZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcgPSBkYXRhLmZpbHRlcnM7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuICAgICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgZGF0YS5jb2x1bW5zID0gdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgIGRlbGV0ZSBkYXRhPy5fX3R5cGVuYW1lO1xuICAgICAgZGVsZXRlIGRhdGE/LmlzX3RlbXA7XG4gICAgICBkZWxldGUgZGF0YT8uY29uZmlnLl9fdHlwZW5hbWU7XG4gICAgfVxuICAgIGlmIChkYXRhPy5pc19kZWFmdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3Rpb25QcmVzZXQoZGF0YSwgJ3NldFByZXNldCcpXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdzZWxlY3QnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBzYXZlUHJlc2V0KGNvbnRyb2w/OiBhbnkpIHtcbiAgICBpZiAoY29udHJvbD8uaW52YWxpZCkge1xuICAgICAgY29udHJvbD8uY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0RmlsdGVySGVhZGVycyh0aGlzLmZpbHRlcnNDb25maWcsIHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSB0aGlzLnRhYmxlRmlsdGVyVmlld0lkID8gdHJ1ZSA6IHRoaXMucHJlc2V0RmlsdGVyO1xuICAgIGxldCBzZWxlY3RlZERhdGE6IGFueSA9IHRoaXMudGFibGVWaWV3LmZpbmQoKGVsZSkgPT4gZWxlLmlkID09IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpO1xuICAgIGxldCBjb25maWcgPSB7XG4gICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHksXG4gICAgICBib2R5VGV4dEZvbnRzU2l6ZTogKyh0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE0KSxcbiAgICAgIGhlYWRlclRleHRGb250c1NpemU6ICsodGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDE0KSxcbiAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPyB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgOiB1bmRlZmluZWQsXG4gICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLnRhYmxlU2VhcmNoLFxuICAgICAgZmlsdGVyTmFtZXM6IG5hbWVzLFxuICAgICAgdG90YWxDb3VudDogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0cyxcbiAgICAgIHJvd1NoYWRpbmdFbmFibGVkOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkXG5cbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogdGhpcy50YWJsZUZpbHRlclZpZXdJZCA/IHNlbGVjdGVkRGF0YT8ubmFtZSA6IHRoaXMucHJlc2V0TmFtZSxcbiAgICAgICAgYWN0aXZlRmlsdGVyczogdGhpcy5wcmVzZXRGaWx0ZXIsXG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMucHJlc2V0RmlsdGVyXG4gICAgICAgICAgPyB0aGlzLmZpbHRlcnNDb25maWc/Lm1hcCgoeyBfX3R5cGVuYW1lLCBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IF9fdHlwZW5hbWU6IF9faW5uZXIsIC4uLmNsZWFuUXVlcnkgfSA9IHF1ZXJ5IHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4ucmVzdCwgcXVlcnk6IGNsZWFuUXVlcnkgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogW10sXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICBpZDogdGhpcy50YWJsZUZpbHRlclZpZXdJZCB8fCB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZT8uaWQsXG4gICAgICAgIGxvYWRpbmdDYWxsOiBjb250cm9sID09ICdtb3VzZVVwJyA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGVcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQgfHwgIXRoaXMuaXNUYWJsZVByZXNldE5vdENoYW5nZWQgPyAndXBkYXRlUHJlc2V0JyA6ICdjcmVhdGVQcmVzZXQnXG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gICAgfSwgNTAwKTtcbiAgfVxuXG5cbiAgZ2V0RmlsdGVySGVhZGVycyhmaWx0ZXJzOiBhbnlbXSwgY29sdW1uczogYW55W10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoZWRIZWFkZXJzID0gZmlsdGVyc1xuICAgICAgLm1hcChmID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGMgPT4gYy5maWVsZCA9PT0gZi5maWVsZCk7XG4gICAgICAgIHJldHVybiBjb2x1bW4gPyBjb2x1bW4uaGVhZGVyIDogbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGhlYWRlciA9PiAhIWhlYWRlcik7XG5cbiAgICByZXR1cm4gbWF0Y2hlZEhlYWRlcnMuam9pbignLCAnKTtcbiAgfVxuXG5cbiAgdG9nZ2xlUm93U2hhZGluZygpIHtcbiAgICB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID8gJyNmMWYxZjEnIDogdW5kZWZpbmVkO1xuICAgIHRoaXMub25Gb250Q2hhbmdlKCk7XG4gIH1cblxuICB0cmFja0J5VGFibGUoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIGFjdGl2ZVJvdzogYW55XG4gIGFjdGl2ZVJvd0NvbDogYW55O1xuXG4gIC8vIFRyYWNrIGV4cGFuZGVkIGNlbGxzIGFzIGEgU2V0IG9mIHVuaXF1ZSByb3crY29sIGlkZW50aWZpZXJzXG5cbiAgZ2V0Q2VsbEtleShyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmdldFJvd0lkKHJvdyl9XyR7Y29sPy5maWVsZH1gO1xuICB9XG5cbiAgZXhwYW5kZWRDZWxscyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgekNvdW50ZXIgPSAyMTtcblxuICBzaG93RGV0YWlsc0JveCA9IGZhbHNlO1xuXG4gIHRvZ2dsZUV4cGFuZE9mTG9uZ0NlbGxUZXh0KFxuICAgIHJvdzogYW55LFxuICAgIGNvbDogYW55LFxuICAgIGNvbHVtbnM6IGFueVtdLFxuICAgIGV4cGFuZFdob2xlUm93ID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZXhwYW5kQ2VsbHMgPSAodGFyZ2V0Um93OiBhbnkpID0+IHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKGMudHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGFyZ2V0Um93W2MuZmllbGRdO1xuXG4gICAgICAgIGlmICgodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQubGVuZ3RoID4gNTApIHx8IChBcnJheS5pc0FycmF5KHRleHQpICYmIHRleHQ/Lmxlbmd0aCA+IDEpKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRSb3dJZCh0YXJnZXRSb3cpICsgJy0nICsgYy5maWVsZDtcbiAgICAgICAgICB0aGlzLnpDb3VudGVyKys7XG4gICAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLnNldChrZXksIHRoaXMuekNvdW50ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG5cbiAgICBjb25zdCBjb2xsZWN0S2V5c0ZvclJvdyA9ICh0YXJnZXRSb3c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKGMudHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRleHQgPSB0YXJnZXRSb3dbYy5maWVsZF07XG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgJiYgdGV4dC5sZW5ndGggPiA1MCB8fCAoQXJyYXkuaXNBcnJheSh0ZXh0KSAmJiB0ZXh0Py5sZW5ndGggPiAxKSkge1xuICAgICAgICAgIGtleXMucHVzaCh0aGlzLmdldFJvd0lkKHRhcmdldFJvdykgKyAnLScgKyBjLmZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ga2V5cztcbiAgICB9O1xuXG4gICAgaWYgKGV4cGFuZFdob2xlUm93KSB7XG4gICAgICBsZXQgcm93S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sPy5maWVsZCk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcm93S2V5cyA9IGNvbGxlY3RLZXlzRm9yUm93KHJvdyk7XG4gICAgICAgIHJvdz8uY2hpbGRyZW4/LmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICByb3dLZXlzLnB1c2goLi4uY29sbGVjdEtleXNGb3JSb3coY2hpbGQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dLZXlzID0gY29sbGVjdEtleXNGb3JSb3cocm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbEV4cGFuZGVkID0gcm93S2V5cy5ldmVyeShrID0+IHRoaXMuZXhwYW5kZWRDZWxscy5oYXMoaykpO1xuICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICBpZiAoIWFsbEV4cGFuZGVkKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvdy5jaGlsZHJlbikgJiYgcm93LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBleHBhbmRDZWxscyhyb3cpO1xuICAgICAgICAgIHJvdz8uY2hpbGRyZW4/LmZvckVhY2goKGNoaWxkOiBhbnkpID0+IGV4cGFuZENlbGxzKGNoaWxkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwYW5kQ2VsbHMocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmdldFJvd0lkKHJvdykgKyAnLScgKyBjb2wuZmllbGQ7XG4gICAgICBpZiAoY29sLnR5cGUgPT09ICdpbWFnZScpIHJldHVybjtcblxuICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkQ2VsbHMuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuekNvdW50ZXIrKztcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLnNldChrZXksIHRoaXMuekNvdW50ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2hvd0RldGFpbHNCb3ggPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNPcGVuVG9Ub3Aocm93KVxuICAgIH0sIDApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGlzT3BlblRvVG9wKHJvdzogYW55KSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRhLWdyaWQtYm9keScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIXdyYXBwZXIpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIChjb2wuaWQgfHwgY29sLl9pZCk7XG4gICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICBpZiAoIWJveCkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgYm94UmVjdCA9IGJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHdyYXBwZXJSZWN0ID0gd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGlzT3ZlcmZsb3dpbmdCb3R0b20gPSBib3hSZWN0LmJvdHRvbSA+IHdyYXBwZXJSZWN0LmJvdHRvbTtcbiAgICAgIGNvbnN0IGlzT3ZlcmZsb3dpbmdUb3AgPSBib3hSZWN0LnRvcCA8IHdyYXBwZXJSZWN0LnRvcDtcbiAgICAgIGlmIChpc092ZXJmbG93aW5nQm90dG9tICYmICFpc092ZXJmbG93aW5nVG9wKSB7XG4gICAgICAgIGNvbnN0IGJveEhlaWdodCA9IGJveC5vZmZzZXRIZWlnaHQgfHwgMDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYm94SGVpZ2h0ICsgNDtcbiAgICAgICAgYm94LnN0eWxlLnRvcCA9IGAkey1vZmZzZXR9cHhgO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib3guc3R5bGUuYm90dG9tID0gYGF1dG9gO1xuICAgICAgICBib3guc3R5bGUudG9wID0gYDEwMCVgO1xuICAgICAgICBib3guc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoMClgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pXG4gICAgdGhpcy5zaG93RGV0YWlsc0JveCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cblxuXG5cblxuXG4gIGlzRXhwYW5kZWQocm93OiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDZWxscy5oYXModGhpcy5nZXRSb3dJZChyb3cpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIGdldFpJbmRleChyb3c6IGFueSwgY29sOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ2VsbHMuZ2V0KHRoaXMuZ2V0Um93SWQocm93KSArICctJyArIGNvbC5maWVsZCkgPz8gMjE7XG4gIH1cblxuICBpc092ZXJmbG93aW5nKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgfVxuXG5cbiAgLy8gUGljdHVyZSBjZWxsIExvZ2ljXG4gIGNvbG9yQ29tYmluYXRpb24gPSBbJ3BpYy1jb21iMScsICdwaWMtY29tYjInLCAncGljLWNvbWI0J107XG4gIGdldER5bmFtaWNDbGFzcyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHRoaXMuY29sb3JDb21iaW5hdGlvblswXTtcbiAgICBjb25zdCBoYXNoID0gQXJyYXkuZnJvbShuYW1lKS5yZWR1Y2UoKGFjYywgY2hhcikgPT4gYWNjICsgY2hhci5jaGFyQ29kZUF0KDApLCAwKTtcbiAgICBjb25zdCBpbmRleCA9IGhhc2ggJSB0aGlzLmNvbG9yQ29tYmluYXRpb24/Lmxlbmd0aDtcbiAgICByZXR1cm4gdGhpcy5jb2xvckNvbWJpbmF0aW9uW2luZGV4XTtcbiAgfVxuXG4gIGdldEluaXRpYWxzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gJ05BJztcbiAgICBjb25zdCBwYXJ0cyA9IG5hbWUudHJpbSgpLnNwbGl0KCcgJyk7XG4gICAgcmV0dXJuIChwYXJ0c1swXVswXSArIChwYXJ0c1sxXT8uWzBdIHx8ICcnKSkudG9VcHBlckNhc2UoKTtcbiAgfVxuXG5cbiAgYWN0aW9uSGlkZTogYm9vbGVhbiA9IHRydWU7XG4gIHhQb3MgPSAwO1xuICB5UG9zID0gMDtcbiAgaXNWaXNpYmxlID0gZmFsc2U7XG4gIGRlYXRpbHNMaXN0OiBhbnk7XG4gIG9wZW5FeHBlbmRJbmRleDogYW55O1xuICBwb3NpdGlvbmVkWWV0ID0gZmFsc2U7XG5cbiBvblJpZ2h0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50IHwgYW55LCBkZWF0aWxzTGlzdDogYW55KTogYm9vbGVhbiB7XG4gICAgIC8vIFN0b3JlIG9yaWdpbmFsIGFjdGlvbnMgb24gZmlyc3QgaW5pdGlhbGl6YXRpb24gaWYgbm90IGFscmVhZHkgc3RvcmVkXG4gIGlmICh0aGlzLm9yaWdpbmFsQWN0aW9ucz8ubGVuZ3RoID09PSAwICYmIHRoaXMudmFsaWRhdGVJY29uKSB7XG4gICAgdGhpcy5vcmlnaW5hbEFjdGlvbnMgPSBbLi4udGhpcy5hY3Rpb25zXTsgLy8gRGVlcCBjb3B5IHRvIHByZXNlcnZlIG9yaWdpbmFsXG4gIH1cbiAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnZhbGlkYXRlSWNvbiBcbiAgICAgID8gdGhpcy5nZXRWYWxpZEFjdGlvbnMoZGVhdGlsc0xpc3QpIFxuICAgICAgOiAoZGVhdGlsc0xpc3Q/LmFjdGlvbnM/Lmxlbmd0aCA/IGRlYXRpbHNMaXN0LmFjdGlvbnMgOiB0aGlzLmFjdGlvbnMpO1xuXG4gICAgaWYgKCEoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGRlYXRpbHNMaXN0Ll9fdmlydHVhbEluZGV4ID09IDApIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIC8vIEdldCB0aGUgaW5pdGlhbCBjbGljayBwb3NpdGlvblxuICAgIGNvbnN0IGNsaWNrWCA9IChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpID8gZXZlbnQuY2xpZW50WCA6IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICBjb25zdCBjbGlja1kgPSAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSA/IGV2ZW50LmNsaWVudFkgOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgXG4gICAgdGhpcy54UG9zID0gY2xpY2tYO1xuICAgIHRoaXMueVBvcyA9IGNsaWNrWTtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5wb3NpdGlvbmVkWWV0ID0gZmFsc2U7XG4gICAgdGhpcy5kZWF0aWxzTGlzdCA9IGRlYXRpbHNMaXN0O1xuICAgIFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbWVudUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGV4dC1tZW51JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoIW1lbnVFbGVtZW50KSByZXR1cm47XG4gICAgICBjb25zdCBtZW51V2lkdGggPSBtZW51RWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBcbiAgICAgIC8vIEdldCB0YWJsZSBjb250YWluZXIgYm91bmRzXG4gICAgICBjb25zdCB0YWJsZVJlY3QgPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB0YWJsZVRvcCA9IHRhYmxlUmVjdC50b3A7XG4gICAgICBjb25zdCB0YWJsZUJvdHRvbSA9IHRhYmxlUmVjdC5ib3R0b207XG4gICAgICBjb25zdCB0YWJsZUhlaWdodCA9IHRhYmxlUmVjdC5oZWlnaHQ7XG4gICAgICBcbiAgICAgIGxldCB4ID0gY2xpY2tYO1xuICAgICAgbGV0IHkgPSBjbGlja1k7XG4gICAgICBcbiAgICAgIC8vIEFkanVzdCBYIHBvc2l0aW9uIGlmIG1lbnUgb3ZlcmZsb3dzIGhvcml6b250YWxseVxuICAgICAgaWYgKHggKyBtZW51V2lkdGggPiB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgIHggPSB2aWV3cG9ydFdpZHRoIC0gbWVudVdpZHRoIC0gMTA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFkanVzdCBZIHBvc2l0aW9uIGlmIG1lbnUgb3ZlcmZsb3dzIHRhYmxlIHZlcnRpY2FsbHlcbiAgICAgIC8vIENoZWNrIGlmIG1lbnUgd291bGQgZ28gYmVsb3cgdGFibGUgYm90dG9tXG4gICAgICBpZiAoeSArIG1lbnVIZWlnaHQgPiB0YWJsZUJvdHRvbSkge1xuICAgICAgICAvLyBUcnkgdG8gcG9zaXRpb24gYWJvdmUgY2xpY2sgcG9pbnRcbiAgICAgICAgeSA9IGNsaWNrWSAtIG1lbnVIZWlnaHQ7XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB0aGF0IGdvZXMgYWJvdmUgdGFibGUgdG9wLCBwb3NpdGlvbiBhdCB0YWJsZSBib3R0b21cbiAgICAgICAgaWYgKHkgPCB0YWJsZVRvcCkge1xuICAgICAgICAgIHkgPSB0YWJsZUJvdHRvbSAtIG1lbnVIZWlnaHQgLSAxMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnN1cmUgbWVudSBkb2Vzbid0IGdvIGFib3ZlIHRhYmxlIHRvcFxuICAgICAgaWYgKHkgPCB0YWJsZVRvcCkge1xuICAgICAgICB5ID0gdGFibGVUb3AgKyAxMDtcbiAgICAgIH1cbiAgICAgIHRoaXMueFBvcyA9IHg7XG4gICAgICB0aGlzLnlQb3MgPSB5O1xuICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbmVkWWV0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgb2JqOiB0aGlzLmRlYXRpbHNMaXN0LFxuICAgICAgZXZlbnRUeXBlOiBhY3Rpb24sXG4gICAgfTtcbiAgICB0aGlzLnBvc2l0aW9uZWRZZXQgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChzZW5kT2JqKTtcbiAgfVxuXG5cbiAgb25WZXJpZnlDbGljayh0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZXh0ID0gdHlwZT8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGV4dCA9PSAnYXJjaGl2ZScgfHwgdGV4dCA9PSAndW5hcmNoaXZlJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnZGVsZXRlJyB8fCB0ZXh0ID09ICdyZXN0b3JlJyB8fCB0ZXh0ID09ICdyZW1vdmUnIHx8IHRleHQgPT0gJ2RlYWN0aXZhdGUnIHx8IHRleHQgPT0gJ2FjdGl2YXRlJyB8fCB0ZXh0ID09ICdibG9jaycgfHwgdGV4dCA9PSAndW5ibG9jaydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2VuYWJsZScgfHwgdGV4dCA9PSAnZGlzYWJsZScgfHwgdGV4dCA9PSAnYXBwcm92ZScgfHwgdGV4dCA9PSAncmVqZWN0JyB8fCB0ZXh0ID09ICdwdWJsaXNoJyB8fCB0ZXh0ID09ICd1bnB1Ymxpc2gnIHx8IHRleHQgPT0gJ2xvY2snIHx8IHRleHQgPT0gJ3VubG9jaycgfHwgdGV4dCA9PSAnY29tcGxldGUnIHx8IHRleHQgPT0gJ2luY29tcGxldGUnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdzZW5kIHRvIHJldmlldycgfHwgdGV4dCA9PSAnbWFyayBhcyBwYWlkJyB8fCB0ZXh0ID09ICdtYXJrIGFzIHVucGFpZCcgfHwgdGV4dCA9PSAnZnVsZmlsbCcgfHwgdGV4dCA9PSAndW5mdWxmaWxsJyB8fCB0ZXh0ID09ICdyZWZ1bmQnIHx8IHRleHQgPT0gJ2NhbmNlbCcgfHwgdGV4dCA9PSAncmVzZW5kJyB8fCB0ZXh0ID09ICdjaGFyZ2ViYWNrJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnZGlzcHV0ZScgfHwgdGV4dCA9PSAnZXNjYWxhdGUnIHx8IHRleHQgPT0gJ2RlZXNjYWxhdGUnIHx8IHRleHQgPT0gJ2ZsYWcnIHx8IHRleHQgPT0gJ3VuZmxhZycgfHwgdGV4dCA9PSAndmVyaWZ5JyB8fCB0ZXh0ID09ICd1bnZlcmlmeScgfHwgdGV4dCA9PSAnc3Vic2NyaWJlJyB8fCB0ZXh0ID09ICd1bnN1YnNjcmliZScgfHwgdGV4dCA9PSAnZm9sbG93JyB8fCB0ZXh0ID09ICd1bmZvbGxvdydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2xpa2UnIHx8IHRleHQgPT0gJ3VubGlrZScgfHwgdGV4dCA9PSAnc2hhcmUnIHx8IHRleHQgPT0gJ3Vuc2hhcmUnIHx8IHRleHQgPT0gJ2NvbW1lbnQnIHx8IHRleHQgPT0gJ3VuY29tbWVudCcgfHwgdGV4dCA9PSAndGFnJyB8fCB0ZXh0ID09ICd1bnRhZycgfHwgdGV4dCA9PSAnYXNzaWduJyB8fCB0ZXh0ID09ICd1bmFzc2lnbicgfHwgdGV4dCA9PSAnbGluaycgfHwgdGV4dCA9PSAndW5saW5rJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnc3luYycgfHwgdGV4dCA9PSAndW5zeW5jJyB8fCB0ZXh0ID09ICdiYWNrdXAnIHx8IHRleHQgPT0gJ3Jlc3RvcmUgYmFja3VwJyB8fCB0ZXh0ID09ICdtaWdyYXRlJyB8fCB0ZXh0ID09ICdpbXBvcnQnIHx8IHRleHQgPT0gJ2V4cG9ydCcgfHwgdGV4dCA9PSAnZ2VuZXJhdGUgcmVwb3J0JyB8fCB0ZXh0ID09ICdkb3dubG9hZCByZXBvcnQnIHx8IHRleHQgPT0gJ3ZpZXcgZGV0YWlscydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2VkaXQgZGV0YWlscycgfHwgdGV4dCA9PSAndXBkYXRlIGRldGFpbHMnIHx8IHRleHQgPT0gJ2NoYW5nZSBzdGF0dXMnIHx8IHRleHQgPT0gJ3Jlc2V0IHBhc3N3b3JkJyB8fCB0ZXh0ID09ICdzZW5kIG5vdGlmaWNhdGlvbicgfHwgdGV4dCA9PSAnc2NoZWR1bGUnIHx8IHRleHQgPT0gJ3Jlc2NoZWR1bGUnIHx8IHRleHQgPT0gJ2NhbmNlbCBzY2hlZHVsZScgfHwgdGV4dCA9PSAnc3RhcnQnIHx8IHRleHQgPT0gJ3N0b3AnIHx8IHRleHQgPT0gJ3BhdXNlJyB8fCB0ZXh0ID09ICdyZXN1bWUnXG4gICAgKSB7XG4gICAgICAvLyB0aGlzLmNsZWFyU2VsZWN0aW9uU3RhdGUodGhpcy50YWJsZVR5cGUpO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcbiAgICB9XG4gICAgY29uc3QgaWRzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICBjb25zdCBhcnJheU9mT2JqZWN0c1dpdGhUYWJsZVR5cGU6IGFueVtdID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MuZm9yRWFjaChpZCA9PiB7XG4gICAgICBhcnJheU9mT2JqZWN0c1dpdGhUYWJsZVR5cGUucHVzaCh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBvYmo6IGlkc0FycmF5LFxuICAgICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IHR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHNlbmRPYmopXG4gIH1cblxuXG5cbiAgZ2V0Q2VsbENsYXNzZXMoY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUgfHwgIWNvbHVtbj8uZmllbGQgfHwgY29sdW1uPy5jZWxsUmVuZGVyZXIpIHJldHVybiAnJztcblxuICAgIGxldCB2YWw6IGFueSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZT8udmFsdWUgPz8gdmFsdWUgOiB2YWx1ZTtcbiAgICBjb25zdCBmaWVsZCA9IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGZpZWxkID09PSAnZHVlX2RhdGUnKSB7XG4gICAgICBjb25zdCBkdWVEYXRlID0gbmV3IERhdGUodmFsKTtcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHRvZGF5VVRDID0gRGF0ZS5VVEModG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgdG9kYXkuZ2V0RGF0ZSgpKTtcbiAgICAgIGNvbnN0IGR1ZVVUQyA9IERhdGUuVVRDKGR1ZURhdGUuZ2V0RnVsbFllYXIoKSwgZHVlRGF0ZS5nZXRNb250aCgpLCBkdWVEYXRlLmdldERhdGUoKSk7XG5cbiAgICAgIGlmIChkdWVVVEMgPCB0b2RheVVUQykge1xuICAgICAgICByZXR1cm4gJ3RleHQtZGFuZ2VyJztcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYoZHVlVVRDID09PSB0b2RheVVUQyl7XG4gICAgICAvLyAgIHJldHVybiAndGV4dC13YXJuaW5nJztcbiAgICAgIC8vIH1cblxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuXG4gICAgY29uc3Qgc3RhdHVzID0gdmFsPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKFxuICAgICAgZmllbGQgPT09ICdzdGF0dXMnIHx8XG4gICAgICBmaWVsZCA9PT0gJ2FjY291bnRfc3RhdHVzJyB8fFxuICAgICAgZmllbGQgPT09ICdhdmFpbHN0YXR1cycgfHxcbiAgICAgIGZpZWxkID09PSAnaXNfY3VzdG9tX2dyYWRlJ1xuICAgICkge1xuICAgICAgcmV0dXJuIFNUQVRVU0VTX0JBREdFX01BUFtzdGF0dXNdIHx8ICdiYWRnZSBiYWRnZS1zZWNvbmRhcnknO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG5cbiAgcmVtb3ZlQ29sdW1uRmlsdGVyRnJvbUNvbHVtbihjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uKSByZXR1cm5cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkcm9wZG93bid8fCBjb2x1bW4udHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICBjb2x1bW4ucXVlcnkuX2lkcyA9IFtdO1xuICAgIH0gZWxzZSBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnXS5pbmNsdWRlcyhjb2x1bW4udHlwZSkpIHtcbiAgICAgIGNvbHVtbi5xdWVyeSA9IHtcbiAgICAgICAgZmlyc3RfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICBjb25kaXRpb246ICdub25lJyxcbiAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogbnVsbCxcbiAgICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsLFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maWx0ZXJzQ29uZmlnLmZpbmRJbmRleCgoZjogYW55KSA9PiBmLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgY29uc3QgY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyA9IGZpbHRlcmVkQ29sdW1ucy5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC4uLnJlc3QsXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnM7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJlZENvbHVtbnMpO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBvblNpZGVNZW51Q29sdW1uc1Zpc2liaWxpdHlDaGFuZ2UoKSB7XG4gICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZykubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgY2xlYW5GaWx0ZXJkQ29sdW1ucygpIHtcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIGNvbnN0IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnMgPSBmaWx0ZXJlZENvbHVtbnMubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAuLi5yZXN0LFxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zO1xuICB9XG5cbiAgZG93bmxvYWRDc3YodHlwZTogJ2NzdicgfCAneGxzeCcpIHtcbiAgICBjb25zdCBjb25maWc6IGFueSA9IHtcbiAgICAgIGhlYWRlckJnQ29sb3I6IHRoaXMuaGVhZGVyQmFja2dyb3VuZENvbG9yLFxuICAgICAgaGVhZGVyVGV4dENvbG9yOiB0aGlzLmhlYWRlclRleHRDb2xvcixcbiAgICAgIGJvZHlUZXh0Q29sb3I6ICcjMDAwMDAwJyxcbiAgICAgIGZvbnRGYW1pbHk6IHRoaXMuZm9udEZhaW1seSxcbiAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgICAgem9vbVNjYWxlOiAxMjUsXG4gICAgICBoZWFkZXJSb3dIZWlnaHQ6IDMwXG4gICAgfVxuICAgIGlmICh0aGlzLmVuYWJsZUV4cG9ydCkge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGRkID0gU3RyaW5nKG5vdy5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCBtbSA9IFN0cmluZyhub3cuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCB5eXl5ID0gbm93LmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCBISCA9IFN0cmluZyhub3cuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IE1NID0gU3RyaW5nKG5vdy5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPVxuICAgICAgICBgJHt0aGlzLnRhYmxlVHlwZX1fJHtkZH0tJHttbX0tJHt5eXl5fV8ke0hIfS0ke01NfWA7XG5cbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdHRlZCk7XG5cbiAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnREYXRhKHRoaXMuY29sdW1ucywgdGhpcy5kYXRhU2V0LCBmb3JtYXR0ZWQsIHR5cGUsIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLCBjb25maWcpO1xuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXG4gICAgICAgIGZpbHRlcnM6IFtdXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAnZG93bmxvYWRDc3YnXG4gICAgfVxuICAgIGlmICh0eXBlID09ICd4bHN4Jykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG5cbiAgfVxuXG4gIG9uRm9udENoYW5nZSgpIHtcbiAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGZvbnRGYWltbHk6IHRoaXMuZm9udEZhaW1seSxcbiAgICAgIGJvZHlUZXh0Rm9udHNTaXplOiB0aGlzLmJvZHlUZXh0Rm9udHNTaXplLFxuICAgICAgaGVhZGVyVGV4dEZvbnRzU2l6ZTogdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplLFxuICAgICAgb2RkUm93c0JhY2tncm91bmRDb2xvcjogdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA/IHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvciA6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dWZXJ0aWNhbEJvcmRlcjogdGhpcy5zaG93VmVydGljYWxCb3JkZXIsXG4gICAgICBzZWxlY3RlZFRhYmxlTGF5b3V0OiB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQsXG4gICAgICBnbG9iYWxTZWFyY2g6IHRoaXMudGFibGVTZWFyY2hcbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgZGF0YTogY29uZmlnXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAnY29uZmlnJ1xuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuXG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgb25HbG9iYWxTZWFyY2goKSB7XG4gICAgLy8gQ2xvc2UgZXhwYW5kZWQgcm93cyBiZWZvcmUgc2VhcmNoaW5nXG4gIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcblxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIHRhYmxlU2VhcmNoOiB0aGlzLnRhYmxlU2VhcmNoXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAnc2VhcmNoJ1xuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICB9XG4gICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgfVxuXG4gIG9uU2VhcmNoSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTZWFyY2ggdmFsdWU6JywgdmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy50YWJsZVNlYXJjaCA9ICcnO1xuICAgICAgdGhpcy5vbkdsb2JhbFNlYXJjaCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRmlsdGVyQ2hhbmdlc0VmZmVjdCgpOiBhbnkge1xuICAgIGlmICghdGhpcy50YWJsZUZpbHRlclZpZXdJZCkgcmV0dXJuIHRydWVcbiAgICBjb25zdCBmaW5kRGVmYXVsdEZpbHRlciA9IHRoaXMudGFibGVWaWV3Py5maW5kKChlbGU6IGFueSkgPT4gZWxlPy5pZCA9PSB0aGlzLnRhYmxlRmlsdGVyVmlld0lkKTtcbiAgICBjb25zdCBub3JtYWxpemVGaWx0ZXJzID0gKGZpbHRlcnM6IGFueVtdIHwgdW5kZWZpbmVkKTogYW55W10gPT4ge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnMpKSByZXR1cm4gW107XG4gICAgICBjb25zdCBjbG9uZWQgPSBmaWx0ZXJzLm1hcChmID0+IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZiA/PyB7fSkpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbS5faWRzKSkgaXRlbS5faWRzID0gW107XG4gICAgICAgIGl0ZW0uX2lkcyA9IGl0ZW0uX2lkcy5zbGljZSgpLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYiA9PT0gJ251bWJlcicpIHJldHVybiBhIC0gYjtcbiAgICAgICAgICByZXR1cm4gKCcnICsgYSkubG9jYWxlQ29tcGFyZSgnJyArIGIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXRlbS5xdWVyeSA9PT0gbnVsbCkge1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLnF1ZXJ5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtLnF1ZXJ5Ll9pZHMpKSBpdGVtLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICAgICAgICBpdGVtLnF1ZXJ5Ll9pZHMgPSBpdGVtLnF1ZXJ5Ll9pZHMuc2xpY2UoKS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYiA9PT0gJ251bWJlcicpIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgIHJldHVybiAoJycgKyBhKS5sb2NhbGVDb21wYXJlKCcnICsgYik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuICAgICAgY2xvbmVkLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGZhID0gKGEuZmllbGQgfHwgJycpICsgJ3wnICsgKGEudHlwZSB8fCAnJyk7XG4gICAgICAgIGNvbnN0IGZiID0gKGIuZmllbGQgfHwgJycpICsgJ3wnICsgKGIudHlwZSB8fCAnJyk7XG4gICAgICAgIHJldHVybiBmYS5sb2NhbGVDb21wYXJlKGZiKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWVwRXF1YWwgPSAoYTogYW55LCBiOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICAgIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBhICE9PSAnb2JqZWN0JyB8fCBhID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSAnb2JqZWN0JyB8fCBiID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBhID09PSBiO1xuICAgICAgfVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSAhPT0gQXJyYXkuaXNBcnJheShiKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghZGVlcEVxdWFsKGFbaV0sIGJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNBKSB7XG4gICAgICAgIGlmICgha2V5c0IuaW5jbHVkZXMoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgY29uc3Qgbm9ybWFsaXplZEEgPSBub3JtYWxpemVGaWx0ZXJzKGZpbmREZWZhdWx0RmlsdGVyPy5maWx0ZXJzKTtcbiAgICBjb25zdCBub3JtYWxpemVkQiA9IG5vcm1hbGl6ZUZpbHRlcnModGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBpc1NhbWUgPSBkZWVwRXF1YWwobm9ybWFsaXplZEEsIG5vcm1hbGl6ZWRCKTtcbiAgICByZXR1cm4gaXNTYW1lO1xuICB9XG5cblxuXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gQ2VsbCBTZWxlY3Rpb24gSW1wbGVtZW50ZWQgSGVyZSBJbXBsZW1lbnRlZCBIZXJlXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBzZWxlY3RlZENlbGxzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZEtleXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBzZWxlY3Rpb25TdGFydDogYW55ID0gbnVsbDtcbiAgaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgc3RhcnRTZWxlY3Rpb24oXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyLFxuICAgIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgc2VjdGlvbjogc3RyaW5nXG4gICkge1xuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke2ZpZWxkfWA7XG5cbiAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0geyByb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4OiBzYWZlU3ViLCBmaWVsZCwga2V5IH07XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICB0aGlzLnNlbGVjdGVkS2V5cy5hZGQoa2V5KTtcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBbdGhpcy5zZWxlY3Rpb25TdGFydF07XG4gICAgY29uc3QgbW91c2VVcEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLmVuZFNlbGVjdGlvbigpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICB9O1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKClcbiAgfVxuXG5cbiAgZXh0ZW5kU2VsZWN0aW9uKFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSW5kZXg6IG51bWJlcixcbiAgICBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHNlY3Rpb246IHN0cmluZ1xuICApIHtcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3RpbmcgfHwgIXRoaXMuc2VsZWN0aW9uU3RhcnQpIHJldHVybjtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5zZWxlY3Rpb25TdGFydDtcbiAgICBjb25zdCB0YXJnZXRTdWJDb2xJbmRleCA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgbmV3S2V5czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgbmV3Q2VsbHM6IGFueVtdID0gW107XG4gICAgY29uc3QgbWluUm93ID0gTWF0aC5taW4oc3RhcnQucm93SW5kZXgsIHJvd0luZGV4KTtcbiAgICBjb25zdCBtYXhSb3cgPSBNYXRoLm1heChzdGFydC5yb3dJbmRleCwgcm93SW5kZXgpO1xuICAgIGNvbnN0IGNvbHVtbnNUb1NlbGVjdCA9IHRoaXMuZ2V0Q29sdW1uU2VsZWN0aW9uUmFuZ2Uoc3RhcnQuY29sSW5kZXgsIGNvbEluZGV4LCBzdGFydC5zdWJDb2xJbmRleCwgdGFyZ2V0U3ViQ29sSW5kZXgpO1xuXG4gICAgZm9yIChsZXQgciA9IG1pblJvdzsgciA8PSBtYXhSb3c7IHIrKykge1xuICAgICAgZm9yIChjb25zdCBjb2xJbmZvIG9mIGNvbHVtbnNUb1NlbGVjdCkge1xuICAgICAgICBjb25zdCBrID0gYCR7cn0tJHtjb2xJbmZvLmNvbEluZGV4fS0ke2NvbEluZm8uc3ViQ29sSW5kZXh9LSR7c2VjdGlvbn1gO1xuICAgICAgICBuZXdLZXlzLmFkZChrKTtcbiAgICAgICAgbmV3Q2VsbHMucHVzaCh7XG4gICAgICAgICAgcm93SW5kZXg6IHIsXG4gICAgICAgICAgY29sSW5kZXg6IGNvbEluZm8uY29sSW5kZXgsXG4gICAgICAgICAgc3ViQ29sSW5kZXg6IGNvbEluZm8uc3ViQ29sSW5kZXgsXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAga2V5OiBrXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gbmV3S2V5cztcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBuZXdDZWxscztcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAvLyBBZGQgYXV0by1zY3JvbGxpbmcgbG9naWNcbiAgICB0aGlzLmhhbmRsZUNlbGxBdXRvU2Nyb2xsKGV2ZW50KTtcbiAgfVxuXG5cblxuXG4gIGdldENvbHVtblNlbGVjdGlvblJhbmdlKFxuICAgIHN0YXJ0Q29sOiBudW1iZXIsXG4gICAgZW5kQ29sOiBudW1iZXIsXG4gICAgc3RhcnRTdWI6IG51bWJlcixcbiAgICBlbmRTdWI6IG51bWJlclxuICApOiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9W10gPSBbXTtcbiAgICBjb25zdCBtaW5Db2wgPSBNYXRoLm1pbihzdGFydENvbCwgZW5kQ29sKTtcbiAgICBjb25zdCBtYXhDb2wgPSBNYXRoLm1heChzdGFydENvbCwgZW5kQ29sKTtcblxuICAgIGNvbnN0IGlzTGVmdFRvUmlnaHQgPSBzdGFydENvbCA8PSBlbmRDb2w7XG4gICAgZm9yIChsZXQgYyA9IG1pbkNvbDsgYyA8PSBtYXhDb2w7IGMrKykge1xuICAgICAgY29uc3Qgc3ViQ29sQ291bnQgPSB0aGlzLmdldFN1YkNvbHVtbkNvdW50KGMpO1xuXG4gICAgICBpZiAoYyA9PT0gc3RhcnRDb2wgJiYgYyA9PT0gZW5kQ29sKSB7XG4gICAgICAgIGNvbnN0IG1pblN1YiA9IE1hdGgubWluKHN0YXJ0U3ViLCBlbmRTdWIpO1xuICAgICAgICBjb25zdCBtYXhTdWIgPSBNYXRoLm1heChzdGFydFN1YiwgZW5kU3ViKTtcbiAgICAgICAgZm9yIChsZXQgcyA9IG1pblN1YjsgcyA8PSBtYXhTdWIgJiYgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYyA9PT0gc3RhcnRDb2wpIHtcbiAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHQpIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gc3RhcnRTdWI7IHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPD0gc3RhcnRTdWIgJiYgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYyA9PT0gZW5kQ29sKSB7XG4gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0KSB7XG4gICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPD0gZW5kU3ViICYmIHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChsZXQgcyA9IGVuZFN1YjsgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldFN1YkNvbHVtbkNvdW50KGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5jb2x1bW5zIHx8IGNvbEluZGV4IDwgMCB8fCBjb2xJbmRleCA+PSB0aGlzLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2NvbEluZGV4XTtcbiAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sdW1uLmNoaWxkcmVuKSkge1xuICAgICAgcmV0dXJuIGNvbHVtbi5jaGlsZHJlbi5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiAxO1xuICB9XG4gIGlzR3JvdXBDb2x1bW4oY29sSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFN1YkNvbHVtbkNvdW50KGNvbEluZGV4KSA+IDE7XG4gIH1cbiAgZW5kU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnN0b3BBdXRvU2Nyb2xsKCk7XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG4gIH1cbiAgaXNTZWxlY3RlZChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXIsXG4gICAgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBzZWN0aW9uOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3Qga2V5ID0gYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWA7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhrZXkpO1xuICB9XG5cblxuICBwcml2YXRlIHNlbGVjdGlvbkJvdW5kczoge1xuICAgIHRvcDogbnVtYmVyIHwgbnVsbDtcbiAgICBib3R0b206IG51bWJlciB8IG51bGw7XG4gICAgbGVmdDogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH0gfCBudWxsO1xuICAgIHJpZ2h0OiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGw7XG4gIH0gPSB7IHRvcDogbnVsbCwgYm90dG9tOiBudWxsLCBsZWZ0OiBudWxsLCByaWdodDogbnVsbCB9O1xuXG4gIHVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzID0geyB0b3A6IG51bGwsIGJvdHRvbTogbnVsbCwgbGVmdDogbnVsbCwgcmlnaHQ6IG51bGwgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgYWxsIHVuaXF1ZSByb3cgaW5kaWNlcyBhbmQgZmluZCBtaW4vbWF4XG4gICAgY29uc3Qgcm93SW5kaWNlcyA9IFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRDZWxscy5tYXAoY2VsbCA9PiBjZWxsLnJvd0luZGV4KSldO1xuICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzLnRvcCA9IE1hdGgubWluKC4uLnJvd0luZGljZXMpO1xuICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzLmJvdHRvbSA9IE1hdGgubWF4KC4uLnJvd0luZGljZXMpO1xuXG4gICAgLy8gRm9yIGxlZnQvcmlnaHQgYm91bmRhcmllcywgd2UgbmVlZCB0byBjb25zaWRlciBib3RoIGNvbEluZGV4IGFuZCBzdWJDb2xJbmRleFxuICAgIGNvbnN0IGxlZnRNb3N0ID0gdGhpcy5maW5kTGVmdE1vc3RDZWxsKCk7XG4gICAgY29uc3QgcmlnaHRNb3N0ID0gdGhpcy5maW5kUmlnaHRNb3N0Q2VsbCgpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdCA9IGxlZnRNb3N0O1xuICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0ID0gcmlnaHRNb3N0O1xuICB9XG4gIGZpbmRMZWZ0TW9zdENlbGwoKTogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtaW5Db2xJbmRleCA9IE1hdGgubWluKC4uLnRoaXMuc2VsZWN0ZWRDZWxscy5tYXAoY2VsbCA9PiBjZWxsLmNvbEluZGV4KSk7XG4gICAgY29uc3QgbGVmdENvbENlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxzLmZpbHRlcihjZWxsID0+IGNlbGwuY29sSW5kZXggPT09IG1pbkNvbEluZGV4KTtcbiAgICBjb25zdCBtaW5TdWJDb2xJbmRleCA9IE1hdGgubWluKC4uLmxlZnRDb2xDZWxscy5tYXAoY2VsbCA9PiBjZWxsLnN1YkNvbEluZGV4KSk7XG5cbiAgICByZXR1cm4geyBjb2xJbmRleDogbWluQ29sSW5kZXgsIHN1YkNvbEluZGV4OiBtaW5TdWJDb2xJbmRleCB9O1xuICB9XG4gIGZpbmRSaWdodE1vc3RDZWxsKCk6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDZWxscy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWF4Q29sSW5kZXggPSBNYXRoLm1heCguLi50aGlzLnNlbGVjdGVkQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5jb2xJbmRleCkpO1xuICAgIGNvbnN0IHJpZ2h0Q29sQ2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbHMuZmlsdGVyKGNlbGwgPT4gY2VsbC5jb2xJbmRleCA9PT0gbWF4Q29sSW5kZXgpO1xuICAgIGNvbnN0IG1heFN1YkNvbEluZGV4ID0gTWF0aC5tYXgoLi4ucmlnaHRDb2xDZWxscy5tYXAoY2VsbCA9PiBjZWxsLnN1YkNvbEluZGV4KSk7XG5cbiAgICByZXR1cm4geyBjb2xJbmRleDogbWF4Q29sSW5kZXgsIHN1YkNvbEluZGV4OiBtYXhTdWJDb2xJbmRleCB9O1xuICB9XG4gIGlzVG9wQm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gKTtcbiAgICByZXR1cm4gaXNTZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkJvdW5kcy50b3AgIT09IG51bGwgJiYgcm93SW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLnRvcDtcbiAgfVxuICBpc0JvdHRvbUJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YCk7XG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb25Cb3VuZHMuYm90dG9tICE9PSBudWxsICYmIHJvd0luZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5ib3R0b207XG4gIH1cbiAgaXNMZWZ0Qm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gKTtcbiAgICByZXR1cm4gaXNTZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0ICE9PSBudWxsICYmXG4gICAgICBjb2xJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdC5jb2xJbmRleCAmJlxuICAgICAgc2FmZVN1YiA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdC5zdWJDb2xJbmRleDtcbiAgfVxuXG4gIGlzUmlnaHRCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0ICE9PSBudWxsICYmXG4gICAgICBjb2xJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQuY29sSW5kZXggJiZcbiAgICAgIHNhZmVTdWIgPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0LnN1YkNvbEluZGV4O1xuICB9XG5cbiAgaXNUb3BMZWZ0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvcEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKSAmJiB0aGlzLmlzTGVmdEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKTtcbiAgfVxuXG4gIGlzVG9wUmlnaHRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVG9wQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNSaWdodEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKTtcbiAgfVxuXG4gIGlzQm90dG9tTGVmdENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCb3R0b21Cb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbikgJiYgdGhpcy5pc0xlZnRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbik7XG4gIH1cblxuICBpc0JvdHRvbVJpZ2h0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0JvdHRvbUJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKSAmJiB0aGlzLmlzUmlnaHRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbik7XG4gIH1cblxuXG4gIGNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWw6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgc2Nyb2xsU3BlZWQgPSAxNTA7XG4gIHByaXZhdGUgc2Nyb2xsTWFyZ2luID0gMzA7XG4gIGhhbmRsZUNlbGxBdXRvU2Nyb2xsKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaG9yaXpvbnRhbENvbnRhaW5lciA9IHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB2ZXJ0aWNhbENvbnRhaW5lciA9IHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaG9yaXpvbnRhbENvbnRhaW5lciB8fCAhdmVydGljYWxDb250YWluZXIpIHJldHVybjtcbiAgICBjb25zdCBob3Jpem9udGFsUmVjdCA9IGhvcml6b250YWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbW91c2VYID0gZXZlbnQuY2xpZW50WDtcbiAgICBjb25zdCB2ZXJ0aWNhbFJlY3QgPSB2ZXJ0aWNhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBtb3VzZVkgPSBldmVudC5jbGllbnRZO1xuICAgIGNvbnN0IG5lYXJUb3AgPSBtb3VzZVkgLSB2ZXJ0aWNhbFJlY3QudG9wIDwgdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgY29uc3QgbmVhckJvdHRvbSA9IHZlcnRpY2FsUmVjdC5ib3R0b20gLSBtb3VzZVkgPCB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICBjb25zdCBuZWFyTGVmdCA9IG1vdXNlWCAtIGhvcml6b250YWxSZWN0LmxlZnQgPCB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICBjb25zdCBuZWFyUmlnaHQgPSBob3Jpem9udGFsUmVjdC5yaWdodCAtIG1vdXNlWCA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGxldCBzY3JvbGxYID0gMDtcbiAgICBsZXQgc2Nyb2xsWSA9IDA7XG4gICAgaWYgKG5lYXJUb3ApIHNjcm9sbFkgPSAtdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAobmVhckJvdHRvbSkgc2Nyb2xsWSA9IHRoaXMuc2Nyb2xsU3BlZWQ7XG4gICAgaWYgKG5lYXJMZWZ0KSBzY3JvbGxYID0gLXRoaXMuc2Nyb2xsU3BlZWQ7XG4gICAgaWYgKG5lYXJSaWdodCkgc2Nyb2xsWCA9IHRoaXMuc2Nyb2xsU3BlZWQ7XG4gICAgaWYgKHNjcm9sbFggIT09IDAgfHwgc2Nyb2xsWSAhPT0gMCkge1xuICAgICAgdGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAoc2Nyb2xsWCAhPT0gMCkge1xuICAgICAgICAgIGhvcml6b250YWxDb250YWluZXIuc2Nyb2xsQnkoc2Nyb2xsWCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbFkgIT09IDApIHtcbiAgICAgICAgICB2ZXJ0aWNhbENvbnRhaW5lci5zY3JvbGxCeSgwLCBzY3JvbGxZKTtcbiAgICAgICAgfVxuICAgICAgfSwgOCk7XG4gICAgfVxuICB9XG5cbiAgc3RvcEF1dG9TY3JvbGwoKSB7XG4gICAgaWYgKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vIFJvdyBTZWxlY3Rpb24gZnJvbSB0aGUgSW5kZXhpbmcgSW1wbGVtZW50ZWQgSGVyZVxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgcm93U2VsZWN0ZWRJbmRleGVzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcbiAgcm93U2VsZWN0aW5nID0gZmFsc2U7XG4gIHJvd1NlbGVjdGlvblN0YXJ0SW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBhdXRvU2Nyb2xsSW50ZXJ2YWw6IGFueSA9IG51bGw7XG5cbiAgZ2V0IGZpcnN0U2VsZWN0ZWRSb3coKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLnNpemUgPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBNYXRoLm1pbiguLi50aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyk7XG4gIH1cblxuICBnZXQgbGFzdFNlbGVjdGVkUm93KCk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICh0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMpO1xuICB9XG5cblxuICBvblJvd01vdXNlRG93bihpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yb3dTZWxlY3RpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5yb3dTZWxlY3Rpb25TdGFydEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5hZGQoaW5kZXgpO1xuICAgIHRoaXMuYWN0aXZlQ2VsbCA9ICcnO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGNvbnN0IG1vdXNlTW92ZUhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4gdGhpcy5oYW5kbGVBdXRvU2Nyb2xsKGUpO1xuICAgIGNvbnN0IG1vdXNlVXBIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vblJvd01vdXNlVXAoKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZU1vdmVIYW5kbGVyKTtcbiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuYXV0b1Njcm9sbEludGVydmFsID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZU1vdmVIYW5kbGVyKTtcbiAgfVxuXG4gIG9uUm93TW91c2VPdmVyKGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnJvd1NlbGVjdGluZyB8fCB0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXggPT09IG51bGwpIHJldHVybjtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4odGhpcy5yb3dTZWxlY3Rpb25TdGFydEluZGV4LCBpbmRleCk7XG4gICAgY29uc3QgZW5kID0gTWF0aC5tYXgodGhpcy5yb3dTZWxlY3Rpb25TdGFydEluZGV4LCBpbmRleCk7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5hZGQoaSk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKFsuLi50aGlzLnJvd1NlbGVjdGVkSW5kZXhlc10pO1xuICB9XG5cbiAgb25Sb3dNb3VzZVVwKCkge1xuICAgIHRoaXMucm93U2VsZWN0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5yb3dTZWxlY3Rpb25TdGFydEluZGV4ID0gbnVsbDtcbiAgfVxuICBoYW5kbGVBdXRvU2Nyb2xsKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZWRnZVNpemUgPSA0MFxuICAgIGxldCBzY3JvbGxBbW91bnQgPSAwO1xuXG4gICAgaWYgKGUuY2xpZW50WSA8IHJlY3QudG9wICsgZWRnZVNpemUpIHtcbiAgICAgIHNjcm9sbEFtb3VudCA9IC0xNTA7XG4gICAgfSBlbHNlIGlmIChlLmNsaWVudFkgPiByZWN0LmJvdHRvbSAtIGVkZ2VTaXplKSB7XG4gICAgICBzY3JvbGxBbW91bnQgPSAxNTA7XG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbEFtb3VudCAhPT0gMCkge1xuICAgICAgaWYgKCF0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBzdGVwID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgKz0gc2Nyb2xsQW1vdW50O1xuICAgICAgICAgIHRoaXMuYXV0b1Njcm9sbEludGVydmFsID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuYXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLy8gZ2V0U2VsZWN0ZWREYXRhRm9yQ29weSgpOiBhbnlbXVtdIHtcbiAgLy8gICBjb25zdCBjb3BpZWRSb3dzOiBhbnlbXVtdID0gW107XG4gIC8vICAgY29uc3QgZmluZFJvd0J5VmlydHVhbEluZGV4ID0gKHZJbmRleDogbnVtYmVyKSA9PlxuICAvLyAgICAgdGhpcy5kYXRhU2V0LmZpbmQoKHI6IGFueSkgPT4gci5fX3ZpcnR1YWxJbmRleCA9PT0gdkluZGV4KTtcbiAgLy8gICBpZiAodGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMgJiYgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA+IDApIHtcbiAgLy8gICAgIGNvbnN0IHNvcnRlZEluZGV4ZXMgPSBbLi4udGhpcy5yb3dTZWxlY3RlZEluZGV4ZXNdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgLy8gICAgIGZvciAoY29uc3QgdkluZGV4IG9mIHNvcnRlZEluZGV4ZXMpIHtcbiAgLy8gICAgICAgY29uc3Qgcm93ID0gZmluZFJvd0J5VmlydHVhbEluZGV4KHZJbmRleCk7XG4gIC8vICAgICAgIGlmICghcm93KSBjb250aW51ZTtcbiAgLy8gICAgICAgY29uc3Qgcm93VmFsdWVzID0gdGhpcy5jb2x1bW5zLmZsYXRNYXAoY29sID0+XG4gIC8vICAgICAgICAgY29sLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKVxuICAvLyAgICAgICAgICAgPyBjb2wuY2hpbGRyZW4ubWFwKChjOiB7IGZpZWxkOiBzdHJpbmcgfSkgPT5cbiAgLy8gICAgICAgICAgICAgICB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgYy5maWVsZCkgPz8gJydcbiAgLy8gICAgICAgICAgICAgKVxuICAvLyAgICAgICAgICAgOiB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSA/PyAnJ1xuICAvLyAgICAgICApO1xuICAvLyAgICAgICBjb3BpZWRSb3dzLnB1c2gocm93VmFsdWVzKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG5cbiAgLy8gICBpZiAodGhpcy5zZWxlY3RlZENlbGxzICYmIHRoaXMuc2VsZWN0ZWRDZWxscy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICBjb25zdCByb3dzTWFwID0gbmV3IE1hcDxudW1iZXIsIGFueVtdPigpO1xuICAvLyAgICAgZm9yIChjb25zdCBjZWxsIG9mIHRoaXMuc2VsZWN0ZWRDZWxscykge1xuICAvLyAgICAgICBjb25zdCByb3cgPSBmaW5kUm93QnlWaXJ0dWFsSW5kZXgoY2VsbC5yb3dJbmRleCk7XG4gIC8vICAgICAgIGlmICghcm93KSBjb250aW51ZTtcblxuICAvLyAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNvbHVtbnNbY2VsbC5jb2xJbmRleF07XG4gIC8vICAgICAgIGxldCBmaWVsZE5hbWUgPSBjb2w/LmZpZWxkO1xuICAvLyAgICAgICBpZiAoY29sPy5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW5bY2VsbC5zdWJDb2xJbmRleF0pIHtcbiAgLy8gICAgICAgICBmaWVsZE5hbWUgPSBjb2wuY2hpbGRyZW5bY2VsbC5zdWJDb2xJbmRleF0uZmllbGQ7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgZmllbGROYW1lKSA/PyAnJztcblxuICAvLyAgICAgICBpZiAoIXJvd3NNYXAuaGFzKGNlbGwucm93SW5kZXgpKSByb3dzTWFwLnNldChjZWxsLnJvd0luZGV4LCBbXSk7XG4gIC8vICAgICAgIHJvd3NNYXAuZ2V0KGNlbGwucm93SW5kZXgpIS5wdXNoKHZhbHVlKTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgY29uc3Qgc29ydGVkQ2VsbHMgPSBbLi4ucm93c01hcC5lbnRyaWVzKCldXG4gIC8vICAgICAgIC5zb3J0KChbYV0sIFtiXSkgPT4gYSAtIGIpXG4gIC8vICAgICAgIC5tYXAoKFtfLCB2XSkgPT4gdik7XG5cbiAgLy8gICAgIGNvcGllZFJvd3MucHVzaCguLi5zb3J0ZWRDZWxscyk7XG4gIC8vICAgfVxuXG4gIC8vICAgaWYgKGNvcGllZFJvd3MubGVuZ3RoID09PSAwKSB7XG4gIC8vICAgICBjb25zdCBhY3RpdmVDZWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFjdGl2ZS1jZWxsJyk7XG4gIC8vICAgICBpZiAoYWN0aXZlQ2VsbCkgcmV0dXJuIFtbYWN0aXZlQ2VsbC50ZXh0Q29udGVudD8udHJpbSgpIHx8ICcnXV07XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IG1heENvbHMgPSBjb3BpZWRSb3dzLnJlZHVjZSgobWF4LCByb3cpID0+IE1hdGgubWF4KG1heCwgcm93Lmxlbmd0aCksIDApO1xuICAvLyAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb3BpZWRSb3dzLm1hcChyb3cgPT4ge1xuICAvLyAgICAgY29uc3QgbmV3Um93ID0gWy4uLnJvd107XG4gIC8vICAgICB3aGlsZSAobmV3Um93Lmxlbmd0aCA8IG1heENvbHMpIG5ld1Jvdy5wdXNoKCcnKTsgXG4gIC8vICAgICByZXR1cm4gbmV3Um93O1xuICAvLyAgIH0pO1xuICAvLyAgIHJldHVybiBub3JtYWxpemVkO1xuICAvLyB9XG5cblxuICB1bmRvU3RhY2s6IGFueVtdW10gPSBbXTtcbiAgcmVkb1N0YWNrOiBhbnlbXVtdID0gW107XG5cbiAgcHJpdmF0ZSBjbG9uZURhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICB9XG5cbiAgcGVyZm9ybUN1dChzZWxlY3RlZERhdGE6IGFueVtdW10pIHtcbiAgICAvLyBTYXZlIGN1cnJlbnQgc3RhdGUgZm9yIHVuZG9cbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHRoaXMuY2xvbmVEYXRhKHRoaXMudmlzaWJsZVJvd3MpKTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdOyAvLyBDbGVhciByZWRvIHN0YWNrIG9uIG5ldyBhY3Rpb25cblxuICAgIC8vIFBlcmZvcm0gY3V0XG4gICAgdGhpcy5jb3B5U2VydmljZS5jdXRXaXRoQW5pbWF0aW9uKHNlbGVjdGVkRGF0YSk7XG4gICAgY29uc3QgeyB1cGRhdGVkUm93cyB9ID0gdGhpcy5jb3B5U2VydmljZS5jdXRTZWxlY3RlZFNlbGVjdGVkRGF0YShcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MsXG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyxcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscyxcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUuYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICAvLyBjb25zb2xlLmxvZygnVXBkYXRlZCBSb3dzOiAnLCB1cGRhdGVkUm93cyk7XG4gIH1cblxuXG5cbiAgZ2V0U2VsZWN0ZWREYXRhRm9yQ29weSgpOiBhbnlbXVtdIHtcbiAgICByZXR1cm4gdGhpcy5jb3B5U2VydmljZS5nZXRTZWxlY3RlZERhdGFGb3JDb3B5KFxuICAgICAgdGhpcy5kYXRhU2V0LFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMsXG4gICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMsXG4gICAgICB0aGlzLmdldE5lc3RlZFZhbHVlLmJpbmQodGhpcylcbiAgICApO1xuICB9XG5cblxuICBwYWdlU2l6ZUtleU1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBwcml2YXRlIGJ1aWxkUGFnZVNpemVLZXlNYXAoKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlU2l6ZUtleU1hcCA9IHt9O1xuXG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMuZm9yRWFjaCgoc2l6ZSwgaW5kZXgpID0+IHtcbiAgICAgIC8vIEtleXM6IDHigJM5LCB0aGVuIDAgZm9yIDEwdGggaXRlbVxuICAgICAgY29uc3Qga2V5ID1cbiAgICAgICAgaW5kZXggPCA5XG4gICAgICAgICAgPyBTdHJpbmcoaW5kZXggKyAxKVxuICAgICAgICAgIDogaW5kZXggPT09IDlcbiAgICAgICAgICA/ICcwJ1xuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB0aGlzLnBhZ2VTaXplS2V5TWFwW2tleV0gPSBzaXplO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGlzRm9ybUZpZWxkID1cbiAgICAgIHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnIHx8XG4gICAgICB0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fFxuICAgICAgdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlO1xuICAgIGlmIChpc0Zvcm1GaWVsZCB8fCB0aGlzLmxvYWRpbmcpIHJldHVybjtcblxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZ29Ub05leHRQYWdlKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ3RybCArIEFycm93IExlZnQg4oaSIFByZXZpb3VzIFBhZ2VcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmdvVG9QcmV2aW91c1BhZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBSaWdodCDihpIgTGFzdCBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5nb1RvTGFzdFBhZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQ3RybCArIFNoaWZ0ICsgQXJyb3cgTGVmdCDihpIgRmlyc3QgUGFnZVxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5nb1RvRmlyc3RQYWdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBcblxuICAgIC8vIEN0cmwgKyBTaGlmdCArIEFycm93IFJpZ2h0IOKGkiBMYXN0IFBhZ2VcbiAgICBjb25zdCBNSU5fSEVJR0hUID0gMjg7XG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgKz0gMTtcbiAgICAgIHRoaXMucm93SGVpZ2h0ICs9IDE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3RybCArIFNoaWZ0ICsgQXJyb3cgUmlnaHQg4oaSIExhc3QgUGFnZVxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICB0aGlzLmhlYWRlclJvd0hlaWdodCA9IE1hdGgubWF4KE1JTl9IRUlHSFQsIHRoaXMuaGVhZGVyUm93SGVpZ2h0IC0gMSk7XG4gICAgIHRoaXMucm93SGVpZ2h0ID0gTWF0aC5tYXgoTUlOX0hFSUdIVCwgdGhpcy5yb3dIZWlnaHQgLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgICAgIFxuXG4gICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09PSAnLycpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hJbnB1dCkge1xuICAgICAgICBjb25zdCBpbnB1dEVsID0gdGhpcy5nbG9iYWxTZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpbnB1dEVsLmZvY3VzKCk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsT3V0bGluZSA9IGlucHV0RWwuc3R5bGUub3V0bGluZTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxCb3hTaGFkb3cgPSBpbnB1dEVsLnN0eWxlLmJveFNoYWRvdztcbiAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3V0bGluZScsICcycHggc29saWQgIzRmOWNmZicsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgIGlucHV0RWwuc3R5bGUuc2V0UHJvcGVydHkoJ2JveC1zaGFkb3cnLCAnMCAwIDhweCAycHggIzRmOWNmZicsICdpbXBvcnRhbnQnKTsgXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlucHV0RWwuc3R5bGUuc2V0UHJvcGVydHkoJ291dGxpbmUnLCBvcmlnaW5hbE91dGxpbmUgfHwgJycsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgICBpbnB1dEVsLnN0eWxlLnNldFByb3BlcnR5KCdib3gtc2hhZG93Jywgb3JpZ2luYWxCb3hTaGFkb3cgfHwgJycsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYXV0b3NpemVBbGxDb2x1bW5zKCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgaWYgKGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXk/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdyJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8oKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2MnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRDc3YoJ2NzdicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnZScpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZENzdigneGxzeCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gIXRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyO1xuICAgICAgICB0aGlzLm9uRm9udENoYW5nZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2gnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSAhdGhpcy5yb3dTaGFkaW5nRW5hYmxlZDtcbiAgICAgICAgdGhpcy5vbkZvbnRDaGFuZ2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3MnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ3NtYWxsJylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNldFRhYmxlTGF5b3V0KCdtZWRpdW0nKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2wnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ2xhcmdlJylcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgIFxuXG5cbiAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICBjb25zdCBuZXdMaW1pdCA9IHRoaXMucGFnZVNpemVLZXlNYXBbZXZlbnQua2V5XTtcbiAgICAgIGlmIChuZXdMaW1pdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0ICE9PSBuZXdMaW1pdCkge1xuICAgICAgICAgIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCA9IG5ld0xpbWl0O1xuICAgICAgICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIGNvbnN0IHRhYmxlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdGEtZ3JpZC1ib2R5LXdyYXBwZXInKTtcbiAgICBpZiAodGFibGVDb250YWluZXIgJiYgIXRhYmxlQ29udGFpbmVyLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybjtcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjJykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCAmJiAhdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSkgcmV0dXJuXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTtcbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNvcHlTZXJ2aWNlLmNvcHlUb0NsaXBib2FyZChzZWxlY3RlZERhdGEpO1xuXG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3gnKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoIHx8ICF0aGlzLmVuYWJsZUN1dCkgcmV0dXJuXG4gICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTtcbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnBlcmZvcm1DdXQoc2VsZWN0ZWREYXRhKTtcblxuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd6Jykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkgcmV0dXJuXG4gICAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51bmRvKCk7XG5cbiAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGgpIHJldHVyblxuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucmVkbygpO1xuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09PSAnYScpIHtcbiAgICAgIC8vIOKchSBTZWxlY3QgYWxsIGNlbGxzXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zZWxlY3RBbGxDZWxscygpO1xuICAgICAgfVxuICB9XG5cbiAgZ29Ub05leHRQYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2U7XG4gICAgY29uc3QgdG90YWxQYWdlcyA9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzO1xuICAgIGlmIChjdXJyZW50UGFnZSA+PSB0b3RhbFBhZ2VzKSByZXR1cm47XG4gICAgdGhpcy5nb1RvUGFnZShjdXJyZW50UGFnZSArIDEpO1xuICB9XG5cbiAgZ29Ub1ByZXZpb3VzUGFnZSgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2U7XG4gICAgICBpZiAoY3VycmVudFBhZ2UgPD0gMSkgcmV0dXJuO1xuICAgICAgdGhpcy5nb1RvUGFnZShjdXJyZW50UGFnZSAtIDEpO1xuICAgIH1cblxuICAgIGdvVG9GaXJzdFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID09PSAxKSByZXR1cm47XG4gICAgdGhpcy5nb1RvUGFnZSgxKTtcbiAgfVxuXG4gIGdvVG9MYXN0UGFnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYXN0UGFnZSA9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzO1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gbGFzdFBhZ2UpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKGxhc3RQYWdlKTtcbiAgfVxuXG5cblxuXG4gIHNlbGVjdEFsbENlbGxzKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcblxuICAgIC8vIFNldCBzZWxlY3Rpb24gc3RhcnQgbGlrZSBzaW5nbGUgc2VsZWN0aW9uIChmaXJzdCBjZWxsKVxuICAgIGlmICh0aGlzLmRhdGFTZXQubGVuZ3RoICYmIHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGZpcnN0RmllbGQgPSB0aGlzLmNvbHVtbnNbMF0uZmllbGQgfHwgdGhpcy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ID0ge1xuICAgICAgICByb3dJbmRleDogMCxcbiAgICAgICAgY29sSW5kZXg6IDAsXG4gICAgICAgIHN1YkNvbEluZGV4OiAwLFxuICAgICAgICBmaWVsZDogZmlyc3RGaWVsZCxcbiAgICAgICAga2V5OiBgMC0wLTAtJHtmaXJzdEZpZWxkfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSB0cnVlO1xuXG4gICAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8PSB0aGlzLmRhdGFTZXQ/Lmxlbmd0aDsgcm93SW5kZXgrKykge1xuICAgICAgaWYgKCFyb3dJbmRleCkgY29udGludWU7XG4gICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFTZXRbcm93SW5kZXhdO1xuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuYWRkKHJvd0luZGV4KTtcblxuICAgICAgLy8gZm9yIChsZXQgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGNvbEluZGV4KyspIHtcbiAgICAgIC8vICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zW2NvbEluZGV4XTtcbiAgICAgIC8vICAgY29uc3QgZmllbGQgPSBjb2wuZmllbGQgfHwgY29sLm5hbWU7XG4gICAgICAvLyAgIGlmKCFjb2wuaXNfdmlzaWJsZSkgY29udGludWU7XG5cbiAgICAgIC8vICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAvLyAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goKHN1YjogYW55LCBzdWJDb2xJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyAgICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzdWJDb2xJbmRleH0tJHtmaWVsZH1gO1xuICAgICAgLy8gICAgICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMucHVzaCh7XG4gICAgICAvLyAgICAgICAgIHJvd0luZGV4LFxuICAgICAgLy8gICAgICAgICBjb2xJbmRleCxcbiAgICAgIC8vICAgICAgICAgc3ViQ29sSW5kZXgsXG4gICAgICAvLyAgICAgICAgIGZpZWxkLFxuICAgICAgLy8gICAgICAgICBrZXksXG4gICAgICAvLyAgICAgICB9KTtcbiAgICAgIC8vICAgICB9KTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tMC0ke2ZpZWxkfWA7XG4gICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgICAvLyAgICAgdGhpcy5zZWxlY3RlZENlbGxzLnB1c2goe1xuICAgICAgLy8gICAgICAgcm93SW5kZXgsXG4gICAgICAvLyAgICAgICBjb2xJbmRleCxcbiAgICAgIC8vICAgICAgIHN1YkNvbEluZGV4OiAwLFxuICAgICAgLy8gICAgICAgZmllbGQsXG4gICAgICAvLyAgICAgICBrZXksXG4gICAgICAvLyAgICAgfSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgaGlnaGxpZ2h0aW5nIGFuZCBVSVxuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuXG4gICAgLy8gU3RvcCBcInNlbGVjdGluZ1wiIG1vZGUgc2luY2UgaXQncyBhIG9uZS10aW1lIHNlbGVjdC1hbGxcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gZmFsc2U7XG4gIH1cblxuXG5cbiAgdW5kbygpIHtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy51bmRvU3RhY2sucG9wKCkhO1xuICAgICAgdGhpcy5yZWRvU3RhY2sucHVzaCh0aGlzLmNsb25lRGF0YSh0aGlzLnZpc2libGVSb3dzKSk7XG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5jbG9uZURhdGEocHJldlN0YXRlKTtcbiAgICB9XG4gIH1cblxuICByZWRvKCkge1xuICAgIGlmICh0aGlzLnJlZG9TdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHRoaXMuY2xvbmVEYXRhKHRoaXMudmlzaWJsZVJvd3MpKTtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmNsb25lRGF0YShuZXh0U3RhdGUpO1xuICAgIH1cbiAgfVxuXG5cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpwYXN0ZScsIFsnJGV2ZW50J10pXG4gIGFzeW5jIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgaWYoIXRoaXMuZW5hYmxlQ3V0KSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHRhZyA9IHRhcmdldD8udGFnTmFtZT8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGFnID09PSAnaW5wdXQnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJyB8fCB0YXJnZXQ/LmdldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJykgPT09ICd0cnVlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGggfHwgIXRoaXMuYWN0aXZlQ2VsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKTtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBjb25zdCB1c2VyQ29uZmlybWVkID0gYXdhaXQgdGhpcy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXG4gICAgICAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHBhc3RlIHRoZSBjb3BpZWQgZGF0YT8nXG4gICAgKTtcblxuICAgIGlmICghdXNlckNvbmZpcm1lZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydENlbGwgPSB0aGlzLnNlbGVjdGVkQ2VsbHM/LlswXTtcbiAgICBpZiAoIXN0YXJ0Q2VsbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdXBkYXRlZFJvd3MgPSBhd2FpdCB0aGlzLmNvcHlTZXJ2aWNlLnBhc3RlRnJvbUNsaXBib2FyZFRleHQoXG4gICAgICB0ZXh0LFxuICAgICAgdGhpcy52aXNpYmxlUm93cyxcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHN0YXJ0Q2VsbC5yb3dJbmRleCxcbiAgICAgIHN0YXJ0Q2VsbC5jb2xJbmRleCxcbiAgICAgIHN0YXJ0Q2VsbC5zdWJDb2xJbmRleFxuICAgICk7XG5cbiAgICBpZiAodXBkYXRlZFJvd3M/LnVwZGF0ZVJvd3M/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdCh7XG4gICAgICAgIGRhdGE6IHVwZGF0ZWRSb3dzPy51cGRhdGVSb3dzLFxuICAgICAgICBldmVudFR5cGU6ICdvbkNlbGxFZGl0JyxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICAgIGNvbHVtbjogdXBkYXRlZFJvd3M/LmN1cnJlbnRDb2x1bXNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNob3dDb25maXJtYXRpb25Nb2RhbChtZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBvdmVybGF5LmNsYXNzTGlzdC5hZGQoJ2N1c3RvbS1vdmVybGF5LXdyYXBwZXInKTtcbiAgICAgIG92ZXJsYXkuaW5uZXJIVE1MID0gYFxuICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1vdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbW9kYWxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibW9kYWwtbWVzc2FnZVwiPiR7bWVzc2FnZX08L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNvbmZpcm1cIj5Db25maXJtPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXkpO1xuICAgICAgY29uc3QgY29uZmlybUJ0biA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmJ0bi1jb25maXJtJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBjYW5jZWxCdG4gPSBvdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5idG4tY2FuY2VsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG92ZXJsYXkpO1xuICAgICAgfTtcbiAgICAgIGNvbmZpcm1CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cblxuXG5cbiAgaXNEYXRlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWlzTmFOKG5ldyBEYXRlKHZhbHVlKT8uZ2V0VGltZSgpKTtcbiAgfVxuXG5cbiAgLy8gSG9sZCBleHBhbmRlZCBJRHMgKGFycmF5IGZvciBtdWx0aXBsZSwgc2luZ2xlIHZhbHVlIGZvciBzaW5nbGUpXG4gIGV4cGFuZGVkZWREZXRhaWxSb3dzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgc3RyaW5nIHwgbnVtYmVyID0gJyc7XG5cbiAgdG9nZ2xlRGV0YWlsUm93RXhwYW5kKHJvdzogYW55KSB7XG4gICAgY29uc3QgaWQgPSByb3c/LmlkIHx8IHJvdz8uX2lkO1xuICAgIGlmICh0aGlzLmdyaWRUeXBlID09PSAnQXNzZXRzJyAmJiByb3c/LmRldGFpbD8uY29sdW1ucykge1xuICAgICAgcm93LmRldGFpbC5jb2x1bW5zLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpdGVtLndpZHRoID0gaXRlbT8ud2lkdGggfHwgKHRoaXMuZGF0YUdyaWRDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAvIHJvdy5kZXRhaWwuY29sdW1ucz8ubGVuZ3RoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLnByZXZpZXdOZXN0ZWRDb2xzID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHJvdy5kZXRhaWwuY29sdW1ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MpKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuICAgICAgY29uc3QgaW5kZXggPSBleHBhbmRlZC5pbmRleE9mKGlkKTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgZXhwYW5kZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cGFuZGVkLnB1c2goaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9PT0gaWQpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9IGlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdm9pZCB0aGlzLnJpZ2h0UGlubmVkSGVhZGVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Py5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgdGhpcy5yaWdodFBpbm5lZEJvZHk/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMzAwKVxuICB9XG5cbiAgaXNEZXRhaWxzRXhwYW5kZWQocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZCA9IHJvdz8uaWQgfHwgcm93Py5faWQ7XG5cbiAgICBpZiAodGhpcy5rZWVwTXVsdGlwbGVFeHBhbmRlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MpICYmXG4gICAgICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MuaW5jbHVkZXMoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9PT0gaWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmlsdGVyVmFsdWUob3B0aW9uOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBvcHRpb24/LnZhbHVlID8/IG9wdGlvbjtcbiAgfVxuXG5cbiAgb3BlbkluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdG9nZ2xlTWVudShpOiBudW1iZXIsIGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkgeyBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgfVxuICAgIHRoaXMub3BlbkluZGV4ID0gdGhpcy5vcGVuSW5kZXggPT09IGkgPyBudWxsIDogaTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ25lc3RlZFRhYmxlJylcbiAgbmVzdGVkVGFibGUhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgZ2V0IGhhc1ZlcnRpY2FsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5uZXN0ZWRUYWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gdGhpcy5uZXN0ZWRUYWJsZS5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIGdldCBoYXNIb3Jpem9udGFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5uZXN0ZWRUYWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGVsID0gdGhpcy5uZXN0ZWRUYWJsZS5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoO1xuICB9XG5cblxuICBnZXRUb3RhbEFtb3VudChjb2x1bW46IGFueSkge1xuICAgIGlmICghY29sdW1uPy5pc19hbW91bnQpIHJldHVybjtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMub3JpZ2luYWxEYXRhU2V0LnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF0gfHwgMDtcbiAgICAgIHJldHVybiBzdW0gKyB2YWx1ZTtcbiAgICB9LCAwKTtcbiAgICBpZiAoIXRvdGFsKSByZXR1cm4gYCR7dGhpcy5jdXJyZW5jeVN5bWJvbH0gMC4wMGBcbiAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW5jeVN5bWJvbH0gJHt0aGlzLmZvcm1hdEN1cnJlbmN5LnRyYW5zZm9ybSh0b3RhbCwgdGhpcy5jdXJyZW5jeUZvcm1hdCl9YDtcbiAgfVxuXG4gIGRyb3BDb2x1bW4oZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPiwgcm93OiBhbnkpIHtcbiAgICAvLyBSZW9yZGVyIHRoZSBjb2x1bW5zIGFycmF5XG4gICAgbW92ZUl0ZW1JbkFycmF5KHJvdy5kZXRhaWwuY29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgfVxuXG4gIGN1cnJlbnRTdWJTb3J0Q29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gYWN0aXZlIGNvbHVtblxuICBjdXJyZW50U29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJzsgLy8gYWN0aXZlIGRpcmVjdGlvblxuXG4gIHNvcnROZXN0ZWRDb2woY29sOiBhbnksIHJvdzogYW55KSB7XG4gICAgY29uc3QgZGF0YVNldCA9IHJvdz8uZGV0YWlsPy5yZXN1bHQ7XG4gICAgaWYgKHRoaXMuY3VycmVudFN1YlNvcnRDb2x1bW4gPT09IGNvbC5maWVsZCkge1xuICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFN1YlNvcnRDb2x1bW4gPSBjb2wuZmllbGQ7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgfVxuICAgIGNvbC5vcmRlcl9ieSA9IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb247XG5cbiAgICAvLyBTb3J0IGNvcHkgaW5zdGVhZCBvZiBtdXRhdGluZ1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5kYXRhU2V0XS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBsZXQgYVZhbCA9IGFbY29sLmZpZWxkXTtcbiAgICAgIGxldCBiVmFsID0gYltjb2wuZmllbGRdO1xuICAgICAgYVZhbCA9IGFWYWwgPT0gbnVsbCA/ICcnIDogYVZhbDtcbiAgICAgIGJWYWwgPSBiVmFsID09IG51bGwgPyAnJyA6IGJWYWw7XG5cbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIGFWYWwgPSBuZXcgRGF0ZShhVmFsKS5nZXRUaW1lKCk7XG4gICAgICAgIGJWYWwgPSBuZXcgRGF0ZShiVmFsKS5nZXRUaW1lKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFOdW0gPSBwYXJzZUZsb2F0KGFWYWwpO1xuICAgICAgY29uc3QgYk51bSA9IHBhcnNlRmxvYXQoYlZhbCk7XG4gICAgICBjb25zdCBib3RoTnVtYmVycyA9ICFpc05hTihhTnVtKSAmJiAhaXNOYU4oYk51bSk7XG5cbiAgICAgIGlmIChib3RoTnVtYmVycykge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyBhTnVtIC0gYk51bSA6IGJOdW0gLSBhTnVtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29tcCA9IFN0cmluZyhhVmFsKS5sb2NhbGVDb21wYXJlKFN0cmluZyhiVmFsKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IGNvbXAgOiAtY29tcDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJvdy5kZXRhaWwucmVzdWx0ID0gc29ydGVkO1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBnZXRDb2x1bW5XaWR0aFB4KHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC53aWR0aCkgcmV0dXJuIGNvbC53aWR0aCArICdweCc7XG4gICAgY29uc3QgcGl4ZWxzID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggLyByb3cuZGV0YWlsPy5jb2x1bW5zLmxlbmd0aDtcbiAgICByZXR1cm4gcGl4ZWxzICsgJ3B4JztcbiAgfVxuXG4gIGZ1bGxzY3JlZW5JbWFnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblxuICAvLyBBc3Nlc3RzIE5lc3RlZCBUYWJsZSBXb3JrIEltcGxlbWVudGVkIEhlcmVcblxuICBwaW5VbnBpbkNvbHVtKGNvbDogYW55LCB2YWx1ZTogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGwsIGNvbHVtbnM6IGFueVtdKSB7XG4gICAgY29sLnBpbm5lZCA9IHZhbHVlO1xuICAgIGNvbnN0IGxlZnQgPSBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAnbGVmdCcpO1xuICAgIGNvbnN0IG1pZGRsZSA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gIWMucGlubmVkIHx8IGMucGlubmVkID09PSBudWxsKTtcbiAgICBjb25zdCByaWdodCA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy5waW5uZWQgPT09ICdyaWdodCcpO1xuICAgIGNvbHVtbnMubGVuZ3RoID0gMDtcbiAgICBjb2x1bW5zLnB1c2goLi4ubGVmdCwgLi4ubWlkZGxlLCAuLi5yaWdodCk7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICB9XG5cbiAgZ2V0TGVmdFBpbm5lZENvdW50KGNvbHVtbnM6IGFueVtdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ2xlZnQnKS5sZW5ndGg7XG4gIH1cblxuICBnZXRSaWdodFBpbm5lZENvdW50KGNvbHVtbnM6IGFueVtdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ3JpZ2h0JykubGVuZ3RoO1xuICB9XG5cbiAgZ2V0U3RpY2t5TGVmdChjb2x1bW5zOiBhbnlbXSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGxlZnQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgcHJldkNvbCA9IGNvbHVtbnNbaV07XG4gICAgICBpZiAocHJldkNvbC5waW5uZWQgPT09ICdsZWZ0Jykge1xuICAgICAgICBsZWZ0ICs9IHByZXZDb2wud2lkdGggfHwgMTAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYCR7bGVmdH1weGA7XG4gIH1cblxuICBwcmV2aWV3TmVzdGVkQ29sczogYW55W10gPSBbXTtcbiAgb25OZXN0ZWRDb2xTb3J0KGV2ZW50OiBDZGtEcmFnU29ydEV2ZW50PGFueVtdPiwgY29sdW1uczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50IHx8ICFjb2x1bW5zKSByZXR1cm47XG4gICAgY29uc3QgZmlyc3RQb3NpdGlvbnMgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBudW1iZXI+KCk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IGNvbENlbGxzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgIGNvbENlbGxzLmZvckVhY2goKGVsKSA9PiBmaXJzdFBvc2l0aW9ucy5zZXQoZWwsIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpKTtcbiAgICB9KTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoY29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtjb2wuZmllbGR9XCJdYCkpIGFzIEhUTUxFbGVtZW50W107XG4gICAgICAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgIGNvbnN0IG9sZExlZnQgPSBmaXJzdFBvc2l0aW9ucy5nZXQoZWwpID8/IG5ld0xlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcbiAgICAgICAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBlYXNlJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcbiAgICAgICAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBjbGVhbnVwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgY2xlYW51cCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuICBzYXZlU2VsZWN0aW9uKHNlbGVjdGVkSWRzOiBzdHJpbmdbXSwgdGFibGVUeXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRhYmxlVHlwZSkgcmV0dXJuO1xuICAgIGNvbnN0IHN0b3JlZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGF0YWJsZVNlbGVjdGlvbnMnKSB8fCAne1wic2VsZWN0ZWRSb3dzXCI6IHt9fScpO1xuICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gc3RvcmVkLnNlbGVjdGVkUm93cyB8fCB7fTtcbiAgICBhbGxTZWxlY3RlZFt0YWJsZVR5cGVdID0gc2VsZWN0ZWRJZHM7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAnZGF0YXRhYmxlU2VsZWN0aW9ucycsXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHNlbGVjdGVkUm93czogYWxsU2VsZWN0ZWQsXG4gICAgICAgIGxpc3RpbmdUeXBlOiB0YWJsZVR5cGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG5cbiAgcmVzdG9yZVNlbGVjdGlvbih0YWJsZVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0b3JlZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGF0YWJsZVNlbGVjdGlvbnMnKSB8fCAne30nKTtcbiAgICBjb25zdCBpZHMgPSBzdG9yZWQuc2VsZWN0ZWRSb3dzPy5bdGFibGVUeXBlXSB8fCBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IG5ldyBTZXQoaWRzKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3M7XG4gIH1cblxuXG5cbiAgaXNPdXRzaWRlQ29udGFpbmVyID0gZmFsc2U7XG4gIHByaXZhdGUgY29udGFpbmVyUmVjdDogRE9NUmVjdCB8IG51bGwgPSBudWxsO1xuXG5cbiAgb25EcmFnU3RhcnRlZChjb2w6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uID0gY29sO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhLWdyaWQtbWFpbi1jb250YWluZXInKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlY3QgPSBjb250YWluZXI/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IG51bGw7XG4gIH1cblxuICBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyUmVjdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgeyB4LCB5IH0gPSBldmVudC5wb2ludGVyUG9zaXRpb247XG4gICAgY29uc3QgaXNPdXRzaWRlID1cbiAgICAgIHggPCB0aGlzLmNvbnRhaW5lclJlY3QubGVmdCB8fFxuICAgICAgeCA+IHRoaXMuY29udGFpbmVyUmVjdC5yaWdodCB8fFxuICAgICAgeSA8IHRoaXMuY29udGFpbmVyUmVjdC50b3AgfHxcbiAgICAgIHkgPiB0aGlzLmNvbnRhaW5lclJlY3QuYm90dG9tO1xuXG4gICAgLy8gaWYgKGlzT3V0c2lkZSAhPT0gdGhpcy5pc091dHNpZGVDb250YWluZXIpIHtcbiAgICAvLyAgIHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyID0gaXNPdXRzaWRlO1xuICAgIC8vIH1cbiAgfVxuXG4gIG9uRHJhZ0VuZGVkKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gaWYgKHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyICYmIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uKSB7XG4gICAgICAvLyAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uIS5pc192aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ0NvbHVtbiA9IG51bGw7XG4gICAgICB0aGlzLmlzT3V0c2lkZUNvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAvLyB9XG4gICAgfSwgMTAwKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlY3QgPSBudWxsO1xuICB9XG5cbiAgZ2V0U3RhcnRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzID09PSAwXG4gICAgICA/IDBcbiAgICAgIDogKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSkgKiB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQgKyAxIHx8IDA7XG4gIH1cblxuICBoYXNBbnlEZWZhdWx0VmlldygpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZVZpZXc/LnNvbWUoKHgpID0+IHguaXNfZGVmYXVsdCB8fCB4LmlzX3RlbXApO1xuICB9XG5cblxuICBnZXQgaXNUYWJsZVByZXNldE5vdENoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjdXJyUHJlc2V0ID0gdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGU7XG5cbiAgICBjb25zdCBjdXJyZW50UHJlc2V0Q29sdW1ucyA9IGN1cnJQcmVzZXQ/LmNvbHVtbnM/Lm1hcCgoY29sOiB7IGZpZWxkOiBhbnk7IHdpZHRoOiBhbnk7IHBpbm5lZDogYW55OyB9KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICB3aWR0aDogY29sLndpZHRoLFxuICAgICAgICBwaW5uZWQ6IGNvbC5waW5uZWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5tYXAoY29sID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgIHdpZHRoOiBjb2wud2lkdGgsXG4gICAgICAgIHBpbm5lZDogY29sLnBpbm5lZFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RyaW5nc0N1cnJlbnRQcmVzdENvbHMgPSBKU09OLnN0cmluZ2lmeShjdXJyZW50UHJlc2V0Q29sdW1ucyk7XG4gICAgY29uc3Qgc3RyaW5nQ29sdW1ucyA9IEpTT04uc3RyaW5naWZ5KGNvbHVtbnMpO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZpbHRlcnNDb25maWcubWFwKChmaWx0ZXIpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVkOiBmaWx0ZXIuZmllbGQsXG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgY29uZGl0aW9uOiBmaWx0ZXI/LnF1ZXJ5Py5jb25kaXRpb24sXG4gICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiBmaWx0ZXI/LnF1ZXJ5Py5maXJzdF9jb25kaXRpb24sXG4gICAgICAgICAgZmlyc3RfdmFsdWU6IGZpbHRlcj8ucXVlcnk/LmZpcnN0X3ZhbHVlLFxuICAgICAgICAgIHNlY29uZF9jb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24sXG4gICAgICAgICAgc2Vjb25kX3ZhbHVlOiBmaWx0ZXI/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIF9pZHM6IGZpbHRlcj8uX2lkc1xuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBjdXJyZW50UHJlc2V0RmlsdGVycyA9IGN1cnJQcmVzZXQ/LmZpbHRlcnM/Lm1hcCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVkOiBmaWx0ZXIuZmllbGQsXG4gICAgICAgIHF1ZXJ5OiBmaWx0ZXIucXVlcnksXG4gICAgICAgIF9pZHM6IGZpbHRlcj8uX2lkc1xuICAgICAgfVxuICAgIH0pXG5cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiZmlsdGVyIGNvbmdpZzogXCIsIGZpbHRlcnMpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY3VycmVudCBwcmVzZXQgZmlsdGVyczogXCIsIGN1cnJlbnRQcmVzZXRGaWx0ZXJzKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdpc0VxdWFsJywgc3RyaW5nc0N1cnJlbnRQcmVzdENvbHMgPT0gc3RyaW5nQ29sdW1ucyk7XG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgVGVtcCBQcmVzZXQgOiAnLCBjdXJyUHJlc2V0KVxuICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IFRlbXAgUHJlc2V0IENvbHMgY29sdW1uczogJywgY3VycmVudFByZXNldENvbHVtbnMpXG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgY29sdW1uczogJywgY29sdW1ucyk7XG5cbiAgICBpZiAoIWN1cnJlbnRQcmVzZXRDb2x1bW5zKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKGN1cnJlbnRQcmVzZXRDb2x1bW5zICYmIChzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9PSBzdHJpbmdDb2x1bW5zKSAmJiAoSlNPTi5zdHJpbmdpZnkoZmlsdGVycykgPT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFByZXNldEZpbHRlcnMpKSAmJiAodGhpcy5mb250RmFpbWx5ID09IGN1cnJQcmVzZXQuY29uZmlnLmZvbnRGYWltbHkpXG4gICAgICAmJiAodGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9PSBjdXJyUHJlc2V0LmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSkgJiZcbiAgICAgICh0aGlzLmhlYWRlclRleHRGb250c1NpemUgPT0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplKVxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlciA9PSB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlclxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLmZvbnRGYWltbHkgPT0gdGhpcy5mb250RmFpbWx5XG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuc2VsZWN0ZWRUYWJsZUxheW91dCA9PSB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXRcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSA9PSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcucm93U2hhZGluZ0VuYWJsZWQgPT0gdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCk7XG5cbiAgICAvLyByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIG9uQWN0aW9uQnV0dG9uQ2xpY2soYnV0dG9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZXh0ID0gYnV0dG9uPy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmICh0ZXh0ID09ICdhY3RpdmUgZGF0YScgfHwgdGV4dCA9PSAnYWN0aXZlJyB8fCB0ZXh0ID09ICdkYXRhIGFjdGl2ZScgfHwgdGV4dCA9PSAndW5hcmNoaXZlZCBkYXRhJyB8fCB0ZXh0ID09ICd1bmFyY2hpdmUgZGF0YScpIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0ZSh0aGlzLnRhYmxlVHlwZSk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGJ1dHRvblxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvbkFjdGlvbkJ1dHRvbkNsaWNrXCIsXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG5cbiAgc2V0QWN0aXZlVGFiKHRhYjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgIGNvbnN0IGFsbFRhYnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVUYWJzJykgfHwgJ3t9Jyk7XG4gICAgYWxsVGFic1t0aGlzLnRhYmxlVHlwZV0gPSB0YWI7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FjdGl2ZVRhYnMnLCBKU09OLnN0cmluZ2lmeShhbGxUYWJzKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICB0YWJsZVR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgICBvYmo6IHRhYlxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ29uVGFiQ2hhbmdlJyxcbiAgICB9O1xuXG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93OiBhbnksIGlzRXZlbjogYm9vbGVhbiwgc2VjdGlvbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5ob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvd0hvdmVyQ29sb3I7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZFJvd0JhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgbGV0IGJhc2VDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucm93U2hhZGluZ0VuYWJsZWQpIHtcbiAgICAgIGJhc2VDb2xvciA9IGlzRXZlbiA/IHRoaXMuZXZlblJvd3NCYWNrZ3JvdW5kQ29sb3IgOiB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VDb2xvciA9IHRoaXMuZXZlblJvd3NCYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuICAgIGlmICghYmFzZUNvbG9yKSB7XG4gICAgICBpZiAoc2VjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGJhc2VDb2xvciA9IHRoaXMubGVmdFBpbm5lZEJhY2tncm91bmRDb2xvcjtcbiAgICAgIH0gZWxzZSBpZiAoc2VjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICBiYXNlQ29sb3IgPSB0aGlzLnJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUNvbG9yID0gdGhpcy5ib2R5QmFja2dyb3VuZENvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZUNvbG9yO1xuICB9XG5cbiAgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2VudGVyUGlubmVkSGVhZGVyPy5uYXRpdmVFbGVtZW50KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZWwgPSB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoO1xuICB9XG5cblxuICBnZXRTYWZlQ29tbWVudChkZXNjcmlwdGlvbjogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIHJldHVybiB0aGlzLmNsZWFuRWRpdG9yQ29udGVudChkZXNjcmlwdGlvbik7XG4gIH1cbiAgY2xlYW5FZGl0b3JDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgLy8gMS4gRGVjb2RlIEhUTUwgZW50aXRpZXNcbiAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgdGV4dGFyZWEuaW5uZXJIVE1MID0gY29udGVudDtcbiAgICBsZXQgZGVjb2RlZCA9IHRleHRhcmVhLnZhbHVlO1xuXG4gICAgZGVjb2RlZCA9IGRlY29kZWRcbiAgICAgIC5yZXBsYWNlKC88XFwvPyhzcGFufHB8dGhlYWR8dGJvZHl8dGZvb3QpW14+XSo+L2csICcnKVxuICAgICAgLnJlcGxhY2UoLyZuYnNwOy9nLCAnICcpO1xuXG4gICAgLy8gRW5zdXJlIGNsZWFuIHRhYmxlIHN0cnVjdHVyZVxuICAgIGRlY29kZWQgPSBkZWNvZGVkXG4gICAgICAucmVwbGFjZSgvPHRhYmxlW14+XSo+L2csICc8dGFibGU+JylcbiAgICAgIC5yZXBsYWNlKC88dHJbXj5dKj4vZywgJzx0cj4nKVxuICAgICAgLnJlcGxhY2UoLzx0aFtePl0qPi9nLCAnPHRoPicpXG4gICAgICAucmVwbGFjZSgvPHRkW14+XSo+L2csICc8dGQ+Jyk7ICAvLyBSZW1vdmUgPHRoZWFkPiBhbmQgPHRib2R5PiB0YWdzXG5cbiAgICAvLyA0LiBBZGQgaW5saW5lIHN0eWxlc1xuICAgIGRlY29kZWQgPSBkZWNvZGVkXG4gICAgICAvLyBBZGQgaW5saW5lIHN0eWxlcyB0byA8dGFibGU+XG4gICAgICAucmVwbGFjZSgvPHRhYmxlKFtePl0qKT4vZywgYDx0YWJsZSBzdHlsZT1cIndpZHRoOiAxMDAlOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBwYWRkaW5nOiAyMHB4OyBmb250LXNpemU6IDE0cHg7IGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XCIkMT5gKVxuICAgICAgLy8gQWRkIGlubGluZSBzdHlsZXMgdG8gPHRyPlxuICAgICAgLnJlcGxhY2UoLzx0cihbXj5dKik+L2csIGA8dHIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcIiQxPmApXG4gICAgICAvLyBBZGQgaW5saW5lIHN0eWxlcyB0byA8dGg+XG4gICAgICAucmVwbGFjZSgvPHRoKFtePl0qKT4vZywgYDx0aCBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTZweDsgY29sb3I6ICMyQTFGNzM7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDEycHggMjBweDsgdGV4dC1hbGlnbjogbGVmdDtcIiQxPmApXG4gICAgICAvLyBBZGQgaW5saW5lIHN0eWxlcyB0byA8dGQ+XG4gICAgICAucmVwbGFjZSgvPHRkKFtePl0qKT4vZywgYDx0ZCBzdHlsZT1cIm1pbi13aWR0aDoxMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogMTJweCAyMHB4OyB0ZXh0LWFsaWduOiBsZWZ0O1wiJDE+YCk7XG4gICAgZGVjb2RlZCA9IGRlY29kZWQucmVwbGFjZSgvPGltZyhbXj5dKik+L2csIChtYXRjaCwgZ3JvdXAxKSA9PiB7XG4gICAgICAvLyBBZGQgc3R5bGUgdG8gPGltZz4gaWYgbm90IGFscmVhZHkgc3BlY2lmaWVkXG4gICAgICBpZiAoL3N0eWxlPS8udGVzdChncm91cDEpKSB7XG4gICAgICAgIHJldHVybiBtYXRjaDsgIC8vIElmIHN0eWxlIGFscmVhZHkgZXhpc3RzLCBrZWVwIGl0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYDxpbWcgc3R5bGU9XCJ3aWR0aDogMzAlOyBoZWlnaHQ6IDMwJTtib3JkZXItcmFkaXVzOiAxNnB4OyBwYWRkaW5nLXRvcDogMTVweDtwYWRkaW5nLWJvdHRvbTogMTBweDtcIiR7Z3JvdXAxfT5gO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIDUuIFJldHVybiBzYWZlIEhUTUxcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoZGVjb2RlZCk7XG4gIH1cblxuICBnZXRFeHRlbnRpb24odXJsOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodXJsICE9PSAnLScpIHtcbiAgICAgIGlmICh0eXBlb2YgKHVybCkgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHVybC5zcGxpdCgnLicpLnBvcCgpXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodXJsKSkge1xuICAgICAgICByZXR1cm4gdXJsWzBdLnNwbGl0KCcuJykucG9wKClcbiAgICAgIH0gZWxzZSByZXR1cm4gJy0nXG4gICAgfVxuICAgIGVsc2UgcmV0dXJuICctJ1xuICB9XG5cbiAgZG93bmxvYWRBdHRjaG1lbnQodXJsOiBhbnksIGZpbGU/OiBhbnkpIHtcbiAgICAvLyB0aGlzLm9uRXZlbnQuZW1pdCh7XG4gICAgLy8gICBkb3dubG9hZDogdHJ1ZSxcbiAgICAvLyB9KTtcbiAgICAvLyB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGRhdGEpXG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICBsaW5rLmRvd25sb2FkID0gJyc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICBsaW5rLmNsaWNrKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcblxuICB9XG4gIGZ1bGxJbWFnZVNyYzogc3RyaW5nIHwgbnVsbCA9ICcnO1xuICBvcGVuRnVsbEltYWdlKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTUcnKSB7XG4gICAgICB0aGlzLmZ1bGxJbWFnZVNyYyA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFN0eWxlc1RvSW1hZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGltYWdlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb21tZW50LWNvbnRlbnQgaW1nJyk7XG4gICAgaW1hZ2VzLmZvckVhY2goKGltZykgPT4ge1xuICAgICAgLy8gQXBwbHkgaW5saW5lIHN0eWxlcyBkaXJlY3RseVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbWcsICd3aWR0aCcsICc3MHB4Jyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGltZywgJ2JvcmRlci1yYWRpdXMnLCAnMTZweCcpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbWcsICdtYXJnaW4nLCAnOHB4Jyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGltZywgJ2N1cnNvcicsICdwb2ludGVyJyk7XG5cbiAgICAgIC8vIEFkZCBjbGljayBsaXN0ZW5lciB0byBzaG93IGZ1bGxzY3JlZW4gaW1hZ2Ugb24gY2xpY2tcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGltZywgJ2NsaWNrJywgKCkgPT4gdGhpcy5vbkltYWdlQ2xpY2soKGltZyBhcyBIVE1MSW1hZ2VFbGVtZW50KS5zcmMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uSW1hZ2VDbGljayhzcmM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZnVsbHNjcmVlbkltYWdlID0gc3JjO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnZnVsbHNjcmVlbkltYWdlVGVtcGxhdGUnKSBmdWxsc2NyZWVuSW1hZ2VUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgZnVsbHNjcmVlblZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgaWNvbk1hcDogUmVjb3JkPHN0cmluZywgKHJvdzogYW55LCBjb2w6IGFueSkgPT4gc3RyaW5nPiA9IHtcbiAgICBhdHRhY2htZW50c19jb3VudDogKCkgPT4gdGhpcy5zaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hdHRhY2htZW50cy5zdmcnLFxuICAgIGNvbW1lbnRfY291bnQ6ICgpID0+IHRoaXMuc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY29tbWVudHMuc3ZnJyxcbiAgICBwcmlvcml0eTogKHJvdywgY29sKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPVxuICAgICAgICB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8udmFsdWUgfHxcbiAgICAgICAgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICdkYXRhLWdyaWQvaWNvbnMvJyArXG4gICAgICAgICh2YWwgPz8gJ2RlZmF1bHQnKSArXG4gICAgICAgICcuc3ZnJ1xuICAgICAgKTtcbiAgICB9LFxuICB9O1xuXG4gIHRvZ2dsZUZ1bGxzY3JlZW4oKSB7XG4gICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSAhdGhpcy5pc0Z1bGxTY3JlZW47XG4gICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCBhcyBhbnk7XG4gICAgaWYgKCFkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCkge1xuICAgICAgaWYgKGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLm1velJlcXVlc3RGdWxsU2NyZWVuKSB7XG4gICAgICAgIGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLm1vekNhbmNlbEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmICgoZG9jdW1lbnQgYXMgYW55KS53ZWJraXRFeGl0RnVsbHNjcmVlbikge1xuICAgICAgICAoZG9jdW1lbnQgYXMgYW55KS53ZWJraXRFeGl0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmICgoZG9jdW1lbnQgYXMgYW55KS5tc0V4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIChkb2N1bWVudCBhcyBhbnkpLm1zRXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNlbGxFdmVudChldmVudDogYW55KSB7XG4gICAgdGhpcy5jdXN0b21DZWxsRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGZsYXR0ZW5Hcm91cChyb3c6IGFueSk6IGFueVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZTogYW55KSA9PiB7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICAgIGlmIChub2RlLmlzR3JvdXApIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4gdHJhdmVyc2UoY2hpbGQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdHJhdmVyc2Uocm93KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2VsZWN0R3JvdXBSb3coZTogRXZlbnQsIHJvdzogYW55KSB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGNoZWNrYm94LmNoZWNrZWQ7XG4gICAgLy8gR2V0IGFsbCBkZWVwIGRhdGEgcm93cyAobGVhZiByb3dzKVxuICAgIGNvbnN0IGxlYWZSb3dzID0gdGhpcy5mbGF0dGVuR3JvdXAocm93KTtcbiAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICBsZWFmUm93cy5mb3JFYWNoKHIgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHIuX2lkIHx8IHIuaWQ7XG4gICAgICAgIGlmIChpZCkgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKGlkKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZWFmUm93cy5mb3JFYWNoKHIgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHIuX2lkIHx8IHIuaWQ7XG4gICAgICAgIGlmIChpZCkgdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKGlkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpZHMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgIG9iajogaWRzXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiBcIm9uU2VsZWN0Um93XCIsXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldEdyb3VwQ2hlY2tlZFN0YXRlKHJvdzogYW55KTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFyb3cuaXNHcm91cCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGxlYWZSb3dzID0gdGhpcy5mbGF0dGVuR3JvdXAocm93KTtcbiAgICBsZXQgY2hlY2tlZENvdW50ID0gMDtcbiAgICBsZWFmUm93cy5mb3JFYWNoKHIgPT4ge1xuICAgICAgY29uc3QgaWQgPSByLl9pZCB8fCByLmlkO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyhpZCkpIGNoZWNrZWRDb3VudCsrO1xuICAgIH0pO1xuICAgIGlmIChjaGVja2VkQ291bnQgPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY2hlY2tlZENvdW50ID09PSBsZWFmUm93cy5sZW5ndGgpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRDZWxsVGl0bGUocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTtcblxuICAgIGlmICghdGhpcy5pc05lc3RlZFZhbHVlQXJyYXkocm93LCBjb2wuZmllbGQpKSB7XG4gICAgICBpZiAoY29sLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZm9ybWF0RGF0ZVZhbHVlKHZhbCwgdGhpcy5kYXRlRm9ybWF0KTtcbiAgICAgIH0gZWxzZSBpZiAoY29sPy5pc19hbW91bnQpIHtcbiAgICAgICAgaWYgKCF2YWwpIHJldHVybiBgMC4wMGBcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0Q3VycmVuY3kudHJhbnNmb3JtKHZhbCwgdGhpcy5jdXJyZW5jeUZvcm1hdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHZhbD8udmFsdWUgPz9cbiAgICAgICAgdmFsPy5uYW1lID8/XG4gICAgICAgIHZhbCA/P1xuICAgICAgICAoY29sLmlzX2Ftb3VudCA/ICcwJyA6ICctJylcbiAgICAgICkgKyAnJztcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdCA9IHZhbD8uWzBdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGZpcnN0Py5kZXBhcnRtZW50X25hbWUgPz9cbiAgICAgIGZpcnN0Py5yb2xlTmFtZSA/P1xuICAgICAgZmlyc3Q/LmZ1bGxfbmFtZSA/P1xuICAgICAgZmlyc3Q/LnZhbHVlID8/XG4gICAgICBmaXJzdD8ubmFtZSA/P1xuICAgICAgJy0nXG4gICAgKTtcbiAgfVxuXG5cbiAgZmluaXNoRWRpdChldmVudDogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ2NlbGwgZWRpdGVkZGRkZGRkZGRkZGRkZGQ6ICcsIGV2ZW50KVxuICB9XG5cblxuICBnZXREeW5hbWljUmlnaHQoY29sOiBhbnksIHNlY3Rpb246IHN0cmluZywgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlcil7XG4gICAgaWYoc2VjdGlvbiA9PSAncmlnaHQnICYmIHRoaXMucHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucz8ubGVuZ3RoID09IDEgJiYgY29sLndpZHRoIDwgMjAwKXtcbiAgICAgIHJldHVybiAxMDA7XG4gICAgfWVsc2UgaWYoc2VjdGlvbiA9PSAncmlnaHQnKXtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmKHNlY3Rpb24gPT0gJ3ByZXZpZXdDZW50ZXJDb2x1bW5zJyAmJiBjb2xJbmRleCA9PSAodGhpcy5wcmV2aWV3Q2VudGVyQ29sdW1ucz8ubGVuZ3RoIC0gMSkgJiYgY29sLndpZHRoIDwgMjAwKXtcbiAgICAgIHJldHVybiAyMDBcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiBjb2wud2lkdGggLSA0NTtcbiAgICB9XG4gIH1cblxuICBibHVySW5wdXQoZXZlbnQ6IEV2ZW50LCByb3c6IGFueSwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpbnB1dD8uYmx1cigpO1xuICAgIHRoaXMuc2V0QWN0aXZlQ2VsbChyb3csIGNvbCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gJyc7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDApO1xuICB9XG5cbmdldFZhbGlkQWN0aW9ucyhlbGVtZW50OiBhbnkpOiBzdHJpbmdbXSB7XG4gIHJldHVybiB0aGlzLmFjdGlvblZhbGlkYXRvci5nZXRWYWxpZEFjdGlvbnMoXG4gICAgdGhpcy5vcmlnaW5hbEFjdGlvbnMsIC8vIEFsd2F5cyBwYXNzIG9yaWdpbmFsIHVubW9kaWZpZWQgYWN0aW9uc1xuICAgIGVsZW1lbnQsXG4gICAge1xuICAgICAgLy8gdXNlcklkOiB0aGlzLmlkLFxuICAgICAgdGFibGVUeXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIHNob3dVbkxpbms6IHRoaXMuc2hvd1VuTGluayxcbiAgICAgIHBhY2thZ2VEYXRhOiB0aGlzLnBhY2thZ2VEYXRhXG4gICAgfVxuICApO1xufVxucHJpdmF0ZSBpc1N0YXR1c0ZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghZmllbGROYW1lKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGxvd2VyRmllbGQgPSBmaWVsZE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGxvd2VyRmllbGQgPT09ICdzdGF0dXMnIHx8IFxuICAgICAgICAgbG93ZXJGaWVsZC5pbmNsdWRlcygnc3RhdHVzJykgfHwgXG4gICAgICAgICBsb3dlckZpZWxkID09PSAnYXZhaWxzdGF0dXMnIHx8XG4gICAgICAgICBsb3dlckZpZWxkID09PSAnYWNjb3VudF9zdGF0dXMnIHx8XG4gICAgICAgICBsb3dlckZpZWxkID09PSAnaXNfY3VzdG9tX2dyYWRlJztcbn1cblxuLyoqXG4gKiBDYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggd29yZCBpbiBhIHN0cmluZ1xuICogSGFuZGxlczogc3BhY2VkIHdvcmRzLCBjYW1lbENhc2UsIHNuYWtlX2Nhc2UsIGtlYmFiLWNhc2UsIGFuZCBjb21wb3VuZCB3b3Jkc1xuICovXG5wcml2YXRlIGNhcGl0YWxpemVTdGF0dXModmFsdWU6IGFueSk6IHN0cmluZyB7XG4gIGlmICghdmFsdWUpIHJldHVybiAnJztcbiAgXG4gIGxldCBzdHIgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcbiAgXG4gIC8vIFJlcGxhY2UgdW5kZXJzY29yZXMgYW5kIGh5cGhlbnMgd2l0aCBzcGFjZXMgZmlyc3RcbiAgc3RyID0gc3RyLnJlcGxhY2UoL1tfLV0vZywgJyAnKTtcbiAgXG4gIC8vIElmIGl0IGhhcyBzcGFjZXMgbm93IChvciBvcmlnaW5hbGx5IGhhZCB0aGVtKSwganVzdCBjYXBpdGFsaXplIGVhY2ggd29yZFxuICBpZiAoc3RyLmluY2x1ZGVzKCcgJykpIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5maWx0ZXIod29yZCA9PiB3b3JkLmxlbmd0aCA+IDApXG4gICAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXG4gICAgICAuam9pbignICcpO1xuICB9XG4gIFxuICAvLyBIYW5kbGUgY2FtZWxDYXNlIChlLmcuLCBcImF2YWlsU3RhdHVzXCIsIFwiY2hlY2tJbk91dFwiKVxuICBzdHIgPSBzdHJcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxICQyJylcbiAgICAucmVwbGFjZSgvKFtBLVpdKShbQS1aXVthLXpdKS9nLCAnJDEgJDInKTtcbiAgXG4gIC8vIE5vdyBjYXBpdGFsaXplIGVhY2ggd29yZFxuICByZXR1cm4gc3RyXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5maWx0ZXIod29yZCA9PiB3b3JkLmxlbmd0aCA+IDApXG4gICAgLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJyk7XG59XG5cblxuICBncmlkQ29udGV4dCA9IHtcbiAgICBhcHBseUZpbHRlcjogKGNvbDogYW55KSA9PiB0aGlzLmFwcGx5RmlsdGVyT25Db2x1bW4oY29sKSxcbiAgICBjbGVhckZpbHRlcjogKGNvbDogYW55KSA9PiB0aGlzLnJlbW92ZUZpbHRlckZyb21Db2x1bW4oY29sKVxuICB9O1xuXG4gIHByaXZhdGUgY2xvc2VBbGxGaWx0ZXJNZW51cygpOiB2b2lkIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWx0ZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPVxuICAgICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVycyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG5cblxuICBhcHBseUZpbHRlck9uQ29sdW1uKGNvbDogYW55KSB7XG4gICAgdGhpcy5jbG9zZUFsbEZpbHRlck1lbnVzKCk7XG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnksXG4gICAgICB0eXBlOiBjb2wudHlwZSxcbiAgICAgIF9pZHM6IGNvbC5faWRzXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnW2V4aXN0aW5nSW5kZXhdID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgICB0aGlzLnJlcGxhY2VDb2x1bW5RdWVyeSh0aGlzLmNvbHVtbnMsIGNvbCwgY29sLnF1ZXJ5KTtcbiAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XG5cbiAgfVxuXG4gIHJlbW92ZUZpbHRlckZyb21Db2x1bW4oY29sOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICBjb25zdCBlbXB0eVF1ZXJ5ID0ge1xuICAgICAgZmlyc3RfY29uZGl0aW9uOiBudWxsLFxuICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICBjb25kaXRpb246ICdub25lJyxcbiAgICAgIHNlY29uZF9jb25kaXRpb246IG51bGwsXG4gICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5yZXBsYWNlQ29sdW1uUXVlcnkodGhpcy5jb2x1bW5zLCBjb2wsIGVtcHR5UXVlcnkpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maWx0ZXJzQ29uZmlnLmZpbmRJbmRleCgoZjogYW55KSA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XG4gIH1cblxuXG4gIHByaXZhdGUgcmVwbGFjZUNvbHVtblF1ZXJ5KFxuICAgIGNvbHVtbnM6IGFueVtdLFxuICAgIHRhcmdldENvbDogYW55LFxuICAgIG5ld1F1ZXJ5OiBhbnlcbiAgKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgaWYgKGNvbC5maWVsZCA9PT0gdGFyZ2V0Q29sLmZpZWxkKSB7XG4gICAgICAgIGNvbC5xdWVyeSA9IHsgLi4ubmV3UXVlcnkgfTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnJlcGxhY2VDb2x1bW5RdWVyeShjb2wuY2hpbGRyZW4sIHRhcmdldENvbCwgbmV3UXVlcnkpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRGb3JtYXRlZERhdGUodmFsIDogYW55KXtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZm9ybWF0RGF0ZVZhbHVlKHZhbCwgdGhpcy5kYXRlRm9ybWF0KTtcbiAgfVxuLyoqXG4gKiBDbG9zZXMgYWxsIGV4cGFuZGVkIGRldGFpbCByb3dzXG4gKi9cbmNsb3NlQWxsRXhwYW5kZWRSb3dzKCk6IHZvaWQge1xuICBpZiAodGhpcy5rZWVwTXVsdGlwbGVFeHBhbmRlZERldGFpbHMpIHtcbiAgICAvLyBDbGVhciBhcnJheSBvZiBleHBhbmRlZCByb3dzXG4gICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9IFtdO1xuICB9IGVsc2Uge1xuICAgIC8vIENsZWFyIHNpbmdsZSBleHBhbmRlZCByb3dcbiAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gJyc7XG4gIH1cbiAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xufVxufSIsIjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMiBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5hdiBuYXYtdGFic1wiICpuZ0lmPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2IG5hdi10YWJzXCIgaWQ9XCJuYXYtdGFiXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVUYWIodGFiKVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09IHRhYlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFiIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1zZWFyY2hcIiBbc3R5bGUud2lkdGgucHhdPVwiMzUwXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJlbmFibGVHbG9iYWxTZWFyY2hcIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNnbG9iYWxTZWFyY2hJbnB1dFxuICAgICAgICAgICpuZ0lmPVwiZW5hYmxlR2xvYmFsU2VhcmNoXCJcbiAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzZweFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2gsIHRoZW4gcHJlc3MgRW50ZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVTZWFyY2hcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uR2xvYmFsU2VhcmNoKClcIlxuICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaElucHV0KCRldmVudClcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtcmlnaHQtdG9wLWFjdGlvbnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYWN0aW9uLWJ1dHRvbnMtcm93XCJcbiAgICAgICAgICAqbmdJZj1cImJ1dHRvbj8uaGFzX3Blcm1pc3Npb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCJKYXZhU2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQnV0dG9uQ2xpY2soYnV0dG9uLm5hbWUpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYm9yZGVyIGJvcmRlci1wcmltYXJ5IGJ0bi1hY3RpdmUtcHJpbWFyeSBtZS0yIHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHgtM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b24uaXNfc2hvd0ljb25cIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zLycgKyBidXR0b24uaWNvbiArICcuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtaGlkZGVuIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICBbY2xhc3MubXMtMF09XCJidXR0b24uaXNfc2hvd0ljb25cIlxuICAgICAgICAgICAgICA+e3sgYnV0dG9uPy5uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFzaG93RmlsdGVyUm93XCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBhY3Rpb24tYnV0dG9ucy1yb3dcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3BlbkZpbHRlcigpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RmlsdGVyc1wiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IG1lLTIgcC0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweC0zXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtaGlkZGVuIHRleHQtd2hpdGVcIj5GaWx0ZXJzPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJhY3RpdmVGaWx0ZXJlZENvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDdweDtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4ICMwMDIyZmY7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgNjAsIDI1NSk7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICByaWdodDogMTZweDtcbiAgICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1ibG9ja1wiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkLW5vbmVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnYWR2YW5jZS1maWx0ZXInKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnYWR2YW5jZS1maWx0ZXInXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3pvb20tY2hhcmdlLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIHRvcC1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYWN0aW9uLWJ1dHRvbnMtcm93XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAnc2V0dGluZycgfHxcbiAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1sYXlvdXQnIHx8XG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtcHJlc2V0cycgfHxcbiAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICdzaG93LWhpZGUtY29sdW1ucydcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2V0dGluZ3MtMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiB0b3AtaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj4gLS0+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IG1lLTIgcC0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweC0zXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NldHRpbmdzLTIuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1oaWRkZW4gdGV4dC13aGl0ZVwiPlNldHRpbmc8L3NwYW4+XG4gICAgICAgIDwvYT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICdzZXR0aW5nJ1wiXG4gICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTEgYWN0aW9ucy1kcm9wZG93bi1zZXR0aW5nXCJcbiAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBzaG93IHNoYWRvdyBjdXN0b20tbWVudVwiPlxuICAgICAgICAgICAgPCEtLSBUYWJsZSBMYXlvdXQgLS0+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZUFjdGlvbnMoJ3RhYmxlLWxheW91dCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3RhYmxlLTIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgVGFibGUgTGF5b3V0PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gVGFibGUgUHJlc2V0cyAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZUFjdGlvbnMoJ3RhYmxlLXByZXNldHMnKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2xpc3QtZGV0YWlscy5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBUYWJsZSBQcmVzZXRzPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPCEtLSBDb2x1bW5zIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd1NpZGVNZW51XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygnc2hvdy1oaWRlLWNvbHVtbnMnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS5zdmcnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgQ29sdW1uczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11dGVkLXRleHRcIj57eyBjb2x1bW5zQ291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEZpbHRlciAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPcGVuRmlsdGVyKCk7IGFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1wiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIG10LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBGaWx0ZXJcbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPCEtLSBEb3dubG9hZCAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZENzdignY3N2JylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9kb3dubG9hZC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgQ1NWIEV4cG9ydFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVFeHBvcnRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRDc3YoJ3hsc3gnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rvd25sb2FkLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBFeGNlbCBFeHBvcnRcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gRm9udCBGYW1pbHkgJiBGb250IFNpemUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwYi0yIHB0LTJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRm9udCBGYW1pbHkgLS0+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvbnRGYWltbHlcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZvbnRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZm9udCBvZiBmb250RmFtaWxpZXNcIiBbdmFsdWVdPVwiZm9udFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBmb250IH19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgICAgIDwhLS0gRm9udCBTaXplIC0tPlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZvbnRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImJvZHlUZXh0Rm9udHNTaXplXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzaXplIG9mIGZvbnRTaXplc1wiIFt2YWx1ZV09XCJzaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNpemUgfX1cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRhYmxlIExheW91dCAtLT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtbGF5b3V0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVMYXlvdXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtcHJlc2V0cydcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlUHJlc2V0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGFibGUgUHJlc2V0cyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3Nob3ctaGlkZS1jb2x1bW5zJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2hvd0hpZGVDb2x1bW5zXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucy1yb3dcIiAqbmdJZj1cInNob3dGdWxsU2NyZWVuQnV0dG9uXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgKm5nSWY9XCIhaXNGdWxsU2NyZWVuXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJ0bi1hY3RpdmUtcHJpbWFyeSBib3JkZXIgYm9yZGVyLXByaW1hcnkgZXhwZW5kIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICBkYXRhLWJzLXBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgdGl0bGU9XCJNaW5pbWlzZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBtaW5BcnJvdzogIWlzRnVsbFNjcmVlbiwgbWF4QXJyb3c6IGlzRnVsbFNjcmVlbiB9XCJcbiAgICAgICAgICBzdHlsZT1cInRyYW5zaXRpb246IGNvbG9yIDAuMnNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXhwZW5kLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yIG1iLTFcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdJZj1cImlzRnVsbFNjcmVlblwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IGV4cGVuZCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIlxuICAgICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgZGF0YS1icy1wbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgIHRpdGxlPVwiTWF4aW1pc2VcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgbWluQXJyb3c6ICFpc0Z1bGxTY3JlZW4sIG1heEFycm93OiBpc0Z1bGxTY3JlZW4gfVwiXG4gICAgICAgICAgc3R5bGU9XCJ0cmFuc2l0aW9uOiBjb2xvciAwLjJzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL21pbmltaXplLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yIG1iLTFcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPCEtLSBFeGFtcGxlIHNpbmdsZSBkYW5nZXIgYnV0dG9uIC0tPlxuXG4gICAgICAgIDwhLS0gPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBkLWZsZXggZ2FwLTIgYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2FjdGlvbnMnKVwiXG4gICAgICAgID5cbiAgICAgICAgICBBY3Rpb25cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9WZWN0b3Iuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBzaG93XCI+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPkFjdGlvbjwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+QW5vdGhlciBhY3Rpb248L2E+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPlNvbWV0aGluZyBlbHNlIGhlcmU8L2E+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIj5TZXBhcmF0ZWQgbGluazwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dGaWx0ZXJzICYmICFzaG93RmlsdGVyUm93XCJcbiAgICBjbGFzcz1cInRvcC1maWx0ZXItcm93IGJvcmRlci10b3AgcHktMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvcEZpbHRlclJvd0hlaWdodFwiXG4gID5cbiAgICA8IS0tIExFRlQgU0lERSAoRmlsdGVyIHRhZ3MgKyBGaWx0ZXIgYnV0dG9uKSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgYWN0aXZlRmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIlxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXRhZ3NcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBpc0FjdGl2ZUZpbHRlck9wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPSAnZmlsdGVyLWNvbHVtbnMnO1xuICAgICAgICAgICAgICBvcGVuRmlsdGVyKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdXRlZC10ZXh0IGFkZC1maWx0ZXItYnV0dG9uIGFjdGl2ZS1maWx0ZXJzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcFwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgICAgICAgICBjb2w/LmZpZWxkID09IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5maWVsZCAmJlxuICAgICAgICAgICAgICBpc0FjdGl2ZUZpbHRlck9wZW4gJiZcbiAgICAgICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09ICdmaWx0ZXItY29sdW1ucydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXItdGFnIG10LTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLnN2ZydcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVDb2x1bW5GaWx0ZXJGcm9tQ29sdW1uKGNvbClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jcm9zcy1wcmltYXJ5LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGNyb3NzLXNlY29uZGFyeSBtcy0yIG1iLTFcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAnZmlsdGVyLWNvbHVtbnMnICYmXG4gICAgICAgICAgICAgIGNvbD8uZmllbGQgPT0gc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmZpZWxkICYmXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlblxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyQ29sdW1uczsgY29udGV4dDogeyBjb2x1bW46IGNvbCB9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWRkLWZpbHRlci1idXR0b24tbWVudVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2ZpbHRlci1jb2x1bW5zJyk7IGlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdXRlZC10ZXh0IGFkZC1maWx0ZXItYnV0dG9uIGJ1dHRvbi1maWx0ZXJcIlxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDcwcHhcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGx1cy5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWUtMiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgRmlsdGVyXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2ZpbHRlci1jb2x1bW5zJyAmJiAhaXNBY3RpdmVGaWx0ZXJPcGVuXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyQ29sdW1uc1wiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSSUdIVCBTSURFIChVcGRhdGUgKyBSZXNldCkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNsaWNrKT1cInNhdmVQcmVzZXQoKVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGN1cnNvci1wb2ludGVyIGFsbC1maWx0ZXJzLXJlc2V0LWJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiIWNoZWNrRmlsdGVyQ2hhbmdlc0VmZmVjdCgpXCJcbiAgICAgID5cbiAgICAgICAgVXBkYXRlIFZpZXdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGN1cnNvci1wb2ludGVyIGFsbC1maWx0ZXJzLXJlc2V0LWJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiIXRhYmxlRmlsdGVyVmlld0lkICYmIGFjdGl2ZUZpbHRlcmVkQ29sdW1ucz8ubGVuZ3RoXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCJcbiAgICAgID5cbiAgICAgICAgUmVzZXRcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgW3N0eWxlLmhlaWdodF09XCJcbiAgICAgIHNob3dGaWx0ZXJzID8gJ2NhbGMoMTAwJSAtICcgKyB0b3BGaWx0ZXJSb3dIZWlnaHQgKyAncHgpJyA6ICcxMDAlJ1xuICAgIFwiXG4gICAgY2RrRHJvcExpc3RHcm91cFxuICAgIGNsYXNzPVwiZGF0YS1ncmlkLXRhYmxlLXdyYXBwZXIgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAjZGF0YUdyaWRDb250YWluZXJcbiAgICBbc3R5bGUuZm9udEZhbWlseV09XCJmb250RmFpbWx5XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIGlkPVwiZGF0YS1ncmlkLW1haW4tY29udGFpbmVyXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2hvd1Jvd3NHcm91cGluZ1wiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICBbY2RrRHJvcExpc3REYXRhXT1cImNvbHVtbnNcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcbiAgICAgICAgdG9wR3JvdXBlZEJhZGdlc0JhY2tncm91bmRDb2xvciB8fCBoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcbiAgICAgIFwiXG4gICAgICBjZGtEcm9wTGlzdFxuICAgICAgKGNka0Ryb3BMaXN0RW50ZXJlZCk9XCJlbnRlclRvVG9wUm93R3JvdXBpbmcoJGV2ZW50KVwiXG4gICAgICAoY2RrRHJvcExpc3RFeGl0ZWQpPVwiZXhpdGVkRnJvbVRoZVRvcFJvdygkZXZlbnQpXCJcbiAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wVG9wR3JvdXAoJGV2ZW50KVwiXG4gICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJjYW5FbnRlclRvUm93c0dyb3VwaW5nXCJcbiAgICAgIGlkPVwicm93cy1ncm91cGluZy10b3AtY29udGFpbmVyXCJcbiAgICAgIGNsYXNzPVwiYm9yZGVyLWJlbG93IGQtZmxleCBweC00IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGVhZGVyVGV4dENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2p1c3RpZnkuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhICYmICFncm91cGVkQ29sdW1ucz8ubGVuZ3RoXCI+XG4gICAgICAgICAgRHJhZyBoZXJlIHRvIHNldCByb3cgZ3JvdXBzXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkdyb3VwUmVvcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ0xvY2tBeGlzXT1cIid4J1wiXG4gICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGdyb3VwZWRDb2x1bW5zO1xuICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENvbHVtbnMubGVuZ3RoID4gMSAmJiBpICE9IGdyb3VwZWRDb2x1bW5zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+e3sgY2hpbGQuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJcbiAgICAgICAgJ2NhbGMoMTAwJSAtICcgK1xuICAgICAgICAoc2hvd1Jvd3NHcm91cGluZ1xuICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICsgZm9vdGVyUm93SGVpZ2h0XG4gICAgICAgICAgOiBmb290ZXJSb3dIZWlnaHQpICtcbiAgICAgICAgJ3B4KSdcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImgtMTAwXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgICFzaG93U2lkZU1lbnVcbiAgICAgICAgICAgID8gJzEwMCUnXG4gICAgICAgICAgICA6IHNpZGVNZW51VmlzaWJsZVxuICAgICAgICAgICAgPyAnY2FsYygxMDAlIC0gMjgwcHgpJ1xuICAgICAgICAgICAgOiAnY2FsYygxMDAlIC0gMzBweCknXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCB0cmFuc2l0aW9uIHBvc2l0aW9uLXJlbGF0aXZlIHctMTAwXCI+XG4gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIERhdGEgR3JpZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlci13cmFwcGVyIHctMTAwXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJUZXh0Q29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cImhlYWRlclRleHRGb250c1NpemVcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCIhaGFzQW55VmlzaWJsZUNvbHVtblwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nICYmIHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICA6IHNob3dDb2x1bW5zR3JvdXBpbmcgfHwgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMlxuICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tIERhdGEgR3JpZCBMZWZ0IFBpbm5lZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1oZWFkZXIgbGVmdC1waW5uZWRcIlxuICAgICAgICAgICAgICAjbGVmdFBpbm5lZEhlYWRlclxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cImhhc0xlZnRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NlcmlhbE51bWJlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3gtY2VsbCBib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCI1NVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgJiYgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyXG4gICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFMuTm9cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0NoZWNrYm94ZXNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGwgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogM1xuICAgICAgICAgICAgICAgICAgICA6IHNob3dDb2x1bW5zR3JvdXBpbmcgfHwgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGVTdGF0ZShkYXRhU2V0KVwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0FsbFNlbGVjdGVkKGRhdGFTZXQpXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKGRhdGFTZXQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgICBpZD1cImxlZnQtcGlubmVkLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwibGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwib25Ecm9wTGlzdEVudGVyKCRldmVudCwgJ2xlZnQnKVwiXG4gICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0U29ydGVkKT1cIlxuICAgICAgICAgICAgICAgICAgb25Tb3J0R3JvdXAoJGV2ZW50LCAncHJldmlld0xlZnRQaW5uZWRDb2x1bW5zJylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wR3JvdXAoKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDFweFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgY29sIG9mIGxlZnRQaW5uZWRDb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMnXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1BsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBzaW5nbGVDb2xcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVDb2w+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBjb2w/LmNoaWxkcmVuPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIENlbnRlciBQaW5uZWQgSGVhZGVyIHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtaGVhZGVyIGNlbnRlci1zY3JvbGxhYmxlXCJcbiAgICAgICAgICAgICAgI2NlbnRlclBpbm5lZEhlYWRlclxuICAgICAgICAgICAgICAoc2Nyb2xsKT1cIm9uQ2VudGVyQm9keVNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaWQ9XCJjZW50ZXItcGlubmVkLWhlYWRlclwiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlxuICAgICAgICAgICAgICAgIHNob3dSb3dzR3JvdXBpbmcgPyBbJ3Jvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lciddIDogW11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjZW50ZXJDb2x1bW5zXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgJiYgZHJhZ2dpbmdJbkdyb3VwQXJlYVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cIm9uRHJvcExpc3RFbnRlcigkZXZlbnQsICdjZW50ZXInKVwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJvblNvcnRHcm91cCgkZXZlbnQsICdwcmV2aWV3Q2VudGVyQ29sdW1ucycpXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3BHcm91cCgpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICdjYWxjKDEwMCUgLSAnICtcbiAgICAgICAgICAgICAgICAocmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGggKyBsZWZ0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoKSArXG4gICAgICAgICAgICAgICAgJ3B4KSdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDIwMHB4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgI2NvbHVtbnNHcm91cGVkQm94XG4gICAgICAgICAgICAgICAgaWQ9XCJncm91cEJveEhlYWRlckRpdlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCB3LTEwMCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgIHNob3dGaWx0ZXJSb3cgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcy0zXCI+R3JvdXA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCAnZ3JvdXAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25SZXNpemVHcm91cEJveCgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAtMnB4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBjdXJzb3ItcG9pbnRlciBib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAzMHB4OyBoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT09ICdBc3NldHMnIHx8IGdyaWRUeXBlID09PSAnVGFza3MnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIlxuICAgICAgICAgICAgICAgICAgY2hlY2tDb2x1bW5Hcm91cGluZ1N0YXR1cyhjb2wpO1xuICAgICAgICAgICAgICAgICAgZHJhZ1N0YXJ0T25Hcm91cChjb2wpO1xuICAgICAgICAgICAgICAgICAgb25EcmFnU3RhcnRlZChjb2wpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ01vdmVkKT1cIm9uRHJhZ01vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwib25EcmFnRW5kZWQoKVwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiBjZW50ZXJDb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3ByZXZpZXdDZW50ZXJDb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNPdXRzaWRlQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoZHJhZ2dpbmdJbkdyb3VwQXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNPdXRzaWRlQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS1jcm9zcy5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdjZW50ZXJDb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWEgJiYgIWlzT3V0c2lkZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIG1zLTJcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmNoaWxkcmVuPy5sZW5ndGg7IGVsc2Ugc2luZ2xlQ29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQ/LmlzX2dyb3VwYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5pc19ncm91cGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSBEYXRhIEdyaWQgUmlnaHQgUGlubmVkIEhlYWRlciBzdGFydHMgaGVyZSAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgaWQ9XCJyaWdodC1waW5uZWQtaGVhZGVyXCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiXG4gICAgICAgICAgICAgICAgc2hvd1Jvd3NHcm91cGluZyA/IFsncm93cy1ncm91cGluZy10b3AtY29udGFpbmVyJ10gOiBbXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlciByaWdodC1waW5uZWRcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwiXG4gICAgICAgICAgICAgICAgb25Tb3J0R3JvdXAoJGV2ZW50LCAncHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwib25Ecm9wTGlzdEVudGVyKCRldmVudCwgJ3JpZ2h0JylcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcEdyb3VwKClcIlxuICAgICAgICAgICAgICAjcmlnaHRQaW5uZWRIZWFkZXJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyaWdodC1waW5uZWQtaGVhZGVyIGQtZmxleFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAwLjJweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWdhYmxlLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiByaWdodFBpbm5lZENvbHVtbnM7XG4gICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRSaWdodDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjZcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIHNpbmdsZUNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IGNvbC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUNvbD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIEJvZHkgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWRhdGFTZXQ/Lmxlbmd0aCAmJiAhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVjb3JkLW5vdC1mb3VuZC5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+PC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdj5ObyBSZWNvcmQgRm91bmQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgaC0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGxvYWRpbmctb3ZlcmxheVwiXG4gICAgICAgICAgICAqbmdJZj1cImxvYWRpbmcgfHwgZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgei1pbmRleDogOTk5O1xuICAgICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJsb2FkZXJcIj48L3NwYW4+IC0tPlxuICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1ib2R5LXdyYXBwZXIgcG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYm9keVdyYXBwZXJIZWlnaHRcIlxuICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvOyBvdmVyZmxvdy14OiBoaWRkZW5cIlxuICAgICAgICAgICAgI21haW5TY3JvbGxcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25NYWluU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cInZlcnRpY2FsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gTEVGVCBQSU5ORUQgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgIWdyb3VwZWRDb2x1bW5zLmxlbmd0aCA/IG9yaWdpbmFsRGF0YVNldC5sZW5ndGggKiByb3dIZWlnaHQgOiAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtjbGFzcy5oLTEwMF09XCJvcmlnaW5hbERhdGFTZXQubGVuZ3RoIDwgOFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keSBsZWZ0LXBpbm5lZC1ib2R5IHctMTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJoYXNMZWZ0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnRyYW5zcGFyZW50LWJvcmRlci1yaWdodF09XCIhaGFzTGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVkoJyArIHRyYW5zbGF0ZVkgKyAncHgpJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJsZWZ0UGlubmVkQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIlxuICAgICAgICAgICAgICAgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtAcm93RHluYW1pY109XCJyb3dBbmltYXRpb25cIlxuXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0xlZnRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiAoc3RhcnRJbmRleCArIGkpICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiAoc3RhcnRJbmRleCArIGkpICUgMiAhPT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTGVmdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxBbW91bnRSb3cgJiYgb3JpZ2luYWxEYXRhU2V0Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBfX3ZpcnR1YWxJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0xlZnRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQ0VOVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImgtMTAwXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNlbnRlclBpbm5lZEhlYWRlci5jbGllbnRXaWR0aFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1ib2R5IGNlbnRlci1zY3JvbGxhYmxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuOyBvdmVyZmxvdy14OiBhdXRvXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVZKCcgKyB0cmFuc2xhdGVZICsgJ3B4KSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgI2NlbnRlclNjcm9sbGFibGVCb2R5XG4gICAgICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNlbnRlckJvZHlTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJveFNoYWRvd109XCJoYXNMZWZ0UGlubmVkQ29sdW1ucyA/IGxlZnRQaW5uZWRCb3hzaGFkb3c6ICdub25lJ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBbQHJvd0R5bmFtaWNdPVwicm93QW5pbWF0aW9uXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0NlbnRlckNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IChzdGFydEluZGV4ICsgaSkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IChzdGFydEluZGV4ICsgaSkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFsQW1vdW50Um93ICYmIG9yaWdpbmFsRGF0YVNldD8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHsgX192aXJ0dWFsSW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdDZW50ZXJDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBSSUdIVCBQSU5ORUQgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicmlnaHQtcGlubmVkLWJvZHktd3JhcHBlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzUmlnaHRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmgtMTAwXT1cIm9yaWdpbmFsRGF0YVNldC5sZW5ndGggPCA4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cIlxuICAgICAgICAgICAgICAgIGlzU2Nyb2xsYmFyVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgPyByaWdodFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aCAtIDE1XG4gICAgICAgICAgICAgICAgICA6IHJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwicmlnaHRQaW5uZWRCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keSByaWdodC1waW5uZWQtYm9keSB3LTEwMCBoLTEwMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW5cIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVkoJyArIHRyYW5zbGF0ZVkgKyAncHgpJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJveFNoYWRvd109XCJoYXNSaWdodFBpbm5lZENvbHVtbnMgPyByaWdodFBpbm5lZEJveHNoYWRvdzogJ25vbmUnXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nICYmICFkYXRhU2V0TG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW0Byb3dEeW5hbWljXT1cInJvd0FuaW1hdGlvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdyBvZiB2aXNpYmxlUm93cztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogKHN0YXJ0SW5kZXggKyBpKSAlIDIgPT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogKHN0YXJ0SW5kZXggKyBpKSAlIDIgIT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbEFtb3VudFJvdyAmJiBvcmlnaW5hbERhdGFTZXQ/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7IF9fdmlydHVhbEluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPVwidG9wOiBhdXRvOyBsZWZ0OiBhdXRvXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBmdWxsc2NyZWVuSW1hZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICBkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAoZm9vdGVyUm93SGVpZ2h0ICsgMTAwKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImltYWdlLW1vZGFsIGZ1bGwtaW1hZ2UtbW9kYWxcIlxuICAgICAgICAgICAgICAqbmdJZj1cImZ1bGxzY3JlZW5JbWFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImZ1bGxzY3JlZW5JbWFnZVwiXG4gICAgICAgICAgICAgICAgYWx0PVwiRnVsbHNjcmVlbiBJbWFnZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFJvd3Muc2l6ZSA+IDAgJiYgc2hvd1Rhc2tiYXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRhc2tiYXIgdy0xMDBcIlxuICAgICAgICAgICAgICBbc3R5bGUuYm90dG9tLnB4XT1cIjBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtcm93cy1hY3Rpb24tYmFyXCIgW0BzbGlkZVVwXT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdGVkLWNvdW50XCI+XG4gICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZFJvd3Muc2l6ZSB9fSBzZWxlY3RlZCBvZlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICBjb25maWc/LnBhZ2luYXRpb25QYXJhbXM/LnRvdGFsSXRlbXNcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBUb3RhbFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRhc2tiYXJBY3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbj8uaGFzX3Blcm1pc3Npb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tYnRuIHZlcmlmaWVkIGJ0biB7eyBhY3Rpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVmVyaWZ5Q2xpY2soYWN0aW9uPy5hY3Rpb25OYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgYWN0aW9uPy5hY3Rpb25OYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrYmFyQWN0aW9ucy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT09IHRhc2tiYXJBY3Rpb25zLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza2JhckFjdGlvbnNbaSArIDFdPy5oYXNfcGVybWlzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID58PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJTZWxlY3Rpb25TdGF0ZSh0YWJsZVR5cGUpO3NlbGVjdGVkUm93cy5jbGVhcigpO1wiIGNsYXNzPVwiY2xlYXItYnRuIG1zLTIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImJpIGJpLXgtY2lyY2xlXCI+PC9pPiBDbGVhciBTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gVmVydGljYWwgRmFrZSBzY3JvbGwgQmFyIC0tPlxuICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgKHNjcm9sbCk9XCJvbk1haW5GYWtlU2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLXNjcm9sbGJhciBmYWtlLXNjcm9sbGJhci12ZXJ0aWNhbCBkLW5vbmVcIlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cInZlcnRpY2FsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJcbiAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAzXG4gICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImJvZHlXcmFwcGVySGVpZ2h0XCJcbiAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICAgICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICAgICAgICAgICAgd2lkdGg6IDE3cHg7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGYxZjJmMztcbiAgICAgICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgKiBkYXRhU2V0TGVuZ3RoXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEhvcml6aW50YWwgRmFrZSBTY3JvbGxiYXJzIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxuICAgICAgICAgICpuZ0lmPVwiaGFzU2Nyb2xsICYmICFzaG91bGRSZXN0b3JlU2Nyb2xsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLWhvcml6aW50YWwtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibGVmdFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXg6IHNjcm9sbFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNlbnRlckJvZHlTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZha2UtaG9yaXppbnRhbC1zY3JvbGxiYXJcIlxuICAgICAgICAgICAgI2hvcml6aW50YWxGYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGggLSAxMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJob3JpemludGFsU2Nyb2xsYmFyV2lkdGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLWhvcml6aW50YWwtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICNmYWtlU2Nyb2xsXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy14OiBzY3JvbGxcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTaWRlIE1lbnUgSW1wbGVtZW50ZWQgSGVyZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJzaG93U2lkZU1lbnVcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwic2lkZU1lbnVWaXNpYmxlID8gMjgwIDogMzBcIlxuICAgICAgICBjbGFzcz1cInJpZ2h0LW1lbnUgaC0xMDBcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInNpZGVtZW51QmFja2dyb3VuZENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIGQtZmxleCBmbGV4LXJvdy1yZXZlcnNlXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMzBweFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1zdGFydF09XCJzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNpZGVNZW51KCdjb2xzJylcIlxuICAgICAgICAgICAgICBbY2xhc3MuYmctZmZmXT1cIlxuICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2NvbHMnICYmIHNpZGVNZW51VmlzaWJsZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJlbG93XT1cInNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1ucy1idXR0b24gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3VpLWNoZWNrcy1ncmlkLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1tZW51ZS10ZXh0XCI+Q29sdW1uczwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNpZGVNZW51KCdmaWx0cnMnKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5iZy1mZmZdPVwiXG4gICAgICAgICAgICAgICAgY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnZmlsdHJzJyAmJiBzaWRlTWVudVZpc2libGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCJcbiAgICAgICAgICAgICAgICBzaWRlTWVudVZpc2libGUgJiYgY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnZmlsdHJzJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbnMtYnV0dG9uIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudWUtdGV4dFwiPkZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJoLTEwMFwiXG4gICAgICAgICAgICAqbmdJZj1cInNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBzaWRlTWVudVZpc2libGUgPyAnMjUwcHgnIDogJycgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2NvbHMnICYmIHNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFubmVsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSBDb2x1bW4gSXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1wYW5lbC1ib2R5IHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxociAvPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudS1yb3ctZ3JvdXBzXCIgc3R5bGU9XCJoZWlnaHQ6IDMwJVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVNZW51Um93R3JvdXBzXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2ZpbHRycycgJiYgc2lkZU1lbnVWaXNpYmxlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlRmlsdGVyc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZm9vdGVyUm93SGVpZ2h0XCJcbiAgICAgIGNsYXNzPVwiYm9yZGVyLXRvcFwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImZvb3RlclJvd0JhY2tncm91bmRDb2xvclwiXG4gICAgICAqbmdJZj1cInBhZ2luYXRpb25Db25maWdcIlxuICAgID5cbiAgICAgIDwhLS0gUm93czogPHNwYW4gY2xhc3M9XCJmdy01MDAgbXMtMVwiPnt7IGRhdGFTZXQubGVuZ3RoIH19PC9zcGFuPiAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInBhZ2luYXRpb24tY29udGFpbmVyXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJmb290ZXJSb3dIZWlnaHRcIlxuICAgICAgICBbc3R5bGUucGFkZGluZy5weF09XCJmb290ZXJQYWRkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2Utc2l6ZVwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFnaW5hdGlvbkNvbmZpZy5saW1pdFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2l6ZSBvZiBwYWdlU2l6ZU9wdGlvbnNcIiBbdmFsdWVdPVwic2l6ZVwiPlxuICAgICAgICAgICAgICB7eyBzaXplIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiPiBwZXIgcGFnZSA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWluZm9cIj5cbiAgICAgICAgICBSZXN1bHRzOlxuICAgICAgICAgIHt7IChwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKSAqIHBhZ2luYXRpb25Db25maWcubGltaXQgKyAxIH19LXt7XG4gICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgKiBwYWdpbmF0aW9uQ29uZmlnLmxpbWl0IDxcbiAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzXG4gICAgICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy5wYWdlICogcGFnaW5hdGlvbkNvbmZpZy5saW1pdFxuICAgICAgICAgICAgICA6IHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvZlxuICAgICAgICAgIHt7IHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oC5XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYWdlIG9mIHZpc2libGVQYWdlc1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cInBhZ2UgIT09ICcuLi4nXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2UpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJwYWdlID09PSBwYWdpbmF0aW9uQ29uZmlnLnBhZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBwYWdlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGFnZSA9PT0gJy4uLidcIj4uLi48L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnaW5hdGlvbkNvbmZpZy5wYWdlICsgMSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25Db25maWcucGFnZSA9PT0gcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKAulxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSBIZWFkZXIgQ2VsbCBUZW1wbGF0ZSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbjxuZy10ZW1wbGF0ZVxuICAjaGVhZGVyQ2VsbFxuICBsZXQtY29sXG4gIGxldC1waW5uZWRSaWdodD1cInBpbm5lZFJpZ2h0XCJcbiAgbGV0LWk9XCJpbmRleFwiXG4gIGxldC1jb2x1bW5JbmRleD1cImluZGV4XCJcbiAgbGV0LXNlY3Rpb25zPVwic2VjdGlvblwiXG4gIGxldC1jYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXI9XCJjYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXJcIlxuPlxuICA8ZGl2PlxuICAgIDwhLS0gR3JvdXAgSGVhZGVyIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aCA+IDA7IGVsc2UgZmxhdEhlYWRlclwiPlxuICAgICAgPGRpdiBjZGtEcm9wbGlzdEdyb3VwIGNsYXNzPVwiZ3JvdXAtY29sdW1uLXdyYXBwZXJcIj5cbiAgICAgICAgPCEtLSBQYXJlbnQgSGVhZGVyIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG91bGRUaGVHcm91cEhlYWRlclNob3coY29sKVwiXG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBncm91cC1oZWFkZXJcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIFtzdHlsZS5ncmlkQ29sdW1uXT1cIidzcGFuICcgKyBjb2wuY2hpbGRyZW4ubGVuZ3RoXCJcbiAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgW2NsYXNzLmp1c3RpZnktY29udGVudC1lbmRdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDFcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJncm91cC1oZWFkZXItY29udGVudFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgICBbY2xhc3MubXMtMl09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY29sLmNoaWxkcmVuKVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uUmVzaXplR3JvdXAoJGV2ZW50LCBjb2wsIHBpbm5lZFJpZ2h0KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDaGlsZCBIZWFkZXJzIGFuZCBGaWx0ZXJzIC0tPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjb2wuY2hpbGRyZW5cIlxuICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJvbkNoaWxkRHJvcGxpc3RTb3J0ZWQoJGV2ZW50LCBzZWN0aW9ucylcIlxuICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25DaGlsZERyb3BsaXN0RHJvcGVkKCRldmVudClcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiXG4gICAgICAgICAgICBzaG93Um93c0dyb3VwaW5nID8gWydyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXSA6IFtdXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjaGlsZFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIENoaWxkIEhlYWRlciAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsZC5pc192aXNpYmxlICYmICFjaGlsZFsnaXNSb3dHcm91cGVkJ11cIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIG9uZS1yb3ctaGVhZGVyLWNlbGxzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY2hpbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cImhlYWRlckZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5maWx0ZXItYXBwbGllZC1vbi10ZXh0XT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mudy0xMDBdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lZGl0YWJsZS1oZWFkZXJdPVwiY2hpbGQ/LmlzX2VkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5GaWx0ZXJvblRocmVlRG90c0NsaWNrKGNoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZC5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWUtMl09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjaGlsZC5waW5uZWRcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIE9ubHkgc2hvdyBtZW51IGlmIHRoaXMgY29sdW1uIGlzIGFjdGl2ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ29sID09PSBjaGlsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogLTUwJTsgei1pbmRleDogMjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC0oIWNoaWxkPy5waW5uZWQgPyBjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdCA6IDApXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzaG93RmlsdGVyUm93IHx8IHNob3dDb2x1bW5zR3JvdXBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMiAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodCAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZW51O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc05lc3RlZFRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDb2xJbmRleDogaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25SZXNpemVDb2x1bW4oJGV2ZW50LCBjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBGaWx0ZXIgQ2VsbCAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5maWVsZF09XCJjaGlsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNoaWxkLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNoaWxkLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImdyaWQtcm93OiAzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoaWxkLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uRmlsdGVyQ2hhbmdlKGNoaWxkKTsgYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkPy50eXBlID09ICdkcm9wZG93bicgfHwgY2hpbGQ/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjaGlsZD8udHlwZSA9PSAnYXJyYXknXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1zZWFyY2gtaW5wdXRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGQ/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjaGlsZD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNoaWxkPy50eXBlID09ICdhcnJheSdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICBvcGVuRmlsdGVyRnJvbURpc2FibGVkU2VhcmNoZWRJbnB1dChjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5GaWx0ZXIoY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkXT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wZS1ub25lXT1cImNoaWxkPy50eXBlID09ICdpbWFnZSdcIlxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDdweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4ICM3NDg2ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCAxNjMgMjMzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDEycHg7XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlRmlsdGVyQ2VsbD8uZmllbGQgPT0gY2hpbGQ/LmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDEwMCU7IHJpZ2h0OiAwOyB6LWluZGV4OiA5OVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkPy5waW5uZWQgPyAwIDogLWNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxMZWZ0XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjaGlsZCB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICFkcmFnZ2luZ0luR3JvdXBBcmVhIHx8XG4gICAgICAgICAgICAgICAgICAgIChjaGlsZC5pc19ncm91cGFibGUgJiYgZHJhZ2dpbmdJbkdyb3VwQXJlYSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhICYmICFjaGlsZC5pc19ncm91cGFibGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYmFuLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj57eyBjaGlsZC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBjaGlsZEhlYWRlclBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICBjYWxsZWRGcm9tTmVzdGVkUGxhY2Vob2xkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhICYmIGNoaWxkPy5pc19ncm91cGFibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIG1zLTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC42XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICBwaW5uZWRSaWdodDogcGlubmVkUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnM6IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEZsYXQgSGVhZGVyIHx8IFNpbmdsZSBIZWFkZXIgQ2VsbC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZmxhdEhlYWRlcj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncm91cC1jb2x1bW4td3JhcHBlclwiXG4gICAgICAgICpuZ0lmPVwiY29sLmlzX3Zpc2libGUgJiYgIWNvbFsnaXNSb3dHcm91cGVkJ11cIlxuICAgICAgPlxuICAgICAgICA8IS0tIEZ1bGwtaGVpZ2h0IEhlYWRlciBDZWxsIChzcGFucyAyIHJvd3MgdmlzdWFsbHkpIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBvbmUtcm93LWhlYWRlci1jZWxsc1wiXG4gICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyA/IGhlYWRlclJvd0hlaWdodCAqIDIgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nID8gaGVhZGVyUm93SGVpZ2h0ICogMiA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiaGVhZGVyRm9udFdlaWdodFwiXG4gICAgICAgICAgc3R5bGU9XCJncmlkLXJvdzogMSAvIHNwYW4gMlwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZWRpdGFibGUtaGVhZGVyXT1cImNvbD8uaXNfZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkLW9uLXRleHRdPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICAgb3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWUtMl09XCJjb2wub3JkZXJfYnlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydGluZ0NvbmZpZz8uZmllbGQgPT0gY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8IS0tIEFzY2VuZGluZyBTb3J0IEljb24gLS0+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdhc2MnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zb3J0LWFzYy5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnREZXNjKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIERlc2NlbmRpbmcgU29ydCBJY29uIC0tPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PSAnZGVzYydcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NvcnQtZGVzYy5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnRBc2MoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT09ICdkZXNjJ1wiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNvbCk7XG4gICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIE9ubHkgc2hvdyBtZW51IGlmIHRoaXMgY29sdW1uIGlzIGFjdGl2ZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ29sID09PSBjb2xcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IC01MCU7IHotaW5kZXg6IDIxXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAtKCFjb2w/LnBpbm5lZCA/IGNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxMZWZ0IDogMClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW5cbiAgICAgICAgICAgICAgICAgICAgICA/IHNob3dGaWx0ZXJSb3cgfHwgc2hvd0NvbHVtbnNHcm91cGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIC0gMTBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0IC0gMTBcbiAgICAgICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk1lbnU7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc05lc3RlZFRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRDb2xJbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnctMTAwXT1cImNvbC5waW5uZWQgPT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uUmVzaXplQ29sdW1uKCRldmVudCwgY29sKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBGaWx0ZXIgQ2VsbCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoY29sKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiY29sPy50eXBlID09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdpbWFnZScgfHwgY29sPy50eXBlID09ICdhcnJheSdcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLXNlYXJjaC1pbnB1dF09XCJcbiAgICAgICAgICAgICAgY29sPy50eXBlID09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdpbWFnZScgfHwgY29sPy50eXBlID09ICdhcnJheSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAocGFzdGUpPVwib25QYXN0ZUluRmlsdGVyUm93U2VhcmNoKCRldmVudCwgY29sKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb3BlbkZpbHRlckZyb21EaXNhYmxlZFNlYXJjaGVkSW5wdXQoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5GaWx0ZXIoY29sKVwiXG4gICAgICAgICAgICBbY2xhc3MuZmlsdGVyLWFwcGxpZWRdPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sKVwiXG4gICAgICAgICAgICBbY2xhc3MucGUtbm9uZV09XCJjb2w/LnR5cGUgPT0gJ2ltYWdlJ1wiXG4gICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA3cHg7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAzcHggIzc0ODZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCAxNjMgMjMzKTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDRweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEycHg7XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1ibG9ja1wiXG4gICAgICAgICAgICA+PC9zcGFuXG4gICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGwgPT09IGNvbFwiXG4gICAgICAgICAgICBzdHlsZT1cInRvcDogMTAwJTsgcmlnaHQ6IDA7IHotaW5kZXg6IDk5XCJcbiAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImNvbD8ucGlubmVkID8gMCA6IC1jZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gQm9keSBDZWxsIFRlbXBsYXRlIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbjxuZy10ZW1wbGF0ZVxuICAjcm93Q2VsbFxuICBsZXQtcm93XG4gIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gIGxldC1pc0V2ZW49XCJpc0V2ZW5cIlxuICBsZXQtaXNPZGQ9XCJpc09kZFwiXG4gIGxldC1pc0xlZnRTZWN0aW9uPVwiaXNMZWZ0XCJcbiAgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCJcbiAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICBsZXQtaXNUb3RhbFJvdz1cImlzVG90YWxSb3dcIlxuPlxuICA8IS0tIENoZWNrIGlmIHJvdyBpcyBhIGdyb3VwIC0tPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFJvd1RlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBkZXB0aDogMCB9XCJcbiAgPjwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI2dyb3VwUm93VGVtcGxhdGUgbGV0LXJvdyBsZXQtZGVwdGg9XCJkZXB0aFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuaXNHcm91cDsgZWxzZSByZWd1bGFyUm93XCI+XG4gICAgICA8IS0tIEdyb3VwIEhlYWRlciAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncm91cC1oZWFkZXItcm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIFtjbGFzcy5ib3JkZXItYmVsb3ddPVwic2VjdGlvbiAhPT0gJ2NlbnRlcidcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PT0gJ2NlbnRlcidcbiAgICAgICAgICAgID8gKGNlbnRlclNjcm9sbGFibGVCb2R5Py5zY3JvbGxXaWR0aCA/PyAwKSArICdweCdcbiAgICAgICAgICAgIDogJzEwMCUnXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNlY3Rpb24gPT0gJ2xlZnQnXCJcbiAgICAgICAgICBjbGFzcz1cImgtMTAwIGQtZmxleFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImxlZnRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxXCJcbiAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInNob3dTZXJpYWxOdW1iZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNTBweFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0xMDAgYm9yZGVyLXJpZ2h0IGp1c3RpZnktY29udGVudC1lbmQgcGUtMiBzLW5vXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiNTVcIlxuICAgICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJcbiAgICAgICAgICAgICAgJ3VybCgnICtcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctcmlnaHQuc3ZnKSwgYXV0bydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUm93TW91c2VEb3duKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VvdmVyKT1cIm9uUm93TW91c2VPdmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiY2hlY2tib3hlc0NvbG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBnZXRTdGFydEluZGV4KCkgKyAocm93Ll9fdmlydHVhbEluZGV4IC0gMSkgfHwgXCJcIiB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dDaGVja2JveGVzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDUwcHhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDAgYm9yZGVyLXJpZ2h0XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgICAgICBbY2xhc3MubGVmdC1zZWxlY3Rpb24tYm9yZGVyXT1cIlxuICAgICAgICAgICAgICByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImNoZWNrYm94ZXNDb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldEdyb3VwQ2hlY2tlZFN0YXRlKHJvdykgPT09IHRydWVcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJnZXRHcm91cENoZWNrZWRTdGF0ZShyb3cpID09PSB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEdyb3VwUm93KCRldmVudCwgcm93KVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNlY3Rpb24gPT0gJ2NlbnRlcidcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsV2lkdGhcIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwcy0yIGgtMTAwIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nTGVmdC5weF09XCJkZXB0aCA+IDAgPyBkZXB0aCAqIDMwIDogMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yIGZpbHRlci1pY29uLXdyYXBwZXJcIiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kKHJvdylcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBhbGlnbi1pdGVtcy1jZW50ZXIgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgcm93LmlzRXhwYW5kXG4gICAgICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZyAoY2xpY2spPVwidG9nZ2xlRXhwYW5kKHJvdylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgIHt7IHJvdy5ncm91cFZhbHVlIH19ICh7eyBjb3VudExlYWZSb3dzKHJvdykgfX0pXG4gICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2VjdGlvbiA9PSAncmlnaHQnXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUmVjdXJzaXZlIENoaWxkcmVuIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWNoaWxkcmVuXCIgKm5nSWY9XCJyb3cuaXNFeHBhbmRcIiBbQHNsaWRlVG9nZ2xlXT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiByb3cuY2hpbGRyZW47IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQuaXNHcm91cDsgZWxzZSBkYXRhUm93XCI+XG4gICAgICAgICAgICA8IS0tIFJlY3Vyc2l2ZSBjYWxsIGZvciBuZXN0ZWQgZ3JvdXAgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZ3JvdXBSb3dUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogY2hpbGQsIGRlcHRoOiBkZXB0aCArIDEgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRhUm93PlxuICAgICAgICAgICAgPCEtLSBSZWd1bGFyIGRhdGEgcm93IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICBpc0V2ZW46IGkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgaXNPZGQ6IGkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgaXNMZWZ0OiBpc0xlZnRTZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIFJlZ3VsYXIgcm93IChub3QgYSBncm91cCkgLS0+XG4gIDxuZy10ZW1wbGF0ZSAjcmVndWxhclJvdz5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDMwcHg7IGhlaWdodDogMTAwJVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PSAnY2VudGVyJyAmJiAoZ3JpZFR5cGUgPT09ICdBc3NldHMnIHx8IGdyaWRUeXBlID09PSAnVGFza3MnKVxuICAgICAgICBcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURldGFpbFJvd0V4cGFuZChyb3cpXCJcbiAgICAgICAgICAqbmdJZj1cInJvdz8uZGV0YWlsPy5yZXN1bHQ/Lmxlbmd0aCB8fCBncmlkVHlwZSA9PT0gJ1Rhc2tzJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcbiAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLWRvd24uc3ZnJ1xuICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiXG4gICAgICAgICAgc2VjdGlvbiA9PSAnY2VudGVyJyAmJiBncm91cGVkQ29sdW1ucz8ubGVuZ3RoID8gZ3JvdXBCb3hQYWRkaW5nIDogMFxuICAgICAgICBcIlxuICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXJvdyBoLTEwMFwiXG4gICAgICAgIFtjbGFzcy5ldmVuLXJvd109XCJpc0V2ZW5cIlxuICAgICAgICBbY2xhc3Mub2RkLXJvd109XCJpc09kZFwiXG4gICAgICAgIFtjbGFzcy5ob3ZlcmVkLXJvd109XCJob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd0hvdmVyKHJvdylcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJvblJvd0xlYXZlKClcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgID48L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIHJvdylcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXJvd1wiXG4gICAgICAgIFtjbGFzcy5ldmVuLXJvd109XCJpc0V2ZW5cIlxuICAgICAgICBbY2xhc3Mub2RkLXJvd109XCJpc09kZFwiXG4gICAgICAgIFtjbGFzcy5ob3ZlcmVkLXJvd109XCJob3ZlcmVkUm93SWQgPT09IChyb3cuX2lkIHx8IHJvdy5pZClcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd0hvdmVyKHJvdylcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJvblJvd0xlYXZlKClcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBnZXRCYWNrZ3JvdW5kQ29sb3Iocm93LCBpc0V2ZW4sIHNlY3Rpb24pXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3gtY2VsbCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHBlLTIgcy1ub1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIjU1XCJcbiAgICAgICAgICAqbmdJZj1cImlzTGVmdFNlY3Rpb24gJiYgc2hvd1NlcmlhbE51bWJlclwiXG4gICAgICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJib2R5VGV4dEZvbnRzU2l6ZVwiXG4gICAgICAgICAgW3N0eWxlLmN1cnNvcl09XCJcbiAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctcmlnaHQuc3ZnKSwgYXV0bydcbiAgICAgICAgICBcIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwib25Sb3dNb3VzZURvd24ocm93Ll9fdmlydHVhbEluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAobW91c2VvdmVyKT1cIm9uUm93TW91c2VPdmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImNoZWNrYm94ZXNDb2xvclwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRTdGFydEluZGV4KCkgKyAocm93Ll9fdmlydHVhbEluZGV4IC0gMSkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIlxuICAgICAgICAgICAgcm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICAgICAgICAgID8gc2VsZWN0ZWRSb3dzQmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgICAgIDogY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclxuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGxcIlxuICAgICAgICAgICpuZ0lmPVwiaXNMZWZ0U2VjdGlvbiAmJiBzaG93Q2hlY2tib3hlc1wiXG4gICAgICAgICAgW2NsYXNzLmxlZnQtc2VsZWN0aW9uLWJvcmRlcl09XCJcbiAgICAgICAgICAgIHJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxXCJcbiAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzQW55VmlzaWJsZUNvbHVtblwiXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4XCJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24ocm93KVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSZW5kZXIgYWxsIGNvbHVtbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucztcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZDtcbiAgICAgICAgICAgIGxldCBjb2xJbmRleCA9IGluZGV4XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aCA+IDA7IGVsc2UgZmxhdENvbHVtblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZDtcbiAgICAgICAgICAgICAgICBsZXQgc3ViQ29sSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQ/LmlzX3Zpc2libGUgJiYgIWNoaWxkPy5pc1Jvd0dyb3VwZWRcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleDogY29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgc3ViQ29sSW5kZXg6IHN1YkNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogaXNUb3RhbFJvd1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmxhdENvbHVtbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmlzX3Zpc2libGUgJiYgIWNvbD8uaXNSb3dHcm91cGVkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY29sSW5kZXg6IGNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzdWJDb2xJbmRleDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogaXNUb3RhbFJvd1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBbQHNsaWRlVG9nZ2xlXVxuICAgICAgKm5nSWY9XCJzZWN0aW9uID09PSAnbGVmdCcgJiYgaXNEZXRhaWxzRXhwYW5kZWQocm93KVwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbi1kZXRhaWxzXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzUwcHg7IG92ZXJmbG93OiBoaWRkZW5cIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJoYXNIb3Jpem9udGFsU2Nyb2xsID8gMzM5IDogMzQxXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbGVmdFJpZ2h0TmVzdGVkUGxhY2Vob2xkZXI7XG4gICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIFtAc2xpZGVUb2dnbGVdXG4gICAgICAqbmdJZj1cInNlY3Rpb24gPT09ICdjZW50ZXInICYmIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tZGV0YWlscyBjZW50ZXItc2VjdGlvblwiXG4gICAgICBzdHlsZT1cIlxuICAgICAgICBtYXgtaGVpZ2h0OiAzNTBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICBcIlxuICAgICAgI25lc3RlZFRhYmxlXG4gICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgIGhhc1JpZ2h0UGlubmVkQ29sdW1uc1xuICAgICAgICAgID8gJzEwMCUnXG4gICAgICAgICAgOiBoYXNWZXJ0aWNhbFNjcm9sbFxuICAgICAgICAgID8gJ2NhbGMoMTAwJSAtIDEycHgpJ1xuICAgICAgICAgIDogJzEwMCUnXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkVHlwZSA9PSAnQXNzZXRzJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXN0ZWRUYWJsZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncmlkVHlwZSA9PSAnVGFza3MnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgdGFza01hbmFnZW1lbnRUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgdGFza0RldGFpbHM6IHJvdyB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBbQHNsaWRlVG9nZ2xlXVxuICAgICAgKm5nSWY9XCJzZWN0aW9uID09PSAncmlnaHQnICYmIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tZGV0YWlsc1wiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDM1MHB4OyBvdmVyZmxvdzogaGlkZGVuXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiaGFzSG9yaXpvbnRhbFNjcm9sbCA/IDMzOSA6IDM0MVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGxlZnRSaWdodE5lc3RlZFBsYWNlaG9sZGVyO1xuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEFjdHVhbCBDZWxsIGlzIEhlcmUgLS0+XG48bmctdGVtcGxhdGVcbiAgI2NlbGxUZW1wbGF0ZVxuICBsZXQtY29sPVwiY29sXCJcbiAgbGV0LXJvdz1cInJvd1wiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1zdWJDb2xJbmRleD1cInN1YkNvbEluZGV4XCJcbiAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICBsZXQtY29sSW5kZXg9XCJjb2xJbmRleFwiXG4gIGxldC1pc1RvdGFsUm93PVwiaXNUb3RhbFJvd1wiXG4+XG4gIDxkaXZcbiAgICAjY2VsbENvbnRhaW5lclxuICAgIChjbGljayk9XCJcbiAgICAgIGVkaXRpbmdLZXkgPSAnJzsgc2V0QWN0aXZlQ2VsbChyb3csIGNvbCk7IGNvbGxhcHNlQWxsRXhwYW5kZWRDZWxscygpXG4gICAgXCJcbiAgICBbc3R5bGUuZm9udFdlaWdodF09XCJib2R5Rm9udFdlaWdodFwiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIGNsYXNzPVwiY2VsbCBvdmVyZmxvdy12aXNpYmxlIHBvc2l0aW9uLXJlbGF0aXZlIGRhdGEtZ3JpZC1jZWxsXCJcbiAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUuZm9udFNpemUucHhdPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgW2NsYXNzLmFjdGl2ZS1jZWxsXT1cIlxuICAgICAgaXNBY3RpdmVDZWxsKHJvdywgY29sKSAmJiAhaXNFZGl0aW5nKHJvdywgY29sKSAmJiBzZWxlY3RlZEtleXMuc2l6ZSA9PSAxXG4gICAgXCJcbiAgICAoZGJsY2xpY2spPVwiXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVuYWJsZUVkaXQocm93LCBjb2wsIGZhbHNlLCBjZWxsQ29udGFpbmVyKVxuICAgIFwiXG4gICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Py5fX3ZpcnR1YWxJbmRleFwiXG4gICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Py5fX3ZpcnR1YWxJbmRleFwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGVuYWJsZUVkaXQocm93LCBjb2wpXCJcbiAgICAobW91c2Vkb3duKT1cIlxuICAgICAgc3RhcnRTZWxlY3Rpb24oXG4gICAgICAgIHJvdy5fX3ZpcnR1YWxJbmRleCxcbiAgICAgICAgY29sSW5kZXgsXG4gICAgICAgIHN1YkNvbEluZGV4ID8/IDAsXG4gICAgICAgIGNvbC5maWVsZCxcbiAgICAgICAgJGV2ZW50LFxuICAgICAgICBzZWN0aW9uXG4gICAgICApXG4gICAgXCJcbiAgICAobW91c2VlbnRlcik9XCJcbiAgICAgIGV4dGVuZFNlbGVjdGlvbihcbiAgICAgICAgcm93Ll9fdmlydHVhbEluZGV4LFxuICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgc3ViQ29sSW5kZXggPz8gMCxcbiAgICAgICAgY29sLmZpZWxkLFxuICAgICAgICAkZXZlbnQsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICBcIlxuICAgIChtb3VzZXVwKT1cImVuZFNlbGVjdGlvbigpXCJcbiAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJcbiAgICAgIGlzU2VsZWN0ZWQoXG4gICAgICAgIHJvdy5fX3ZpcnR1YWxJbmRleCxcbiAgICAgICAgY29sSW5kZXgsXG4gICAgICAgIHN1YkNvbEluZGV4ID8/IDAsXG4gICAgICAgIGNvbC5maWVsZCxcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIFwiXG4gICAgW2NsYXNzLnRvcC1ib3JkZXJdPVwiXG4gICAgICBpc1RvcEJvcmRlcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy5ib3R0b20tYm9yZGVyXT1cIlxuICAgICAgaXNCb3R0b21Cb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MubGVmdC1ib3JkZXJdPVwiXG4gICAgICBpc0xlZnRCb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MucmlnaHQtYm9yZGVyXT1cIlxuICAgICAgaXNSaWdodEJvcmRlcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy50b3AtbGVmdC1jb3JuZXJdPVwiXG4gICAgICBpc1RvcExlZnRDb3JuZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MudG9wLXJpZ2h0LWNvcm5lcl09XCJcbiAgICAgIGlzVG9wUmlnaHRDb3JuZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MuYm90dG9tLWxlZnQtY29ybmVyXT1cIlxuICAgICAgaXNCb3R0b21MZWZ0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLmJvdHRvbS1yaWdodC1jb3JuZXJdPVwiXG4gICAgICBpc0JvdHRvbVJpZ2h0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gID5cbiAgICA8IS0tICAobW91c2Vkb3duKT1cInN0YXJ0U2VsZWN0aW9uKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4ID8/IDAsIGNvbC5maWVsZCwgJGV2ZW50KVwiXG4gIChtb3VzZWVudGVyKT1cImV4dGVuZFNlbGVjdGlvbihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCA/PyAwLCBjb2wuZmllbGQsICRldmVudClcIlxuICAobW91c2V1cCk9XCJlbmRTZWxlY3Rpb24oKVwiXG4gIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cImlzU2VsZWN0ZWQocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgIHN1YkNvbEluZGV4ID8/IDAsIGNvbC5maWVsZClcIiAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRhYmxlLWNlbGxcIlxuICAgICAgW2NsYXNzLmFjdGl2ZS1mb3ItZWRpdGluZ109XCJcbiAgICAgICAgaXNFZGl0aW5nKHJvdywgY29sKSAmJlxuICAgICAgICAoZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5sZW5ndGggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoIDw9IDUwKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzRWRpdGluZyhyb3csIGNvbCkgJiZcbiAgICAgICAgICAgIChnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIChnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA8PSA1MCAmJlxuICAgICAgICAgICAgICAgICFleHBhbmRlZENlbGxzLnNpemUpKTtcbiAgICAgICAgICBlbHNlIHZpZXdNb2RlXG4gICAgICAgIFwiXG4gICAgICA+XG5cbiAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNlbGxFZGl0b3I7IGVsc2UgYnVpbHRJbkVkaXRvcnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtjZWxsRWRpdG9yXT1cImNvbC5jZWxsRWRpdG9yXCJcbiAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJyb3dcIlxuICAgICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgW2NlbGxWYWx1ZV09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgICAgIChlZGl0b3JFdmVudCk9XCJmaW5pc2hFZGl0KCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2J1aWx0SW5FZGl0b3JzPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2w/LnR5cGVcIj5cbiAgICAgICAgICA8IS0tIFRleHQgSW5wdXQgLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wpXCJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYmx1cklucHV0KCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDwhLS0gTnVtYmVyIElucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSA4XCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAjbnVtYmVySW5wdXQ9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICNudW1iZXJSZWZcbiAgICAgICAgICAgIChrZXlwcmVzcyk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sLmZpZWxkXVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgbnVtYmVySW5wdXQpXCJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYmx1cklucHV0KCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogbnVtYmVySW5wdXQuaW52YWxpZFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDwhLS0gRGF0ZSBJbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gOFwiXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCJcbiAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIGRhdGVJbnB1dClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgI2RhdGVJbnB1dD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYmx1cklucHV0KCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBkYXRlSW5wdXQuaW52YWxpZFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPCEtLSBuZy1zZWxlY3QgbGlrZSBkcm9wZG93biAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duIHctMTAwXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIHRleHQtc3RhcnQgdy0xMDAgdGV4dC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+IFNlbGVjdCBvcHRpb25zLi4uIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBNZW51IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgdy0xMDAgcC0wIGNlbGwtZWRpdGluZy1kcm9wZG93bi1tZW51IHJvdW5kZWQtM1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5zaG93XT1cImlzRWRpdGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMSBlZGl0aW5nLWRyb3Bkb3duLXNlYXJjaC1pbnB1dFwiICpuZ0lmPVwiY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCA+IDVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbkRyb3Bkb3duU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBcbiAgICAgICAgICAgICAgICAgICAgaXRlbVNpemU9XCIzNVwiIFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXZpZXdwb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvbj8udmFsdWUgfHwgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweC0yIHB5LTEgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbiBvZiBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZpbHRlciA6IGVkaXRpbkRyb3Bkb3duU2VhcmNoIDogJ3ZhbHVlJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldE5lc3RlZFZhbHVlKHJvdywgY29sLCBvcHRpb24sIHRydWUpOyBlZGl0aW5nS2V5ID0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cImNvbC5maWVsZCArICctJyArIChvcHRpb24udmFsdWUgfHwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnZhbHVlIHx8IG9wdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQXJyYXkgdHlwZSB2YWx1ZXMgLS0+XG5cbiAgICAgICAgICA8IS0tIE1VTFRJIFNFTEVDVCAoQVJSQVkpIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInYXJyYXknXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24gdy0xMDBcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQXJyYXlCbHVyKHJvdywgY29sKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjb21taXRBcnJheShyb3csIGNvbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gVHJpZ2dlciAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gdGV4dC1zdGFydCB3LTEwMCB0ZXh0LWVsbGlwc2lzXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXG4gICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICBkYXRhLWJzLWRpc3BsYXk9XCJzdGF0aWNcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0QXJyYXlUZW1wKHJvdywgY29sKS5sZW5ndGg7IGVsc2UgYXJyYXlQbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAge3sgZGlzcGxheUFycmF5TGFiZWxzKHJvdywgY29sKSB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhcnJheVBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICAgIFNlbGVjdCBvcHRpb25zLi4uXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBNZW51IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgdy0xMDAgcC0wIGNlbGwtZWRpdGluZy1kcm9wZG93bi1tZW51IHJvdW5kZWQtM1wiIFtjbGFzcy5pbnZpc2libGVdPVwiIW1lbnVSZWFkeVwiIFtjbGFzcy5zaG93XT1cImlzRWRpdGluZyhyb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggLS0+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2w/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoID4gNVwiIGNsYXNzPVwicHgtMiBweS0xIGFycmF5LXNlYXJjaC1pbnB1dFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGluRHJvcGRvd25TZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyAtLT5cbiAgICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBpdGVtU2l6ZT1cIjM1XCIgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbiBvZiBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXIgOiBlZGl0aW5Ecm9wZG93blNlYXJjaCA6ICd2YWx1ZSdcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtLTAgbWUtMlwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQXJyYXlTZWxlY3RlZChyb3csIGNvbCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQXJyYXlUZW1wKHJvdywgY29sLCBvcHRpb24pOyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgY29tbWl0QXJyYXkocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBtYXgtd2lkdGg6IDE2cHg7IG1heC1oZWlnaHQ6IDE2cHhcIlxuICAgICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgICAge3sgb3B0aW9uPy52YWx1ZSB8fCBvcHRpb24gfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuXG5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZW1haWwnXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAjZW1haWxNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgI2VtYWlsSW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2wuZmllbGRdXCJcbiAgICAgICAgICAgIG5hbWU9XCJ7eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgIHBhdHRlcm49XCJeW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCBlbWFpbE1vZGVsKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IGVtYWlsTW9kZWwuaW52YWxpZFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8IS0tIERlZmF1bHQgZmFsbGJhY2sgLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgI3RleHRNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgI3RleHRJbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYmx1cklucHV0KCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIHRleHRNb2RlbClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHRleHRNb2RlbC5pbnZhbGlkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIERpc3BsYXkgbW9kZSAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmlld01vZGU+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3Nlcyhjb2wsIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBGaWVsZCBpY29uIChmb3IgVGFza3MgZ3JpZCkgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJncmlkVHlwZSA9PT0gJ1Rhc2tzJyAmJiBpY29uTWFwW2NvbC5maWVsZF0gJiYgIWlzVG90YWxSb3dcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbWUtMlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJpY29uTWFwW2NvbC5maWVsZF0ocm93LCBjb2wpXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIOKchSBDdXN0b20gY2VsbCByZW5kZXJlciBzdXBwb3J0IC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2VsbFJlbmRlcmVyICYmICFpc1RvdGFsUm93OyBlbHNlIGRlZmF1bHRDZWxsXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgIFtjZWxsUmVuZGVySW5pdF09XCJjb2wuY2VsbFJlbmRlcmVyXCJcbiAgICAgICAgICAgICAgW3Jvd0RhdGFdPVwicm93XCJcbiAgICAgICAgICAgICAgW2NvbERhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgW2NlbGxWYWx1ZV09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbD8uZmllbGQpXCJcbiAgICAgICAgICAgICAgKGNlbGxFdmVudCk9XCJvbkNlbGxFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSDwn6e+IERlZmF1bHQgdGV4dC1iYXNlZCBjZWxsIHJlbmRlcmluZyAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAjY2VsbFRleHRcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGZsZXgtZ3Jvdy0xXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cImdldENlbGxUaXRsZShyb3csIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIE5vcm1hbCBjZWxsIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIGNvbD8udHlwZSAhPT0gJ2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgY29sPy5maWVsZCAhPSAnaW1hZ2UnICYmXG4gICAgICAgICAgICAgICAgICBjb2w/LmZpZWxkICE9ICdpbnZvaWNlLmludm9pY2VfaW1hZ2UnICYmXG4gICAgICAgICAgICAgICAgICAhaXNUb3RhbFJvd1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzX2Ftb3VudFwiPnt7XG4gICAgICAgICAgICAgICAgICBjdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAge3tnZXRDZWxsVGl0bGUocm93LCBjb2wpfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBUb3RhbCByb3cgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RvdGFsUm93XCI+XG4gICAgICAgICAgICAgICAge3sgZ2V0VG90YWxBbW91bnQoY29sKSB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIEludm9pY2UgSW1hZ2UgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuZmllbGQgPT0gJ2ludm9pY2UuaW52b2ljZV9pbWFnZSdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgem9vbTogMC43XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSB8fCAnQXR0YWNobWVudCcgfX1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRBdHRjaG1lbnQoZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9kb2N1bWVudC1pY29ucy8nICtcbiAgICAgICAgICAgICAgICAgICAgICBnZXRFeHRlbnRpb24oZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpKSArXG4gICAgICAgICAgICAgICAgICAgICAgJy5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIEltYWdlIGNlbGwgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ2ltYWdlJyAmJiAhaXNUb3RhbFJvd1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRJbWFnZVBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IHJvdzogcm93LCBjb2w6IGNvbCB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAoIWNvbD8uY2VsbFJlbmRlcmVyICYmIHNob3dDZWxsRGV0YWlsc0JveCAmJlxuICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoID4gNTAgJiYgY29sPy50eXBlICE9PSAnaW1hZ2UnKSB8fFxuICAgICAgICAgICAgICAoaXNOZXN0ZWRWYWx1ZUFycmF5KHJvdywgY29sLmZpZWxkKSAmJlxuICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoID4gMSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvbiBtcy0yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgIGlzRXhwYW5kZWQocm93LCBjb2wpXG4gICAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLWRvd24uc3ZnJ1xuICAgICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHRvZ2dsZUV4cGFuZE9mTG9uZ0NlbGxUZXh0KHJvdywgY29sLCBjb2x1bW5zLCBmYWxzZSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoZGJsY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwhLS0gRXhwYW5kIC8gQ29sbGFwc2UgaWNvbiAtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBFeHBhbmRlZCB0ZXh0IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBleHBhbmRlZC1ib3hcIlxuICAgICAgICAgICpuZ0lmPVwiaXNFeHBhbmRlZChyb3csIGNvbClcIlxuICAgICAgICAgIFtzdHlsZS56SW5kZXhdPVwiZ2V0WkluZGV4KHJvdywgY29sKVwiXG4gICAgICAgICAgc3R5bGU9XCJ0b3A6IDEwMCU7IGxlZnQ6IDBcIlxuICAgICAgICAgIFthdHRyLmlkXT1cIihyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyAoY29sLmlkIHx8IGNvbC5faWQpXCJcbiAgICAgICAgICBbY2xhc3MuaW52aXNpYmxlXT1cIiFzaG93RGV0YWlsc0JveFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBmdWxsVGV4dFRlbXBsYXRlO1xuICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgaXNBcnJheTogaXNOZXN0ZWRWYWx1ZUFycmF5KHJvdywgY29sLmZpZWxkKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gSGVhZGVycyBBY3Rpb24gTGlzdCBPbiBjbGlja2luZyB0aHJlZSBkb3RzIC0tPlxuXG48bmctdGVtcGxhdGVcbiAgI2NvbHVtbk1lbnVcbiAgbGV0LWNvbD1cImNvbFwiXG4gIGxldC1pc05lc3RlZFRhYmxlPVwiaXNOZXN0ZWRUYWJsZVwiXG4gIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCJcbiAgbGV0LWNoaWxkQ29sSW5kZXg9XCJjaGlsZENvbEluZGV4XCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY29sdW1uLW1lbnUgdGhyZWUtZG90cy1jb2wtbWVudVwiXG4gICAgW2NsYXNzLnZpc3VhbGx5LWhpZGRlbl09XCJpc01lbnVlSGlkZGVuXCJcbiAgICAqbmdJZj1cImFjdGl2ZUNvbCAmJiAhaXNUaHJlZURvdHNGaWx0ZXJPcGVuXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgW3N0eWxlLmNvbG9yXT1cImhlYWRlclRleHRDb2xvclwiXG4gID5cbiAgICA8IS0tIFNvcnQgQXNjZW5kaW5nIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYmVsb3cgcGItMlwiIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiIWNvbC5pc19zb3J0YWJsZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlZC10ZXh0IGZzLTdcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMnB4XCI+U29ydDwvc3Bhbj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93QXNjZW5kaW5nICYmXG4gICAgICAgICAgKHNvcnRpbmdDb25maWc/LmZpZWxkICE9IGNvbC5maWVsZCB8fFxuICAgICAgICAgICAgc29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT0gJ2Rlc2MnKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwic29ydEFzYyhhY3RpdmVDb2wpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LXVwLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICBTb3J0IEFzY2VuZGluZ1xuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU29ydCBEZXNjZW5kaW5nIC0tPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dEZXNjZW5kaW5nICYmXG4gICAgICAgICAgKHNvcnRpbmdDb25maWc/LmZpZWxkICE9IGNvbC5maWVsZCB8fFxuICAgICAgICAgICAgc29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT0gJ2FzYycpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJzb3J0RGVzYyhhY3RpdmVDb2wpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWRvd24uc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIFNvcnQgRGVzY2VuZGluZ1xuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBzb3J0aW5nQ29uZmlnPy5maWVsZCA9PT0gY29sLmZpZWxkICYmXG4gICAgICAgICAgKHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnYXNjJyB8fFxuICAgICAgICAgICAgc29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT09ICdkZXNjJylcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cInJlc2V0U29ydChhY3RpdmVDb2wpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctY291bnRlcmNsb2Nrd2lzZS5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgUmVzZXQgU29ydFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInB5LTIgYm9yZGVyLWJlbG93IHRocmVlLWRvdHMtZmlsdGVyXCIgW2NsYXNzLmRpc2FibGUtc29ydGluZ109XCJjb2w/LnR5cGUgPT0gJ2ltYWdlJyB8fCAhY29sLmlzX3NlYXJjaF9hYmxlXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0ZpbHRlclwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbSB0aHJlZS1kb3RzLWZpbHRlclwiXG4gICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyb25UaHJlZURvdHNDbGljayhjb2wpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICBGaWx0ZXJcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInB5LTIgYm9yZGVyLWJlbG93XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm11dGVkLXRleHQgZnMtN1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEycHhcIj5QaW48L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd1BpbmxlZnQgJiYgY29sPy5waW5uZWQgIT09ICdsZWZ0J1wiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgICAgICAgICAgYWN0aXZlQ29sLFxuICAgICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZSxcbiAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9waW4tbGVmdC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgICA+UGluIExlZnRcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd1BpbnJpZ2h0ICYmIGNvbD8ucGlubmVkICE9PSAncmlnaHQnXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgICAgICAgICAgYWN0aXZlQ29sLFxuICAgICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLXJpZ2h0LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgICA+UGluIFJpZ2h0XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB1cGRhdGVDb2x1bW5QaW5JblNvdXJjZUJ5RmllbGQoXG4gICAgICAgICAgICBhY3RpdmVDb2wsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZSxcbiAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2xheW91dC10aHJlZS1jb2x1bW5zLnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICAgID5VbnBpblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dBdXRvc2l6ZVRoaXNDb2x1bW5cIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJhdXRvc2l6ZUNvbHVtbihhY3RpdmVDb2wpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1leHBhbmQtdmVydGljYWwuc3ZnJ1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIEF1dG9zaXplIFRoaXMgQ29sdW1uXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEF1dG9zaXplIEFsbCBDb2x1bW5zIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0F1dG9zaXplQWxsQ29sdW1uc1wiXG4gICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cImF1dG9zaXplQWxsQ29sdW1ucygpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1hbmdsZS1leHBhbmQuc3ZnJ1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgID48L3NwYW5cbiAgICAgID5BdXRvc2l6ZSBBbGwgQ29sdW1uc1xuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBHcm91cCBCeSAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInNob3dSb3dzR3JvdXBpbmdcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJncm91cEJ5KGFjdGl2ZUNvbClcIlxuICAgICAgW2NsYXNzLmRpc2FibGUtc29ydGluZ109XCIhY29sLmlzX2dyb3VwYWJsZVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9kaWFncmFtLTMuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIEdyb3VwIGJ5IHt7IGNvbC5oZWFkZXIgfX1cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2hvb3NlIENvbHVtbnMgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93Q2hvc2VDb2x1bW5zXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiY2hvb3NlQ29sdW1ucygpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3VpLWNoZWNrcy1ncmlkLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBDaG9vc2UgQ29sdW1uc1xuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZXNldCBDb2x1bW5zIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd1Jlc2V0Q29sdW1uc1wiXG4gICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cInJlc2V0Q29sdW1ucygpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWNvdW50ZXJjbG9ja3dpc2Uuc3ZnJ1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgID48L3NwYW5cbiAgICAgID5SZXNldCBDb2x1bW5zXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgQHNsaWRlVG9nZ2xlXG4gICAgKm5nSWY9XCJpc1RocmVlRG90c0ZpbHRlck9wZW4gJiYgY29sPy5pc19zZWFyY2hfYWJsZVwiXG4gICAgY2xhc3M9XCJ0aHJlZS1kb3RzLWNvbC1tZW51IHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgICBbc3R5bGUucmlnaHQucHhdPVwiZ2V0RHluYW1pY1JpZ2h0KGNvbCwgc2VjdGlvbiwgY29sdW1uSW5kZXgsIGNoaWxkQ29sSW5kZXgpXCJcbiAgICBbY2xhc3MudmlzdWFsbHktaGlkZGVuXT1cImlzTWVudWVIaWRkZW5cIlxuICA+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmZpbHRlclJlbmRlcmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1tZW51LWNvbnRhaW5lciBmaWx0ZXItbWVudSBwLTBcIiBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbY2VsbFJlbmRlckluaXRdPVwiY29sLmZpbHRlclJlbmRlcmVyXCJcbiAgICAgICAgICAgICAgW2NvbERhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgKGNlbGxFdmVudCk9XCJvbkNlbGxFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2NvbnRleHRdPVwiZ3JpZENvbnRleHRcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sPy5maWx0ZXJSZW5kZXJlclwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyTWVudTsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBGaWx0ZXIgTWVudWUgLS0+XG48bmctdGVtcGxhdGUgI2ZpbHRlck1lbnUgbGV0LWNvbD1cImNvbFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmaWx0ZXItbWVudS1jb250YWluZXIgZmlsdGVyLW1lbnVcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZHJvcGRvd25zQmFja2dyb3VuZENvbG9yXCJcbiAgICAqbmdJZj1cIiFjb2w/LmZpbHRlclJlbmRlcmVyXCJcbiAgPlxuICAgIDwhLS0gRHJvcGRvd24gVHlwZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PT0gJ2FycmF5JzsgZWxzZSB0ZXh0RmlsdGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLXNlY3Rpb24gcC0xXCI+XG5cbiAgICA8IS0tIFNlYXJjaCBpbnB1dCAtLT5cbiAgICA8aW5wdXRcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgIFsobmdNb2RlbCldPVwiYWRkRmlsdGVyQ29sdW1uSW5wdXRcIlxuICAgIC8+XG5cbiAgICA8IS0tIEZpbHRlciArIFJlc3VsdCBIYW5kbGluZyAtLT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgIHwgZmlsdGVyIDogYWRkRmlsdGVyQ29sdW1uSW5wdXQgOiAndmFsdWUnKSBhcyBmaWx0ZXJlZE9wdGlvbnNcbiAgICAgIFwiXG4gICAgPlxuIDwhLS0gQ2hlY2sgaWYgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIGV4aXN0cyBhbmQgaGFzIGRhdGEgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGg7IGVsc2Ugbm9Ecm9wZG93bkRhdGFcIj5cbiAgICAgIDwhLS0gREFUQSBGT1VORCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoOyBlbHNlIG5vRGF0YUZvdW5kXCI+XG5cbiAgICAgICAgPCEtLSBTZWxlY3QgQWxsIChvbmx5IHdoZW4gZGF0YSBleGlzdHMpIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG10LTIgbXMtMSBzZWxlY3QtYWxsLWZpbHRlclwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgIChjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHM/LnNpemUgPz8gMCkgPT09XG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCA/PyAwKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApID4gMCAmJlxuICAgICAgICAgICAgICAgIChjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHM/LnNpemUgPz8gMCkgPFxuICAgICAgICAgICAgICAgIChzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPz8gMClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGxTaWRlRmlsdGVycyhjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCI+XG4gICAgICAgICAgICBTZWxlY3QgQWxsXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBWaXJ0dWFsIFNjcm9sbCAtLT5cbiAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAgIGl0ZW1TaXplPVwiMzJcIlxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXZpZXdwb3J0XCJcbiAgICAgICAgICBzdHlsZT1cImhlaWdodDogMTIwcHhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTEgbXMtMVwiXG4gICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zOyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbaWRdPVwib3B0aW9uPy5pZCA/PyBvcHRpb24/Ll9pZCA/PyBvcHRpb25cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICBjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKG9wdGlvbilcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBmdy1zZW1pYm9sZFwiXG4gICAgICAgICAgICAgIFtmb3JdPVwib3B0aW9uPy5pZCA/PyBvcHRpb24/Ll9pZCA/PyBvcHRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAob3B0aW9uPy52YWx1ZSA/PyBvcHRpb24/Lm5hbWUgPz8gb3B0aW9uKSB8IHRpdGxlY2FzZSB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIE5PIERBVEEgRk9VTkQgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI25vRGF0YUZvdW5kPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIG10LTJcIlxuICAgICAgICAgICpuZ0lmPVwiYWRkRmlsdGVyQ29sdW1uSW5wdXRcIlxuICAgICAgICA+XG4gICAgICAgICAgTm8gUmVjb3JkIEZvdW5kXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIE5PIERST1BET1dOIERBVEEgQVZBSUxBQkxFIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vRHJvcGRvd25EYXRhPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIG10LTMgbWItM1wiPlxuICAgICAgICAgICAgIE5vIFJlY29yZCBGb3VuZFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8IS0tIFRleHQgRmlsdGVyIFNlY3Rpb24gLS0+XG4gICAgPG5nLXRlbXBsYXRlICN0ZXh0RmlsdGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci10ZXh0LXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMlwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gY3VzdG9tLXNlbGVjdFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpcnN0Q29uZGl0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGVzc190aGVuX2VxdWFsXCI+bGVzcyB0aGVuIEVxdWFsIHRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgW3R5cGVdPVwiY29sPy50eXBlID09ICdzdHJpbmcnID8gJ3RleHQnIDogY29sPy50eXBlXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWItM1wiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJWYWx1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdFZhbHVlXCJcbiAgICAgICAgICAjZmlsdGVyTWVudWVUZXh0Y2hJbnB1dFxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMyBkLWZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiYW5kXCJcbiAgICAgICAgICAgICAgaWQ9XCJhbmRfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjZHIuZGV0ZWN0Q2hhbmdlcygpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImFuZF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+QU5EPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBtLTAgY29sLTQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBmaWx0ZXItcmFkaW8taW5wdXRzXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJvclwiXG4gICAgICAgICAgICAgIGlkPVwib3Jfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjZHIuZGV0ZWN0Q2hhbmdlcygpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5PUjwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwibm9uZVwiXG4gICAgICAgICAgICAgIGlkPVwibm9uZV97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNkci5kZXRlY3RDaGFuZ2VzKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwibm9uZV97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+Tm9uZTwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgQHNsaWRlVG9nZ2xlICpuZ0lmPVwiZmlyc3RWYWx1ZSAmJiBjb25kaXRpb24gIT0gJ25vbmUnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIGN1c3RvbS1zZWxlY3RcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZENvbmRpdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGVzc190aGVuX2VxdWFsXCI+bGVzcyB0aGVuIEVxdWFsIHRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnc3RyaW5nJyA/ICd0ZXh0JyA6IGNvbD8udHlwZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWItM1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlY29uZCBWYWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZFZhbHVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEFjdGlvbnMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBtdC0yXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzBweFwiXG4gICAgICAgIChjbGljayk9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgPlxuICAgICAgICBBcHBseVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMHB4XCJcbiAgICAgICAgKGNsaWNrKT1cInJlc2V0U2lkZUZpbHRlcihjb2wpXCJcbiAgICAgID5cbiAgICAgICAgUmVzZXRcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gU2lkZSBNZW51ZSAtLT5cblxuPCEtLSBDb2x1bW4gUGFubmVsIC8gUGl2b3QgTW9kZSAvIFNlYXJjaGluZyAtLT5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5QYW5uZWw+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4tcGFuZWwtaGVhZGVyXCI+XG4gICAgPCEtLSBQaXZvdCBUb2dnbGUgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMiBwaXZvdC1tb2RlIHB4LTUgbXMtMiBkLW5vbmVcIlxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicGl2b3RUb2dnbGVcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInBpdm90TW9kZVwiXG4gICAgICAvPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInBpdm90VG9nZ2xlXCI+UGl2b3QgTW9kZTwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNlbGVjdCBBbGwgJiBTZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMiBweC0zIG10LTNcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCIgKm5nSWY9XCJzaG93Q29sdW1uc0dyb3VwaW5nXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBhY2NvcmRpb25TdGF0ZSA9PT0gJ2FsbCdcbiAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLWRvd24uc3ZnJ1xuICAgICAgICAgICAgICA6IGFjY29yZGlvblN0YXRlID09PSAnc29tZSdcbiAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9kYXNoLnN2ZydcbiAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBbGxBY2NvcmRpb25zKClcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiYWxsQ29sdW1uc1NlbGVjdGVkKClcIlxuICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5KClcIlxuICAgICAgLz5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbHVtbnMuLi5cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtblNlYXJjaFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZXBhcmF0b3IgLS0+XG4gICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSaWdodCBDb2x1bW5zIE1lbnVlIC0tPlxuXG48IS0tIENvbHVtbiBQYW5lbCBJdGVtIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNjb2x1bW5QYW5lbEl0ZW0gbGV0LWNvbD1cImNvbFwiPlxuICA8IS0tIEdyb3VwIENvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbi1ncm91cCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzcy5yb3RhdGVdPVwiY29sLmV4cGFuZGVkXCJcbiAgICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkID0gIWNvbC5leHBhbmRlZFwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxuICAgICAgICBbaWRdPVwiJ2dyb3VwXycgKyBjb2wuaGVhZGVyXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiaXNDb2x1bW5WaXNpYmxlKGNvbClcIlxuICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUdyb3VwVmlzaWJpbGl0eShjb2wpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCB3LTEwMFwiXG4gICAgICAgIFtmb3JdPVwiJ2dyb3VwXycgKyBjb2wuaGVhZGVyXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiY29sLmV4cGFuZGVkXCIgY2xhc3M9XCJwcy00XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjaGlsZCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gTGVhZiBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLmNoaWxkcmVuPy5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIiBzdHlsZT1cIndpZHRoOiAxLjVyZW1cIj48L3NwYW4+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5pc192aXNpYmxlXCJcbiAgICAgICAgW2lkXT1cIidjb2xfJyArIGNvbC5maWVsZFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25TaWRlTWVudUNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlKClcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZ3JpZC0zeDItZ2FwLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIHctMTAwXCJcbiAgICAgICAgW2Zvcl09XCInY29sXycgKyBjb2wuZmllbGRcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gQ29sdW1ucyBTaWRlIEZpbHRlciAtLT5cbjxuZy10ZW1wbGF0ZSAjc2lkZUZpbHRlcnM+XG4gIDxkaXYgY2xhc3M9XCJweS0zIHB4LTIgcGUtMyBoLTEwMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCIgKm5nSWY9XCJzaG93Q29sdW1uc0dyb3VwaW5nXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBmaWx0ZXJBY2NvcmRpb25TdGF0ZSA9PT0gJ2FsbCdcbiAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLWRvd24uc3ZnJ1xuICAgICAgICAgICAgICA6IGZpbHRlckFjY29yZGlvblN0YXRlID09PSAnc29tZSdcbiAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9kYXNoLnN2ZydcbiAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBbGxGaWx0ZXJBY2NvcmRpb25zKClcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtblNlYXJjaFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwib3ZlcmZsb3ctYXV0byBzaWRlLWZpbHRlci1jb2x1bW5zLXdyYXBwZXJcIlxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwJSAtIDcwcHgpOyBzY3JvbGxiYXItd2lkdGg6IHRoaW5cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogY29sdW1uU2VhcmNoIDogJ2hlYWRlcic7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclBhbm5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyUGFubmVsSXRlbSBsZXQtY29sPVwiY29sXCI+XG4gIDwhLS0gR3JvdXAgQ29sdW1uIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNoaWxkcmVuPy5sZW5ndGhcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNvbHVtbi1ncm91cCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIlxuICAgICAgKm5nSWY9XCJjb2w/LnR5cGUgIT09ICdpbWFnZSdcIlxuICAgID5cbiAgICAgIDwhLS0gQ2hldnJvbiB0b2dnbGUgLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3Mucm90YXRlXT1cImNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbC5leHBhbmRlZEZpbHRlciA9ICFjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIEdyb3VwIGxhYmVsIHRvZ2dsZSAtLT5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCB3LTEwMFwiXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgKGNsaWNrKT1cImNvbC5leHBhbmRlZEZpbHRlciA9ICFjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGQgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgPnt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgbXMtMVwiXG4gICAgICAgICAgICAqbmdJZj1cImNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aCB8fCBjb2w/LnF1ZXJ5Py5fZmlyc3RfdmFsdWVcIlxuICAgICAgICAgICAgPio8L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENoaWxkcmVuIGNvbHVtbnMgLS0+XG4gICAgPGRpdiAqbmdJZj1cImNvbC5leHBhbmRlZEZpbHRlclwiIGNsYXNzPVwicHMtNFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyUGFubmVsSXRlbTsgY29udGV4dDogeyBjb2w6IGNoaWxkIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBMZWFmIENvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2wuY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIiAqbmdJZj1cImNvbD8udHlwZSAhPT0gJ2ltYWdlJ1wiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJtZS0yIGZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiXG4gICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLnJvdGF0ZV09XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIGZ3LWJvbGRcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2hvdyBmaWx0ZXIgd2hlbiBleHBhbmRlZCAtLT5cbiAgICA8ZGl2IFtAc2xpZGVUb2dnbGVdICpuZ0lmPVwiY29sLmV4cGFuZGVkRmlsdGVyXCIgY2xhc3M9XCJwcy00IHBlLTNcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlTmVzdGVkRmlsdGVyOyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gU2lkZSBOZXN0ZWQgRmlsdGVycyAtLT5cbjxuZy10ZW1wbGF0ZSAjc2lkZU5lc3RlZEZpbHRlciBsZXQtY29sPVwiY29sXCI+XG4gIDxkaXYgY2xhc3M9XCJcIj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdhcnJheSc7IGVsc2UgdGV4dEZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtMVwiPlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWItMlwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2lkZU5lc3RlZEZpbHRlclNlYXJjaFwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICAgICAgfCBmaWx0ZXIgOiBzaWRlTmVzdGVkRmlsdGVyU2VhcmNoIDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoOyBlbHNlIG5vRGF0YUZvdW5kXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTEgc2VsZWN0LWFsbC1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgICAgY29sLnF1ZXJ5Py5faWRzPy5sZW5ndGggPT0gY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGxTaWRlRmlsdGVycyhjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiKGNvbC5xdWVyeT8uX2lkcz8ubGVuZ3RoICE9PSBjb2w/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoICYmIGNvbC5xdWVyeT8uX2lkcz8ubGVuZ3RoKVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdEFsbF97eyBjb2wuZmllbGQgfX1cIj5cbiAgICAgICAgICAgICAgICBTZWxlY3QgQWxsXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICAgICAgaXRlbVNpemU9XCIzMlwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tdmlld3BvcnRcIlxuICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMTIwcHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTEgbXMtMVwiXG4gICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLnF1ZXJ5Py5faWRzPy5pbmNsdWRlcyhvcHRpb24/Ll9pZCB8fCBvcHRpb24/LmlkIHx8IG9wdGlvbilcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uT3B0aW9uVG9nZ2xlKGNvbCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICBpZD1cIm9wdGlvbl97eyBjb2wuZmllbGQgfX1fe3tcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uPy5pZCB8fCBvcHRpb24/Ll9pZCB8fCBvcHRpb25cbiAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW2Zvcl09XCJcbiAgICAgICAgICAgICAgICAgICAgJ29wdGlvbl8nICtcbiAgICAgICAgICAgICAgICAgICAgY29sLmZpZWxkICtcbiAgICAgICAgICAgICAgICAgICAgJ18nICtcbiAgICAgICAgICAgICAgICAgICAgKG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyAob3B0aW9uLnZhbHVlIHx8IG9wdGlvbikgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNub0RhdGFGb3VuZD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIG10LTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInNpZGVOZXN0ZWRGaWx0ZXJTZWFyY2hcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBObyBSZWNvcmQgRm91bmRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8IS0tIFRleHQgRmlsdGVyIFNlY3Rpb24gLS0+XG4gICAgPG5nLXRlbXBsYXRlICN0ZXh0RmlsdGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci10ZXh0LXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMlwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wucXVlcnkuZmlyc3RfY29uZGl0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ2RhdGUnIHx8IGNvbD8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5GVlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPkZWXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgW3R5cGVdPVwiY29sPy50eXBlID09ICdkYXRlJyA/ICdkYXRlJyA6IChjb2w/LnR5cGUgPT0gJ251bWJlcicgPyAnbnVtYmVyJzogJ3RleHQnKVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sIS5xdWVyeSEuZmlyc3RfdmFsdWVcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMyBkLWZsZXggZmxleC1yb3cgbXV0ZWRcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBtLTAgY29sLTQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBmaWx0ZXItcmFkaW8taW5wdXRzXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sIS5xdWVyeS5jb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cImFuZFwiXG4gICAgICAgICAgICAgIGlkPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJhbmRfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPkFORDwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJvclwiXG4gICAgICAgICAgICAgIGlkPVwib3Jfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5PUjwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJub25lXCJcbiAgICAgICAgICAgICAgaWQ9XCJub25lX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwibm5vbmVtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiXG4gICAgICAgICAgICAgIGZvcj1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPk5vbmU8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSAmJiBjb2w/LnF1ZXJ5Py5jb25kaXRpb24gIT09ICdub25lJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuc2Vjb25kX2NvbmRpdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ2RhdGUnIHx8IGNvbD8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbdHlwZV09XCJjb2w/LnR5cGUgPT0gJ2RhdGUnID8gJ2RhdGUnIDogJ3RleHQnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0zXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2Vjb25kIFZhbHVlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sIS5xdWVyeS5zZWNvbmRfdmFsdWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImhlaWdodDogMjJweDtcIiAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCI+YXBwbHk8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwiaGVpZ2h0OiAyMnB4O1wiIChjbGljayk9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIj5yZXNldDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMiBib3JkZXItdG9wXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzOHB4XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDMwcHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLWxpZ2h0IGJvcmRlciB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMSBidG4tbGlnaHRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVTaWRlRmlsdGVyKGNvbClcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5DbGVhcjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTFcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlTaWRlRmlsdGVyKGNvbClcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKGNvbD8ucXVlcnkuY29uZGl0aW9uICE9PSAnbm9uZScgJiYgIWNvbD8ucXVlcnk/LnNlY29uZF92YWx1ZSlcIlxuICAgICAgICBbY2xhc3MucGUtbm9uZV09XCIoY29sIT8ucXVlcnkuY29uZGl0aW9uICE9PSAnbm9uZScgJiYgIWNvbD8ucXVlcnk/LnNlY29uZF92YWx1ZSlcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0xcHhcIj5BcHBseTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gQ2VudHIgT3ZlcmxheSBmb3Igc2hvd2luZyB0aGUgY2hvc2UgY29sdW1ucyAtLT5cblxuPGRpdiAqbmdJZj1cInNob3dDb2x1bW5QYW5lbFwiIGNsYXNzPVwiY3VzdG9tLW1vZGFsLW92ZXJsYXlcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3VzdG9tLW1vZGFsLWNvbnRlbnRcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZHJvcGRvd25zQmFja2dyb3VuZENvbG9yXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtb2RhbENvbHVtblBhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFRoZSBleGlzdGluZyBuZy10ZW1wbGF0ZSB5b3UgcHJvdmlkZWQgLS0+XG48bmctdGVtcGxhdGUgI21vZGFsQ29sdW1uUGFubmVsPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uLXBhbmVsLWhlYWRlclwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweC0yIHBzLTMgcm91bmRlZC10b3AtMiBtb2RhLWhlYWRlclwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIjQ4XCJcbiAgICA+XG4gICAgICBDaG9vc2UgQ29sdW1uc1xuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyXCIgKGNsaWNrKT1cImNsb3NlTW9kYWxDb2x1bW5QYW5lbCgpXCJcbiAgICAgICAgPjxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy94LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW5cbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGhyIGNsYXNzPVwibXktMFwiIC8+XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHB4LTIgcGUtM1wiIFtzdHlsZS5oZWlnaHQucHhdPVwiNDhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIiAqbmdJZj1cInNob3dDb2x1bW5zR3JvdXBpbmdcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgYWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLWRvd24uc3ZnJ1xuICAgICAgICAgICAgICAgIDogYWNjb3JkaW9uU3RhdGUgPT09ICdzb21lJ1xuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQWNjb3JkaW9ucygpXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxuICAgICAgICAgIFtjaGVja2VkXT1cImFsbENvbHVtbnNTZWxlY3RlZCgpXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5KClcIlxuICAgICAgICAvPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNob3NlQ29sdW1uc1NlYXJjaFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGhyIGNsYXNzPVwibXQtMCBtYi0xXCIgLz5cbiAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG92ZXJsYXktc2Nyb2xsYWJsZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgY29sIG9mIGNvbHVtbnMgfCBmaWx0ZXIgOiBjaG9zZUNvbHVtbnNTZWFyY2ggOiAnaGVhZGVyJztcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblBhbmVsSXRlbTsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaWRlTWVudVJvd0dyb3Vwcz5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBoLTEwMCBkLW5vbmVcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHgtMyBoLTEwMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBtYi00XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxzcGFuPlJvdyBHcm91cHM8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoLTUwXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBib3JkZXItZGFzaGVkIGgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIlxuICAgICAgICA+XG4gICAgICAgICAgRHJhZyBoZXJlIHRvIHNldCByb3cgR3JvdXBzXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8aHIgY2xhc3M9XCJtdC00XCIgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJweC0zIGgtMTAwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIG1iLTRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2p1c3RpZnkuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4+VmFsdWVzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaC01MCBkLWZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicHgtMyBweS0yIGJvcmRlci1kYXNoZWQgaC0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTRweFwiXG4gICAgICAgID5cbiAgICAgICAgICBEcmFnIGhlcmUgYWdncmVnYXRlXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuPCEtLSBEcmFnIFByZXZpZXcgVGVtcGxhdGUgLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuPG5nLXRlbXBsYXRlICNkcmFnUHJldmlldyBsZXQtY29sPlxuICA8ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICA8ZGl2PlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBEcmFnIFBsYWNlaG9sZGVyIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNkcmFnUGxhY2Vob2xkZXJcbiAgbGV0LWNvbFxuICBsZXQtaT1cImluZGV4XCJcbiAgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCJcbiAgbGV0LWRyYWdnaW5nSW5Hcm91cEFyZWE9XCJkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbj5cbiAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCI+XG4gICAgPGRpdlxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbCwgaW5kZXg6IGksIHNlY3Rpb246IHNlY3Rpb24gfVxuICAgICAgXCJcbiAgICA+PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPk5ldyBQbGFjZWhvbGRlcjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBUb3AgR3JvdXAgUm93IFBsYWNlaG9sZGVyIC0tPlxuPG5nLXRlbXBsYXRlICN0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyIGxldC1jb2wgbGV0LXNob3dDaGV2cm9uPVwic2hvd0NoZXZyb25cIj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIHRvcC1yb3ctZ3JvdXBpbmctcGxhY2Vob2xkZXJcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJ0b3BHcm91cGVkQmFkZ2VzQmFja2dyb3VuZENvbG9yXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZ3JpZC0zeDItZ2FwLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwidW5ncm91cENvbHVtbihjb2wpXCJcbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy94LnN2ZydcIlxuICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJzaG93Q2hldnJvblwiIHN0eWxlPVwib3BhY2l0eTogMC42OyBmb250LXNpemU6IDE0cHhcIj5cbiAgICA8c3BhblxuICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcIlxuICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICA+PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjY2hpbGRIZWFkZXJQbGFjZWhvbGRlclxuICBsZXQtY29sXG4gIGxldC1waW5uZWRSaWdodD1cInBpbm5lZFJpZ2h0XCJcbiAgbGV0LWk9XCJpbmRleFwiXG4gIGxldC1zZWN0aW9ucz1cInNlY3Rpb25zXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgb25lLXJvdy1oZWFkZXItY2VsbHNcIlxuICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cImhlYWRlckZvbnRXZWlnaHRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIFt0aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICBbY2xhc3Mudy0xMDBdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXhcIlxuICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHJlZS1kb3RzIHAtMVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3RocmVlLWRvdHMtdmVydGljYWwuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dGaWx0ZXJSb3dcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICBjbGFzcz1cImhlYWRlci1jZWxsIGZpbHRlci1jZWxsXCJcbiAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDNcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBmaWx0ZXItY2VsbFwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgID5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuZmlsdGVyVmFsdWVcIlxuICAgICAgICBbcmVhZG9ubHldPVwiY29sPy50eXBlID09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdpbWFnZScgfHwgY29sPy50eXBlID09ICdhcnJheSdcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWQtc2VhcmNoLWlucHV0XT1cIlxuICAgICAgICAgIGNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXG4gICAgICAgIFwiXG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyXCJcbiAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUZpbHRlckNlbGwgPSBjb2w7IGFjdGl2ZUNvbCA9IG51bGxcIlxuICAgICAgICA+PHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW5cbiAgICAgID48L3NwYW4+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlRmlsdGVyQ2VsbCA9PT0gY29sXCJcbiAgICAgICAgc3R5bGU9XCJ0b3A6IDEwMCU7IHJpZ2h0OiAwOyB6LWluZGV4OiAxMDsgbGVmdDogMFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWJsZUxheW91dD5cbiAgPGRpdlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwicC0zIHNoYWRvdyBhY3Rpb25zLWRyb3Bkb3duIG10LTEgZHJvcGRvd24tbWVudSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXRcIlxuICAgIHN0eWxlPVwid2lkdGg6IDMyMHB4XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCJcbiAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEwcHhcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnc2V0dGluZycpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWxlZnQuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxoNiBjbGFzcz1cIm1iLTAgbXMtMlwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMFwiPlRhYmxlIExheW91dDwvaDY+XG4gICAgPC9kaXY+XG4gICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIG1iLTMgZC1mbGV4XCIgcm9sZT1cImdyb3VwXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJidG4tY2hlY2sgbGF5b3V0LWJ1dHRvbi1jaGVja1wiXG4gICAgICAgIG5hbWU9XCJsYXlvdXRTaXplXCJcbiAgICAgICAgaWQ9XCJzbWFsbFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVGFibGVMYXlvdXQoJGV2ZW50LCAnc21hbGwnKVwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ3NtYWxsJ1wiXG4gICAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgbGF5b3V0LWJ1dHRvblwiXG4gICAgICAgIGZvcj1cInNtYWxsXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdzbWFsbCcgPyAnIzAwMCcgOiAnIzcyNzI3MidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJveCBib3JkZXIgbWItMVwiIHN0eWxlPVwiaGVpZ2h0OiA4cHhcIj48L2Rpdj5cbiAgICAgICAgU21hbGxcbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBjbGFzcz1cImJ0bi1jaGVjayBsYXlvdXQtYnV0dG9uLWNoZWNrXCJcbiAgICAgICAgbmFtZT1cImxheW91dFNpemVcIlxuICAgICAgICBpZD1cIm1lZGl1bVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ21lZGl1bSdcIlxuICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRhYmxlTGF5b3V0KCRldmVudCwgJ21lZGl1bScpXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgbXgtMyBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGxheW91dC1idXR0b25cIlxuICAgICAgICBmb3I9XCJtZWRpdW1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgY29sb3I6IHNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ21lZGl1bScgPyAnIzAwMCcgOiAnIzcyNzI3MidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJveCBib3JkZXIgbWItMVwiIHN0eWxlPVwiaGVpZ2h0OiAxMnB4XCI+PC9kaXY+XG4gICAgICAgIE1lZGl1bVxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrIGxheW91dC1idXR0b24tY2hlY2tcIlxuICAgICAgICBuYW1lPVwibGF5b3V0U2l6ZVwiXG4gICAgICAgIGlkPVwibGFyZ2VcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRhYmxlTGF5b3V0KCRldmVudCwgJ2xhcmdlJylcIlxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdsYXJnZSdcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImJvcmRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGxheW91dC1idXR0b25cIlxuICAgICAgICBmb3I9XCJsYXJnZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnbGFyZ2UnID8gJyMwMDAnIDogJyM3MjcyNzInXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1ib3ggYm9yZGVyIG1iLTFcIiBzdHlsZT1cImhlaWdodDogMTZweFwiPjwvZGl2PlxuICAgICAgICBMYXJnZVxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuPlNob3cgc2VwYXJhdG9yczwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgaWQ9XCJzZXBhcmF0b3JzXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkZvbnRDaGFuZ2UoKVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPHNwYW4+Um93IHNoYWRpbmc8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtLTBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1NoYWRpbmdFbmFibGVkXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NoYWRpbmcoKVwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInJvd1NoYWRpbmdcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3Bhbj5TaG93IFNpZGUgTWVudTwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd1NpZGVNZW51XCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGlkPVwicm93U2hhZGluZ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3Bhbj5TaG93IEZpbHRlciBSb3c8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtLTBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgaWQ9XCJyb3dTaGFkaW5nXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYmxlUHJlc2V0PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJhY3RpdmVTdWJCdXR0b24gIT09ICdzYXZlLXByZXNldCdcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwicC0zIHNoYWRvdyBhY3Rpb25zLWRyb3Bkb3duIG10LTEgZHJvcGRvd24tbWVudSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXRcIlxuICAgIHN0eWxlPVwid2lkdGg6IDI4MHB4XCJcbiAgPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBwLTBcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4XCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnc2V0dGluZycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWxlZnQuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxoNiBjbGFzcz1cIm1iLTAgbXMtMlwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMFwiPlRhYmxlIFByZXNldHM8L2g2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIFNhdmUgUHJlc2V0IEJ1dHRvbiB3aXRoIERyb3Bkb3duIC0tPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lIHRleHQtcHJpbWFyeVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgaWQ9XCJzYXZlUHJlc2V0RHJvcGRvd25cIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZVN1YkFjdGlvbnMoJ3NhdmUtcHJlc2V0JylcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgaXNUYWJsZVByZXNldE5vdENoYW5nZWQgPyBcIlNhdmUgcHJlc2V0XCIgOiBcIlVwZGF0ZSBQcmVzZXRcIiB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdsb2JhbC1zZWFyY2hcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NlYXJjaC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBteC0yIHBvc2l0aW9uLWFic29sdXRlIGljb25cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRQcmVzZXRUYWJsZVwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUHJlc2V0IExpc3QgLS0+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgdGFibGVWaWV3IHwgZmlsdGVyIDogc2VhcmNoVGV4dFByZXNldFRhYmxlIDogJ25hbWUnIGFzIGZpbHRlcmVkTGlzdFxuICAgICAgXCJcbiAgICA+XG4gICAgICA8IS0tIElmIGZpbHRlcmVkTGlzdCBleGlzdHMgYW5kIG5vbmUgaXMgZGVmYXVsdCAtPiBzaG93IGZhbGxiYWNrIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIiBwYi01IG92ZXJmbG93LWF1dG9cIlxuICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAtIDI1MFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICBjbGVhckFsbEZpbHRlcnModHJ1ZSk7XG4gICAgICAgICAgICBvcGVuSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgdGVtcF9zdGF0ZS5pZCA9ICcnO1xuICAgICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID0gJyc7XG4gICAgICAgICAgICBjdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUgPSBudWxsXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZFwiPkRlZmF1bHQgVmlldzwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFya1wiPkNyZWF0ZWQgYnkgc3lzdGVtPC9zbWFsbD5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCIhdGFibGVGaWx0ZXJWaWV3SWQgJiYgIWhhc0FueURlZmF1bHRWaWV3KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiZy1saWdodCB0ZXh0LXByaW1hcnkgbXMtMlwiXG4gICAgICAgICAgICA+RGVmYXVsdDwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgICA8IS0tIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiF0YWJsZUZpbHRlclZpZXdJZCAmJiAhaGFzQW55RGVmYXVsdFZpZXcoKVwiXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZWNrLWJsdWUuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgID48L3NwYW4+IC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24gZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIlxuICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZUZpbHRlclZpZXdJZFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRoZSBsaXN0OiByZW5kZXIgZWFjaCB0YWJsZSBmcm9tIGZpbHRlcmVkTGlzdCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCB0YWJsZSBvZiBmaWx0ZXJlZExpc3Q7XG4gICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeVRhYmxlXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gSXRlbSAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb3BlbkluZGV4ID0gbnVsbDsgYWN0aXZlVG9wQnV0dG9uID0gJydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBweC0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInNlbGVjdEZpbHRlcih0YWJsZSk7IG9wZW5JbmRleCA9IG51bGxcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7eyB0YWJsZT8ubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwhLS0ge3t0YWJsZT8uaXNfdGVtcH19IC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAodGFibGU/LmlzX3RlbXAgJiYgIXRlbXBfc3RhdGUuaWQpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRlbXBfc3RhdGUuaWQgPT0gdGFibGUuaWRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGVjay1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGU/LmlzX2RlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiZy1saWdodCB0ZXh0LXByaW1hcnkgbXMtMlwiXG4gICAgICAgICAgICAgICAgICA+RGVmYXVsdDwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFya1wiICpuZ0lmPVwidGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXNcIiBbdGl0bGVdPVwidGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXNcIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgdGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXM/Lmxlbmd0aCA+IDI1XG4gICAgICAgICAgICAgID8gKHRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzIHwgc2xpY2U6MDoyNSkgKyAnLi4uJ1xuICAgICAgICAgICAgICA6IHRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICh7eyB0YWJsZT8uY29uZmlnPy50b3RhbENvdW50IH19KVxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhcmtcIiAqbmdJZj1cIiF0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1wiPnt7IHRhYmxlPy5jcmVhdGVkQXQgfCBkYXRlIDogXCJNTU0gZCwgeVwiIH19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGU/LmlzX2RlZmF1bHRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGVjay1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCIhdGFibGU/LmlzX2RlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taWNvbiBtdXRlZC10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuSW5kZXggPT09IGlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvaG9yaXpvbnRhbC1kb3RzLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBtZW51IC0tPlxuICAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcGVuSW5kZXggPT09IGlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1kcm9wZG93bi1tZW51IHBvc2l0aW9uLWZpeGVkIHRvcC1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUucmlnaHQucHhdPVwiJ3Vuc2V0J1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldFdpZHRoIC0gMjAwXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IHVuc2V0OyByaWdodDogdW5zZXRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uUHJlc2V0KHRhYmxlLCAnc2V0UHJlc2V0Jyk7IHRlbXBfc3RhdGUuaWQgPSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3N0YXIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNldCBhcyBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJub25lXCIgKm5nSWY9XCIhdGFibGUuY29uZmlybURlbGV0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gdGV4dC1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlLmNvbmZpcm1EZWxldGUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IC00cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdHJhc2gtcmVkLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWxldGVcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZS5jb25maXJtRGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbmZpcm0tYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTMgcHktMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSA8YnIgLz48YlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID7igJx7eyB0YWJsZT8ubmFtZSB9feKAnTwvYlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+P1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZS5jb25maXJtRGVsZXRlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb25QcmVzZXQodGFibGUsICdkZWxldGVQcmVzZXQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBJdGVtIEVuZCBIZXJlIC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgKm5nSWY9XCJhY3RpdmVTdWJCdXR0b24gPT0gJ3NhdmUtcHJlc2V0J1wiXG4gICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IHAtMyBiYWRnZSBtdC00IHNhdmUtcHJlc2V0LWRyb3Bkb3duIG10LTFcIlxuICAgIGFyaWEtbGFiZWxsZWRieT1cInNhdmVQcmVzZXREcm9wZG93blwiXG4gICAgc3R5bGU9XCJtaW4td2lkdGg6IDI1MHB4XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkIGZzLTE0cHggbWItMlwiPlxuICAgICAge3sgaXNUYWJsZVByZXNldE5vdENoYW5nZWQgPyBcIlNhdmUgcHJlc2V0XCIgOiBcIlVwZGF0ZSBQcmVzZXRcIiB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmcy0xNHB4IG1iLTJcIiBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyMHB4XCI+XG4gICAgICBUaGlzIHdpbGwgc2F2ZSB0aGUgY3VycmVudCB0YWJsZSBhZGp1c3RtZW50cyBhcyBhIHByZXNldC5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIElucHV0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICA8bGFiZWwgZm9yPVwicHJlc2V0TmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBmcy0xMnB4IGZ3LWJvbGRcIlxuICAgICAgICA+UHJlc2V0IE5hbWU8L2xhYmVsXG4gICAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdsb2JhbC1zZWFyY2hcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI3ByZXNldE5hbWVDdHJsPVwibmdNb2RlbFwiXG4gICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInByZXNldE5hbWVcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdpcy1pbnZhbGlkJzpcbiAgICAgICAgICAgICAgcHJlc2V0TmFtZUN0cmwuaW52YWxpZCAmJlxuICAgICAgICAgICAgICAocHJlc2V0TmFtZUN0cmwuZGlydHkgfHwgcHJlc2V0TmFtZUN0cmwudG91Y2hlZClcbiAgICAgICAgICB9XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gcHMtMlwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBwcmVzZXQgbmFtZVwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENoZWNrYm94IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByZXNldEZpbHRlclwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwic2F2ZUZpbHRlcnNcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbXQtMVwiIGZvcj1cInNhdmVGaWx0ZXJzXCI+XG4gICAgICAgIFNhdmUgYWN0aXZlIGZpbHRlcnNcbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNhdmUgQnV0dG9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJvcmRlciB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygndGFibGUtcHJlc2V0cycpXCJcbiAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOiAtMnB4XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtkaXNhYmxlZF09XCJjbG9zZURyb3Bkb3duLnByZXNldC5sb2FkaW5nXCJcbiAgICAgICAgKGNsaWNrKT1cInNhdmVQcmVzZXQocHJlc2V0TmFtZUN0cmwpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMnB4XCIgKm5nSWY9XCJpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2xvc2VEcm9wZG93bi5wcmVzZXQubG9hZGluZ1wiXG4gICAgICAgICAgICA+U2F2ZTwvbmctY29udGFpbmVyXG4gICAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjbG9zZURyb3Bkb3duLnByZXNldC5sb2FkaW5nXCJcbiAgICAgICAgICAgID48c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCI+PC9zcGFuXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcFwiICpuZ0lmPVwiIWlzVGFibGVQcmVzZXROb3RDaGFuZ2VkXCJcbiAgICAgICAgICA+VXBkYXRlIFByZXNldDwvc3BhblxuICAgICAgICA+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Nob3dIaWRlQ29sdW1ucz5cbiAgPGRpdlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwicC0zIHNoYWRvdyBhY3Rpb25zLWRyb3Bkb3duIG10LTEgZHJvcGRvd24tbWVudSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXRcIlxuICAgIHN0eWxlPVwid2lkdGg6IDI4MHB4XCJcbiAgPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBwLTBcIlxuICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4XCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnc2V0dGluZycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWxlZnQuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxoNiBjbGFzcz1cIm1iLTAgbXMtMlwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMFwiPkNvbHVtbnM8L2g2PlxuICAgICAgPC9kaXY+XG4gICAgICA8YVxuICAgICAgICAoY2xpY2spPVwicmVzZXRDb2x1bW5zKClcIlxuICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgdGV4dC1kZWNvcmF0aW9uLW5vbmUgZC1ub25lXCJcbiAgICAgICAgPlJlc2V0PC9hXG4gICAgICA+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJteC0yIHBvc2l0aW9uLWFic29sdXRlIGljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5cIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidG9wU2hvd0hpZGVDb2x1bW5zXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gUHJlc2V0IExpc3QgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIlxuICAgICAgc3R5bGU9XCJvdmVyZmxvdzogYXV0bzsgc2Nyb2xsYmFyLXdpZHRoOiB0aGluXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC0gMjIwXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibXV0ZWQtdGV4dCBzaG93LWhpZGUtdGFibGUtbGFiZWwgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCIgKm5nSWY9XCJoYXNBbnlWaXNpYmxlQ29sdW1uXCI+XG4gICAgICAgIFNob3cgaW4gdGFibGVcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgaWQ9XCJoaWRlX2FsbFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbENvbHVtbnNTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LXNlbWlib2xkXCIgZm9yPVwiaGlkZV9hbGxcIj5cbiAgICAgICAgICAgICAgU2hvdy9IaWRlIEFsbCBcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gSXRlbSAtLT5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogdG9wU2hvd0hpZGVDb2x1bW5zIDogJ2hlYWRlcic7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImNvbC5pc192aXNpYmxlXCJcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBib3JkZXItMCBweC0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMVwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaXAtdmVydGljYWwuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItZ3JhcCBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9waW4tYmx1ZS5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1ncmFwIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIiFjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSAmJiAhY29sPy5xdWVyeT8uX2lkcz8ubGVuZ3RoXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2wsIGZhbHNlKVwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwidmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggPD0gMiB8fCBjb2w/LmlzX2Fsd2F5c192aXNpYmxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5wZS1ub25lXT1cInZpc2libGVDb2x1bW5zKCkubGVuZ3RoIDw9IDIgfHwgY29sPy5pc19hbHdheXNfdmlzaWJsZVwiXG4gICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS01MF09XCJ2aXNpYmxlQ29sdW1ucygpLmxlbmd0aCA8PSAyIHx8IGNvbD8uaXNfYWx3YXlzX3Zpc2libGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLnN2ZydcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSB8fCBjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC41XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS5zdmcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEl0ZW0gRW5kIEhlcmUgLS0+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCJcbiAgICAgICAgKm5nSWY9XCJoYXNBbnlWaXNpYmxlQ29sdW1uICYmIGhhc0FueUluVmlzaWJsZUNvbHVtblwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtdXRlZC10ZXh0IHNob3ctaGlkZS10YWJsZS1sYWJlbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxuICAgICAgICAqbmdJZj1cImhhc0FueUluVmlzaWJsZUNvbHVtblwiXG4gICAgICA+XG4gICAgICAgIEhpZGUgaW4gdGFibGVcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBpZD1cInNob3dfYWxsXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsQ29sdW1uc1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5KClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGRcIiBmb3I9XCJzaG93X2FsbFwiPlxuICAgICAgICAgICAgICBTaG93L0hpZGUgQWxsIFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IHRvcFNob3dIaWRlQ29sdW1ucyA6ICdoZWFkZXInOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIiFjb2wuaXNfdmlzaWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBib3JkZXItMCBweC0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZ3JpcC12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gY3Vyc29yLWdyYXBcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9waW4tYmx1ZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gY3Vyc29yLWdyYXBcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbHVtblZpc2liaWxpdHkoY29sLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS1jcm9zcy5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEl0ZW0gRW5kIEhlcmUgLS0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJDb2x1bW5zIGxldC1jb2w9XCJjb2x1bW5cIj5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiIWlzRmlsdGVyT3BlbiAmJiBhY3RpdmVUb3BCdXR0b24gPT0gJ2ZpbHRlci1jb2x1bW5zJ1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dCBmaWx0ZXItY29sdW1uc1wiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHg7IHJpZ2h0OiB1bnNldDsgbWF4LXdpZHRoOiAyMzBweFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0yIHB4LTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgYnlcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiYWRkRmlsdGVyQ29sdW1uSW5wdXRcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIlxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNTAwcHgpOyBvdmVyZmxvdzogYXV0b1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgY29sIG9mIGNvbHVtbnMgfCBmaWx0ZXIgOiBhZGRGaWx0ZXJDb2x1bW5JbnB1dCA6ICdoZWFkZXInO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXIoY29sKVwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGNvbC5pc192aXNpYmxlICYmXG4gICAgICAgICAgICAhY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgJiZcbiAgICAgICAgICAgICFjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGggJiYgY29sPy50eXBlICE9PSAnaW1hZ2UnICYmIGNvbC5pc19zZWFyY2hfYWJsZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYm9yZGVyLTAgcHgtMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMVwiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IC0zcHhcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCB0ZXh0LWNhcGl0YWxpemVcIiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiPlxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyICB8IHRpdGxlY2FzZSAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIERyb3Bkb3duIC0tPlxuICA8ZGl2XG4gICAgQHNsaWRlVG9nZ2xlXG4gICAgKm5nSWY9XCJpc0ZpbHRlck9wZW4gJiYgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnYXJyYXknXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInNoYWRvdyBhY3Rpb25zLWRyb3Bkb3duIG10LTEgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0IGZpbHRlci1jb2x1bW5zIHBiLTJcIlxuICAgIHN0eWxlPVwid2lkdGg6IDI4MHB4OyByaWdodDogdW5zZXQ7IG1heC13aWR0aDogMjMwcHhcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwicHgtMyBteS0yIGJvcmRlci1iZWxvdyBweS0xIHBiLTIgbWItMyBkLWZsZXggcHMtMVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2ZpbHRlci1jb2x1bW5zJyk7IGlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIGN1cnNvci1wb2ludGVyIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCJcbiAgICAgID48L3NwYW5cbiAgICAgID48Yj57eyBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uaGVhZGVyIHwgdGl0bGVjYXNlICB9fTwvYj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWItMiBweC0zXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLTEyIGdsb2JhbC1zZWFyY2ggcG9zaXRpb24tcmVsYXRpdmUgYm9yZGVyIHJvdW5kZWQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LXdyYXAgcHgtMiBmaWx0ZXItc2VyYWNoLWlucHRcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3RlZCBvZiBzZWxlY3RlZEZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBtZS0xIG1iLTEgdG9wLXJvdy1maWx0ZXItZHJvcGRvd24gdGV4dC1jYXBpdGFsaXplXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgc2VsZWN0ZWQ/LnZhbHVlID8gc2VsZWN0ZWQudmFsdWUgOiBzZWxlY3RlZCB8IHRpdGxlY2FzZSB9fVxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0aW9uSW5GaWx0ZXIoc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Nyb3NzLXByaW1hcnkuc3ZnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gYm9yZGVyLTAgZmxleC1ncm93LTFcIlxuICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkRmlsdGVyT3B0aW9ucz8ubGVuZ3RoID8gJycgOiAnRmlsdGVyIGJ5J1wiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0Rm9yRmlsdGVyRHJvcERvd25cIlxuICAgICAgICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJoYW5kbGVCYWNrc3BhY2UoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA2MDBweCk7IG92ZXJmbG93OiBhdXRvXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2Ygc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXIuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgICB8IGZpbHRlciA6IHNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93biA6ICd2YWx1ZSc7XG4gICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYm9yZGVyLTAgcHgtMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbaWRdPVwiaVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5oYXMoY29sLmlkIHx8IGNvbC5faWQgfHwgY29sKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0aW9uSW5GaWx0ZXIoY29sKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBmdy1zZW1pYm9sZCB0ZXh0LWNhcGl0YWxpemVcIiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiIFtmb3JdPVwiaVwiPlxuICAgICAgICAgICAgICB7eyBjb2w/LnZhbHVlIHx8IGNvbD8ubmFtZSB8fCBjb2wgfCB0aXRsZWNhc2UgIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgcHgtMiBib3JkZXItdG9wXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzOHB4XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tbGlnaHQgYm9yZGVyIHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xIGJ0bi1saWdodFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlc2V0RmlsdGVyQ2hhbmdlcygpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogLTJweFwiPlNhdmU8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBGb3IgVGV4dCBmaWVsZHMgYW5kIG51bWJlciBmaWVsZHMtLT5cblxuICA8ZGl2XG4gICAgQHNsaWRlVG9nZ2xlXG4gICAgKm5nSWY9XCJcbiAgICAgIGlzRmlsdGVyT3BlbiAmJlxuICAgICAgKHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnIHx8XG4gICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInIHx8XG4gICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICd0aW1lJyB8fFxuICAgICAgICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScpXG4gICAgXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInNoYWRvdyBhY3Rpb25zLWRyb3Bkb3duIG10LTEgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0IGZpbHRlci1jb2x1bW5zIHBiLTJcIlxuICAgIHN0eWxlPVwid2lkdGg6IDIxMHB4OyByaWdodDogdW5zZXQ7IG1heC13aWR0aDogMjMwcHhcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwicHgtMyBib3JkZXItYmVsb3cgcHktMSBwYi0yIGQtZmxleCBwcy0xXCI+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWxlZnQuc3ZnJ1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdmaWx0ZXItY29sdW1ucycpOyBpc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZVwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgPjwvc3BhblxuICAgICAgPjxiPnt7IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5oZWFkZXIgfX08L2I+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwb3NpdGlvbi1yZWxhdGl2ZSBwLTIgdGV4dC1maWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgIDxzZWxlY3RcbiAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIGN1c3RvbS1zZWxlY3QgYm9yZGVyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpcnN0Q29uZGl0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGZpcnN0IHZhbHVlXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICBbdHlwZV09XCJcbiAgICAgICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXG4gICAgICAgICAgICAgID8gJ3RleHQnXG4gICAgICAgICAgICAgIDogc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGVcbiAgICAgICAgICBcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBteS0zIGQtZmxleCBmbGV4LXJvd1wiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIGNvbC00IG0tMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgaWQ9XCJsb2dpY2FsQW5kXCJcbiAgICAgICAgICAgICAgbmFtZT1cImxvZ2ljYWxPcGVyYXRvclwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiYW5kXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwibG9naWNhbEFuZFwiXG4gICAgICAgICAgICAgID5BTkQ8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgY29sLTQgbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBpZD1cImxvZ2ljYWxPclwiXG4gICAgICAgICAgICAgIG5hbWU9XCJsb2dpY2FsT3BlcmF0b3JcIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm9yXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwibG9naWNhbE9yXCI+T1I8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIGNvbC00IG0tMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgaWQ9XCJsb2dpY2FsTm9uZVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJsb2dpY2FsT3BlcmF0b3JcIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJsb2dpY2FsTm9uZVwiXG4gICAgICAgICAgICAgID5Ob25lPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZGl0aW9uICE9PSAnbm9uZScgJiYgZmlyc3RWYWx1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIG10LTNcIj5cbiAgICAgICAgICAgIDwhLS0gU2Vjb25kIGNvbmRpdGlvbiBzZWxlY3QgLS0+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gYm9yZGVyXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRDb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICA8IS0tIFNlY29uZCB2YWx1ZSBpbnB1dCAtLT5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBbdHlwZV09XCJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgPyAndGV4dCdcbiAgICAgICAgICAgICAgICAgIDogc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBzZWNvbmQgdmFsdWVcIlxuICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRWYWx1ZVwiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMiBweC0yIGJvcmRlci10b3BcIlxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IDM4cHhcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2Rpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHM/LnNpemUgJiYgIWZpcnN0VmFsdWVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLWxpZ2h0IGJvcmRlciB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMSBidG4tbGlnaHRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZXNldFRleHRGaWx0ZXJDaGFuZ2VzKClcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5DYW5jZWw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2Rpc2FibGVkXT1cIihjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHM/LnNpemUgPT09IDAgJiYgIWZpcnN0VmFsdWUpIHx8IChjb25kaXRpb24gIT09ICdub25lJyAmJiAhc2Vjb25kVmFsdWUpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTFcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMnB4XCI+QXBwbHk8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEVkaXQgZHJvcGRvd24gaGVyZSAtLT5cbjxuZy10ZW1wbGF0ZSBsZXQtY29sPlxuICA8ZGl2IGNsYXNzPVwiZHJvcC1kb3duLWVkaXRcIj48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZnVsbFRleHRUZW1wbGF0ZVxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbD1cImNvbFwiXG4gIGxldC1pc0FycmF5PVwiaXNBcnJheVwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZ1bGwtdGV4dC1ib3hcIlxuICAgIChkYmxjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFpc0FycmF5XCJcbiAgICAgICAgY2xhc3M9XCJmdWxsLXRleHQtY29udGVudFwiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC8gMlwiXG4gICAgICAgIChkYmxjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZW5hYmxlRWRpdChyb3csIGNvbCwgdHJ1ZSlcbiAgICAgICAgXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgPlxuICAgICAgICB7e1xuICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8udmFsdWUgfHxcbiAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXG4gICAgICAgIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0FycmF5XCI+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cImkgIT09IDBcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgaXRlbT8uZGVwYXJ0bWVudF9uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/LnJvbGVOYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/LmZ1bGxfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBpdGVtPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICBpdGVtPy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiLVwiXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZyhyb3csIGNvbClcIj5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAoZGJsY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGVuYWJsZUVkaXQocm93LCBjb2wsIHRydWUpXG4gICAgICAgIFwiXG4gICAgICAgICN0ZXh0TW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgcm93cz1cIjRcIlxuICAgICAgICAjdGV4dEFyZWFkSW5wdXRcbiAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sLmZpZWxkXVwiXG4gICAgICAgIG5hbWU9XCJ7eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICByZXF1aXJlZFxuICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgdGV4dE1vZGVsKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cInRleHRBcmVhZElucHV0LmJsdXIoKVwiXG4gICAgICAgIGF1dG9mb2N1c1xuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnaXMtaW52YWxpZCc6IHRleHRNb2RlbC5pbnZhbGlkXG4gICAgICAgIH1cIlxuICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICA+PC90ZXh0YXJlYT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJbWFnZVBsYWNlaG9sZGVyIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sPVwiY29sXCI+XG4gIDxzcGFuXG4gICAgY2xhc3M9XCJweC0yIGQtZmxleCB3LTEwMCBjZWxsLWNvbnRlbnQgaW1hZ2UtcGxhY2Vob2xkZXJcIlxuICAgIFt0aXRsZV09XCJyb3c/LmZ1bGxfbmFtZSB8fCByb3c/Lm5hbWUgfHwgJ04vQSdcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgcm93Py5hc3NldEltYWdlIHx8XG4gICAgICAgICAgcm93Py5pbnZvaWNlPy5pbnZvaWNlX2ltYWdlIHx8XG4gICAgICAgICAgcm93Py5pbnZvaWNlX2ltYWdlO1xuICAgICAgICBlbHNlIHBsYWNlaG9sZGVyXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIChjbGljayk9XCJmdWxsc2NyZWVuSW1hZ2UgPSByb3c/LnByb2ZpbGVfcGljdHVyZXM/Lls0XT8ucGF0aCB8fFxuICAgICAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICAgIHJvdz8uaW52b2ljZV9pbWFnZVwiXG4gICAgICAgIGNsYXNzPVwicGljXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgIFtjbGFzcy5hc3NldHMtcGljXT1cImdyaWRUeXBlID09ICdBc3NldHMnXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIFt3aWR0aF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgW2hlaWdodF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgcm93Py5wcm9maWxlX3BpY3R1cmVzPy5bNF0/LnBhdGggfHxcbiAgICAgICAgICAgIHJvdz8ubG9nbyB8fFxuICAgICAgICAgICAgcm93Py5hc3NldEltYWdlIHx8XG4gICAgICAgICAgICByb3c/Lmludm9pY2VfaW1hZ2VcbiAgICAgICAgICBcIlxuICAgICAgICAgIGFsdD1cImljb25cIlxuICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWljb25cIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIDxkaXZcbiAgICAgIGNsYXNzPVwiZnVsbHNjcmVlbi1vdmVybGF5XCJcbiAgICAgICpuZ0lmPVwiZnVsbHNjcmVlbkltYWdlXCJcbiAgICAgIChjbGljayk9XCJmdWxsc2NyZWVuSW1hZ2UgPSBudWxsXCJcbiAgICA+XG4gICAgICA8aW1nIFtzcmNdPVwiZnVsbHNjcmVlbkltYWdlXCIgY2xhc3M9XCJmdWxsc2NyZWVuLWltZ1wiIC8+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlcj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldER5bmFtaWNDbGFzcyhyb3c/LmZ1bGxfbmFtZSB8fCByb3c/Lm5hbWUpXCJcbiAgICAgICAgY2xhc3M9XCJwaWMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciByb3VuZGVkLWNpcmNsZVwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwicm93SGVpZ2h0IC8gM1wiXG4gICAgICAgIFtjbGFzcy5hc3NldHMtcGljXT1cImdyaWRUeXBlID09ICdBc3NldHMnXCJcbiAgICAgID5cbiAgICAgICAge3sgZ2V0SW5pdGlhbHMocm93Py5mdWxsX25hbWUpIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSaWdodCBDbGljayBNZW51ZSAtLT5cbjxkaXZcbiAgW2NsYXNzLmludmlzaWJsZV09XCIhcG9zaXRpb25lZFlldFwiXG4gIGNsYXNzPVwiY29udGV4dC1tZW51IHAtMlwiXG4gICpuZ0lmPVwiYWN0aW9uSGlkZSAmJiBhY3Rpb25zPy5sZW5ndGhcIlxuICBbbmdTdHlsZV09XCJ7ICd0b3AucHgnOiB5UG9zLCAnbGVmdC5weCc6IHhQb3MgfVwiXG4gIFtjbGFzcy5zaG93XT1cImlzVmlzaWJsZVwiXG4gIGFwcGVuZFRvPVwiYm9keVwiXG4+XG4gIDx1bD5cbiAgICA8bGlcbiAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiXG4gICAgICBjbGFzcz1cInJvdW5kZWQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAoY2xpY2spPVwib25BY3Rpb25DbGljayhhY3Rpb24pXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zLycgKyBhY3Rpb24gKyAnLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiByaWdodC1jbGljay1tZW51LWljb25zIG1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplIGZ3LTUwMFwiPnt7IGFjdGlvbiB9fTwvc3Bhbj5cbiAgICA8L2xpPlxuICA8L3VsPlxuPC9kaXY+XG5cbjwhLS0gRGV0YWlscyBUb2dnbGUgZnJvbSBib3R0b20gLS0+XG5cbjxuZy10ZW1wbGF0ZSAjbmVzdGVkVGFibGVUZW1wbGF0ZSBsZXQtcm93PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJuZXN0ZWQtdGFibGUgdGFibGUgdGFibGUtc20gdy0xMDAgbWItMCBjZW50ZXItbmVzdGVkLXRhYmxlIHctMTAwXCJcbiAgICBzdHlsZT1cInRhYmxlLWxheW91dDogZml4ZWQgIWltcG9ydGFudFwiXG4gICAgI25lc3RlZFRhYmxlQ29udGFpbmVyXG4gID5cbiAgICA8dGhlYWRcbiAgICAgICNuZXN0ZWRIZWFkZXJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibmVzdGVkVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJyb3c/LmRldGFpbC5jb2x1bW5zXCJcbiAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BDb2x1bW4oJGV2ZW50LCByb3cpXCJcbiAgICAgICAgKGNka0Ryb3BMaXN0U29ydGVkKT1cIm9uTmVzdGVkQ29sU29ydCgkZXZlbnQsIHByZXZpZXdOZXN0ZWRDb2xzKVwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVIZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cImQtZmxleCB0ciBib3JkZXItYmVsb3dcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiByb3cuZGV0YWlsLmNvbHVtbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgIGNsYXNzPVwicHgtNCB0aFwiXG4gICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5lc3RlZFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICBjZGtEcmFnXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBoLTEwMCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwb3NpdGlvbi1yZWxhdGl2ZSBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzXCIgKGNsaWNrKT1cInNvcnROZXN0ZWRDb2woY29sLCByb3cpXCI+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VycmVudFN1YlNvcnRDb2x1bW4gPT0gY29sLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAoY29sPy5vcmRlcl9ieSA9PSAnZGVzYydcbiAgICAgICAgICAgICAgICAgICAgPyAnZGF0YS1ncmlkL2ljb25zL3NvcnQtZGVzYy5zdmcnXG4gICAgICAgICAgICAgICAgICAgIDogJ2RhdGEtZ3JpZC9pY29ucy9zb3J0LWFzYy5zdmcnKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG1zLTIgc3RhcnQtNTBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHJlZS1kb3RzIHAtMVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY29sKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3RocmVlLWRvdHMtdmVydGljYWwuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICAgIDwhLS0gT25seSBzaG93IG1lbnUgaWYgdGhpcyBjb2x1bW4gaXMgYWN0aXZlIC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDb2wgPT09IGNvbFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IC01MCU7IHotaW5kZXg6IDIxOyBsZWZ0OiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk1lbnU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICBpc05lc3RlZFRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHJvdz8uZGV0YWlsLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICBvblJlc2l6ZUNvbHVtbigkZXZlbnQsIGNvbCk7XG4gICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3RoZWFkPlxuICAgIDxkaXZcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwibmVzdGVkSGVhZGVyLm9mZnNldFdpZHRoIC0gMTBcIlxuICAgID5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgW2l0ZW1TaXplXT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJ2aWV3cG9ydFwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgKHJvdz8uZGV0YWlsPy5yZXN1bHQ/Lmxlbmd0aCA8IDVcbiAgICAgICAgICAgID8gbmVzdGVkVGFibGVyb3dIZWlnaHQgKiByb3c/LmRldGFpbD8ucmVzdWx0Py5sZW5ndGggKyA0MFxuICAgICAgICAgICAgOiAzMDApICsgKGhhc0hvcml6b250YWxTY3JvbGwgPyAtMTIgOiAxKVxuICAgICAgICBcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibmVzdGVkSGVhZGVyLm9mZnNldFdpZHRoIC0gMTBcIlxuICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwibmVzdGVkSGVhZGVyLm9mZnNldFdpZHRoIC0gMTBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBib3JkZXItYmVsb3cgZC1mbGV4IHRyXCJcbiAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBkIG9mIHJvdz8uZGV0YWlsPy5yZXN1bHQ7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm5lc3RlZEhlYWRlcj8ub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJuZXN0ZWRIZWFkZXI/Lm9mZnNldFdpZHRoXCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvblJpZ2h0Q2xpY2soJGV2ZW50LCBkKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInB4LTQgcHktMCB0ZFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIHByZXZpZXdOZXN0ZWRDb2xzOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJuZXN0ZWRUYWJsZXJvd0ZvbnRzaXplXCJcbiAgICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0IC0gMVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sPy53aWR0aFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwhLS0ge3sgZFtjb2wuZmllbGRdIHx8IChjb2wuaXNfYW1vdW50ID8gMCA6IFwiLVwiKSB9fSAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICNjZWxsVGV4dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgY29sPy50eXBlID09PSAnZGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgPyAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSB8IGRhdGUgOiBkYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICA6IGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfHwgJy0nXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgIT09ICdpbWFnZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNfYW1vdW50XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lTeW1ib2xcbiAgICAgICAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNOZXN0ZWRWYWx1ZUFycmF5KGQsIGNvbC5maWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbD8udHlwZSA9PT0gJ2RhdGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpc0RhdGUoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHwgZGF0ZTogZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29sLmlzX2Ftb3VudCA/IDA6ICctJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8uWzBdPy5kZXBhcnRtZW50X25hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LlswXT8ucm9sZU5hbWUgfHwgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8uWzBdPy5mdWxsX25hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctJylcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXRUb3RhbEFtb3VudChjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnaW1hZ2UnXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEltYWdlUGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGVmdFJpZ2h0TmVzdGVkUGxhY2Vob2xkZXIgbGV0LXJvdz5cbiAgPHRhYmxlXG4gICAgY2xhc3M9XCJuZXN0ZWQtdGFibGUgdGFibGUgdGFibGUtc20gdy0xMDAgbWItMFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcbiAgICAgICAgPyAobmVzdGVkVGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCA/PyAwKSArIDEyXG4gICAgICAgIDogKHRhc2tNYW5hZ2VtZW50Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQgPz8gMClcbiAgICBcIlxuICA+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwidGhlYWRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0ciBkLWZsZXggYm9yZGVyLWJlbG93XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZUhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRoXCIgKm5nRm9yPVwibGV0IF8gb2YgWzEsIDIsIDMsIDQsIDVdXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwidGJvZHlcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0ciBib3JkZXItYmVsb3dcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IF8gb2Ygcm93Py5kZXRhaWw/LnJlc3VsdFwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRkXCIgKm5nRm9yPVwibGV0IF9fIG9mIFsxLCAyLCAzLCA0LCA1XVwiIGNsYXNzPVwicHktMFwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0XCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L3RhYmxlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YXNrTWFuYWdlbWVudFRlbXBsYXRlIGxldC10YXNrRGV0YWlscz1cInRhc2tEZXRhaWxzXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cInAtNFwiXG4gICAgI3Rhc2tNYW5hZ2VtZW50Q29udGFpbmVyXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgW3N0eWxlLmZvbnRGYWltbHldPVwiZm9udEZhaW1seVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tdGl0bGVcIj5EZXNjcmlwdGlvbjwvZGl2PlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpdGVtLWNvbnRlbnQgZmlyc3REaXZcIj5cbiAgICAgICAge3sgdGFza0RldGFpbHMuZGVzY3JpcHRpb24gfX1cbiAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPHBcbiAgICAgICAgICBbc3R5bGUuZm9udFNpemVdPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgICAgICAgIGNsYXNzPVwiaXRlbS1jb250ZW50IGZpcnN0RGl2IHRhc2tEZXNjcmlwdGlvbiBwZS00XCJcbiAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFNhZmVDb21tZW50KHRhc2tEZXRhaWxzPy5lZGl0b3JfZGVzY3JpcHRpb24pXCJcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkZ1bGxJbWFnZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlXCI+QXR0YWNobWVudHM8L2Rpdj5cbiAgICAgICAgPGg1ICpuZ0lmPVwidGFza0RldGFpbHM/LmF0dGFjaG1lbnRzPy5sZW5ndGggPT0gMFwiPlxuICAgICAgICAgIE5vIEF0dGFjaG1lbnRzIGZvdW5kXG4gICAgICAgIDwvaDU+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInRhc2tEZXRhaWxzPy5hdHRhY2htZW50cz8ubGVuZ3RoXCJcbiAgICAgICAgICBjbGFzcz1cIml0ZW0tY29udGVudCBkLWZsZXggZmxleC13cmFwXCJcbiAgICAgICAgICBzdHlsZT1cImdhcDogMTBweFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGF0dGFjaGVtZW50IG9mIHRhc2tEZXRhaWxzPy5hdHRhY2htZW50czsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICBjbGFzcz1cInN5bWJvbC1sYWJlbCBmcy0yIGZ3LXNlbWlib2xkIHRleHQtc3VjY2VzcyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyB0YXNrRGV0YWlscz8uYXR0YWNobWVudHNfbmFtZVtpXSB8fCAnQXR0YWNobWVudCcgfX1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRBdHRjaG1lbnQoYXR0YWNoZW1lbnQpXCJcbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2RvY3VtZW50LWljb25zLycgK1xuICAgICAgICAgICAgICAgIGdldEV4dGVudGlvbihhdHRhY2hlbWVudCkgK1xuICAgICAgICAgICAgICAgICcuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10aXRsZVwiPlxuICAgICAgICAgIENvbW1lbnRzICh7eyB0YXNrRGV0YWlscz8uY29tbWVudHM/Lmxlbmd0aCB9fSlcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxoNSAqbmdJZj1cInRhc2tEZXRhaWxzPy5jb21tZW50cz8ubGVuZ3RoID09IDBcIj5ObyBDb21tZW50cyBmb3VuZDwvaDU+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0YXNrRGV0YWlscz8uY29tbWVudHM/Lmxlbmd0aFwiIGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnRcIiAqbmdGb3I9XCJsZXQgY29tbWVudCBvZiB0YXNrRGV0YWlscy5jb21tZW50c1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcGUtM1wiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwaWMgaW1hZ2UtaW5wdXQtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbW1lbnQ/LmNvbW1lbnRfYnkubG9nb1wiXG4gICAgICAgICAgICAgICAgc3JjPVwie3sgY29tbWVudD8uY29tbWVudF9ieS5sb2dvIH19XCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJ7eyBjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lIH19XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPCEtLSA8YXBwLWRlZmF1bHQtaW1hZ2UtcGxhY2Vob2xkZXIgKm5nSWY9XCIhY29tbWVudD8uY29tbWVudF9ieS5sb2dvXCIgdGl0bGU9XCJ7eyBjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lIH19XCIgW25hbWVdPVwiY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZVwiPjwvYXBwLWRlZmF1bHQtaW1hZ2UtcGxhY2Vob2xkZXI+IC0tPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbW1lbnQ/LmNvbW1lbnRfYnkubG9nb1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0RHluYW1pY0NsYXNzKGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpYyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHJvdW5kZWQtY2lyY2xlXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJyb3dIZWlnaHQgLyAzXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7IGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZ2V0SW5pdGlhbHMoY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC1hdXRob3IgZnMtMTRweFwiPlxuICAgICAgICAgICAgICAgIHt7IGNvbW1lbnQ/LmNvbW1lbnRfYnkuZnVsbF9uYW1lIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb21tZW50LWNvbnRlbnQgZm9yQ29tbWVudEltZ1wiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRTYWZlQ29tbWVudChjb21tZW50LmNvbW1lbnQpXCJcbiAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC10aW1lc3RhbXBcIj5cbiAgICAgICAgICAgICAgICB7eyBjb21tZW50LmNvbW1lbnRfZGF0ZSB8IGRhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LXRpbWVzdGFtcFwiPlxuICAgICAgICAgICAgICAgIFJlcGxpZXM6ICh7eyBjb21tZW50LnJlcGxpZXMubGVuZ3RoIH19KVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
6073
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBSU4sU0FBUyxFQUVULFlBQVksRUFFWixZQUFZLEVBTVosdUJBQXVCLEVBRXZCLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFVTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUdyRSxPQUFPLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQXlCbkQsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUMxQixpQ0FBYSxDQUFBO0lBQ2IsOENBQTBCLENBQUE7SUFDMUIsOENBQTBCLENBQUE7SUFDMUIsaURBQTZCLENBQUE7SUFDN0IsMENBQXNCLENBQUE7SUFDdEIsMENBQXNCLENBQUE7SUFDdEIsaURBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQVJXLGdCQUFn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QUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBdVJ0QyxPQUFPO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBeUoxQyxXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYTtnQkE4YmMsdUJBQXVCO3NCQUE1RCxTQUFTO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSG9zdExpc3RlbmVyLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBOZ1pvbmUsXG4gIFJlbmRlcmVyMixcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkcmVuLFxuICBpbmplY3QsXG4gIEluamVjdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3BsaXRDb2x1bW5zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NwbGl0LWNvbHVtbnMuc2VydmljZSc7XG5pbXBvcnQgeyAgUm93QWN0aW9uU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcm93LWFjdGlvbi5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENka0RyYWcsXG4gIENka0RyYWdEcm9wLFxuICBDZGtEcmFnRW5kLFxuICBDZGtEcmFnRW50ZXIsXG4gIENka0RyYWdFeGl0LFxuICBDZGtEcmFnTW92ZSxcbiAgQ2RrRHJhZ1NvcnRFdmVudCxcbiAgQ2RrRHJhZ1N0YXJ0LFxuICBEcmFnRHJvcCxcbiAgbW92ZUl0ZW1JbkFycmF5LFxufSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gIHRyaWdnZXIsXG4gIHN0YXRlLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvbixcbiAgYW5pbWF0ZSxcbiAgcXVlcnksXG4gIHN0YWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ2RrRHJvcExpc3QgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IFNUQVRVU0VTX0JBREdFX01BUCB9IGZyb20gJy4vc3RhdHVzZXMnO1xuaW1wb3J0IHsgQ29weVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29weS1zZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDZWxsSG9zdERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY2VsbEhvc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1hdEN1cnJlbmN5UGlwZSB9IGZyb20gJy4uL3BpcGVzL2Zvcm1hdC1jdXJyZW5jeS5waXBlJztcbmltcG9ydCAnYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMnO1xuXG5pbnRlcmZhY2UgQ2VsbFBvc2l0aW9uIHtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgY29sSW5kZXg6IG51bWJlcjtcbiAgc3ViQ29sSW5kZXg6IG51bWJlcjtcbiAgZmllbGQ6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUdyaWRDb25maWcge1xuICBmb250RmFpbWx5OiBzdHJpbmc7XG4gIGJvZHlUZXh0Rm9udHNTaXplOiBudW1iZXI7XG4gIGhlYWRlclRleHRGb250c1NpemU6IG51bWJlcjtcbiAgb2RkUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICBzaG93VmVydGljYWxCb3JkZXI6IGJvb2xlYW47XG4gIHNlbGVjdGVkVGFibGVMYXlvdXQ6ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIGdsb2JhbFNlYXJjaDogc3RyaW5nO1xuICBmaWx0ZXJOYW1lczogc3RyaW5nO1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIHJvd1NoYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBhY3RpdmVGaWx0ZXJzOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBlbnVtIFJvd0FuaW1hdGlvblR5cGUge1xuICBOb25lID0gJ25vbmUnLFxuICBTcHJlYWQgPSAnc3ByZWFkQW5pbWF0aW9uJyxcbiAgQm91bmNlID0gJ2JvdW5jZUFuaW1hdGlvbicsXG4gIFNsaWRlVXAgPSAnc2xpZGVVcEZyb21Cb3R0b20nLFxuICBGbGlwID0gJ2ZsaXBBbmltYXRpb24nLFxuICBTa2V3ID0gJ3NrZXdBbmltYXRpb24nLFxuICBTbGlkZVJpZ2h0ID0gJ3NsaWRlRnJvbVJpZ2h0Jyxcbn1cblxuXG5leHBvcnQgY29uc3Qgc29ydGluZ0FuaW1hdGlvbiA9IHRyaWdnZXIoJ2xpc3RTb3J0JywgW1xuICB0cmFuc2l0aW9uKCcqID0+IConLCBbXG4gICAgLy8gUXVlcnkgYWxsIGVsZW1lbnRzIGVudGVyaW5nIG9yIGxlYXZpbmdcbiAgICBxdWVyeSgnOmVudGVyLCA6bGVhdmUnLCBzdHlsZSh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB3aWR0aDogJzEwMCUnIH0pLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgLy8gQW5pbWF0ZSBsZWF2aW5nIGVsZW1lbnRzIHVwd2FyZCB3aXRoIGZhZGUgb3V0XG4gICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwcHgpJywgb3BhY2l0eTogMCB9KSlcbiAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgLy8gU3RhZ2dlciB0aGUgZW50ZXJpbmcgZWxlbWVudHMgZm9yIGEgc21vb3RoZXIgZWZmZWN0XG4gICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgyMHB4KScsIG9wYWNpdHk6IDAgfSksXG4gICAgICBzdGFnZ2VyKDUwLCBbXG4gICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2Utb3V0Jywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogMSB9KSlcbiAgICAgIF0pXG4gICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICBdKVxuXSk7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRhLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignYWNjb3JkaW9uVG9nZ2xlJywgW1xuICAgICAgc3RhdGUoXG4gICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzBweCcsIG92ZXJmbG93OiAndW5zZXQnIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJywgb3ZlcmZsb3c6ICd1bnNldCcgfSkpLFxuICAgICAgdHJhbnNpdGlvbignY29sbGFwc2VkIDw9PiBleHBhbmRlZCcsIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nKSksXG4gICAgXSksXG4gICAgdHJpZ2dlcignc2xpZGVUb2dnbGUnLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnMHB4Jywgb3BhY2l0eTogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nIH0pLFxuICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicsIG9wYWNpdHk6IDEgfSkpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcqJywgb3BhY2l0eTogMSwgb3ZlcmZsb3c6ICdoaWRkZW4nIH0pLFxuICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBvcGFjaXR5OiAwIH0pKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICB0cmlnZ2VyKCdzbGlkZVVwJywgW1xuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTAwJSknLCBvcGFjaXR5OiAwIH0pKSxcbiAgICAgIHN0YXRlKCcqJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogMSB9KSksXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcpKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nKSksXG4gICAgXSksXG4gICAgdHJpZ2dlcigncm93RHluYW1pYycsIFtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BSRUFEIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNwcmVhZEFuaW1hdGlvbicsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlWCgwLjcpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDYwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCczNTBtcyBlYXNlLW91dCcsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2NhbGVYKDEpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyMjBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZVgoMC43KScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQk9VTkNFIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IGJvdW5jZUFuaW1hdGlvbicsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwcHgpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDQ1LCBbXG4gICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAnNTAwbXMgY3ViaWMtYmV6aWVyKC42OCwtMC41NSwuMjcsMS41NSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTBweCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIE5FVyAxOiBGTElQIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IGZsaXBBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdyb3RhdGVYKC04MGRlZyknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNzAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzQ1MG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdyb3RhdGVYKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDUwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdyb3RhdGVYKDgwZGVnKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gTkVXIDI6IFNLRVcgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIHRyYW5zaXRpb24oJyogPT4gc2tld0FuaW1hdGlvbicsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NrZXdZKDZkZWcpIHRyYW5zbGF0ZVkoOHB4KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMzIwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NrZXdZKDBkZWcpIHRyYW5zbGF0ZVkoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzIyMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NrZXdZKC02ZGVnKSB0cmFuc2xhdGVZKC04cHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignKiA9PiBzbGlkZVVwRnJvbUJvdHRvbScsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTAwdmgpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDYwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCc1MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKScsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig0MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTBweCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIHRyYW5zaXRpb24oJyogPT4gc2xpZGVGcm9tUmlnaHQnLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMHZ3KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnNTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoNTBweCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cblxuXG4gICAgXSlcblxuXG4gIF0sXG5cbn0pXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIC8vICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG4gIC8vICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG4gIC8vICoqKioqKioqKiogIElucHV0IEdvZXMgSGVyZSAqKioqKioqKioqKiAvL1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuXG5cbiAgQElucHV0KCkgcm93QW5pbWF0aW9uOiBSb3dBbmltYXRpb25UeXBlID0gUm93QW5pbWF0aW9uVHlwZS5Ob25lO1xuXG4gIC8vIFBhZ2luYXRpb24gQ29uZmlnIFN0b3JlIEhlcmVcbiAgQElucHV0KCkgcGFnaW5hdGlvbkNvbmZpZzogYW55ID0gbnVsbDtcblxuICAvLyBUaGUgZGF0YXNldCBzdG9yZSBoZXJlO1xuICBASW5wdXQoKSBkYXRhU2V0OiBhbnlbXSA9IFtdO1xuXG4gIC8vIFRoZSBjb2x1bW5zIFN0b3JlIEhlcmVcbiAgQElucHV0KCkgY29sdW1uczogYW55W10gPSBbXTtcblxuICAvLyBSb3cgSGVpZ2h0O1xuICBASW5wdXQoKSByb3dIZWlnaHQ6IG51bWJlciA9IDQ0O1xuXG4gIC8vIEhlYWRlciBSb3cgSGVpZ2h0O1xuICBASW5wdXQoKSBoZWFkZXJSb3dIZWlnaHQ6IG51bWJlciA9IDUwO1xuXG4gIC8vIFNob3cgVmVydGljYWwgQm9yZGVycztcbiAgQElucHV0KCkgc2hvd1ZlcnRpY2FsQm9yZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gRXZlbiBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGV2ZW5Sb3dzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcblxuICAvLyBFdmVuIFJvd3MgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgb2RkUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmMmYyZjInO1xuXG4gIC8vIEhlYWRlciBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGhlYWRlckJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmNmY4ZmYnO1xuXG4gIC8vIEhlYWRlciBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZjZmOGZmJztcblxuICAvLyBTaG93IENvbHVtbnMgR3JvdXBpbmc7XG4gIEBJbnB1dCgpIHNob3dDb2x1bW5zR3JvdXBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBSb3cgSG92ZXJlZCBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSByb3dIb3ZlckNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAncmdiYSgwLCAxMjMsIDI1NSwgMC4xKSc7XG5cbiAgLy8gTGVmdCBQaW5uZWRCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSBsZWZ0UGlubmVkQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gQm9keSBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSBib2R5QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gUmlnaHQgUGlubmVkIEJhY2tncm91bmQgY29sb3I7XG4gIEBJbnB1dCgpIHJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gU2lkZSBNZW51IEJhY2tncm91bmQgY29sb3I7XG4gIEBJbnB1dCgpIHNpZGVtZW51QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gQm9keSB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBib2R5VGV4dENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnIzBjMTEyYic7XG5cbiAgLy8gSGVhZGVyIHRleHQgY29sb3I7XG4gIEBJbnB1dCgpIGhlYWRlclRleHRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyMyYTFmNzMnO1xuXG4gIC8vIEhlYWRlciB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBjaGVja2JveGVzQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjMmExZjczJztcblxuICAvLyBIZWFkZXIgdGV4dCBzaXplO1xuICBASW5wdXQoKSBoZWFkZXJUZXh0Rm9udHNTaXplOiBudW1iZXIgfCB1bmRlZmluZWQgPSAxNDtcblxuICAvLyBCb2R5IHRleHQgY29sb3I7XG4gIEBJbnB1dCgpIGJvZHlUZXh0Rm9udHNTaXplOiBudW1iZXIgfCB1bmRlZmluZWQgPSAxNDtcblxuICAvLyBIZWFkZXIgZm9udCB3ZWlnaHQ7XG4gIEBJbnB1dCgpIGhlYWRlckZvbnRXZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IDUwMDtcblxuICAvLyBCb2R5IEZvbnQgV2VpZ2h0O1xuICBASW5wdXQoKSBib2R5Rm9udFdlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkID0gNDAwO1xuXG4gIC8vIENoZWNrZWQgUm93IEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGNoZWNrZWRSb3dCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdhbGljZWJsdWUnO1xuXG4gIC8vIGRyb3Bkb3ducyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjZmOGY4JztcblxuXG4gIEBJbnB1dCgpIGZvb3RlclJvd0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG5cbiAgLy8gRm9vdGVyIHJvdyBIZWlnaHQ7XG4gIEBJbnB1dCgpIGZvb3RlclJvd0hlaWdodDogbnVtYmVyID0gNDY7XG5cbiAgLy8gRm9vdGVyIHJvdyBIZWlnaHQ7XG4gIEBJbnB1dCgpIHRvcEdyb3VwZWRCYWRnZXNCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuXG4gIC8vIFNob3cgUm93IHdpc2UgZ3JvdXBpbmc7XG4gIEBJbnB1dCgpIHNob3dSb3dzR3JvdXBpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvLyBTaG93IFJvdyB3aXNlIGdyb3VwaW5nO1xuICBASW5wdXQoKSBzaG93RmlsdGVyUm93OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdyBSb3cgd2lzZSBncm91cGluZztcbiAgQElucHV0KCkgZm9udEZhaW1seTogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3NhbnMtc2VyaWYnO1xuXG4gIC8vIFNob3cgU2lkZUNvbHVtbjtcbiAgQElucHV0KCkgc2hvd1NpZGVNZW51OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gRm9vdGVyIFBhZGRpbmdcbiAgQElucHV0KCkgZm9vdGVyUGFkZGluZzogbnVtYmVyID0gM1xuXG5cbiAgLy8gRm9vdGVyIFBhZGRpbmdcbiAgQElucHV0KCkgdG9wRmlsdGVyUm93SGVpZ2h0OiBudW1iZXIgPSA1MDtcblxuICAvLyBTaG93IFJvd3Mgc2hhZGluZ1xuICBASW5wdXQoKSByb3dTaGFkaW5nRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNob3cgUm93cyBzaGFkaW5nXG4gIEBJbnB1dCgpIHNob3dTZXJpYWxOdW1iZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTaW5nbGUgU3BhIFVybCBBdHRhY2ggdG8gaWNvbnNcbiAgQElucHV0KCkgc2luZ2xlU3BhQXNzZXRzUGF0aDogc3RyaW5nID0gJ2Fzc2V0cy8nO1xuXG5cbiAgLy8gQXBwbGllZCBGaWx0ZXJzXG4gIEBJbnB1dCgpIGZpbHRlcnNDb25maWc6IGFueVtdID0gW107XG5cblxuICAvLyBBcHBsaWVkIEZpbHRlcnNcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vVmVydGljYWwgU2Nyb2xsYmFyIHN0eWxlXG4gIEBJbnB1dCgpIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGg6ICdhdXRvJyB8ICd0aGluJyA9ICdhdXRvJztcblxuICAvL0hvcml6aW50YWwgU2Nyb2xsYmFyIHN0eWxlXG4gIEBJbnB1dCgpIGhvcml6aW50YWxTY3JvbGxiYXJXaWR0aDogJ2F1dG8nIHwgJ3RoaW4nID0gJ2F1dG8nO1xuXG4gIC8vIFNob3cgQ2VsbCBkZXRhaWxzIGJveFxuICBASW5wdXQoKSBzaG93Q2VsbERldGFpbHNCb3g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL0RhdGUgZm9ybWF0XG5cbiAgQElucHV0KCkgZGF0ZUZvcm1hdDogc3RyaW5nID0gJydcblxuICAvL0RhdGUgZm9ybWF0XG4gIEBJbnB1dCgpIHRhYmxlU2VhcmNoOiBzdHJpbmcgPSAnJztcblxuXG4gIC8vRGF0ZSBmb3JtYXRcbiAgQElucHV0KCkgYWN0aW9uczogYW55W10gPSBbJ2VkaXQnLCAnZGVsZXRlJ107XG5cblxuICAvLyBUYWJsZSBDb25maWcgZm9yIHBhZ2luYXRpb25zIGlzIGhlcmVcbiAgQElucHV0KCkgY29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgc2VsZWN0ZWRUYWI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIFNlbGVjdGlvbiB0YXNrIGJhclxuICBASW5wdXQoKSBzaG93VGFza2JhciA9IGZhbHNlXG5cbiAgLy8gVGFibGUgTmFtZSBmb3Igc3RhdGUgbWFuYWdlXG4gIEBJbnB1dCgpIHRhYmxlTmFtZSA9IHRydWVcblxuXG4gIC8vIExpc3RpbmcgdHlwZVxuICBASW5wdXQoKSBsaXN0aW5nVHlwZTogc3RyaW5nIHwgYm9vbGVhbiA9ICcnO1xuXG4gIC8vIExpc3RpbmcgdHlwZVxuXG4gIEBJbnB1dCgpIGNoZWNrYm94U3RhdGU6IHsgcmVzZXQ6IGJvb2xlYW4gfSA9IHtcbiAgICByZXNldDogdHJ1ZVxuICB9XG5cbiAgLy8gVGFza2JhciBhY3Rpb25zXG4gIEBJbnB1dCgpIHRhc2tiYXJBY3Rpb25zOiBhbnlbXSA9IFtdXG5cblxuICAvLyBTb3J0aW5nIENvbmZpZyB0byBzaG93IHNvcnQgaWNvbnNcbiAgQElucHV0KCkgc29ydGluZ0NvbmZpZzogeyBmaWVsZDogc3RyaW5nLCBvcmRlcl9ieTogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcblxuXG4gIEBJbnB1dCgpIHRhYmxlRmlsdGVyVmlld0lkOiBhbnkgPSAnJztcblxuXG4gIEBJbnB1dCgpIHNlbGVjdGVkVGFibGVMYXlvdXQ6IGFueSA9ICdtZWRpdW0nXG5cbiAgQElucHV0KCkgY2xvc2VEcm9wZG93bjogeyBwcmVzZXQ6IHsgY2xvc2VkOiBib29sZWFuLCBsb2FkaW5nOiBib29sZWFuIH0gfSA9IHsgcHJlc2V0OiB7IGNsb3NlZDogZmFsc2UsIGxvYWRpbmc6IGZhbHNlIH0gfTtcblxuICAvLyBUYWJsZSBWaWV3XG5cbiAgLy8gR2xvYmFsU2VhcmNoXG4gIEBJbnB1dCgpIGdsb2JhbFNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xuXG4gIC8vIE5lc3RlZCBUYWJsZSBSb3cgRm9udHNpemVcbiAgQElucHV0KCkgbmVzdGVkVGFibGVyb3dGb250c2l6ZSA9IDE0O1xuXG4gIC8vIE5lc3RlZCB0YWJsZSByb3cgSGVhZGVyIHJvdyBIZWlnaHRcbiAgQElucHV0KCkgbmVzdGVkVGFibGVIZWFkZXJSb3dIZWlnaHQgPSA0MDtcblxuICAvLyBOZXN0ZWQgVGFibGUgcm93IGhlaWdodFxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZXJvd0hlaWdodCA9IDQ1O1xuXG4gIEBJbnB1dCgpIHBhY2thZ2VEYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd1VuTGluazogYW55O1xuXG4gIEBJbnB1dCgpIGdyaWRUeXBlOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBjdXJyZW5jeVN5bWJvbDogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgY3VycmVuY3lGb3JtYXQ6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGxlZnRQaW5uZWRCb3hzaGFkb3c6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIHJpZ2h0UGlubmVkQm94c2hhZG93OiBzdHJpbmcgPSAnJztcblxuICAvLyBHbG9iYWxTZWFyY2hcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnIzhhYzVmZic7XG5cbiAgLy8gR2xvYmFsU2VhcmNoXG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2Y2ZjhmZic7XG5cblxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZVJvd0JhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNlYWVhZWEnO1xuXG4gIEBJbnB1dCgpIHRhYmxlVmlldzogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSBidXR0b25zOiB7IG5hbWU6IHN0cmluZzsgaXNfc2hvd0ljb246IGJvb2xlYW47IGljb246IHN0cmluZywgaGFzX3Blcm1pc3Npb246IGJvb2xlYW4gfVtdID0gW107XG5cbiAgQElucHV0KCkga2VlcE11bHRpcGxlRXhwYW5kZWREZXRhaWxzID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBzaG93VG90YWxBbW91bnRSb3cgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIGVuYWJsZUdsb2JhbFNlYXJjaCA9IHRydWU7XG5cblxuICBASW5wdXQoKSB0YWJsZVR5cGUgPSAnJztcblxuXG4gIEBJbnB1dCgpIGVuYWJsZUV4cG9ydCA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgc2hvd0Z1bGxTY3JlZW5CdXR0b24gPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIGVuYWJsZUN1dCA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgdGFiczogc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKSBzaG93Q2hlY2tib3hlcyA9IHRydWU7XG5cblxuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnMgPSBbMTAsIDI1LCA1MCwgNzUsIDEwMCwgMTUwLCAyMDAsIDI1MCwgMzAwLCA1MDBdO1xuXG5cbiAgQElucHV0KCkgcmVzZXRBbGxGaWx0ZXJzID0geyByZXNldEFsbDogZmFsc2UgfTtcblxuICBASW5wdXQoKSBkZWZhdWx0Q29uZmlnOiBEYXRhR3JpZENvbmZpZyB8IG51bGwgPSBudWxsO1xuXG5cbiAgQElucHV0KCkgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZyA9IHtcbiAgICBzaG93UGlubGVmdDogdHJ1ZSxcbiAgICBzaG93UGlucmlnaHQ6IHRydWUsXG4gICAgc2hvd0FzY2VuZGluZzogdHJ1ZSxcbiAgICBzaG93RGVzY2VuZGluZzogdHJ1ZSxcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxuICAgIHNob3dSb3dzR3JvdXBpbmc6IHRoaXMuc2hvd1Jvd3NHcm91cGluZyxcbiAgICBzaG93QXV0b3NpemVBbGxDb2x1bW5zOiB0cnVlLFxuICAgIHNob3dBdXRvc2l6ZVRoaXNDb2x1bW46IGZhbHNlLFxuICAgIHNob3dDaG9zZUNvbHVtbnM6IGZhbHNlLFxuICAgIHNob3dSZXNldENvbHVtbnM6IGZhbHNlLFxuICB9O1xuXG4vLyBmb3IgYWN0aW9uIHZhbGlkYXRpb247XG4gIEBJbnB1dCgpIHZhbGlkYXRlSWNvbiA6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgIE91dCBQdXQgRXZlbnRzXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cblxuICAvL0NoYW5nZSBUYWJsZSBMYXlvdXRcbiAgQFZpZXdDaGlsZHJlbihDZWxsSG9zdERpcmVjdGl2ZSkgY2VsbEhvc3RzITogUXVlcnlMaXN0PENlbGxIb3N0RGlyZWN0aXZlPjtcblxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZUxheW91dCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgY3VzdG9tQ2VsbEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLy8gRmlsdGVyIEFwcGx5IGV2ZW50O1xuICBAT3V0cHV0KCkgcHVibGljIGZpbHRlck9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgZ2VuZXJpY0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgdGFibGVQcmVzZXRDb25maWc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBzb3J0aW5nT3JkZXJPcHRpb25zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBjcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cblxuXG5cblxuICBzdG9yZVByZXNldE5hbWU6IHN0cmluZyA9ICcnO1xuICBpc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgYWN0aXZlVGFiOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZ3JvdXBlZENvbHVtbnM6IGFueVtdID0gW107XG4gIGFjdGl2ZUNvbDogYW55ID0gbnVsbDtcbiAgYWN0aXZlRmlsdGVyQ2VsbDogYW55ID0gbnVsbDtcbiAgc2hvd0FjdGlvbnNEcm9wRG93biA9IGZhbHNlO1xuICBzaWRlTWVudVZpc2libGUgPSBmYWxzZTtcbiAgcGl2b3RNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbHVtblNlYXJjaDogc3RyaW5nID0gJyc7XG4gIGV4cGFuZEFsbEFjY29yZGlhbnMgPSB0cnVlO1xuICBjdXJyZW50T3BlbmVkU2lkZU1lbnVlOiAnY29scycgfCAnZmlsdHJzJyB8IG51bGwgPSBudWxsO1xuICBvcmlnaW5hbENvbHVtbnM6IGFueVtdID0gW107XG4gIG9yaWdpbmFsRGF0YVNldDogYW55W10gPSBbXTtcbiAgYWN0aXZlVG9wQnV0dG9uOiBzdHJpbmcgfCBudWxsID0gJyc7XG4gIGZpbHRlckNvbHVtbnNMaXN0OiBhbnlbXSA9IFtdO1xuICBncm91cEJveFBhZGRpbmcgPSAyMDA7XG4gIHByZXNldE5hbWU6IHN0cmluZyA9ICcnO1xuICBwcmVzZXRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VhcmNoVGV4dFByZXNldFRhYmxlID0gJyc7XG4gIGFkZEZpbHRlckNvbHVtbklucHV0ID0gJyc7XG4gIHNlYXJjaEluRHJvcGRvd24gPSAnJztcbiAgcHJpdmF0ZSBzZWNyZXRLZXkgPSAndGItc3VwZXItYWRtaW4nXG4gIGFkZEZpbHRlckRyb3Bkb3duU2VhcmNoID0gJydcbiAgdG9wU2hvd0hpZGVDb2x1bW5zID0gJyc7XG4gIGNob3NlQ29sdW1uc1NlYXJjaCA9ICcnXG4gIHNpZGVOZXN0ZWRGaWx0ZXJTZWFyY2ggPSAnJ1xuICBlZGl0aW5Ecm9wZG93blNlYXJjaCA9ICcnO1xuICBpc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgY29uZmlybURlbGV0ZSA9IGZhbHNlO1xuICBwcml2YXRlIG9yaWdpbmFsQWN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgZm9udEZhbWlsaWVzOiBzdHJpbmdbXSA9IFtcbiAgICAvLyBDb21tb24gRXhjZWwgZm9udHNcbiAgICAnQXJpYWwnLFxuICAgICdBcmlhbCBCbGFjaycsXG4gICAgJ0JhaG5zY2hyaWZ0JyxcbiAgICAnQ2FsaWJyaScsXG4gICAgJ0NhbWJyaWEnLFxuICAgICdDYW1icmlhIE1hdGgnLFxuICAgICdtYXRoJyxcbiAgICAnQ2FuZGFyYScsXG4gICAgJ0NvbWljIFNhbnMgTVMnLFxuICAgICdDb25zb2xhcycsXG4gICAgJ0NvbnN0YW50aWEnLFxuICAgICdDb3JiZWwnLFxuICAgICdDb3VyaWVyIE5ldycsXG4gICAgJ0VicmltYScsXG4gICAgJ0ZyYW5rbGluIEdvdGhpYyBNZWRpdW0nLFxuICAgICdHYWJyaW9sYScsXG4gICAgJ0dhZHVnaScsXG4gICAgJ0dlb3JnaWEnLFxuICAgICdJbXBhY3QnLFxuICAgICdJbmsgRnJlZScsXG4gICAgJ0phdmFuZXNlIFRleHQnLFxuICAgICdMZWVsYXdhZGVlIFVJJyxcbiAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICdMdWNpZGEgU2FucyBVbmljb2RlJyxcbiAgICAnTWFsZ3VuIEdvdGhpYycsXG4gICAgJ01pY3Jvc29mdCBIaW1hbGF5YScsXG4gICAgJ01pY3Jvc29mdCBKaGVuZ0hlaScsXG4gICAgJ01pY3Jvc29mdCBOZXcgVGFpIEx1ZScsXG4gICAgJ01pY3Jvc29mdCBQaGFnc1BhJyxcbiAgICAnTWljcm9zb2Z0IFNhbnMgU2VyaWYnLFxuICAgICdNaWNyb3NvZnQgVGFpIExlJyxcbiAgICAnTWljcm9zb2Z0IFlhSGVpJyxcbiAgICAnTWljcm9zb2Z0IFlpIEJhaXRpJyxcbiAgICAnTW9uZ29saWFuIEJhaXRpJyxcbiAgICAnTVMgR290aGljJyxcbiAgICAnTVMgUEdvdGhpYycsXG4gICAgJ01TIFVJIEdvdGhpYycsXG4gICAgJ01WIEJvbGknLFxuICAgICdOaXJtYWxhIFVJJyxcbiAgICAnUGFsYXRpbm8gTGlub3R5cGUnLFxuICAgICdTZWdvZSBQcmludCcsXG4gICAgJ1NlZ29lIFNjcmlwdCcsXG4gICAgJ1NlZ29lIFVJJyxcbiAgICAnU2Vnb2UgVUkgSGlzdG9yaWMnLFxuICAgICdTZWdvZSBVSSBFbW9qaScsXG4gICAgJ1NlZ29lIFVJIFN5bWJvbCcsXG4gICAgJ1NpbVN1bicsXG4gICAgJ1NpdGthIFNtYWxsJyxcbiAgICAnU3lsZmFlbicsXG4gICAgJ1N5bWJvbCcsXG4gICAgJ1RhaG9tYScsXG4gICAgJ1RpbWVzIE5ldyBSb21hbicsXG4gICAgJ1RyZWJ1Y2hldCBNUycsXG4gICAgJ1ZlcmRhbmEnLFxuICAgICdXZWJkaW5ncycsXG4gICAgJ1dpbmdkaW5ncycsXG4gICAgJ1l1IEdvdGhpYycsXG4gICAgJ3NhbnMtc2VyaWYnLFxuICAgICdzZXJpZicsXG4gICAgJ21vbm9zcGFjZScsXG4gICAgJ0ludGVyJ1xuICBdO1xuXG4gIGZvbnRTaXplczogc3RyaW5nW10gPSBbXG4gICAgJzgnLCAnOScsICcxMCcsICcxMScsICcxMicsICcxNCcsICcxNicsICcxOCcsICcyMCcsICcyNCdcbiAgXTtcblxuICBoYXNTY3JvbGwgPSBmYWxzZTtcblxuXG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbHVtblNlcnZpY2U6IFNwbGl0Q29sdW1uc1NlcnZpY2UsXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIGNvbW1vblNldmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNvcHlTZXJ2aWNlOiBDb3B5U2VydmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZm9ybWF0Q3VycmVuY3k6IEZvcm1hdEN1cnJlbmN5UGlwZSxcbiAgICAgcHJpdmF0ZSBhY3Rpb25WYWxpZGF0b3IgOiBSb3dBY3Rpb25TZXJ2aWNlXG5cbiAgKSB7IH1cblxuICBAVmlld0NoaWxkKCdjZWxsVGV4dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjZWxsVGV4dCE6IGFueTtcbiAgQFZpZXdDaGlsZCgnbmVzdGVkSGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIG5lc3RlZEhlYWRlciE6IEVsZW1lbnRSZWY7XG4gIFxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5TZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMuY29tcHV0ZVZpZXdwb3J0Um93cygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gXG4gICAgICBpZiAodGhpcy5jZWxsVGV4dCkge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNlbGxUZXh0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuIFxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmVuZGVyQ3VzdG9tQ2VsbHMoKTtcbiAgICB0aGlzLmJ1aWxkUGFnZVNpemVLZXlNYXAoKTtcbiAgICAgfSwgMTAwMCk7XG4gXG4gIH1cblxuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBjcmVhdGVDZWxsSW5qZWN0b3Iocm93OiBhbnksIGNvbDogYW55KTogSW5qZWN0b3Ige1xuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogJ3Jvd0RhdGEnLCB1c2VWYWx1ZTogcm93IH0sXG4gICAgICAgIHsgcHJvdmlkZTogJ2NvbERhdGEnLCB1c2VWYWx1ZTogY29sIH1cbiAgICAgIF0sXG4gICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcbiAgICB9KTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSByZW5kZXJDdXN0b21DZWxscygpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0cyA9IHRoaXMuY2VsbEhvc3RzLnRvQXJyYXkoKTtcbiAgICBsZXQgaG9zdEluZGV4ID0gMDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMudmlzaWJsZVJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICBjb25zdCBob3N0ID0gaG9zdHNbaG9zdEluZGV4KytdO1xuICAgICAgICBpZiAoIWhvc3QgfHwgIWNvbC5jZWxsUmVuZGVyZXIpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSBob3N0LnZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHZpZXdDb250YWluZXIuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBjb21wUmVmID0gdmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29sLmNlbGxSZW5kZXJlcik7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2wsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpLFxuICAgICAgICAgIGFwaTogdGhpcyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoKGNvbXBSZWYuaW5zdGFuY2UgYXMgYW55KS5ncmlkSW5pdCkge1xuICAgICAgICAgIChjb21wUmVmLmluc3RhbmNlIGFzIGFueSkuZ3JpZEluaXQocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiBzaG91bGRSZXN0b3JlU2Nyb2xsID0gZmFsc2U7XG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuYWRkU3R5bGVzVG9JbWFnZXMoKTtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGlmIChcbiAgICAgIHRoaXMuc2hvdWxkUmVzdG9yZVNjcm9sbCAmJlxuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudFxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdDtcbiAgICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLnNob3VsZFJlc3RvcmVTY3JvbGwgPSBmYWxzZTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vICBpZiAodGhpcy50YWJzPy5sZW5ndGgpIHtcbiAgICAvLyAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzWzBdO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLmF1dG9zaXplQWxsQ29sdW1ucygpO1xuICAgIGlmICghdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUpIHtcbiAgICAgIC8vIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IHVzZXIgPSB0aGlzLmdldERlY3J5cHQoJ3VzZXInKTtcbiAgICAvLyB0aGlzLmN1cnJlbmN5Rm9ybWF0ID0gdXNlcj8uY3VycmVuY3lfZm9ybWF0O1xuICAgIC8vIHRoaXMuY3VycmVuY3lTeW1ib2wgPSB1c2VyPy5jdXJyZW5jeV9zeW1ib2w7XG4gICAgLy8gdGhpcy5kYXRlRm9ybWF0ID0gdXNlcj8uZGF0ZV9mb3JtYXQ7XG4gICAgaWYgKCF0aGlzLmRhdGVGb3JtYXQpIHtcbiAgICAgIGNvbnN0IHN0b3JlZERhdGVGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0ZWZvcm1hdCcpO1xuICAgICAgaWYgKHN0b3JlZERhdGVGb3JtYXQpIHtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0ID0gc3RvcmVkRGF0ZUZvcm1hdCA/IEpTT04ucGFyc2Uoc3RvcmVkRGF0ZUZvcm1hdCkgOiAnZGQvTU0veXl5eSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbmN5Rm9ybWF0KSB7XG4gICAgICBjb25zdCBzdG9yZWRDdXJyZW5jeUZvcm1hdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeUZvcm1hdCcpO1xuICAgICAgaWYgKHN0b3JlZEN1cnJlbmN5Rm9ybWF0KSB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lGb3JtYXQgPSBzdG9yZWRDdXJyZW5jeUZvcm1hdCA/IEpTT04ucGFyc2Uoc3RvcmVkQ3VycmVuY3lGb3JtYXQpIDogJzEsMjM0LDU2Ny44OSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICBjb25zdCBzdG9yZWRDdXJyZW5jeVN5bWJvbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeVN5bWJvbCcpO1xuICAgICAgaWYgKHN0b3JlZEN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lTeW1ib2wgPSBzdG9yZWRDdXJyZW5jeVN5bWJvbCA/IEpTT04ucGFyc2Uoc3RvcmVkQ3VycmVuY3lTeW1ib2wpIDogJyQnO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLy8gcHJpdmF0ZSBnZXREZWNyeXB0KGtleTpzdHJpbmcpe1xuICAvLyAgICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gIC8vICAgICB0cnkge1xuICAvLyAgICAgICByZXR1cm4gSlNPTi5wYXJzZShDcnlwdG9KUy5BRVMuZGVjcnlwdCh2YWx1ZSBhcyBzdHJpbmcsIHRoaXMuc2VjcmV0S2V5KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCkpXG4gIC8vICAgICB9IGNhdGNoIChlKSB7XG4gIC8vICAgICAgIHJldHVybiBudWxsO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICBkYXRhU2V0TG9hZGluZyA9IGZhbHNlO1xuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKXtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbHVtbnNDb2x1bW5Ecm9wZG93blZhbHVzKCk7XG5cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1sndGFicyddKSB7XG4gICAgICBpZiAoY2hhbmdlc1sndGFicyddKSB7XG4gICAgICAgIGNvbnN0IGFsbFRhYnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVUYWJzJykgfHwgJ3t9Jyk7XG4gICAgICAgICBsZXQgc2F2ZWRUYWIgXG4gICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID8gKCBzYXZlZFRhYiA9IHRoaXMuc2VsZWN0ZWRUYWIgKSA6ICggc2F2ZWRUYWIgPSBhbGxUYWJzW3RoaXMudGFibGVUeXBlXSlcbiAgICAgICAgLy8gY29uc3Qgc2F2ZWRUYWIgPSBhbGxUYWJzW3RoaXMudGFibGVUeXBlXTtcbiAgICAgICAgaWYgKHRoaXMudGFicy5pbmNsdWRlcygnQ3VycmVudCBQb2xpY3knKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzPy5bMV0gfHwgJ0N1cnJlbnQgUG9saWN5JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHNhdmVkVGFiIHx8IHRoaXMudGFicz8uWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgKHRoaXMudGFibGVUeXBlKSB7XG4gICAgICAgIC8vICAgdGhpcy5zZXRBY3RpdmVUYWIodGhpcy5hY3RpdmVUYWIpO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydmaWx0ZXJzQ29uZmlnJ10pIHtcbiAgICAgIHRoaXMuY2hlY2tGaWx0ZXJDaGFuZ2VzRWZmZWN0KCk7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoKSB7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlGaWx0ZXJvcHRpb25MaXN0KCk7XG5cbiAgICAgIHRoaXMub3JpZ2luYWxDb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBxdWVyeTogY29sLnF1ZXJ5ID8geyAuLi5jb2wucXVlcnkgfSA6IG51bGwsXG4gICAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgID8gWy4uLmNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVdXG4gICAgICAgICAgOiBbXSxcbiAgICAgIH0pKTtcblxuXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5TZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuc2V0U2VjdGlvbnNXaWR0aCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydkYXRhU2V0J10pIHtcbiAgICAgIHRoaXMuZGF0YVNldCA9IHRoaXMuZGF0YVNldD8ubWFwKChyb3csIGkpID0+ICh7XG4gICAgICAgIC4uLnJvdyxcbiAgICAgICAgX192aXJ0dWFsSW5kZXg6IGkgKyAxLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5vcmlnaW5hbERhdGFTZXQgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5kYXRhU2V0KTtcbiAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG5cbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb21wdXRlVmlld3BvcnRSb3dzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICAgICBpZih0aGlzLmNvbW1vblNldmljZT8ubWFpbkNvbnRhaW5lckxlZnQgPiAyMDApXG4gICAgICAgICAgdGhpcy5zaG91bGRSZXN0b3JlU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmNlbnRlclBpbm5lZEhlYWRlcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB2b2lkIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgdGhpcy5kYXRhU2V0TG9hZGluZyA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9XG4gICAgICAgICAgICAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kYXRhU2V0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hcHBseVJvd3NTZWxlY3Rpb25TdGF0ZSgpO1xuXG4gICAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zLmZvckVhY2goZ3JvdXBlZENvbCA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrQ29sdW1uQXNHcm91cGVkKHRoaXMuY29sdW1ucywgZ3JvdXBlZENvbC5maWVsZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuXG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IHRoaXMuY29sdW1uc0dyb3VwZWRCb3g/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY2hlY2tib3hTdGF0ZSddPy5jdXJyZW50VmFsdWU/LnJlc2V0KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5jbGVhcigpO1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvblN0YXRlKHRoaXMudGFibGVUeXBlKTtcblxuICAgICAgY29uc3QgaWRzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICAgIG9iajogaWRzLFxuICAgICAgICB9LFxuICAgICAgICBldmVudFR5cGU6ICdvblNlbGVjdFJvdycsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY2xvc2VEcm9wZG93biddICYmIHRoaXMuY2xvc2VEcm9wZG93bi5wcmVzZXQuY2xvc2VkKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9IG51bGw7XG4gICAgICB0aGlzLnByZXNldEZpbHRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5wcmVzZXROYW1lID0gJyc7XG4gICAgfVxuXG4gICAgLy8gaWYgKGNoYW5nZXNbJ29kZFJvd3NCYWNrZ3JvdW5kQ29sb3InXSkge1xuICAgIC8vICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9ICEhdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yO1xuICAgIC8vIH1cblxuICAgIGlmIChjaGFuZ2VzWydyZXNldEFsbEZpbHRlcnMnXSAmJiB0aGlzLnJlc2V0QWxsRmlsdGVycy5yZXNldEFsbCkge1xuICAgICAgdGhpcy5jbGVhckFsbEZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1sndGFibGVWaWV3J10pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB2aWV3VmFsdWUgPSB0aGlzLnRhYmxlVmlldztcbiAgICAgICAgbGV0IHRlbXByb3J5U2VsZWN0ZWQgPSBBcnJheS5pc0FycmF5KHZpZXdWYWx1ZSlcbiAgICAgICAgICA/IHZpZXdWYWx1ZS5maW5kKGl0ZW0gPT4gaXRlbS5pc190ZW1wKVxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBpZiAoIXRlbXByb3J5U2VsZWN0ZWQpIHtcbiAgICAgICAgICB0ZW1wcm9yeVNlbGVjdGVkID0gQXJyYXkuaXNBcnJheSh2aWV3VmFsdWUpXG4gICAgICAgICAgICA/IHZpZXdWYWx1ZS5maW5kKGl0ZW0gPT4gaXRlbS5pc19kZWZhdWx0KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUgPSB0ZW1wcm9yeVNlbGVjdGVkIHx8IG51bGw7XG4gICAgICAgIHRoaXMucHJlc2V0TmFtZSA9IHRlbXByb3J5U2VsZWN0ZWQ/Lm5hbWUgfHwgJyc7XG4gICAgICAgIHRoaXMuc3RvcmVQcmVzZXROYW1lID0gdGVtcHJvcnlTZWxlY3RlZD8ubmFtZSB8fCAnJztcbiAgICAgICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSB0ZW1wcm9yeVNlbGVjdGVkPy5hY3RpdmVGaWx0ZXJzIHx8IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcucm93U2hhZGluZ0VuYWJsZWQ7XG4gICAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5zaG93VmVydGljYWxCb3JkZXI7XG4gICAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuZm9udEZhaW1seTtcbiAgICAgICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5oZWFkZXJUZXh0Rm9udHNTaXplO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQ7XG4gICAgICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplO1xuICAgICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLmdsb2JhbFNlYXJjaDtcbiAgICAgICAgICB0aGlzLnNldFRhYmxlTGF5b3V0KHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCk7XG4gICAgICAgICAgdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yID0gdGVtcHJvcnlTZWxlY3RlZD8uY29uZmlnPy5vZGRSb3dzQmFja2dyb3VuZENvbG9yIHx8ICcjZjFmMWYxJztcbiAgICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IHRlbXByb3J5U2VsZWN0ZWQ/LmNvbmZpZz8uZ3JvdXBlZENvbHVtbnM7XG4gICAgICAgICAgaWYoZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCl7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zID0gc3RydWN0dXJlZENsb25lKGdyb3VwZWRDb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5kYXRhU2V0LCB0aGlzLmdyb3VwZWRDb2x1bW5zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9ICBlbHNlIGlmKHRoaXMuZGVmYXVsdENvbmZpZyl7XG4gICAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IHRoaXMuZGVmYXVsdENvbmZpZy5yb3dTaGFkaW5nRW5hYmxlZCB8fCBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IHRoaXMuZGVmYXVsdENvbmZpZy5zaG93VmVydGljYWxCb3JkZXIgfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gdGhpcy5kZWZhdWx0Q29uZmlnLmZvbnRGYWltbHkgfHwgJ0ludGVyJztcbiAgICAgICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0aGlzLmRlZmF1bHRDb25maWcuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSB0aGlzLmRlZmF1bHRDb25maWcuc2VsZWN0ZWRUYWJsZUxheW91dCB8fCAnbWVkaXVtJztcbiAgICAgICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5kZWZhdWx0Q29uZmlnLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE0O1xuICAgICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9IHRoaXMuZGVmYXVsdENvbmZpZy5nbG9iYWxTZWFyY2g7XG4gICAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCh0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZm9udEZhaW1seSA9ICdJbnRlcic7XG4gICAgICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gMTQ7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gJ21lZGl1bSc7XG4gICAgICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IDE0O1xuICAgICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpO1xuICAgICAgICAgICB0aGlzLnByZXNldE5hbWUgPSAnJ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIGlmKGNoYW5nZXNbJ3BhZ2VTaXplT3B0aW9ucyddICYmIGNoYW5nZXNbJ3BhZ2VTaXplT3B0aW9ucyddPy5jdXJyZW50VmFsdWUpe1xuICAgICAgdGhpcy5idWlsZFBhZ2VTaXplS2V5TWFwKCk7XG4gICAgfVxuXG4gIH1cblxuXG4gIFxuXG4gIGFzeW5jIHNldENvbHVtbnNDb2x1bW5Ecm9wZG93blZhbHVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb2x1bW5zKSByZXR1cm47XG4gICAgLy8gSnVzdCByZW1vdmVkIHRlbXBvcmFyeSBmb3Igc3VwZXIgYWRtaW4gd2lsbCBzZXQgaXQgYWdhaW5cbiAgICAvLyBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAvLyAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKGMgPT4gYz8uZmllbGQ/LnRyaW0oKSAhPT0gJ2lzX2RlbGV0ZWQnKVxuICAgIC8vIH1cbiAgICB0aGlzLmNvbHVtbnMgPSBhd2FpdCB0aGlzLmNvbW1vblNldmljZS5jb3B5RHJvcGRvd25EYXRhUmVjdXJzaXZlbHkodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG5cblxuXG4gIGFwcGx5Um93c1NlbGVjdGlvblN0YXRlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzRnJvbVN0YXRlID0gdGhpcy5yZXN0b3JlU2VsZWN0aW9uKHRoaXMudGFibGVUeXBlKTtcbiAgICBpZiAoc2VsZWN0ZWRJZHNGcm9tU3RhdGUuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgICBvYmo6IGlkc1xuICAgICAgICB9LFxuICAgICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uU3RhdGUodGFibGVUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yZWQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXRhdGFibGVTZWxlY3Rpb25zJykgfHwgJ3tcInNlbGVjdGVkUm93c1wiOiB7fX0nKTtcbiAgICBpZiAoc3RvcmVkLnNlbGVjdGVkUm93cyAmJiBzdG9yZWQuc2VsZWN0ZWRSb3dzW3RhYmxlVHlwZV0pIHtcbiAgICAgIGRlbGV0ZSBzdG9yZWQuc2VsZWN0ZWRSb3dzW3RhYmxlVHlwZV07XG4gICAgfVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgJ2RhdGF0YWJsZVNlbGVjdGlvbnMnLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoc3RvcmVkKVxuICAgICk7XG4gIH1cblxuXG5cbiAgYXN5bmMgYXBwbHlGaWx0ZXJvcHRpb25MaXN0KCkge1xuICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW5zID0gYXdhaXQgdGhpcy5jb21tb25TZXZpY2UuYXBwbHlGaWx0ZXJzVG9Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBbLi4udXBkYXRlZENvbHVtbnNdO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBsZWZ0UGlubmVkQ29sdW1uczogYW55W10gPSBbXTtcbiAgY2VudGVyQ29sdW1uczogYW55W10gPSBbXTtcbiAgcmlnaHRQaW5uZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuXG4gIHByZXZpZXdMZWZ0UGlubmVkQ29sdW1uczogYW55W10gPSBbXTtcbiAgcHJldmlld0NlbnRlckNvbHVtbnM6IGFueVtdID0gW107XG4gIHByZXZpZXdSaWdodFBpbm5lZENvbHVtbnM6IGFueVtdID0gW107XG5cbiAgLy8gTWFpbiBDb250YWluZXIgVGVtcGxhdGUgUmVmZXJlbmNlc1xuICBAVmlld0NoaWxkKCdkYXRhR3JpZENvbnRhaW5lcicpXG4gIGRhdGFHcmlkQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3Rhc2tNYW5hZ2VtZW50Q29udGFpbmVyJylcbiAgdGFza01hbmFnZW1lbnRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnbmVzdGVkVGFibGVDb250YWluZXInKVxuICBuZXN0ZWRUYWJsZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8vIEJvZHkgVGVtcGxhdGUgUmVmZXJlbmNlc1xuICBAVmlld0NoaWxkKCdsZWZ0UGlubmVkQm9keScpXG4gIGxlZnRQaW5uZWRCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NlbnRlclBpbm5lZEJvZHknKVxuICBjZW50ZXJQaW5uZWRCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0UGlubmVkQm9keScpXG4gIHJpZ2h0UGlubmVkQm9keSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8vIEhlYWRlcnMgVGVtcGxhdGUgUmVmZXJlbmNlc1xuICBAVmlld0NoaWxkKCdsZWZ0UGlubmVkSGVhZGVyJylcbiAgbGVmdFBpbm5lZEhlYWRlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjZW50ZXJQaW5uZWRIZWFkZXInKVxuICBjZW50ZXJQaW5uZWRIZWFkZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncmlnaHRQaW5uZWRIZWFkZXInKVxuICByaWdodFBpbm5lZEhlYWRlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdnbG9iYWxTZWFyY2hJbnB1dCcpXG4gIGdsb2JhbFNlYXJjaElucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBAVmlld0NoaWxkKCdjb2x1bW5zR3JvdXBlZEJveCcpXG4gIGNvbHVtbnNHcm91cGVkQm94ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLy8gQ2VudGVyIEZha2Ugc2Nyb2xsYmFyZFxuICBAVmlld0NoaWxkKCdjZW50ZXJGYWtlU2Nyb2xsYmFyJylcbiAgY2VudGVyRmFrZVNjcm9sbGJhciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBhc3luYyB1cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoY29sdW1uczogYW55ID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5kYXRhR3JpZENvbnRhaW5lcikgcmV0dXJuO1xuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIC8vIFdyYXAgaW4gYSBwcm9taXNlIHNvIHdlIGNhbiBhd2FpdFxuICAgIGNvbnN0IHsgbGVmdCwgY2VudGVyLCByaWdodCB9OiBhbnkgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IHByZXBhcmVkID0gdGhpcy5jb2x1bW5TZXJ2aWNlLnByZXBhcmVDb2x1bW5zKFxuICAgICAgICBjb2x1bW5zID8gY29sdW1ucyA6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgY29udGFpbmVyV2lkdGhcbiAgICAgICk7XG4gICAgICByZXNvbHZlKHByZXBhcmVkKTtcbiAgICB9KTtcblxuICAgIHRoaXMubGVmdFBpbm5lZENvbHVtbnMgPSBsZWZ0O1xuICAgIHRoaXMuY2VudGVyQ29sdW1ucyA9IGNlbnRlcjtcbiAgICB0aGlzLnJpZ2h0UGlubmVkQ29sdW1ucyA9IHJpZ2h0O1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAwKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaFByZXZpZXdDb2x1bW5zKGNvbHVtbnM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgLy8gV3JhcCBwcmVwYXJlQ29sdW1ucyBpbiBhIFByb21pc2UgdG8gbWFrZSBpdCBhd2FpdGFibGVcbiAgICBjb25zdCB7IGxlZnQsIGNlbnRlciwgcmlnaHQgfTogYW55ID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBwcmVwYXJlZCA9IHRoaXMuY29sdW1uU2VydmljZS5wcmVwYXJlQ29sdW1ucyhcbiAgICAgICAgY29sdW1ucyA/IGNvbHVtbnMgOiB0aGlzLmNvbHVtbnMsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgICApO1xuICAgICAgcmVzb2x2ZShwcmVwYXJlZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyA9IGxlZnQ7XG4gICAgdGhpcy5wcmV2aWV3Q2VudGVyQ29sdW1ucyA9IGNlbnRlcjtcbiAgICB0aGlzLnByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMgPSByaWdodDtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTApKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGFzeW5jIFNldENvbHVtbnNEZWZhdWx0V2lkdGgoKSB7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgLy8gaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICAvLyBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICAvLyBpZiAodGhpcy5zaG93U2VyaWFsTnVtYmVyKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICAvLyBpZiAodGhpcy5zaG93U2lkZU1lbnUpIGNvbnRhaW5lcldpZHRoIC09IDI5O1xuICAgIC8vIGlmICh0aGlzLmdyaWRUeXBlID09ICdBc3NldHMnIHx8IHRoaXMuZ3JpZFR5cGUgPT0gJ1Rhc2tzJykgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgLy8gY29udGFpbmVyV2lkdGggLT0gNTtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtblNlcnZpY2UuYXNzaWduRGVmYXVsdFdpZHRocyhcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMCkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgc2V0U2VjdGlvbnNXaWR0aCgpIHtcbiAgICBjb25zdCBsZWZ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxlZnQtcGlubmVkLWJvZHknKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBjZW50ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5jZW50ZXItc2Nyb2xsYWJsZS1ib2R5J1xuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcmlnaHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucmlnaHQtcGlubmVkLWJvZHknKSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAobGVmdCkge1xuICAgICAgbGVmdC5zdHlsZS5taW5XaWR0aCA9IGAke3RoaXMubGVmdFBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofWA7XG4gICAgfVxuICAgIGlmIChjZW50ZXIpIHtcbiAgICAgIGxlZnQuc3R5bGUubWluV2lkdGggPSBgJHt0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofWA7XG4gICAgfVxuICAgIGlmIChyaWdodCkge1xuICAgICAgbGVmdC5zdHlsZS5taW5XaWR0aCA9IGAke3RoaXMucmlnaHRQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH1gO1xuICAgIH1cbiAgfVxuXG4gIC8vIG9uQ2VudGVyQm9keVNjcm9sbCgpOiB2b2lkIHtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIC8vICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG5cbiAgLy8gICAvLyBTeW5jIHZlcnRpY2FsIHNjcm9sbCB3aXRoIGxlZnQgJiByaWdodCBwaW5uZWQgYm9kaWVzXG4gIC8vICAgdGhpcy5sZWZ0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLnJpZ2h0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcblxuICAvLyAgIC8vIFN5bmMgaG9yaXpvbnRhbCBzY3JvbGwgd2l0aCBjZW50ZXIgaGVhZGVyXG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgLy8gICB0aGlzLmNlbnRlckZha2VTY3JvbGxiYXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgLy8gfVxuXG4gIC8vIG9uTGVmdEJvZHlTY3JvbGwoKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5sZWZ0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5yaWdodFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vIH1cbiAgLy8gb25SaWdodEJvZHlTY3JvbGwoKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5yaWdodFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMubGVmdFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vIH1cblxuICBmYWtlU2Nyb2xsYmFyU2Nyb2xsTGVmdCA9IDA7XG4gIC8vIG9uRmFrZVNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgLy8gICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gIC8vICAgdGhpcy5mYWtlU2Nyb2xsYmFyU2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgLy8gfVxuXG5cblxuXG4gIC8vIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBmaWVsZDogc3RyaW5nKTogYW55IHtcbiAgLy8gICByZXR1cm4gZmllbGQ/LnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIG9iaik7XG4gIC8vIH1cbmdldE5lc3RlZFZhbHVlKG9iajogYW55LCBmaWVsZDogc3RyaW5nKTogYW55IHtcbiAgaWYgKCFvYmogfHwgIWZpZWxkKSByZXR1cm4gbnVsbDtcbiAgXG4gIC8vIEdldCB0aGUgcmF3IHZhbHVlXG4gIGNvbnN0IHZhbHVlID0gZmllbGQuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4gYWNjICYmIGFjY1twYXJ0XSwgb2JqKTtcbiAgXG4gIC8vIOKchSBJZiBpdCdzIGEgc3RhdHVzIGZpZWxkLCBjYXBpdGFsaXplIHRoZSB2YWx1ZVxuICBpZiAodGhpcy5pc1N0YXR1c0ZpZWxkKGZpZWxkKSAmJiB2YWx1ZSkge1xuICAgIC8vIEhhbmRsZSBvYmplY3Qgd2l0aCB2YWx1ZS9uYW1lIHByb3BlcnRpZXNcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZhbHVlLFxuICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUgPyB0aGlzLmNhcGl0YWxpemVTdGF0dXModmFsdWUudmFsdWUpIDogdmFsdWUudmFsdWUsXG4gICAgICAgIG5hbWU6IHZhbHVlLm5hbWUgPyB0aGlzLmNhcGl0YWxpemVTdGF0dXModmFsdWUubmFtZSkgOiB2YWx1ZS5uYW1lXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBIYW5kbGUgcGxhaW4gc3RyaW5nL251bWJlciB2YWx1ZXNcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYXBpdGFsaXplU3RhdHVzKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiB2YWx1ZTtcbn1cbiAgaXNOZXN0ZWRWYWx1ZUFycmF5KG9iajogYW55LCBmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmogfHwgIWZpZWxkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdmFsdWUgPSBmaWVsZFxuICAgICAgLnNwbGl0KCcuJylcbiAgICAgIC5yZWR1Y2UoKGFjYywgcGFydCkgPT4gKGFjYyAmJiBhY2NbcGFydF0gIT09IHVuZGVmaW5lZCA/IGFjY1twYXJ0XSA6IHVuZGVmaW5lZCksIG9iaik7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICB9XG5cbiAgb25SZXNpemVHcm91cChldmVudDogTW91c2VFdmVudCwgY29sOiBhbnksIGlzUmlnaHRQaW5uZWQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjb2wuY2hpbGRyZW4gfHwgW107XG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGNoaWxkV2lkdGhzOiB7IGZpZWxkOiBzdHJpbmc7IHdpZHRoOiBudW1iZXIgfVtdID0gY2hpbGRyZW4ubWFwKFxuICAgICAgKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIGBbZmllbGQ9XCIke2NoaWxkLmZpZWxkfVwiXWBcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmaWVsZDogY2hpbGQuZmllbGQsXG4gICAgICAgICAgd2lkdGg6IGVsPy5vZmZzZXRXaWR0aCB8fCAwLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB0b3RhbEluaXRpYWxXaWR0aCA9IGNoaWxkV2lkdGhzLnJlZHVjZShcbiAgICAgIChzdW0sIGNvbCkgPT4gc3VtICsgY29sLndpZHRoLFxuICAgICAgMFxuICAgICk7XG5cbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGxldCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcblxuICAgICAgaWYgKGlzUmlnaHRQaW5uZWQpIHtcbiAgICAgICAgZGVsdGFYID0gLWRlbHRhWDtcbiAgICAgIH1cblxuICAgICAgLy8gUHJldmVudCBzaHJpbmtpbmcgdG9vIHNtYWxsXG4gICAgICBpZiAodG90YWxJbml0aWFsV2lkdGggKyBkZWx0YVggPCBjaGlsZHJlbi5sZW5ndGggKiA4MCkgcmV0dXJuO1xuXG4gICAgICBsZXQgdG90YWxOZXdXaWR0aCA9IDA7XG5cbiAgICAgIGNoaWxkV2lkdGhzLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhdGlvID0gY2hpbGQud2lkdGggLyB0b3RhbEluaXRpYWxXaWR0aDtcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1heChjaGlsZC53aWR0aCArIGRlbHRhWCAqIHJhdGlvLCA4MCk7XG4gICAgICAgIHRvdGFsTmV3V2lkdGggKz0gbmV3V2lkdGg7XG5cbiAgICAgICAgY29uc3QgY2hpbGRFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NoaWxkLmZpZWxkfVwiXWApO1xuICAgICAgICBjaGlsZEVscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsSHRtbCA9IGVsIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIGVsSHRtbC5zdHlsZS5taW5XaWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgICBlbEh0bWwuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY2hpbGQuZmllbGQsIG5ld1dpZHRoKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyDinIUgVXBkYXRlIGdyb3VwIGhlYWRlciB3aWR0aCBpbiBET01cbiAgICAgIGNvbnN0IGdyb3VwSGVhZGVyRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgW2dyb3VwPVwiJHtjb2wuaGVhZGVyfVwiXWBcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoZ3JvdXBIZWFkZXJFbCkge1xuICAgICAgICBncm91cEhlYWRlckVsLnN0eWxlLndpZHRoID0gYCR7dG90YWxOZXdXaWR0aH1weGA7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0YWJsZV9jb25maWc6IHtcbiAgICAgICAgICAgcm93U2hhZGluZ0VuYWJsZWQ6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgfHwgZmFsc2UsXG4gICAgICAgICAgIHNob3dWZXJ0aWNhbEJvcmRlcjogdGhpcy5zaG93VmVydGljYWxCb3JkZXIgfHwgZmFsc2UsXG4gICAgICAgICAgIGZvbnRGYWltbHk6IHRoaXMuZm9udEZhaW1seSB8fCAnSW50ZXInLFxuICAgICAgICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiB0aGlzLmhlYWRlclRleHRDb2xvciB8fCAxNCxcbiAgICAgICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0IHx8ICdtZWRpdW1kJyxcbiAgICAgICAgICAgYm9keVRleHRGb250c1NpemU6IHRoaXMuYm9keVRleHRGb250c1NpemUgfHwgMTQsXG4gICAgICAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy5nbG9iYWxTZWFyY2hUZXh0LFxuICAgICAgICAgICBmaWx0ZXJOYW1lczogJycsXG4gICAgICAgICAgIHRvdGFsQ291bnQ6IDAsXG4gICAgICAgICAgIGFjdGl2ZUZpbHRlcnM6IHRydWUsXG4gICAgICAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6ICcjZjFmMWYxJ1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChmaWVsZDogc3RyaW5nLCB3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlID0gKGNvbHVtbnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIHVwZGF0ZShjb2wuY2hpbGRyZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC5maWVsZCA9PT0gZmllbGQpIHtcbiAgICAgICAgICBjb2wud2lkdGggPSB3aWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB1cGRhdGUodGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXQgY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKCl7XG4gICAgcmV0dXJuIHtcbiAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0YWJsZV9jb25maWc6IHtcbiAgICAgICAgICAgICAgICAgIHJvd1NoYWRpbmdFbmFibGVkOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGZvbnRGYWltbHk6IHRoaXMuZm9udEZhaW1seSAgfHwgJ0ludGVyJyxcbiAgICAgICAgICAgICAgICAgIGhlYWRlclRleHRGb250c1NpemU6IE51bWJlcih0aGlzLmhlYWRlclRleHRGb250c1NpemUpIHx8IDE0LFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0IHx8ICdtZWRpdW1kJyxcbiAgICAgICAgICAgICAgICAgIGJvZHlUZXh0Rm9udHNTaXplOiBOdW1iZXIodGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSkgfHwgMTQsXG4gICAgICAgICAgICAgICAgICBnbG9iYWxTZWFyY2g6IHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICAgIGZpbHRlck5hbWVzOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRvdGFsQ291bnQ6IDAsXG4gICAgICAgICAgICAgICAgICBhY3RpdmVGaWx0ZXJzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgb2RkUm93c0JhY2tncm91bmRDb2xvcjogJyNmMWYxZjEnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfVxuICB9XG5cbiAgY2xlYW5Db2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIF9fdHlwZW5hbWUsXG4gICAgICAgIF9pZCxcbiAgICAgICAgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLFxuICAgICAgICBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgZXhwYW5kZWRGaWx0ZXIsXG4gICAgICAgIGNlbGxSZW5kZXJlcixcbiAgICAgICAgZmlsdGVyUmVuZGVyZXIsXG4gICAgICAgIGNlbGxDb21wb25lbnRSZWYsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBpc1Jvd0dyb3VwZWQsXG4gICAgICAgIC4uLnJlc3RcbiAgICAgIH0gPSBjb2w7XG5cbiAgICAgIC8vIENsZWFuIGRyb3Bkb3duIHZhbHVlcyAoX190eXBlbmFtZSByZW1vdmVkKVxuICAgICAgY29uc3QgY2xlYW5lZERyb3Bkb3duID0gQXJyYXkuaXNBcnJheShjb2x1bW5fZHJvcGRvd25fdmFsdWUpXG4gICAgICAgID8gY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLm1hcCgoeyBfX3R5cGVuYW1lLCAuLi5kUmVzdCB9KSA9PiBkUmVzdClcbiAgICAgICAgOiBjb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICA/ICgoeyBfX3R5cGVuYW1lLCAuLi5kUmVzdCB9KSA9PiBkUmVzdCkoY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKVxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgLy8gQ2xlYW4gcXVlcnkgKF9fdHlwZW5hbWUgcmVtb3ZlZClcbiAgICAgIGNvbnN0IGNsZWFuZWRRdWVyeSA9IEFycmF5LmlzQXJyYXkocXVlcnkpXG4gICAgICAgID8gcXVlcnkubWFwKCh7IF9fdHlwZW5hbWUsIC4uLnFSZXN0IH0pID0+IHFSZXN0KVxuICAgICAgICA6IHF1ZXJ5XG4gICAgICAgICAgPyAoKHsgX190eXBlbmFtZSwgX2lkcywgLi4ucVJlc3QgfSkgPT4gcVJlc3QpKHF1ZXJ5KVxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlOiBjbGVhbmVkRHJvcGRvd24sXG4gICAgICAgIHF1ZXJ5OiBjbGVhbmVkUXVlcnksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgb25SZXNpemVDb2x1bW4oZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbDogYW55KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG5cbiAgICBjb25zdCB0YXJnZXRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgW2ZpZWxkPVwiJHtjb2wuZmllbGR9XCJdYFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgaW5pdGlhbFdpZHRoID0gdGFyZ2V0RWw/Lm9mZnNldFdpZHRoIHx8IDE1MDtcblxuICAgIGNvbnN0IG1hdGNoaW5nRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtjb2wuZmllbGR9XCJdYCk7XG5cbiAgICAvLyDwn5GJIEFkZCBoaWdobGlnaHQgd2hpbGUgcmVzaXppbmdcbiAgICBpZiAoY29sPy5waW5uZWQgPT0gJ3JpZ2h0Jykge1xuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZy1oaWdobGlnaHQtcmlnaHQnKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXRjaGluZ0Vscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nLWhpZ2hsaWdodCcpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBsZXQgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XG5cbiAgICAgIC8vIPCfkYkgUmV2ZXJzZSBpZiB0aGUgY29sdW1uIGlzIHBpbm5lZCB0byB0aGUgcmlnaHRcbiAgICAgIGlmIChjb2wucGlubmVkID09PSAncmlnaHQnKSB7XG4gICAgICAgIGRlbHRhWCA9IC1kZWx0YVg7XG4gICAgICB9XG5cbiAgICAgIGxldCBuZXdXaWR0aCA9IGluaXRpYWxXaWR0aCArIGRlbHRhWDtcbiAgICAgIGlmIChuZXdXaWR0aCA8IDgwKSByZXR1cm47XG5cbiAgICAgIG1hdGNoaW5nRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5taW5XaWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGNvbC5maWVsZCwgbmV3V2lkdGgpO1xuICAgICAgY29sLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICAgIG1hdGNoaW5nRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmctaGlnaGxpZ2h0Jyk7XG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmctaGlnaGxpZ2h0LXJpZ2h0Jyk7XG4gICAgICB9KTtcblxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gIH1cblxuXG5cbiAgb25SZXNpemVHcm91cEJveChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBzdGFydFggPSBldmVudC5jbGllbnRYO1xuXG4gICAgY29uc3QgdGFyZ2V0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3JvdXBCb3hIZWFkZXJEaXYnKTtcbiAgICBjb25zdCBpbml0aWFsV2lkdGggPSB0YXJnZXRFbD8ub2Zmc2V0V2lkdGggfHwgMTUwO1xuXG4gICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcblxuICAgICAgbGV0IG5ld1dpZHRoID0gaW5pdGlhbFdpZHRoICsgZGVsdGFYO1xuICAgICAgaWYgKG5ld1dpZHRoIDwgMTAwKSBuZXdXaWR0aCA9IDEwMDtcblxuICAgICAgaWYgKHRhcmdldEVsKSB7XG4gICAgICAgIHRhcmdldEVsLnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICB0YXJnZXRFbC5zdHlsZS5taW5XaWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgdGhpcy5ncm91cEJveFBhZGRpbmcgPSBuZXdXaWR0aDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gIH1cblxuICBvblBhc3RlSW5GaWx0ZXJSb3dTZWFyY2goZXZlbnQ6IENsaXBib2FyZEV2ZW50LCBjb2w6IGFueSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZShjb2wpO1xuICAgICAgdGhpcy5hcHBseURyb3Bkb3duRmlsdGVyKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkZpbHRlckNoYW5nZShjb2w6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gY29sLmZpbHRlclZhbHVlPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXIgPSBjb2w7XG4gICAgaWYgKCFjb2w/LnF1ZXJ5KSB7XG4gICAgICBjb2wucXVlcnkgPSB7XG4gICAgICAgIGZpcnN0X2NvbmRpdGlvbjogY29sLnR5cGUgPT0gJ2RhdGUnID8gJ2VxdWFsJyA6ICdjb250YWluJyxcbiAgICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICAgIHNlY29uZF9jb25kaXRpb246IG51bGwsXG4gICAgICAgIHNlY29uZF92YWx1ZTogbnVsbCxcbiAgICAgICAgY29uZGl0aW9uOiBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIGNvbC5xdWVyeS5maXJzdF92YWx1ZSA9IGZpbHRlclZhbHVlO1xuICAgIHRoaXMuZmlyc3RWYWx1ZSA9IGZpbHRlclZhbHVlO1xuICB9XG5cbiAgLy8gR2V0IEJvZHkgSGVpZ2h0XG4gIGdldCBib2R5V3JhcHBlckhlaWdodCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnNob3dDb2x1bW5zR3JvdXBpbmcgJiYgdGhpcy5zaG93RmlsdGVyUm93ID8gMyA6ICh0aGlzLnNob3dDb2x1bW5zR3JvdXBpbmcgfHwgdGhpcy5zaG93RmlsdGVyUm93ID8gMiA6IDEpO1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuaGVhZGVyUm93SGVpZ2h0ICogcm93cyArICh0aGlzLmhhc1Njcm9sbCA/IDE3IDogMCk7XG4gICAgcmV0dXJuIGBjYWxjKDEwMCUgLSAke29mZnNldH1weClgO1xuICB9XG5cbiAgLy8gUm93IEhvdmVyIExvZ2ljIEhlcmVcbiAgaG92ZXJlZFJvd0lkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgb25Sb3dIb3Zlcihyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaG92ZXJlZFJvd0lkID0gcm93Ll9pZCB8fCByb3cuaWQ7XG4gIH1cblxuICBvblJvd0xlYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuaG92ZXJlZFJvd0lkID0gbnVsbDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuSW5kZXggPSBudWxsO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmhhc1BhcmVudFdpdGhDbGFzcyh0YXJnZXQsIFtcbiAgICAgICAgJ3RocmVlLWRvdHMnLFxuICAgICAgICAnZmlsdGVyLWljb24td3JhcHBlcicsXG4gICAgICAgICdjb2x1bW4tbWVudScsXG4gICAgICAgICdmaWx0ZXItbWVudScsXG4gICAgICBdKVxuICAgICkge1xuICAgICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLnNob3dBY3Rpb25zRHJvcERvd24gPSBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaW5zaWRlVG9wRmlsdGVyUm93ID0gdGFyZ2V0LmNsb3Nlc3QoJy5maWx0ZXItdGFncycpIHx8IHRhcmdldC5jbG9zZXN0KCcuYWRkLWZpbHRlci1idXR0b24tbWVudScpIHx8XG4gICAgICB0YXJnZXQuY2xvc2VzdCgnLnRhYmxlLXJpZ2h0LXRvcC1hY3Rpb25zJykgfHwgdGFyZ2V0LmNsb3Nlc3QoJy50YWJsZS1sYXlvdXQnKSB8fCB0YXJnZXQuY2xvc2VzdCgnLmZpbHRlci1yb3ctZmlsdGVyLXdyYXBwZXInKTtcbiAgICBjb25zdCBpc0NsaWNrZWRJbnNpZGVUaHJlZURvdHNGaWx0ZXIgPSB0YXJnZXQuY2xvc2VzdCgnLnRocmVlLWRvdHMtZmlsdGVyJykgfHwgdGFyZ2V0LmNsb3Nlc3QoJy5maWx0ZXItbWVudS1jb250YWluZXInKTtcbiAgICBpZiAoIWlzQ2xpY2tlZEluc2lkZVRocmVlRG90c0ZpbHRlcikge1xuICAgICAgdGhpcy5jbG9zZVRocmVlRG90c01lbnVGaWx0ZXIoKTtcbiAgICB9XG4gICAgaWYgKCFpbnNpZGVUb3BGaWx0ZXJSb3cpIHtcbiAgICAgIHRoaXMuY2xvc2VGaWx0ZXJEcm9wZG93bnMoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuc2V0LWRlZmF1bHQtcHJlc2V0JykpIHtcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZXQtZGVmYXVsdC1wcmVzZXQnKT8uY2xhc3NMaXN0Py5yZW1vdmUoJ3Nob3cnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuZnVsbC10ZXh0LWJveCcpICYmICF0YXJnZXQuY2xvc2VzdCgnLmRhdGEtZ3JpZC1oZWFkZXItd3JhcHBlcicpKSB7XG4gICAgICB0aGlzLmNvbGxhcHNlQWxsRXhwYW5kZWRDZWxscygpO1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5kYXRhLWdyaWQtdGFibGUtd3JhcHBlcicpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkS2V5cy5jbGVhcigpO1xuICAgICAgdGhpcy5hY3RpdmVDZWxsID0gJyc7XG4gICAgfVxuXG4gICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5kYXRhLWdyaWQtYm9keScpKSB7XG4gICAgICB0aGlzLmVkaXRpbmdLZXkgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgY2xvc2VUaHJlZURvdHNNZW51RmlsdGVyKCkge1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIH1cblxuXG4gIGNsb3NlRmlsdGVyRHJvcGRvd25zKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gJyc7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUGFyZW50V2l0aENsYXNzKFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICAgIGNsYXNzTGlzdDogc3RyaW5nW11cbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IGVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBlbGVtZW50O1xuXG4gICAgd2hpbGUgKGVsICE9PSBudWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGVsLmNsYXNzTGlzdCAmJlxuICAgICAgICBjbGFzc0xpc3Quc29tZSgoY2xhc3NOYW1lKSA9PiBlbCEuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNNZW51ZUhpZGRlbiA9IGZhbHNlO1xuICBvcGVuVGhyZWVEb3RzTWVudShldmVudDogTW91c2VFdmVudCwgY2hpbGQ6IGFueSwga2VlcE9yaWdpbmFsUG9zaXRpb24gPSBmYWxzZSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc01lbnVlSGlkZGVuID0gdHJ1ZTtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoO1xuICAgIHRoaXMuYWN0aXZlQ29sID0gY2hpbGQ7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gbnVsbDtcbiAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29sdW1uLW1lbnUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGlmICh4ID4gKGNvbnRhaW5lcldpZHRoIC8gMikpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHt4IC0gMjQwfXB4YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50IS5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNZW51ZUhpZGRlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDApO1xuICB9XG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBDb2x1bW4gVGhyZWUgRG90cyBBY3Rpb25zXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIHNvcnRBc2MoY29sOiBhbnkpIHtcbiAgICBpZiAoIWNvbC5pc19zb3J0YWJsZSkgcmV0dXJuO1xuICAgIGNvbCEub3JkZXJfYnkgPSAnYXNjJztcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9yZGVyOiAnYXNjJyxcbiAgICAgIGNvbHVtbjogY29sXG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNvcnRpbmdPcmRlck9wdGlvbnMuZW1pdChldmVudCk7XG4gIH1cblxuICBzb3J0RGVzYyhjb2w6IGFueSkge1xuICAgIGlmICghY29sLmlzX3NvcnRhYmxlKSByZXR1cm47XG4gICAgY29sIS5vcmRlcl9ieSA9ICdkZXNjJztcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9yZGVyOiAnZGVzYycsXG4gICAgICBjb2x1bW46IGNvbFxuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zb3J0aW5nT3JkZXJPcHRpb25zLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcmVzZXRTb3J0KGNvbDogYW55KSB7XG4gICAgdGhpcy5zb3J0aW5nQ29uZmlnID0geyBmaWVsZDogJycsIG9yZGVyX2J5OiAnJyB9O1xuICAgIGNvbnN0IGV2ZW50ID0geyBmaWVsZDogbnVsbCwgb3JkZXJfYnk6IG51bGwgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNvcnRpbmdPcmRlck9wdGlvbnMuZW1pdChldmVudCk7XG4gIH1cblxuXG4gIGFzeW5jIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICBjb2x1bW46IGFueSxcbiAgICBwaW5uZWQ6ICdsZWZ0JyB8ICdyaWdodCcgfCBudWxsLFxuICAgIGlzTmVzdGVkVGFibGU6IGFueSA9IGZhbHNlLFxuICAgIGNvbHVtbnM/OiBhbnlcbiAgKSB7XG4gICAgZGVidWdnZXJcbiAgICBpZiAoaXNOZXN0ZWRUYWJsZSkge1xuICAgICAgdGhpcy5waW5VbnBpbkNvbHVtKGNvbHVtbiwgcGlubmVkLCBjb2x1bW5zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlID0gKGNvbHVtbnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIHVwZGF0ZShjb2wuY2hpbGRyZW4pO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgY29sLnBpbm5lZCA9IHBpbm5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICAgIHVwZGF0ZSh0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zID0gKGNvbHVtbnM6IGFueVtdKTogYW55W10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sdW1uLmNoaWxkcmVuKSkge1xuICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmdldFZpc2libGVMZWFmQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW4pKTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmlzX3Zpc2libGUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBhdXRvc2l6ZUNvbHVtbihjb2xzOiBhbnkgfCBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIC8vIE5vcm1hbGl6ZSBpbnB1dCB0byBhbiBhcnJheVxuICAgIGNvbnN0IGNvbHVtbnNUb1Jlc2l6ZSA9IEFycmF5LmlzQXJyYXkoY29scykgPyBjb2xzIDogW2NvbHNdO1xuXG4gICAgLy8gSGVscGVyOiBGbGF0dGVuIGFsbCB2aXNpYmxlIGxlYWYgY29sdW1uc1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlTGVhZkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCB2aXNpYmxlQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG5cbiAgICBpZiAodmlzaWJsZUNvdW50ID09PSAwKSByZXR1cm47XG5cbiAgICBsZXQgY29udGFpbmVyV2lkdGggPVxuICAgICAgdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMDtcbiAgICBpZiAodGhpcy5zaG93U2VyaWFsTnVtYmVyKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBpZiAodGhpcy5zaG93U2lkZU1lbnUpIGNvbnRhaW5lcldpZHRoIC09IDI5O1xuICAgIGlmICh0aGlzLmdyaWRUeXBlID09ICdBc3NldHMnIHx8IHRoaXMuZ3JpZFR5cGUgPT0gJ1Rhc2tzJykgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgY29uc3QgZXF1YWxXaWR0aCA9IE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggLyB2aXNpYmxlQ291bnQpO1xuXG4gICAgLy8gUmVzaXplIGVhY2ggcGFzc2VkIGNvbHVtblxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnNUb1Jlc2l6ZSkge1xuICAgICAgaWYgKGNvbCAmJiBjb2wuZmllbGQpIHtcbiAgICAgICAgY29sLndpZHRoID0gZXF1YWxXaWR0aDtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChjb2wuZmllbGQsIGVxdWFsV2lkdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfSwgMTAwMCk7XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgfVxuXG4gIGdldEdyb3VwV2lkdGgoZ3JvdXA6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIGdyb3VwPy5jaGlsZHJlblxuICAgICAgICA/LmZpbHRlcigoY29sOiBhbnkpID0+IGNvbD8uaXNfdmlzaWJsZSlcbiAgICAgICAgPy5yZWR1Y2UoKGFjYzogbnVtYmVyLCBjb2w6IGFueSkgPT4gYWNjICsgKGNvbD8ud2lkdGggfHwgMCksIDApIHx8IDBcbiAgICApO1xuICB9XG5cbiAgYXV0b3NpemVBbGxDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIGNvbnN0IGdldFZpc2libGVMZWFmQ29sdW1ucyA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sdW1uLmNoaWxkcmVuKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmdldFZpc2libGVMZWFmQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW4pKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uaXNfdmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoO1xuXG4gICAgaWYgKHZpc2libGVDb3VudCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDA7XG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpIGNvbnRhaW5lcldpZHRoIC09IDMwO1xuICAgIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGNvbnN0IGVxdWFsV2lkdGggPSBNYXRoLm1heChNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gdmlzaWJsZUNvdW50KSwgMTUwKTtcblxuICAgIC8vIFVwZGF0ZSB3aWR0aHMgZm9yIGFsbCB2aXNpYmxlIGNvbHVtbnNcbiAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbC53aWR0aCA9IGVxdWFsV2lkdGg7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGNvbC5maWVsZCwgZXF1YWxXaWR0aCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQ29sdW1uQXNHcm91cGVkKGNvbHVtbnM6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgaWYgKGNvbC5maWVsZCA9PT0gZmllbGQpIHtcbiAgICAgICAgY29sLmlzUm93R3JvdXBlZCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLm1hcmtDb2x1bW5Bc0dyb3VwZWQoY29sLmNoaWxkcmVuLCBmaWVsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ3JvdXBCeShjb2w6IGFueSkge1xuICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy50cmFuc2xhdGVZID0gMDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuICAgIGlmICghY29sKSByZXR1cm47XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgaWYgKGNvbD8uaXNfZ3JvdXBhYmxlKSB7XG4gICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zLnB1c2goY29sKTtcbiAgICAgIHRoaXMubWFya0NvbHVtbkFzR3JvdXBlZCh0aGlzLmNvbHVtbnMsIGNvbC5maWVsZCk7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMDApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IHRoaXMuY29sdW1uc0dyb3VwZWRCb3g/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICB9LCAxMCk7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyBncm91cERhdGFBc3luYyhkYXRhOiBhbnlbXSwgZ3JvdXBGaWVsZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdyb3VwRGF0YShkYXRhLCBncm91cEZpZWxkcyk7XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0sIDApO1xuICAgIH0pO1xuICB9XG5cblxuXG5cbiAgY2hvb3NlQ29sdW1ucygpIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgdGhpcy5zaG93Q29sdW1uUGFuZWwgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJlc2V0Q29sdW1ucygpIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG5cbiAgICAvLyB0aGlzLmNvbHVtbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5vcmlnaW5hbENvbHVtbnMpO1xuICAgIC8vIERlZXAgY29weSBuZXN0ZWQgb2JqZWN0cyBidXQga2VlcCBjbGFzcyByZWZzIHNhZmVcbiAgICB0aGlzLm9yaWdpbmFsQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAuLi5jb2wsXG4gICAgICAvLyBEZWVwIGNvcHkgbmVzdGVkIG9iamVjdHMgYnV0IGtlZXAgY2xhc3MgcmVmcyBzYWZlXG4gICAgICBxdWVyeTogY29sLnF1ZXJ5ID8geyAuLi5jb2wucXVlcnkgfSA6IG51bGwsXG4gICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgPyBbLi4uY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZV1cbiAgICAgICAgOiBbXSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLlNldENvbHVtbnNEZWZhdWx0V2lkdGgoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBjbGVhckZpbHRlcihjb2w6IGFueSkge1xuICAgIGNvbC5maXJzdFZhbHVlID0gJyc7XG4gICAgY29sLnNlY29uZFZhbHVlID0gJyc7XG4gICAgY29sLmZpcnN0Q29uZGl0aW9uID0gJ2NvbnRhaW4nO1xuICAgIGNvbC5zZWNvbmRDb25kaXRpb24gPSBudWxsO1xuICAgIGNvbC5sb2dpYyA9ICdBTkQnO1xuICAgIGNvbC5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICBjb2wuc2VsZWN0ZWRPcHRpb25zID0ge307XG4gICAgY29sLnNlYXJjaFZhbHVlID0gJyc7XG5cbiAgfVxuXG5cbiAgYXBwbHlGaWx0ZXIoY29sOiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlckNvbHVtbnNMaXN0LnB1c2goY29sKTtcbiAgfVxuXG4gIC8vIFJvd3MgU2VsZWN0aW9uIExvZ2ljIEdvZXMgSGVyZVxuXG4gIHNlbGVjdGVkUm93czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgLyoqXG4gICAqIEdldCBub3JtYWxpemVkIElEIGZyb20gcm93LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRSb3dJZChyb3c6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJvdy5pZCA/PyByb3cuX2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBhIHNpbmdsZSByb3cgc2VsZWN0aW9uLlxuICAgKi9cbiAgdG9nZ2xlUm93U2VsZWN0aW9uKHJvdzogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MuaGFzKGlkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuZGVsZXRlKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3MuYWRkKGlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZHMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcblxuICAgIHRoaXMuc2F2ZVNlbGVjdGlvbihpZHMsIHRoaXMudGFibGVUeXBlKTtcblxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgb2JqOiBpZHNcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cblxuXG4gIHRvZ2dsZVNlbGVjdEFsbChkYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGxlYWZSb3dzID0gdGhpcy5nZXRBbGxMZWFmUm93cyhkYXRhKTtcbiAgICBjb25zdCBhbGxJZHMgPSBsZWFmUm93cy5tYXAociA9PiB0aGlzLmdldFJvd0lkKHIpKTtcblxuICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gYWxsSWRzLmV2ZXJ5KGlkID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyhpZCkpO1xuXG4gICAgaWYgKGFsbFNlbGVjdGVkKSB7XG4gICAgICBhbGxJZHMuZm9yRWFjaChpZCA9PiB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUoaWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWxsSWRzLmZvckVhY2goaWQgPT4gdGhpcy5zZWxlY3RlZFJvd3MuYWRkKGlkKSk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBpZHMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgIG9iajogaWRzXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiBcIm9uU2VsZWN0Um93XCIsXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVNlbGVjdGlvbihpZHMsIHRoaXMudGFibGVUeXBlKTtcbiAgfVxuXG4gIGlzUm93U2VsZWN0ZWQocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKHRoaXMuZ2V0Um93SWQocm93KSk7XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKGRhdGE6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmdldEFsbExlYWZSb3dzKGRhdGEpO1xuICAgIHJldHVybiBsZWFmUm93cy5sZW5ndGggPiAwICYmIGxlYWZSb3dzLmV2ZXJ5KHIgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKHRoaXMuZ2V0Um93SWQocikpKTtcbiAgfVxuXG5cbiAgaXNJbmRldGVybWluYXRlU3RhdGUoZGF0YTogYW55W10pOiBib29sZWFuIHtcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZ2V0QWxsTGVhZlJvd3MoZGF0YSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRDb3VudCA9IGxlYWZSb3dzLmZpbHRlcihyID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmhhcyh0aGlzLmdldFJvd0lkKHIpKSkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkQ291bnQgPiAwICYmIHNlbGVjdGVkQ291bnQgPCBsZWFmUm93cy5sZW5ndGg7XG4gIH1cblxuXG4gIGdldEFsbExlYWZSb3dzKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IGxlYWY6IGFueVtdID0gW107XG5cbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlOiBhbnkpID0+IHtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuXG4gICAgICBpZiAobm9kZS5pc0dyb3VwKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW4/LmZvckVhY2godHJhdmVyc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVhZi5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkYXRhLmZvckVhY2godHJhdmVyc2UpO1xuICAgIHJldHVybiBsZWFmO1xuICB9XG5cblxuXG5cbiAgLy8gU2lkZSBNZW51IFdvcmtpbmcgR29lcyBIZXJlXG4gIHRvZ2dsZVNpZGVNZW51KGNsaWNrZWRPbjogJ2NvbHMnIHwgJ2ZpbHRycycpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50T3BlbmVkU2lkZU1lbnVlID09IGNsaWNrZWRPbikge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbmVkU2lkZU1lbnVlID0gY2xpY2tlZE9uO1xuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgPSAhdGhpcy5zaWRlTWVudVZpc2libGU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuc2lkZU1lbnVWaXNpYmxlICYmXG4gICAgICBjbGlja2VkT24gIT0gdGhpcy5jdXJyZW50T3BlbmVkU2lkZU1lbnVlXG4gICAgKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPSBjbGlja2VkT247XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9IGNsaWNrZWRPbjtcbiAgICAgIHRoaXMuc2lkZU1lbnVWaXNpYmxlID0gIXRoaXMuc2lkZU1lbnVWaXNpYmxlO1xuICAgIH1cbiAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRvZ2dsZUdyb3VwVmlzaWJpbGl0eShjb2w6IGFueSkge1xuICAgIGNvbnN0IGFsbFZpc2libGUgPSBjb2wuY2hpbGRyZW4uZXZlcnkoKGNoaWxkOiBhbnkpID0+IGNoaWxkLmlzX3Zpc2libGUpO1xuICAgIGNvbC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiAoY2hpbGQuaXNfdmlzaWJsZSA9ICFhbGxWaXNpYmxlKSk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgdGhpcy5TZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgaXNDb2x1bW5WaXNpYmxlKGNvbHVtbnM6IGFueSkge1xuICAgIGlmIChjb2x1bW5zPy5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGNvbHVtbnMuY2hpbGRyZW4uZXZlcnkoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5pc192aXNpYmxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1ucz8uaXNfdmlzaWJsZTtcbiAgfVxuXG4gIC8vIGFsbENvbHVtbnNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgLy8gICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAvLyAgIHJldHVybiBmbGF0dGVuLmV2ZXJ5KChjb2wpID0+IGNvbC5pc192aXNpYmxlKTtcbiAgLy8gfVxuYWxsQ29sdW1uc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICBjb25zdCBub25BbHdheXNWaXNpYmxlID0gZmxhdHRlbi5maWx0ZXIoY29sID0+ICFjb2wuaXNfYWx3YXlzX3Zpc2libGUpO1xuICBcbiAgLy8gUmV0dXJuIHRydWUgaWYgYWxsIG5vbi1hbHdheXMtdmlzaWJsZSBjb2x1bW5zIGFyZSB2aXNpYmxlXG4gIHJldHVybiBub25BbHdheXNWaXNpYmxlLmxlbmd0aCA+IDAgJiYgbm9uQWx3YXlzVmlzaWJsZS5ldmVyeShjb2wgPT4gY29sLmlzX3Zpc2libGUpO1xufVxuXG4gIHByaXZhdGUgZmluZENvbHVtbkJ5RmllbGQoZmllbGQ6IHN0cmluZywgY29sczogYW55W10pOiBhbnkgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICByZXR1cm4gY29sO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRDb2x1bW5CeUZpZWxkKGZpZWxkLCBjb2wuY2hpbGRyZW4pO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuXG5cbiAgYXN5bmMgdG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2x1bW46IGFueSwgaXNWaXNpYmxlOiBib29sZWFuKSB7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgaWYgKHRoaXMudmlzaWJsZUNvbHVtbnMoKT8ubGVuZ3RoIDw9IDIgJiYgY29sdW1uLmlzX3Zpc2libGUgfHwgKGNvbHVtbj8uaXNfYWx3YXlzX3Zpc2libGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29sID0gdGhpcy5maW5kQ29sdW1uQnlGaWVsZChjb2x1bW4uZmllbGQsIHRoaXMuY29sdW1ucyk7XG4gICAgaWYgKGNvbCkge1xuICAgICAgY29sLmlzX3Zpc2libGUgPSBpc1Zpc2libGU7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgfVxuICB9XG5cbmFzeW5jIHRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5KCk6IFByb21pc2U8dm9pZD4ge1xuICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IHRoaXMuZmxhdHRlbkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGZsYXR0ZW4uZmlsdGVyKGNvbCA9PiBjb2wuaXNfdmlzaWJsZSk7XG4gICAgXG4gICAgLy8gR2V0IGNvbHVtbnMgdGhhdCBhcmUgbm90IGFsd2F5cyB2aXNpYmxlXG4gICAgY29uc3Qgbm9uQWx3YXlzVmlzaWJsZSA9IGZsYXR0ZW4uZmlsdGVyKGNvbCA9PiAhY29sLmlzX2Fsd2F5c192aXNpYmxlKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBhbGwgbm9uLWFsd2F5cy12aXNpYmxlIGNvbHVtbnMgYXJlIGN1cnJlbnRseSB2aXNpYmxlXG4gICAgY29uc3QgYWxsTm9uQWx3YXlzVmlzaWJsZUFyZVZpc2libGUgPSBub25BbHdheXNWaXNpYmxlLmV2ZXJ5KGNvbCA9PiBjb2wuaXNfdmlzaWJsZSk7XG5cbiAgICBpZiAoYWxsTm9uQWx3YXlzVmlzaWJsZUFyZVZpc2libGUpIHtcbiAgICAgIC8vIEhJREUgQUxMIChidXQga2VlcCBtaW5pbXVtIDIgdmlzaWJsZSlcbiAgICAgIC8vIEZpcnN0LCBoaWRlIGFsbCBub24tYWx3YXlzLXZpc2libGUgY29sdW1uc1xuICAgICAgbm9uQWx3YXlzVmlzaWJsZS5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgIGNvbC5pc192aXNpYmxlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gVGhlbiwgbWFrZSBzdXJlIGF0IGxlYXN0IDIgY29sdW1ucyBhcmUgdmlzaWJsZSAoaW5jbHVkaW5nIGFsd2F5cy12aXNpYmxlIG9uZXMpXG4gICAgICBjb25zdCBhbHdheXNWaXNpYmxlQ291bnQgPSBmbGF0dGVuLmZpbHRlcihjb2wgPT4gY29sLmlzX2Fsd2F5c192aXNpYmxlKS5sZW5ndGg7XG4gICAgICBjb25zdCBjb2x1bW5zTmVlZGVkID0gTWF0aC5tYXgoMCwgMiAtIGFsd2F5c1Zpc2libGVDb3VudCk7XG4gICAgICBcbiAgICAgIGlmIChjb2x1bW5zTmVlZGVkID4gMCkge1xuICAgICAgICAvLyBTaG93IHRoZSBmaXJzdCAnY29sdW1uc05lZWRlZCcgbm9uLWFsd2F5cy12aXNpYmxlIGNvbHVtbnNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihjb2x1bW5zTmVlZGVkLCBub25BbHdheXNWaXNpYmxlLmxlbmd0aCk7IGkrKykge1xuICAgICAgICAgIG5vbkFsd2F5c1Zpc2libGVbaV0uaXNfdmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU0hPVyBBTEwgLSBtYWtlIGFsbCBjb2x1bW5zIHZpc2libGVcbiAgICAgIGZsYXR0ZW4uZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICBjb2wuaXNfdmlzaWJsZSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgXG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICBcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cblxuICBwcml2YXRlIHdhaXQobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxuXG5cblxuICB2aXNpYmxlQ29sdW1ucygpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZmxhdHRlbi5maWx0ZXIoKGM6IGFueSkgPT4gYy5pc192aXNpYmxlKTtcbiAgICByZXR1cm4gdmlzaWJsZUNvbHVtbnM7XG4gIH1cblxuICBmbGF0dGVuQ29sdW1ucyhjb2xzOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gY29scy5yZWR1Y2UoKGFjYzogYW55W10sIGNvbDogYW55KSA9PiB7XG4gICAgICBpZiAoY29sPy5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGZsYXR0ZW4gY2hpbGRyZW5cbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodGhpcy5mbGF0dGVuQ29sdW1ucyhjb2wuY2hpbGRyZW4pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGxlYWYgY29sdW1uXG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KGNvbCk7XG4gICAgICB9XG4gICAgfSwgW10pO1xuICB9XG5cblxuICBmaWx0ZXJlZENvbHVtbnMoY29sczogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3Qgc2VhcmNoID0gdGhpcy5jb2x1bW5TZWFyY2gudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gY29sc1xuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wuY2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZENoaWxkcmVuID0gdGhpcy5maWx0ZXJlZENvbHVtbnMoY29sLmNoaWxkcmVuKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2wuaGVhZGVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSB8fFxuICAgICAgICAgICAgZmlsdGVyZWRDaGlsZHJlbi5sZW5ndGhcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmNvbCwgY2hpbGRyZW46IGZpbHRlcmVkQ2hpbGRyZW4gfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5oZWFkZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpID8gY29sIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIH1cblxuICBnZXQgYWNjb3JkaW9uU3RhdGUoKTogJ2FsbCcgfCAnbm9uZScgfCAnc29tZScge1xuICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ2V0QWxsR3JvdXBDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgZXhwYW5kZWRDb3VudCA9IGdyb3Vwcy5maWx0ZXIoKGNvbCkgPT4gY29sLmV4cGFuZGVkKS5sZW5ndGg7XG5cbiAgICBpZiAoZXhwYW5kZWRDb3VudCA9PT0gMCkgcmV0dXJuICdub25lJztcbiAgICBpZiAoZXhwYW5kZWRDb3VudCA9PT0gZ3JvdXBzLmxlbmd0aCkgcmV0dXJuICdhbGwnO1xuICAgIHJldHVybiAnc29tZSc7XG4gIH1cblxuICBnZXQgZmlsdGVyQWNjb3JkaW9uU3RhdGUoKTogJ2FsbCcgfCAnbm9uZScgfCAnc29tZScge1xuICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMuZ2V0QWxsR3JvdXBDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgZXhwYW5kZWRDb3VudCA9IGdyb3Vwcy5maWx0ZXIoKGNvbCkgPT4gY29sLmV4cGFuZGVkRmlsdGVyKS5sZW5ndGg7XG5cbiAgICBpZiAoZXhwYW5kZWRDb3VudCA9PT0gMCkgcmV0dXJuICdub25lJztcbiAgICBpZiAoZXhwYW5kZWRDb3VudCA9PT0gZ3JvdXBzLmxlbmd0aCkgcmV0dXJuICdhbGwnO1xuICAgIHJldHVybiAnc29tZSc7XG4gIH1cblxuICAvLyBSZWN1cnNpdmVseSBjb2xsZWN0IGFsbCBncm91cCBjb2x1bW5zXG4gIHByaXZhdGUgZ2V0QWxsR3JvdXBDb2x1bW5zKGNvbHM6IGFueVtdKTogYW55W10ge1xuICAgIGxldCBncm91cHM6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGdyb3Vwcy5wdXNoKGNvbCk7XG4gICAgICAgIGdyb3VwcyA9IGdyb3Vwcy5jb25jYXQodGhpcy5nZXRBbGxHcm91cENvbHVtbnMoY29sLmNoaWxkcmVuKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBncm91cHM7XG4gIH1cblxuICAvLyBUb2dnbGUgYmFzZWQgb24gY3VycmVudCBzdGF0ZVxuICB0b2dnbGVBbGxBY2NvcmRpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMuYWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnID8gZmFsc2UgOiB0cnVlO1xuICAgIHRoaXMuc2V0QWNjb3JkaW9uU3RhdGUodGhpcy5jb2x1bW5zLCBuZXh0U3RhdGUpO1xuICB9XG5cbiAgdG9nZ2xlQWxsRmlsdGVyQWNjb3JkaW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB0aGlzLmZpbHRlckFjY29yZGlvblN0YXRlID09PSAnYWxsJyA/IGZhbHNlIDogdHJ1ZTtcbiAgICB0aGlzLnNldEZpbHRlckFjY29yZGlvblN0YXRlKHRoaXMuY29sdW1ucywgbmV4dFN0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWNjb3JkaW9uU3RhdGUoY29sczogYW55W10sIHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChsZXQgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBjb2wuZXhwYW5kZWQgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5zZXRBY2NvcmRpb25TdGF0ZShjb2wuY2hpbGRyZW4sIHN0YXRlKTsgLy8gUmVjdXJzaXZlbHkgaGFuZGxlIG5lc3RlZFxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRGaWx0ZXJBY2NvcmRpb25TdGF0ZShjb2xzOiBhbnlbXSwgc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBjb2wgb2YgY29scykge1xuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbC5leHBhbmRlZEZpbHRlciA9IHN0YXRlO1xuICAgICAgICB0aGlzLnNldEZpbHRlckFjY29yZGlvblN0YXRlKGNvbC5jaGlsZHJlbiwgc3RhdGUpOyAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2hvd0NvbHVtblBhbmVsID0gZmFsc2U7XG5cbiAgY2xvc2VNb2RhbENvbHVtblBhbmVsKCkge1xuICAgIHRoaXMuc2hvd0NvbHVtblBhbmVsID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxuICBvbkVzY2FwZShldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmNsb3NlTW9kYWxDb2x1bW5QYW5lbCgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgSWYgIEFueSBjb2x1bW4gaGF2ZSByaWdodCBwaW5uZWRcbiAgZ2V0IGhhc1JpZ2h0UGlubmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzUmlnaHRQaW5uZWRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuICBnZXQgaGFzTGVmdFBpbm5lZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldGhhc0xlZnRQaW5uZWRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuICBnZXQgZGF0YVNldExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0RXhwYW5kZWRSb3dDb3VudCh0aGlzLmRhdGFTZXQpO1xuICB9XG5cblxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvblJlc2l6ZShldmVudDogVUlFdmVudCkge1xuICAgIGlmICghdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUpIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpO1xuICAgIGNvbnN0IGggPSB0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQ/LmNsaWVudEhlaWdodCA/PyAwO1xuICAgIHRoaXMudmlld3BvcnRSb3dzID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGggLyB0aGlzLnJvd0hlaWdodCkpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3ModGhpcy5tYWluU2Nyb2xsPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxUb3ApO1xuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyB9LCAxMDApO1xuICB9XG5cbiAgYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG5cbiAgICBjb25zdCBnZXRWaXNpYmxlTGVhZkNvbHVtbnMgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoY29sdW1uLmNoaWxkcmVuKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmlzX3Zpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBnZXRWaXNpYmxlTGVhZkNvbHVtbnModGhpcy5jb2x1bW5zKTtcblxuICAgIGlmICh2aXNpYmxlQ29sdW1ucy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBsZXQgY29udGFpbmVyV2lkdGggPVxuICAgICAgdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMDtcblxuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKVxuICAgICAgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgY29uc3QgdG90YWxPbGRXaWR0aCA9IHZpc2libGVDb2x1bW5zLnJlZHVjZShcbiAgICAgIChzdW0sIGNvbCkgPT4gc3VtICsgKGNvbC53aWR0aCB8fCAwKSxcbiAgICAgIDBcbiAgICApO1xuICAgIGlmICh0b3RhbE9sZFdpZHRoID09PSAwKSByZXR1cm47XG4gICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBjb25zdCByYXRpbyA9IGNvbC53aWR0aCAvIHRvdGFsT2xkV2lkdGg7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggKiByYXRpbyksIDEwMCk7XG4gICAgICBjb2wud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBuZXdXaWR0aCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH0sIDQwMCk7XG4gIH1cblxuXG4gIGFzeW5jIHJlZnJlc2hIZWFkZXJzKCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAwKSk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcblxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaGFzQW55VmlzaWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzVmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBoYXNBbnlJblZpc2libGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldGhhc0luVmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmdldFRvdGFsQ29sdW1uc0xlbmd0aCh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgdGFibGVIZWFkZXJBbmRCb2R5SGVpZ2h0KCkge1xuICAgIHJldHVybiBgY2FsYygxMDAlIC0gJHt0aGlzLmZvb3RlclJvd0hlaWdodH0pYDtcbiAgfVxuXG4gIGRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdjZW50ZXJTY3JvbGwnKSBjZW50ZXJTY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgdmlzaWJsZVJvd0NvdW50ID0gMjU7XG4gIHN0YXJ0SW5kZXggPSAwO1xuICB2aXNpYmxlUm93czogYW55W10gPSBbXTtcblxuICBwcml2YXRlIGZsYXR0ZW5Hcm91cGVkUm93cyhcbiAgICByb3dzOiBhbnlbXSA9IFtdLFxuICAgIGxldmVsID0gMCxcbiAgICByZXN1bHQ6IGFueVtdID0gW11cbiAgKTogYW55W10ge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHsgLi4ucm93LCBfX2RlcHRoOiBsZXZlbCB9KTtcbiAgICAgIGlmIChyb3cuaXNHcm91cCAmJiByb3cuaXNFeHBhbmQgJiYgcm93LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5mbGF0dGVuR3JvdXBlZFJvd3Mocm93LmNoaWxkcmVuLCBsZXZlbCArIDEsIFtdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3NpZ25WaXJ0dWFsSW5kZXhlcyh0aGlzLnZpc2libGVSb3dzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXNzaWduVmlydHVhbEluZGV4ZXMoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IDE7XG4gICAgY29uc3Qgd2FsayA9IChpdGVtczogYW55W10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICBpdGVtLl9fdmlydHVhbEluZGV4ID0gY3VycmVudEluZGV4Kys7XG4gICAgICAgIGlmIChpdGVtPy5pc0dyb3VwKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXAgPSBpdGVtO1xuICAgICAgICAgIGlmIChncm91cC5pc0V4cGFuZCAmJiBBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgd2Fsayhncm91cC5jaGlsZHJlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB3YWxrKGRhdGEpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdUaGlzIGRhdGFzZXQ6ICcsIHRoaXMudmlzaWJsZVJvd3MpXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuXG4gIHVwZGF0ZVZpc2libGVSb3dzKHNjcm9sbFRvcDogbnVtYmVyKSB7XG5cbiAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5kYXRhU2V0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbGF0RGF0YSA9IHRoaXMuZmxhdHRlbkdyb3VwZWRSb3dzKHRoaXMuZGF0YVNldCk7XG5cbiAgICBpZiAodGhpcy5kYXRhU2V0Py5sZW5ndGggPD0gMTUpIHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSBmbGF0RGF0YTtcbiAgICAgIHRoaXMuZmlyc3RJbmRleCA9IDA7XG4gICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAgICAgdGhpcy5yZW5kZXJTdGFydCA9IDA7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvdGFsID0gZmxhdERhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1heEZpcnN0ID0gTWF0aC5tYXgoMCwgdG90YWwgLSB0aGlzLnZpZXdwb3J0Um93cyk7XG4gICAgY29uc3QgZmlyc3QgPSBNYXRoLm1pbihNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KSwgbWF4Rmlyc3QpO1xuICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgZmlyc3QpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRvdGFsLCBmaXJzdCArIHRoaXMudmlld3BvcnRSb3dzKTtcblxuICAgIHRoaXMuZmlyc3RJbmRleCA9IGZpcnN0O1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IGZpcnN0O1xuICAgIHRoaXMucmVuZGVyU3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLnZpc2libGVSb3dzID0gZmxhdERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgdGhpcy5hc3NpZ25WaXJ0dWFsSW5kZXhlcyh0aGlzLnZpc2libGVSb3dzKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIHRyYWNrQnlSZW5kZXJlZEluZGV4ID0gKGk6IG51bWJlciwgX3JvdzogYW55KSA9PiB0aGlzLnJlbmRlclN0YXJ0ICsgaTtcblxuICBwcml2YXRlIGlzU3luY2luZ0Zyb21NYWluID0gZmFsc2U7XG4gIHByaXZhdGUgaXNTeW5jaW5nRnJvbUZha2UgPSBmYWxzZTtcbiAgcHJpdmF0ZSBtYWluU2Nyb2xsUmFmOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQgfHwgaXRlbS5faWQ7XG4gIH1cblxuICBmbGF0dGVuZWREYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHVwZGF0ZUZsYXR0ZW5lZERhdGEoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZsYXR0ZW5lZERhdGEgPSB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyh0aGlzLmRhdGFTZXQpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIC8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSBJRHNcbiAgcHJpdmF0ZSBmYWtlU2Nyb2xsUmFmOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuXG4gIC8vIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgLy8gICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gIC8vICAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSAwO1xuICAvLyAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICAgIHJldHVybjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNvbnN0IG92ZXJzY2FuID0gdGhpcy5vdmVyc2NhbiAqIDI7XG4gIC8vICAgICB0aGlzLnN0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgLy8gICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgdGhpcy5zdGFydEluZGV4IC0gb3ZlcnNjYW4pO1xuICAvLyAgICAgY29uc3QgZW5kID0gTWF0aC5taW4odGhpcy5mbGF0dGVuZWREYXRhLmxlbmd0aCwgdGhpcy5zdGFydEluZGV4ICsgdGhpcy52aWV3cG9ydFJvd3MgKyBvdmVyc2Nhbik7XG4gIC8vICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5mbGF0dGVuZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyB9XG4gIHRyYW5zbGF0ZVkgPSAwO1xuXG4gIGxhc3RTY3JvbGxUb3AgPSAwO1xuICBwZW5kaW5nQW5pbWF0aW9uRnJhbWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gICAgaWYgKE1hdGguYWJzKHNjcm9sbFRvcCAtIHRoaXMubGFzdFNjcm9sbFRvcCkgPCAoMTApKSByZXR1cm47XG4gICAgaWYgKHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnBlbmRpbmdBbmltYXRpb25GcmFtZSk7XG4gICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbGluZ0Rvd24gPSBzY3JvbGxUb3AgPiB0aGlzLmxhc3RTY3JvbGxUb3A7XG4gICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG5cbiAgICAgIGNvbnN0IG92ZXJzY2FuID0gNTtcbiAgICAgIGNvbnN0IG5ld1N0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgICAgIGNvbnN0IGR5bmFtaWNPdmVyc2NhbiA9IHNjcm9sbGluZ0Rvd24gPyBvdmVyc2NhbiA6IG92ZXJzY2FuO1xuXG4gICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIG5ld1N0YXJ0SW5kZXggLSBkeW5hbWljT3ZlcnNjYW4pO1xuICAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuZmxhdHRlbmVkRGF0YS5sZW5ndGgsXG4gICAgICAgIG5ld1N0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArIGR5bmFtaWNPdmVyc2NhblxuICAgICAgKTtcbiAgICAgIHRoaXMudHJhbnNsYXRlWSA9IHN0YXJ0ICogdGhpcy5yb3dIZWlnaHQ7XG4gICAgICBpZiAodGhpcy5zdGFydEluZGV4ICE9PSBzdGFydCB8fCB0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAhPT0gZW5kIC0gc3RhcnQpIHtcbiAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnQ7XG4gICAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmRhdGFTZXQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBlbmRpbmdBbmltYXRpb25GcmFtZSA9IG51bGw7XG4gICAgfSk7XG4gIH1cblxuXG4gIC8vIG9uTWFpblNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgLy8gICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgLy8gICBpZiAodGhpcy5pc1N5bmNpbmdGcm9tRmFrZSkge1xuICAvLyAgICAgdGhpcy5pc1N5bmNpbmdGcm9tRmFrZSA9IGZhbHNlO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxUb3A7XG4gIC8vICAgaWYgKE1hdGguYWJzKHNjcm9sbFRvcCAtIHRoaXMubGFzdFNjcm9sbFRvcCkgPCB0aGlzLnJvd0hlaWdodCAvIDIpIHJldHVybjtcbiAgLy8gICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG5cbiAgLy8gICBpZiAodGhpcy5mYWtlU2Nyb2xsUmFmKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmZha2VTY3JvbGxSYWYpO1xuXG4gIC8vICAgdGhpcy5mYWtlU2Nyb2xsUmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgLy8gICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gIC8vICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc3QgZmxhdERhdGEgPSB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyh0aGlzLmRhdGFTZXQpO1xuICAvLyAgICAgY29uc3QgdG90YWxSb3dzID0gZmxhdERhdGEubGVuZ3RoO1xuICAvLyAgICAgY29uc3QgbmV3U3RhcnRJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAvLyAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBuZXdTdGFydEluZGV4IC0gKHRoaXMub3ZlcnNjYW4gKiAyKSk7XG4gIC8vICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih0b3RhbFJvd3MsIG5ld1N0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArICh0aGlzLm92ZXJzY2FuICogMikpO1xuXG4gIC8vICAgICB0aGlzLnRyYW5zbGF0ZVkgPSBzdGFydCAqIHRoaXMucm93SGVpZ2h0O1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnQ7XG4gIC8vICAgICB0aGlzLnZpc2libGVSb3dzID0gZmxhdERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuXG4gIGdldCBpc1Njcm9sbGJhclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1haW5TY3JvbGwpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBlbCA9IHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiBlbC5zY3JvbGxIZWlnaHQgPiBlbC5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICB0b2dnbGVFeHBhbmQocm93OiBhbnkpIHtcbiAgICBpZiAocm93LmRldGFpbHMpIHtcbiAgICAgIHJvdy5pc0RldGFpbHNFeHBhbmQgPSAhcm93LmlzRGV0YWlsc0V4cGFuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93LmlzRXhwYW5kID0gIXJvdy5pc0V4cGFuZDtcbiAgICB9XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcbiAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAvLyB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gfSwgMTAwKTtcbiAgfVxuXG4gIC8vIG9uTWFpbkZha2VTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gIC8vICAgaWYgKHRoaXMuaXNTeW5jaW5nRnJvbU1haW4pIHtcbiAgLy8gICAgIHRoaXMuaXNTeW5jaW5nRnJvbU1haW4gPSBmYWxzZTtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgLy8gICBpZiAodGhpcy5tYWluU2Nyb2xsUmFmKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLm1haW5TY3JvbGxSYWYpO1xuICAvLyAgIHRoaXMubWFpblNjcm9sbFJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gIC8vICAgICB0aGlzLmlzU3luY2luZ0Zyb21GYWtlID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICAgIGNvbnN0IG92ZXJzY2FuID0gdGhpcy5vdmVyc2NhbiA/PyAwO1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCk7XG4gIC8vICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIHRoaXMuc3RhcnRJbmRleCAtIG92ZXJzY2FuKTtcbiAgLy8gICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKFxuICAvLyAgICAgICB0aGlzLmZsYXR0ZW5lZERhdGEubGVuZ3RoLFxuICAvLyAgICAgICB0aGlzLnN0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArIG92ZXJzY2FuXG4gIC8vICAgICApO1xuICAvLyAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZmxhdHRlbmVkRGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG5cblxuXG5cbiAgdmlld3BvcnRSb3dzID0gMDsgLy8gaG93IG1hbnkgcm93cyBmaXQgaW4gdmlld3BvcnQgKGNvbXB1dGVkKVxuICBmaXJzdEluZGV4ID0gMDsgLy8gaW5kZXggb2YgdGhlIGZpcnN0IHZpc2libGUgcm93IChjbGFtcGVkKVxuICByZW5kZXJTdGFydCA9IDA7IC8vIHdoZXJlIHRoZSBzbGljZSBhY3R1YWxseSBzdGFydHMgKGZpcnN0SW5kZXggLSBvdmVyc2NhbiwgY2xhbXBlZClcblxuICBwcml2YXRlIHNjcm9sbFJhZjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGVuZGluZ1Njcm9sbFRvcCA9IDA7XG5cbiAgQFZpZXdDaGlsZCgnbWFpblNjcm9sbCcpIG1haW5TY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZmFrZVNjcm9sbCcpIGZha2VTY3JvbGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnaG9yaXppbnRhbEZha2VTY3JvbGwnKVxuICBob3JpemludGFsRmFrZVNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjZW50ZXJTY3JvbGxhYmxlQm9keScpXG4gIGNlbnRlclNjcm9sbGFibGVCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIHByaXZhdGUgb3ZlcnNjYW4gPSAxMDsgLy8gYnVmZmVyIHJvd3MgYWJvdmUgYW5kIGJlbG93XG5cbiAgY29tcHV0ZVZpZXdwb3J0Um93cygpIHtcbiAgICBpZiAodGhpcy5mYWtlU2Nyb2xsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgICBjb25zdCBoID0gdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0ID8/IDA7XG5cbiAgICAgIC8vIHJvd3MgdmlzaWJsZSBpbiB2aWV3cG9ydFxuICAgICAgY29uc3Qgcm93c0luVmlld3BvcnQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoaCAvIHRoaXMucm93SGVpZ2h0KSk7XG5cbiAgICAgIC8vIGFkZCBidWZmZXIgcm93cyAob3ZlcnNjYW4pXG4gICAgICB0aGlzLnZpZXdwb3J0Um93cyA9IHJvd3NJblZpZXdwb3J0ICsgdGhpcy5vdmVyc2NhbjtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG5cbiAgb25Ib3Jpem9udGFsRmFrZVNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsTGVmdDtcbiAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgfVxuICB9XG5cbiAgb25DZW50ZXJCb2R5U2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2VudGVyUGlubmVkSGVhZGVyKSB7XG4gICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBvbkNlbnRlckhlYWRlclNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaG9yaXppbnRhbEZha2VTY3JvbGwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgfVxuXG4gIC8vIERyYWdnaW5nIExvZ2ljIGlzIGltcGxlbWVudGVkIGhlcmVcbiAgLy8gcHJpdmF0ZSBpbml0aWFsSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGRyYWdnaW5nQ29sdW1uOiBhbnk7XG4gIGRyYWdTdGFydEluZGV4OiBhbnkgPSAwO1xuICAvLyBvbkRyYWdTdGFydChkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgLy8gICB0aGlzLmRyYWdnaW5nQ29sdW1uID0gZGF0YS5jb2x1bW47XG4gIC8vICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IGluZGV4O1xuICAvLyB9XG4gIC8vIG9uRHJhZ01vdmUoZGF0YTogYW55KSB7XG4gIC8vICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBkYXRhLmV2ZW50O1xuICAvLyAgIGNvbnN0IGhlYWRlcnMgPSBBcnJheS5mcm9tKFxuICAvLyAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm9uZS1yb3ctaGVhZGVyLWNlbGxzJylcbiAgLy8gICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgLy8gICBoZWFkZXJzLmZvckVhY2goKGhlYWRlckVsLCBpZHgpID0+IHtcbiAgLy8gICAgIGNvbnN0IHJlY3QgPSBoZWFkZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgaWR4ICE9PSB0aGlzLmRyYWdTdGFydEluZGV4ICYmXG4gIC8vICAgICAgIGNsaWVudFggPiByZWN0LmxlZnQgJiZcbiAgLy8gICAgICAgY2xpZW50WCA8IHJlY3QucmlnaHQgJiZcbiAgLy8gICAgICAgY2xpZW50WSA+IHJlY3QudG9wICYmXG4gIC8vICAgICAgIGNsaWVudFkgPCByZWN0LmJvdHRvbVxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnN0IG90aGVySW5kZXggPSBpZHg7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuZHJhZ1N0YXJ0SW5kZXh9IC0tPiAke290aGVySW5kZXh9YCk7XG4gIC8vICAgICAgIHRoaXMuc3dhcENvbHVtbih0aGlzLmRyYWdTdGFydEluZGV4LCBvdGhlckluZGV4KTtcbiAgLy8gICAgICAgY29uc29sZS5sb2coJ1VwZGF0ZWQgQ29sdW1uczogJywgdGhpcy5jb2x1bW5zKTtcbiAgLy8gICAgICAgdGhpcy5kcmFnU3RhcnRJbmRleCA9IG90aGVySW5kZXg7IC8vIHVwZGF0ZSBpbmRleFxuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLy8gc3dhcENvbHVtbihwcmV2aXVzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpIHtcbiAgLy8gICBjb25zdCBjb2x1bW5zID0gc3RydWN0dXJlZENsb25lKHRoaXMuY29sdW1ucyk7XG4gIC8vICAgY29uc3QgZmxhdHRlbkNvbHVtbnMgPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuXG4gIC8vICAgY29uc3QgdmlzaWJsZUZsYXR0ZW5Db2x1bW5zID0gZmxhdHRlbkNvbHVtbnMuZmlsdGVyKFxuICAvLyAgICAgKGNvbCkgPT4gY29sLmlzX3Zpc2libGVcbiAgLy8gICApO1xuICAvLyAgIGNvbnN0IHByZXZpdXNDb2x1bW4gPSB2aXNpYmxlRmxhdHRlbkNvbHVtbnNbcHJldml1c0luZGV4XTtcbiAgLy8gICBjb25zdCBjdXJyZW50Q29sdW1uID0gdmlzaWJsZUZsYXR0ZW5Db2x1bW5zW2N1cnJlbnRJbmRleF07XG5cbiAgLy8gICBjb25zb2xlLmxvZygnUHJldml1cyBDb2x1bW46ICcsIHByZXZpdXNDb2x1bW4pO1xuICAvLyAgIGNvbnNvbGUubG9nKCdjdXJyZW50IGNsdW1uOiAnLCBjdXJyZW50Q29sdW1uKTtcbiAgLy8gfVxuXG4gIC8vIG9uRHJhZ0VuZChkYXRhOiBhbnkpIHtcbiAgLy8gICB0aGlzLmRyYWdnaW5nQ29sdW1uID0gbnVsbDtcbiAgLy8gICB0aGlzLmRyYWdTdGFydEluZGV4ID0gbnVsbDtcbiAgLy8gfVxuXG4gIC8vIENESyBEUkFHIERST1AgTE9HSUMgR09FUyBIRVJFXG5cblxuICBjYW5FbnRlclRvUm93c0dyb3VwaW5nID0gKGRyYWc6IENka0RyYWc8YW55PiwgZHJvcDogQ2RrRHJvcExpc3Q8YW55PikgPT4ge1xuICAgIC8vIEV4YW1wbGU6IEJsb2NrIGlmIGFscmVhZHkgcGlubmVkIGxlZnRcbiAgICBjb25zdCBkYXRhID0gZHJhZy5kYXRhO1xuICAgIGlmIChkYXRhPy5jaGlsZHJlbiAmJiBkYXRhPy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkYXRhLmNoaWxkcmVuLnNvbWUoXG4gICAgICAgIChjb2w6IGFueSkgPT4gY29sLmlzX3Zpc2libGUgJiYgY29sLmlzX2dyb3VwYWJsZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuaXNfdmlzaWJsZSAmJiBkYXRhLmlzX2dyb3VwYWJsZTtcbiAgfTtcblxuICAvLyBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmU8YW55Pikge1xuICAvLyAgIGNvbnN0IHBvaW50ZXJYID0gZXZlbnQucG9pbnRlclBvc2l0aW9uLng7XG4gIC8vICAgY29uc3QgcG9pbnRlclkgPSBldmVudC5wb2ludGVyUG9zaXRpb24ueTtcblxuICAvLyAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgLy8gICAgICdyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXG4gIC8vICAgKTtcblxuICAvLyAgIGlmICh0YXJnZXRFbGVtZW50KSB7XG4gIC8vICAgICBjb25zdCByZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAvLyAgICAgY29uc3QgaXNPdmVyVGFyZ2V0ID1cbiAgLy8gICAgICAgcG9pbnRlclggPj0gcmVjdC5sZWZ0ICYmXG4gIC8vICAgICAgIHBvaW50ZXJYIDw9IHJlY3QucmlnaHQgJiZcbiAgLy8gICAgICAgcG9pbnRlclkgPj0gcmVjdC50b3AgJiZcbiAgLy8gICAgICAgcG9pbnRlclkgPD0gcmVjdC5ib3R0b207XG5cbiAgLy8gICAgIGlmIChpc092ZXJUYXJnZXQpIHtcbiAgLy8gICAgICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gdHJ1ZTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGVudGVyVG9Ub3BSb3dHcm91cGluZyhkcm9wTGlzdDogQ2RrRHJhZ0VudGVyPGFueT4pIHtcbiAgICBjb25zdCBkcmFnZ2luZ0RhdGEgPSBkcm9wTGlzdC5pdGVtLmRhdGE7XG4gICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gdHJ1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkRyYWdnaW5nIGluIGdyb3VwIGFyZWFcIilcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkcmFnZ2luZ0RhdGE/LmNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgdGFyZ2V0R3JvdXAgPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbCkgPT4gY29sLmhlYWRlciA9PT0gZHJhZ2dpbmdEYXRhLmhlYWRlclxuICAgICAgKTtcbiAgICAgIGlmICh0YXJnZXRHcm91cCkge1xuICAgICAgICBkcmFnZ2luZ0RhdGEuY2hpbGRyZW4uZm9yRWFjaCgoZHJhZ2dlZENoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gdGFyZ2V0R3JvdXAuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dlZENoaWxkLmZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgICAgbWF0Y2hpbmdDaGlsZC5pc1Jvd0dyb3VwZWQgPSAhIW1hdGNoaW5nQ2hpbGQuaXNfZ3JvdXBhYmxlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy8gVHJ5IGZpbmRpbmcgaXQgaW4gdG9wLWxldmVsIGNvbHVtbnMgZmlyc3RcbiAgICAgIGxldCB0YXJnZXRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgKTtcblxuICAgICAgaWYgKHRhcmdldENvbHVtbikge1xuICAgICAgICB0YXJnZXRDb2x1bW4uaXNSb3dHcm91cGVkID0gISF0YXJnZXRDb2x1bW4uaXNfZ3JvdXBhYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgZ3JvdXAgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gZ3JvdXAuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2luZ0RhdGEuZmllbGRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdDaGlsZCkge1xuICAgICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9ICEhbWF0Y2hpbmdDaGlsZC5pc19ncm91cGFibGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOKchSBSZWZyZXNoIFVJXG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkRyb3BMaXN0RW50ZXIoXG4gICAgZHJvcExpc3Q6IENka0RyYWdFbnRlcjxhbnk+LFxuICAgIHNlY3Rpb246ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0J1xuICApIHtcbiAgICBjb25zdCBkcmFnZ2luZ0RhdGEgPSBkcm9wTGlzdC5pdGVtLmRhdGE7XG5cbiAgICBjb25zdCB0YXJnZXRDb2x1bW46IGFueSA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLmhlYWRlciA9PSBkcmFnZ2luZ0RhdGEuaGVhZGVyXG4gICAgKTtcblxuICAgIGlmICghdGFyZ2V0Q29sdW1uKSByZXR1cm47XG5cbiAgICBpZiAoXG4gICAgICBBcnJheS5pc0FycmF5KGRyYWdnaW5nRGF0YT8uY2hpbGRyZW4pICYmXG4gICAgICBBcnJheS5pc0FycmF5KHRhcmdldENvbHVtbj8uY2hpbGRyZW4pXG4gICAgKSB7XG4gICAgICBkcmFnZ2luZ0RhdGEuY2hpbGRyZW4uZm9yRWFjaCgoZHJhZ2dlZENoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IHRhcmdldENvbHVtbi5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dlZENoaWxkLmZpZWxkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgbWF0Y2hpbmdDaGlsZC5waW5uZWQgPSBzZWN0aW9uID09PSAnY2VudGVyJyA/IG51bGwgOiBzZWN0aW9uO1xuICAgICAgICAgIG1hdGNoaW5nQ2hpbGRbJ2lzUm93R3JvdXBlZCddID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRDb2x1bW4ucGlubmVkID0gc2VjdGlvbiA9PT0gJ2NlbnRlcicgPyBudWxsIDogc2VjdGlvbjtcbiAgICAgIHRhcmdldENvbHVtblsnaXNSb3dHcm91cGVkJ10gPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIGVudGVyVG9Ub3BHcm91cGluZ1Jvdyhkcm9wTGlzdDogQ2RrRHJhZ0VudGVyPGFueT4pIHtcbiAgLy8gICB0aGlzLnNob3VsZERpc2FibGVEcm9wbGlzdFNvcnRpbmcgPSB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nO1xuICAvLyAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IHRydWU7XG4gIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyBjb25zdCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtbnMuZmluZEluZGV4KFxuICAvLyAgIChjb2wpID0+IGNvbC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXG4gIC8vICk7XG4gIC8vIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgLy8gICB0aGlzLmdyb3VwZWRDb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XG4gIC8vIH1cblxuICAvLyAvLyAyLiBUcmF2ZXJzZSB0aGlzLmNvbHVtbnMgdG8gZmluZCBhbmQgdXBkYXRlIHRoZSBtYXRjaGluZyBjb2x1bW5cbiAgLy8gdGhpcy5jb2x1bW5zLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gIC8vICAgaWYgKGdyb3VwPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAvLyAgICAgZ3JvdXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgLy8gICAgICAgaWYgKGNoaWxkLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgLy8gICAgICAgICBjaGlsZC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSk7XG4gIC8vICAgfSBlbHNlIGlmIChncm91cC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gIC8vICAgICBncm91cC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgLy8gICB9XG4gIC8vIH0pO1xuICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gfVxuXG4gIGV4aXRlZEZyb21UaGVUb3BSb3coZHJvcExpc3Q6IENka0RyYWdFeGl0PGFueT4pIHtcbiAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGREaXNhYmxlRHJvcGxpc3RTb3J0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgZHJhZ2dpbmdEYXRhID0gZHJvcExpc3QuaXRlbS5kYXRhO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRyYWdnaW5nRGF0YT8uY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCB0YXJnZXRHcm91cCA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09PSBkcmFnZ2luZ0RhdGEuaGVhZGVyXG4gICAgICApO1xuICAgICAgaWYgKHRhcmdldEdyb3VwKSB7XG4gICAgICAgIGRyYWdnaW5nRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChkcmFnZ2VkQ2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSB0YXJnZXRHcm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2VkQ2hpbGQuZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0YXJnZXRDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgKTtcblxuICAgICAgaWYgKHRhcmdldENvbHVtbikge1xuICAgICAgICB0YXJnZXRDb2x1bW4uaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBncm91cCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncm91cC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSBncm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nQ2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNob3VsZERpc2FibGVEcm9wbGlzdFNvcnRpbmcgPSBmYWxzZTtcbiAgaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgPSBmYWxzZTtcbiAgY2hlY2tDb2x1bW5Hcm91cGluZ1N0YXR1cyhjb2w6IGFueSkge1xuICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xuICAgICAgY29uc3QgYWxsQ2hpbGRyZW5EaXNhYmxlZCA9IGNvbC5jaGlsZHJlbi5ldmVyeShcbiAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmlzX2dyb3VwYWJsZSA9PT0gZmFsc2VcbiAgICAgICk7XG4gICAgICB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gYWxsQ2hpbGRyZW5EaXNhYmxlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0Rpc2FibGVDb2x1bW5Hcm91cGluZyA9IGNvbC5pc19ncm91cGFibGUgPT09IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjdXJyZW50RHJhZ2dpbmdDb2x1bW46IGFueSA9IG51bGw7XG4gIGRyYWdTdGFydE9uR3JvdXAoY29sOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnREcmFnZ2luZ0NvbHVtbiA9IGNvbDtcbiAgfVxuXG4gIG9uU29ydEdyb3VwID0gYXN5bmMgKGV2ZW50OiBDZGtEcmFnU29ydEV2ZW50PGFueT4sIHNlY3Rpb246IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dO1xuICAgIGlmIChldmVudC5wcmV2aW91c0luZGV4ID09PSBldmVudC5jdXJyZW50SW5kZXgpIHJldHVybjtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pKSB7XG4gICAgICAgIHJldHVybiBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfdmlzaWJsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sLmlzX3Zpc2libGU7XG4gICAgfSk7XG4gICAgY29uc3QgcHJldmlvdXNIZWFkZXIgPSB2aXNpYmxlQ29sdW1uc1tldmVudC5wcmV2aW91c0luZGV4XS5oZWFkZXI7XG4gICAgY29uc3QgY3VycmVudEhlYWRlciA9IHZpc2libGVDb2x1bW5zW2V2ZW50LmN1cnJlbnRJbmRleF0uaGVhZGVyO1xuICAgIGNvbnN0IHZpc2libGVQcmV2SW5kZXggPSB2aXNpYmxlQ29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5oZWFkZXIgPT09IHByZXZpb3VzSGVhZGVyXG4gICAgKTtcbiAgICBjb25zdCB2aXNpYmxlQ3VyckluZGV4ID0gdmlzaWJsZUNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuaGVhZGVyID09PSBjdXJyZW50SGVhZGVyXG4gICAgKTtcbiAgICBjb25zdCBnZXRGaWVsZHMgPSAoaXRlbTogYW55KTogc3RyaW5nW10gPT4ge1xuICAgICAgaWYgKGl0ZW0/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jaGlsZHJlbikpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4ubWFwKChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gW2l0ZW0uZmllbGRdO1xuICAgIH07XG4gICAgY29uc3QgcHJldkZpZWxkcyA9IGdldEZpZWxkcyh2aXNpYmxlQ29sdW1uc1t2aXNpYmxlUHJldkluZGV4XSk7XG4gICAgY29uc3QgY3VyckZpZWxkcyA9IGdldEZpZWxkcyh2aXNpYmxlQ29sdW1uc1t2aXNpYmxlQ3VyckluZGV4XSk7XG4gICAgY29uc3QgYWxsRmllbGRzID0gWy4uLnByZXZGaWVsZHMsIC4uLmN1cnJGaWVsZHNdO1xuICAgIGNvbnN0IGNlbGxzID0gYWxsRmllbGRzLmxlbmd0aFxuICAgICAgPyAoW10gYXMgSFRNTEVsZW1lbnRbXSkuY29uY2F0KFxuICAgICAgICAuLi5hbGxGaWVsZHMubWFwKChmaWVsZCkgPT5cbiAgICAgICAgICBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYCkpIGFzIEhUTUxFbGVtZW50W11cbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgOiBbXTtcbiAgICBjb25zdCBmaXJzdFBvc2l0aW9ucyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbiAgICBjZWxscy5mb3JFYWNoKChlbCkgPT4gZmlyc3RQb3NpdGlvbnMuc2V0KGVsLCBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSk7XG4gICAgLy8gY29uc29sZS5sb2coXCJ0aGlzIC5jb2x1bnNcIiwgdGhpcy5jb2x1bW5zKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoKHRoaXMgYXMgYW55KVtzZWN0aW9uXSwgdmlzaWJsZVByZXZJbmRleCwgdmlzaWJsZUN1cnJJbmRleCk7XG5cbiAgICBjb25zdCBwcmV2Q29sSW5kZXhJbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5oZWFkZXIgPT09IHByZXZpb3VzSGVhZGVyKTtcbiAgICBjb25zdCBjdXJyQ29sSW5kZXhJbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5oZWFkZXIgPT09IGN1cnJlbnRIZWFkZXIpO1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmNvbHVtbnMsIHByZXZDb2xJbmRleEluQ29sdW1ucywgY3VyckNvbEluZGV4SW5Db2x1bW5zKTtcbiAgICAvLyBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm5nWm9uZS5vblN0YWJsZSk7XG4gICAgLy8gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgIC8vIFdhaXQgYSB0aWNrIHRvIG1ha2Ugc3VyZSBlbGVtZW50cyBhcmUgcmVuZGVyZWRcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgYWxsRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKVxuICAgICAgICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgICAgICAgdXBkYXRlZENlbGxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCk7XG4gICAgICAgICAgaWYgKG9sZExlZnQgPT0gbnVsbCkgcmV0dXJuOyAvLyBza2lwIGlmIG9sZCBwb3NpdGlvbiBub3QgYXZhaWxhYmxlXG5cbiAgICAgICAgICBjb25zdCBuZXdMZWZ0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcblxuICAgICAgICAgIGlmIChkZWx0YVggIT09IDApIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuXG4gICAgICAgICAgICAvLyBGb3JjZSByZWZsb3dcbiAgICAgICAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAnJztcbiAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIH0pO1xuICB9XG5cblxuICBvbkRyb3BHcm91cCgpIHtcbiAgICB0aGlzLmxlZnRQaW5uZWRDb2x1bW5zID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHRoaXMucHJldmlld0xlZnRQaW5uZWRDb2x1bW5zKTtcbiAgICB0aGlzLmNlbnRlckNvbHVtbnMgPSB0aGlzLmRlZXBDbG9uZUNvbHVtbnModGhpcy5wcmV2aWV3Q2VudGVyQ29sdW1ucyk7XG4gICAgdGhpcy5yaWdodFBpbm5lZENvbHVtbnMgPSB0aGlzLmRlZXBDbG9uZUNvbHVtbnModGhpcy5wcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWVwQ2xvbmVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb2x1bW5zKSkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgLi4uY29sLFxuICAgICAgcXVlcnk6IGNvbC5xdWVyeSA/IHsgLi4uY29sLnF1ZXJ5IH0gOiBudWxsLFxuICAgICAgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlOiBBcnJheS5pc0FycmF5KGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUpXG4gICAgICAgID8gWy4uLmNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVdXG4gICAgICAgIDogW10sXG4gICAgICAvLyBSZWN1cnNpdmVseSBkZWVwIGNsb25lIGNoaWxkcmVuIGlmIHByZXNlbnRcbiAgICAgIGNoaWxkcmVuOiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbilcbiAgICAgICAgPyB0aGlzLmRlZXBDbG9uZUNvbHVtbnMoY29sLmNoaWxkcmVuKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH1cblxuXG4gIGFzeW5jIG9uRHJvcFRvcEdyb3VwKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnk+KSB7XG4gICAgaWYgKHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyKSByZXR1cm47XG4gICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMudHJhbnNsYXRlWSA9IDA7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGRyYWdnZWREYXRhID0gZXZlbnQuaXRlbS5kYXRhO1xuICAgIGlmIChkcmFnZ2VkRGF0YT8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShkcmFnZ2VkRGF0YS5jaGlsZHJlbikpIHtcbiAgICAgIGRyYWdnZWREYXRhLmNoaWxkcmVuLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2wuaXNfdmlzaWJsZSAmJiBjb2wuaXNfZ3JvdXBhYmxlKSB7XG4gICAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5wdXNoKGNvbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZHJhZ2dlZERhdGEuaXNfdmlzaWJsZSAmJiBkcmFnZ2VkRGF0YS5pc19ncm91cGFibGUpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5wdXNoKGRyYWdnZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gZmFsc2U7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG4gICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMDAwKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyBvbkdyb3VwUmVvcmRlcihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZ3JvdXBlZENvbHVtbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBCb3hQYWRkaW5nID0gdGhpcy5jb2x1bW5zR3JvdXBlZEJveD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgIH0sIDEwKTtcbiAgfVxuXG4gIGFzeW5jIHVuZ3JvdXBDb2x1bW4oY29sdW1uOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5ncm91cGVkQ29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAgIChjb2wpID0+IGNvbC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdyb3VwZWRDb2x1bW5zLm1hcCgoaXRlbSkgPT4gaXRlbS5maWVsZCk7XG4gICAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgICAgIGlmIChncm91cD8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShncm91cC5jaGlsZHJlbikpIHtcbiAgICAgICAgICBncm91cC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGQuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICBjaGlsZC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChncm91cC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgZ3JvdXAuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSwgMTAwMCk7XG5cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBpbiB1bmdyb3VwQ29sdW1uOlwiLCBlcnIpO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgc2hvdWxkVGhlR3JvdXBIZWFkZXJTaG93KGdyb3VwOiBhbnkpIHtcbiAgICBpZiAoZ3JvdXA/LmNoaWxkcmVuICYmIGdyb3VwLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGdyb3VwLmNoaWxkcmVuLnNvbWUoXG4gICAgICAgIChjb2w6IGFueSkgPT4gY29sLmlzX3Zpc2libGUgJiYgIWNvbD8uaXNSb3dHcm91cGVkXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXA/LmlzX3Zpc2libGUgJiYgIWdyb3VwPy5pc1Jvd0dyb3VwZWQ7XG4gIH1cblxuXG4gIC8vIG9uQ2hpbGREcmFnU3RhcnQoKSB7XG4gIC8vICAgZGVidWdnZXI7XG4gIC8vIH1cblxuICAvLyBkcm9wTGlzdElkczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBnZW5lcmF0ZURyb3BMaXN0SWRzKCkge1xuICAvLyAgIHRoaXMuZHJvcExpc3RJZHMgPSBbXTtcblxuICAvLyAgIGNvbnN0IHNlY3Rpb25LZXlzID0gW1xuICAvLyAgICAgJ2xlZnRQaW5uZWRDb2x1bW5zJyxcbiAgLy8gICAgICdjZW50ZXJDb2x1bW5zJyxcbiAgLy8gICAgICdyaWdodFBpbm5lZENvbHVtbnMnLFxuICAvLyAgIF07XG5cbiAgLy8gICBzZWN0aW9uS2V5cy5mb3JFYWNoKChzZWN0aW9uS2V5KSA9PiB7XG4gIC8vICAgICBjb25zdCBzZWN0aW9uQ29scyA9ICh0aGlzIGFzIGFueSlbc2VjdGlvbktleV07XG5cbiAgLy8gICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gIC8vICAgICAgIGlmIChjb2w/LmNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnksIGNoaWxkSW5kZXg6IG51bWJlcikgPT4ge1xuICAvLyAgICAgICAgICAgaWYgKGNoaWxkPy5pc192aXNpYmxlICYmICFjaGlsZC5pc1Jvd0dyb3VwZWQpIHtcbiAgLy8gICAgICAgICAgICAgY29uc3QgaWQgPSBgJHtzZWN0aW9uS2V5fSR7aX1gO1xuICAvLyAgICAgICAgICAgICB0aGlzLmRyb3BMaXN0SWRzLnB1c2goaWQpO1xuICAvLyAgICAgICAgICAgfVxuICAvLyAgICAgICAgIH0pO1xuICAvLyAgICAgICB9IGVsc2UgaWYgKGNvbD8uaXNfdmlzaWJsZSAmJiAhY29sLmlzUm93R3JvdXBlZCkge1xuICAvLyAgICAgICAgIGNvbnN0IGlkID0gYCR7c2VjdGlvbktleX0ke2l9YDtcbiAgLy8gICAgICAgICB0aGlzLmRyb3BMaXN0SWRzLnB1c2goaWQpO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIG9uQ2hpbGREcm9wbGlzdFNvcnRlZCA9IGFzeW5jIChldmVudDogQ2RrRHJhZ1NvcnRFdmVudDxhbnk+LCBzZWN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoZXZlbnQucHJldmlvdXNJbmRleCA9PT0gZXZlbnQuY3VycmVudEluZGV4KSByZXR1cm47XG5cbiAgICBjb25zdCBwaW5uZWQgPVxuICAgICAgc2VjdGlvbiA9PSAncHJldmlld0xlZnRQaW5uZWRDb2x1bW5zJ1xuICAgICAgICA/ICdsZWZ0J1xuICAgICAgICA6IHNlY3Rpb24gPT0gJ3ByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMnXG4gICAgICAgICAgPyAncmlnaHQnXG4gICAgICAgICAgOiBcIlwiO1xuXG4gICAgY29uc3QgY29sdW1uID0gZXZlbnQuaXRlbS5kYXRhO1xuICAgIGxldCBncm91cCA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgKGNvbDogYW55KSA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiZcbiAgICAgICAgY29sLmNoaWxkcmVuLnNvbWUoKGNoaWxkOiBhbnkpID0+IGNoaWxkPy5maWVsZCA9PT0gY29sdW1uPy5maWVsZClcbiAgICApO1xuICAgIGNvbnN0IGdyb3VwSW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KFxuICAgICAgKGNvbCkgPT4gY29sLmhlYWRlciA9PT0gZ3JvdXAuaGVhZGVyXG4gICAgKTtcbiAgICBjb25zdCBmaWx0ZXJlZEdyb3VwID0gZ3JvdXA/LmNoaWxkcmVuLmZpbHRlcigoY29sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGlzUGlubmVkTWF0Y2ggPVxuICAgICAgICAocGlubmVkID09PSBcIlwiICYmICghY29sPy5waW5uZWQgfHwgY29sPy5waW5uZWQgPT09IFwiXCIpKSB8fCBjb2w/LnBpbm5lZCA9PT0gcGlubmVkO1xuICAgICAgcmV0dXJuIGlzUGlubmVkTWF0Y2ggJiYgY29sPy5pc192aXNpYmxlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJldmlvdXNGaWVsZCA9IGZpbHRlcmVkR3JvdXBbZXZlbnQucHJldmlvdXNJbmRleF0uZmllbGQ7XG4gICAgY29uc3QgY3VycmVudEZpZWxkID0gZmlsdGVyZWRHcm91cFtldmVudC5jdXJyZW50SW5kZXhdLmZpZWxkO1xuICAgIGNvbnN0IHZpc2libGVQcmV2SW5kZXggPSBncm91cC5jaGlsZHJlbi5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5maWVsZCA9PSBwcmV2aW91c0ZpZWxkXG4gICAgKTtcbiAgICBjb25zdCB2aXNpYmxlQ3VyckluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT0gY3VycmVudEZpZWxkXG4gICAgKTtcbiAgICBjb25zdCBhbGxGaWVsZHMgPSBbcHJldmlvdXNGaWVsZCwgY3VycmVudEZpZWxkXTtcbiAgICBjb25zdCBjZWxscyA9IGFsbEZpZWxkcy5sZW5ndGhcbiAgICAgID8gKFtdIGFzIEhUTUxFbGVtZW50W10pLmNvbmNhdChcbiAgICAgICAgLi4uYWxsRmllbGRzLm1hcCgoZmllbGQpID0+XG4gICAgICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApKSBhcyBIVE1MRWxlbWVudFtdXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIDogW107XG5cbiAgICBjb25zdCBncm91cEluU2VjdGlvbiA9ICh0aGlzIGFzIGFueSlbc2VjdGlvbl0uZmluZChcbiAgICAgIChjb2w6IGFueSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmXG4gICAgICAgIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZD8uZmllbGQgPT09IGNvbHVtbj8uZmllbGQpXG4gICAgKTtcblxuICAgIGNvbnN0IGZpbHRlckdyb3VwSW5TZWN0aW9uID0gKHRoaXMgYXMgYW55KVtzZWN0aW9uXS5maW5kKFxuICAgICAgKGNvbDogYW55KSA9PlxuICAgICAgICBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikgJiZcbiAgICAgICAgY29sLmNoaWxkcmVuLnNvbWUoKGNoaWxkOiBhbnkpID0+IGNoaWxkPy5maWVsZCA9PT0gY29sdW1uPy5maWVsZClcbiAgICApO1xuXG4gICAgY29uc3QgZ3JvdXBJblNlY3Rpb25JbmRleCA9ICh0aGlzIGFzIGFueSlbc2VjdGlvbl0uZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuaGVhZGVyID09PSBncm91cEluU2VjdGlvbi5oZWFkZXJcbiAgICApO1xuXG4gICAgY29uc3QgZmlyc3RQb3NpdGlvbnMgPSBuZXcgTWFwPEhUTUxFbGVtZW50LCBudW1iZXI+KCk7XG4gICAgY2VsbHMuZm9yRWFjaCgoZWwpID0+IGZpcnN0UG9zaXRpb25zLnNldChlbCwgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkpO1xuICAgIG1vdmVJdGVtSW5BcnJheShcbiAgICAgIHRoaXMuY29sdW1uc1tncm91cEluZGV4XT8uY2hpbGRyZW4sXG4gICAgICB2aXNpYmxlUHJldkluZGV4LFxuICAgICAgdmlzaWJsZUN1cnJJbmRleFxuICAgICk7XG5cbiAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICAodGhpcyBhcyBhbnkpW3NlY3Rpb25dPy5bZ3JvdXBJblNlY3Rpb25JbmRleF0uY2hpbGRyZW4sXG4gICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgZXZlbnQuY3VycmVudEluZGV4XG4gICAgKTtcblxuICAgIC8vIGF3YWl0IHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5uZ1pvbmUub25TdGFibGUpO1xuICAgIC8vIGFsbEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgIC8vICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShcbiAgICAvLyAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKVxuICAgIC8vICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIC8vICAgdXBkYXRlZENlbGxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IG5ld0xlZnQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgIC8vICAgICBjb25zdCBvbGRMZWZ0ID0gZmlyc3RQb3NpdGlvbnMuZ2V0KGVsKSE7XG4gICAgLy8gICAgIGNvbnN0IGRlbHRhWCA9IG9sZExlZnQgLSBuZXdMZWZ0O1xuICAgIC8vICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgLy8gICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICd0cmFuc2Zvcm0nO1xuICAgIC8vICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgLy8gICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcbiAgICAvLyAgICAgICB2b2lkIGVsLm9mZnNldFdpZHRoO1xuICAgIC8vICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknO1xuICAgIC8vICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgIC8vICAgICAgIGNvbnN0IGhhbmRsZSA9ICgpID0+IHtcbiAgICAvLyAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAvLyAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgIC8vICAgICAgICAgZWwuc3R5bGUud2lsbENoYW5nZSA9ICcnO1xuICAgIC8vICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgLy8gICAgICAgfTtcbiAgICAvLyAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gfSk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBhbGxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgICAgICB1cGRhdGVkQ2VsbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICBjb25zdCBvbGRMZWZ0ID0gZmlyc3RQb3NpdGlvbnMuZ2V0KGVsKTtcbiAgICAgICAgICBpZiAob2xkTGVmdCA9PSBudWxsKSByZXR1cm47IC8vIHNhZmV0eSBjaGVja1xuXG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcblxuICAgICAgICAgICAgLy8gRm9yY2UgcmVmbG93XG4gICAgICAgICAgICB2b2lkIGVsLm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIGNvbnNvbGUuZ3JvdXAoJ0dyb3VwOiAnLCBncm91cCk7XG4gIH1cblxuXG4gIG9uQ2hpbGREcm9wbGlzdERyb3BlZChjZGtEcmFnRHJvcGV2ZW50OiBDZGtEcmFnRHJvcDxhbnk+KSB7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMik7XG4gIH1cblxuICAvLyBSb3dzIEdyb3VwaW5nIExvZ2ljIEdvZXMgSGVyZVxuXG4gIGdyb3VwRGF0YShkYXRhOiBhbnlbXSwgZ3JvdXBGaWVsZHM6IHN0cmluZ1tdKTogYW55W10ge1xuICAgIGxldCBkYXRhU2V0ID0gc3RydWN0dXJlZENsb25lKGRhdGEpO1xuICAgIGlmICghZ3JvdXBGaWVsZHMubGVuZ3RoKSByZXR1cm4gZGF0YTtcbiAgICBjb25zdCBbY3VycmVudEZpZWxkLCAuLi5yZXN0RmllbGRzXSA9IGdyb3VwRmllbGRzO1xuICAgIGNvbnN0IGdyb3VwZWRNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTZXQpIHtcbiAgICAgIGxldCBrZXlWYWx1ZSA9IGN1cnJlbnRGaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCBrKSA9PiBvYmo/LltrXSwgaXRlbSk7XG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcbiAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBpc19kZWxldGVkIGZpZWxkXG4gICAgICBpZiAoY3VycmVudEZpZWxkID09PSAnaXNfZGVsZXRlZCcgfHwgY3VycmVudEZpZWxkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2lzX2RlbGV0ZWQnKSkge1xuICAgICAgaWYgKGtleVZhbHVlID09PSB0cnVlIHx8IGtleVZhbHVlID09PSAndHJ1ZScpIHtcbiAgICAgICAgZ3JvdXBLZXkgPSAnQXJjaGl2ZWQnO1xuICAgICAgfSBlbHNlIGlmIChrZXlWYWx1ZSA9PT0gZmFsc2UgfHwga2V5VmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgZ3JvdXBLZXkgPSAnVW5hcmNoaXZlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cEtleSA9IFwiX0JsYW5rXCI7XG4gICAgICB9XG4gICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5VmFsdWUpKSB7XG4gICAgICAgIGlmIChrZXlWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBncm91cEtleSA9IFwiX0JsYW5rXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleVZhbHVlWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBrZXlWYWx1ZVxuICAgICAgICAgICAgLm1hcChvYmogPT4gKG9iaj8uZGVwYXJ0bWVudF9uYW1lIHx8IG9iai5yb2xlTmFtZSB8fCBvYmo/LmZ1bGxfbmFtZSkgPz8gXCJfQmxhbmtcIilcbiAgICAgICAgICAgIC5qb2luKFwiLFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBncm91cEtleSA9IGtleVZhbHVlXG4gICAgICAgICAgICAubWFwKHZhbCA9PiB2YWwgPz8gXCJfQmxhbmtcIilcbiAgICAgICAgICAgIC5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBcbiAgICAgICAvLyBDaGVjayBmb3IgRGF0ZSBvYmplY3QgT1IgZGF0ZSBzdHJpbmdcbiAgICBlbHNlIGlmIChrZXlWYWx1ZSBpbnN0YW5jZW9mIERhdGUgfHwgKHR5cGVvZiBrZXlWYWx1ZSA9PT0gJ3N0cmluZycgJiYgIWlzTmFOKERhdGUucGFyc2Uoa2V5VmFsdWUpKSkpIHtcbiAgICAgIGNvbnN0IGRhdGVPYmogPSBrZXlWYWx1ZSBpbnN0YW5jZW9mIERhdGUgPyBrZXlWYWx1ZSA6IG5ldyBEYXRlKGtleVZhbHVlKTtcbiAgICAgIGdyb3VwS2V5ID0gdGhpcy5jb21tb25TZXZpY2UuZm9ybWF0RGF0ZVZhbHVlKGRhdGVPYmosIHRoaXMuZGF0ZUZvcm1hdCB8fCAnZGQvTU0veXl5eScpO1xuICAgIH0gXG4gICAgIC8vICBIYW5kbGUgb2JqZWN0cyAobGlrZSB7aWQsIG5hbWUsIHZhbHVlfSlcbiAgICBlbHNlIGlmICh0eXBlb2Yga2V5VmFsdWUgPT09ICdvYmplY3QnICYmIGtleVZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleVZhbHVlKSkge1xuICAgICAgLy8gVHJ5IGNvbW1vbiBwcm9wZXJ0eSBuYW1lcyBmb3Igb2JqZWN0c1xuICAgICAgZ3JvdXBLZXkgPSBrZXlWYWx1ZS52YWx1ZSA/PyBcbiAgICAgICAgICAgICAgICAga2V5VmFsdWUubmFtZSA/PyBcbiAgICAgICAgICAgICAgICAga2V5VmFsdWUuaWQgPz8gXG4gICAgICAgICAgICAgICAgIGtleVZhbHVlLmxhYmVsID8/IFxuICAgICAgICAgICAgICAgICBrZXlWYWx1ZVtPYmplY3Qua2V5cyhrZXlWYWx1ZSlbMF1dID8/IFxuICAgICAgICAgICAgICAgICBcIl9CbGFua1wiO1xuICAgICAgXG4gICAgICAvLyBJZiBpdCdzIHN0aWxsIGFuIG9iamVjdCBhZnRlciBleHRyYWN0aW9uLCBjb252ZXJ0IHRvIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBncm91cEtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZ3JvdXBLZXkgPSBcIl9CbGFua1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBLZXkgPSB0aGlzLnRvVGl0bGVDYXNlKFN0cmluZyhncm91cEtleSkudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZ3JvdXBLZXkgPSBrZXlWYWx1ZSA/IHRoaXMudG9UaXRsZUNhc2UoU3RyaW5nKGtleVZhbHVlKS50cmltKCkpIDogXCJfQmxhbmtcIjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gaWYgKHR5cGVvZiBrZXlWYWx1ZSA9PT0gJ3N0cmluZycgJiYgIWlzTmFOKERhdGUucGFyc2Uoa2V5VmFsdWUpKSkge1xuICAgICAgLy8gICBjb25zdCBkYXRlT2JqID0gbmV3IERhdGUoa2V5VmFsdWUpO1xuICAgICAgLy8gICBncm91cEtleSA9IHRoaXMuY29tbW9uU2V2aWNlLmZvcm1hdERhdGVWYWx1ZShkYXRlT2JqLCB0aGlzLmRhdGVGb3JtYXQgfHwgJ2RkL01NL3l5eXknKTtcbiAgICAgIC8vIH1cblxuICAgICAgaWYgKCFncm91cGVkTWFwLmhhcyhncm91cEtleSkpIGdyb3VwZWRNYXAuc2V0KGdyb3VwS2V5LCBbXSk7XG4gICAgICBncm91cGVkTWFwLmdldChncm91cEtleSkhLnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3VwZWRNYXAuZW50cmllcygpKS5tYXAoKFtncm91cFZhbHVlLCBncm91cEl0ZW1zXSkgPT4gKHtcbiAgICAgIGlzR3JvdXA6IHRydWUsXG4gICAgICBncm91cEZpZWxkOiBjdXJyZW50RmllbGQsXG4gICAgICBncm91cFZhbHVlLFxuICAgICAgY2hpbGRyZW46IHRoaXMuZ3JvdXBEYXRhKGdyb3VwSXRlbXMsIHJlc3RGaWVsZHMpLFxuICAgICAgaXNFeHBhbmQ6IGZhbHNlLFxuICAgIH0pKTtcbiAgfVxuXG4gIHRvVGl0bGVDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgID8uc3BsaXQoJyAnKVxuICAgICAgPy5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgID8uam9pbignICcpO1xuICB9XG5cblxuICBjb3VudExlYWZSb3dzKGdyb3VwOiBhbnkpOiBudW1iZXIge1xuICAgIGlmICghZ3JvdXAuY2hpbGRyZW4gfHwgIWdyb3VwLmNoaWxkcmVuLmxlbmd0aCkgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gZ3JvdXAuY2hpbGRyZW4ucmVkdWNlKChjb3VudDogbnVtYmVyLCBjaGlsZDogYW55KSA9PiB7XG4gICAgICByZXR1cm4gY291bnQgKyAoY2hpbGQuaXNHcm91cCA/IHRoaXMuY291bnRMZWFmUm93cyhjaGlsZCkgOiAxKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIGlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlO1xuICB0b2dnbGVBY3RpdmVGaWx0ZXIoKSB7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSAhdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW47XG4gIH1cblxuICB0b2dnbGVBY3Rpb25zKHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlID09PSB0aGlzLmFjdGl2ZVRvcEJ1dHRvbikgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSB0eXBlO1xuICAgIGVsc2UgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSB0eXBlO1xuICAgIHRoaXMuYWN0aXZlU3ViQnV0dG9uID0gJyc7XG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhY3RpdmVTdWJCdXR0b24gPSAnJztcbiAgdG9nZ2xlU3ViQWN0aW9ucyh0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzVGFibGVQcmVzZXROb3RDaGFuZ2VkID8gICh0aGlzLnByZXNldE5hbWUgPSAnJykgOiAoIHRoaXMucHJlc2V0TmFtZSA9ICB0aGlzLnN0b3JlUHJlc2V0TmFtZSlcbiAgICBpZiAodHlwZSA9PT0gdGhpcy5hY3RpdmVTdWJCdXR0b24pIHRoaXMuYWN0aXZlU3ViQnV0dG9uID0gJyc7XG4gICAgZWxzZSB0aGlzLmFjdGl2ZVN1YkJ1dHRvbiA9IHR5cGU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9uc0Ryb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd0FjdGlvbnNEcm9wRG93biA9ICF0aGlzLnNob3dBY3Rpb25zRHJvcERvd247XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuXG4gIGFzeW5jIGNoYW5nZVRhYmxlTGF5b3V0KGV2ZW50OiBFdmVudCwgbGF5b3V0VHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgaWYgKHRhcmdldC5jaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSBsYXlvdXRUeXBlO1xuICAgICAgdGhpcy5zZXRUYWJsZUxheW91dChsYXlvdXRUeXBlKVxuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cyh0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvcCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICB9XG4gICAgdGhpcy5vbkZvbnRDaGFuZ2UoKVxuICB9XG5cbiAgc2V0VGFibGVMYXlvdXQobGF5b3V0VHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCFsYXlvdXRUeXBlKSByZXR1cm47XG4gICAgaWYgKGxheW91dFR5cGUgPT09ICdzbWFsbCcpIHtcbiAgICAgIHRoaXMucm93SGVpZ2h0ID0gMzY7XG4gICAgICB0aGlzLmhlYWRlclJvd0hlaWdodCA9IDQwO1xuICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRoaXMuYm9keVRleHRGb250c1NpemUgfHwgMTA7XG4gICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0aGlzLmhlYWRlclRleHRGb250c1NpemUgfHwgMTA7XG5cbiAgICB9IGVsc2UgaWYgKGxheW91dFR5cGUgPT09ICdtZWRpdW0nKSB7XG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDQ0O1xuICAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSA0NDtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE0O1xuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDE0O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93SGVpZ2h0ID0gNjA7XG4gICAgICB0aGlzLmhlYWRlclJvd0hlaWdodCA9IDUyO1xuICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRoaXMuYm9keVRleHRGb250c1NpemUgfHwgMTY7XG4gICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0aGlzLmhlYWRlclRleHRGb250c1NpemUgfHwgMTY7XG4gICAgfVxuICAgIC8vIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgfVxuXG4gIGdldCBzdGFydEluZGV4RGF0YSgpIHtcbiAgICByZXR1cm4gKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSkgKiB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQ7XG4gIH1cblxuICBnZXQgZW5kSW5kZXgoKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHRoaXMuc3RhcnRJbmRleCArIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCwgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0cyk7XG4gIH1cblxuICBnZXQgdmlzaWJsZVBhZ2VzKCk6IChudW1iZXIgfCBzdHJpbmcpW10ge1xuICAgIGNvbnN0IHBhZ2VzOiAobnVtYmVyIHwgc3RyaW5nKVtdID0gW107XG5cbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMgPD0gNykge1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXM7IGkrKykge1xuICAgICAgICBwYWdlcy5wdXNoKGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYWdlcy5wdXNoKDEpO1xuICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID4gMykge1xuICAgICAgICBwYWdlcy5wdXNoKCcuLi4nKTtcbiAgICAgIH1cbiAgICAgIGxldCBzdGFydCA9IE1hdGgubWF4KDIsIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSk7XG4gICAgICBsZXQgZW5kID0gTWF0aC5taW4odGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMgLSAxLCB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSArIDEpO1xuXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgcGFnZXMucHVzaChpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlIDwgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMgLSAyKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goJy4uLicpO1xuICAgICAgfVxuICAgICAgcGFnZXMucHVzaCh0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VzO1xuICB9XG5cblxuICBzZWFyY2hUZXh0Rm9yRmlsdGVyRHJvcERvd24gPSAnJztcbiAgdG9nZ2xlQ29sdW1uSW5GaWx0ZXJEcm9wZG93bihjb2w6IGFueSkge1xuXG4gIH1cblxuICByZW1vdmVDb2x1bW5Gcm9tRmlsdGVyKG9wdGlvbjogYW55KSB7XG5cbiAgfVxuXG4gIGhhbmRsZUJhY2tzcGFjZShldmVudDogRXZlbnQpIHtcbiAgICAvLyBJZiBzZWFyY2ggaXMgZW1wdHksIHJlbW92ZSBsYXN0IHRhZ1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0Rm9yRmlsdGVyRHJvcERvd24gJiYgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnNbdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKGxhc3QpO1xuICAgIH1cbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlck1lbnVlU2VhcmNoSW5wdXQnKSBmaWx0ZXJNZW51ZVNlYXJjaElucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PlxuICBAVmlld0NoaWxkKCdmaWx0ZXJNZW51ZVRleHRjaElucHV0JykgZmlsdGVyTWVudWVUZXh0Y2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD5cblxuICBvcGVuRmlsdGVyb25UaHJlZURvdHNDbGljayhjb2w6IGFueSkge1xuICAgIGlmIChjb2wudHlwZSA9PSAnaW1hZ2UnIHx8ICFjb2w/LnR5cGUgfHwgIWNvbC5pc19zZWFyY2hfYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXIgPSBjb2w7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSB0cnVlO1xuICAgIHRoaXMuYWRkRmlsdGVyQ29sdW1uSW5wdXQgPSAnJztcbiAgICBpZiAoY29sLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgICBjb25zdCBzYXZlZElkcyA9IGNvbD8ucXVlcnk/Ll9pZHMgfHwgW107XG4gICAgICBzYXZlZElkcy5mb3JFYWNoKChpZDogc3RyaW5nKSA9PiB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5hZGQoaWQpKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/LmZpbHRlcihcbiAgICAgICAgKG9wdGlvbjogYW55KSA9PiB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5oYXMob3B0aW9uPy5pZCB8fCBvcHRpb24/Ll9pZCB8fCBvcHRpb24pXG4gICAgICApO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlck1lbnVlU2VhcmNoSW5wdXQpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlck1lbnVlU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH0gZWxzZSBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnLCAndGltZSddLmluY2x1ZGVzKGNvbC50eXBlKSkge1xuICAgICAgdGhpcy5maXJzdENvbmRpdGlvbiA9IGNvbC5xdWVyeS5maXJzdF9jb25kaXRpb24gPyBjb2wucXVlcnkuZmlyc3RfY29uZGl0aW9uIDogKChjb2wudHlwZSA9PSAnZGF0ZScgfHwgY29sLnR5cGUgPT0gJ3RpbWUnIHx8IGNvbC50eXBlID09ICdudW1iZXInKSA/ICdlcXVhbCcgOiAnY29udGFpbicpO1xuICAgICAgdGhpcy5maXJzdFZhbHVlID0gY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgfHwgJyc7XG4gICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbD8ucXVlcnk/LmNvbmRpdGlvbiB8fCAnbm9uZSc7XG4gICAgICB0aGlzLnNlY29uZENvbmRpdGlvbiA9IGNvbD8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24gPyBjb2w/LnF1ZXJ5Py5zZWNvbmRfY29uZGl0aW9uIDogKChjb2wudHlwZSA9PSAnZGF0ZScgfHwgY29sLnR5cGUgPT0gJ3RpbWUnIHx8IGNvbC50eXBlID09ICdudW1iZXInKSA/ICdlcXVhbCcgOiAnY29udGFpbicpO1xuICAgICAgdGhpcy5zZWNvbmRWYWx1ZSA9IGNvbD8ucXVlcnk/LnNlY29uZF92YWx1ZSB8fCAnJztcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiggdGhpcy5maWx0ZXJNZW51ZVRleHRjaElucHV0KXtcbiAgICAgICAgICB0aGlzLmZpbHRlck1lbnVlVGV4dGNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpc0ZpbHRlck9wZW4gPSBmYWxzZVxuICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcjogYW55O1xuICBzaG93RmlsdGVycyA9IHRoaXMuc2hvd1NpZGVNZW51ID8gZmFsc2UgOiBmYWxzZTtcblxuXG4gIG9wZW5GaWx0ZXJGcm9tRGlzYWJsZWRTZWFyY2hlZElucHV0KGNvbDogYW55KSB7XG4gICAgaWYgKGNvbC50eXBlICE9PSAnZHJvcGRvd24nICYmIGNvbC50eXBlICE9PSAnYXJyYXknIHx8ICFjb2wuaXNfc2VhcmNoX2FibGUpIHJldHVybjtcbiAgICB0aGlzLm9wZW5GaWx0ZXIoY29sKTtcbiAgfVxuXG4gIG9wZW5GaWx0ZXIoY29sOiBhbnkpIHtcbiAgICBpZighY29sLmlzX3NlYXJjaF9hYmxlKSByZXR1cm47XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gY29sO1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbFxuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93biA9ICcnO1xuICAgIHRoaXMuYWRkRmlsdGVyQ29sdW1uSW5wdXQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyID0gY29sO1xuXG4gICAgaWYgKGNvbC50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbC50eXBlID09ICdhcnJheScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmNsZWFyKCk7XG4gICAgICBjb25zdCBzYXZlZElkcyA9IGNvbD8ucXVlcnk/Ll9pZHMgfHwgW107XG4gICAgICBzYXZlZElkcy5mb3JFYWNoKChpZDogc3RyaW5nKSA9PiB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5hZGQoaWQpKTtcblxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/LmZpbHRlcihcbiAgICAgICAgKG9wdGlvbjogYW55KSA9PiB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5oYXMob3B0aW9uPy5pZCB8fCBvcHRpb24/Ll9pZCB8fCBvcHRpb24pXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnLCAndGltZSddLmluY2x1ZGVzKGNvbC50eXBlKSkge1xuICAgICAgdGhpcy5maXJzdENvbmRpdGlvbiA9IGNvbD8ucXVlcnk/LmZpcnN0X2NvbmRpdGlvbiB8fCAoY29sLnR5cGUgPT0gJ251bWJlcicgfHwgY29sLnR5cGUgPT0gJ3RpbWUnIHx8IGNvbC50eXBlID09ICdkYXRlJykgPyAnZXF1YWwnIDogJ2NvbnRhaW4nO1xuICAgICAgdGhpcy5maXJzdFZhbHVlID0gY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgfHwgJyc7XG4gICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbD8ucXVlcnk/LmNvbmRpdGlvbiB8fCAnbm9uZSc7XG4gICAgICB0aGlzLnNlY29uZENvbmRpdGlvbiA9IGNvbD8ucXVlcnk/LnNlY29uZF9jb25kaXRpb24gfHwoY29sLnR5cGUgPT0gJ251bWJlcicgfHwgY29sLnR5cGUgPT0gJ3RpbWUnIHx8IGNvbC50eXBlID09ICdkYXRlJykgPyAnZXF1YWwnIDogJ2NvbnRhaW4nO1xuICAgICAgdGhpcy5zZWNvbmRWYWx1ZSA9IGNvbD8ucXVlcnk/LnNlY29uZF92YWx1ZSB8fCAnJztcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBmaXJzdFZhbHVlOiBhbnkgPSAnJztcbiAgZmlyc3RDb25kaXRpb24gPSAnJztcbiAgc2Vjb25kVmFsdWU6IGFueSA9ICcnO1xuICBzZWNvbmRDb25kaXRpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjb25kaXRpb246IHN0cmluZyB8IG51bGwgPSAnJztcblxuICByZXNldFRleHRGaWx0ZXJDaGFuZ2VzKCkge1xuICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPSAnY29udGFpbic7XG4gICAgdGhpcy5maXJzdFZhbHVlID0gJyc7XG4gICAgdGhpcy5jb25kaXRpb24gPSAnbm9uZSc7XG4gICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2Vjb25kVmFsdWUgPSAnJztcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgfVxuXG4gIHRvZ2dsZUFsbFZhbHVzU2VsZWN0aW9uSW5Ecm9wZG93bkZpbHRlcihjb2x1bW46IGFueSkge1xuXG4gIH1cblxuXG4gIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogYW55W10gPSBbXVxuXG4gIGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKG9wdGlvbjogYW55KSB7XG4gICAgZGVidWdnZXJcbiAgICBjb25zdCBpZCA9IG9wdGlvbi5pZCB8fCBvcHRpb24uX2lkIHx8IG9wdGlvbjtcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWUuZmlsdGVyKChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbi5pZCB8fCBvcHRpb24uX2lkIHx8IG9wdGlvbikpXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXJDaGFuZ2VzKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucyEubGVuZ3RoID0gMDtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gJyc7XG4gICAgLy8gY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgLy8gY29uc29sZS5sb2coXCJGaWx0ZXJlZCBDb2x1bW5zIEFyZTogXCIsIGZpbHRlcmVkQ29sdW1ucyk7XG4gIH1cblxuICBhcHBseURyb3Bkb3duRmlsdGVyKCkge1xuICAgICAgICAgLy8gLS0tIFZBTElEQVRJT04gQkVGT1JFIEFOWVRISU5HIC0tLVxuICBjb25zdCBjb2x1bW5zcyA9IHRoaXMuZmluZENvbHVtbih0aGlzLmNvbHVtbnMsIHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXIuZmllbGQpO1xuICBpZiAoIWNvbHVtbnNzKSByZXR1cm47XG5cbiAgaWYgKGNvbHVtbnNzLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uc3MudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgIGlmICghdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgfHwgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZScsICd0aW1lJ10uaW5jbHVkZXMoY29sdW1uc3MudHlwZSkpIHtcbiAgICBjb25zdCBpc0VtcHR5ID1cbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdGhpcy5maXJzdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gJyc7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAgIHRoaXMuY2xvc2VBbGxGaWx0ZXJNZW51cygpO1xuICAgIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmZpbmRDb2x1bW4odGhpcy5jb2x1bW5zLCB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyLmZpZWxkKTtcbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgICBjb2x1bW4ucXVlcnkgPSBjb2x1bW4ucXVlcnkgfHwge307XG4gICAgICAgIGNvbHVtbi5xdWVyeS5faWRzID0gY29sdW1uLnF1ZXJ5Ll9pZHMgfHwgW107XG5cbiAgICAgICAgLy8gUmVtb3ZlIHN0YWxlIElEcyAobm90IHByZXNlbnQgaW4gU2V0KVxuICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcyA9IGNvbHVtbi5xdWVyeS5faWRzLmZpbHRlcihcbiAgICAgICAgICAoaWQ6IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKGlkKSAgIC8vIDwtLSB1c2UgLmhhcygpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQWRkIG5ldyBvbmVzIGlmIG1pc3NpbmdcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgaWYgKCFjb2x1bW4ucXVlcnkuX2lkcy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5xdWVyeS5faWRzLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIH0gZWxzZSBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnLCAndGltZSddLmluY2x1ZGVzKGNvbHVtbi50eXBlKSkge1xuICAgICAgICBjb2x1bW4ucXVlcnkgPSB7XG4gICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiB0aGlzLmZpcnN0Q29uZGl0aW9uIHx8ICdjb250YWluJyxcbiAgICAgICAgICBmaXJzdF92YWx1ZTogdGhpcy5maXJzdFZhbHVlIHx8IG51bGwsXG4gICAgICAgICAgY29uZGl0aW9uOiB0aGlzLnNlY29uZFZhbHVlID8gdGhpcy5jb25kaXRpb24gOiAnbm9uZScsXG4gICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogdGhpcy5zZWNvbmRWYWx1ZSA/IHRoaXMuc2Vjb25kQ29uZGl0aW9uIDogbnVsbCxcbiAgICAgICAgICBzZWNvbmRfdmFsdWU6IHRoaXMuc2Vjb25kVmFsdWUgfHwgbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgc2VhcmNoOiBjb2x1bW4uc2VhcmNoLFxuICAgICAgcXVlcnk6IGNvbHVtbi5xdWVyeSxcbiAgICAgIHR5cGU6IGNvbHVtbi50eXBlLFxuICAgICAgX2lkczogY29sdW1uLl9pZHNcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5wdXNoKGZpbHRlcik7XG4gICAgfVxuXG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5wcml2YXRlIGZpbmRDb2x1bW4oY29sdW1uczogYW55W10sIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgaWYgKGNvbC5maWVsZCA9PT0gZmllbGQpIHJldHVybiBjb2w7XG4gICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZENvbHVtbihjb2wuY2hpbGRyZW4sIGZpZWxkKTtcbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiAgLy8gYXBwbHlGaWx0ZXJGcm9tRmlsdGVyUm93KGNvbHVtbjogYW55KSB7XG4gIC8vICAgY29uc3QgZmlsdGVyID0ge1xuICAvLyAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgLy8gICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgLy8gICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gIC8vICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgLy8gICAgIF9pZHM6IGNvbHVtbi5faWRzXG4gIC8vICAgfTtcbiAgLy8gICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAvLyAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgLy8gICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAvLyAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gIC8vICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgLy8gICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAvLyAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gIC8vIH1cblxuICBpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjb2x1bW46IGFueSkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcnNDb25maWc/LnNvbWUoY29sID0+IGNvbC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgfVxuXG4gIC8vIFNpZGUgRmlsdGVycyBMb2dpYyBpcyBoZXJlXG5cbiAgdG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sOiBhbnksIGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8uY2hlY2tlZDtcblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBjb2wucXVlcnkuX2lkcyA9IGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5tYXAoXG4gICAgICAgIChvcHQ6IGFueSkgPT4gb3B0LmlkIHx8IG9wdC5faWQgfHwgb3B0XG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgPSBuZXcgU2V0PHN0cmluZz4oY29sLnF1ZXJ5Ll9pZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wucXVlcnkuX2lkcyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuXG4gIGlzQWxsU2lkZUZpbHRlck9wdGlvbnNTZWxlY3RlZChjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghY29sPy5xdWVyeT8uX2lkcyB8fCAhQXJyYXkuaXNBcnJheShjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb2wucXVlcnkuX2lkcy5sZW5ndGggPT09IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUubGVuZ3RoO1xuICB9XG5cbiAgb25PcHRpb25Ub2dnbGUoY29sOiBhbnksIG9wdGlvbjogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uSWQgPSBvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb247XG4gICAgaWYgKCFjb2wucXVlcnkuX2lkcykge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICB9XG4gICAgY29uc3QgaWR4ID0gY29sLnF1ZXJ5Ll9pZHMuaW5kZXhPZihvcHRpb25JZCk7XG4gICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICBjb2wucXVlcnkuX2lkcy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMucHVzaChvcHRpb25JZCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuXG4gIHJlc2V0U2lkZUZpbHRlcihjb2w6IGFueSkge1xuICAgIGNvbnN0IHJlc2V0Q29sdW1uUmVjdXJzaXZlbHkgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0gY29sLmZpZWxkKSB7XG4gICAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgICAgX2lkczogW10sXG4gICAgICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbj8uY2hpbGRyZW4pICYmIGNvbHVtbj8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGlmIChyZXNldENvbHVtblJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgcmVzZXRDb2x1bW5SZWN1cnNpdmVseSh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maWx0ZXJzQ29uZmlnLmZpbmRJbmRleCgoZjogYW55KSA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuICBjbGVhckFsbEZpbHRlcnMoc2hvdWxkVXBkYXRlQ29uZmlnTGlzdGluZyA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1ucyA9IFtdO1xuICAgIHRoaXMudGFibGVWaWV3Py5mb3JFYWNoKChlbGUpID0+IHsgZWxlLmlzX3RlbXAgPSBmYWxzZSB9KTtcbiAgICBjb25zdCByZXNldEFsbFJlY3Vyc2l2ZWx5ID0gKGNvbHVtbnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2x1bW4ucXVlcnkpIHtcbiAgICAgICAgICBjb2x1bW4ucXVlcnkgPSB7XG4gICAgICAgICAgICBfaWRzOiBbXSxcbiAgICAgICAgICAgIGZpcnN0X2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxuICAgICAgICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICAgICAgICBjb25kaXRpb246ICdub25lJyxcbiAgICAgICAgICAgIHNlY29uZF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIHNlY29uZF92YWx1ZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uPy5jaGlsZHJlbikgJiYgY29sdW1uLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHJlc2V0QWxsUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmVzZXRBbGxSZWN1cnNpdmVseSh0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJzQ29uZmlnID0gW107XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgIC8vIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZmFsc2U7XG4gICAgLy8gdGhpcy5mb250RmFpbWx5ID0gJ0ludGVyJztcbiAgICAvLyB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSAxNDtcbiAgICAvLyB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSAnbWVkaXVtZCc7XG4gICAgLy8gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IDE0O1xuICAgIC8vIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9ICcnO1xuICAgIGNvbnN0IGV2ZW50ID0geyBldmVudFR5cGU6ICdyZXNldCcsIGRhdGE6IHsgdGFibGVUeXBlOiB0aGlzLnRhYmxlVHlwZSB9IH07XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogW10sXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgaWYoIXNob3VsZFVwZGF0ZUNvbmZpZ0xpc3Rpbmcpe1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH1cblxuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgICAgaWYoIXNob3VsZFVwZGF0ZUNvbmZpZ0xpc3Rpbmcpe1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9LCAzMDApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgYXBwbHlTaWRlRmlsdGVyKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4ucXVlcnkuZmlyc3RfdmFsdWUgJiYgIWNvbHVtbj8ucXVlcnk/Ll9pZHMubGVuZ3RoKSByZXR1cm47XG4gICAgLy8gQ2xvc2UgZXhwYW5kZWQgcm93cyBiZWZvcmUgYXBwbHlpbmcgc2lkZSBmaWx0ZXJcbiAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgIF9pZHM6IGNvbHVtbi5faWRzIHx8IFtdXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCBuZXcgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuICByZW1vdmVTaWRlRmlsdGVyKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4ucXVlcnkuZmlyc3RfdmFsdWUgJiYgIWNvbHVtbj8ucXVlcnk/Ll9pZHMubGVuZ3RoKSByZXR1cm47XG4gICAgLy8gQ2xvc2UgZXhwYW5kZWQgcm93cyBiZWZvcmUgcmVtb3ZpbmcgZmlsdGVyXG4gICAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShleGlzdGluZ0luZGV4LCAxKTtcbiAgICB9XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgY29sbGFwc2VBbGxFeHBhbmRlZENlbGxzKCkge1xuICAgIGlmICh0aGlzLmV4cGFuZGVkQ2VsbHM/LnNpemUgPiAwKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgdHJhY2tCeUZpZWxkKGluZGV4OiBudW1iZXIsIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29sPy5maWVsZDtcbiAgfVxuXG4gIGdldCBhY3RpdmVGaWx0ZXJlZENvbHVtbnMoKTogYW55W10ge1xuICAgIGNvbnN0IGNvbGxlY3RGaWx0ZXJlZCA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGNvbHVtbnM/LmZvckVhY2goY29sID0+IHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChjb2xsZWN0RmlsdGVyZWQoY29sLmNoaWxkcmVuKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0luRmlsdGVyc0NvbmZpZyA9IHRoaXMuZmlsdGVyc0NvbmZpZy5zb21lKGYgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcbiAgICAgICAgaWYgKGlzSW5GaWx0ZXJzQ29uZmlnKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29sKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiBjb2xsZWN0RmlsdGVyZWQodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG5cblxuXG4gIHRvZ2dsZU9wZW5GaWx0ZXIoKSB7XG4gICAgdGhpcy5zaG93RmlsdGVycyA9ICF0aGlzLnNob3dGaWx0ZXJzO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuXG4gIC8vIENlbGwgRWRpdGluZyBXb3JrIHN0YXJ0IGhlcmVcblxuICBlZGl0aW5nS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlQ2VsbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgc2V0QWN0aXZlQ2VsbChyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmFjdGl2ZUNlbGwgPSAoKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIGNvbHVtbi5maWVsZCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNBY3RpdmVDZWxsKHJvdzogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUNlbGwgPT09ICgocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ3RleHRBcmVhZElucHV0JykgdGV4dEFyZWFkSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+O1xuICBtZW51UmVhZHkgPSBmYWxzZTtcbiAgZW5hYmxlRWRpdChyb3c6IGFueSwgY29sdW1uOiBhbnksIGNsaWNrZWRGcm9tRGV0YWlsc0JveCA9IGZhbHNlLCBjZWxsQ29udGFpbmVyPzogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLmVkaXRpbkRyb3Bkb3duU2VhcmNoID0gJyc7XG4gICAgaWYgKHJvdz8uX192aXJ0dWFsSW5kZXggPT0gMCkgcmV0dXJuO1xuICAgIGlmIChjb2x1bW4udHlwZSA9PSAnaW1hZ2UnIHx8ICFjb2x1bW4/LmlzX2VkaXRhYmxlKSByZXR1cm47XG4gICAgdGhpcy5tZW51UmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSAoKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIGNvbHVtbi5maWVsZCk7XG5cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkcm9wZG93bid8fCBjb2x1bW4udHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZHJvcGRvd25NZW51ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNlbGwtZWRpdGluZy1kcm9wZG93bi1tZW51JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChkcm9wZG93bk1lbnUpIHtcbiAgICAgICAgICBjb25zdCByZWN0ID0gZHJvcGRvd25NZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IHRoaXMuZGF0YUdyaWRDb250YWluZXIubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgICAgaWYgKHJlY3QuYm90dG9tID4gd2luZG93SGVpZ2h0KSB7XG4gICAgICAgICAgICBkcm9wZG93bk1lbnUuc3R5bGUudG9wID0gYC0ke3JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHJvcGRvd25NZW51LnN0eWxlLnRvcCA9ICcxMDAlJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZW51UmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWNsaWNrZWRGcm9tRGV0YWlsc0JveCAmJiB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sdW1uLmZpZWxkKT8ubGVuZ3RoID4gNTApIHtcbiAgICAgIHRoaXMudG9nZ2xlRXhwYW5kT2ZMb25nQ2VsbFRleHQocm93LCBjb2x1bW4sIHRoaXMuY29sdW1ucywgZmFsc2UpXG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFjZWxsQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IGNlbGxDb250YWluZXIucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSdcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgICAgIChmb2N1c2FibGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmZvbnRTaXplID0gJzE2cHgnO1xuICAgICAgICBmb2N1c2FibGUuZm9jdXMoKTtcblxuICAgICAgICBpZiAoZm9jdXNhYmxlIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBmb2N1c2FibGUgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICAgICAgZm9jdXNhYmxlLnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGRpc2FibGVFZGl0KHJvdzogYW55LCBjb2x1bW46IGFueSwgY29udHJvbD86IGFueSkge1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgaWYgKCF0aGlzLmVkaXRpbmdLZXkpIHJldHVyblxuICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLnByaXN0aW5lKSB7XG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gbnVsbDtcbiAgICByZXR1cm47XG4gIH1cbiAgICB0aGlzLmNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShyb3csIGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZF0pXG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gbnVsbDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4/LmZpZWxkKTtcbiAgICBpZiAoIWN1cnJlbnQgfHwgKGNvbHVtbi50eXBlID09ICdlbWFpbCcgJiYgIXRoaXMudmFsaWRhdGVFbWFpbChjdXJyZW50KSkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsUm93ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQuZmluZChpdGVtID0+IGl0ZW0uaWQgPT0gcm93LmlkIHx8IGl0ZW0uaWQgPT0gcm93Ll9pZCk7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUob3JpZ2luYWxSb3csIGNvbHVtbj8uZmllbGQpO1xuICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbiwgb3JpZ2luYWwpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGVtYWlsUmVnZXggPSAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC87XG4gIHZhbGlkYXRlRW1haWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVtYWlsUmVnZXgudGVzdCh2YWx1ZSk7XG4gIH1cbiAgYWxsb3dPbmx5TnVtYmVycyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQud2hpY2ggPyBldmVudC53aGljaCA6IGV2ZW50LmtleUNvZGU7XG4gICAgaWYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1Nykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBjaGVja1Jvd0VkaXRBbmRFbWl0VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZT86IGFueSkge1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsUm93ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQ/LmZpbmQoXG4gICAgICAocjogYW55KSA9PiByLmlkID09PSByb3cuaWQgfHwgci5faWQgPT09IHJvdy5faWRcbiAgICApO1xuICAgIGlmICghb3JpZ2luYWxSb3cpIHJldHVybjtcbiAgICAvLyBjb25zdCBjbGVhbiA9IChvYmo6IGFueSkgPT4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcbiAgICAvLyBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sdW1uLmZpZWxkKTtcbiAgICAvLyBjb25zdCBvcmlnaW5hbFZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShvcmlnaW5hbFJvdywgY29sdW1uLmZpZWxkKTtcbiAgICBjb25zdCBvcmlnaW5WYWx1ZSA9IHRoaXMuZGF0YVNldC5maW5kKChyOiBhbnkpID0+IHIuaWQgPT09IHJvdy5pZCk7XG4gICAgY29uc3QgY2hhbmdlZFZhbHVlID0gb3JpZ2luVmFsdWUudmVyaWZpZWQgPT0gdmFsdWU7XG4gICAgLy8gaWYgKGNoYW5nZWRWYWx1ZSkgcmV0dXJuO1xuICAgIC8vIGNvbnN0IGhhc0NoYW5nZWQgPSB0aGlzLmNvbW1vblNldmljZS5oYXNGaWVsZENoYW5nZWQoY3VycmVudFZhbHVlLCBvcmlnaW5hbFZhbHVlLCBjb2x1bW4udHlwZSk7XG4gICAgLy8gaWYgKCFoYXNDaGFuZ2VkKSByZXR1cm47XG4gICAgLy8gdGhpcy5zZXROZXN0ZWRWYWx1ZShvcmlnaW5hbFJvdywgY29sdW1uLCB2YWx1ZSk7XG5cbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgZGF0YTogeyAuLi5vcmlnaW5WYWx1ZSB9LFxuICAgICAgZXZlbnRUeXBlOiAnb25DZWxsRWRpdCcsXG4gICAgICB2YWx1ZTogY29sdW1uLnR5cGUgIT09ICdhcnJheScgPyB2YWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB2YWx1ZXM6IGNvbHVtbi50eXBlID09ICdhcnJheScgPyB2YWx1ZSA6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoc2VuZE9iailcbiAgICAvLyB9LCAxMDApO1xuICB9XG5cblxuICBpc0VkaXRpbmcocm93OiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ0tleSA9PT0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2wuZmllbGQpO1xuICB9XG5cbiAgc2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIGNvbHVtbjogYW55LCBvcHRpb246IGFueSwgY2FsbGVkRnJvbUlucHV0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICBjb25zdCBwYXRoID0gY29sdW1uLmZpZWxkO1xuICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgbGFzdEtleSA9IGtleXMucG9wKCk7XG4gICAgY29uc3QgcGFyZW50ID0ga2V5cy5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4gYWNjW2tleV0gPz89IHt9LCBvYmopO1xuXG4gICAgaWYgKHBhcmVudCAmJiBsYXN0S2V5KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pKSB7XG4gICAgICAgIGNvbnN0IGxvb2t1cCA9IGNvbHVtbi5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfHwgW107XG4gICAgICAgIHBhcmVudFtsYXN0S2V5XSA9IG9wdGlvbi5tYXAoc2VsZWN0ZWRJdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gdHlwZW9mIHNlbGVjdGVkSXRlbSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gc2VsZWN0ZWRJdGVtLmlkID8/IHNlbGVjdGVkSXRlbS5faWQgPz8gc2VsZWN0ZWRJdGVtLnZhbHVlID8/IHNlbGVjdGVkSXRlbS5uYW1lID8/IHNlbGVjdGVkSXRlbVxuICAgICAgICAgICAgOiBzZWxlY3RlZEl0ZW07XG5cbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGxvb2t1cC5maW5kKChvcHQ6IGFueSkgPT5cbiAgICAgICAgICAgIChvcHQuX2lkICYmIG9wdC5faWQgPT09IHNlbGVjdGVkSWQpIHx8IChvcHQuaWQgJiYgb3B0LmlkID09PSBzZWxlY3RlZElkKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4gbWF0Y2ggPyB7IC4uLm1hdGNoIH0gOiB7IGlkOiBzZWxlY3RlZElkLCB2YWx1ZTogc2VsZWN0ZWRJZCB9O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGxvb2t1cCA9IGNvbHVtbi5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfHwgW107XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWQgPSBvcHRpb24uaWQgPz8gb3B0aW9uLl9pZCA/PyBvcHRpb24udmFsdWUgPz8gb3B0aW9uLm5hbWUgPz8gb3B0aW9uO1xuICAgICAgICBjb25zdCBtYXRjaCA9IGxvb2t1cC5maW5kKChvcHQ6IGFueSkgPT4gKG9wdC5faWQgJiYgb3B0Ll9pZCA9PT0gc2VsZWN0ZWRJZCkgfHwgKG9wdC5pZCAmJiBvcHQuaWQgPT09IHNlbGVjdGVkSWQpKTtcblxuICAgICAgICBwYXJlbnRbbGFzdEtleV0gPSBtYXRjaCA/IHsgLi4ubWF0Y2ggfSA6IHsgaWQ6IHNlbGVjdGVkSWQsIHZhbHVlOiBzZWxlY3RlZElkIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnRbbGFzdEtleV0gPSB7IGlkOiBvcHRpb24sIHZhbHVlOiBvcHRpb24gfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcmlnaW5hbERhdGFTZXQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLm9yaWdpbmFsRGF0YVNldCkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsUm93SW5kZXggPSB0aGlzLm9yaWdpbmFsRGF0YVNldC5maW5kSW5kZXgociA9PlxuICAgICAgICByLmlkID09PSBvYmouaWQgfHwgci5faWQgPT09IG9iai5faWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luYWxSb3dJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxQYXJlbnQgPSBrZXlzLnJlZHVjZSgoYWNjOiBhbnksIGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PiBhY2Nba2V5XSA/Pz0ge30sIHRoaXMub3JpZ2luYWxEYXRhU2V0W29yaWdpbmFsUm93SW5kZXhdKTtcbiAgICAgICAgaWYgKG9yaWdpbmFsUGFyZW50ICYmIGxhc3RLZXkpIHtcbiAgICAgICAgICBvcmlnaW5hbFBhcmVudFtsYXN0S2V5XSA9IHBhcmVudFtsYXN0S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyAz77iP4oOjIFVwZGF0ZSBjdXJyZW50IGRhdGFzZXRcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgaWYgKHRoaXMuZGF0YVNldCAmJiBBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNldCkpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXRSb3dJbmRleCA9IHRoaXMuZGF0YVNldC5maW5kSW5kZXgociA9PlxuICAgICAgICByLmlkID09PSBvYmouaWQgfHwgci5faWQgPT09IG9iai5faWRcbiAgICAgICk7XG4gICAgICBpZiAoZGF0YXNldFJvd0luZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBkYXRhc2V0UGFyZW50ID0ga2V5cy5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4gYWNjW2tleV0gPz89IHt9LCB0aGlzLmRhdGFTZXRbZGF0YXNldFJvd0luZGV4XSk7XG4gICAgICAgIGlmIChkYXRhc2V0UGFyZW50ICYmIGxhc3RLZXkpIHtcbiAgICAgICAgICBkYXRhc2V0UGFyZW50W2xhc3RLZXldID0gcGFyZW50W2xhc3RLZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhbGxlZEZyb21JbnB1dCkge1xuICAgICAgdGhpcy5jaGVja1Jvd0VkaXRBbmRFbWl0VmFsdWUob2JqLCBjb2x1bW4sIG9wdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuXG4gIC8vIE11bHRpcGxlIHNlbGVjdCBFZGl0aW5nIGxvZ2ljIGltcGxlbWVudGVkIGhlcmVcblxuICBhcnJheVRlbXBNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG5cbiAgcHJpdmF0ZSBhcnJheUtleShyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtyb3cuaWQgfHwgcm93Ll9pZH1fJHtjb2wuZmllbGR9YDtcbiAgfVxuXG4gIGdldEFycmF5T3B0aW9uSWQob3B0aW9uOiBhbnkpOiBhbnkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBvcHRpb24uaWQgPz8gb3B0aW9uLl9pZDtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbjtcbiAgfVxuXG4gIGdldEFycmF5T3B0aW9uTGFiZWwob3B0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBvcHRpb24gIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBvcHRpb24udmFsdWUgPz8gb3B0aW9uLm5hbWUgPz8gJyc7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcob3B0aW9uKTtcbiAgfVxuXG4gIGdldEFycmF5VGVtcChyb3c6IGFueSwgY29sOiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5hcnJheUtleShyb3csIGNvbCk7XG5cbiAgICBpZiAoIXRoaXMuYXJyYXlUZW1wTWFwLmhhcyhrZXkpKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk7XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpXG4gICAgICAgID8gY3VycmVudC5tYXAodiA9PiB0aGlzLmdldEFycmF5T3B0aW9uSWQodikpXG4gICAgICAgIDogW107XG5cbiAgICAgIHRoaXMuYXJyYXlUZW1wTWFwLnNldChrZXksIG5vcm1hbGl6ZWQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFycmF5VGVtcE1hcC5nZXQoa2V5KSE7XG4gIH1cblxuXG4gIGlzQXJyYXlTZWxlY3RlZChyb3c6IGFueSwgY29sOiBhbnksIG9wdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldEFycmF5T3B0aW9uSWQob3B0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5nZXRBcnJheVRlbXAocm93LCBjb2wpLmluY2x1ZGVzKGlkKTtcbiAgfVxuXG4gIHRvZ2dsZUFycmF5VGVtcChyb3c6IGFueSwgY29sOiBhbnksIG9wdGlvbjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldEFycmF5T3B0aW9uSWQob3B0aW9uKTtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5nZXRBcnJheVRlbXAocm93LCBjb2wpO1xuXG4gICAgdGhpcy5hcnJheVRlbXBNYXAuc2V0KFxuICAgICAgdGhpcy5hcnJheUtleShyb3csIGNvbCksXG4gICAgICBsaXN0LmluY2x1ZGVzKGlkKSA/IGxpc3QuZmlsdGVyKHYgPT4gdiAhPT0gaWQpIDogWy4uLmxpc3QsIGlkXVxuICAgICk7XG4gIH1cblxuICBjb21taXRBcnJheShyb3c6IGFueSwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLmdldEFycmF5VGVtcChyb3csIGNvbCk7XG4gICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIGNvbCwgaWRzLCB0cnVlKTtcbiAgfVxuXG5cbiAgb25BcnJheUJsdXIocm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jb21taXRBcnJheShyb3csIGNvbCk7XG4gIH1cblxuXG4gIGNsZWFudXBBcnJheShyb3c6IGFueSwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmFycmF5VGVtcE1hcC5kZWxldGUodGhpcy5hcnJheUtleShyb3csIGNvbCkpO1xuICAgIHRoaXMuZWRpdGluZ0tleSA9IG51bGw7XG4gIH1cblxuXG4gIGRpc3BsYXlBcnJheVZhbHVlcyhpZHM6IGFueVtdLCBjb2w/OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghY29sKSByZXR1cm4gaWRzLmpvaW4oJywgJyk7XG5cbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPGFueSwgYW55PigpO1xuICAgIChjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdKS5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xuICAgICAgbWFwLnNldCh0aGlzLmdldEFycmF5T3B0aW9uSWQob3B0KSwgb3B0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHNcbiAgICAgIC5tYXAoaWQgPT4gbWFwLmdldChpZCk/LnZhbHVlID8/IG1hcC5nZXQoaWQpPy5uYW1lID8/IGlkKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBkaXNwbGF5QXJyYXlMYWJlbHMocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLmdldEFycmF5VGVtcChyb3csIGNvbCk7XG5cbiAgICBpZiAoIWlkcy5sZW5ndGgpIHJldHVybiAnJztcblxuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8YW55LCBhbnk+KCk7XG4gICAgKGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfHwgW10pLmZvckVhY2goKG9wdDogYW55KSA9PiB7XG4gICAgICBtYXAuc2V0KHRoaXMuZ2V0QXJyYXlPcHRpb25JZChvcHQpLCBvcHQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkc1xuICAgICAgLm1hcChpZCA9PiBtYXAuZ2V0KGlkKT8udmFsdWUgPz8gbWFwLmdldChpZCk/Lm5hbWUgPz8gaWQpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG5cblxuXG5cbiAgZ29Ub1BhZ2UocGFnZTogYW55KSB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZz8ucGFnZSA9PSBwYWdlKSByZXR1cm47XG4gICAgaWYgKHBhZ2UgPCAxIHx8IHBhZ2UgPiB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxQYWdlcykgcmV0dXJuO1xuICAgIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID0gcGFnZTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBsaW1pdDogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0LFxuICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ3BhZ2VDaGFuZ2UnLFxuICAgIH07XG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZSgpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA9IDE7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICBvYmo6IHtcbiAgICAgICAgICBsaW1pdDogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0LFxuICAgICAgICAgIHBhZ2U6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlLFxuICAgICAgICB9LFxuICAgICAgICBldmVudFR5cGU6ICdwYWdlQ2hhbmdlJyxcbiAgICAgIH07XG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuICAgIH0sIDcwMCk7XG4gIH1cblxuICBhY3Rpb25QcmVzZXQoZGF0YTogYW55LCB0eXBlOiBhbnkpIHtcbiAgICBkYXRhLmNvbHVtbnMgPSBkYXRhPy5jb2x1bW5zPy5tYXAoKHsgX2lkLCBmaWx0ZXJWYWx1ZSwgc2VhcmNoLCBjb2x1bW5fZHJvcGRvd25fdmFsdWUsIHF1ZXJ5LCBfX3R5cGVuYW1lLCAuLi5yZXN0IH06IGFueSkgPT4gcmVzdCk7XG4gICAgdGhpcy50YWJsZVZpZXc/LmZvckVhY2goKGVsZSkgPT4geyBlbGUuaXNfdGVtcCA9IGZhbHNlIH0pO1xuXG4gICAge1xuICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IGRhdGEuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplLFxuICAgICAgICB0aGlzLmZvbnRGYWltbHkgPSBkYXRhLmNvbmZpZy5mb250RmFpbWx5LFxuICAgICAgICBkYXRhPy5maWx0ZXJzPy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBkZWxldGUgZWxlbWVudC5fX3R5cGVuYW1lO1xuICAgICAgICAgIGlmIChlbGVtZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICBkZWxldGUgZWxlbWVudC5xdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0eXBlb2YgZWxlbWVudC5xdWVyeSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgZWxlbWVudC5xdWVyeSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlbGVtZW50LnF1ZXJ5KS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBlbGVtZW50LnF1ZXJ5ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gZGF0YS5jb25maWcuaGVhZGVyVGV4dEZvbnRzU2l6ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gZGF0YS5jb25maWcuc2VsZWN0ZWRUYWJsZUxheW91dCxcbiAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSBkYXRhLmNvbmZpZy5zaG93VmVydGljYWxCb3JkZXIsXG4gICAgICAgIHRoaXMuY3VycmVudElkRm9yVXBkYXRlUHJlc2V0ID0gZGF0YS5pZDtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZyA9IGRhdGEuZmlsdGVycztcbiAgICB9XG4gICAgZGVsZXRlIGRhdGE/Ll9fdHlwZW5hbWU7XG4gICAgZGVsZXRlIGRhdGE/LmlzX3RlbXA7XG4gICAgZGVsZXRlIGRhdGE/LmNvbmZpZy5fX3R5cGVuYW1lO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IHR5cGVcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgfVxuXG4gIGN1cnJlbnRJZEZvclVwZGF0ZVByZXNldCA9ICcnO1xuICBjdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGU6IGFueTtcbiAgdGVtcF9zdGF0ZSA9IHtcbiAgICBpZDogJycsXG4gICAgaXNfdGVtcDogZmFsc2VcbiAgfVxuICBhc3luYyBzZWxlY3RGaWx0ZXIoZGF0YTogYW55KSB7XG4gICAgdGhpcy50ZW1wX3N0YXRlID0ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBpc190ZW1wOiB0cnVlXG4gICAgfVxuICAgIHRoaXMudGFibGVWaWV3Py5mb3JFYWNoKChlbGUpID0+IHsgZWxlLmlzX3RlbXAgPSBmYWxzZSB9KTtcbiAgICB0aGlzLnRhYmxlVmlldyA9IHRoaXMudGFibGVWaWV3Lm1hcChpdGVtID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgaXNfdGVtcDogaXRlbS5pZCA9PSBkYXRhPy5pZFxuICAgIH0pKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBkYXRhLmNvbHVtbnM7XG4gICAge1xuICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IGRhdGEuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplLFxuICAgICAgICB0aGlzLmZvbnRGYWltbHkgPSBkYXRhLmNvbmZpZy5mb250RmFpbWx5LFxuICAgICAgICBkYXRhLmZpbHRlcnMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGVsZW1lbnQuX190eXBlbmFtZTtcblxuICAgICAgICAgIGlmIChlbGVtZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICBkZWxldGUgZWxlbWVudC5xdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0eXBlb2YgZWxlbWVudC5xdWVyeSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgZWxlbWVudC5xdWVyeSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlbGVtZW50LnF1ZXJ5KS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBlbGVtZW50LnF1ZXJ5ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyB0aGlzLmdsb2JhbFNlYXJjaCA9IGRhdGEuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplLFxuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gZGF0YS5jb25maWcuaGVhZGVyVGV4dEZvbnRzU2l6ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gZGF0YS5jb25maWcuc2VsZWN0ZWRUYWJsZUxheW91dCxcbiAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSBkYXRhLmNvbmZpZy5zaG93VmVydGljYWxCb3JkZXIsXG4gICAgICAgIHRoaXMuY3VycmVudElkRm9yVXBkYXRlUHJlc2V0ID0gZGF0YS5pZDtcbiAgICAgIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlID0gc3RydWN0dXJlZENsb25lKGRhdGEpO1xuICAgICAgdGhpcy5wcmVzZXROYW1lID0gZGF0YT8ubmFtZTtcbiAgICAgIHRoaXMucHJlc2V0RmlsdGVyID0gZGF0YT8uYWN0aXZlRmlsdGVycyB8fCBmYWxzZTtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZyA9IGRhdGEuZmlsdGVycztcbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlGaWx0ZXJvcHRpb25MaXN0KCk7XG4gICAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBkYXRhLmNvbHVtbnMgPSB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgZGVsZXRlIGRhdGE/Ll9fdHlwZW5hbWU7XG4gICAgICBkZWxldGUgZGF0YT8uaXNfdGVtcDtcbiAgICAgIGRlbGV0ZSBkYXRhPy5jb25maWcuX190eXBlbmFtZTtcbiAgICB9XG4gICAgaWYgKGRhdGE/LmlzX2RlYWZ1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGlvblByZXNldChkYXRhLCAnc2V0UHJlc2V0JylcbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ3NlbGVjdCdcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgfVxuXG4gIHNhdmVQcmVzZXQoY29udHJvbD86IGFueSkge1xuICAgIGlmIChjb250cm9sPy5pbnZhbGlkKSB7XG4gICAgICBjb250cm9sPy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG5hbWVzID0gdGhpcy5nZXRGaWx0ZXJIZWFkZXJzKHRoaXMuZmlsdGVyc0NvbmZpZywgdGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLnByZXNldEZpbHRlciA9IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQgPyB0cnVlIDogdGhpcy5wcmVzZXRGaWx0ZXI7XG4gICAgbGV0IHNlbGVjdGVkRGF0YTogYW55ID0gdGhpcy50YWJsZVZpZXcuZmluZCgoZWxlKSA9PiBlbGUuaWQgPT0gdGhpcy50YWJsZUZpbHRlclZpZXdJZCk7XG4gICAgbGV0IGNvbmZpZyA9IHtcbiAgICAgIGZvbnRGYWltbHk6IHRoaXMuZm9udEZhaW1seSxcbiAgICAgIGJvZHlUZXh0Rm9udHNTaXplOiArKHRoaXMuYm9keVRleHRGb250c1NpemUgfHwgMTQpLFxuICAgICAgaGVhZGVyVGV4dEZvbnRzU2l6ZTogKyh0aGlzLmhlYWRlclRleHRGb250c1NpemUgfHwgMTQpLFxuICAgICAgb2RkUm93c0JhY2tncm91bmRDb2xvcjogdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA/IHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvciA6IHVuZGVmaW5lZCxcbiAgICAgIHNob3dWZXJ0aWNhbEJvcmRlcjogdGhpcy5zaG93VmVydGljYWxCb3JkZXIsXG4gICAgICBzZWxlY3RlZFRhYmxlTGF5b3V0OiB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQsXG4gICAgICBnbG9iYWxTZWFyY2g6IHRoaXMudGFibGVTZWFyY2gsXG4gICAgICBmaWx0ZXJOYW1lczogbmFtZXMsXG4gICAgICB0b3RhbENvdW50OiB0aGlzLnBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzLFxuICAgICAgcm93U2hhZGluZ0VuYWJsZWQ6IHRoaXMucm93U2hhZGluZ0VuYWJsZWRcblxuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBuYW1lOiB0aGlzLnRhYmxlRmlsdGVyVmlld0lkID8gc2VsZWN0ZWREYXRhPy5uYW1lIDogdGhpcy5wcmVzZXROYW1lLFxuICAgICAgICBhY3RpdmVGaWx0ZXJzOiB0aGlzLnByZXNldEZpbHRlcixcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5wcmVzZXRGaWx0ZXJcbiAgICAgICAgICA/IHRoaXMuZmlsdGVyc0NvbmZpZz8ubWFwKCh7IF9fdHlwZW5hbWUsIHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgX190eXBlbmFtZTogX19pbm5lciwgLi4uY2xlYW5RdWVyeSB9ID0gcXVlcnkgfHwge307XG4gICAgICAgICAgICByZXR1cm4geyAuLi5yZXN0LCBxdWVyeTogY2xlYW5RdWVyeSB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgOiBbXSxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIGlkOiB0aGlzLnRhYmxlRmlsdGVyVmlld0lkIHx8IHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlPy5pZCxcbiAgICAgICAgbG9hZGluZ0NhbGw6IGNvbnRyb2wgPT0gJ21vdXNlVXAnID8gZmFsc2UgOiB0cnVlLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZVxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogdGhpcy50YWJsZUZpbHRlclZpZXdJZCB8fCAhdGhpcy5pc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/ICd1cGRhdGVQcmVzZXQnIDogJ2NyZWF0ZVByZXNldCdcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIGNvbnN0IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnMgPSBmaWx0ZXJlZENvbHVtbnMubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAuLi5yZXN0LFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnMsXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgICB9LCA1MDApO1xuICB9XG5cblxuICBnZXRGaWx0ZXJIZWFkZXJzKGZpbHRlcnM6IGFueVtdLCBjb2x1bW5zOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlZEhlYWRlcnMgPSBmaWx0ZXJzXG4gICAgICAubWFwKGYgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSBmLmZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbiA/IGNvbHVtbi5oZWFkZXIgOiBudWxsO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaGVhZGVyID0+ICEhaGVhZGVyKTtcblxuICAgIHJldHVybiBtYXRjaGVkSGVhZGVycy5qb2luKCcsICcpO1xuICB9XG5cblxuICB0b2dnbGVSb3dTaGFkaW5nKCkge1xuICAgIHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvciA9IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPyAnI2YxZjFmMScgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5vbkZvbnRDaGFuZ2UoKTtcbiAgfVxuXG4gIHRyYWNrQnlUYWJsZShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgYWN0aXZlUm93OiBhbnlcbiAgYWN0aXZlUm93Q29sOiBhbnk7XG5cbiAgLy8gVHJhY2sgZXhwYW5kZWQgY2VsbHMgYXMgYSBTZXQgb2YgdW5pcXVlIHJvdytjb2wgaWRlbnRpZmllcnNcblxuICBnZXRDZWxsS2V5KHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZ2V0Um93SWQocm93KX1fJHtjb2w/LmZpZWxkfWA7XG4gIH1cblxuICBleHBhbmRlZENlbGxzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgcHJpdmF0ZSB6Q291bnRlciA9IDIxO1xuXG4gIHNob3dEZXRhaWxzQm94ID0gZmFsc2U7XG5cbiAgdG9nZ2xlRXhwYW5kT2ZMb25nQ2VsbFRleHQoXG4gICAgcm93OiBhbnksXG4gICAgY29sOiBhbnksXG4gICAgY29sdW1uczogYW55W10sXG4gICAgZXhwYW5kV2hvbGVSb3cgPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCBleHBhbmRDZWxscyA9ICh0YXJnZXRSb3c6IGFueSkgPT4ge1xuICAgICAgY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBpZiAoYy50eXBlID09PSAnaW1hZ2UnKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHRleHQgPSB0YXJnZXRSb3dbYy5maWVsZF07XG5cbiAgICAgICAgaWYgKCh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgJiYgdGV4dC5sZW5ndGggPiA1MCkgfHwgKEFycmF5LmlzQXJyYXkodGV4dCkgJiYgdGV4dD8ubGVuZ3RoID4gMSkpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldFJvd0lkKHRhcmdldFJvdykgKyAnLScgKyBjLmZpZWxkO1xuICAgICAgICAgIHRoaXMuekNvdW50ZXIrKztcbiAgICAgICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuc2V0KGtleSwgdGhpcy56Q291bnRlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cblxuICAgIGNvbnN0IGNvbGxlY3RLZXlzRm9yUm93ID0gKHRhcmdldFJvdzogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBpZiAoYy50eXBlID09PSAnaW1hZ2UnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IHRhcmdldFJvd1tjLmZpZWxkXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyAmJiB0ZXh0Lmxlbmd0aCA+IDUwIHx8IChBcnJheS5pc0FycmF5KHRleHQpICYmIHRleHQ/Lmxlbmd0aCA+IDEpKSB7XG4gICAgICAgICAga2V5cy5wdXNoKHRoaXMuZ2V0Um93SWQodGFyZ2V0Um93KSArICctJyArIGMuZmllbGQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBrZXlzO1xuICAgIH07XG5cbiAgICBpZiAoZXhwYW5kV2hvbGVSb3cpIHtcbiAgICAgIGxldCByb3dLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2w/LmZpZWxkKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRleHQpICYmIHRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICByb3dLZXlzID0gY29sbGVjdEtleXNGb3JSb3cocm93KTtcbiAgICAgICAgcm93Py5jaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIHJvd0tleXMucHVzaCguLi5jb2xsZWN0S2V5c0ZvclJvdyhjaGlsZCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd0tleXMgPSBjb2xsZWN0S2V5c0ZvclJvdyhyb3cpO1xuICAgICAgfVxuICAgICAgY29uc3QgYWxsRXhwYW5kZWQgPSByb3dLZXlzLmV2ZXJ5KGsgPT4gdGhpcy5leHBhbmRlZENlbGxzLmhhcyhrKSk7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgICAgIGlmICghYWxsRXhwYW5kZWQpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm93LmNoaWxkcmVuKSAmJiByb3cuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGV4cGFuZENlbGxzKHJvdyk7XG4gICAgICAgICAgcm93Py5jaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4gZXhwYW5kQ2VsbHMoY2hpbGQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBleHBhbmRDZWxscyhyb3cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Um93SWQocm93KSArICctJyArIGNvbC5maWVsZDtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xuXG4gICAgICBpZiAoIXRoaXMuZXhwYW5kZWRDZWxscy5oYXMoa2V5KSkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy56Q291bnRlcisrO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuc2V0KGtleSwgdGhpcy56Q291bnRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RGV0YWlsc0JveCA9IGZhbHNlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc09wZW5Ub1RvcChyb3cpXG4gICAgfSwgMCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNPcGVuVG9Ub3Aocm93OiBhbnkpIHtcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdGEtZ3JpZC1ib2R5JykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghd3JhcHBlcikgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSAocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgKGNvbC5pZCB8fCBjb2wuX2lkKTtcbiAgICAgIGNvbnN0IGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGlmICghYm94KSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBib3hSZWN0ID0gYm94LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3Qgd3JhcHBlclJlY3QgPSB3cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgaXNPdmVyZmxvd2luZ0JvdHRvbSA9IGJveFJlY3QuYm90dG9tID4gd3JhcHBlclJlY3QuYm90dG9tO1xuICAgICAgY29uc3QgaXNPdmVyZmxvd2luZ1RvcCA9IGJveFJlY3QudG9wIDwgd3JhcHBlclJlY3QudG9wO1xuICAgICAgaWYgKGlzT3ZlcmZsb3dpbmdCb3R0b20gJiYgIWlzT3ZlcmZsb3dpbmdUb3ApIHtcbiAgICAgICAgY29uc3QgYm94SGVpZ2h0ID0gYm94Lm9mZnNldEhlaWdodCB8fCAwO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBib3hIZWlnaHQgKyA0O1xuICAgICAgICBib3guc3R5bGUudG9wID0gYCR7LW9mZnNldH1weGA7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJveC5zdHlsZS5ib3R0b20gPSBgYXV0b2A7XG4gICAgICAgIGJveC5zdHlsZS50b3AgPSBgMTAwJWA7XG4gICAgICAgIGJveC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgwKWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSlcbiAgICB0aGlzLnNob3dEZXRhaWxzQm94ID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuXG5cblxuXG5cbiAgaXNFeHBhbmRlZChyb3c6IGFueSwgY29sOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZENlbGxzLmhhcyh0aGlzLmdldFJvd0lkKHJvdykgKyAnLScgKyBjb2wuZmllbGQpO1xuICB9XG5cbiAgZ2V0WkluZGV4KHJvdzogYW55LCBjb2w6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDZWxscy5nZXQodGhpcy5nZXRSb3dJZChyb3cpICsgJy0nICsgY29sLmZpZWxkKSA/PyAyMTtcbiAgfVxuXG4gIGlzT3ZlcmZsb3dpbmcoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFlbGVtZW50KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoO1xuICB9XG5cblxuICAvLyBQaWN0dXJlIGNlbGwgTG9naWNcbiAgY29sb3JDb21iaW5hdGlvbiA9IFsncGljLWNvbWIxJywgJ3BpYy1jb21iMicsICdwaWMtY29tYjQnXTtcbiAgZ2V0RHluYW1pY0NsYXNzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gdGhpcy5jb2xvckNvbWJpbmF0aW9uWzBdO1xuICAgIGNvbnN0IGhhc2ggPSBBcnJheS5mcm9tKG5hbWUpLnJlZHVjZSgoYWNjLCBjaGFyKSA9PiBhY2MgKyBjaGFyLmNoYXJDb2RlQXQoMCksIDApO1xuICAgIGNvbnN0IGluZGV4ID0gaGFzaCAlIHRoaXMuY29sb3JDb21iaW5hdGlvbj8ubGVuZ3RoO1xuICAgIHJldHVybiB0aGlzLmNvbG9yQ29tYmluYXRpb25baW5kZXhdO1xuICB9XG5cbiAgZ2V0SW5pdGlhbHMobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiAnTkEnO1xuICAgIGNvbnN0IHBhcnRzID0gbmFtZS50cmltKCkuc3BsaXQoJyAnKTtcbiAgICByZXR1cm4gKHBhcnRzWzBdWzBdICsgKHBhcnRzWzFdPy5bMF0gfHwgJycpKS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cblxuICBhY3Rpb25IaWRlOiBib29sZWFuID0gdHJ1ZTtcbiAgeFBvcyA9IDA7XG4gIHlQb3MgPSAwO1xuICBpc1Zpc2libGUgPSBmYWxzZTtcbiAgZGVhdGlsc0xpc3Q6IGFueTtcbiAgb3BlbkV4cGVuZEluZGV4OiBhbnk7XG4gIHBvc2l0aW9uZWRZZXQgPSBmYWxzZTtcblxuIG9uUmlnaHRDbGljayhldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQgfCBhbnksIGRlYXRpbHNMaXN0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgLy8gU3RvcmUgb3JpZ2luYWwgYWN0aW9ucyBvbiBmaXJzdCBpbml0aWFsaXphdGlvbiBpZiBub3QgYWxyZWFkeSBzdG9yZWRcbiAgaWYgKHRoaXMub3JpZ2luYWxBY3Rpb25zPy5sZW5ndGggPT09IDAgJiYgdGhpcy52YWxpZGF0ZUljb24pIHtcbiAgICB0aGlzLm9yaWdpbmFsQWN0aW9ucyA9IFsuLi50aGlzLmFjdGlvbnNdOyAvLyBEZWVwIGNvcHkgdG8gcHJlc2VydmUgb3JpZ2luYWxcbiAgfVxuICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMudmFsaWRhdGVJY29uIFxuICAgICAgPyB0aGlzLmdldFZhbGlkQWN0aW9ucyhkZWF0aWxzTGlzdCkgXG4gICAgICA6IChkZWF0aWxzTGlzdD8uYWN0aW9ucz8ubGVuZ3RoID8gZGVhdGlsc0xpc3QuYWN0aW9ucyA6IHRoaXMuYWN0aW9ucyk7XG5cbiAgICBpZiAoIShldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAoZGVhdGlsc0xpc3QuX192aXJ0dWFsSW5kZXggPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIFxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgXG4gICAgLy8gR2V0IHRoZSBpbml0aWFsIGNsaWNrIHBvc2l0aW9uXG4gICAgY29uc3QgY2xpY2tYID0gKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkgPyBldmVudC5jbGllbnRYIDogZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgIGNvbnN0IGNsaWNrWSA9IChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpID8gZXZlbnQuY2xpZW50WSA6IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICBcbiAgICB0aGlzLnhQb3MgPSBjbGlja1g7XG4gICAgdGhpcy55UG9zID0gY2xpY2tZO1xuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBvc2l0aW9uZWRZZXQgPSBmYWxzZTtcbiAgICB0aGlzLmRlYXRpbHNMaXN0ID0gZGVhdGlsc0xpc3Q7XG4gICAgXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBtZW51RWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZXh0LW1lbnUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmICghbWVudUVsZW1lbnQpIHJldHVybjtcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IG1lbnVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgY29uc3QgbWVudUhlaWdodCA9IG1lbnVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAgIFxuICAgICAgLy8gR2V0IHRhYmxlIGNvbnRhaW5lciBib3VuZHNcbiAgICAgIGNvbnN0IHRhYmxlUmVjdCA9IHRoaXMuZGF0YUdyaWRDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHRhYmxlVG9wID0gdGFibGVSZWN0LnRvcDtcbiAgICAgIGNvbnN0IHRhYmxlQm90dG9tID0gdGFibGVSZWN0LmJvdHRvbTtcbiAgICAgIGNvbnN0IHRhYmxlSGVpZ2h0ID0gdGFibGVSZWN0LmhlaWdodDtcbiAgICAgIFxuICAgICAgbGV0IHggPSBjbGlja1g7XG4gICAgICBsZXQgeSA9IGNsaWNrWTtcbiAgICAgIFxuICAgICAgLy8gQWRqdXN0IFggcG9zaXRpb24gaWYgbWVudSBvdmVyZmxvd3MgaG9yaXpvbnRhbGx5XG4gICAgICBpZiAoeCArIG1lbnVXaWR0aCA+IHZpZXdwb3J0V2lkdGgpIHtcbiAgICAgICAgeCA9IHZpZXdwb3J0V2lkdGggLSBtZW51V2lkdGggLSAxMDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQWRqdXN0IFkgcG9zaXRpb24gaWYgbWVudSBvdmVyZmxvd3MgdGFibGUgdmVydGljYWxseVxuICAgICAgLy8gQ2hlY2sgaWYgbWVudSB3b3VsZCBnbyBiZWxvdyB0YWJsZSBib3R0b21cbiAgICAgIGlmICh5ICsgbWVudUhlaWdodCA+IHRhYmxlQm90dG9tKSB7XG4gICAgICAgIC8vIFRyeSB0byBwb3NpdGlvbiBhYm92ZSBjbGljayBwb2ludFxuICAgICAgICB5ID0gY2xpY2tZIC0gbWVudUhlaWdodDtcbiAgICAgICAgXG4gICAgICAgIC8vIElmIHRoYXQgZ29lcyBhYm92ZSB0YWJsZSB0b3AsIHBvc2l0aW9uIGF0IHRhYmxlIGJvdHRvbVxuICAgICAgICBpZiAoeSA8IHRhYmxlVG9wKSB7XG4gICAgICAgICAgeSA9IHRhYmxlQm90dG9tIC0gbWVudUhlaWdodCAtIDEwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVuc3VyZSBtZW51IGRvZXNuJ3QgZ28gYWJvdmUgdGFibGUgdG9wXG4gICAgICBpZiAoeSA8IHRhYmxlVG9wKSB7XG4gICAgICAgIHkgPSB0YWJsZVRvcCArIDEwO1xuICAgICAgfVxuICAgICAgdGhpcy54UG9zID0geDtcbiAgICAgIHRoaXMueVBvcyA9IHk7XG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBvc2l0aW9uZWRZZXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbiAgb25BY3Rpb25DbGljayhhY3Rpb246IHN0cmluZykge1xuICAgIGNvbnN0IHNlbmRPYmogPSB7XG4gICAgICBvYmo6IHRoaXMuZGVhdGlsc0xpc3QsXG4gICAgICBldmVudFR5cGU6IGFjdGlvbixcbiAgICB9O1xuICAgIHRoaXMucG9zaXRpb25lZFlldCA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHNlbmRPYmopO1xuICB9XG5cblxuICBvblZlcmlmeUNsaWNrKHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHRleHQgPSB0eXBlPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0ZXh0ID09ICdhcmNoaXZlJyB8fCB0ZXh0ID09ICd1bmFyY2hpdmUnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdkZWxldGUnIHx8IHRleHQgPT0gJ3Jlc3RvcmUnIHx8IHRleHQgPT0gJ3JlbW92ZScgfHwgdGV4dCA9PSAnZGVhY3RpdmF0ZScgfHwgdGV4dCA9PSAnYWN0aXZhdGUnIHx8IHRleHQgPT0gJ2Jsb2NrJyB8fCB0ZXh0ID09ICd1bmJsb2NrJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnZW5hYmxlJyB8fCB0ZXh0ID09ICdkaXNhYmxlJyB8fCB0ZXh0ID09ICdhcHByb3ZlJyB8fCB0ZXh0ID09ICdyZWplY3QnIHx8IHRleHQgPT0gJ3B1Ymxpc2gnIHx8IHRleHQgPT0gJ3VucHVibGlzaCcgfHwgdGV4dCA9PSAnbG9jaycgfHwgdGV4dCA9PSAndW5sb2NrJyB8fCB0ZXh0ID09ICdjb21wbGV0ZScgfHwgdGV4dCA9PSAnaW5jb21wbGV0ZSdcbiAgICAgIC8vIHx8IHRleHQgPT0gJ3NlbmQgdG8gcmV2aWV3JyB8fCB0ZXh0ID09ICdtYXJrIGFzIHBhaWQnIHx8IHRleHQgPT0gJ21hcmsgYXMgdW5wYWlkJyB8fCB0ZXh0ID09ICdmdWxmaWxsJyB8fCB0ZXh0ID09ICd1bmZ1bGZpbGwnIHx8IHRleHQgPT0gJ3JlZnVuZCcgfHwgdGV4dCA9PSAnY2FuY2VsJyB8fCB0ZXh0ID09ICdyZXNlbmQnIHx8IHRleHQgPT0gJ2NoYXJnZWJhY2snXG4gICAgICAvLyB8fCB0ZXh0ID09ICdkaXNwdXRlJyB8fCB0ZXh0ID09ICdlc2NhbGF0ZScgfHwgdGV4dCA9PSAnZGVlc2NhbGF0ZScgfHwgdGV4dCA9PSAnZmxhZycgfHwgdGV4dCA9PSAndW5mbGFnJyB8fCB0ZXh0ID09ICd2ZXJpZnknIHx8IHRleHQgPT0gJ3VudmVyaWZ5JyB8fCB0ZXh0ID09ICdzdWJzY3JpYmUnIHx8IHRleHQgPT0gJ3Vuc3Vic2NyaWJlJyB8fCB0ZXh0ID09ICdmb2xsb3cnIHx8IHRleHQgPT0gJ3VuZm9sbG93J1xuICAgICAgLy8gfHwgdGV4dCA9PSAnbGlrZScgfHwgdGV4dCA9PSAndW5saWtlJyB8fCB0ZXh0ID09ICdzaGFyZScgfHwgdGV4dCA9PSAndW5zaGFyZScgfHwgdGV4dCA9PSAnY29tbWVudCcgfHwgdGV4dCA9PSAndW5jb21tZW50JyB8fCB0ZXh0ID09ICd0YWcnIHx8IHRleHQgPT0gJ3VudGFnJyB8fCB0ZXh0ID09ICdhc3NpZ24nIHx8IHRleHQgPT0gJ3VuYXNzaWduJyB8fCB0ZXh0ID09ICdsaW5rJyB8fCB0ZXh0ID09ICd1bmxpbmsnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdzeW5jJyB8fCB0ZXh0ID09ICd1bnN5bmMnIHx8IHRleHQgPT0gJ2JhY2t1cCcgfHwgdGV4dCA9PSAncmVzdG9yZSBiYWNrdXAnIHx8IHRleHQgPT0gJ21pZ3JhdGUnIHx8IHRleHQgPT0gJ2ltcG9ydCcgfHwgdGV4dCA9PSAnZXhwb3J0JyB8fCB0ZXh0ID09ICdnZW5lcmF0ZSByZXBvcnQnIHx8IHRleHQgPT0gJ2Rvd25sb2FkIHJlcG9ydCcgfHwgdGV4dCA9PSAndmlldyBkZXRhaWxzJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnZWRpdCBkZXRhaWxzJyB8fCB0ZXh0ID09ICd1cGRhdGUgZGV0YWlscycgfHwgdGV4dCA9PSAnY2hhbmdlIHN0YXR1cycgfHwgdGV4dCA9PSAncmVzZXQgcGFzc3dvcmQnIHx8IHRleHQgPT0gJ3NlbmQgbm90aWZpY2F0aW9uJyB8fCB0ZXh0ID09ICdzY2hlZHVsZScgfHwgdGV4dCA9PSAncmVzY2hlZHVsZScgfHwgdGV4dCA9PSAnY2FuY2VsIHNjaGVkdWxlJyB8fCB0ZXh0ID09ICdzdGFydCcgfHwgdGV4dCA9PSAnc3RvcCcgfHwgdGV4dCA9PSAncGF1c2UnIHx8IHRleHQgPT0gJ3Jlc3VtZSdcbiAgICApIHtcbiAgICAgIC8vIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0ZSh0aGlzLnRhYmxlVHlwZSk7XG4gICAgICAvLyB0aGlzLnNlbGVjdGVkUm93cy5jbGVhcigpO1xuICAgIH1cbiAgICBjb25zdCBpZHNBcnJheSA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIGNvbnN0IGFycmF5T2ZPYmplY3RzV2l0aFRhYmxlVHlwZTogYW55W10gPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUm93cy5mb3JFYWNoKGlkID0+IHtcbiAgICAgIGFycmF5T2ZPYmplY3RzV2l0aFRhYmxlVHlwZS5wdXNoKHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNlbmRPYmogPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIG9iajogaWRzQXJyYXksXG4gICAgICAgIHRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWUsXG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogdHlwZSxcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoc2VuZE9iailcbiAgfVxuXG5cblxuICBnZXRDZWxsQ2xhc3Nlcyhjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhY29sdW1uPy5maWVsZCB8fCBjb2x1bW4/LmNlbGxSZW5kZXJlcikgcmV0dXJuICcnO1xuXG4gICAgbGV0IHZhbDogYW55ID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHZhbHVlPy52YWx1ZSA/PyB2YWx1ZSA6IHZhbHVlO1xuICAgIGNvbnN0IGZpZWxkID0gY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoZmllbGQgPT09ICdkdWVfZGF0ZScpIHtcbiAgICAgIGNvbnN0IGR1ZURhdGUgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgdG9kYXlVVEMgPSBEYXRlLlVUQyh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xuICAgICAgY29uc3QgZHVlVVRDID0gRGF0ZS5VVEMoZHVlRGF0ZS5nZXRGdWxsWWVhcigpLCBkdWVEYXRlLmdldE1vbnRoKCksIGR1ZURhdGUuZ2V0RGF0ZSgpKTtcblxuICAgICAgaWYgKGR1ZVVUQyA8IHRvZGF5VVRDKSB7XG4gICAgICAgIHJldHVybiAndGV4dC1kYW5nZXInO1xuICAgICAgfVxuICAgICAgLy8gZWxzZSBpZihkdWVVVEMgPT09IHRvZGF5VVRDKXtcbiAgICAgIC8vICAgcmV0dXJuICd0ZXh0LXdhcm5pbmcnO1xuICAgICAgLy8gfVxuXG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG5cbiAgICBjb25zdCBzdGF0dXMgPSB2YWw/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoXG4gICAgICBmaWVsZCA9PT0gJ3N0YXR1cycgfHxcbiAgICAgIGZpZWxkID09PSAnYWNjb3VudF9zdGF0dXMnIHx8XG4gICAgICBmaWVsZCA9PT0gJ2F2YWlsc3RhdHVzJyB8fFxuICAgICAgZmllbGQgPT09ICdpc19jdXN0b21fZ3JhZGUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gU1RBVFVTRVNfQkFER0VfTUFQW3N0YXR1c10gfHwgJ2JhZGdlIGJhZGdlLXNlY29uZGFyeSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cblxuICByZW1vdmVDb2x1bW5GaWx0ZXJGcm9tQ29sdW1uKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVyblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Ryb3Bkb3duJ3x8IGNvbHVtbi50eXBlID09ICdhcnJheScpIHtcbiAgICAgIGNvbHVtbi5xdWVyeS5faWRzID0gW107XG4gICAgfSBlbHNlIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZSddLmluY2x1ZGVzKGNvbHVtbi50eXBlKSkge1xuICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxuICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiBudWxsLFxuICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGwsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KChmOiBhbnkpID0+IGYuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnMsXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gY2xlYW5lZEZpbHRlcmVkQ29sdW1ucztcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIG9uU2lkZU1lbnVDb2x1bW5zVmlzaWJpbGl0eUNoYW5nZSgpIHtcbiAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBjbGVhbkZpbHRlcmRDb2x1bW5zKCkge1xuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgY29uc3QgY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyA9IGZpbHRlcmVkQ29sdW1ucy5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC4uLnJlc3QsXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsZWFuZWRGaWx0ZXJlZENvbHVtbnM7XG4gIH1cblxuICBkb3dubG9hZENzdih0eXBlOiAnY3N2JyB8ICd4bHN4Jykge1xuICAgIGNvbnN0IGNvbmZpZzogYW55ID0ge1xuICAgICAgaGVhZGVyQmdDb2xvcjogdGhpcy5oZWFkZXJCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBoZWFkZXJUZXh0Q29sb3I6IHRoaXMuaGVhZGVyVGV4dENvbG9yLFxuICAgICAgYm9keVRleHRDb2xvcjogJyMwMDAwMDAnLFxuICAgICAgZm9udEZhbWlseTogdGhpcy5mb250RmFpbWx5LFxuICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgICB6b29tU2NhbGU6IDEyNSxcbiAgICAgIGhlYWRlclJvd0hlaWdodDogMzBcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5hYmxlRXhwb3J0KSB7XG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgZGQgPSBTdHJpbmcobm93LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IG1tID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IHl5eXkgPSBub3cuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IEhIID0gU3RyaW5nKG5vdy5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgTU0gPSBTdHJpbmcobm93LmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9XG4gICAgICAgIGAke3RoaXMudGFibGVUeXBlfV8ke2RkfS0ke21tfS0ke3l5eXl9XyR7SEh9LSR7TU19YDtcblxuICAgICAgY29uc29sZS5sb2coZm9ybWF0dGVkKTtcblxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydERhdGEodGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFTZXQsIGZvcm1hdHRlZCwgdHlwZSwgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMsIGNvbmZpZyk7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgZmlsdGVyczogW11cbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdkb3dubG9hZENzdidcbiAgICB9XG4gICAgaWYgKHR5cGUgPT0gJ3hsc3gnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcblxuICB9XG5cbiAgb25Gb250Q2hhbmdlKCkge1xuICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuYm9keVRleHRGb250c1NpemU7XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5LFxuICAgICAgYm9keVRleHRGb250c1NpemU6IHRoaXMuYm9keVRleHRGb250c1NpemUsXG4gICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiB0aGlzLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID8gdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yIDogdW5kZWZpbmVkLFxuICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlcixcbiAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCxcbiAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy50YWJsZVNlYXJjaFxuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBkYXRhOiBjb25maWdcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdjb25maWcnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG5cbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBvbkdsb2JhbFNlYXJjaCgpIHtcbiAgICAvLyBDbG9zZSBleHBhbmRlZCByb3dzIGJlZm9yZSBzZWFyY2hpbmdcbiAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgdGFibGVTZWFyY2g6IHRoaXMudGFibGVTZWFyY2hcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdzZWFyY2gnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgIH1cbiAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgb25TZWFyY2hJbnB1dChldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2coJ1NlYXJjaCB2YWx1ZTonLCB2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnRhYmxlU2VhcmNoID0gJyc7XG4gICAgICB0aGlzLm9uR2xvYmFsU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tGaWx0ZXJDaGFuZ2VzRWZmZWN0KCk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSByZXR1cm4gdHJ1ZVxuICAgIGNvbnN0IGZpbmREZWZhdWx0RmlsdGVyID0gdGhpcy50YWJsZVZpZXc/LmZpbmQoKGVsZTogYW55KSA9PiBlbGU/LmlkID09IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZUZpbHRlcnMgPSAoZmlsdGVyczogYW55W10gfCB1bmRlZmluZWQpOiBhbnlbXSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVycykpIHJldHVybiBbXTtcbiAgICAgIGNvbnN0IGNsb25lZCA9IGZpbHRlcnMubWFwKGYgPT4ge1xuICAgICAgICBjb25zdCBpdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmID8/IHt9KSk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtLl9pZHMpKSBpdGVtLl9pZHMgPSBbXTtcbiAgICAgICAgaXRlbS5faWRzID0gaXRlbS5faWRzLnNsaWNlKCkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykgcmV0dXJuIGEgLSBiO1xuICAgICAgICAgIHJldHVybiAoJycgKyBhKS5sb2NhbGVDb21wYXJlKCcnICsgYik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpdGVtLnF1ZXJ5ID09PSBudWxsKSB7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0ucXVlcnkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW0ucXVlcnkuX2lkcykpIGl0ZW0ucXVlcnkuX2lkcyA9IFtdO1xuICAgICAgICAgIGl0ZW0ucXVlcnkuX2lkcyA9IGl0ZW0ucXVlcnkuX2lkcy5zbGljZSgpLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykgcmV0dXJuIGEgLSBiO1xuICAgICAgICAgICAgcmV0dXJuICgnJyArIGEpLmxvY2FsZUNvbXBhcmUoJycgKyBiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgICBjbG9uZWQuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZmEgPSAoYS5maWVsZCB8fCAnJykgKyAnfCcgKyAoYS50eXBlIHx8ICcnKTtcbiAgICAgICAgY29uc3QgZmIgPSAoYi5maWVsZCB8fCAnJykgKyAnfCcgKyAoYi50eXBlIHx8ICcnKTtcbiAgICAgICAgcmV0dXJuIGZhLmxvY2FsZUNvbXBhcmUoZmIpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGRlZXBFcXVhbCA9IChhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnIHx8IGEgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8IGIgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpICE9PSBBcnJheS5pc0FycmF5KGIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICAgICAgaWYgKCFrZXlzQi5pbmNsdWRlcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBjb25zdCBub3JtYWxpemVkQSA9IG5vcm1hbGl6ZUZpbHRlcnMoZmluZERlZmF1bHRGaWx0ZXI/LmZpbHRlcnMpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRCID0gbm9ybWFsaXplRmlsdGVycyh0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIGNvbnN0IGlzU2FtZSA9IGRlZXBFcXVhbChub3JtYWxpemVkQSwgbm9ybWFsaXplZEIpO1xuICAgIHJldHVybiBpc1NhbWU7XG4gIH1cblxuXG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyBDZWxsIFNlbGVjdGlvbiBJbXBsZW1lbnRlZCBIZXJlIEltcGxlbWVudGVkIEhlcmVcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIHNlbGVjdGVkQ2VsbHM6IGFueVtdID0gW107XG4gIHNlbGVjdGVkS2V5czogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHNlbGVjdGlvblN0YXJ0OiBhbnkgPSBudWxsO1xuICBpc1NlbGVjdGluZyA9IGZhbHNlO1xuICBzdGFydFNlbGVjdGlvbihcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXIsXG4gICAgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBzZWN0aW9uOiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7ZmllbGR9YDtcblxuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSB7IHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXg6IHNhZmVTdWIsIGZpZWxkLCBrZXkgfTtcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkS2V5cy5jbGVhcigpO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmFkZChrZXkpO1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IFt0aGlzLnNlbGVjdGlvblN0YXJ0XTtcbiAgICBjb25zdCBtb3VzZVVwSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuZW5kU2VsZWN0aW9uKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKVxuICB9XG5cblxuICBleHRlbmRTZWxlY3Rpb24oXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyLFxuICAgIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgc2VjdGlvbjogc3RyaW5nXG4gICkge1xuICAgIGlmICghdGhpcy5pc1NlbGVjdGluZyB8fCAhdGhpcy5zZWxlY3Rpb25TdGFydCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlbGVjdGlvblN0YXJ0O1xuICAgIGNvbnN0IHRhcmdldFN1YkNvbEluZGV4ID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBuZXdLZXlzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBuZXdDZWxsczogYW55W10gPSBbXTtcbiAgICBjb25zdCBtaW5Sb3cgPSBNYXRoLm1pbihzdGFydC5yb3dJbmRleCwgcm93SW5kZXgpO1xuICAgIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KHN0YXJ0LnJvd0luZGV4LCByb3dJbmRleCk7XG4gICAgY29uc3QgY29sdW1uc1RvU2VsZWN0ID0gdGhpcy5nZXRDb2x1bW5TZWxlY3Rpb25SYW5nZShzdGFydC5jb2xJbmRleCwgY29sSW5kZXgsIHN0YXJ0LnN1YkNvbEluZGV4LCB0YXJnZXRTdWJDb2xJbmRleCk7XG5cbiAgICBmb3IgKGxldCByID0gbWluUm93OyByIDw9IG1heFJvdzsgcisrKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbEluZm8gb2YgY29sdW1uc1RvU2VsZWN0KSB7XG4gICAgICAgIGNvbnN0IGsgPSBgJHtyfS0ke2NvbEluZm8uY29sSW5kZXh9LSR7Y29sSW5mby5zdWJDb2xJbmRleH0tJHtzZWN0aW9ufWA7XG4gICAgICAgIG5ld0tleXMuYWRkKGspO1xuICAgICAgICBuZXdDZWxscy5wdXNoKHtcbiAgICAgICAgICByb3dJbmRleDogcixcbiAgICAgICAgICBjb2xJbmRleDogY29sSW5mby5jb2xJbmRleCxcbiAgICAgICAgICBzdWJDb2xJbmRleDogY29sSW5mby5zdWJDb2xJbmRleCxcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBrZXk6IGtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEtleXMgPSBuZXdLZXlzO1xuICAgIHRoaXMuc2VsZWN0ZWRDZWxscyA9IG5ld0NlbGxzO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIC8vIEFkZCBhdXRvLXNjcm9sbGluZyBsb2dpY1xuICAgIHRoaXMuaGFuZGxlQ2VsbEF1dG9TY3JvbGwoZXZlbnQpO1xuICB9XG5cblxuXG5cbiAgZ2V0Q29sdW1uU2VsZWN0aW9uUmFuZ2UoXG4gICAgc3RhcnRDb2w6IG51bWJlcixcbiAgICBlbmRDb2w6IG51bWJlcixcbiAgICBzdGFydFN1YjogbnVtYmVyLFxuICAgIGVuZFN1YjogbnVtYmVyXG4gICk6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9W10ge1xuICAgIGNvbnN0IHJlc3VsdDogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH1bXSA9IFtdO1xuICAgIGNvbnN0IG1pbkNvbCA9IE1hdGgubWluKHN0YXJ0Q29sLCBlbmRDb2wpO1xuICAgIGNvbnN0IG1heENvbCA9IE1hdGgubWF4KHN0YXJ0Q29sLCBlbmRDb2wpO1xuXG4gICAgY29uc3QgaXNMZWZ0VG9SaWdodCA9IHN0YXJ0Q29sIDw9IGVuZENvbDtcbiAgICBmb3IgKGxldCBjID0gbWluQ29sOyBjIDw9IG1heENvbDsgYysrKSB7XG4gICAgICBjb25zdCBzdWJDb2xDb3VudCA9IHRoaXMuZ2V0U3ViQ29sdW1uQ291bnQoYyk7XG5cbiAgICAgIGlmIChjID09PSBzdGFydENvbCAmJiBjID09PSBlbmRDb2wpIHtcbiAgICAgICAgY29uc3QgbWluU3ViID0gTWF0aC5taW4oc3RhcnRTdWIsIGVuZFN1Yik7XG4gICAgICAgIGNvbnN0IG1heFN1YiA9IE1hdGgubWF4KHN0YXJ0U3ViLCBlbmRTdWIpO1xuICAgICAgICBmb3IgKGxldCBzID0gbWluU3ViOyBzIDw9IG1heFN1YiAmJiBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjID09PSBzdGFydENvbCkge1xuICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodCkge1xuICAgICAgICAgIGZvciAobGV0IHMgPSBzdGFydFN1YjsgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8PSBzdGFydFN1YiAmJiBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjID09PSBlbmRDb2wpIHtcbiAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHQpIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8PSBlbmRTdWIgJiYgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgY29sSW5kZXg6IGMsIHN1YkNvbEluZGV4OiBzIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGxldCBzID0gZW5kU3ViOyBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0U3ViQ29sdW1uQ291bnQoY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbnMgfHwgY29sSW5kZXggPCAwIHx8IGNvbEluZGV4ID49IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sSW5kZXhdO1xuICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4gY29sdW1uLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaXNHcm91cENvbHVtbihjb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3ViQ29sdW1uQ291bnQoY29sSW5kZXgpID4gMTtcbiAgfVxuICBlbmRTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkJvdW5kYXJpZXMoKTtcbiAgfVxuICBpc1NlbGVjdGVkKFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSW5kZXg6IG51bWJlcixcbiAgICBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIHNlY3Rpb246IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YDtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGtleSk7XG4gIH1cblxuXG4gIHByaXZhdGUgc2VsZWN0aW9uQm91bmRzOiB7XG4gICAgdG9wOiBudW1iZXIgfCBudWxsO1xuICAgIGJvdHRvbTogbnVtYmVyIHwgbnVsbDtcbiAgICBsZWZ0OiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGw7XG4gICAgcmlnaHQ6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbDtcbiAgfSA9IHsgdG9wOiBudWxsLCBib3R0b206IG51bGwsIGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsIH07XG5cbiAgdXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMgPSB7IHRvcDogbnVsbCwgYm90dG9tOiBudWxsLCBsZWZ0OiBudWxsLCByaWdodDogbnVsbCB9O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgdW5pcXVlIHJvdyBpbmRpY2VzIGFuZCBmaW5kIG1pbi9tYXhcbiAgICBjb25zdCByb3dJbmRpY2VzID0gWy4uLm5ldyBTZXQodGhpcy5zZWxlY3RlZENlbGxzLm1hcChjZWxsID0+IGNlbGwucm93SW5kZXgpKV07XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wID0gTWF0aC5taW4oLi4ucm93SW5kaWNlcyk7XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMuYm90dG9tID0gTWF0aC5tYXgoLi4ucm93SW5kaWNlcyk7XG5cbiAgICAvLyBGb3IgbGVmdC9yaWdodCBib3VuZGFyaWVzLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggY29sSW5kZXggYW5kIHN1YkNvbEluZGV4XG4gICAgY29uc3QgbGVmdE1vc3QgPSB0aGlzLmZpbmRMZWZ0TW9zdENlbGwoKTtcbiAgICBjb25zdCByaWdodE1vc3QgPSB0aGlzLmZpbmRSaWdodE1vc3RDZWxsKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0ID0gbGVmdE1vc3Q7XG4gICAgdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQgPSByaWdodE1vc3Q7XG4gIH1cbiAgZmluZExlZnRNb3N0Q2VsbCgpOiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1pbkNvbEluZGV4ID0gTWF0aC5taW4oLi4udGhpcy5zZWxlY3RlZENlbGxzLm1hcChjZWxsID0+IGNlbGwuY29sSW5kZXgpKTtcbiAgICBjb25zdCBsZWZ0Q29sQ2VsbHMgPSB0aGlzLnNlbGVjdGVkQ2VsbHMuZmlsdGVyKGNlbGwgPT4gY2VsbC5jb2xJbmRleCA9PT0gbWluQ29sSW5kZXgpO1xuICAgIGNvbnN0IG1pblN1YkNvbEluZGV4ID0gTWF0aC5taW4oLi4ubGVmdENvbENlbGxzLm1hcChjZWxsID0+IGNlbGwuc3ViQ29sSW5kZXgpKTtcblxuICAgIHJldHVybiB7IGNvbEluZGV4OiBtaW5Db2xJbmRleCwgc3ViQ29sSW5kZXg6IG1pblN1YkNvbEluZGV4IH07XG4gIH1cbiAgZmluZFJpZ2h0TW9zdENlbGwoKTogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtYXhDb2xJbmRleCA9IE1hdGgubWF4KC4uLnRoaXMuc2VsZWN0ZWRDZWxscy5tYXAoY2VsbCA9PiBjZWxsLmNvbEluZGV4KSk7XG4gICAgY29uc3QgcmlnaHRDb2xDZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxscy5maWx0ZXIoY2VsbCA9PiBjZWxsLmNvbEluZGV4ID09PSBtYXhDb2xJbmRleCk7XG4gICAgY29uc3QgbWF4U3ViQ29sSW5kZXggPSBNYXRoLm1heCguLi5yaWdodENvbENlbGxzLm1hcChjZWxsID0+IGNlbGwuc3ViQ29sSW5kZXgpKTtcblxuICAgIHJldHVybiB7IGNvbEluZGV4OiBtYXhDb2xJbmRleCwgc3ViQ29sSW5kZXg6IG1heFN1YkNvbEluZGV4IH07XG4gIH1cbiAgaXNUb3BCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLnRvcCAhPT0gbnVsbCAmJiByb3dJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wO1xuICB9XG4gIGlzQm90dG9tQm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gKTtcbiAgICByZXR1cm4gaXNTZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkJvdW5kcy5ib3R0b20gIT09IG51bGwgJiYgcm93SW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLmJvdHRvbTtcbiAgfVxuICBpc0xlZnRCb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQgIT09IG51bGwgJiZcbiAgICAgIGNvbEluZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LmNvbEluZGV4ICYmXG4gICAgICBzYWZlU3ViID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5sZWZ0LnN1YkNvbEluZGV4O1xuICB9XG5cbiAgaXNSaWdodEJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YCk7XG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQgIT09IG51bGwgJiZcbiAgICAgIGNvbEluZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodC5jb2xJbmRleCAmJlxuICAgICAgc2FmZVN1YiA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMucmlnaHQuc3ViQ29sSW5kZXg7XG4gIH1cblxuICBpc1RvcExlZnRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVG9wQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNMZWZ0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cbiAgaXNUb3BSaWdodENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb3BCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbikgJiYgdGhpcy5pc1JpZ2h0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cbiAgaXNCb3R0b21MZWZ0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0JvdHRvbUJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKSAmJiB0aGlzLmlzTGVmdEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKTtcbiAgfVxuXG4gIGlzQm90dG9tUmlnaHRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQm90dG9tQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNSaWdodEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKTtcbiAgfVxuXG5cbiAgY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbDogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBzY3JvbGxTcGVlZCA9IDE1MDtcbiAgcHJpdmF0ZSBzY3JvbGxNYXJnaW4gPSAzMDtcbiAgaGFuZGxlQ2VsbEF1dG9TY3JvbGwoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBob3Jpem9udGFsQ29udGFpbmVyID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHZlcnRpY2FsQ29udGFpbmVyID0gdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFob3Jpem9udGFsQ29udGFpbmVyIHx8ICF2ZXJ0aWNhbENvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnN0IGhvcml6b250YWxSZWN0ID0gaG9yaXpvbnRhbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBtb3VzZVggPSBldmVudC5jbGllbnRYO1xuICAgIGNvbnN0IHZlcnRpY2FsUmVjdCA9IHZlcnRpY2FsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG1vdXNlWSA9IGV2ZW50LmNsaWVudFk7XG4gICAgY29uc3QgbmVhclRvcCA9IG1vdXNlWSAtIHZlcnRpY2FsUmVjdC50b3AgPCB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICBjb25zdCBuZWFyQm90dG9tID0gdmVydGljYWxSZWN0LmJvdHRvbSAtIG1vdXNlWSA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGNvbnN0IG5lYXJMZWZ0ID0gbW91c2VYIC0gaG9yaXpvbnRhbFJlY3QubGVmdCA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGNvbnN0IG5lYXJSaWdodCA9IGhvcml6b250YWxSZWN0LnJpZ2h0IC0gbW91c2VYIDwgdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgbGV0IHNjcm9sbFggPSAwO1xuICAgIGxldCBzY3JvbGxZID0gMDtcbiAgICBpZiAobmVhclRvcCkgc2Nyb2xsWSA9IC10aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChuZWFyQm90dG9tKSBzY3JvbGxZID0gdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAobmVhckxlZnQpIHNjcm9sbFggPSAtdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAobmVhclJpZ2h0KSBzY3JvbGxYID0gdGhpcy5zY3JvbGxTcGVlZDtcbiAgICBpZiAoc2Nyb2xsWCAhPT0gMCB8fCBzY3JvbGxZICE9PSAwKSB7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChzY3JvbGxYICE9PSAwKSB7XG4gICAgICAgICAgaG9yaXpvbnRhbENvbnRhaW5lci5zY3JvbGxCeShzY3JvbGxYLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Nyb2xsWSAhPT0gMCkge1xuICAgICAgICAgIHZlcnRpY2FsQ29udGFpbmVyLnNjcm9sbEJ5KDAsIHNjcm9sbFkpO1xuICAgICAgICB9XG4gICAgICB9LCA4KTtcbiAgICB9XG4gIH1cblxuICBzdG9wQXV0b1Njcm9sbCgpIHtcbiAgICBpZiAodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gUm93IFNlbGVjdGlvbiBmcm9tIHRoZSBJbmRleGluZyBJbXBsZW1lbnRlZCBIZXJlXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICByb3dTZWxlY3RlZEluZGV4ZXM6IFNldDxudW1iZXI+ID0gbmV3IFNldCgpO1xuICByb3dTZWxlY3RpbmcgPSBmYWxzZTtcbiAgcm93U2VsZWN0aW9uU3RhcnRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGF1dG9TY3JvbGxJbnRlcnZhbDogYW55ID0gbnVsbDtcblxuICBnZXQgZmlyc3RTZWxlY3RlZFJvdygpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIE1hdGgubWluKC4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzKTtcbiAgfVxuXG4gIGdldCBsYXN0U2VsZWN0ZWRSb3coKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLnNpemUgPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyk7XG4gIH1cblxuXG4gIG9uUm93TW91c2VEb3duKGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGluZyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmFkZChpbmRleCk7XG4gICAgdGhpcy5hY3RpdmVDZWxsID0gJyc7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgbW91c2VNb3ZlSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB0aGlzLmhhbmRsZUF1dG9TY3JvbGwoZSk7XG4gICAgY29uc3QgbW91c2VVcEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uUm93TW91c2VVcCgpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1vdXNlVXBIYW5kbGVyKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuYXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdXNlTW92ZUhhbmRsZXIpO1xuICB9XG5cbiAgb25Sb3dNb3VzZU92ZXIoaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucm93U2VsZWN0aW5nIHx8IHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbih0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXgsIGluZGV4KTtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1heCh0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXgsIGluZGV4KTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmFkZChpKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coWy4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzXSk7XG4gIH1cblxuICBvblJvd01vdXNlVXAoKSB7XG4gICAgdGhpcy5yb3dTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1NlbGVjdGlvblN0YXJ0SW5kZXggPSBudWxsO1xuICB9XG4gIGhhbmRsZUF1dG9TY3JvbGwoZTogTW91c2VFdmVudCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlZGdlU2l6ZSA9IDQwXG4gICAgbGV0IHNjcm9sbEFtb3VudCA9IDA7XG5cbiAgICBpZiAoZS5jbGllbnRZIDwgcmVjdC50b3AgKyBlZGdlU2l6ZSkge1xuICAgICAgc2Nyb2xsQW1vdW50ID0gLTE1MDtcbiAgICB9IGVsc2UgaWYgKGUuY2xpZW50WSA+IHJlY3QuYm90dG9tIC0gZWRnZVNpemUpIHtcbiAgICAgIHNjcm9sbEFtb3VudCA9IDE1MDtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsQW1vdW50ICE9PSAwKSB7XG4gICAgICBpZiAoIXRoaXMuYXV0b1Njcm9sbEludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSAoKSA9PiB7XG4gICAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCArPSBzY3JvbGxBbW91bnQ7XG4gICAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXV0b1Njcm9sbEludGVydmFsID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvLyBnZXRTZWxlY3RlZERhdGFGb3JDb3B5KCk6IGFueVtdW10ge1xuICAvLyAgIGNvbnN0IGNvcGllZFJvd3M6IGFueVtdW10gPSBbXTtcbiAgLy8gICBjb25zdCBmaW5kUm93QnlWaXJ0dWFsSW5kZXggPSAodkluZGV4OiBudW1iZXIpID0+XG4gIC8vICAgICB0aGlzLmRhdGFTZXQuZmluZCgocjogYW55KSA9PiByLl9fdmlydHVhbEluZGV4ID09PSB2SW5kZXgpO1xuICAvLyAgIGlmICh0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyAmJiB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplID4gMCkge1xuICAvLyAgICAgY29uc3Qgc29ydGVkSW5kZXhlcyA9IFsuLi50aGlzLnJvd1NlbGVjdGVkSW5kZXhlc10uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAvLyAgICAgZm9yIChjb25zdCB2SW5kZXggb2Ygc29ydGVkSW5kZXhlcykge1xuICAvLyAgICAgICBjb25zdCByb3cgPSBmaW5kUm93QnlWaXJ0dWFsSW5kZXgodkluZGV4KTtcbiAgLy8gICAgICAgaWYgKCFyb3cpIGNvbnRpbnVlO1xuICAvLyAgICAgICBjb25zdCByb3dWYWx1ZXMgPSB0aGlzLmNvbHVtbnMuZmxhdE1hcChjb2wgPT5cbiAgLy8gICAgICAgICBjb2wuY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pXG4gIC8vICAgICAgICAgICA/IGNvbC5jaGlsZHJlbi5tYXAoKGM6IHsgZmllbGQ6IHN0cmluZyB9KSA9PlxuICAvLyAgICAgICAgICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjLmZpZWxkKSA/PyAnJ1xuICAvLyAgICAgICAgICAgICApXG4gIC8vICAgICAgICAgICA6IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID8/ICcnXG4gIC8vICAgICAgICk7XG4gIC8vICAgICAgIGNvcGllZFJvd3MucHVzaChyb3dWYWx1ZXMpO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICAvLyAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMgJiYgdGhpcy5zZWxlY3RlZENlbGxzLmxlbmd0aCA+IDApIHtcbiAgLy8gICAgIGNvbnN0IHJvd3NNYXAgPSBuZXcgTWFwPG51bWJlciwgYW55W10+KCk7XG4gIC8vICAgICBmb3IgKGNvbnN0IGNlbGwgb2YgdGhpcy5zZWxlY3RlZENlbGxzKSB7XG4gIC8vICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleChjZWxsLnJvd0luZGV4KTtcbiAgLy8gICAgICAgaWYgKCFyb3cpIGNvbnRpbnVlO1xuXG4gIC8vICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sdW1uc1tjZWxsLmNvbEluZGV4XTtcbiAgLy8gICAgICAgbGV0IGZpZWxkTmFtZSA9IGNvbD8uZmllbGQ7XG4gIC8vICAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XSkge1xuICAvLyAgICAgICAgIGZpZWxkTmFtZSA9IGNvbC5jaGlsZHJlbltjZWxsLnN1YkNvbEluZGV4XS5maWVsZDtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBmaWVsZE5hbWUpID8/ICcnO1xuXG4gIC8vICAgICAgIGlmICghcm93c01hcC5oYXMoY2VsbC5yb3dJbmRleCkpIHJvd3NNYXAuc2V0KGNlbGwucm93SW5kZXgsIFtdKTtcbiAgLy8gICAgICAgcm93c01hcC5nZXQoY2VsbC5yb3dJbmRleCkhLnB1c2godmFsdWUpO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBzb3J0ZWRDZWxscyA9IFsuLi5yb3dzTWFwLmVudHJpZXMoKV1cbiAgLy8gICAgICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhIC0gYilcbiAgLy8gICAgICAgLm1hcCgoW18sIHZdKSA9PiB2KTtcblxuICAvLyAgICAgY29waWVkUm93cy5wdXNoKC4uLnNvcnRlZENlbGxzKTtcbiAgLy8gICB9XG5cbiAgLy8gICBpZiAoY29waWVkUm93cy5sZW5ndGggPT09IDApIHtcbiAgLy8gICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYWN0aXZlLWNlbGwnKTtcbiAgLy8gICAgIGlmIChhY3RpdmVDZWxsKSByZXR1cm4gW1thY3RpdmVDZWxsLnRleHRDb250ZW50Py50cmltKCkgfHwgJyddXTtcbiAgLy8gICB9XG4gIC8vICAgY29uc3QgbWF4Q29scyA9IGNvcGllZFJvd3MucmVkdWNlKChtYXgsIHJvdykgPT4gTWF0aC5tYXgobWF4LCByb3cubGVuZ3RoKSwgMCk7XG4gIC8vICAgY29uc3Qgbm9ybWFsaXplZCA9IGNvcGllZFJvd3MubWFwKHJvdyA9PiB7XG4gIC8vICAgICBjb25zdCBuZXdSb3cgPSBbLi4ucm93XTtcbiAgLy8gICAgIHdoaWxlIChuZXdSb3cubGVuZ3RoIDwgbWF4Q29scykgbmV3Um93LnB1c2goJycpOyBcbiAgLy8gICAgIHJldHVybiBuZXdSb3c7XG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIC8vIH1cblxuXG4gIHVuZG9TdGFjazogYW55W11bXSA9IFtdO1xuICByZWRvU3RhY2s6IGFueVtdW10gPSBbXTtcblxuICBwcml2YXRlIGNsb25lRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gIH1cblxuICBwZXJmb3JtQ3V0KHNlbGVjdGVkRGF0YTogYW55W11bXSkge1xuICAgIC8vIFNhdmUgY3VycmVudCBzdGF0ZSBmb3IgdW5kb1xuICAgIHRoaXMudW5kb1N0YWNrLnB1c2godGhpcy5jbG9uZURhdGEodGhpcy52aXNpYmxlUm93cykpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107IC8vIENsZWFyIHJlZG8gc3RhY2sgb24gbmV3IGFjdGlvblxuXG4gICAgLy8gUGVyZm9ybSBjdXRcbiAgICB0aGlzLmNvcHlTZXJ2aWNlLmN1dFdpdGhBbmltYXRpb24oc2VsZWN0ZWREYXRhKTtcbiAgICBjb25zdCB7IHVwZGF0ZWRSb3dzIH0gPSB0aGlzLmNvcHlTZXJ2aWNlLmN1dFNlbGVjdGVkU2VsZWN0ZWREYXRhKFxuICAgICAgdGhpcy52aXNpYmxlUm93cyxcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLFxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxzLFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZS5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdVcGRhdGVkIFJvd3M6ICcsIHVwZGF0ZWRSb3dzKTtcbiAgfVxuXG5cblxuICBnZXRTZWxlY3RlZERhdGFGb3JDb3B5KCk6IGFueVtdW10ge1xuICAgIHJldHVybiB0aGlzLmNvcHlTZXJ2aWNlLmdldFNlbGVjdGVkRGF0YUZvckNvcHkoXG4gICAgICB0aGlzLmRhdGFTZXQsXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcyxcbiAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscyxcbiAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUuYmluZCh0aGlzKVxuICAgICk7XG4gIH1cblxuXG4gIHBhZ2VTaXplS2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIHByaXZhdGUgYnVpbGRQYWdlU2l6ZUtleU1hcCgpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplS2V5TWFwID0ge307XG5cbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucy5mb3JFYWNoKChzaXplLCBpbmRleCkgPT4ge1xuICAgICAgLy8gS2V5czogMeKAkzksIHRoZW4gMCBmb3IgMTB0aCBpdGVtXG4gICAgICBjb25zdCBrZXkgPVxuICAgICAgICBpbmRleCA8IDlcbiAgICAgICAgICA/IFN0cmluZyhpbmRleCArIDEpXG4gICAgICAgICAgOiBpbmRleCA9PT0gOVxuICAgICAgICAgID8gJzAnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHRoaXMucGFnZVNpemVLZXlNYXBba2V5XSA9IHNpemU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgaXNGb3JtRmllbGQgPVxuICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgIHRhcmdldC50YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8XG4gICAgICB0YXJnZXQuaXNDb250ZW50RWRpdGFibGU7XG4gICAgaWYgKGlzRm9ybUZpZWxkIHx8IHRoaXMubG9hZGluZykgcmV0dXJuO1xuXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmICFldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5nb1RvTmV4dFBhZ2UoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDdHJsICsgQXJyb3cgTGVmdCDihpIgUHJldmlvdXMgUGFnZVxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZ29Ub1ByZXZpb3VzUGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEN0cmwgKyBTaGlmdCArIEFycm93IFJpZ2h0IOKGkiBMYXN0IFBhZ2VcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmdvVG9MYXN0UGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBMZWZ0IOKGkiBGaXJzdCBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmdvVG9GaXJzdFBhZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IFxuXG4gICAgLy8gQ3RybCArIFNoaWZ0ICsgQXJyb3cgUmlnaHQg4oaSIExhc3QgUGFnZVxuICAgIGNvbnN0IE1JTl9IRUlHSFQgPSAyODtcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmhlYWRlclJvd0hlaWdodCArPSAxO1xuICAgICAgdGhpcy5yb3dIZWlnaHQgKz0gMTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBSaWdodCDihpIgTGFzdCBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gTWF0aC5tYXgoTUlOX0hFSUdIVCwgdGhpcy5oZWFkZXJSb3dIZWlnaHQgLSAxKTtcbiAgICAgdGhpcy5yb3dIZWlnaHQgPSBNYXRoLm1heChNSU5fSEVJR0hULCB0aGlzLnJvd0hlaWdodCAtIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAgICAgXG5cbiAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICcvJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaElucHV0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RWwgPSB0aGlzLmdsb2JhbFNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlucHV0RWwuZm9jdXMoKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxPdXRsaW5lID0gaW5wdXRFbC5zdHlsZS5vdXRsaW5lO1xuICAgICAgICBjb25zdCBvcmlnaW5hbEJveFNoYWRvdyA9IGlucHV0RWwuc3R5bGUuYm94U2hhZG93O1xuICAgICAgICBpbnB1dEVsLnN0eWxlLnNldFByb3BlcnR5KCdvdXRsaW5lJywgJzJweCBzb2xpZCAjNGY5Y2ZmJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnYm94LXNoYWRvdycsICcwIDAgOHB4IDJweCAjNGY5Y2ZmJywgJ2ltcG9ydGFudCcpOyBcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3V0bGluZScsIG9yaWdpbmFsT3V0bGluZSB8fCAnJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgIGlucHV0RWwuc3R5bGUuc2V0UHJvcGVydHkoJ2JveC1zaGFkb3cnLCBvcmlnaW5hbEJveFNoYWRvdyB8fCAnJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAncicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hdXRvc2l6ZUFsbENvbHVtbnMoKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYycpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZENzdignY3N2Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdlJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmRvd25sb2FkQ3N2KCd4bHN4Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSAhdGhpcy5zaG93VmVydGljYWxCb3JkZXI7XG4gICAgICAgIHRoaXMub25Gb250Q2hhbmdlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnaCcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9ICF0aGlzLnJvd1NoYWRpbmdFbmFibGVkO1xuICAgICAgICB0aGlzLm9uRm9udENoYW5nZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAncycpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCgnc21hbGwnKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ20nKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ21lZGl1bScpXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbCcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCgnbGFyZ2UnKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgXG5cblxuICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgIGNvbnN0IG5ld0xpbWl0ID0gdGhpcy5wYWdlU2l6ZUtleU1hcFtldmVudC5rZXldO1xuICAgICAgaWYgKG5ld0xpbWl0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQgIT09IG5ld0xpbWl0KSB7XG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0ID0gbmV3TGltaXQ7XG4gICAgICAgICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgY29uc3QgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0YS1ncmlkLWJvZHktd3JhcHBlcicpO1xuICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiAhdGFibGVDb250YWluZXIuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2MnKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoICYmICF0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplKSByZXR1cm5cbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWREYXRhRm9yQ29weSgpO1xuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY29weVNlcnZpY2UuY29weVRvQ2xpcGJvYXJkKHNlbGVjdGVkRGF0YSk7XG5cbiAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAneCcpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGggfHwgIXRoaXMuZW5hYmxlQ3V0KSByZXR1cm5cbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWREYXRhRm9yQ29weSgpO1xuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucGVyZm9ybUN1dChzZWxlY3RlZERhdGEpO1xuXG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3onKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoKSByZXR1cm5cbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnVuZG8oKTtcblxuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd5Jykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkgcmV0dXJuXG4gICAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5yZWRvKCk7XG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICdhJykge1xuICAgICAgLy8g4pyFIFNlbGVjdCBhbGwgY2VsbHNcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNlbGVjdEFsbENlbGxzKCk7XG4gICAgICB9XG4gIH1cblxuICBnb1RvTmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZTtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXM7XG4gICAgaWYgKGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKGN1cnJlbnRQYWdlICsgMSk7XG4gIH1cblxuICBnb1RvUHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZTtcbiAgICAgIGlmIChjdXJyZW50UGFnZSA8PSAxKSByZXR1cm47XG4gICAgICB0aGlzLmdvVG9QYWdlKGN1cnJlbnRQYWdlIC0gMSk7XG4gICAgfVxuXG4gICAgZ29Ub0ZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPT09IDEpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKDEpO1xuICB9XG5cbiAgZ29Ub0xhc3RQYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXM7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID09PSBsYXN0UGFnZSkgcmV0dXJuO1xuICAgIHRoaXMuZ29Ub1BhZ2UobGFzdFBhZ2UpO1xuICB9XG5cblxuXG5cbiAgc2VsZWN0QWxsQ2VsbHMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuXG4gICAgLy8gU2V0IHNlbGVjdGlvbiBzdGFydCBsaWtlIHNpbmdsZSBzZWxlY3Rpb24gKGZpcnN0IGNlbGwpXG4gICAgaWYgKHRoaXMuZGF0YVNldC5sZW5ndGggJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmlyc3RGaWVsZCA9IHRoaXMuY29sdW1uc1swXS5maWVsZCB8fCB0aGlzLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSB7XG4gICAgICAgIHJvd0luZGV4OiAwLFxuICAgICAgICBjb2xJbmRleDogMCxcbiAgICAgICAgc3ViQ29sSW5kZXg6IDAsXG4gICAgICAgIGZpZWxkOiBmaXJzdEZpZWxkLFxuICAgICAgICBrZXk6IGAwLTAtMC0ke2ZpcnN0RmllbGR9YCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IHRydWU7XG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDw9IHRoaXMuZGF0YVNldD8ubGVuZ3RoOyByb3dJbmRleCsrKSB7XG4gICAgICBpZiAoIXJvd0luZGV4KSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVNldFtyb3dJbmRleF07XG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5hZGQocm93SW5kZXgpO1xuXG4gICAgICAvLyBmb3IgKGxldCBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgLy8gICBjb25zdCBjb2wgPSB0aGlzLmNvbHVtbnNbY29sSW5kZXhdO1xuICAgICAgLy8gICBjb25zdCBmaWVsZCA9IGNvbC5maWVsZCB8fCBjb2wubmFtZTtcbiAgICAgIC8vICAgaWYoIWNvbC5pc192aXNpYmxlKSBjb250aW51ZTtcblxuICAgICAgLy8gICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIC8vICAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaCgoc3ViOiBhbnksIHN1YkNvbEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vICAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3N1YkNvbEluZGV4fS0ke2ZpZWxkfWA7XG4gICAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5hZGQoa2V5KTtcbiAgICAgIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscy5wdXNoKHtcbiAgICAgIC8vICAgICAgICAgcm93SW5kZXgsXG4gICAgICAvLyAgICAgICAgIGNvbEluZGV4LFxuICAgICAgLy8gICAgICAgICBzdWJDb2xJbmRleCxcbiAgICAgIC8vICAgICAgICAgZmllbGQsXG4gICAgICAvLyAgICAgICAgIGtleSxcbiAgICAgIC8vICAgICAgIH0pO1xuICAgICAgLy8gICAgIH0pO1xuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0wLSR7ZmllbGR9YDtcbiAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkS2V5cy5hZGQoa2V5KTtcbiAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMucHVzaCh7XG4gICAgICAvLyAgICAgICByb3dJbmRleCxcbiAgICAgIC8vICAgICAgIGNvbEluZGV4LFxuICAgICAgLy8gICAgICAgc3ViQ29sSW5kZXg6IDAsXG4gICAgICAvLyAgICAgICBmaWVsZCxcbiAgICAgIC8vICAgICAgIGtleSxcbiAgICAgIC8vICAgICB9KTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoaWdobGlnaHRpbmcgYW5kIFVJXG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG5cbiAgICAvLyBTdG9wIFwic2VsZWN0aW5nXCIgbW9kZSBzaW5jZSBpdCdzIGEgb25lLXRpbWUgc2VsZWN0LWFsbFxuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgfVxuXG5cblxuICB1bmRvKCkge1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLnVuZG9TdGFjay5wb3AoKSE7XG4gICAgICB0aGlzLnJlZG9TdGFjay5wdXNoKHRoaXMuY2xvbmVEYXRhKHRoaXMudmlzaWJsZVJvd3MpKTtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmNsb25lRGF0YShwcmV2U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZG8oKSB7XG4gICAgaWYgKHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMucmVkb1N0YWNrLnBvcCgpITtcbiAgICAgIHRoaXMudW5kb1N0YWNrLnB1c2godGhpcy5jbG9uZURhdGEodGhpcy52aXNpYmxlUm93cykpO1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuY2xvbmVEYXRhKG5leHRTdGF0ZSk7XG4gICAgfVxuICB9XG5cblxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnBhc3RlJywgWyckZXZlbnQnXSlcbiAgYXN5bmMgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBpZighdGhpcy5lbmFibGVDdXQpIHJldHVybjtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgdGFnID0gdGFyZ2V0Py50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnIHx8IHRhcmdldD8uZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCB8fCAhdGhpcy5hY3RpdmVDZWxsKSByZXR1cm47XG5cbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIGNvbnN0IHVzZXJDb25maXJtZWQgPSBhd2FpdCB0aGlzLnNob3dDb25maXJtYXRpb25Nb2RhbChcbiAgICAgICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcGFzdGUgdGhlIGNvcGllZCBkYXRhPydcbiAgICApO1xuXG4gICAgaWYgKCF1c2VyQ29uZmlybWVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHRoaXMuc2VsZWN0ZWRDZWxscz8uWzBdO1xuICAgIGlmICghc3RhcnRDZWxsKSByZXR1cm47XG5cbiAgICBjb25zdCB1cGRhdGVkUm93cyA9IGF3YWl0IHRoaXMuY29weVNlcnZpY2UucGFzdGVGcm9tQ2xpcGJvYXJkVGV4dChcbiAgICAgIHRleHQsXG4gICAgICB0aGlzLnZpc2libGVSb3dzLFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgc3RhcnRDZWxsLnJvd0luZGV4LFxuICAgICAgc3RhcnRDZWxsLmNvbEluZGV4LFxuICAgICAgc3RhcnRDZWxsLnN1YkNvbEluZGV4XG4gICAgKTtcblxuICAgIGlmICh1cGRhdGVkUm93cz8udXBkYXRlUm93cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHtcbiAgICAgICAgZGF0YTogdXBkYXRlZFJvd3M/LnVwZGF0ZVJvd3MsXG4gICAgICAgIGV2ZW50VHlwZTogJ29uQ2VsbEVkaXQnLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgICAgY29sdW1uOiB1cGRhdGVkUm93cz8uY3VycmVudENvbHVtc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnY3VzdG9tLW92ZXJsYXktd3JhcHBlcicpO1xuICAgICAgb3ZlcmxheS5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLW92ZXJsYXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1tb2RhbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtb2RhbC1tZXNzYWdlXCI+JHttZXNzYWdlfTwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY29uZmlybVwiPkNvbmZpcm08L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gICAgICBjb25zdCBjb25maXJtQnRuID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuYnRuLWNvbmZpcm0nKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGNhbmNlbEJ0biA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmJ0bi1jYW5jZWwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3ZlcmxheSk7XG4gICAgICB9O1xuICAgICAgY29uZmlybUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuXG5cblxuICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhaXNOYU4obmV3IERhdGUodmFsdWUpPy5nZXRUaW1lKCkpO1xuICB9XG5cblxuICAvLyBIb2xkIGV4cGFuZGVkIElEcyAoYXJyYXkgZm9yIG11bHRpcGxlLCBzaW5nbGUgdmFsdWUgZm9yIHNpbmdsZSlcbiAgZXhwYW5kZWRlZERldGFpbFJvd3M6IChzdHJpbmcgfCBudW1iZXIpW10gfCBzdHJpbmcgfCBudW1iZXIgPSAnJztcblxuICB0b2dnbGVEZXRhaWxSb3dFeHBhbmQocm93OiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IHJvdz8uaWQgfHwgcm93Py5faWQ7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09ICdBc3NldHMnICYmIHJvdz8uZGV0YWlsPy5jb2x1bW5zKSB7XG4gICAgICByb3cuZGV0YWlsLmNvbHVtbnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0ud2lkdGggPSBpdGVtPy53aWR0aCB8fCAodGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC8gcm93LmRldGFpbC5jb2x1bW5zPy5sZW5ndGgpXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJldmlld05lc3RlZENvbHMgPSB0aGlzLmRlZXBDbG9uZUNvbHVtbnMocm93LmRldGFpbC5jb2x1bW5zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMua2VlcE11bHRpcGxlRXhwYW5kZWREZXRhaWxzKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cykpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9IFtdO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzIGFzIChzdHJpbmcgfCBudW1iZXIpW107XG4gICAgICBjb25zdCBpbmRleCA9IGV4cGFuZGVkLmluZGV4T2YoaWQpO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBleHBhbmRlZC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwYW5kZWQucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID09PSBpZCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gaWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2b2lkIHRoaXMucmlnaHRQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNlbnRlclBpbm5lZEJvZHk/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLnJpZ2h0UGlubmVkQm9keT8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAzMDApXG4gIH1cblxuICBpc0RldGFpbHNFeHBhbmRlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gcm93Py5pZCB8fCByb3c/Ll9pZDtcblxuICAgIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cykgJiZcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cy5pbmNsdWRlcyhpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID09PSBpZDtcbiAgICB9XG4gIH1cblxuICBnZXRGaWx0ZXJWYWx1ZShvcHRpb246IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIG9wdGlvbj8udmFsdWUgPz8gb3B0aW9uO1xuICB9XG5cblxuICBvcGVuSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICB0b2dnbGVNZW51KGk6IG51bWJlciwgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB9XG4gICAgdGhpcy5vcGVuSW5kZXggPSB0aGlzLm9wZW5JbmRleCA9PT0gaSA/IG51bGwgOiBpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnbmVzdGVkVGFibGUnKVxuICBuZXN0ZWRUYWJsZSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBnZXQgaGFzVmVydGljYWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm5lc3RlZFRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMubmVzdGVkVGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgZ2V0IGhhc0hvcml6b250YWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm5lc3RlZFRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZWwgPSB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGg7XG4gIH1cblxuXG4gIGdldFRvdGFsQW1vdW50KGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4/LmlzX2Ftb3VudCkgcmV0dXJuO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5vcmlnaW5hbERhdGFTZXQucmVkdWNlKChzdW0sIHJvdykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXSB8fCAwO1xuICAgICAgcmV0dXJuIHN1bSArIHZhbHVlO1xuICAgIH0sIDApO1xuICAgIGlmICghdG90YWwpIHJldHVybiBgJHt0aGlzLmN1cnJlbmN5U3ltYm9sfSAwLjAwYFxuICAgIHJldHVybiBgJHt0aGlzLmN1cnJlbmN5U3ltYm9sfSAke3RoaXMuZm9ybWF0Q3VycmVuY3kudHJhbnNmb3JtKHRvdGFsLCB0aGlzLmN1cnJlbmN5Rm9ybWF0KX1gO1xuICB9XG5cbiAgZHJvcENvbHVtbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+LCByb3c6IGFueSkge1xuICAgIC8vIFJlb3JkZXIgdGhlIGNvbHVtbnMgYXJyYXlcbiAgICBtb3ZlSXRlbUluQXJyYXkocm93LmRldGFpbC5jb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgY3VycmVudFN1YlNvcnRDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBhY3RpdmUgY29sdW1uXG4gIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnOyAvLyBhY3RpdmUgZGlyZWN0aW9uXG5cbiAgc29ydE5lc3RlZENvbChjb2w6IGFueSwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBkYXRhU2V0ID0gcm93Py5kZXRhaWw/LnJlc3VsdDtcbiAgICBpZiAodGhpcy5jdXJyZW50U3ViU29ydENvbHVtbiA9PT0gY29sLmZpZWxkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50U3ViU29ydENvbHVtbiA9IGNvbC5maWVsZDtcbiAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICB9XG4gICAgY29sLm9yZGVyX2J5ID0gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbjtcblxuICAgIC8vIFNvcnQgY29weSBpbnN0ZWFkIG9mIG11dGF0aW5nXG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmRhdGFTZXRdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGxldCBhVmFsID0gYVtjb2wuZmllbGRdO1xuICAgICAgbGV0IGJWYWwgPSBiW2NvbC5maWVsZF07XG4gICAgICBhVmFsID0gYVZhbCA9PSBudWxsID8gJycgOiBhVmFsO1xuICAgICAgYlZhbCA9IGJWYWwgPT0gbnVsbCA/ICcnIDogYlZhbDtcblxuICAgICAgaWYgKGNvbC50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgYVZhbCA9IG5ldyBEYXRlKGFWYWwpLmdldFRpbWUoKTtcbiAgICAgICAgYlZhbCA9IG5ldyBEYXRlKGJWYWwpLmdldFRpbWUoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYU51bSA9IHBhcnNlRmxvYXQoYVZhbCk7XG4gICAgICBjb25zdCBiTnVtID0gcGFyc2VGbG9hdChiVmFsKTtcbiAgICAgIGNvbnN0IGJvdGhOdW1iZXJzID0gIWlzTmFOKGFOdW0pICYmICFpc05hTihiTnVtKTtcblxuICAgICAgaWYgKGJvdGhOdW1iZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IGFOdW0gLSBiTnVtIDogYk51bSAtIGFOdW07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb21wID0gU3RyaW5nKGFWYWwpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKGJWYWwpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gY29tcCA6IC1jb21wO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcm93LmRldGFpbC5yZXN1bHQgPSBzb3J0ZWQ7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGdldENvbHVtbldpZHRoUHgocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoY29sLndpZHRoKSByZXR1cm4gY29sLndpZHRoICsgJ3B4JztcbiAgICBjb25zdCBwaXhlbHMgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCAvIHJvdy5kZXRhaWw/LmNvbHVtbnMubGVuZ3RoO1xuICAgIHJldHVybiBwaXhlbHMgKyAncHgnO1xuICB9XG5cbiAgZnVsbHNjcmVlbkltYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXG4gIC8vIEFzc2VzdHMgTmVzdGVkIFRhYmxlIFdvcmsgSW1wbGVtZW50ZWQgSGVyZVxuXG4gIHBpblVucGluQ29sdW0oY29sOiBhbnksIHZhbHVlOiAnbGVmdCcgfCAncmlnaHQnIHwgbnVsbCwgY29sdW1uczogYW55W10pIHtcbiAgICBjb2wucGlubmVkID0gdmFsdWU7XG4gICAgY29uc3QgbGVmdCA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy5waW5uZWQgPT09ICdsZWZ0Jyk7XG4gICAgY29uc3QgbWlkZGxlID0gY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5waW5uZWQgfHwgYy5waW5uZWQgPT09IG51bGwpO1xuICAgIGNvbnN0IHJpZ2h0ID0gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ3JpZ2h0Jyk7XG4gICAgY29sdW1ucy5sZW5ndGggPSAwO1xuICAgIGNvbHVtbnMucHVzaCguLi5sZWZ0LCAuLi5taWRkbGUsIC4uLnJpZ2h0KTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gIH1cblxuICBnZXRMZWZ0UGlubmVkQ291bnQoY29sdW1uczogYW55W10pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAnbGVmdCcpLmxlbmd0aDtcbiAgfVxuXG4gIGdldFJpZ2h0UGlubmVkQ291bnQoY29sdW1uczogYW55W10pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAncmlnaHQnKS5sZW5ndGg7XG4gIH1cblxuICBnZXRTdGlja3lMZWZ0KGNvbHVtbnM6IGFueVtdLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgbGVmdCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBwcmV2Q29sID0gY29sdW1uc1tpXTtcbiAgICAgIGlmIChwcmV2Q29sLnBpbm5lZCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnQgKz0gcHJldkNvbC53aWR0aCB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgJHtsZWZ0fXB4YDtcbiAgfVxuXG4gIHByZXZpZXdOZXN0ZWRDb2xzOiBhbnlbXSA9IFtdO1xuICBvbk5lc3RlZENvbFNvcnQoZXZlbnQ6IENka0RyYWdTb3J0RXZlbnQ8YW55W10+LCBjb2x1bW5zOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICghZXZlbnQgfHwgIWNvbHVtbnMpIHJldHVybjtcbiAgICBjb25zdCBmaXJzdFBvc2l0aW9ucyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29uc3QgY29sQ2VsbHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7Y29sLmZpZWxkfVwiXWApKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgICAgY29sQ2VsbHMuZm9yRWFjaCgoZWwpID0+IGZpcnN0UG9zaXRpb25zLnNldChlbCwgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkpO1xuICAgIH0pO1xuICAgIG1vdmVJdGVtSW5BcnJheShjb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdXBkYXRlZENlbGxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCkgPz8gbmV3TGVmdDtcbiAgICAgICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcblxuICAgICAgICAgIGlmIChkZWx0YVggIT09IDApIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuICAgICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDI1MG1zIGVhc2UnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknO1xuICAgICAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGNsZWFudXApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBjbGVhbnVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIHNhdmVTZWxlY3Rpb24oc2VsZWN0ZWRJZHM6IHN0cmluZ1tdLCB0YWJsZVR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGFibGVUeXBlKSByZXR1cm47XG4gICAgY29uc3Qgc3RvcmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YXRhYmxlU2VsZWN0aW9ucycpIHx8ICd7XCJzZWxlY3RlZFJvd3NcIjoge319Jyk7XG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBzdG9yZWQuc2VsZWN0ZWRSb3dzIHx8IHt9O1xuICAgIGFsbFNlbGVjdGVkW3RhYmxlVHlwZV0gPSBzZWxlY3RlZElkcztcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICdkYXRhdGFibGVTZWxlY3Rpb25zJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBhbGxTZWxlY3RlZCxcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRhYmxlVHlwZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICByZXN0b3JlU2VsZWN0aW9uKHRhYmxlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RvcmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YXRhYmxlU2VsZWN0aW9ucycpIHx8ICd7fScpO1xuICAgIGNvbnN0IGlkcyA9IHN0b3JlZC5zZWxlY3RlZFJvd3M/Llt0YWJsZVR5cGVdIHx8IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gbmV3IFNldChpZHMpO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cztcbiAgfVxuXG5cblxuICBpc091dHNpZGVDb250YWluZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWN0OiBET01SZWN0IHwgbnVsbCA9IG51bGw7XG5cblxuICBvbkRyYWdTdGFydGVkKGNvbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4gPSBjb2w7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGEtZ3JpZC1tYWluLWNvbnRhaW5lcicpO1xuICAgIHRoaXMuY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lcj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfHwgbnVsbDtcbiAgfVxuXG4gIG9uRHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250YWluZXJSZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB7IHgsIHkgfSA9IGV2ZW50LnBvaW50ZXJQb3NpdGlvbjtcbiAgICBjb25zdCBpc091dHNpZGUgPVxuICAgICAgeCA8IHRoaXMuY29udGFpbmVyUmVjdC5sZWZ0IHx8XG4gICAgICB4ID4gdGhpcy5jb250YWluZXJSZWN0LnJpZ2h0IHx8XG4gICAgICB5IDwgdGhpcy5jb250YWluZXJSZWN0LnRvcCB8fFxuICAgICAgeSA+IHRoaXMuY29udGFpbmVyUmVjdC5ib3R0b207XG5cbiAgICAvLyBpZiAoaXNPdXRzaWRlICE9PSB0aGlzLmlzT3V0c2lkZUNvbnRhaW5lcikge1xuICAgIC8vICAgdGhpcy5pc091dHNpZGVDb250YWluZXIgPSBpc091dHNpZGU7XG4gICAgLy8gfVxuICB9XG5cbiAgb25EcmFnRW5kZWQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBpZiAodGhpcy5pc091dHNpZGVDb250YWluZXIgJiYgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4pIHtcbiAgICAgIC8vICAgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4hLmlzX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uID0gbnVsbDtcbiAgICAgIHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIC8vIH1cbiAgICB9LCAxMDApO1xuICAgIHRoaXMuY29udGFpbmVyUmVjdCA9IG51bGw7XG4gIH1cblxuICBnZXRTdGFydEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMgPT09IDBcbiAgICAgID8gMFxuICAgICAgOiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKSAqIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCArIDEgfHwgMDtcbiAgfVxuXG4gIGhhc0FueURlZmF1bHRWaWV3KCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlVmlldz8uc29tZSgoeCkgPT4geC5pc19kZWZhdWx0IHx8IHguaXNfdGVtcCk7XG4gIH1cblxuXG4gIGdldCBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGN1cnJQcmVzZXQgPSB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZTtcblxuICAgIGNvbnN0IGN1cnJlbnRQcmVzZXRDb2x1bW5zID0gY3VyclByZXNldD8uY29sdW1ucz8ubWFwKChjb2w6IHsgZmllbGQ6IGFueTsgd2lkdGg6IGFueTsgcGlubmVkOiBhbnk7IH0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgIHdpZHRoOiBjb2wud2lkdGgsXG4gICAgICAgIHBpbm5lZDogY29sLnBpbm5lZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/Lm1hcChjb2wgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbC53aWR0aCxcbiAgICAgICAgcGlubmVkOiBjb2wucGlubmVkXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQcmVzZXRDb2x1bW5zKTtcbiAgICBjb25zdCBzdHJpbmdDb2x1bW5zID0gSlNPTi5zdHJpbmdpZnkoY29sdW1ucyk7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVyc0NvbmZpZy5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZWQ6IGZpbHRlci5maWVsZCxcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBjb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LmNvbmRpdGlvbixcbiAgICAgICAgICBmaXJzdF9jb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LmZpcnN0X2NvbmRpdGlvbixcbiAgICAgICAgICBmaXJzdF92YWx1ZTogZmlsdGVyPy5xdWVyeT8uZmlyc3RfdmFsdWUsXG4gICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogZmlsdGVyPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbixcbiAgICAgICAgICBzZWNvbmRfdmFsdWU6IGZpbHRlcj8ucXVlcnk/LnNlY29uZF92YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgX2lkczogZmlsdGVyPy5faWRzXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGN1cnJlbnRQcmVzZXRGaWx0ZXJzID0gY3VyclByZXNldD8uZmlsdGVycz8ubWFwKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZWQ6IGZpbHRlci5maWVsZCxcbiAgICAgICAgcXVlcnk6IGZpbHRlci5xdWVyeSxcbiAgICAgICAgX2lkczogZmlsdGVyPy5faWRzXG4gICAgICB9XG4gICAgfSlcblxuXG4gICAgLy8gY29uc29sZS5sb2coXCJmaWx0ZXIgY29uZ2lnOiBcIiwgZmlsdGVycyk7XG4gICAgLy8gY29uc29sZS5sb2coXCJjdXJyZW50IHByZXNldCBmaWx0ZXJzOiBcIiwgY3VycmVudFByZXNldEZpbHRlcnMpO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ2lzRXF1YWwnLCBzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9PSBzdHJpbmdDb2x1bW5zKTtcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBUZW1wIFByZXNldCA6ICcsIGN1cnJQcmVzZXQpXG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgVGVtcCBQcmVzZXQgQ29scyBjb2x1bW5zOiAnLCBjdXJyZW50UHJlc2V0Q29sdW1ucylcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBjb2x1bW5zOiAnLCBjb2x1bW5zKTtcblxuICAgIGlmICghY3VycmVudFByZXNldENvbHVtbnMpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAoY3VycmVudFByZXNldENvbHVtbnMgJiYgKHN0cmluZ3NDdXJyZW50UHJlc3RDb2xzID09IHN0cmluZ0NvbHVtbnMpICYmIChKU09OLnN0cmluZ2lmeShmaWx0ZXJzKSA9PSBKU09OLnN0cmluZ2lmeShjdXJyZW50UHJlc2V0RmlsdGVycykpICYmICh0aGlzLmZvbnRGYWltbHkgPT0gY3VyclByZXNldC5jb25maWcuZm9udEZhaW1seSlcbiAgICAgICYmICh0aGlzLmJvZHlUZXh0Rm9udHNTaXplID09IGN1cnJQcmVzZXQuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplKSAmJlxuICAgICAgKHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9PSB0aGlzLmhlYWRlclRleHRGb250c1NpemUpXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyID09IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuZm9udEZhaW1seSA9PSB0aGlzLmZvbnRGYWltbHlcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0ID09IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dFxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplID09IHRoaXMuYm9keVRleHRGb250c1NpemVcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5yb3dTaGFkaW5nRW5hYmxlZCA9PSB0aGlzLnJvd1NoYWRpbmdFbmFibGVkKTtcblxuICAgIC8vIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25BY3Rpb25CdXR0b25DbGljayhidXR0b246IHN0cmluZykge1xuICAgIGNvbnN0IHRleHQgPSBidXR0b24/LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRleHQgPT0gJ2FjdGl2ZSBkYXRhJyB8fCB0ZXh0ID09ICdhY3RpdmUnIHx8IHRleHQgPT0gJ2RhdGEgYWN0aXZlJyB8fCB0ZXh0ID09ICd1bmFyY2hpdmVkIGRhdGEnIHx8IHRleHQgPT0gJ3VuYXJjaGl2ZSBkYXRhJykgdGhpcy5jbGVhclNlbGVjdGlvblN0YXRlKHRoaXMudGFibGVUeXBlKTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgIG9iajogYnV0dG9uXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiBcIm9uQWN0aW9uQnV0dG9uQ2xpY2tcIixcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cblxuICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gICAgY29uc3QgYWxsVGFicyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FjdGl2ZVRhYnMnKSB8fCAne30nKTtcbiAgICBhbGxUYWJzW3RoaXMudGFibGVUeXBlXSA9IHRhYjtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWN0aXZlVGFicycsIEpTT04uc3RyaW5naWZ5KGFsbFRhYnMpKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRhYmxlVHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICAgIG9iajogdGFiXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAnb25UYWJDaGFuZ2UnLFxuICAgIH07XG5cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldEJhY2tncm91bmRDb2xvcihyb3c6IGFueSwgaXNFdmVuOiBib29sZWFuLCBzZWN0aW9uOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmhvdmVyZWRSb3dJZCA9PT0gKHJvdy5faWQgfHwgcm93LmlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMucm93SG92ZXJDb2xvcjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGVja2VkUm93QmFja2dyb3VuZENvbG9yO1xuICAgIH1cbiAgICBsZXQgYmFzZUNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5yb3dTaGFkaW5nRW5hYmxlZCkge1xuICAgICAgYmFzZUNvbG9yID0gaXNFdmVuID8gdGhpcy5ldmVuUm93c0JhY2tncm91bmRDb2xvciA6IHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZUNvbG9yID0gdGhpcy5ldmVuUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgaWYgKCFiYXNlQ29sb3IpIHtcbiAgICAgIGlmIChzZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgYmFzZUNvbG9yID0gdGhpcy5sZWZ0UGlubmVkQmFja2dyb3VuZENvbG9yO1xuICAgICAgfSBlbHNlIGlmIChzZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgIGJhc2VDb2xvciA9IHRoaXMucmlnaHRQaW5uZWRCYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlQ29sb3IgPSB0aGlzLmJvZHlCYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYXNlQ29sb3I7XG4gIH1cblxuICBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGg7XG4gIH1cblxuXG4gIGdldFNhZmVDb21tZW50KGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYW5FZGl0b3JDb250ZW50KGRlc2NyaXB0aW9uKTtcbiAgfVxuICBjbGVhbkVkaXRvckNvbnRlbnQoY29udGVudDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyAxLiBEZWNvZGUgSFRNTCBlbnRpdGllc1xuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICB0ZXh0YXJlYS5pbm5lckhUTUwgPSBjb250ZW50O1xuICAgIGxldCBkZWNvZGVkID0gdGV4dGFyZWEudmFsdWU7XG5cbiAgICBkZWNvZGVkID0gZGVjb2RlZFxuICAgICAgLnJlcGxhY2UoLzxcXC8/KHNwYW58cHx0aGVhZHx0Ym9keXx0Zm9vdClbXj5dKj4vZywgJycpXG4gICAgICAucmVwbGFjZSgvJm5ic3A7L2csICcgJyk7XG5cbiAgICAvLyBFbnN1cmUgY2xlYW4gdGFibGUgc3RydWN0dXJlXG4gICAgZGVjb2RlZCA9IGRlY29kZWRcbiAgICAgIC5yZXBsYWNlKC88dGFibGVbXj5dKj4vZywgJzx0YWJsZT4nKVxuICAgICAgLnJlcGxhY2UoLzx0cltePl0qPi9nLCAnPHRyPicpXG4gICAgICAucmVwbGFjZSgvPHRoW14+XSo+L2csICc8dGg+JylcbiAgICAgIC5yZXBsYWNlKC88dGRbXj5dKj4vZywgJzx0ZD4nKTsgIC8vIFJlbW92ZSA8dGhlYWQ+IGFuZCA8dGJvZHk+IHRhZ3NcblxuICAgIC8vIDQuIEFkZCBpbmxpbmUgc3R5bGVzXG4gICAgZGVjb2RlZCA9IGRlY29kZWRcbiAgICAgIC8vIEFkZCBpbmxpbmUgc3R5bGVzIHRvIDx0YWJsZT5cbiAgICAgIC5yZXBsYWNlKC88dGFibGUoW14+XSopPi9nLCBgPHRhYmxlIHN0eWxlPVwid2lkdGg6IDEwMCU7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHBhZGRpbmc6IDIwcHg7IGZvbnQtc2l6ZTogMTRweDsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcIiQxPmApXG4gICAgICAvLyBBZGQgaW5saW5lIHN0eWxlcyB0byA8dHI+XG4gICAgICAucmVwbGFjZSgvPHRyKFtePl0qKT4vZywgYDx0ciBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1wiJDE+YClcbiAgICAgIC8vIEFkZCBpbmxpbmUgc3R5bGVzIHRvIDx0aD5cbiAgICAgIC5yZXBsYWNlKC88dGgoW14+XSopPi9nLCBgPHRoIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxNnB4OyBjb2xvcjogIzJBMUY3MzsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogMTJweCAyMHB4OyB0ZXh0LWFsaWduOiBsZWZ0O1wiJDE+YClcbiAgICAgIC8vIEFkZCBpbmxpbmUgc3R5bGVzIHRvIDx0ZD5cbiAgICAgIC5yZXBsYWNlKC88dGQoW14+XSopPi9nLCBgPHRkIHN0eWxlPVwibWluLXdpZHRoOjEyMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiAxMnB4IDIwcHg7IHRleHQtYWxpZ246IGxlZnQ7XCIkMT5gKTtcbiAgICBkZWNvZGVkID0gZGVjb2RlZC5yZXBsYWNlKC88aW1nKFtePl0qKT4vZywgKG1hdGNoLCBncm91cDEpID0+IHtcbiAgICAgIC8vIEFkZCBzdHlsZSB0byA8aW1nPiBpZiBub3QgYWxyZWFkeSBzcGVjaWZpZWRcbiAgICAgIGlmICgvc3R5bGU9Ly50ZXN0KGdyb3VwMSkpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoOyAgLy8gSWYgc3R5bGUgYWxyZWFkeSBleGlzdHMsIGtlZXAgaXRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgPGltZyBzdHlsZT1cIndpZHRoOiAzMCU7IGhlaWdodDogMzAlO2JvcmRlci1yYWRpdXM6IDE2cHg7IHBhZGRpbmctdG9wOiAxNXB4O3BhZGRpbmctYm90dG9tOiAxMHB4O1wiJHtncm91cDF9PmA7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gNS4gUmV0dXJuIHNhZmUgSFRNTFxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChkZWNvZGVkKTtcbiAgfVxuXG4gIGdldEV4dGVudGlvbih1cmw6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh1cmwgIT09ICctJykge1xuICAgICAgaWYgKHR5cGVvZiAodXJsKSA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdXJsLnNwbGl0KCcuJykucG9wKClcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh1cmwpKSB7XG4gICAgICAgIHJldHVybiB1cmxbMF0uc3BsaXQoJy4nKS5wb3AoKVxuICAgICAgfSBlbHNlIHJldHVybiAnLSdcbiAgICB9XG4gICAgZWxzZSByZXR1cm4gJy0nXG4gIH1cblxuICBkb3dubG9hZEF0dGNobWVudCh1cmw6IGFueSwgZmlsZT86IGFueSkge1xuICAgIC8vIHRoaXMub25FdmVudC5lbWl0KHtcbiAgICAvLyAgIGRvd25sb2FkOiB0cnVlLFxuICAgIC8vIH0pO1xuICAgIC8vIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZGF0YSlcbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIGxpbmsuZG93bmxvYWQgPSAnJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuXG4gIH1cbiAgZnVsbEltYWdlU3JjOiBzdHJpbmcgfCBudWxsID0gJyc7XG4gIG9wZW5GdWxsSW1hZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lNRycpIHtcbiAgICAgIHRoaXMuZnVsbEltYWdlU3JjID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnc3JjJyk7XG4gICAgfVxuICB9XG5cbiAgYWRkU3R5bGVzVG9JbWFnZXMoKTogdm9pZCB7XG4gICAgY29uc3QgaW1hZ2VzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNvbW1lbnQtY29udGVudCBpbWcnKTtcbiAgICBpbWFnZXMuZm9yRWFjaCgoaW1nKSA9PiB7XG4gICAgICAvLyBBcHBseSBpbmxpbmUgc3R5bGVzIGRpcmVjdGx5XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGltZywgJ3dpZHRoJywgJzcwcHgnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnYm9yZGVyLXJhZGl1cycsICcxNnB4Jyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGltZywgJ21hcmdpbicsICc4cHgnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnY3Vyc29yJywgJ3BvaW50ZXInKTtcblxuICAgICAgLy8gQWRkIGNsaWNrIGxpc3RlbmVyIHRvIHNob3cgZnVsbHNjcmVlbiBpbWFnZSBvbiBjbGlja1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW1nLCAnY2xpY2snLCAoKSA9PiB0aGlzLm9uSW1hZ2VDbGljaygoaW1nIGFzIEhUTUxJbWFnZUVsZW1lbnQpLnNyYykpO1xuICAgIH0pO1xuICB9XG5cbiAgb25JbWFnZUNsaWNrKHNyYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5mdWxsc2NyZWVuSW1hZ2UgPSBzcmM7XG4gIH1cblxuICBAVmlld0NoaWxkKCdmdWxsc2NyZWVuSW1hZ2VUZW1wbGF0ZScpIGZ1bGxzY3JlZW5JbWFnZVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBmdWxsc2NyZWVuVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBpY29uTWFwOiBSZWNvcmQ8c3RyaW5nLCAocm93OiBhbnksIGNvbDogYW55KSA9PiBzdHJpbmc+ID0ge1xuICAgIGF0dGFjaG1lbnRzX2NvdW50OiAoKSA9PiB0aGlzLnNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2F0dGFjaG1lbnRzLnN2ZycsXG4gICAgY29tbWVudF9jb3VudDogKCkgPT4gdGhpcy5zaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jb21tZW50cy5zdmcnLFxuICAgIHByaW9yaXR5OiAocm93LCBjb2wpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9XG4gICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5zaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy8nICtcbiAgICAgICAgKHZhbCA/PyAnZGVmYXVsdCcpICtcbiAgICAgICAgJy5zdmcnXG4gICAgICApO1xuICAgIH0sXG4gIH07XG5cbiAgdG9nZ2xlRnVsbHNjcmVlbigpIHtcbiAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcbiAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGFzIGFueTtcbiAgICBpZiAoIWRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50KSB7XG4gICAgICBpZiAoZWxlbS5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICBlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ubW96UmVxdWVzdEZ1bGxTY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvY3VtZW50IGFzIGFueSkubW96Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgICAoZG9jdW1lbnQgYXMgYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLndlYmtpdEV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgIChkb2N1bWVudCBhcyBhbnkpLndlYmtpdEV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKChkb2N1bWVudCBhcyBhbnkpLm1zRXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkubXNFeGl0RnVsbHNjcmVlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2VsbEV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmN1c3RvbUNlbGxFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkdyb3VwKHJvdzogYW55KTogYW55W10ge1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlOiBhbnkpID0+IHtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuO1xuICAgICAgaWYgKG5vZGUuaXNHcm91cCkge1xuICAgICAgICBub2RlLmNoaWxkcmVuPy5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB0cmF2ZXJzZShjaGlsZCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZShyb3cpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzZWxlY3RHcm91cFJvdyhlOiBFdmVudCwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBjaGVja2JveCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgaXNDaGVja2VkID0gY2hlY2tib3guY2hlY2tlZDtcbiAgICAvLyBHZXQgYWxsIGRlZXAgZGF0YSByb3dzIChsZWFmIHJvd3MpXG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmZsYXR0ZW5Hcm91cChyb3cpO1xuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gci5faWQgfHwgci5pZDtcbiAgICAgICAgaWYgKGlkKSB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gci5faWQgfHwgci5pZDtcbiAgICAgICAgaWYgKGlkKSB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUoaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgb2JqOiBpZHNcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0R3JvdXBDaGVja2VkU3RhdGUocm93OiBhbnkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXJvdy5pc0dyb3VwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmZsYXR0ZW5Hcm91cChyb3cpO1xuICAgIGxldCBjaGVja2VkQ291bnQgPSAwO1xuICAgIGxlYWZSb3dzLmZvckVhY2gociA9PiB7XG4gICAgICBjb25zdCBpZCA9IHIuX2lkIHx8IHIuaWQ7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd3MuaGFzKGlkKSkgY2hlY2tlZENvdW50Kys7XG4gICAgfSk7XG4gICAgaWYgKGNoZWNrZWRDb3VudCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjaGVja2VkQ291bnQgPT09IGxlYWZSb3dzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldENlbGxUaXRsZShyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpO1xuXG4gICAgaWYgKCF0aGlzLmlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZCkpIHtcbiAgICAgIGlmIChjb2wudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUodmFsLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgfSBlbHNlIGlmIChjb2w/LmlzX2Ftb3VudCkge1xuICAgICAgICBpZiAoIXZhbCkgcmV0dXJuIGAwLjAwYFxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRDdXJyZW5jeS50cmFuc2Zvcm0odmFsLCB0aGlzLmN1cnJlbmN5Rm9ybWF0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsPy52YWx1ZSA/P1xuICAgICAgICB2YWw/Lm5hbWUgPz9cbiAgICAgICAgdmFsID8/XG4gICAgICAgIChjb2wuaXNfYW1vdW50ID8gJzAnIDogJy0nKVxuICAgICAgKSArICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0ID0gdmFsPy5bMF07XG5cbiAgICByZXR1cm4gKFxuICAgICAgZmlyc3Q/LmRlcGFydG1lbnRfbmFtZSA/P1xuICAgICAgZmlyc3Q/LnJvbGVOYW1lID8/XG4gICAgICBmaXJzdD8uZnVsbF9uYW1lID8/XG4gICAgICBmaXJzdD8udmFsdWUgPz9cbiAgICAgIGZpcnN0Py5uYW1lID8/XG4gICAgICAnLSdcbiAgICApO1xuICB9XG5cblxuICBmaW5pc2hFZGl0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnY2VsbCBlZGl0ZWRkZGRkZGRkZGRkZGRkZDogJywgZXZlbnQpXG4gIH1cblxuXG4gIGdldER5bmFtaWNSaWdodChjb2w6IGFueSwgc2VjdGlvbjogc3RyaW5nLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyKXtcbiAgICBpZihzZWN0aW9uID09ICdyaWdodCcgJiYgdGhpcy5wcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zPy5sZW5ndGggPT0gMSAmJiBjb2wud2lkdGggPCAyMDApe1xuICAgICAgcmV0dXJuIDEwMDtcbiAgICB9ZWxzZSBpZihzZWN0aW9uID09ICdyaWdodCcpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYoc2VjdGlvbiA9PSAncHJldmlld0NlbnRlckNvbHVtbnMnICYmIGNvbEluZGV4ID09ICh0aGlzLnByZXZpZXdDZW50ZXJDb2x1bW5zPy5sZW5ndGggLSAxKSAmJiBjb2wud2lkdGggPCAyMDApe1xuICAgICAgcmV0dXJuIDIwMFxuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIGNvbC53aWR0aCAtIDQ1O1xuICAgIH1cbiAgfVxuXG4gIGJsdXJJbnB1dChldmVudDogRXZlbnQsIHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlucHV0Py5ibHVyKCk7XG4gICAgdGhpcy5zZXRBY3RpdmVDZWxsKHJvdywgY29sKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSAnJztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuZ2V0VmFsaWRBY3Rpb25zKGVsZW1lbnQ6IGFueSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRoaXMuYWN0aW9uVmFsaWRhdG9yLmdldFZhbGlkQWN0aW9ucyhcbiAgICB0aGlzLm9yaWdpbmFsQWN0aW9ucywgLy8gQWx3YXlzIHBhc3Mgb3JpZ2luYWwgdW5tb2RpZmllZCBhY3Rpb25zXG4gICAgZWxlbWVudCxcbiAgICB7XG4gICAgICAvLyB1c2VySWQ6IHRoaXMuaWQsXG4gICAgICB0YWJsZVR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgc2hvd1VuTGluazogdGhpcy5zaG93VW5MaW5rLFxuICAgICAgcGFja2FnZURhdGE6IHRoaXMucGFja2FnZURhdGFcbiAgICB9XG4gICk7XG59XG5wcml2YXRlIGlzU3RhdHVzRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFmaWVsZE5hbWUpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbG93ZXJGaWVsZCA9IGZpZWxkTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbG93ZXJGaWVsZCA9PT0gJ3N0YXR1cycgfHwgXG4gICAgICAgICBsb3dlckZpZWxkLmluY2x1ZGVzKCdzdGF0dXMnKSB8fCBcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdhdmFpbHN0YXR1cycgfHxcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdhY2NvdW50X3N0YXR1cycgfHxcbiAgICAgICAgIGxvd2VyRmllbGQgPT09ICdpc19jdXN0b21fZ3JhZGUnO1xufVxuXG4vKipcbiAqIENhcGl0YWxpemVzIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGluIGEgc3RyaW5nXG4gKiBIYW5kbGVzOiBzcGFjZWQgd29yZHMsIGNhbWVsQ2FzZSwgc25ha2VfY2FzZSwga2ViYWItY2FzZSwgYW5kIGNvbXBvdW5kIHdvcmRzXG4gKi9cbnByaXZhdGUgY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICBcbiAgbGV0IHN0ciA9IFN0cmluZyh2YWx1ZSkudHJpbSgpO1xuICBcbiAgLy8gUmVwbGFjZSB1bmRlcnNjb3JlcyBhbmQgaHlwaGVucyB3aXRoIHNwYWNlcyBmaXJzdFxuICBzdHIgPSBzdHIucmVwbGFjZSgvW18tXS9nLCAnICcpO1xuICBcbiAgLy8gSWYgaXQgaGFzIHNwYWNlcyBub3cgKG9yIG9yaWdpbmFsbHkgaGFkIHRoZW0pLCBqdXN0IGNhcGl0YWxpemUgZWFjaCB3b3JkXG4gIGlmIChzdHIuaW5jbHVkZXMoJyAnKSkge1xuICAgIHJldHVybiBzdHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLmZpbHRlcih3b3JkID0+IHdvcmQubGVuZ3RoID4gMClcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbiAgXG4gIC8vIEhhbmRsZSBjYW1lbENhc2UgKGUuZy4sIFwiYXZhaWxTdGF0dXNcIiwgXCJjaGVja0luT3V0XCIpXG4gIHN0ciA9IHN0clxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgIC5yZXBsYWNlKC8oW0EtWl0pKFtBLVpdW2Etel0pL2csICckMSAkMicpO1xuICBcbiAgLy8gTm93IGNhcGl0YWxpemUgZWFjaCB3b3JkXG4gIHJldHVybiBzdHJcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5zcGxpdCgnICcpXG4gICAgLmZpbHRlcih3b3JkID0+IHdvcmQubGVuZ3RoID4gMClcbiAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuXG4gIGdyaWRDb250ZXh0ID0ge1xuICAgIGFwcGx5RmlsdGVyOiAoY29sOiBhbnkpID0+IHRoaXMuYXBwbHlGaWx0ZXJPbkNvbHVtbihjb2wpLFxuICAgIGNsZWFyRmlsdGVyOiAoY29sOiBhbnkpID0+IHRoaXMucmVtb3ZlRmlsdGVyRnJvbUNvbHVtbihjb2wpXG4gIH07XG5cbiAgcHJpdmF0ZSBjbG9zZUFsbEZpbHRlck1lbnVzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbHRlcnMoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9XG4gICAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuXG4gIGFwcGx5RmlsdGVyT25Db2x1bW4oY29sOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgc2VhcmNoOiBjb2wuc2VhcmNoLFxuICAgICAgcXVlcnk6IGNvbC5xdWVyeSxcbiAgICAgIHR5cGU6IGNvbC50eXBlLFxuICAgICAgX2lkczogY29sLl9pZHNcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICAgIHRoaXMucmVwbGFjZUNvbHVtblF1ZXJ5KHRoaXMuY29sdW1ucywgY29sLCBjb2wucXVlcnkpO1xuICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcblxuICB9XG5cbiAgcmVtb3ZlRmlsdGVyRnJvbUNvbHVtbihjb2w6IGFueSkge1xuICAgIHRoaXMuY2xvc2VBbGxGaWx0ZXJNZW51cygpO1xuICAgIGNvbnN0IGVtcHR5UXVlcnkgPSB7XG4gICAgICBmaXJzdF9jb25kaXRpb246IG51bGwsXG4gICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgIGNvbmRpdGlvbjogJ25vbmUnLFxuICAgICAgc2Vjb25kX2NvbmRpdGlvbjogbnVsbCxcbiAgICAgIHNlY29uZF92YWx1ZTogbnVsbFxuICAgIH07XG5cbiAgICB0aGlzLnJlcGxhY2VDb2x1bW5RdWVyeSh0aGlzLmNvbHVtbnMsIGNvbCwgZW1wdHlRdWVyeSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KChmOiBhbnkpID0+IGYuZmllbGQgPT09IGNvbC5maWVsZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29sdW1uUXVlcnkoXG4gICAgY29sdW1uczogYW55W10sXG4gICAgdGFyZ2V0Q29sOiBhbnksXG4gICAgbmV3UXVlcnk6IGFueVxuICApOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLmZpZWxkID09PSB0YXJnZXRDb2wuZmllbGQpIHtcbiAgICAgICAgY29sLnF1ZXJ5ID0geyAuLi5uZXdRdWVyeSB9O1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2wuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMucmVwbGFjZUNvbHVtblF1ZXJ5KGNvbC5jaGlsZHJlbiwgdGFyZ2V0Q29sLCBuZXdRdWVyeSk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldEZvcm1hdGVkRGF0ZSh2YWwgOiBhbnkpe1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUodmFsLCB0aGlzLmRhdGVGb3JtYXQpO1xuICB9XG4vKipcbiAqIENsb3NlcyBhbGwgZXhwYW5kZWQgZGV0YWlsIHJvd3NcbiAqL1xuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTogdm9pZCB7XG4gIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgIC8vIENsZWFyIGFycmF5IG9mIGV4cGFuZGVkIHJvd3NcbiAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gW107XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2xlYXIgc2luZ2xlIGV4cGFuZGVkIHJvd1xuICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MgPSAnJztcbiAgfVxuICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG59XG59IiwiPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yIGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibmF2IG5hdi10YWJzXCIgKm5nSWY9XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYgbmF2LXRhYnNcIiBpZD1cIm5hdi10YWJcIiByb2xlPVwidGFibGlzdFwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVRhYih0YWIpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUYWIgPT0gdGFiXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0YWIgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLXNlYXJjaFwiIFtzdHlsZS53aWR0aC5weF09XCIzNTBcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImVuYWJsZUdsb2JhbFNlYXJjaFwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbXgtMiBwb3NpdGlvbi1hYnNvbHV0ZSBpY29uXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI2dsb2JhbFNlYXJjaElucHV0XG4gICAgICAgICAgKm5nSWY9XCJlbmFibGVHbG9iYWxTZWFyY2hcIlxuICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzNnB4XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHRvIHNlYXJjaCwgdGhlbiBwcmVzcyBFbnRlclwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWJsZVNlYXJjaFwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25HbG9iYWxTZWFyY2goKVwiXG4gICAgICAgICAgKGlucHV0KT1cIm9uU2VhcmNoSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB0YWJsZS1yaWdodC10b3AtYWN0aW9uc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGJ1dHRvbnNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBhY3Rpb24tYnV0dG9ucy1yb3dcIlxuICAgICAgICAgICpuZ0lmPVwiYnV0dG9uPy5oYXNfcGVybWlzc2lvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb25CdXR0b25DbGljayhidXR0b24ubmFtZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBib3JkZXIgYm9yZGVyLXByaW1hcnkgYnRuLWFjdGl2ZS1wcmltYXJ5IG1lLTIgcC0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweC0zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbi5pc19zaG93SWNvblwiXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvJyArIGJ1dHRvbi5pY29uICsgJy5zdmcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMlwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbC1oaWRkZW4gdGV4dC13aGl0ZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5tcy0wXT1cImJ1dHRvbi5pc19zaG93SWNvblwiXG4gICAgICAgICAgICAgID57eyBidXR0b24/Lm5hbWUgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIXNob3dGaWx0ZXJSb3dcIlxuICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIHBvc2l0aW9uLXJlbGF0aXZlIGFjdGlvbi1idXR0b25zLXJvd1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVPcGVuRmlsdGVyKClcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dGaWx0ZXJzXCJcbiAgICAgID5cbiAgICAgICAgPGFcbiAgICAgICAgICBocmVmPVwiSmF2YVNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJ0bi1hY3RpdmUtcHJpbWFyeSBib3JkZXIgYm9yZGVyLXByaW1hcnkgbWUtMiBwLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB4LTNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1oaWRkZW4gdGV4dC13aGl0ZVwiPkZpbHRlcnM8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcmVkQ29sdW1ucz8ubGVuZ3RoXCJcbiAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgd2lkdGg6IDdweDtcbiAgICAgICAgICAgIGhlaWdodDogN3B4O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAzcHggIzAwMjJmZjtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwLCA2MCwgMjU1KTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAxNnB4O1xuICAgICAgICAgICAgdG9wOiAxMHB4O1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWJsb2NrXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGQtbm9uZVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdhZHZhbmNlLWZpbHRlcicpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUb3BCdXR0b24gPT09ICdhZHZhbmNlLWZpbHRlcidcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvem9vbS1jaGFyZ2Uuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gdG9wLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBhY3Rpb24tYnV0dG9ucy1yb3dcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnc2V0dGluZycpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJcbiAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICdzZXR0aW5nJyB8fFxuICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3RhYmxlLWxheW91dCcgfHxcbiAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1wcmVzZXRzJyB8fFxuICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3Nob3ctaGlkZS1jb2x1bW5zJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8IS0tIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zZXR0aW5ncy0yLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIHRvcC1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPiAtLT5cbiAgICAgICAgPGFcbiAgICAgICAgICBocmVmPVwiSmF2YVNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJ0bi1hY3RpdmUtcHJpbWFyeSBib3JkZXIgYm9yZGVyLXByaW1hcnkgbWUtMiBwLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB4LTNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2V0dGluZ3MtMi5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMlwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLWhpZGRlbiB0ZXh0LXdoaXRlXCI+U2V0dGluZzwvc3Bhbj5cbiAgICAgICAgPC9hPlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3NldHRpbmcnXCJcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMSBhY3Rpb25zLWRyb3Bkb3duLXNldHRpbmdcIlxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51XCI+XG4gICAgICAgICAgICA8IS0tIFRhYmxlIExheW91dCAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygndGFibGUtbGF5b3V0JylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvdGFibGUtMi5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBUYWJsZSBMYXlvdXQ8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygndGFibGUtcHJlc2V0cycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvbGlzdC1kZXRhaWxzLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIFRhYmxlIFByZXNldHM8L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8IS0tIENvbHVtbnMgLS0+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAqbmdJZj1cIiFzaG93U2lkZU1lbnVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVBY3Rpb25zKCdzaG93LWhpZGUtY29sdW1ucycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBDb2x1bW5zPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZWQtdGV4dFwiPnt7IGNvbHVtbnNDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRmlsdGVyIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW5GaWx0ZXIoKTsgYWN0aXZlVG9wQnV0dG9uID0gJyc7XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgbXQtMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIEZpbHRlclxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8IS0tIERvd25sb2FkIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ3N2KCdjc3YnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rvd25sb2FkLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBDU1YgRXhwb3J0XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAqbmdJZj1cImVuYWJsZUV4cG9ydFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZENzdigneGxzeCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZG93bmxvYWQuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIEV4Y2VsIEV4cG9ydFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPCEtLSBGb250IEZhbWlseSAmIEZvbnQgU2l6ZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHBiLTIgcHQtMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBGb250IEZhbWlseSAtLT5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9udEZhaW1seVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRGYW1pbGllc1wiIFt2YWx1ZV09XCJmb250XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZvbnQgfX1cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBGb250IFNpemUgLS0+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNpemUgb2YgZm9udFNpemVzXCIgW3ZhbHVlXT1cInNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc2l6ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGFibGUgTGF5b3V0IC0tPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1sYXlvdXQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZUxheW91dFwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFRhYmxlIFByZXNldHMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1wcmVzZXRzJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVQcmVzZXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnc2hvdy1oaWRlLWNvbHVtbnMnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93SGlkZUNvbHVtbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zLXJvd1wiICpuZ0lmPVwic2hvd0Z1bGxTY3JlZW5CdXR0b25cIj5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdJZj1cIiFpc0Z1bGxTY3JlZW5cIlxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYnRuLWFjdGl2ZS1wcmltYXJ5IGJvcmRlciBib3JkZXItcHJpbWFyeSBleHBlbmQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCJcbiAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIlxuICAgICAgICAgIGRhdGEtYnMtcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICB0aXRsZT1cIk1pbmltaXNlXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IG1pbkFycm93OiAhaXNGdWxsU2NyZWVuLCBtYXhBcnJvdzogaXNGdWxsU2NyZWVuIH1cIlxuICAgICAgICAgIHN0eWxlPVwidHJhbnNpdGlvbjogY29sb3IgMC4yc1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leHBlbmQuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTIgbWItMVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YVxuICAgICAgICAgICpuZ0lmPVwiaXNGdWxsU2NyZWVuXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJ0bi1hY3RpdmUtcHJpbWFyeSBib3JkZXIgYm9yZGVyLXByaW1hcnkgZXhwZW5kIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICBkYXRhLWJzLXBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgdGl0bGU9XCJNYXhpbWlzZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBtaW5BcnJvdzogIWlzRnVsbFNjcmVlbiwgbWF4QXJyb3c6IGlzRnVsbFNjcmVlbiB9XCJcbiAgICAgICAgICBzdHlsZT1cInRyYW5zaXRpb246IGNvbG9yIDAuMnNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvbWluaW1pemUuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTIgbWItMVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8IS0tIEV4YW1wbGUgc2luZ2xlIGRhbmdlciBidXR0b24gLS0+XG5cbiAgICAgICAgPCEtLSA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGQtZmxleCBnYXAtMiBhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnYWN0aW9ucycpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEFjdGlvblxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL1ZlY3Rvci5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnYWN0aW9ucydcIlxuICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IHNob3dcIj5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+QWN0aW9uPC9hPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIj5Bbm90aGVyIGFjdGlvbjwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+U29tZXRoaW5nIGVsc2UgaGVyZTwvYT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPlNlcGFyYXRlZCBsaW5rPC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlcnMgJiYgIXNob3dGaWx0ZXJSb3dcIlxuICAgIGNsYXNzPVwidG9wLWZpbHRlci1yb3cgYm9yZGVyLXRvcCBweS0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwidG9wRmlsdGVyUm93SGVpZ2h0XCJcbiAgPlxuICAgIDwhLS0gTEVGVCBTSURFIChGaWx0ZXIgdGFncyArIEZpbHRlciBidXR0b24pIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBhY3RpdmVGaWx0ZXJlZENvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItdGFnc1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlbiA9IHRydWU7XG4gICAgICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9ICdmaWx0ZXItY29sdW1ucyc7XG4gICAgICAgICAgICAgIG9wZW5GaWx0ZXIoY29sKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG11dGVkLXRleHQgYWRkLWZpbHRlci1idXR0b24gYWN0aXZlLWZpbHRlcnNcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgICAgICAgIGNvbD8uZmllbGQgPT0gc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmZpZWxkICYmXG4gICAgICAgICAgICAgIGlzQWN0aXZlRmlsdGVyT3BlbiAmJlxuICAgICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT0gJ2ZpbHRlci1jb2x1bW5zJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlci10YWcgbXQtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9waW4uc3ZnJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUNvbHVtbkZpbHRlckZyb21Db2x1bW4oY29sKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Nyb3NzLXByaW1hcnkuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gY3Jvc3Mtc2Vjb25kYXJ5IG1zLTIgbWItMVwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICdmaWx0ZXItY29sdW1ucycgJiZcbiAgICAgICAgICAgICAgY29sPy5maWVsZCA9PSBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uZmllbGQgJiZcbiAgICAgICAgICAgICAgaXNBY3RpdmVGaWx0ZXJPcGVuXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJDb2x1bW5zOyBjb250ZXh0OiB7IGNvbHVtbjogY29sIH1cIlxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZGQtZmlsdGVyLWJ1dHRvbi1tZW51XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnZmlsdGVyLWNvbHVtbnMnKTsgaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG11dGVkLXRleHQgYWRkLWZpbHRlci1idXR0b24gYnV0dG9uLWZpbHRlclwiXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNzBweFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9wbHVzLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJtZS0yIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICBGaWx0ZXJcbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnZmlsdGVyLWNvbHVtbnMnICYmICFpc0FjdGl2ZUZpbHRlck9wZW5cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJDb2x1bW5zXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJJR0hUIFNJREUgKFVwZGF0ZSArIFJlc2V0KSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdlxuICAgICAgICAoY2xpY2spPVwic2F2ZVByZXNldCgpXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgY3Vyc29yLXBvaW50ZXIgYWxsLWZpbHRlcnMtcmVzZXQtYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCIhY2hlY2tGaWx0ZXJDaGFuZ2VzRWZmZWN0KClcIlxuICAgICAgPlxuICAgICAgICBVcGRhdGUgVmlld1xuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgY3Vyc29yLXBvaW50ZXIgYWxsLWZpbHRlcnMtcmVzZXQtYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCIhdGFibGVGaWx0ZXJWaWV3SWQgJiYgYWN0aXZlRmlsdGVyZWRDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGxGaWx0ZXJzKClcIlxuICAgICAgPlxuICAgICAgICBSZXNldFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICBbc3R5bGUuaGVpZ2h0XT1cIlxuICAgICAgc2hvd0ZpbHRlcnMgPyAnY2FsYygxMDAlIC0gJyArIHRvcEZpbHRlclJvd0hlaWdodCArICdweCknIDogJzEwMCUnXG4gICAgXCJcbiAgICBjZGtEcm9wTGlzdEdyb3VwXG4gICAgY2xhc3M9XCJkYXRhLWdyaWQtdGFibGUtd3JhcHBlciBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICNkYXRhR3JpZENvbnRhaW5lclxuICAgIFtzdHlsZS5mb250RmFtaWx5XT1cImZvbnRGYWltbHlcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgaWQ9XCJkYXRhLWdyaWQtbWFpbi1jb250YWluZXJcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93Um93c0dyb3VwaW5nXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiY29sdW1uc1wiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIlxuICAgICAgICB0b3BHcm91cGVkQmFkZ2VzQmFja2dyb3VuZENvbG9yIHx8IGhlYWRlckJhY2tncm91bmRDb2xvclxuICAgICAgXCJcbiAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cImVudGVyVG9Ub3BSb3dHcm91cGluZygkZXZlbnQpXCJcbiAgICAgIChjZGtEcm9wTGlzdEV4aXRlZCk9XCJleGl0ZWRGcm9tVGhlVG9wUm93KCRldmVudClcIlxuICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3BUb3BHcm91cCgkZXZlbnQpXCJcbiAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cImNhbkVudGVyVG9Sb3dzR3JvdXBpbmdcIlxuICAgICAgaWQ9XCJyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXJcIlxuICAgICAgY2xhc3M9XCJib3JkZXItYmVsb3cgZC1mbGV4IHB4LTQgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJUZXh0Q29sb3JcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvanVzdGlmeS5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWEgJiYgIWdyb3VwZWRDb2x1bW5zPy5sZW5ndGhcIj5cbiAgICAgICAgICBEcmFnIGhlcmUgdG8gc2V0IHJvdyBncm91cHNcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uR3JvdXBSZW9yZGVyKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgIFtjZGtEcmFnTG9ja0F4aXNdPVwiJ3gnXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgZ3JvdXBlZENvbHVtbnM7XG4gICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOlxuICAgICAgICAgICAgICAgICAgICBncm91cGVkQ29sdW1ucy5sZW5ndGggPiAxICYmIGkgIT0gZ3JvdXBlZENvbHVtbnMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj57eyBjaGlsZC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IG92ZXJmbG93LWhpZGRlblwiXG4gICAgICBbc3R5bGUuaGVpZ2h0XT1cIlxuICAgICAgICAnY2FsYygxMDAlIC0gJyArXG4gICAgICAgIChzaG93Um93c0dyb3VwaW5nXG4gICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKyBmb290ZXJSb3dIZWlnaHRcbiAgICAgICAgICA6IGZvb3RlclJvd0hlaWdodCkgK1xuICAgICAgICAncHgpJ1xuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaC0xMDBcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgICAgIXNob3dTaWRlTWVudVxuICAgICAgICAgICAgPyAnMTAwJSdcbiAgICAgICAgICAgIDogc2lkZU1lbnVWaXNpYmxlXG4gICAgICAgICAgICA/ICdjYWxjKDEwMCUgLSAyODBweCknXG4gICAgICAgICAgICA6ICdjYWxjKDEwMCUgLSAzMHB4KSdcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIHRyYW5zaXRpb24gcG9zaXRpb24tcmVsYXRpdmUgdy0xMDBcIj5cbiAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIEhlYWRlciBzdGFydHMgaGVyZSAtLT5cbiAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtaGVhZGVyLXdyYXBwZXIgdy0xMDBcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImhlYWRlclRleHRDb2xvclwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwiaGVhZGVyVGV4dEZvbnRzU2l6ZVwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJlbG93XT1cIiFoYXNBbnlWaXNpYmxlQ29sdW1uXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgJiYgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogM1xuICAgICAgICAgICAgICAgIDogc2hvd0NvbHVtbnNHcm91cGluZyB8fCBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyXG4gICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIExlZnQgUGlubmVkIEhlYWRlciBzdGFydHMgaGVyZSAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlciBsZWZ0LXBpbm5lZFwiXG4gICAgICAgICAgICAgICNsZWZ0UGlubmVkSGVhZGVyXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwiaGFzTGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93U2VyaWFsTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveC1jZWxsIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIjU1XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogM1xuICAgICAgICAgICAgICAgICAgICA6IHNob3dDb2x1bW5zR3JvdXBpbmcgfHwgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgUy5Ob1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93Q2hlY2tib3hlc1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3gtY2VsbCBib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nICYmIHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAzXG4gICAgICAgICAgICAgICAgICAgIDogc2hvd0NvbHVtbnNHcm91cGluZyB8fCBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMlxuICAgICAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQW55VmlzaWJsZUNvbHVtblwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHhcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZVN0YXRlKGRhdGFTZXQpXCJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoZGF0YVNldClcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoZGF0YVNldClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgIGlkPVwibGVmdC1waW5uZWQtaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJsZWZ0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RW50ZXJlZCk9XCJvbkRyb3BMaXN0RW50ZXIoJGV2ZW50LCAnbGVmdCcpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwiXG4gICAgICAgICAgICAgICAgICBvblNvcnRHcm91cCgkZXZlbnQsICdwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMnKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3BHcm91cCgpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMXB4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJhZ2FibGUtaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2wgb2YgbGVmdFBpbm5lZENvbHVtbnM7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3ByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucydcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIG1zLTJcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC42XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIHNpbmdsZUNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IGNvbC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUNvbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246IGNvbD8uY2hpbGRyZW4/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSBEYXRhIEdyaWQgQ2VudGVyIFBpbm5lZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1oZWFkZXIgY2VudGVyLXNjcm9sbGFibGVcIlxuICAgICAgICAgICAgICAjY2VudGVyUGlubmVkSGVhZGVyXG4gICAgICAgICAgICAgIChzY3JvbGwpPVwib25DZW50ZXJCb2R5U2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgICBpZD1cImNlbnRlci1waW5uZWQtaGVhZGVyXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiXG4gICAgICAgICAgICAgICAgc2hvd1Jvd3NHcm91cGluZyA/IFsncm93cy1ncm91cGluZy10b3AtY29udGFpbmVyJ10gOiBbXVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImNlbnRlckNvbHVtbnNcIlxuICAgICAgICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVDb2x1bW5Hcm91cGluZyAmJiBkcmFnZ2luZ0luR3JvdXBBcmVhXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwib25Ecm9wTGlzdEVudGVyKCRldmVudCwgJ2NlbnRlcicpXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0U29ydGVkKT1cIm9uU29ydEdyb3VwKCRldmVudCwgJ3ByZXZpZXdDZW50ZXJDb2x1bW5zJylcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcEdyb3VwKClcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4V2lkdGhdPVwiXG4gICAgICAgICAgICAgICAgJ2NhbGMoMTAwJSAtICcgK1xuICAgICAgICAgICAgICAgIChyaWdodFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aCArIGxlZnRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGgpICtcbiAgICAgICAgICAgICAgICAncHgpJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cGVkQ29sdW1ucz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMjAwcHhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAjY29sdW1uc0dyb3VwZWRCb3hcbiAgICAgICAgICAgICAgICBpZD1cImdyb3VwQm94SGVhZGVyRGl2XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHctMTAwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0ZpbHRlclJvdyA/IGhlYWRlclJvd0hlaWdodCAqIDIgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBzLTNcIj5Hcm91cDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHJlZS1kb3RzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsICdncm91cCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3RocmVlLWRvdHMtdmVydGljYWwuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblJlc2l6ZUdyb3VwQm94KCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IC0ycHhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3Jlc2l6ZS1oYW5kbGUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGN1cnNvci1wb2ludGVyIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDMwcHg7IGhlaWdodDogMTAwJVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncmlkVHlwZSA9PT0gJ0Fzc2V0cycgfHwgZ3JpZFR5cGUgPT09ICdUYXNrcydcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJhZ2FibGUtaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiXG4gICAgICAgICAgICAgICAgICBjaGVja0NvbHVtbkdyb3VwaW5nU3RhdHVzKGNvbCk7XG4gICAgICAgICAgICAgICAgICBkcmFnU3RhcnRPbkdyb3VwKGNvbCk7XG4gICAgICAgICAgICAgICAgICBvbkRyYWdTdGFydGVkKGNvbClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnTW92ZWQpPVwib25EcmFnTW92ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgpXCJcbiAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgY29sIG9mIGNlbnRlckNvbHVtbnM7XG4gICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncHJldmlld0NlbnRlckNvbHVtbnMnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc091dHNpZGVDb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnZ2luZ0luR3JvdXBBcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnZGF0YS1ncmlkL2ljb25zL2p1c3RpZnkuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc091dHNpZGVDb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLWNyb3NzLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ2NlbnRlckNvbHVtbnMnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYSAmJiAhaXNPdXRzaWRlQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXMtMlwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC42XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBzaW5nbGVDb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsZD8uaXNfZ3JvdXBhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IGNvbC5jaGlsZHJlbi5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlQ29sPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmlzX2dyb3VwYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjogY29sPy5jaGlsZHJlbj8ubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tIERhdGEgR3JpZCBSaWdodCBQaW5uZWQgSGVhZGVyIHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICBpZD1cInJpZ2h0LXBpbm5lZC1oZWFkZXJcIlxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJcbiAgICAgICAgICAgICAgICBzaG93Um93c0dyb3VwaW5nID8gWydyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXSA6IFtdXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtaGVhZGVyIHJpZ2h0LXBpbm5lZFwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJcbiAgICAgICAgICAgICAgICBvblNvcnRHcm91cCgkZXZlbnQsICdwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zJylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RW50ZXJlZCk9XCJvbkRyb3BMaXN0RW50ZXIoJGV2ZW50LCAncmlnaHQnKVwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wR3JvdXAoKVwiXG4gICAgICAgICAgICAgICNyaWdodFBpbm5lZEhlYWRlclxuICAgICAgICAgICAgICBjbGFzcz1cInJpZ2h0LXBpbm5lZC1oZWFkZXIgZC1mbGV4XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDAuMnB4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJhZ2FibGUtaGVhZGVyXCJcbiAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgY29sIG9mIHJpZ2h0UGlubmVkQ29sdW1ucztcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZFJpZ2h0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdyaWdodCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1BsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGdhcC0yIG1zLTJcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LmNoaWxkcmVuPy5sZW5ndGg7IGVsc2Ugc2luZ2xlQ29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gY29sLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlQ29sPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjogY29sPy5jaGlsZHJlbj8ubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSBEYXRhIEdyaWQgQm9keSBzdGFydHMgaGVyZSAtLT5cbiAgICAgICAgICA8IS0tIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPlxuICAgICAgICAgIDwhLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJoLTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCIhZGF0YVNldD8ubGVuZ3RoICYmICFsb2FkaW5nICYmICFkYXRhU2V0TG9hZGluZ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZWNvcmQtbm90LWZvdW5kLnN2ZydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgID48L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2Pk5vIFJlY29yZCBGb3VuZDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBoLTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbG9hZGluZy1vdmVybGF5XCJcbiAgICAgICAgICAgICpuZ0lmPVwibG9hZGluZyB8fCBkYXRhU2V0TG9hZGluZ1wiXG4gICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICB6LWluZGV4OiA5OTk7XG4gICAgICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxcHgpO1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cbiAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImxvYWRlclwiPjwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5Mb2FkaW5nLi4uPC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWJvZHktd3JhcHBlciBwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJib2R5V3JhcHBlckhlaWdodFwiXG4gICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG87IG92ZXJmbG93LXg6IGhpZGRlblwiXG4gICAgICAgICAgICAjbWFpblNjcm9sbFxuICAgICAgICAgICAgKHNjcm9sbCk9XCJvbk1haW5TY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICBbc3R5bGUuc2Nyb2xsYmFyV2lkdGhdPVwidmVydGljYWxTY3JvbGxiYXJXaWR0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBMRUZUIFBJTk5FRCAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICAhZ3JvdXBlZENvbHVtbnMubGVuZ3RoID8gb3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCAqIHJvd0hlaWdodCA6IDBcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzLmgtMTAwXT1cIm9yaWdpbmFsRGF0YVNldC5sZW5ndGggPCA4XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1ib2R5IGxlZnQtcGlubmVkLWJvZHkgdy0xMDBcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cImhhc0xlZnRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudHJhbnNwYXJlbnQtYm9yZGVyLXJpZ2h0XT1cIiFoYXNMZWZ0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlWSgnICsgdHJhbnNsYXRlWSArICdweCknXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImxlZnRQaW5uZWRCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5oLTEwMF09XCJvcmlnaW5hbERhdGFTZXQubGVuZ3RoIDwgOFwiXG4gICAgICAgICAgICAgICAqbmdJZj1cIiFsb2FkaW5nICYmICFkYXRhU2V0TG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW0Byb3dEeW5hbWljXT1cInJvd0FuaW1hdGlvblwiXG5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgcm93IG9mIHZpc2libGVSb3dzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IChzdGFydEluZGV4ICsgaSkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IChzdGFydEluZGV4ICsgaSkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMZWZ0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbEFtb3VudFJvdyAmJiBvcmlnaW5hbERhdGFTZXQ/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7IF9fdmlydHVhbEluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDRU5URVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiaC0xMDBcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLmNsaWVudFdpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWJvZHkgY2VudGVyLXNjcm9sbGFibGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5oLTEwMF09XCJvcmlnaW5hbERhdGFTZXQubGVuZ3RoIDwgOFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW47IG92ZXJmbG93LXg6IGF1dG9cIlxuICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVkoJyArIHRyYW5zbGF0ZVkgKyAncHgpJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAjY2VudGVyU2Nyb2xsYWJsZUJvZHlcbiAgICAgICAgICAgICAgICAoc2Nyb2xsKT1cIm9uQ2VudGVyQm9keVNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYm94U2hhZG93XT1cImhhc0xlZnRQaW5uZWRDb2x1bW5zID8gbGVmdFBpbm5lZEJveHNoYWRvdzogJ25vbmUnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IFtAcm93RHluYW1pY109XCJyb3dBbmltYXRpb25cIiAqbmdJZj1cIiFsb2FkaW5nICYmICFkYXRhU2V0TG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgcm93IG9mIHZpc2libGVSb3dzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3Q2VudGVyQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogKHN0YXJ0SW5kZXggKyBpKSAlIDIgPT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogKHN0YXJ0SW5kZXggKyBpKSAlIDIgIT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxBbW91bnRSb3cgJiYgb3JpZ2luYWxEYXRhU2V0Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBfX3ZpcnR1YWxJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld0NlbnRlckNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFJJR0hUIFBJTk5FRCAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJyaWdodC1waW5uZWQtYm9keS13cmFwcGVyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJoYXNSaWdodFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwiXG4gICAgICAgICAgICAgICAgaXNTY3JvbGxiYXJWaXNpYmxlXG4gICAgICAgICAgICAgICAgICA/IHJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoIC0gMTVcbiAgICAgICAgICAgICAgICAgIDogcmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJyaWdodFBpbm5lZEJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1ib2R5IHJpZ2h0LXBpbm5lZC1ib2R5IHctMTAwIGgtMTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlblwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlWSgnICsgdHJhbnNsYXRlWSArICdweCknXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYm94U2hhZG93XT1cImhhc1JpZ2h0UGlubmVkQ29sdW1ucyA/IHJpZ2h0UGlubmVkQm94c2hhZG93OiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwicmlnaHRQaW5uZWRCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWRhdGFTZXRMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBbQHJvd0R5bmFtaWNdPVwicm93QW5pbWF0aW9uXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgcm93IG9mIHZpc2libGVSb3dzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiAoc3RhcnRJbmRleCArIGkpICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiAoc3RhcnRJbmRleCArIGkpICUgMiAhPT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFsQW1vdW50Um93ICYmIG9yaWdpbmFsRGF0YVNldD8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHsgX192aXJ0dWFsSW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IGF1dG87IGxlZnQ6IGF1dG9cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGZ1bGxzY3JlZW5JbWFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgY2RyLmRldGVjdENoYW5nZXMoKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgIGRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAtIChmb290ZXJSb3dIZWlnaHQgKyAxMDApXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2UtbW9kYWwgZnVsbC1pbWFnZS1tb2RhbFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZnVsbHNjcmVlbkltYWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiZnVsbHNjcmVlbkltYWdlXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJGdWxsc2NyZWVuIEltYWdlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkUm93cy5zaXplID4gMCAmJiBzaG93VGFza2JhclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGFza2JhciB3LTEwMFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5ib3R0b20ucHhdPVwiMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1yb3dzLWFjdGlvbi1iYXJcIiBbQHNsaWRlVXBdPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0ZWQtY291bnRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkUm93cy5zaXplIH19IHNlbGVjdGVkIG9mXG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0cyB8fFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZz8ucGFnaW5hdGlvblBhcmFtcz8udG90YWxJdGVtc1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIFRvdGFsXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdGFza2JhckFjdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uPy5oYXNfcGVybWlzc2lvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1idG4gdmVyaWZpZWQgYnRuIHt7IGFjdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25WZXJpZnlDbGljayhhY3Rpb24/LmFjdGlvbk5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBhY3Rpb24/LmFjdGlvbk5hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tiYXJBY3Rpb25zLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPT0gdGFza2JhckFjdGlvbnMubGVuZ3RoIC0gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrYmFyQWN0aW9uc1tpICsgMV0/Lmhhc19wZXJtaXNzaW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPnw8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhclNlbGVjdGlvblN0YXRlKHRhYmxlVHlwZSk7c2VsZWN0ZWRSb3dzLmNsZWFyKCk7XCIgY2xhc3M9XCJjbGVhci1idG4gbXMtMiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmkteC1jaXJjbGVcIj48L2k+IENsZWFyIFNlbGVjdGlvblxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBWZXJ0aWNhbCBGYWtlIHNjcm9sbCBCYXIgLS0+XG4gICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uTWFpbkZha2VTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZha2Utc2Nyb2xsYmFyIGZha2Utc2Nyb2xsYmFyLXZlcnRpY2FsIGQtbm9uZVwiXG4gICAgICAgICAgICBbc3R5bGUuc2Nyb2xsYmFyV2lkdGhdPVwidmVydGljYWxTY3JvbGxiYXJXaWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cIlxuICAgICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nICYmIHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICA6IHNob3dDb2x1bW5zR3JvdXBpbmcgfHwgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMlxuICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgI2Zha2VTY3JvbGxcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYm9keVdyYXBwZXJIZWlnaHRcIlxuICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgICAgICAgICAgICB3aWR0aDogMTdweDtcbiAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZjFmMmYzO1xuICAgICAgICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAqIGRhdGFTZXRMZW5ndGhcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSG9yaXppbnRhbCBGYWtlIFNjcm9sbGJhcnMgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICAgKm5nSWY9XCJoYXNTY3JvbGwgJiYgIXNob3VsZFJlc3RvcmVTY3JvbGxcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cImhvcml6aW50YWxTY3JvbGxiYXJXaWR0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImZha2UtaG9yaXppbnRhbC1zY3JvbGxiYXJcIlxuICAgICAgICAgICAgI2Zha2VTY3JvbGxcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJsZWZ0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteDogc2Nyb2xsXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cImhvcml6aW50YWxTY3JvbGxiYXJXaWR0aFwiXG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uQ2VudGVyQm9keVNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFrZS1ob3JpemludGFsLXNjcm9sbGJhclwiXG4gICAgICAgICAgICAjaG9yaXppbnRhbEZha2VTY3JvbGxcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoLnB4XT1cImNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxXaWR0aCAtIDEwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW3N0eWxlLnNjcm9sbGJhcldpZHRoXT1cImhvcml6aW50YWxTY3JvbGxiYXJXaWR0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImZha2UtaG9yaXppbnRhbC1zY3JvbGxiYXJcIlxuICAgICAgICAgICAgI2Zha2VTY3JvbGxcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyaWdodFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXg6IHNjcm9sbFwiXG4gICAgICAgICAgPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNpZGUgTWVudSBJbXBsZW1lbnRlZCBIZXJlIC0tPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNob3dTaWRlTWVudVwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJzaWRlTWVudVZpc2libGUgPyAyODAgOiAzMFwiXG4gICAgICAgIGNsYXNzPVwicmlnaHQtbWVudSBoLTEwMFwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwic2lkZW1lbnVCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgZC1mbGV4IGZsZXgtcm93LXJldmVyc2VcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAzMHB4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXN0YXJ0XT1cInNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2lkZU1lbnUoJ2NvbHMnKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5iZy1mZmZdPVwiXG4gICAgICAgICAgICAgICAgY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnY29scycgJiYgc2lkZU1lbnVWaXNpYmxlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYmVsb3ddPVwic2lkZU1lbnVWaXNpYmxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW5zLWJ1dHRvbiBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvdWktY2hlY2tzLWdyaWQuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW1lbnVlLXRleHRcIj5Db2x1bW5zPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2lkZU1lbnUoJ2ZpbHRycycpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJnLWZmZl09XCJcbiAgICAgICAgICAgICAgICBjdXJyZW50T3BlbmVkU2lkZU1lbnVlID09ICdmaWx0cnMnICYmIHNpZGVNZW51VmlzaWJsZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJlbG93XT1cIlxuICAgICAgICAgICAgICAgIHNpZGVNZW51VmlzaWJsZSAmJiBjdXJyZW50T3BlbmVkU2lkZU1lbnVlID09ICdmaWx0cnMnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1ucy1idXR0b24gZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1tZW51ZS10ZXh0XCI+RmlsdGVyPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImgtMTAwXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2lkZU1lbnVWaXNpYmxlXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHNpZGVNZW51VmlzaWJsZSA/ICcyNTBweCcgOiAnJyB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDBcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnY29scycgJiYgc2lkZU1lbnVWaXNpYmxlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5uZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIENvbHVtbiBJdGVtcyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLXBhbmVsLWJvZHkgcHgtM1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblBhbmVsSXRlbTsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGhyIC8+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZS1tZW51LXJvdy1ncm91cHNcIiBzdHlsZT1cImhlaWdodDogMzAlXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZU1lbnVSb3dHcm91cHNcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9PSAnZmlsdHJzJyAmJiBzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVGaWx0ZXJzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJmb290ZXJSb3dIZWlnaHRcIlxuICAgICAgY2xhc3M9XCJib3JkZXItdG9wXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZm9vdGVyUm93QmFja2dyb3VuZENvbG9yXCJcbiAgICAgICpuZ0lmPVwicGFnaW5hdGlvbkNvbmZpZ1wiXG4gICAgPlxuICAgICAgPCEtLSBSb3dzOiA8c3BhbiBjbGFzcz1cImZ3LTUwMCBtcy0xXCI+e3sgZGF0YVNldC5sZW5ndGggfX08L3NwYW4+IC0tPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicGFnaW5hdGlvbi1jb250YWluZXJcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImZvb3RlclJvd0hlaWdodFwiXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nLnB4XT1cImZvb3RlclBhZGRpbmdcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1zaXplXCI+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYWdpbmF0aW9uQ29uZmlnLmxpbWl0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzaXplIG9mIHBhZ2VTaXplT3B0aW9uc1wiIFt2YWx1ZV09XCJzaXplXCI+XG4gICAgICAgICAgICAgIHt7IHNpemUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VwYXJhdG9yXCI+IHBlciBwYWdlIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtaW5mb1wiPlxuICAgICAgICAgIFJlc3VsdHM6XG4gICAgICAgICAge3sgKHBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpICogcGFnaW5hdGlvbkNvbmZpZy5saW1pdCArIDEgfX0te3tcbiAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcucGFnZSAqIHBhZ2luYXRpb25Db25maWcubGltaXQgPFxuICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHNcbiAgICAgICAgICAgICAgPyBwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgKiBwYWdpbmF0aW9uQ29uZmlnLmxpbWl0XG4gICAgICAgICAgICAgIDogcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHNcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9mXG4gICAgICAgICAge3sgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMgfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtYnV0dG9uc1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbkNvbmZpZy5wYWdlID09PSAxXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICDigLlcbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgdmlzaWJsZVBhZ2VzXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwicGFnZSAhPT0gJy4uLidcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhZ2UocGFnZSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInBhZ2UgPT09IHBhZ2luYXRpb25Db25maWcucGFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHBhZ2UgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYWdlID09PSAnLi4uJ1wiPi4uLjwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgKyAxKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbkNvbmZpZy5wYWdlID09PSBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAg4oC6XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIEhlYWRlciBDZWxsIFRlbXBsYXRlIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cblxuPG5nLXRlbXBsYXRlXG4gICNoZWFkZXJDZWxsXG4gIGxldC1jb2xcbiAgbGV0LXBpbm5lZFJpZ2h0PVwicGlubmVkUmlnaHRcIlxuICBsZXQtaT1cImluZGV4XCJcbiAgbGV0LWNvbHVtbkluZGV4PVwiaW5kZXhcIlxuICBsZXQtc2VjdGlvbnM9XCJzZWN0aW9uXCJcbiAgbGV0LWNhbGxlZEZyb21OZXN0ZWRQbGFjZWhvbGRlcj1cImNhbGxlZEZyb21OZXN0ZWRQbGFjZWhvbGRlclwiXG4+XG4gIDxkaXY+XG4gICAgPCEtLSBHcm91cCBIZWFkZXIgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jaGlsZHJlbj8ubGVuZ3RoID4gMDsgZWxzZSBmbGF0SGVhZGVyXCI+XG4gICAgICA8ZGl2IGNka0Ryb3BsaXN0R3JvdXAgY2xhc3M9XCJncm91cC1jb2x1bW4td3JhcHBlclwiPlxuICAgICAgICA8IS0tIFBhcmVudCBIZWFkZXIgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3VsZFRoZUdyb3VwSGVhZGVyU2hvdyhjb2wpXCJcbiAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIGdyb3VwLWhlYWRlclwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgW3N0eWxlLmdyaWRDb2x1bW5dPVwiJ3NwYW4gJyArIGNvbC5jaGlsZHJlbi5sZW5ndGhcIlxuICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cImhlYWRlckZvbnRXZWlnaHRcIlxuICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICBbY2xhc3MuanVzdGlmeS1jb250ZW50LWVuZF09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgc3R5bGU9XCJncmlkLXJvdzogMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImdyb3VwLWhlYWRlci1jb250ZW50XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJjb2wuaGVhZGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5tcy0yXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCJcbiAgICAgICAgICAgIChkYmxjbGljayk9XCJhdXRvc2l6ZUNvbHVtbihjb2wuY2hpbGRyZW4pXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25SZXNpemVHcm91cCgkZXZlbnQsIGNvbCwgcGlubmVkUmlnaHQpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENoaWxkIEhlYWRlcnMgYW5kIEZpbHRlcnMgLS0+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImNvbC5jaGlsZHJlblwiXG4gICAgICAgICAgKGNka0Ryb3BMaXN0U29ydGVkKT1cIm9uQ2hpbGREcm9wbGlzdFNvcnRlZCgkZXZlbnQsIHNlY3Rpb25zKVwiXG4gICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkNoaWxkRHJvcGxpc3REcm9wZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJcbiAgICAgICAgICAgIHNob3dSb3dzR3JvdXBpbmcgPyBbJ3Jvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lciddIDogW11cbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImNoaWxkXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gQ2hpbGQgSGVhZGVyIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkLmlzX3Zpc2libGUgJiYgIWNoaWxkWydpc1Jvd0dyb3VwZWQnXVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgb25lLXJvdy1oZWFkZXItY2VsbHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5maWVsZF09XCJjaGlsZC5maWVsZFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNoaWxkLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNoaWxkLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiaGVhZGVyRm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJncmlkLXJvdzogMlwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkLW9uLXRleHRdPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY2hpbGQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgaC0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53LTEwMF09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgaC0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVkaXRhYmxlLWhlYWRlcl09XCJjaGlsZD8uaXNfZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoaWxkLmhlYWRlciB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tZS0yXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNoaWxkLnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9waW4tYmx1ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3RocmVlLWRvdHMtdmVydGljYWwuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT25seSBzaG93IG1lbnUgaWYgdGhpcyBjb2x1bW4gaXMgYWN0aXZlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDb2wgPT09IGNoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAtNTAlOyB6LWluZGV4OiAyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLSghY2hpbGQ/LnBpbm5lZCA/IGNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxMZWZ0IDogMClcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNob3dGaWx0ZXJSb3cgfHwgc2hvd0NvbHVtbnNHcm91cGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIC0gMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0IC0gMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk1lbnU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sOiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTmVzdGVkVGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZENvbEluZGV4OiBpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJhdXRvc2l6ZUNvbHVtbihjaGlsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvblJlc2l6ZUNvbHVtbigkZXZlbnQsIGNoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIEZpbHRlciBDZWxsIC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmlsdGVyUm93XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBmaWx0ZXItY2VsbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNoaWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2hpbGQud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY2hpbGQud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBmaWx0ZXItY2VsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hpbGQuZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlckNoYW5nZShjaGlsZClcIlxuICAgICAgICAgICAgICAgICAgICAocGFzdGUpPVwib25GaWx0ZXJDaGFuZ2UoY2hpbGQpOyBhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGQ/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjaGlsZD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNoaWxkPy50eXBlID09ICdhcnJheSdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLXNlYXJjaC1pbnB1dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNoaWxkPy50eXBlID09ICdpbWFnZScgfHwgY2hpbGQ/LnR5cGUgPT0gJ2FycmF5J1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgIG9wZW5GaWx0ZXJGcm9tRGlzYWJsZWRTZWFyY2hlZElucHV0KGNoaWxkKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb3BlbkZpbHRlcihjaGlsZClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsdGVyLWFwcGxpZWRdPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwiY2hpbGQ/LnR5cGUgPT0gJ2ltYWdlJ1wiXG4gICAgICAgICAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDdweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogN3B4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAzcHggIzc0ODZmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwIDE2MyAyMzMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogMTJweDtcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW5cbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBmaWx0ZXItcm93LWZpbHRlci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVGaWx0ZXJDZWxsPy5maWVsZCA9PSBjaGlsZD8uZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogMTAwJTsgcmlnaHQ6IDA7IHotaW5kZXg6IDk5XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGQ/LnBpbm5lZCA/IDAgOiAtY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbExlZnRcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyTWVudTsgY29udGV4dDogeyBjb2w6IGNoaWxkIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgIWRyYWdnaW5nSW5Hcm91cEFyZWEgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNoaWxkLmlzX2dyb3VwYWJsZSAmJiBkcmFnZ2luZ0luR3JvdXBBcmVhKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWEgJiYgIWNoaWxkLmlzX2dyb3VwYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9iYW4uc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNoaWxkLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1BsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIGNoaWxkSGVhZGVyUGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uczogc2VjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZEZyb21OZXN0ZWRQbGFjZWhvbGRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWEgJiYgY2hpbGQ/LmlzX2dyb3VwYWJsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXMtMlwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjZcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZFJpZ2h0OiBwaW5uZWRSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uczogc2VjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRmxhdCBIZWFkZXIgfHwgU2luZ2xlIEhlYWRlciBDZWxsLS0+XG4gICAgPG5nLXRlbXBsYXRlICNmbGF0SGVhZGVyPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImdyb3VwLWNvbHVtbi13cmFwcGVyXCJcbiAgICAgICAgKm5nSWY9XCJjb2wuaXNfdmlzaWJsZSAmJiAhY29sWydpc1Jvd0dyb3VwZWQnXVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gRnVsbC1oZWlnaHQgSGVhZGVyIENlbGwgKHNwYW5zIDIgcm93cyB2aXN1YWxseSkgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIG9uZS1yb3ctaGVhZGVyLWNlbGxzXCJcbiAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nID8gaGVhZGVyUm93SGVpZ2h0ICogMiA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgICAgICAgICBzdHlsZT1cImdyaWQtcm93OiAxIC8gc3BhbiAyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgaC0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGgtMTAwIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5lZGl0YWJsZS1oZWFkZXJdPVwiY29sPy5pc19lZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZmlsdGVyLWFwcGxpZWQtb24tdGV4dF09XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjb2wpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjb2wpO1xuICAgICAgICAgICAgICAgICAgICBvcGVuRmlsdGVyb25UaHJlZURvdHNDbGljayhjb2wpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBbY2xhc3MubWUtMl09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9waW4tYmx1ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5tZS0yXT1cImNvbC5vcmRlcl9ieVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0aW5nQ29uZmlnPy5maWVsZCA9PSBjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQXNjZW5kaW5nIFNvcnQgSWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT0gJ2FzYydcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NvcnQtYXNjLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG10LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic29ydERlc2MoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT09ICdhc2MnXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRGVzY2VuZGluZyBTb3J0IEljb24gLS0+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdkZXNjJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc29ydC1kZXNjLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG10LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic29ydEFzYyhjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PT0gJ2Rlc2MnXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHJlZS1kb3RzIHAtMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3RocmVlLWRvdHMtdmVydGljYWwuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gT25seSBzaG93IG1lbnUgaWYgdGhpcyBjb2x1bW4gaXMgYWN0aXZlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVDb2wgPT09IGNvbFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogLTUwJTsgei1pbmRleDogMjFcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgIC0oIWNvbD8ucGlubmVkID8gY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbExlZnQgOiAwKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlblxuICAgICAgICAgICAgICAgICAgICAgID8gc2hvd0ZpbHRlclJvdyB8fCBzaG93Q29sdW1uc0dyb3VwaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDIgLSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHQgLSAxMFxuICAgICAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uTWVudTtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTmVzdGVkVGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZENvbEluZGV4OiAwXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Mudy0xMDBdPVwiY29sLnBpbm5lZCA9PSAncmlnaHQnXCJcbiAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJhdXRvc2l6ZUNvbHVtbihjb2wpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25SZXNpemVDb2x1bW4oJGV2ZW50LCBjb2wpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEZpbHRlciBDZWxsIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93RmlsdGVyUm93XCJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBmaWx0ZXItY2VsbFwiXG4gICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlclwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpbHRlckNoYW5nZShjb2wpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJjb2w/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjb2w/LnR5cGUgPT0gJ2FycmF5J1wiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtc2VhcmNoLWlucHV0XT1cIlxuICAgICAgICAgICAgICBjb2w/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjb2w/LnR5cGUgPT0gJ2FycmF5J1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChwYXN0ZSk9XCJvblBhc3RlSW5GaWx0ZXJSb3dTZWFyY2goJGV2ZW50LCBjb2wpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuRmlsdGVyRnJvbURpc2FibGVkU2VhcmNoZWRJbnB1dChjb2wpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb3BlbkZpbHRlcihjb2wpXCJcbiAgICAgICAgICAgIFtjbGFzcy5maWx0ZXItYXBwbGllZF09XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjb2wpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wZS1ub25lXT1cImNvbD8udHlwZSA9PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNGaWx0ZXJBcHBsaWVkT25Db2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgd2lkdGg6IDdweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDdweDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDNweCAjNzQ4NmZmO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwIDE2MyAyMzMpO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogNHB4O1xuICAgICAgICAgICAgICAgIHRvcDogMTJweDtcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWJsb2NrXCJcbiAgICAgICAgICAgID48L3NwYW5cbiAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBmaWx0ZXItcm93LWZpbHRlci13cmFwcGVyXCJcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlRmlsdGVyQ2VsbCA9PT0gY29sXCJcbiAgICAgICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyByaWdodDogMDsgei1pbmRleDogOTlcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiY29sPy5waW5uZWQgPyAwIDogLWNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxMZWZ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyTWVudTsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSBCb2R5IENlbGwgVGVtcGxhdGUgLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cblxuPG5nLXRlbXBsYXRlXG4gICNyb3dDZWxsXG4gIGxldC1yb3dcbiAgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgbGV0LWlzRXZlbj1cImlzRXZlblwiXG4gIGxldC1pc09kZD1cImlzT2RkXCJcbiAgbGV0LWlzTGVmdFNlY3Rpb249XCJpc0xlZnRcIlxuICBsZXQtc2VjdGlvbj1cInNlY3Rpb25cIlxuICBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXG4gIGxldC1pc1RvdGFsUm93PVwiaXNUb3RhbFJvd1wiXG4+XG4gIDwhLS0gQ2hlY2sgaWYgcm93IGlzIGEgZ3JvdXAgLS0+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwUm93VGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3csIGRlcHRoOiAwIH1cIlxuICA+PC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjZ3JvdXBSb3dUZW1wbGF0ZSBsZXQtcm93IGxldC1kZXB0aD1cImRlcHRoXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy5pc0dyb3VwOyBlbHNlIHJlZ3VsYXJSb3dcIj5cbiAgICAgIDwhLS0gR3JvdXAgSGVhZGVyIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImdyb3VwLWhlYWRlci1yb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCJzZWN0aW9uICE9PSAnY2VudGVyJ1wiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJcbiAgICAgICAgICBzZWN0aW9uID09PSAnY2VudGVyJ1xuICAgICAgICAgICAgPyAoY2VudGVyU2Nyb2xsYWJsZUJvZHk/LnNjcm9sbFdpZHRoID8/IDApICsgJ3B4J1xuICAgICAgICAgICAgOiAnMTAwJSdcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2VjdGlvbiA9PSAnbGVmdCdcIlxuICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibGVmdFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aCAtIDFcIlxuICAgICAgICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1NlcmlhbE51bWJlclwiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA1MHB4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTEwMCBib3JkZXItcmlnaHQganVzdGlmeS1jb250ZW50LWVuZCBwZS0yIHMtbm9cIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCI1NVwiXG4gICAgICAgICAgICBbc3R5bGUuY3Vyc29yXT1cIlxuICAgICAgICAgICAgICAndXJsKCcgK1xuICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1yaWdodC5zdmcpLCBhdXRvJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Sb3dNb3VzZURvd24ocm93Ll9fdmlydHVhbEluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChtb3VzZW92ZXIpPVwib25Sb3dNb3VzZU92ZXIocm93Ll9fdmlydHVhbEluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjaGVja2JveGVzQ29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGdldFN0YXJ0SW5kZXgoKSArIChyb3cuX192aXJ0dWFsSW5kZXggLSAxKSB8fCBcIlwiIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0NoZWNrYm94ZXNcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNTBweFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMCBib3JkZXItcmlnaHRcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgICAgIFtjbGFzcy5sZWZ0LXNlbGVjdGlvbi1ib3JkZXJdPVwiXG4gICAgICAgICAgICAgIHJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiY2hlY2tib3hlc0NvbG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0R3JvdXBDaGVja2VkU3RhdGUocm93KSA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImdldEdyb3VwQ2hlY2tlZFN0YXRlKHJvdykgPT09IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0R3JvdXBSb3coJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2VjdGlvbiA9PSAnY2VudGVyJ1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxXaWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cImNlbnRlclBpbm5lZEhlYWRlci5zY3JvbGxXaWR0aFwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBzLTIgaC0xMDAgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIlxuICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmdMZWZ0LnB4XT1cImRlcHRoID4gMCA/IGRlcHRoICogMzAgOiAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgZmlsdGVyLWljb24td3JhcHBlclwiIChjbGljayk9XCJ0b2dnbGVFeHBhbmQocm93KVwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGFsaWduLWl0ZW1zLWNlbnRlciBkLWZsZXhcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICByb3cuaXNFeHBhbmRcbiAgICAgICAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLWRvd24uc3ZnJ1xuICAgICAgICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nIChjbGljayk9XCJ0b2dnbGVFeHBhbmQocm93KVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAge3sgcm93Lmdyb3VwVmFsdWUgfX0gKHt7IGNvdW50TGVhZlJvd3Mocm93KSB9fSlcbiAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzZWN0aW9uID09ICdyaWdodCdcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyaWdodFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBSZWN1cnNpdmUgQ2hpbGRyZW4gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtY2hpbGRyZW5cIiAqbmdJZj1cInJvdy5pc0V4cGFuZFwiIFtAc2xpZGVUb2dnbGVdPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIHJvdy5jaGlsZHJlbjsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsZC5pc0dyb3VwOyBlbHNlIGRhdGFSb3dcIj5cbiAgICAgICAgICAgIDwhLS0gUmVjdXJzaXZlIGNhbGwgZm9yIG5lc3RlZCBncm91cCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBncm91cFJvd1RlbXBsYXRlO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjaGlsZCwgZGVwdGg6IGRlcHRoICsgMSB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGFSb3c+XG4gICAgICAgICAgICA8IS0tIFJlZ3VsYXIgZGF0YSByb3cgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgICAgICAgICAgIGlzRXZlbjogaSAlIDIgPT09IDAsXG4gICAgICAgICAgICAgICAgICBpc09kZDogaSAlIDIgIT09IDAsXG4gICAgICAgICAgICAgICAgICBpc0xlZnQ6IGlzTGVmdFNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogaXNUb3RhbFJvd1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDwhLS0gUmVndWxhciByb3cgKG5vdCBhIGdyb3VwKSAtLT5cbiAgPG5nLXRlbXBsYXRlICNyZWd1bGFyUm93PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4XCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBjdXJzb3ItcG9pbnRlciBib3JkZXItYmVsb3dcIlxuICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMzBweDsgaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBzZWN0aW9uID09ICdjZW50ZXInICYmIChncmlkVHlwZSA9PT0gJ0Fzc2V0cycgfHwgZ3JpZFR5cGUgPT09ICdUYXNrcycpXG4gICAgICAgIFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGdldEJhY2tncm91bmRDb2xvcihyb3csIGlzRXZlbiwgc2VjdGlvbilcbiAgICAgICAgfVwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRGV0YWlsUm93RXhwYW5kKHJvdylcIlxuICAgICAgICAgICpuZ0lmPVwicm93Py5kZXRhaWw/LnJlc3VsdD8ubGVuZ3RoIHx8IGdyaWRUeXBlID09PSAnVGFza3MnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBmaWx0ZXItaWNvbi13cmFwcGVyXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgaXNEZXRhaWxzRXhwYW5kZWQocm93KVxuICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tZG93bi5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxkaXZcbiAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJcbiAgICAgICAgICBzZWN0aW9uID09ICdjZW50ZXInICYmIGdyb3VwZWRDb2x1bW5zPy5sZW5ndGggPyBncm91cEJveFBhZGRpbmcgOiAwXG4gICAgICAgIFwiXG4gICAgICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAoY29udGV4dG1lbnUpPVwib25SaWdodENsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtcm93IGgtMTAwXCJcbiAgICAgICAgW2NsYXNzLmV2ZW4tcm93XT1cImlzRXZlblwiXG4gICAgICAgIFtjbGFzcy5vZGQtcm93XT1cImlzT2RkXCJcbiAgICAgICAgW2NsYXNzLmhvdmVyZWQtcm93XT1cImhvdmVyZWRSb3dJZCA9PT0gKHJvdy5faWQgfHwgcm93LmlkKVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm9uUm93SG92ZXIocm93KVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIm9uUm93TGVhdmUoKVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGdldEJhY2tncm91bmRDb2xvcihyb3csIGlzRXZlbiwgc2VjdGlvbilcbiAgICAgICAgfVwiXG4gICAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgPjwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAoY29udGV4dG1lbnUpPVwib25SaWdodENsaWNrKCRldmVudCwgcm93KVwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtcm93XCJcbiAgICAgICAgW2NsYXNzLmV2ZW4tcm93XT1cImlzRXZlblwiXG4gICAgICAgIFtjbGFzcy5vZGQtcm93XT1cImlzT2RkXCJcbiAgICAgICAgW2NsYXNzLmhvdmVyZWQtcm93XT1cImhvdmVyZWRSb3dJZCA9PT0gKHJvdy5faWQgfHwgcm93LmlkKVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm9uUm93SG92ZXIocm93KVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cIm9uUm93TGVhdmUoKVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGdldEJhY2tncm91bmRDb2xvcihyb3csIGlzRXZlbiwgc2VjdGlvbilcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveC1jZWxsIGp1c3RpZnktY29udGVudC1lbmQgcGUtMiBzLW5vXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiNTVcIlxuICAgICAgICAgICpuZ0lmPVwiaXNMZWZ0U2VjdGlvbiAmJiBzaG93U2VyaWFsTnVtYmVyXCJcbiAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cImJvZHlUZXh0Rm9udHNTaXplXCJcbiAgICAgICAgICBbc3R5bGUuY3Vyc29yXT1cIlxuICAgICAgICAgICAgJ3VybCgnICtcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1yaWdodC5zdmcpLCBhdXRvJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgKG1vdXNlZG93bik9XCJvblJvd01vdXNlRG93bihyb3cuX192aXJ0dWFsSW5kZXgsICRldmVudClcIlxuICAgICAgICAgIChtb3VzZW92ZXIpPVwib25Sb3dNb3VzZU92ZXIocm93Ll9fdmlydHVhbEluZGV4LCAkZXZlbnQpXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiY2hlY2tib3hlc0NvbG9yXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldFN0YXJ0SW5kZXgoKSArIChyb3cuX192aXJ0dWFsSW5kZXggLSAxKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiXG4gICAgICAgICAgICByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICAgICAgPyBzZWxlY3RlZFJvd3NCYWNrZ3JvdW5kQ29sb3JcbiAgICAgICAgICAgICAgOiBjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cInNlbGVjdC1hbGwtY2hlY2tib3gtY2VsbFwiXG4gICAgICAgICAgKm5nSWY9XCJpc0xlZnRTZWN0aW9uICYmIHNob3dDaGVja2JveGVzXCJcbiAgICAgICAgICBbY2xhc3MubGVmdC1zZWxlY3Rpb24tYm9yZGVyXT1cIlxuICAgICAgICAgICAgcm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDFcIlxuICAgICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nSWY9XCJoYXNBbnlWaXNpYmxlQ29sdW1uXCJcbiAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHhcIlxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJlbmRlciBhbGwgY29sdW1ucyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zO1xuICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkO1xuICAgICAgICAgICAgbGV0IGNvbEluZGV4ID0gaW5kZXhcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jaGlsZHJlbj8ubGVuZ3RoID4gMDsgZWxzZSBmbGF0Q29sdW1uXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkO1xuICAgICAgICAgICAgICAgIGxldCBzdWJDb2xJbmRleCA9IGluZGV4XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsZD8uaXNfdmlzaWJsZSAmJiAhY2hpbGQ/LmlzUm93R3JvdXBlZFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGNvbEluZGV4OiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBzdWJDb2xJbmRleDogc3ViQ29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogc2VjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBpc1RvdGFsUm93XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNmbGF0Q29sdW1uPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8uaXNfdmlzaWJsZSAmJiAhY29sPy5pc1Jvd0dyb3VwZWRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICBjb2xJbmRleDogY29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHN1YkNvbEluZGV4OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBpc1RvdGFsUm93XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIFtAc2xpZGVUb2dnbGVdXG4gICAgICAqbmdJZj1cInNlY3Rpb24gPT09ICdsZWZ0JyAmJiBpc0RldGFpbHNFeHBhbmRlZChyb3cpXCJcbiAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWRldGFpbHNcIlxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzNTBweDsgb3ZlcmZsb3c6IGhpZGRlblwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImhhc0hvcml6b250YWxTY3JvbGwgPyAzMzkgOiAzNDFcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBsZWZ0UmlnaHROZXN0ZWRQbGFjZWhvbGRlcjtcbiAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgW0BzbGlkZVRvZ2dsZV1cbiAgICAgICpuZ0lmPVwic2VjdGlvbiA9PT0gJ2NlbnRlcicgJiYgaXNEZXRhaWxzRXhwYW5kZWQocm93KVwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbi1kZXRhaWxzIGNlbnRlci1zZWN0aW9uXCJcbiAgICAgIHN0eWxlPVwiXG4gICAgICAgIG1heC1oZWlnaHQ6IDM1MHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcbiAgICAgIFwiXG4gICAgICAjbmVzdGVkVGFibGVcbiAgICAgIFtzdHlsZS53aWR0aF09XCJcbiAgICAgICAgaGFzUmlnaHRQaW5uZWRDb2x1bW5zXG4gICAgICAgICAgPyAnMTAwJSdcbiAgICAgICAgICA6IGhhc1ZlcnRpY2FsU2Nyb2xsXG4gICAgICAgICAgPyAnY2FsYygxMDAlIC0gMTJweCknXG4gICAgICAgICAgOiAnMTAwJSdcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWRUeXBlID09ICdBc3NldHMnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5lc3RlZFRhYmxlVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyaWRUeXBlID09ICdUYXNrcydcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICB0YXNrTWFuYWdlbWVudFRlbXBsYXRlO1xuICAgICAgICAgICAgY29udGV4dDogeyB0YXNrRGV0YWlsczogcm93IH1cbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIFtAc2xpZGVUb2dnbGVdXG4gICAgICAqbmdJZj1cInNlY3Rpb24gPT09ICdyaWdodCcgJiYgaXNEZXRhaWxzRXhwYW5kZWQocm93KVwiXG4gICAgICBjbGFzcz1cImFjY29yZGlvbi1kZXRhaWxzXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzUwcHg7IG92ZXJmbG93OiBoaWRkZW5cIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJoYXNIb3Jpem9udGFsU2Nyb2xsID8gMzM5IDogMzQxXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbGVmdFJpZ2h0TmVzdGVkUGxhY2Vob2xkZXI7XG4gICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gQWN0dWFsIENlbGwgaXMgSGVyZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjY2VsbFRlbXBsYXRlXG4gIGxldC1jb2w9XCJjb2xcIlxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCJcbiAgbGV0LXN1YkNvbEluZGV4PVwic3ViQ29sSW5kZXhcIlxuICBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXG4gIGxldC1jb2xJbmRleD1cImNvbEluZGV4XCJcbiAgbGV0LWlzVG90YWxSb3c9XCJpc1RvdGFsUm93XCJcbj5cbiAgPGRpdlxuICAgICNjZWxsQ29udGFpbmVyXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZWRpdGluZ0tleSA9ICcnOyBzZXRBY3RpdmVDZWxsKHJvdywgY29sKTsgY29sbGFwc2VBbGxFeHBhbmRlZENlbGxzKClcbiAgICBcIlxuICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cImJvZHlGb250V2VpZ2h0XCJcbiAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgY2xhc3M9XCJjZWxsIG92ZXJmbG93LXZpc2libGUgcG9zaXRpb24tcmVsYXRpdmUgZGF0YS1ncmlkLWNlbGxcIlxuICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJib2R5VGV4dEZvbnRzU2l6ZVwiXG4gICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwicm93SGVpZ2h0XCJcbiAgICBbY2xhc3MuYWN0aXZlLWNlbGxdPVwiXG4gICAgICBpc0FjdGl2ZUNlbGwocm93LCBjb2wpICYmICFpc0VkaXRpbmcocm93LCBjb2wpICYmIHNlbGVjdGVkS2V5cy5zaXplID09IDFcbiAgICBcIlxuICAgIChkYmxjbGljayk9XCJcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZW5hYmxlRWRpdChyb3csIGNvbCwgZmFsc2UsIGNlbGxDb250YWluZXIpXG4gICAgXCJcbiAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3c/Ll9fdmlydHVhbEluZGV4XCJcbiAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3c/Ll9fdmlydHVhbEluZGV4XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgZW5hYmxlRWRpdChyb3csIGNvbClcIlxuICAgIChtb3VzZWRvd24pPVwiXG4gICAgICBzdGFydFNlbGVjdGlvbihcbiAgICAgICAgcm93Ll9fdmlydHVhbEluZGV4LFxuICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgc3ViQ29sSW5kZXggPz8gMCxcbiAgICAgICAgY29sLmZpZWxkLFxuICAgICAgICAkZXZlbnQsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICBcIlxuICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgZXh0ZW5kU2VsZWN0aW9uKFxuICAgICAgICByb3cuX192aXJ0dWFsSW5kZXgsXG4gICAgICAgIGNvbEluZGV4LFxuICAgICAgICBzdWJDb2xJbmRleCA/PyAwLFxuICAgICAgICBjb2wuZmllbGQsXG4gICAgICAgICRldmVudCxcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIFwiXG4gICAgKG1vdXNldXApPVwiZW5kU2VsZWN0aW9uKClcIlxuICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cIlxuICAgICAgaXNTZWxlY3RlZChcbiAgICAgICAgcm93Ll9fdmlydHVhbEluZGV4LFxuICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgc3ViQ29sSW5kZXggPz8gMCxcbiAgICAgICAgY29sLmZpZWxkLFxuICAgICAgICBzZWN0aW9uXG4gICAgICApXG4gICAgXCJcbiAgICBbY2xhc3MudG9wLWJvcmRlcl09XCJcbiAgICAgIGlzVG9wQm9yZGVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLmJvdHRvbS1ib3JkZXJdPVwiXG4gICAgICBpc0JvdHRvbUJvcmRlcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy5sZWZ0LWJvcmRlcl09XCJcbiAgICAgIGlzTGVmdEJvcmRlcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy5yaWdodC1ib3JkZXJdPVwiXG4gICAgICBpc1JpZ2h0Qm9yZGVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLnRvcC1sZWZ0LWNvcm5lcl09XCJcbiAgICAgIGlzVG9wTGVmdENvcm5lcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy50b3AtcmlnaHQtY29ybmVyXT1cIlxuICAgICAgaXNUb3BSaWdodENvcm5lcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy5ib3R0b20tbGVmdC1jb3JuZXJdPVwiXG4gICAgICBpc0JvdHRvbUxlZnRDb3JuZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MuYm90dG9tLXJpZ2h0LWNvcm5lcl09XCJcbiAgICAgIGlzQm90dG9tUmlnaHRDb3JuZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgPlxuICAgIDwhLS0gIChtb3VzZWRvd24pPVwic3RhcnRTZWxlY3Rpb24ocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXggPz8gMCwgY29sLmZpZWxkLCAkZXZlbnQpXCJcbiAgKG1vdXNlZW50ZXIpPVwiZXh0ZW5kU2VsZWN0aW9uKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4ID8/IDAsIGNvbC5maWVsZCwgJGV2ZW50KVwiXG4gIChtb3VzZXVwKT1cImVuZFNlbGVjdGlvbigpXCJcbiAgW2NsYXNzLnNlbGVjdGVkLWNlbGxdPVwiaXNTZWxlY3RlZChyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCAgc3ViQ29sSW5kZXggPz8gMCwgY29sLmZpZWxkKVwiIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGFibGUtY2VsbFwiXG4gICAgICBbY2xhc3MuYWN0aXZlLWZvci1lZGl0aW5nXT1cIlxuICAgICAgICBpc0VkaXRpbmcocm93LCBjb2wpICYmXG4gICAgICAgIChnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5sZW5ndGggPD0gNTApXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaXNFZGl0aW5nKHJvdywgY29sKSAmJlxuICAgICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoIDw9IDUwICYmXG4gICAgICAgICAgICAgICAgIWV4cGFuZGVkQ2VsbHMuc2l6ZSkpO1xuICAgICAgICAgIGVsc2Ugdmlld01vZGVcbiAgICAgICAgXCJcbiAgICAgID5cblxuICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2VsbEVkaXRvcjsgZWxzZSBidWlsdEluRWRpdG9yc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW2NlbGxFZGl0b3JdPVwiY29sLmNlbGxFZGl0b3JcIlxuICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgW2NvbERhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICBbY2VsbFZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAgICAgKGVkaXRvckV2ZW50KT1cImZpbmlzaEVkaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjYnVpbHRJbkVkaXRvcnM+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbD8udHlwZVwiPlxuICAgICAgICAgIDwhLS0gVGV4dCBJbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dCdcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sLmZpZWxkXVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPCEtLSBOdW1iZXIgSW5wdXQgLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDhcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICNudW1iZXJJbnB1dD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgI251bWJlclJlZlxuICAgICAgICAgICAgKGtleXByZXNzKT1cImFsbG93T25seU51bWJlcnMoJGV2ZW50KVwiXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2wuZmllbGRdXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCBudW1iZXJJbnB1dClcIlxuICAgICAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBudW1iZXJJbnB1dC5pbnZhbGlkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPCEtLSBEYXRlIElucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSA4XCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIlxuICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sLmZpZWxkXVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgZGF0ZUlucHV0KVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAjZGF0ZUlucHV0PVwibmdNb2RlbFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IGRhdGVJbnB1dC5pbnZhbGlkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cbiAgICAgICAgICA8IS0tIG5nLXNlbGVjdCBsaWtlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24gdy0xMDBcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIFRyaWdnZXIgLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gdGV4dC1zdGFydCB3LTEwMCB0ZXh0LWVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgICAgZGF0YS1icy1kaXNwbGF5PVwic3RhdGljXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlcj4gU2VsZWN0IG9wdGlvbnMuLi4gPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIE1lbnUgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSB3LTEwMCBwLTAgY2VsbC1lZGl0aW5nLWRyb3Bkb3duLW1lbnUgcm91bmRlZC0zXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNob3ddPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwhLS0gU2VhcmNoIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBweS0xIGVkaXRpbmctZHJvcGRvd24tc2VhcmNoLWlucHV0XCIgKm5nSWY9XCJjb2w/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoID4gNVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGluRHJvcGRvd25TZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IFxuICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZT1cIjM1XCIgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tdmlld3BvcnRcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMTIwcHhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkgPT0gb3B0aW9uPy52YWx1ZSB8fCBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkgPT0gb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTIgcHktMSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uIG9mIGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyIDogZWRpdGluRHJvcGRvd25TZWFyY2ggOiAndmFsdWUnXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0TmVzdGVkVmFsdWUocm93LCBjb2wsIG9wdGlvbiwgdHJ1ZSk7IGVkaXRpbmdLZXkgPSBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwiY29sLmZpZWxkICsgJy0nICsgKG9wdGlvbi52YWx1ZSB8fCBvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEZvciBBcnJheSB0eXBlIHZhbHVlcyAtLT5cblxuICAgICAgICAgIDwhLS0gTVVMVEkgU0VMRUNUIChBUlJBWSkgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93biB3LTEwMFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25BcnJheUJsdXIocm93LCBjb2wpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbW1pdEFycmF5KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSB0ZXh0LXN0YXJ0IHctMTAwIHRleHQtZWxsaXBzaXNcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRBcnJheVRlbXAocm93LCBjb2wpLmxlbmd0aDsgZWxzZSBhcnJheVBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5QXJyYXlMYWJlbHMocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FycmF5UGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IG9wdGlvbnMuLi5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIE1lbnUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSB3LTEwMCBwLTAgY2VsbC1lZGl0aW5nLWRyb3Bkb3duLW1lbnUgcm91bmRlZC0zXCIgW2NsYXNzLmludmlzaWJsZV09XCIhbWVudVJlYWR5XCIgW2NsYXNzLnNob3ddPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPiA1XCIgY2xhc3M9XCJweC0yIHB5LTEgYXJyYXktc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5Ecm9wZG93blNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIC0tPlxuICAgICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzVcIiBzdHlsZT1cImhlaWdodDogMTIwcHhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uIG9mIGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICB8IGZpbHRlciA6IGVkaXRpbkRyb3Bkb3duU2VhcmNoIDogJ3ZhbHVlJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBweC0yIHB5LTEgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG0tMCBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBcnJheVNlbGVjdGVkKHJvdywgY29sLCBvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBcnJheVRlbXAocm93LCBjb2wsIG9wdGlvbik7JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBjb21taXRBcnJheShyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IG1heC13aWR0aDogMTZweDsgbWF4LWhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24/LnZhbHVlIHx8IG9wdGlvbiB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlbWFpbCdcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgICNlbWFpbE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjZW1haWxJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgcGF0dGVybj1cIl5bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSRcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIGVtYWlsTW9kZWwpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImJsdXJJbnB1dCgkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZW1haWxNb2RlbC5pbnZhbGlkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDwhLS0gRGVmYXVsdCBmYWxsYmFjayAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAjdGV4dE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjdGV4dElucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sLmZpZWxkXVwiXG4gICAgICAgICAgICBuYW1lPVwie3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgdGV4dE1vZGVsKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogdGV4dE1vZGVsLmludmFsaWRcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGlzcGxheSBtb2RlIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICN2aWV3TW9kZT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzc2VzKGNvbCwgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEZpZWxkIGljb24gKGZvciBUYXNrcyBncmlkKSAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImdyaWRUeXBlID09PSAnVGFza3MnICYmIGljb25NYXBbY29sLmZpZWxkXSAmJiAhaXNUb3RhbFJvd1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBtZS0yXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cImljb25NYXBbY29sLmZpZWxkXShyb3csIGNvbClcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0g4pyFIEN1c3RvbSBjZWxsIHJlbmRlcmVyIHN1cHBvcnQgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jZWxsUmVuZGVyZXIgJiYgIWlzVG90YWxSb3c7IGVsc2UgZGVmYXVsdENlbGxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW2NlbGxSZW5kZXJJbml0XT1cImNvbC5jZWxsUmVuZGVyZXJcIlxuICAgICAgICAgICAgICBbcm93RGF0YV09XCJyb3dcIlxuICAgICAgICAgICAgICBbY29sRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICBbY2VsbFZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sPy5maWVsZClcIlxuICAgICAgICAgICAgICAoY2VsbEV2ZW50KT1cIm9uQ2VsbEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIPCfp74gRGVmYXVsdCB0ZXh0LWJhc2VkIGNlbGwgcmVuZGVyaW5nIC0tPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGw+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICNjZWxsVGV4dFxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgZmxleC1ncm93LTFcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiZ2V0Q2VsbFRpdGxlKHJvdywgY29sKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwhLS0gTm9ybWFsIGNlbGwgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgY29sPy50eXBlICE9PSAnaW1hZ2UnICYmXG4gICAgICAgICAgICAgICAgICBjb2w/LmZpZWxkICE9ICdpbWFnZScgJiZcbiAgICAgICAgICAgICAgICAgIGNvbD8uZmllbGQgIT0gJ2ludm9pY2UuaW52b2ljZV9pbWFnZScgJiZcbiAgICAgICAgICAgICAgICAgICFpc1RvdGFsUm93XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNfYW1vdW50XCI+e3tcbiAgICAgICAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB7e2dldENlbGxUaXRsZShyb3csIGNvbCl9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIFRvdGFsIHJvdyAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVG90YWxSb3dcIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRUb3RhbEFtb3VudChjb2wpIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gSW52b2ljZSBJbWFnZSAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5maWVsZCA9PSAnaW52b2ljZS5pbnZvaWNlX2ltYWdlJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyB6b29tOiAwLjdcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpIHx8ICdBdHRhY2htZW50JyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEF0dGNobWVudChnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2RvY3VtZW50LWljb25zLycgK1xuICAgICAgICAgICAgICAgICAgICAgIGdldEV4dGVudGlvbihnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkpICtcbiAgICAgICAgICAgICAgICAgICAgICAnLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gSW1hZ2UgY2VsbCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnaW1hZ2UnICYmICFpc1RvdGFsUm93XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEltYWdlUGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgcm93OiByb3csIGNvbDogY29sIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICghY29sPy5jZWxsUmVuZGVyZXIgJiYgc2hvd0NlbGxEZXRhaWxzQm94ICYmXG4gICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5sZW5ndGggPiA1MCAmJiBjb2w/LnR5cGUgIT09ICdpbWFnZScpIHx8XG4gICAgICAgICAgICAgIChpc05lc3RlZFZhbHVlQXJyYXkocm93LCBjb2wuZmllbGQpICYmXG4gICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5sZW5ndGggPiAxKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uIG1zLTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgaXNFeHBhbmRlZChyb3csIGNvbClcbiAgICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tZG93bi5zdmcnXG4gICAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgdG9nZ2xlRXhwYW5kT2ZMb25nQ2VsbFRleHQocm93LCBjb2wsIGNvbHVtbnMsIGZhbHNlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChkYmxjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPCEtLSBFeHBhbmQgLyBDb2xsYXBzZSBpY29uIC0tPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEV4cGFuZGVkIHRleHQgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHctMTAwIGV4cGFuZGVkLWJveFwiXG4gICAgICAgICAgKm5nSWY9XCJpc0V4cGFuZGVkKHJvdywgY29sKVwiXG4gICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJnZXRaSW5kZXgocm93LCBjb2wpXCJcbiAgICAgICAgICBzdHlsZT1cInRvcDogMTAwJTsgbGVmdDogMFwiXG4gICAgICAgICAgW2F0dHIuaWRdPVwiKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIChjb2wuaWQgfHwgY29sLl9pZClcIlxuICAgICAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiIXNob3dEZXRhaWxzQm94XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGZ1bGxUZXh0VGVtcGxhdGU7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICBpc0FycmF5OiBpc05lc3RlZFZhbHVlQXJyYXkocm93LCBjb2wuZmllbGQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBIZWFkZXJzIEFjdGlvbiBMaXN0IE9uIGNsaWNraW5nIHRocmVlIGRvdHMgLS0+XG5cbjxuZy10ZW1wbGF0ZVxuICAjY29sdW1uTWVudVxuICBsZXQtY29sPVwiY29sXCJcbiAgbGV0LWlzTmVzdGVkVGFibGU9XCJpc05lc3RlZFRhYmxlXCJcbiAgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCJcbiAgbGV0LWNvbHVtbkluZGV4PVwiY29sdW1uSW5kZXhcIlxuICBsZXQtY2hpbGRDb2xJbmRleD1cImNoaWxkQ29sSW5kZXhcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb2x1bW4tbWVudSB0aHJlZS1kb3RzLWNvbC1tZW51XCJcbiAgICBbY2xhc3MudmlzdWFsbHktaGlkZGVuXT1cImlzTWVudWVIaWRkZW5cIlxuICAgICpuZ0lmPVwiYWN0aXZlQ29sICYmICFpc1RocmVlRG90c0ZpbHRlck9wZW5cIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZHJvcGRvd25zQmFja2dyb3VuZENvbG9yXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBbc3R5bGUuY29sb3JdPVwiaGVhZGVyVGV4dENvbG9yXCJcbiAgPlxuICAgIDwhLS0gU29ydCBBc2NlbmRpbmcgLS0+XG4gICAgPGRpdiBjbGFzcz1cImJvcmRlci1iZWxvdyBwYi0yXCIgW2NsYXNzLmRpc2FibGUtc29ydGluZ109XCIhY29sLmlzX3NvcnRhYmxlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm11dGVkLXRleHQgZnMtN1wiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEycHhcIj5Tb3J0PC9zcGFuPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dBc2NlbmRpbmcgJiZcbiAgICAgICAgICAoc29ydGluZ0NvbmZpZz8uZmllbGQgIT0gY29sLmZpZWxkIHx8XG4gICAgICAgICAgICBzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PSAnZGVzYycpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJzb3J0QXNjKGFjdGl2ZUNvbClcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctdXAuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIFNvcnQgQXNjZW5kaW5nXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTb3J0IERlc2NlbmRpbmcgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0Rlc2NlbmRpbmcgJiZcbiAgICAgICAgICAoc29ydGluZ0NvbmZpZz8uZmllbGQgIT0gY29sLmZpZWxkIHx8XG4gICAgICAgICAgICBzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PSAnYXNjJylcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cInNvcnREZXNjKGFjdGl2ZUNvbClcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctZG93bi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgU29ydCBEZXNjZW5kaW5nXG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNvcnRpbmdDb25maWc/LmZpZWxkID09PSBjb2wuZmllbGQgJiZcbiAgICAgICAgICAoc29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT09ICdhc2MnIHx8XG4gICAgICAgICAgICBzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PT0gJ2Rlc2MnKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwicmVzZXRTb3J0KGFjdGl2ZUNvbClcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1jb3VudGVyY2xvY2t3aXNlLnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICBSZXNldCBTb3J0XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicHktMiBib3JkZXItYmVsb3cgdGhyZWUtZG90cy1maWx0ZXJcIiBbY2xhc3MuZGlzYWJsZS1zb3J0aW5nXT1cImNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8ICFjb2wuaXNfc2VhcmNoX2FibGVcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93RmlsdGVyXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtIHRocmVlLWRvdHMtZmlsdGVyXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJvblRocmVlRG90c0NsaWNrKGNvbClcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIEZpbHRlclxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicHktMiBib3JkZXItYmVsb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZWQtdGV4dCBmcy03XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTJweFwiPlBpbjwvc3Bhbj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93UGlubGVmdCAmJiBjb2w/LnBpbm5lZCAhPT0gJ2xlZnQnXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB1cGRhdGVDb2x1bW5QaW5JblNvdXJjZUJ5RmllbGQoXG4gICAgICAgICAgICBhY3RpdmVDb2wsXG4gICAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgICBpc05lc3RlZFRhYmxlLFxuICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1sZWZ0LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICAgID5QaW4gTGVmdFxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93UGlucmlnaHQgJiYgY29sPy5waW5uZWQgIT09ICdyaWdodCdcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB1cGRhdGVDb2x1bW5QaW5JblNvdXJjZUJ5RmllbGQoXG4gICAgICAgICAgICBhY3RpdmVDb2wsXG4gICAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZSxcbiAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICApXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9waW4tcmlnaHQuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICAgID5QaW4gUmlnaHRcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBpc05lc3RlZFRhYmxlLFxuICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvbGF5b3V0LXRocmVlLWNvbHVtbnMuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlVucGluXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0F1dG9zaXplVGhpc0NvbHVtblwiXG4gICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cImF1dG9zaXplQ29sdW1uKGFjdGl2ZUNvbClcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLWV4cGFuZC12ZXJ0aWNhbC5zdmcnXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgQXV0b3NpemUgVGhpcyBDb2x1bW5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXV0b3NpemUgQWxsIENvbHVtbnMgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93QXV0b3NpemVBbGxDb2x1bW5zXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiYXV0b3NpemVBbGxDb2x1bW5zKClcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLWFuZ2xlLWV4cGFuZC5zdmcnXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgPjwvc3BhblxuICAgICAgPkF1dG9zaXplIEFsbCBDb2x1bW5zXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEdyb3VwIEJ5IC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwic2hvd1Jvd3NHcm91cGluZ1wiXG4gICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cImdyb3VwQnkoYWN0aXZlQ29sKVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZS1zb3J0aW5nXT1cIiFjb2wuaXNfZ3JvdXBhYmxlXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2RpYWdyYW0tMy5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgR3JvdXAgYnkge3sgY29sLmhlYWRlciB9fVxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaG9vc2UgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dDaG9zZUNvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJjaG9vc2VDb2x1bW5zKClcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvdWktY2hlY2tzLWdyaWQuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIENob29zZSBDb2x1bW5zXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJlc2V0IENvbHVtbnMgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93UmVzZXRDb2x1bW5zXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwicmVzZXRDb2x1bW5zKClcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctY291bnRlcmNsb2Nrd2lzZS5zdmcnXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgPjwvc3BhblxuICAgICAgPlJlc2V0IENvbHVtbnNcbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cImlzVGhyZWVEb3RzRmlsdGVyT3BlbiAmJiBjb2w/LmlzX3NlYXJjaF9hYmxlXCJcbiAgICBjbGFzcz1cInRocmVlLWRvdHMtY29sLW1lbnUgcG9zaXRpb24tcmVsYXRpdmVcIlxuICAgIFtzdHlsZS5yaWdodC5weF09XCJnZXREeW5hbWljUmlnaHQoY29sLCBzZWN0aW9uLCBjb2x1bW5JbmRleCwgY2hpbGRDb2xJbmRleClcIlxuICAgIFtjbGFzcy52aXN1YWxseS1oaWRkZW5dPVwiaXNNZW51ZUhpZGRlblwiXG4gID5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8uZmlsdGVyUmVuZGVyZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW1lbnUtY29udGFpbmVyIGZpbHRlci1tZW51IHAtMFwiIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiZHJvcGRvd25zQmFja2dyb3VuZENvbG9yXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgIFtjZWxsUmVuZGVySW5pdF09XCJjb2wuZmlsdGVyUmVuZGVyZXJcIlxuICAgICAgICAgICAgICBbY29sRGF0YV09XCJjb2xcIlxuICAgICAgICAgICAgICAoY2VsbEV2ZW50KT1cIm9uQ2VsbEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICBbY29udGV4dF09XCJncmlkQ29udGV4dFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2w/LmZpbHRlclJlbmRlcmVyXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNZW51OyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEZpbHRlciBNZW51ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyTWVudSBsZXQtY29sPVwiY29sXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZpbHRlci1tZW51LWNvbnRhaW5lciBmaWx0ZXItbWVudVwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICpuZ0lmPVwiIWNvbD8uZmlsdGVyUmVuZGVyZXJcIlxuICA+XG4gICAgPCEtLSBEcm9wZG93biBUeXBlIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09PSAnYXJyYXknOyBlbHNlIHRleHRGaWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItZHJvcGRvd24tc2VjdGlvbiBwLTFcIj5cblxuICAgIDwhLS0gU2VhcmNoIGlucHV0IC0tPlxuICAgIDxpbnB1dFxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgWyhuZ01vZGVsKV09XCJhZGRGaWx0ZXJDb2x1bW5JbnB1dFwiXG4gICAgLz5cblxuICAgIDwhLS0gRmlsdGVyICsgUmVzdWx0IEhhbmRsaW5nIC0tPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIChzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgfCBmaWx0ZXIgOiBhZGRGaWx0ZXJDb2x1bW5JbnB1dCA6ICd2YWx1ZScpIGFzIGZpbHRlcmVkT3B0aW9uc1xuICAgICAgXCJcbiAgICA+XG4gPCEtLSBDaGVjayBpZiBjb2x1bW5fZHJvcGRvd25fdmFsdWUgZXhpc3RzIGFuZCBoYXMgZGF0YSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aDsgZWxzZSBub0Ryb3Bkb3duRGF0YVwiPlxuICAgICAgPCEtLSBEQVRBIEZPVU5EIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7IGVsc2Ugbm9EYXRhRm91bmRcIj5cblxuICAgICAgICA8IS0tIFNlbGVjdCBBbGwgKG9ubHkgd2hlbiBkYXRhIGV4aXN0cykgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTEgbXQtMiBtcy0xIHNlbGVjdC1hbGwtZmlsdGVyXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA/PyAwKSA9PT1cbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoID8/IDApXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIlxuICAgICAgICAgICAgICAgIChjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHM/LnNpemUgPz8gMCkgPiAwICYmXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA/PyAwKSA8XG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCA/PyAwKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbFNpZGVGaWx0ZXJzKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInNlbGVjdEFsbF97eyBjb2wuZmllbGQgfX1cIj5cbiAgICAgICAgICAgIFNlbGVjdCBBbGxcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFZpcnR1YWwgU2Nyb2xsIC0tPlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgaXRlbVNpemU9XCIzMlwiXG4gICAgICAgICAgY2xhc3M9XCJmaWx0ZXItdmlld3BvcnRcIlxuICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMjBweFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtcy0xXCJcbiAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtpZF09XCJvcHRpb24/LmlkID8/IG9wdGlvbj8uX2lkID8/IG9wdGlvblwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5oYXMob3B0aW9uPy5pZCA/PyBvcHRpb24/Ll9pZCA/PyBvcHRpb24pXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0aW9uSW5GaWx0ZXIob3B0aW9uKVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LXNlbWlib2xkXCJcbiAgICAgICAgICAgICAgW2Zvcl09XCJvcHRpb24/LmlkID8/IG9wdGlvbj8uX2lkID8/IG9wdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IChvcHRpb24/LnZhbHVlID8/IG9wdGlvbj8ubmFtZSA/PyBvcHRpb24pIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gTk8gREFUQSBGT1VORCAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhRm91bmQ+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtbXV0ZWQgbXQtMlwiXG4gICAgICAgICAgKm5nSWY9XCJhZGRGaWx0ZXJDb2x1bW5JbnB1dFwiXG4gICAgICAgID5cbiAgICAgICAgICBObyBSZWNvcmQgRm91bmRcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gTk8gRFJPUERPV04gREFUQSBBVkFJTEFCTEUgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Ecm9wZG93bkRhdGE+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtbXV0ZWQgbXQtMyBtYi0zXCI+XG4gICAgICAgICAgICAgTm8gUmVjb3JkIEZvdW5kXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cblxuICAgIDwhLS0gVGV4dCBGaWx0ZXIgU2VjdGlvbiAtLT5cbiAgICA8bmctdGVtcGxhdGUgI3RleHRGaWx0ZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXRleHQtc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBjdXN0b20tc2VsZWN0XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RDb25kaXRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBbdHlwZV09XCJjb2w/LnR5cGUgPT0gJ3N0cmluZycgPyAndGV4dCcgOiBjb2w/LnR5cGVcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0zXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlZhbHVlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpcnN0VmFsdWVcIlxuICAgICAgICAgICNmaWx0ZXJNZW51ZVRleHRjaElucHV0XG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0zIGQtZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBtLTAgY29sLTQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBmaWx0ZXItcmFkaW8taW5wdXRzXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhbmRcIlxuICAgICAgICAgICAgICBpZD1cImFuZF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNkci5kZXRlY3RDaGFuZ2VzKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5BTkQ8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm9yXCJcbiAgICAgICAgICAgICAgaWQ9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImNkci5kZXRlY3RDaGFuZ2VzKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwib3Jfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPk9SPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBtLTAgY29sLTQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBmaWx0ZXItcmFkaW8taW5wdXRzXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJub25lXCJcbiAgICAgICAgICAgICAgaWQ9XCJub25lX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJub25lX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5Ob25lPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBAc2xpZGVUb2dnbGUgKm5nSWY9XCJmaXJzdFZhbHVlICYmIGNvbmRpdGlvbiAhPSAnbm9uZSdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gY3VzdG9tLXNlbGVjdFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2Vjb25kQ29uZGl0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3R5cGVdPVwiY29sPy50eXBlID09ICdzdHJpbmcnID8gJ3RleHQnIDogY29sPy50eXBlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0zXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2Vjb25kIFZhbHVlXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2Vjb25kVmFsdWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gQWN0aW9ucyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIG10LTJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMHB4XCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICA+XG4gICAgICAgIEFwcGx5XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMwcHhcIlxuICAgICAgICAoY2xpY2spPVwicmVzZXRTaWRlRmlsdGVyKGNvbClcIlxuICAgICAgPlxuICAgICAgICBSZXNldFxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBTaWRlIE1lbnVlIC0tPlxuXG48IS0tIENvbHVtbiBQYW5uZWwgLyBQaXZvdCBNb2RlIC8gU2VhcmNoaW5nIC0tPlxuXG48bmctdGVtcGxhdGUgI2NvbHVtblBhbm5lbD5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbi1wYW5lbC1oZWFkZXJcIj5cbiAgICA8IS0tIFBpdm90IFRvZ2dsZSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yIHBpdm90LW1vZGUgcHgtNSBtcy0yIGQtbm9uZVwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJwaXZvdFRvZ2dsZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicGl2b3RNb2RlXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwicGl2b3RUb2dnbGVcIj5QaXZvdCBNb2RlPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VsZWN0IEFsbCAmIFNlYXJjaCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yIHB4LTMgbXQtM1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIiAqbmdJZj1cInNob3dDb2x1bW5zR3JvdXBpbmdcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIGFjY29yZGlvblN0YXRlID09PSAnYWxsJ1xuICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tZG93bi5zdmcnXG4gICAgICAgICAgICAgIDogYWNjb3JkaW9uU3RhdGUgPT09ICdzb21lJ1xuICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rhc2guc3ZnJ1xuICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbEFjY29yZGlvbnMoKVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxuICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKVwiXG4gICAgICAvPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1ucy4uLlwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uU2VhcmNoXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNlcGFyYXRvciAtLT5cbiAgICA8aHIgY2xhc3M9XCJteS0yXCIgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFJpZ2h0IENvbHVtbnMgTWVudWUgLS0+XG5cbjwhLS0gQ29sdW1uIFBhbmVsIEl0ZW0gVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2NvbHVtblBhbmVsSXRlbSBsZXQtY29sPVwiY29sXCI+XG4gIDwhLS0gR3JvdXAgQ29sdW1uIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNoaWxkcmVuPy5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWdyb3VwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLnJvdGF0ZV09XCJjb2wuZXhwYW5kZWRcIlxuICAgICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWQgPSAhY29sLmV4cGFuZGVkXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXG4gICAgICAgIFtpZF09XCInZ3JvdXBfJyArIGNvbC5oZWFkZXJcIlxuICAgICAgICBbY2hlY2tlZF09XCJpc0NvbHVtblZpc2libGUoY29sKVwiXG4gICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlR3JvdXBWaXNpYmlsaXR5KGNvbClcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZ3JpZC0zeDItZ2FwLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIHctMTAwXCJcbiAgICAgICAgW2Zvcl09XCInZ3JvdXBfJyArIGNvbC5oZWFkZXJcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJjb2wuZXhwYW5kZWRcIiBjbGFzcz1cInBzLTRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblBhbmVsSXRlbTsgY29udGV4dDogeyBjb2w6IGNoaWxkIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBMZWFmIENvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2wuY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiIHN0eWxlPVwid2lkdGg6IDEuNXJlbVwiPjwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiY29sLmlzX3Zpc2libGVcIlxuICAgICAgICBbaWRdPVwiJ2NvbF8nICsgY29sLmZpZWxkXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvblNpZGVNZW51Q29sdW1uc1Zpc2liaWxpdHlDaGFuZ2UoKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlkLTN4Mi1nYXAuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBbZm9yXT1cIidjb2xfJyArIGNvbC5maWVsZFwiXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBDb2x1bW5zIFNpZGUgRmlsdGVyIC0tPlxuPG5nLXRlbXBsYXRlICNzaWRlRmlsdGVycz5cbiAgPGRpdiBjbGFzcz1cInB5LTMgcHgtMiBwZS0zIGgtMTAwXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIiAqbmdJZj1cInNob3dDb2x1bW5zR3JvdXBpbmdcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIGZpbHRlckFjY29yZGlvblN0YXRlID09PSAnYWxsJ1xuICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tZG93bi5zdmcnXG4gICAgICAgICAgICAgIDogZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdzb21lJ1xuICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rhc2guc3ZnJ1xuICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbEZpbHRlckFjY29yZGlvbnMoKVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uU2VhcmNoXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJvdmVyZmxvdy1hdXRvIHNpZGUtZmlsdGVyLWNvbHVtbnMtd3JhcHBlclwiXG4gICAgICBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gNzBweCk7IHNjcm9sbGJhci13aWR0aDogdGhpblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgY29sIG9mIGNvbHVtbnMgfCBmaWx0ZXIgOiBjb2x1bW5TZWFyY2ggOiAnaGVhZGVyJztcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyUGFubmVsSXRlbTsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJQYW5uZWxJdGVtIGxldC1jb2w9XCJjb2xcIj5cbiAgPCEtLSBHcm91cCBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY29sdW1uLWdyb3VwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiXG4gICAgICAqbmdJZj1cImNvbD8udHlwZSAhPT0gJ2ltYWdlJ1wiXG4gICAgPlxuICAgICAgPCEtLSBDaGV2cm9uIHRvZ2dsZSAtLT5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzcy5yb3RhdGVdPVwiY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gR3JvdXAgbGFiZWwgdG9nZ2xlIC0tPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCB0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICA+e3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBtcy0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiY29sPy5xdWVyeT8uX2lkcz8ubGVuZ3RoIHx8IGNvbD8ucXVlcnk/Ll9maXJzdF92YWx1ZVwiXG4gICAgICAgICAgICA+Kjwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2hpbGRyZW4gY29sdW1ucyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29sLmV4cGFuZGVkRmlsdGVyXCIgY2xhc3M9XCJwcy00XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJQYW5uZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY2hpbGQgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIExlYWYgQ29sdW1uIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiICpuZ0lmPVwiY29sPy50eXBlICE9PSAnaW1hZ2UnXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cIm1lLTIgZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCJcbiAgICAgICAgKGNsaWNrKT1cImNvbC5leHBhbmRlZEZpbHRlciA9ICFjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3Mucm90YXRlXT1cImNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCB3LTEwMFwiXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgKGNsaWNrKT1cImNvbC5leHBhbmRlZEZpbHRlciA9ICFjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGUgZnctYm9sZFwiPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTaG93IGZpbHRlciB3aGVuIGV4cGFuZGVkIC0tPlxuICAgIDxkaXYgW0BzbGlkZVRvZ2dsZV0gKm5nSWY9XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIiBjbGFzcz1cInBzLTQgcGUtM1wiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGVOZXN0ZWRGaWx0ZXI7IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBTaWRlIE5lc3RlZCBGaWx0ZXJzIC0tPlxuPG5nLXRlbXBsYXRlICNzaWRlTmVzdGVkRmlsdGVyIGxldC1jb2w9XCJjb2xcIj5cbiAgPGRpdiBjbGFzcz1cIlwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT0gJ2FycmF5JzsgZWxzZSB0ZXh0RmlsdGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xXCI+XG5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0yXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaWRlTmVzdGVkRmlsdGVyU2VhcmNoXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChjb2w/LmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgICAgICB8IGZpbHRlciA6IHNpZGVOZXN0ZWRGaWx0ZXJTZWFyY2ggOiAndmFsdWUnKSBhcyBmaWx0ZXJlZE9wdGlvbnNcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7IGVsc2Ugbm9EYXRhRm91bmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1iLTEgbXMtMSBzZWxlY3QtYWxsLWZpbHRlclwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgICBjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aCA9PSBjb2w/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbFNpZGVGaWx0ZXJzKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCIoY29sLnF1ZXJ5Py5faWRzPy5sZW5ndGggIT09IGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggJiYgY29sLnF1ZXJ5Py5faWRzPy5sZW5ndGgpXCJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiPlxuICAgICAgICAgICAgICAgIFNlbGVjdCBBbGxcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAgICAgICBpdGVtU2l6ZT1cIjMyXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi12aWV3cG9ydFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMjBweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtcy0xXCJcbiAgICAgICAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wucXVlcnk/Ll9pZHM/LmluY2x1ZGVzKG9wdGlvbj8uX2lkIHx8IG9wdGlvbj8uaWQgfHwgb3B0aW9uKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25PcHRpb25Ub2dnbGUoY29sLCBvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwib3B0aW9uX3t7IGNvbC5maWVsZCB9fV97e1xuICAgICAgICAgICAgICAgICAgICBvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvblxuICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbZm9yXT1cIlxuICAgICAgICAgICAgICAgICAgICAnb3B0aW9uXycgK1xuICAgICAgICAgICAgICAgICAgICBjb2wuZmllbGQgK1xuICAgICAgICAgICAgICAgICAgICAnXycgK1xuICAgICAgICAgICAgICAgICAgICAob3B0aW9uPy5pZCB8fCBvcHRpb24/Ll9pZCB8fCBvcHRpb24pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IChvcHRpb24udmFsdWUgfHwgb3B0aW9uKSB8IHRpdGxlY2FzZSB9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vRGF0YUZvdW5kPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtbXV0ZWQgbXQtMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwic2lkZU5lc3RlZEZpbHRlclNlYXJjaFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIE5vIFJlY29yZCBGb3VuZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgIDwhLS0gVGV4dCBGaWx0ZXIgU2VjdGlvbiAtLT5cbiAgICA8bmctdGVtcGxhdGUgI3RleHRGaWx0ZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXRleHQtc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5xdWVyeS5maXJzdF9jb25kaXRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnZGF0ZScgfHwgY29sPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPkZWXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGVzc190aGVuX2VxdWFsXCI+bGVzcyB0aGVuIEVxdWFsIHRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+RlZcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBbdHlwZV09XCJjb2w/LnR5cGUgPT0gJ2RhdGUnID8gJ2RhdGUnIDogKGNvbD8udHlwZSA9PSAnbnVtYmVyJyA/ICdudW1iZXInOiAndGV4dCcpXCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWItM1wiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJWYWx1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5IS5maXJzdF92YWx1ZVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncm91cCBtYi0zIGQtZmxleCBmbGV4LXJvdyBtdXRlZFwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwiYW5kXCJcbiAgICAgICAgICAgICAgaWQ9XCJhbmRfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImFuZF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+QU5EPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBtLTAgY29sLTQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBmaWx0ZXItcmFkaW8taW5wdXRzXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sIS5xdWVyeS5jb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm9yXCJcbiAgICAgICAgICAgICAgaWQ9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwib3Jfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPk9SPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBtLTAgY29sLTQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBmaWx0ZXItcmFkaW8taW5wdXRzXCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sIS5xdWVyeS5jb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBpZD1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJubm9uZW0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCJcbiAgICAgICAgICAgICAgZm9yPVwibm9uZV97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+Tm9uZTwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlICYmIGNvbD8ucXVlcnk/LmNvbmRpdGlvbiAhPT0gJ25vbmUnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sIS5xdWVyeS5zZWNvbmRfY29uZGl0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnZGF0ZScgfHwgY29sPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGVzc190aGVuX2VxdWFsXCI+bGVzcyB0aGVuIEVxdWFsIHRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnZGF0ZScgPyAnZGF0ZScgOiAndGV4dCdcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWNvbmQgVmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LnNlY29uZF92YWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwiaGVpZ2h0OiAyMnB4O1wiIChjbGljayk9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIj5hcHBseTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDIycHg7XCIgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiPnJlc2V0PC9kaXY+XG5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIGJvcmRlci10b3BcIlxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IDM4cHhcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzBweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tbGlnaHQgYm9yZGVyIHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xIGJ0bi1saWdodFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZVNpZGVGaWx0ZXIoY29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPkNsZWFyPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDMwcHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMVwiXG4gICAgICAgIChjbGljayk9XCJhcHBseVNpZGVGaWx0ZXIoY29sKVwiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoY29sPy5xdWVyeS5jb25kaXRpb24gIT09ICdub25lJyAmJiAhY29sPy5xdWVyeT8uc2Vjb25kX3ZhbHVlKVwiXG4gICAgICAgIFtjbGFzcy5wZS1ub25lXT1cIihjb2whPy5xdWVyeS5jb25kaXRpb24gIT09ICdub25lJyAmJiAhY29sPy5xdWVyeT8uc2Vjb25kX3ZhbHVlKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogLTFweFwiPkFwcGx5PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBDZW50ciBPdmVybGF5IGZvciBzaG93aW5nIHRoZSBjaG9zZSBjb2x1bW5zIC0tPlxuXG48ZGl2ICpuZ0lmPVwic2hvd0NvbHVtblBhbmVsXCIgY2xhc3M9XCJjdXN0b20tbW9kYWwtb3ZlcmxheVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjdXN0b20tbW9kYWwtY29udGVudFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1vZGFsQ29sdW1uUGFubmVsXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gVGhlIGV4aXN0aW5nIG5nLXRlbXBsYXRlIHlvdSBwcm92aWRlZCAtLT5cbjxuZy10ZW1wbGF0ZSAjbW9kYWxDb2x1bW5QYW5uZWw+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4tcGFuZWwtaGVhZGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHB4LTIgcHMtMyByb3VuZGVkLXRvcC0yIG1vZGEtaGVhZGVyXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiNDhcIlxuICAgID5cbiAgICAgIENob29zZSBDb2x1bW5zXG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXJcIiAoY2xpY2spPVwiY2xvc2VNb2RhbENvbHVtblBhbmVsKClcIlxuICAgICAgICA+PHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3guc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8aHIgY2xhc3M9XCJteS0wXCIgLz5cbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtMiBwZS0zXCIgW3N0eWxlLmhlaWdodC5weF09XCI0OFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICBhY2NvcmRpb25TdGF0ZSA9PT0gJ2FsbCdcbiAgICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tZG93bi5zdmcnXG4gICAgICAgICAgICAgICAgOiBhY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgICAgPyBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9kYXNoLnN2ZydcbiAgICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBbGxBY2NvcmRpb25zKClcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiYWxsQ29sdW1uc1NlbGVjdGVkKClcIlxuICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbHVtbnMuLi5cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY2hvc2VDb2x1bW5zU2VhcmNoXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aHIgY2xhc3M9XCJtdC0wIG1iLTFcIiAvPlxuICAgICAgPGRpdiBjbGFzcz1cInB4LTIgb3ZlcmxheS1zY3JvbGxhYmxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IGNob3NlQ29sdW1uc1NlYXJjaCA6ICdoZWFkZXInO1xuICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFuZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NpZGVNZW51Um93R3JvdXBzPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGgtMTAwIGQtbm9uZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJweC0zIGgtMTAwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIG1iLTRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2p1c3RpZnkuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4+Um93IEdyb3Vwczwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImgtNTBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicHgtMyBweS0yIGJvcmRlci1kYXNoZWQgaC0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTRweFwiXG4gICAgICAgID5cbiAgICAgICAgICBEcmFnIGhlcmUgdG8gc2V0IHJvdyBHcm91cHNcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxociBjbGFzcz1cIm10LTRcIiAvPlxuXG4gICAgPGRpdiBjbGFzcz1cInB4LTMgaC0xMDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbWItNFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvanVzdGlmeS5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5WYWx1ZXM8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoLTUwIGQtZmxleFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYm9yZGVyLWRhc2hlZCBoLTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIERyYWcgaGVyZSBhZ2dyZWdhdGVcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tIERyYWcgUHJldmlldyBUZW1wbGF0ZSAtLT5cbjwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48bmctdGVtcGxhdGUgI2RyYWdQcmV2aWV3IGxldC1jb2w+XG4gIDxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgIDxkaXY+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIERyYWcgUGxhY2Vob2xkZXIgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGVcbiAgI2RyYWdQbGFjZWhvbGRlclxuICBsZXQtY29sXG4gIGxldC1pPVwiaW5kZXhcIlxuICBsZXQtc2VjdGlvbj1cInNlY3Rpb25cIlxuICBsZXQtZHJhZ2dpbmdJbkdyb3VwQXJlYT1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuPlxuICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICA8ZGl2XG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sLCBpbmRleDogaSwgc2VjdGlvbjogc2VjdGlvbiB9XG4gICAgICBcIlxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhXCI+TmV3IFBsYWNlaG9sZGVyPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRvcCBHcm91cCBSb3cgUGxhY2Vob2xkZXIgLS0+XG48bmctdGVtcGxhdGUgI3RvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXIgbGV0LWNvbCBsZXQtc2hvd0NoZXZyb249XCJzaG93Q2hldnJvblwiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgdG9wLXJvdy1ncm91cGluZy1wbGFjZWhvbGRlclwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInRvcEdyb3VwZWRCYWRnZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlkLTN4Mi1nYXAuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuXG4gICAgICAgIChjbGljayk9XCJ1bmdyb3VwQ29sdW1uKGNvbClcIlxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3guc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInNob3dDaGV2cm9uXCIgc3R5bGU9XCJvcGFjaXR5OiAwLjY7IGZvbnQtc2l6ZTogMTRweFwiPlxuICAgIDxzcGFuXG4gICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1wiXG4gICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgID48L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNjaGlsZEhlYWRlclBsYWNlaG9sZGVyXG4gIGxldC1jb2xcbiAgbGV0LXBpbm5lZFJpZ2h0PVwicGlubmVkUmlnaHRcIlxuICBsZXQtaT1cImluZGV4XCJcbiAgbGV0LXNlY3Rpb25zPVwic2VjdGlvbnNcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJoZWFkZXItY2VsbCBvbmUtcm93LWhlYWRlci1jZWxsc1wiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiaGVhZGVyRm9udFdlaWdodFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGgtMTAwIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgaC0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgW3RpdGxlXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgIFtjbGFzcy53LTEwMF09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleFwiXG4gICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgc3R5bGU9XCJncmlkLXJvdzogM1wiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImhlYWRlci1jZWxsIGZpbHRlci1jZWxsXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5maWx0ZXJWYWx1ZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJjb2w/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjb2w/LnR5cGUgPT0gJ2FycmF5J1wiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZC1zZWFyY2gtaW5wdXRdPVwiXG4gICAgICAgICAgY29sPy50eXBlID09ICdkcm9wZG93bicgfHwgY29sPy50eXBlID09ICdpbWFnZScgfHwgY29sPy50eXBlID09ICdhcnJheSdcbiAgICAgICAgXCJcbiAgICAgIC8+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXJcIlxuICAgICAgICAoY2xpY2spPVwiYWN0aXZlRmlsdGVyQ2VsbCA9IGNvbDsgYWN0aXZlQ29sID0gbnVsbFwiXG4gICAgICAgID48c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgPjwvc3Bhbj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVGaWx0ZXJDZWxsID09PSBjb2xcIlxuICAgICAgICBzdHlsZT1cInRvcDogMTAwJTsgcmlnaHQ6IDA7IHotaW5kZXg6IDEwOyBsZWZ0OiAwXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYmxlTGF5b3V0PlxuICA8ZGl2XG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJwLTMgc2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dFwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMzIwcHhcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBwLTBcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtMTBweFwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGg2IGNsYXNzPVwibWItMCBtcy0yXCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwXCI+VGFibGUgTGF5b3V0PC9oNj5cbiAgICA8L2Rpdj5cbiAgICA8aHIgY2xhc3M9XCJteS0yXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwidy0xMDAgbWItMyBkLWZsZXhcIiByb2xlPVwiZ3JvdXBcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBjbGFzcz1cImJ0bi1jaGVjayBsYXlvdXQtYnV0dG9uLWNoZWNrXCJcbiAgICAgICAgbmFtZT1cImxheW91dFNpemVcIlxuICAgICAgICBpZD1cInNtYWxsXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VUYWJsZUxheW91dCgkZXZlbnQsICdzbWFsbCcpXCJcbiAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnc21hbGwnXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBsYXlvdXQtYnV0dG9uXCJcbiAgICAgICAgZm9yPVwic21hbGxcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgY29sb3I6IHNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ3NtYWxsJyA/ICcjMDAwJyA6ICcjNzI3MjcyJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctYm94IGJvcmRlciBtYi0xXCIgc3R5bGU9XCJoZWlnaHQ6IDhweFwiPjwvZGl2PlxuICAgICAgICBTbWFsbFxuICAgICAgPC9sYWJlbD5cblxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrIGxheW91dC1idXR0b24tY2hlY2tcIlxuICAgICAgICBuYW1lPVwibGF5b3V0U2l6ZVwiXG4gICAgICAgIGlkPVwibWVkaXVtXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnbWVkaXVtJ1wiXG4gICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVGFibGVMYXlvdXQoJGV2ZW50LCAnbWVkaXVtJylcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImJvcmRlciBteC0zIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgbGF5b3V0LWJ1dHRvblwiXG4gICAgICAgIGZvcj1cIm1lZGl1bVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnbWVkaXVtJyA/ICcjMDAwJyA6ICcjNzI3MjcyJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctYm94IGJvcmRlciBtYi0xXCIgc3R5bGU9XCJoZWlnaHQ6IDEycHhcIj48L2Rpdj5cbiAgICAgICAgTWVkaXVtXG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJidG4tY2hlY2sgbGF5b3V0LWJ1dHRvbi1jaGVja1wiXG4gICAgICAgIG5hbWU9XCJsYXlvdXRTaXplXCJcbiAgICAgICAgaWQ9XCJsYXJnZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlVGFibGVMYXlvdXQoJGV2ZW50LCAnbGFyZ2UnKVwiXG4gICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ2xhcmdlJ1wiXG4gICAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgbGF5b3V0LWJ1dHRvblwiXG4gICAgICAgIGZvcj1cImxhcmdlXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdsYXJnZScgPyAnIzAwMCcgOiAnIzcyNzI3MidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJveCBib3JkZXIgbWItMVwiIHN0eWxlPVwiaGVpZ2h0OiAxNnB4XCI+PC9kaXY+XG4gICAgICAgIExhcmdlXG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPGhyIGNsYXNzPVwibXktMlwiIC8+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4+U2hvdyBzZXBhcmF0b3JzPC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInNlcGFyYXRvcnNcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9udENoYW5nZSgpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8c3Bhbj5Sb3cgc2hhZGluZzwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicm93U2hhZGluZ0VuYWJsZWRcIlxuICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2hhZGluZygpXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGlkPVwicm93U2hhZGluZ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuPlNob3cgU2lkZSBNZW51PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93U2lkZU1lbnVcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgaWQ9XCJyb3dTaGFkaW5nXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgIDxzcGFuPlNob3cgRmlsdGVyIFJvdzwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2hvd0ZpbHRlclJvd1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInJvd1NoYWRpbmdcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFibGVQcmVzZXQ+XG4gIDxkaXZcbiAgICAqbmdJZj1cImFjdGl2ZVN1YkJ1dHRvbiAhPT0gJ3NhdmUtcHJlc2V0J1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJwLTMgc2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dFwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHhcIlxuICA+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEwcHhcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGg2IGNsYXNzPVwibWItMCBtcy0yXCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwXCI+VGFibGUgUHJlc2V0czwvaDY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gU2F2ZSBQcmVzZXQgQnV0dG9uIHdpdGggRHJvcGRvd24gLS0+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwidGV4dC1kZWNvcmF0aW9uLW5vbmUgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBpZD1cInNhdmVQcmVzZXREcm9wZG93blwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlU3ViQWN0aW9ucygnc2F2ZS1wcmVzZXQnKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/IFwiU2F2ZSBwcmVzZXRcIiA6IFwiVXBkYXRlIFByZXNldFwiIH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFByZXNldFRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQcmVzZXQgTGlzdCAtLT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICB0YWJsZVZpZXcgfCBmaWx0ZXIgOiBzZWFyY2hUZXh0UHJlc2V0VGFibGUgOiAnbmFtZScgYXMgZmlsdGVyZWRMaXN0XG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gSWYgZmlsdGVyZWRMaXN0IGV4aXN0cyBhbmQgbm9uZSBpcyBkZWZhdWx0IC0+IHNob3cgZmFsbGJhY2sgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiIHBiLTUgb3ZlcmZsb3ctYXV0b1wiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC0gMjUwXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgIGNsZWFyQWxsRmlsdGVycyh0cnVlKTtcbiAgICAgICAgICAgIG9wZW5JbmRleCA9IG51bGw7XG4gICAgICAgICAgICB0ZW1wX3N0YXRlLmlkID0gJyc7XG4gICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICAgICAgICAgIGN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSA9IG51bGxcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+RGVmYXVsdCBWaWV3PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYXJrXCI+Q3JlYXRlZCBieSBzeXN0ZW08L3NtYWxsPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiF0YWJsZUZpbHRlclZpZXdJZCAmJiAhaGFzQW55RGVmYXVsdFZpZXcoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtcHJpbWFyeSBtcy0yXCJcbiAgICAgICAgICAgID5EZWZhdWx0PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICAgIDwhLS0gPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIXRhYmxlRmlsdGVyVmlld0lkICYmICFoYXNBbnlEZWZhdWx0VmlldygpXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hlY2stYmx1ZS5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgPjwvc3Bhbj4gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93biBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiXG4gICAgICAgICAgICAqbmdJZj1cInRhYmxlRmlsdGVyVmlld0lkXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGhlIGxpc3Q6IHJlbmRlciBlYWNoIHRhYmxlIGZyb20gZmlsdGVyZWRMaXN0IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIlxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHRhYmxlIG9mIGZpbHRlcmVkTGlzdDtcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5VGFibGVcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBJdGVtIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuSW5kZXggPSBudWxsOyBhY3RpdmVUb3BCdXR0b24gPSAnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0RmlsdGVyKHRhYmxlKTsgb3BlbkluZGV4ID0gbnVsbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgIHt7IHRhYmxlPy5uYW1lIH19XG4gICAgICAgICAgICAgICAgPCEtLSB7e3RhYmxlPy5pc190ZW1wfX0gLS0+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICh0YWJsZT8uaXNfdGVtcCAmJiAhdGVtcF9zdGF0ZS5pZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdGVtcF9zdGF0ZS5pZCA9PSB0YWJsZS5pZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZWNrLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZT8uaXNfZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtcHJpbWFyeSBtcy0yXCJcbiAgICAgICAgICAgICAgICAgID5EZWZhdWx0PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYXJrXCIgKm5nSWY9XCJ0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1wiIFt0aXRsZV09XCJ0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1wiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lcz8ubGVuZ3RoID4gMjVcbiAgICAgICAgICAgICAgPyAodGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXMgfCBzbGljZTowOjI1KSArICcuLi4nXG4gICAgICAgICAgICAgIDogdGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXNcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgKHt7IHRhYmxlPy5jb25maWc/LnRvdGFsQ291bnQgfX0pXG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFya1wiICpuZ0lmPVwiIXRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzXCI+e3sgdGFibGU/LmNyZWF0ZWRBdCB8IGRhdGUgOiBcIk1NTSBkLCB5XCIgfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZT8uaXNfZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZWNrLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cIiF0YWJsZT8uaXNfZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1pY29uIG11dGVkLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudShpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9ob3Jpem9udGFsLWRvdHMuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIG1lbnUgLS0+XG4gICAgICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wZW5JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duLW1lbnUgcG9zaXRpb24tZml4ZWQgdG9wLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5yaWdodC5weF09XCIndW5zZXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0V2lkdGggLSAyMDBcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogdW5zZXQ7IHJpZ2h0OiB1bnNldFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25QcmVzZXQodGFibGUsICdzZXRQcmVzZXQnKTsgdGVtcF9zdGF0ZS5pZCA9ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc3Rhci5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgU2V0IGFzIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm5vbmVcIiAqbmdJZj1cIiF0YWJsZS5jb25maXJtRGVsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSB0ZXh0LWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFibGUuY29uZmlybURlbGV0ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogLTRweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90cmFzaC1yZWQuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlLmNvbmZpcm1EZWxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlybS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMyBweS0yIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIDxiciAvPjxiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPuKAnHt7IHRhYmxlPy5uYW1lIH194oCdPC9iXG4gICAgICAgICAgICAgICAgICAgICAgICAgID4/XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlLmNvbmZpcm1EZWxldGUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvblByZXNldCh0YWJsZSwgJ2RlbGV0ZVByZXNldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIEl0ZW0gRW5kIEhlcmUgLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAqbmdJZj1cImFjdGl2ZVN1YkJ1dHRvbiA9PSAnc2F2ZS1wcmVzZXQnXCJcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcC0zIGJhZGdlIG10LTQgc2F2ZS1wcmVzZXQtZHJvcGRvd24gbXQtMVwiXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwic2F2ZVByZXNldERyb3Bkb3duXCJcbiAgICBzdHlsZT1cIm1pbi13aWR0aDogMjUwcHhcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImZ3LWJvbGQgZnMtMTRweCBtYi0yXCI+XG4gICAgICB7eyBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/IFwiU2F2ZSBwcmVzZXRcIiA6IFwiVXBkYXRlIFByZXNldFwiIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZzLTE0cHggbWItMlwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDIwcHhcIj5cbiAgICAgIFRoaXMgd2lsbCBzYXZlIHRoZSBjdXJyZW50IHRhYmxlIGFkanVzdG1lbnRzIGFzIGEgcHJlc2V0LlxuICAgIDwvZGl2PlxuICAgIDwhLS0gSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJwcmVzZXROYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIGZzLTEycHggZnctYm9sZFwiXG4gICAgICAgID5QcmVzZXQgTmFtZTwvbGFiZWxcbiAgICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjcHJlc2V0TmFtZUN0cmw9XCJuZ01vZGVsXCJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJlc2V0TmFtZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICBwcmVzZXROYW1lQ3RybC5pbnZhbGlkICYmXG4gICAgICAgICAgICAgIChwcmVzZXROYW1lQ3RybC5kaXJ0eSB8fCBwcmVzZXROYW1lQ3RybC50b3VjaGVkKVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBwcy0yXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHByZXNldCBuYW1lXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2hlY2tib3ggLS0+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMlwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJlc2V0RmlsdGVyXCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJzYXZlRmlsdGVyc1wiXG4gICAgICAvPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtdC0xXCIgZm9yPVwic2F2ZUZpbHRlcnNcIj5cbiAgICAgICAgU2F2ZSBhY3RpdmUgZmlsdGVyc1xuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2F2ZSBCdXR0b24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCIgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYm9yZGVyIHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBidG4tbGlnaHRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVBY3Rpb25zKCd0YWJsZS1wcmVzZXRzJylcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5DYW5jZWw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2Rpc2FibGVkXT1cImNsb3NlRHJvcGRvd24ucHJlc2V0LmxvYWRpbmdcIlxuICAgICAgICAoY2xpY2spPVwic2F2ZVByZXNldChwcmVzZXROYW1lQ3RybClcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIiAqbmdJZj1cImlzVGFibGVQcmVzZXROb3RDaGFuZ2VkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjbG9zZURyb3Bkb3duLnByZXNldC5sb2FkaW5nXCJcbiAgICAgICAgICAgID5TYXZlPC9uZy1jb250YWluZXJcbiAgICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsb3NlRHJvcGRvd24ucHJlc2V0LmxvYWRpbmdcIlxuICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIj48L3NwYW5cbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwXCIgKm5nSWY9XCIhaXNUYWJsZVByZXNldE5vdENoYW5nZWRcIlxuICAgICAgICAgID5VcGRhdGUgUHJlc2V0PC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2hvd0hpZGVDb2x1bW5zPlxuICA8ZGl2XG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJwLTMgc2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBkcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dFwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHhcIlxuICA+XG4gICAgPCEtLSBIZWFkZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEwcHhcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdzZXR0aW5nJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGg2IGNsYXNzPVwibWItMCBtcy0yXCIgc3R5bGU9XCJmb250LXdlaWdodDogNTAwXCI+Q29sdW1uczwvaDY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxhXG4gICAgICAgIChjbGljayk9XCJyZXNldENvbHVtbnMoKVwiXG4gICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSB0ZXh0LWRlY29yYXRpb24tbm9uZSBkLW5vbmVcIlxuICAgICAgICA+UmVzZXQ8L2FcbiAgICAgID5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdsb2JhbC1zZWFyY2hcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NlYXJjaC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cIm14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbHVtblwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ0b3BTaG93SGlkZUNvbHVtbnNcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBQcmVzZXQgTGlzdCAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICBzdHlsZT1cIm92ZXJmbG93OiBhdXRvOyBzY3JvbGxiYXItd2lkdGg6IHRoaW5cIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAyMjBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdXRlZC10ZXh0IHNob3ctaGlkZS10YWJsZS1sYWJlbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW5cIj5cbiAgICAgICAgU2hvdyBpbiB0YWJsZVxuICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBpZD1cImhpZGVfYWxsXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsQ29sdW1uc1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbENvbHVtbnNWaXNpYmlsaXR5KClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGRcIiBmb3I9XCJoaWRlX2FsbFwiPlxuICAgICAgICAgICAgICBTaG93L0hpZGUgQWxsIFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBJdGVtIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgY29sIG9mIGNvbHVtbnMgfCBmaWx0ZXIgOiB0b3BTaG93SGlkZUNvbHVtbnMgOiAnaGVhZGVyJztcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiY29sLmlzX3Zpc2libGVcIlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZ3JpcC12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1ncmFwIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYXAgZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIWNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlICYmICFjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbCwgZmFsc2UpXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ2aXNpYmxlQ29sdW1ucygpLmxlbmd0aCA8PSAyIHx8IGNvbD8uaXNfYWx3YXlzX3Zpc2libGVcIlxuICAgICAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwidmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggPD0gMiB8fCBjb2w/LmlzX2Fsd2F5c192aXNpYmxlXCJcbiAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTUwXT1cInZpc2libGVDb2x1bW5zKCkubGVuZ3RoIDw9IDIgfHwgY29sPy5pc19hbHdheXNfdmlzaWJsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUuc3ZnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8IGNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLnN2ZydcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gSXRlbSBFbmQgSGVyZSAtLT5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIlxuICAgICAgICAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW4gJiYgaGFzQW55SW5WaXNpYmxlQ29sdW1uXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm11dGVkLXRleHQgc2hvdy1oaWRlLXRhYmxlLWxhYmVsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICpuZ0lmPVwiaGFzQW55SW5WaXNpYmxlQ29sdW1uXCJcbiAgICAgID5cbiAgICAgICAgSGlkZSBpbiB0YWJsZVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGlkPVwic2hvd19hbGxcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBmdy1zZW1pYm9sZFwiIGZvcj1cInNob3dfYWxsXCI+XG4gICAgICAgICAgICAgIFNob3cvSGlkZSBBbGwgXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogdG9wU2hvd0hpZGVDb2x1bW5zIDogJ2hlYWRlcic7IHRyYWNrQnk6IHRyYWNrQnlGaWVsZFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pc192aXNpYmxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMVwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2w/LnBpbm5lZFwiXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlwLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBjdXJzb3ItZ3JhcFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBjdXJzb3ItZ3JhcFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShjb2wsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXllLWNyb3NzLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gSXRlbSBFbmQgSGVyZSAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlckNvbHVtbnMgbGV0LWNvbD1cImNvbHVtblwiPlxuICA8ZGl2XG4gICAgQHNsaWRlVG9nZ2xlXG4gICAgKm5nSWY9XCIhaXNGaWx0ZXJPcGVuICYmIGFjdGl2ZVRvcEJ1dHRvbiA9PSAnZmlsdGVyLWNvbHVtbnMnXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInNoYWRvdyBhY3Rpb25zLWRyb3Bkb3duIG10LTEgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0IGZpbHRlci1jb2x1bW5zXCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweDsgcmlnaHQ6IHVuc2V0OyBtYXgtd2lkdGg6IDIzMHB4XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTIgcHgtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbXgtMiBwb3NpdGlvbi1hYnNvbHV0ZSBpY29uXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieVwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJhZGRGaWx0ZXJDb2x1bW5JbnB1dFwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1MDBweCk7IG92ZXJmbG93OiBhdXRvXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IGFkZEZpbHRlckNvbHVtbklucHV0IDogJ2hlYWRlcic7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAoY2xpY2spPVwib3BlbkZpbHRlcihjb2wpXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgY29sLmlzX3Zpc2libGUgJiZcbiAgICAgICAgICAgICFjb2w/LnF1ZXJ5Py5maXJzdF92YWx1ZSAmJlxuICAgICAgICAgICAgIWNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aCAmJiBjb2w/LnR5cGUgIT09ICdpbWFnZScgJiYgY29sLmlzX3NlYXJjaF9hYmxlXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBib3JkZXItMCBweC0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogLTNweFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCI+XG4gICAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgIHwgdGl0bGVjYXNlICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRHJvcGRvd24gLS0+XG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cImlzRmlsdGVyT3BlbiAmJiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZHJvcGRvd24nIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdhcnJheSdcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwic2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXQgZmlsdGVyLWNvbHVtbnMgcGItMlwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjgwcHg7IHJpZ2h0OiB1bnNldDsgbWF4LXdpZHRoOiAyMzBweFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJweC0zIG15LTIgYm9yZGVyLWJlbG93IHB5LTEgcGItMiBtYi0zIGQtZmxleCBwcy0xXCI+XG4gICAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnZmlsdGVyLWNvbHVtbnMnKTsgaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2VcIlxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWxlZnQuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1jYXBpdGFsaXplXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIlxuICAgICAgPjwvc3BhblxuICAgICAgPjxiPnt7IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5oZWFkZXIgfCB0aXRsZWNhc2UgIH19PC9iPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYi0yIHB4LTNcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaCBwb3NpdGlvbi1yZWxhdGl2ZSBib3JkZXIgcm91bmRlZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBweC0yIGZpbHRlci1zZXJhY2gtaW5wdFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkIG9mIHNlbGVjdGVkRmlsdGVyT3B0aW9uc1wiXG4gICAgICAgICAgY2xhc3M9XCJiYWRnZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIG1lLTEgbWItMSB0b3Atcm93LWZpbHRlci1kcm9wZG93biB0ZXh0LWNhcGl0YWxpemVcIiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzZWxlY3RlZD8udmFsdWUgPyBzZWxlY3RlZC52YWx1ZSA6IHNlbGVjdGVkIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihzZWxlY3RlZClcIlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY3Jvc3MtcHJpbWFyeS5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBib3JkZXItMCBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0ZWRGaWx0ZXJPcHRpb25zPy5sZW5ndGggPyAnJyA6ICdGaWx0ZXIgYnknXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRGb3JGaWx0ZXJEcm9wRG93blwiXG4gICAgICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cImhhbmRsZUJhY2tzcGFjZSgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDYwMHB4KTsgb3ZlcmZsb3c6IGF1dG9cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IGNvbCBvZiBzZWxlY3RlZENvbHVtbkZvckZpbHRlci5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICAgIHwgZmlsdGVyIDogc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duIDogJ3ZhbHVlJztcbiAgICAgICAgICBsZXQgaSA9IGluZGV4XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBib3JkZXItMCBweC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIFtpZF09XCJpXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhjb2wuaWQgfHwgY29sLl9pZCB8fCBjb2wpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihjb2wpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LXNlbWlib2xkIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCIgW2Zvcl09XCJpXCI+XG4gICAgICAgICAgICAgIHt7IGNvbD8udmFsdWUgfHwgY29sPy5uYW1lIHx8IGNvbCB8IHRpdGxlY2FzZSAgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMiBweC0yIGJvcmRlci10b3BcIlxuICAgICAgc3R5bGU9XCJoZWlnaHQ6IDM4cHhcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVzZXRGaWx0ZXJDaGFuZ2VzKClcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj5DYW5jZWw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTFcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMnB4XCI+U2F2ZTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEZvciBUZXh0IGZpZWxkcyBhbmQgbnVtYmVyIGZpZWxkcy0tPlxuXG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cIlxuICAgICAgaXNGaWx0ZXJPcGVuICYmXG4gICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZycgfHxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnIHx8XG4gICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJylcbiAgICBcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwic2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXQgZmlsdGVyLWNvbHVtbnMgcGItMlwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMjEwcHg7IHJpZ2h0OiB1bnNldDsgbWF4LXdpZHRoOiAyMzBweFwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJjaGVja2JveGVzQmFja2dyb3VuZENvbG9yXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJweC0zIGJvcmRlci1iZWxvdyBweS0xIHBiLTIgZC1mbGV4IHBzLTFcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2ZpbHRlci1jb2x1bW5zJyk7IGlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+PGI+e3sgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmhlYWRlciB9fTwvYj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHBvc2l0aW9uLXJlbGF0aXZlIHAtMiB0ZXh0LWZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gY3VzdG9tLXNlbGVjdCBib3JkZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RDb25kaXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgZmlyc3QgdmFsdWVcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgIFt0eXBlXT1cIlxuICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgPyAndGV4dCdcbiAgICAgICAgICAgICAgOiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdFZhbHVlXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG15LTMgZC1mbGV4IGZsZXgtcm93XCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgY29sLTQgbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBpZD1cImxvZ2ljYWxBbmRcIlxuICAgICAgICAgICAgICBuYW1lPVwibG9naWNhbE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhbmRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJsb2dpY2FsQW5kXCJcbiAgICAgICAgICAgICAgPkFORDwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBjb2wtNCBtLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGlkPVwibG9naWNhbE9yXCJcbiAgICAgICAgICAgICAgbmFtZT1cImxvZ2ljYWxPcGVyYXRvclwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJsb2dpY2FsT3JcIj5PUjwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgY29sLTQgbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBpZD1cImxvZ2ljYWxOb25lXCJcbiAgICAgICAgICAgICAgbmFtZT1cImxvZ2ljYWxPcGVyYXRvclwiXG4gICAgICAgICAgICAgIHZhbHVlPVwibm9uZVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImxvZ2ljYWxOb25lXCJcbiAgICAgICAgICAgICAgPk5vbmU8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25kaXRpb24gIT09ICdub25lJyAmJiBmaXJzdFZhbHVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgbXQtM1wiPlxuICAgICAgICAgICAgPCEtLSBTZWNvbmQgY29uZGl0aW9uIHNlbGVjdCAtLT5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBib3JkZXJcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZENvbmRpdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgIDwhLS0gU2Vjb25kIHZhbHVlIGlucHV0IC0tPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFt0eXBlXT1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgICAgICAgICAgOiBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHNlY29uZCB2YWx1ZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlY29uZFZhbHVlXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIHB4LTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSAmJiAhZmlyc3RWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tbGlnaHQgYm9yZGVyIHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xIGJ0bi1saWdodFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlc2V0VGV4dEZpbHRlckNoYW5nZXMoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA9PT0gMCAmJiAhZmlyc3RWYWx1ZSkgfHwgKGNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFzZWNvbmRWYWx1ZSlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMVwiXG4gICAgICAgIChjbGljayk9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIj5BcHBseTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRWRpdCBkcm9wZG93biBoZXJlIC0tPlxuPG5nLXRlbXBsYXRlIGxldC1jb2w+XG4gIDxkaXYgY2xhc3M9XCJkcm9wLWRvd24tZWRpdFwiPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNmdWxsVGV4dFRlbXBsYXRlXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtY29sPVwiY29sXCJcbiAgbGV0LWlzQXJyYXk9XCJpc0FycmF5XCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZnVsbC10ZXh0LWJveFwiXG4gICAgKGRibGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAvIDJcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmcocm93LCBjb2wpXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWlzQXJyYXlcIlxuICAgICAgICBjbGFzcz1cImZ1bGwtdGV4dC1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyXCJcbiAgICAgICAgKGRibGNsaWNrKT1cIlxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlbmFibGVFZGl0KHJvdywgY29sLCB0cnVlKVxuICAgICAgICBcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICA+XG4gICAgICAgIHt7XG4gICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcbiAgICAgICAgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzQXJyYXlcIj5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiaSAhPT0gMFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBpdGVtPy5kZXBhcnRtZW50X25hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8ucm9sZU5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8uZnVsbF9uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgXCItXCJcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIChkYmxjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZW5hYmxlRWRpdChyb3csIGNvbCwgdHJ1ZSlcbiAgICAgICAgXCJcbiAgICAgICAgI3RleHRNb2RlbD1cIm5nTW9kZWxcIlxuICAgICAgICByb3dzPVwiNFwiXG4gICAgICAgICN0ZXh0QXJlYWRJbnB1dFxuICAgICAgICBbKG5nTW9kZWwpXT1cInJvd1tjb2wuZmllbGRdXCJcbiAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sLCB0ZXh0TW9kZWwpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidGV4dEFyZWFkSW5wdXQuYmx1cigpXCJcbiAgICAgICAgYXV0b2ZvY3VzXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdpcy1pbnZhbGlkJzogdGV4dE1vZGVsLmludmFsaWRcbiAgICAgICAgfVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgID48L3RleHRhcmVhPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEltYWdlUGxhY2Vob2xkZXIgbGV0LXJvdz1cInJvd1wiIGxldC1jb2w9XCJjb2xcIj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cInB4LTIgZC1mbGV4IHctMTAwIGNlbGwtY29udGVudCBpbWFnZS1wbGFjZWhvbGRlclwiXG4gICAgW3RpdGxlXT1cInJvdz8uZnVsbF9uYW1lIHx8IHJvdz8ubmFtZSB8fCAnTi9BJ1wiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICByb3c/Lmludm9pY2U/Lmludm9pY2VfaW1hZ2UgfHxcbiAgICAgICAgICByb3c/Lmludm9pY2VfaW1hZ2U7XG4gICAgICAgIGVsc2UgcGxhY2Vob2xkZXJcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cImZ1bGxzY3JlZW5JbWFnZSA9IHJvdz8ucHJvZmlsZV9waWN0dXJlcz8uWzRdPy5wYXRoIHx8XG4gICAgICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICAgIHJvdz8uYXNzZXRJbWFnZSB8fFxuICAgICAgICAgICAgcm93Py5pbnZvaWNlX2ltYWdlXCJcbiAgICAgICAgY2xhc3M9XCJwaWNcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgW2NsYXNzLmFzc2V0cy1waWNdPVwiZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgW3dpZHRoXT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICBbaGVpZ2h0XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICByb3c/LnByb2ZpbGVfcGljdHVyZXM/Lls0XT8ucGF0aCB8fFxuICAgICAgICAgICAgcm93Py5sb2dvIHx8XG4gICAgICAgICAgICByb3c/LmFzc2V0SW1hZ2UgfHxcbiAgICAgICAgICAgIHJvdz8uaW52b2ljZV9pbWFnZVxuICAgICAgICAgIFwiXG4gICAgICAgICAgYWx0PVwiaWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJvcHRpb24taWNvblwiXG4gICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAvPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gPGRpdlxuICAgICAgY2xhc3M9XCJmdWxsc2NyZWVuLW92ZXJsYXlcIlxuICAgICAgKm5nSWY9XCJmdWxsc2NyZWVuSW1hZ2VcIlxuICAgICAgKGNsaWNrKT1cImZ1bGxzY3JlZW5JbWFnZSA9IG51bGxcIlxuICAgID5cbiAgICAgIDxpbWcgW3NyY109XCJmdWxsc2NyZWVuSW1hZ2VcIiBjbGFzcz1cImZ1bGxzY3JlZW4taW1nXCIgLz5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxuICAgICAgPHNwYW5cbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0RHluYW1pY0NsYXNzKHJvdz8uZnVsbF9uYW1lIHx8IHJvdz8ubmFtZSlcIlxuICAgICAgICBjbGFzcz1cInBpYyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHJvdW5kZWQtY2lyY2xlXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJyb3dIZWlnaHQgLyAzXCJcbiAgICAgICAgW2NsYXNzLmFzc2V0cy1waWNdPVwiZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcIlxuICAgICAgPlxuICAgICAgICB7eyBnZXRJbml0aWFscyhyb3c/LmZ1bGxfbmFtZSkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFJpZ2h0IENsaWNrIE1lbnVlIC0tPlxuPGRpdlxuICBbY2xhc3MuaW52aXNpYmxlXT1cIiFwb3NpdGlvbmVkWWV0XCJcbiAgY2xhc3M9XCJjb250ZXh0LW1lbnUgcC0yXCJcbiAgKm5nSWY9XCJhY3Rpb25IaWRlICYmIGFjdGlvbnM/Lmxlbmd0aFwiXG4gIFtuZ1N0eWxlXT1cInsgJ3RvcC5weCc6IHlQb3MsICdsZWZ0LnB4JzogeFBvcyB9XCJcbiAgW2NsYXNzLnNob3ddPVwiaXNWaXNpYmxlXCJcbiAgYXBwZW5kVG89XCJib2R5XCJcbj5cbiAgPHVsPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCJcbiAgICAgIGNsYXNzPVwicm91bmRlZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGFjdGlvbilcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvJyArIGFjdGlvbiArICcuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIHJpZ2h0LWNsaWNrLW1lbnUtaWNvbnMgbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemUgZnctNTAwXCI+e3sgYWN0aW9uIH19PC9zcGFuPlxuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cblxuPCEtLSBEZXRhaWxzIFRvZ2dsZSBmcm9tIGJvdHRvbSAtLT5cblxuPG5nLXRlbXBsYXRlICNuZXN0ZWRUYWJsZVRlbXBsYXRlIGxldC1yb3c+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm5lc3RlZC10YWJsZSB0YWJsZSB0YWJsZS1zbSB3LTEwMCBtYi0wIGNlbnRlci1uZXN0ZWQtdGFibGUgdy0xMDBcIlxuICAgIHN0eWxlPVwidGFibGUtbGF5b3V0OiBmaXhlZCAhaW1wb3J0YW50XCJcbiAgICAjbmVzdGVkVGFibGVDb250YWluZXJcbiAgPlxuICAgIDx0aGVhZFxuICAgICAgI25lc3RlZEhlYWRlclxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cInJvdz8uZGV0YWlsLmNvbHVtbnNcIlxuICAgICAgICBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcENvbHVtbigkZXZlbnQsIHJvdylcIlxuICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwib25OZXN0ZWRDb2xTb3J0KCRldmVudCwgcHJldmlld05lc3RlZENvbHMpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZUhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IHRyIGJvcmRlci1iZWxvd1wiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIHJvdy5kZXRhaWwuY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgY2xhc3M9XCJweC00IHRoXCJcbiAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibmVzdGVkVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGgtMTAwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBvc2l0aW9uLXJlbGF0aXZlIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZWxsaXBzaXNcIiAoY2xpY2spPVwic29ydE5lc3RlZENvbChjb2wsIHJvdylcIj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50U3ViU29ydENvbHVtbiA9PSBjb2wuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgIChjb2w/Lm9yZGVyX2J5ID09ICdkZXNjJ1xuICAgICAgICAgICAgICAgICAgICA/ICdkYXRhLWdyaWQvaWNvbnMvc29ydC1kZXNjLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgOiAnZGF0YS1ncmlkL2ljb25zL3NvcnQtYXNjLnN2ZycpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXMtMiBzdGFydC01MFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjb2wpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgPCEtLSBPbmx5IHNob3cgbWVudSBpZiB0aGlzIGNvbHVtbiBpcyBhY3RpdmUgLS0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNvbCA9PT0gY29sXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogLTUwJTsgei1pbmRleDogMjE7IGxlZnQ6IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTWVudTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgIGlzTmVzdGVkVGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcm93Py5kZXRhaWwuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgIG9uUmVzaXplQ29sdW1uKCRldmVudCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlldz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgYm9yZGVyIGQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdGhlYWQ+XG4gICAgPGRpdlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgPlxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICBbaXRlbVNpemVdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cInZpZXdwb3J0XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAocm93Py5kZXRhaWw/LnJlc3VsdD8ubGVuZ3RoIDwgNVxuICAgICAgICAgICAgPyBuZXN0ZWRUYWJsZXJvd0hlaWdodCAqIHJvdz8uZGV0YWlsPy5yZXN1bHQ/Lmxlbmd0aCArIDQwXG4gICAgICAgICAgICA6IDMwMCkgKyAoaGFzSG9yaXpvbnRhbFNjcm9sbCA/IC0xMiA6IDEpXG4gICAgICAgIFwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJuZXN0ZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxMFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGJvcmRlci1iZWxvdyBkLWZsZXggdHJcIlxuICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IGQgb2Ygcm93Py5kZXRhaWw/LnJlc3VsdDsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibmVzdGVkSGVhZGVyPy5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cIm5lc3RlZEhlYWRlcj8ub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygkZXZlbnQsIGQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicHgtNCBweS0wIHRkXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgcHJldmlld05lc3RlZENvbHM7IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cIm5lc3RlZFRhYmxlcm93Rm9udHNpemVcIlxuICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHQgLSAxXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2w/LndpZHRoXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSB7eyBkW2NvbC5maWVsZF0gfHwgKGNvbC5pc19hbW91bnQgPyAwIDogXCItXCIpIH19IC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI2NlbGxUZXh0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWVsbGlwc2lzIGZsZXgtZ3Jvdy0xXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiXG4gICAgICAgICAgICAgICAgICBjb2w/LnR5cGUgPT09ICdkYXRlJ1xuICAgICAgICAgICAgICAgICAgICA/IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHwgZGF0ZSA6IGRhdGVGb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSB8fCAnLSdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSAhPT0gJ2ltYWdlJ1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc19hbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeVN5bWJvbFxuICAgICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICFpc05lc3RlZFZhbHVlQXJyYXkoZCwgY29sLmZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sPy50eXBlID09PSAnZGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGlzRGF0ZShnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfCBkYXRlOiBkYXRlRm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLScpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8ubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wuaXNfYW1vdW50ID8gMDogJy0nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5bMF0/LmRlcGFydG1lbnRfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8uWzBdPy5yb2xlTmFtZSB8fCBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5bMF0/LmZ1bGxfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0nKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldFRvdGFsQW1vdW50KGNvbCkgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdpbWFnZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsZWZ0UmlnaHROZXN0ZWRQbGFjZWhvbGRlciBsZXQtcm93PlxuICA8dGFibGVcbiAgICBjbGFzcz1cIm5lc3RlZC10YWJsZSB0YWJsZSB0YWJsZS1zbSB3LTEwMCBtYi0wXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICBncmlkVHlwZSA9PSAnQXNzZXRzJ1xuICAgICAgICA/IChuZXN0ZWRUYWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0ID8/IDApICsgMTJcbiAgICAgICAgOiAodGFza01hbmFnZW1lbnRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCA/PyAwKVxuICAgIFwiXG4gID5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0aGVhZFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRyIGQtZmxleCBib3JkZXItYmVsb3dcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlSGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGhcIiAqbmdGb3I9XCJsZXQgXyBvZiBbMSwgMiwgMywgNCwgNV1cIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0Ym9keVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRyIGJvcmRlci1iZWxvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgXyBvZiByb3c/LmRldGFpbD8ucmVzdWx0XCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGRcIiAqbmdGb3I9XCJsZXQgX18gb2YgWzEsIDIsIDMsIDQsIDVdXCIgY2xhc3M9XCJweS0wXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvdGFibGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rhc2tNYW5hZ2VtZW50VGVtcGxhdGUgbGV0LXRhc2tEZXRhaWxzPVwidGFza0RldGFpbHNcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwicC00XCJcbiAgICAjdGFza01hbmFnZW1lbnRDb250YWluZXJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5lc3RlZFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICBbc3R5bGUuZm9udEZhaW1seV09XCJmb250RmFpbWx5XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10aXRsZVwiPkRlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIml0ZW0tY29udGVudCBmaXJzdERpdlwiPlxuICAgICAgICB7eyB0YXNrRGV0YWlscy5kZXNjcmlwdGlvbiB9fVxuICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8cFxuICAgICAgICAgIFtzdHlsZS5mb250U2l6ZV09XCJib2R5VGV4dEZvbnRzU2l6ZVwiXG4gICAgICAgICAgY2xhc3M9XCJpdGVtLWNvbnRlbnQgZmlyc3REaXYgdGFza0Rlc2NyaXB0aW9uIHBlLTRcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0U2FmZUNvbW1lbnQodGFza0RldGFpbHM/LmVkaXRvcl9kZXNjcmlwdGlvbilcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuRnVsbEltYWdlKCRldmVudClcIlxuICAgICAgICA+PC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tdGl0bGVcIj5BdHRhY2htZW50czwvZGl2PlxuICAgICAgICA8aDUgKm5nSWY9XCJ0YXNrRGV0YWlscz8uYXR0YWNobWVudHM/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgTm8gQXR0YWNobWVudHMgZm91bmRcbiAgICAgICAgPC9oNT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwidGFza0RldGFpbHM/LmF0dGFjaG1lbnRzPy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiaXRlbS1jb250ZW50IGQtZmxleCBmbGV4LXdyYXBcIlxuICAgICAgICAgIHN0eWxlPVwiZ2FwOiAxMHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYXR0YWNoZW1lbnQgb2YgdGFza0RldGFpbHM/LmF0dGFjaG1lbnRzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIGZzLTIgZnctc2VtaWJvbGQgdGV4dC1zdWNjZXNzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICB0aXRsZT1cInt7IHRhc2tEZXRhaWxzPy5hdHRhY2htZW50c19uYW1lW2ldIHx8ICdBdHRhY2htZW50JyB9fVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEF0dGNobWVudChhdHRhY2hlbWVudClcIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvZG9jdW1lbnQtaWNvbnMvJyArXG4gICAgICAgICAgICAgICAgZ2V0RXh0ZW50aW9uKGF0dGFjaGVtZW50KSArXG4gICAgICAgICAgICAgICAgJy5zdmcnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAgQ29tbWVudHMgKHt7IHRhc2tEZXRhaWxzPy5jb21tZW50cz8ubGVuZ3RoIH19KVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGg1ICpuZ0lmPVwidGFza0RldGFpbHM/LmNvbW1lbnRzPy5sZW5ndGggPT0gMFwiPk5vIENvbW1lbnRzIGZvdW5kPC9oNT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInRhc2tEZXRhaWxzPy5jb21tZW50cz8ubGVuZ3RoXCIgY2xhc3M9XCJpdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudFwiICpuZ0Zvcj1cImxldCBjb21tZW50IG9mIHRhc2tEZXRhaWxzLmNvbW1lbnRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwZS0zXCI+XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpYyBpbWFnZS1pbnB1dC13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tbWVudD8uY29tbWVudF9ieS5sb2dvXCJcbiAgICAgICAgICAgICAgICBzcmM9XCJ7eyBjb21tZW50Py5jb21tZW50X2J5LmxvZ28gfX1cIlxuICAgICAgICAgICAgICAgIGFsdD1cInt7IGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUgfX1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8IS0tIDxhcHAtZGVmYXVsdC1pbWFnZS1wbGFjZWhvbGRlciAqbmdJZj1cIiFjb21tZW50Py5jb21tZW50X2J5LmxvZ29cIiB0aXRsZT1cInt7IGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUgfX1cIiBbbmFtZV09XCJjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lXCI+PC9hcHAtZGVmYXVsdC1pbWFnZS1wbGFjZWhvbGRlcj4gLS0+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29tbWVudD8uY29tbWVudF9ieS5sb2dvXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXREeW5hbWljQ2xhc3MoY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGljIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcm91bmRlZC1jaXJjbGVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cInJvd0hlaWdodCAvIDNcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBnZXRJbml0aWFscyhjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LWF1dGhvciBmcy0xNHB4XCI+XG4gICAgICAgICAgICAgICAge3sgY29tbWVudD8uY29tbWVudF9ieS5mdWxsX25hbWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbW1lbnQtY29udGVudCBmb3JDb21tZW50SW1nXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFNhZmVDb21tZW50KGNvbW1lbnQuY29tbWVudClcIlxuICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50LXRpbWVzdGFtcFwiPlxuICAgICAgICAgICAgICAgIHt7IGNvbW1lbnQuY29tbWVudF9kYXRlIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtdGltZXN0YW1wXCI+XG4gICAgICAgICAgICAgICAgUmVwbGllczogKHt7IGNvbW1lbnQucmVwbGllcy5sZW5ndGggfX0pXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|