igniteui-angular 14.2.23 → 14.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/card/card.component.mjs +2 -15
- package/esm2020/lib/grids/grid-base.directive.mjs +4 -3
- package/esm2020/lib/services/excel/excel-files.mjs +2 -2
- package/esm2020/lib/services/excel/worksheet-data-dictionary.mjs +4 -17
- package/esm2020/lib/services/exporter-common/base-export-service.mjs +2 -2
- package/esm2020/lib/services/exporter-common/export-utilities.mjs +14 -1
- package/fesm2015/igniteui-angular.mjs +22 -34
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +22 -34
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/card/card.component.d.ts +0 -10
- package/lib/services/excel/worksheet-data-dictionary.d.ts +1 -2
- package/lib/services/exporter-common/export-utilities.d.ts +1 -0
- package/package.json +1 -1
- package/src/lib/card/README.md +0 -1
|
@@ -321,7 +321,7 @@ export class WorksheetFile {
|
|
|
321
321
|
const rowCoordinate = isVertical
|
|
322
322
|
? startValue + owner.maxLevel + 2
|
|
323
323
|
: this.rowIndex;
|
|
324
|
-
const columnValue = dictionary.saveValue(currentCol.header, true);
|
|
324
|
+
const columnValue = dictionary.saveValue(currentCol.header, true, false);
|
|
325
325
|
columnCoordinate = ExcelStrings.getExcelColumn(column) + rowCoordinate;
|
|
326
326
|
rowStyle = isVertical && currentCol.rowSpan > 1 ? ' s="4"' : rowStyle;
|
|
327
327
|
str = `<c r="${columnCoordinate}"${rowStyle} t="s"><v>${columnValue}</v></c>`;
|
|
@@ -453,4 +453,4 @@ export class WorksheetRelsFile {
|
|
|
453
453
|
folder['sheet1.xml.rels'] = strToU8(ExcelStrings.getWorksheetRels());
|
|
454
454
|
}
|
|
455
455
|
}
|
|
456
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvZXhjZWwtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQTJDLE1BQU0sd0NBQXdDLENBQUM7QUFFL0g7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNkLFlBQVksQ0FBQyxNQUFjO1FBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sT0FBTztJQUNULFlBQVksQ0FBQyxNQUFjLEVBQUUsYUFBNEI7UUFDNUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1YsWUFBWSxDQUFDLE1BQWM7UUFDOUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsWUFBWSxDQUFDLE1BQWMsRUFBRSxhQUE0QjtRQUM1RCxNQUFNLGdCQUFnQixHQUFHLENB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aUJBQWlCLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN0QyxVQUFVLEdBQUcsc0JBQXNCLFVBQVUsZ0NBQWdDLEdBQUcsVUFBVSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsQ0FBQztTQUMxSDtRQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDN0gsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQ25CLFlBQVksQ0FBQyxNQUFjO1FBQzlCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFeGNlbEZpbGUgfSBmcm9tICcuL2V4Y2VsLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXhjZWxTdHJpbmdzIH0gZnJvbSAnLi9leGNlbC1zdHJpbmdzJztcbmltcG9ydCB7IFdvcmtzaGVldERhdGEgfSBmcm9tICcuL3dvcmtzaGVldC1kYXRhJztcblxuaW1wb3J0IHsgc3RyVG9VOCB9IGZyb20gJ2ZmbGF0ZSc7XG5pbXBvcnQgeyB5aWVsZGluZ0xvb3AgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEhlYWRlclR5cGUsIEV4cG9ydFJlY29yZFR5cGUsIElFeHBvcnRSZWNvcmQsIElDb2x1bW5MaXN0LCBJQ29sdW1uSW5mbyB9IGZyb20gJy4uL2V4cG9ydGVyLWNvbW1vbi9iYXNlLWV4cG9ydC1zZXJ2aWNlJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb290UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsnLnJlbHMnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFJlbHMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGZvbGRlclsnYXBwLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0QXBwKHdvcmtzaGVldERhdGEub3B0aW9ucy53b3Jrc2hlZXROYW1lKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvcmVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ2NvcmUueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRDb3JlKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrYm9va1JlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBoYXNTaGFyZWRTdHJpbmdzID0gIXdvcmtzaGVldERhdGEuaXNFbXB0eSB8fCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycztcbiAgICAgICAgZm9sZGVyWyd3b3JrYm9vay54bWwucmVscyddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2tSZWxzKGhhc1NoYXJlZFN0cmluZ3MpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgVGhlbWVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ3RoZW1lMS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFRoZW1lKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXRGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgTUlOX1dJRFRIID0gOC40MztcbiAgICBwcml2YXRlIG1heE91dGxpbmVMZXZlbCA9IDA7XG4gICAgcHJpdmF0ZSBzaGVldERhdGEgPSAnJztcbiAgICBwcml2YXRlIGRpbWVuc2lvbiA9ICcnO1xuICAgIHByaXZhdGUgZnJlZXplUGFuZSA9ICcnO1xuICAgIHByaXZhdGUgcm93SGVpZ2h0ID0gJyc7XG5cbiAgICBwcml2YXRlIG1lcmdlQ2VsbFN0ciA9ICcnO1xuICAgIHByaXZhdGUgbWVyZ2VDZWxsc0NvdW50ZXIgPSAwO1xuICAgIHByaXZhdGUgcm93SW5kZXggPSAwO1xuICAgIHByaXZhdGUgcGl2b3RHcmlkUm93SGVhZGVyc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG5cbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KCkge31cblxuICAgIHB1YmxpYyBhc3luYyB3cml0ZUVsZW1lbnRBc3luYyhmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVEYXRhQXN5bmMod29ya3NoZWV0RGF0YSwgKGNvbHMsIHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNUYWJsZSA9ICghd29ya3NoZWV0RGF0YS5pc0VtcHR5IHx8IHdvcmtzaGVldERhdGEub3B0aW9ucy5hbHdheXNFeHBvcnRIZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAmJiB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZXhwb3J0QXNUYWJsZTtcblxuICAgICAgICAgICAgICAgIGZvbGRlclsnc2hlZXQxLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0U2hlZXRYTUwoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uLCB0aGlzLmZyZWV6ZVBhbmUsIGNvbHMsIHJvd3MsIGhhc1RhYmxlLCB0aGlzLm1heE91dGxpbmVMZXZlbCwgd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbCkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVEYXRhQXN5bmMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgZG9uZTogKGNvbHM6IHN0cmluZywgc2hlZXREYXRhOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5zaGVldERhdGEgPSAnJztcbiAgICAgICAgbGV0IGNvbHMgPSAnJztcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIHRoaXMucm93SW5kZXggPSAwO1xuXG4gICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLmlzRW1wdHkgJiYgKCF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycyB8fCB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gJzxzaGVldERhdGEvPic7XG4gICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiA9ICdBMSc7XG4gICAgICAgICAgICBkb25lKCcnLCB0aGlzLnNoZWV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvd25lciA9IHdvcmtzaGVldERhdGEub3duZXI7XG4gICAgICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsO1xuICAgICAgICAgICAgY29uc3QgaGFzTXVsdGlDb2x1bW5IZWFkZXIgPSB3b3Jrc2hlZXREYXRhLmhhc011bHRpQ29sdW1uSGVhZGVyO1xuICAgICAgICAgICAgY29uc3QgaGFzTXVsdGlSb3dIZWFkZXIgPSB3b3Jrc2hlZXREYXRhLmhhc011bHRpUm93SGVhZGVyO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSBvd25lci5jb2x1bW5zLnNvbWUoY29sID0+IGNvbC5leHBvcnRJbmRleCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gIHdvcmtzaGVldERhdGEub3B0aW9ucy5yb3dIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IGhlaWdodCA/IGAgaHQ9XCIke2hlaWdodH1cIiBjdXN0b21IZWlnaHQ9XCIxXCJgIDogJyc7XG4gICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBgPHNoZWV0RGF0YT5gO1xuXG4gICAgICAgICAgICBsZXQgaGVhZGVyc0ZvckxldmVsOiBJQ29sdW1uSW5mb1tdID0gW107XG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPD0gb3duZXIubWF4Um93TGV2ZWw7IGkrKykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNGb3JMZXZlbCA9ICBvd25lci5jb2x1bW5zLmZpbHRlcihjID0+IGMubGV2ZWwgPT09IGkgJiYgYy5yb3dTcGFuID4gMCAmJiAhYy5za2lwKVxuXG4gICAgICAgICAgICAgICAgdGhpcy5wcmludEhlYWRlcnMod29ya3NoZWV0RGF0YSwgaGVhZGVyc0ZvckxldmVsLCBpLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3dJbmRleCA9IDA7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG93bmVyLm1heExldmVsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICAgICAgY29uc3QgcGl2b3RHcmlkQ29sdW1ucyA9IHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5nZXQodGhpcy5yb3dJbmRleCkgPz8gXCJcIjtcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBgPHJvdyByPVwiJHt0aGlzLnJvd0luZGV4fVwiJHt0aGlzLnJvd0hlaWdodH0+JHtwaXZvdEdyaWRDb2x1bW5zfWA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhbGxvd2VkQ29sdW1ucyA9IG93bmVyLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLlJvd0hlYWRlciAmJiBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlSb3dIZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgaGVhZGVyc0ZvckxldmVsID0gaGFzTXVsdGlDb2x1bW5IZWFkZXIgP1xuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IChjLmxldmVsIDwgaSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciB8fCBjLmxldmVsID09PSBpKSAmJiBjLmNvbHVtblNwYW4gPiAwICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KSA6XG4gICAgICAgICAgICAgICAgICAgIGhhc1VzZXJTZXRJbmRleCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQ29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQ29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgICAgIHRoaXMucHJpbnRIZWFkZXJzKHdvcmtzaGVldERhdGEsIGhlYWRlcnNGb3JMZXZlbCwgaSwgZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDwvcm93PmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG11bHRpQ29sdW1uSGVhZGVyTGV2ZWwgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzID8gMCA6IG93bmVyLm1heExldmVsO1xuICAgICAgICAgICAgY29uc3QgZnJlZXplSGVhZGVycyA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzID8gMiArIG11bHRpQ29sdW1uSGVhZGVyTGV2ZWwgOiAxO1xuXG4gICAgICAgICAgICBpZiAoIWlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uID1cbiAgICAgICAgICAgICAgICAgICAgJ0ExOicgKyBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4od29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCAtIDEpICsgKHdvcmtzaGVldERhdGEucm93Q291bnQpO1xuXG4gICAgICAgICAgICAgICAgY29scyArPSAnPGNvbHM+JztcblxuICAgICAgICAgICAgICAgIGlmICghaGFzTXVsdGlDb2x1bW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gZGljdGlvbmFyeS5jb2x1bW5XaWR0aHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHdpZHRoIHByb3ZpZGVkIGluIHRoZSBvcHRpb25zIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHdpZHRoSW5Ud2lwcyA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgoKHdpZHRoIC8gOTYpICogMTQuNCksIFdvcmtzaGVldEZpbGUuTUlOX1dJRFRIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHdpZHRoSW5Ud2lwcyA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhJblR3aXBzID0gV29ya3NoZWV0RmlsZS5NSU5fV0lEVEg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2wgbWluPVwiJHsoaiArIDEpfVwiIG1heD1cIiR7KGogKyAxKX1cIiB3aWR0aD1cIiR7d2lkdGhJblR3aXBzfVwiIGN1c3RvbVdpZHRoPVwiMVwiLz5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29scyArPSBgPGNvbCBtaW49XCIxXCIgbWF4PVwiJHt3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50fVwiIHdpZHRoPVwiMTVcIiBjdXN0b21XaWR0aD1cIjFcIi8+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb2xzICs9ICc8L2NvbHM+JztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uID0gd29ya3NoZWV0RGF0YS5pbmRleE9mTGFzdFBpbm5lZENvbHVtbjtcbiAgICAgICAgICAgICAgICBjb25zdCBmcm96ZW5Db2x1bW5Db3VudCA9IGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICsgMTtcbiAgICAgICAgICAgICAgICBsZXQgZmlyc3RDZWxsID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGZyb3plbkNvbHVtbkNvdW50KSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICE9PSB1bmRlZmluZWQgJiYgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlUGlubmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZUNvbHVtbnNPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIiR7ZnJvemVuQ29sdW1uQ291bnR9XCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbigwKSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZXplUGFuZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHBhbmUgeFNwbGl0PVwiMFwiIHlTcGxpdD1cIiR7ZnJlZXplSGVhZGVycyAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA/IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA6IDIwO1xuICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2xzPjxjb2wgbWluPVwiMVwiIG1heD1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudH1cIiB3aWR0aD1cIiR7Y29sdW1uV2lkdGh9XCIgY3VzdG9tV2lkdGg9XCIxXCIvPjwvY29scz5gO1xuICAgICAgICAgICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZnJlZXplSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENlbGwgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oMCkgKyBmcmVlemVIZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIjBcIiB5U3BsaXQ9XCIke2ZyZWV6ZUhlYWRlcnMgLSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdENlbGw9XCIke2ZpcnN0Q2VsbH1cIiBhY3RpdmVQYW5lPVwidG9wUmlnaHRcIiBzdGF0ZT1cImZyb3plblwiLz5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YVJlY29yZHNBc3luYyh3b3Jrc2hlZXREYXRhLCAocm93cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IHJvd3M7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gJzwvc2hlZXREYXRhPic7XG5cbiAgICAgICAgICAgICAgICBpZiAoKGhhc011bHRpQ29sdW1uSGVhZGVyIHx8IGhhc011bHRpUm93SGVhZGVyKSAmJiB0aGlzLm1lcmdlQ2VsbHNDb3VudGVyID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBgPG1lcmdlQ2VsbHMgY291bnQ9XCIke3RoaXMubWVyZ2VDZWxsc0NvdW50ZXJ9XCI+JHt0aGlzLm1lcmdlQ2VsbFN0cn08L21lcmdlQ2VsbHM+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKGNvbHMsIHRoaXMuc2hlZXREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzRGF0YVJlY29yZHNBc3luYyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBkb25lOiAocm93czogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgICAgIGNvbnN0IHJvd0RhdGFBcnIgPSBbXTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gIHdvcmtzaGVldERhdGEub3B0aW9ucy5yb3dIZWlnaHQ7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0ID0gaGVpZ2h0ID8gJyBodD1cIicgKyBoZWlnaHQgKyAnXCIgY3VzdG9tSGVpZ2h0PVwiMVwiJyA6ICcnO1xuXG4gICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWw7XG4gICAgICAgIGNvbnN0IGhhc1VzZXJTZXRJbmRleCA9IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1ucy5zb21lKGMgPT4gYy5leHBvcnRJbmRleCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBsZXQgcmVjb3JkSGVhZGVycyA9IFtdO1xuXG4gICAgICAgIHlpZWxkaW5nTG9vcCh3b3Jrc2hlZXREYXRhLnJvd0NvdW50IC0gd29ya3NoZWV0RGF0YS5tdWx0aUNvbHVtbkhlYWRlclJvd3MgLSAxLCAxMDAwLFxuICAgICAgICAgICAgKGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXdvcmtzaGVldERhdGEuaXNFbXB0eSl7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNIaWVyYXJjaGljYWxHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVXNlclNldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkSGVhZGVycyA9IHdvcmtzaGVldERhdGEucm9vdEtleXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZEhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciAmJiBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlSb3dIZWFkZXIgJiYgYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLlJvd0hlYWRlciAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4LWIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXgtYi5waW5uZWRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gd29ya3NoZWV0RGF0YS5kYXRhW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkT3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVycy5nZXQocmVjb3JkLm93bmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNNdWx0aUNvbHVtbkhlYWRlcnMgPSByZWNvcmRPd25lci5jb2x1bW5zLnNvbWUoYyA9PiAhYy5za2lwICYmIGMuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTXVsdGlDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaEdyaWRQcmludE11bHRpQ29sSGVhZGVycyh3b3Jrc2hlZXREYXRhLCByb3dEYXRhQXJyLCByZWNvcmQsIHJlY29yZE93bmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZEhlYWRlcnMgPSBPYmplY3Qua2V5cyh3b3Jrc2hlZXREYXRhLmRhdGFbaV0uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhQXJyLnB1c2godGhpcy5wcm9jZXNzUm93KHdvcmtzaGVldERhdGEsIGksIHJlY29yZEhlYWRlcnMsIGlzSGllcmFyY2hpY2FsR3JpZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShyb3dEYXRhQXJyLmpvaW4oJycpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoR3JpZFByaW50TXVsdGlDb2xIZWFkZXJzKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIHJvd0RhdGFBcnI6IGFueVtdLCByZWNvcmQ6IElFeHBvcnRSZWNvcmQsXG4gICAgICAgIG93bmVyOiBJQ29sdW1uTGlzdCkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG93bmVyLm1heExldmVsOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZExldmVsID0gcmVjb3JkLmxldmVsO1xuICAgICAgICAgICAgY29uc3Qgb3V0bGluZUxldmVsID0gcmVjb3JkTGV2ZWwgPiAwID8gYCBvdXRsaW5lTGV2ZWw9XCIke3JlY29yZExldmVsfVwiYCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPSB0aGlzLm1heE91dGxpbmVMZXZlbCA8IHJlY29yZExldmVsID8gcmVjb3JkTGV2ZWwgOiB0aGlzLm1heE91dGxpbmVMZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IHNIaWRkZW4gPSByZWNvcmQuaGlkZGVuID8gYCBoaWRkZW49XCIxXCJgIDogJyc7XG5cbiAgICAgICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgICAgIGxldCByb3cgPSBgPHJvdyByPVwiJHt0aGlzLnJvd0luZGV4fVwiJHt0aGlzLnJvd0hlaWdodH0ke291dGxpbmVMZXZlbH0ke3NIaWRkZW59PmA7XG5cbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnNGb3JMZXZlbCA9IG93bmVyLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gKGMubGV2ZWwgPCBqICYmXG4gICAgICAgICAgICAgICAgICAgIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciB8fCBjLmxldmVsID09PSBqKSAmJiBjLmNvbHVtblNwYW4gPiAwICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpO1xuXG4gICAgICAgICAgICBsZXQgc3RhcnRWYWx1ZSA9IDAgKyByZWNvcmQubGV2ZWw7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY3VycmVudENvbCBvZiBoZWFkZXJzRm9yTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbC5sZXZlbCA9PT0gaikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1uQ29vcmRpbmF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oc3RhcnRWYWx1ZSkgKyB0aGlzLnJvd0luZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeS5zYXZlVmFsdWUoY3VycmVudENvbC5oZWFkZXIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByb3cgKz0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIgcz1cIjNcIiB0PVwic1wiPjx2PiR7Y29sdW1uVmFsdWV9PC92PjwvYz5gO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChqICE9PSBvd25lci5tYXhMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxzQ291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCA8bWVyZ2VDZWxsIHJlZj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX06YDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMucm93SW5kZXggKyBvd25lci5tYXhMZXZlbCAtIGN1cnJlbnRDb2wubGV2ZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMTsgayA8IGN1cnJlbnRDb2wuY29sdW1uU3BhbjsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oc3RhcnRWYWx1ZSArIGspICsgdGhpcy5yb3dJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93ICs9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiIHM9XCIzXCIgLz5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCR7Y29sdW1uQ29vcmRpbmF0ZX1cIiAvPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGFydFZhbHVlICs9IGN1cnJlbnRDb2wuY29sdW1uU3BhbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdyArPSBgPC9yb3c+YDtcbiAgICAgICAgICAgIHJvd0RhdGFBcnIucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzUm93KHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIGk6IG51bWJlciwgaGVhZGVyc0ZvckxldmVsOiBhbnlbXSwgaXNIaWVyYXJjaGljYWxHcmlkOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHdvcmtzaGVldERhdGEuZGF0YVtpXTtcblxuICAgICAgICBjb25zdCByb3dEYXRhID0gbmV3IEFycmF5KHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAyKTtcblxuICAgICAgICBjb25zdCByb3dMZXZlbCA9IHJlY29yZC5sZXZlbDtcbiAgICAgICAgY29uc3Qgb3V0bGluZUxldmVsID0gcm93TGV2ZWwgPiAwID8gYCBvdXRsaW5lTGV2ZWw9XCIke3Jvd0xldmVsfVwiYCA6ICcnO1xuICAgICAgICB0aGlzLm1heE91dGxpbmVMZXZlbCA9IHRoaXMubWF4T3V0bGluZUxldmVsIDwgcm93TGV2ZWwgPyByb3dMZXZlbCA6IHRoaXMubWF4T3V0bGluZUxldmVsO1xuXG4gICAgICAgIGNvbnN0IHNIaWRkZW4gPSByZWNvcmQuaGlkZGVuID8gYCBoaWRkZW49XCIxXCJgIDogJyc7XG5cbiAgICAgICAgdGhpcy5yb3dJbmRleCsrO1xuICAgICAgICBjb25zdCBwaXZvdEdyaWRDb2x1bW5zID0gdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLmdldCh0aGlzLnJvd0luZGV4KSA/PyBcIlwiO1xuXG4gICAgICAgIHJvd0RhdGFbMF0gPVxuICAgICAgICAgICAgYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9JHtvdXRsaW5lTGV2ZWx9JHtzSGlkZGVufT4ke3Bpdm90R3JpZENvbHVtbnN9YDtcblxuICAgICAgICBjb25zdCBrZXlzID0gd29ya3NoZWV0RGF0YS5pc1NwZWNpYWxEYXRhID8gW3JlY29yZC5kYXRhXSA6IGhlYWRlcnNGb3JMZXZlbDtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGogKyAoaXNIaWVyYXJjaGljYWxHcmlkID8gcm93TGV2ZWwgOiB3b3Jrc2hlZXREYXRhLmlzUGl2b3RHcmlkID8gd29ya3NoZWV0RGF0YS5vd25lci5tYXhSb3dMZXZlbCA6IDApO1xuXG4gICAgICAgICAgICBjb25zdCBjZWxsRGF0YSA9IHRoaXMuZ2V0Q2VsbERhdGEod29ya3NoZWV0RGF0YSwgaSwgY29sLCBrZXlzW2pdKTtcblxuICAgICAgICAgICAgcm93RGF0YVtqICsgMV0gPSBjZWxsRGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0RhdGFba2V5cy5sZW5ndGggKyAxXSA9ICc8L3Jvdz4nO1xuXG4gICAgICAgIHJldHVybiByb3dEYXRhLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2VsbERhdGEod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgcm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbikgKyAodGhpcy5yb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGZ1bGxSb3cgPSB3b3Jrc2hlZXREYXRhLmRhdGFbcm93XTtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJSZWNvcmQgPSBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkO1xuXG4gICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IHdvcmtzaGVldERhdGEuaXNTcGVjaWFsRGF0YSA/XG4gICAgICAgICAgICBmdWxsUm93LmRhdGEgOlxuICAgICAgICAgICAgZnVsbFJvdy5kYXRhW2tleV07XG5cbiAgICAgICAgaWYgKGNlbGxWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNlbGxWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiIHM9XCIxXCIvPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzYXZlZFZhbHVlID0gZGljdGlvbmFyeS5zYXZlVmFsdWUoY2VsbFZhbHVlLCBpc0hlYWRlclJlY29yZCk7XG4gICAgICAgICAgICBjb25zdCBpc1NhdmVkQXNTdHJpbmcgPSBzYXZlZFZhbHVlICE9PSAtMTtcblxuICAgICAgICAgICAgY29uc3QgaXNTYXZlZEFzRGF0ZSA9ICFpc1NhdmVkQXNTdHJpbmcgJiYgY2VsbFZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gaXNTYXZlZEFzU3RyaW5nID8gc2F2ZWRWYWx1ZSA6IGNlbGxWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKGlzU2F2ZWRBc0RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lWm9uZU9mZnNldCA9IHZhbHVlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc29TdHJpbmcgPSAobmV3IERhdGUodmFsdWUgLSB0aW1lWm9uZU9mZnNldCkpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpc29TdHJpbmcuc3Vic3RyaW5nKDAsIGlzb1N0cmluZy5pbmRleE9mKCcuJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gaXNTYXZlZEFzU3RyaW5nID8gYCB0PVwic1wiYCA6IGlzU2F2ZWRBc0RhdGUgPyBgIHQ9XCJkXCJgIDogJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGlzSGVhZGVyUmVjb3JkID8gYCBzPVwiM1wiYCA6IGlzU2F2ZWRBc1N0cmluZyA/ICcnIDogaXNTYXZlZEFzRGF0ZSA/IGAgcz1cIjJcImAgOiBgIHM9XCIxXCJgO1xuXG4gICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIke3R5cGV9JHtmb3JtYXR9Pjx2PiR7dmFsdWV9PC92PjwvYz5gO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmludEhlYWRlcnMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgaGVhZGVyc0ZvckxldmVsOiBJQ29sdW1uSW5mb1tdLCBpOiBudW1iZXIsIGlzVmVydGljYWw6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHN0YXJ0VmFsdWUgPSAwO1xuICAgICAgICBsZXQgc3RyID0gJyc7XG5cbiAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbDtcbiAgICAgICAgbGV0IHJvd1N0eWxlID0gaXNIaWVyYXJjaGljYWxHcmlkID8gJyBzPVwiM1wiJyA6ICcnO1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgY29uc3Qgb3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVyO1xuICAgICAgICBjb25zdCBtYXhMZXZlbCA9IGlzVmVydGljYWxcbiAgICAgICAgICAgID8gb3duZXIubWF4Um93TGV2ZWxcbiAgICAgICAgICAgIDogb3duZXIubWF4TGV2ZWw7XG5cbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Q29sIG9mIGhlYWRlcnNGb3JMZXZlbCkge1xuICAgICAgICAgICAgY29uc3Qgc3Bhbkxlbmd0aCA9IGlzVmVydGljYWwgPyBjdXJyZW50Q29sLnJvd1NwYW4gOiBjdXJyZW50Q29sLmNvbHVtblNwYW47XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmxldmVsID09PSBpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucm93SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgOiBzdGFydFZhbHVlICsgKG93bmVyLm1heFJvd0xldmVsID8/IDApXG5cbiAgICAgICAgICAgICAgICBjb25zdCByb3dDb29yZGluYXRlID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICA/IHN0YXJ0VmFsdWUgKyBvd25lci5tYXhMZXZlbCArIDJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJvd0luZGV4XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IGRpY3Rpb25hcnkuc2F2ZVZhbHVlKGN1cnJlbnRDb2wuaGVhZGVyLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uKSArIHJvd0Nvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgcm93U3R5bGUgPSBpc1ZlcnRpY2FsICYmIGN1cnJlbnRDb2wucm93U3BhbiA+IDEgPyAnIHM9XCI0XCInIDogcm93U3R5bGU7XG4gICAgICAgICAgICAgICAgc3RyID0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIke3Jvd1N0eWxlfSB0PVwic1wiPjx2PiR7Y29sdW1uVmFsdWV9PC92PjwvYz5gO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5oYXMocm93Q29vcmRpbmF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5zZXQocm93Q29vcmRpbmF0ZSwgdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLmdldChyb3dDb29yZGluYXRlKSArIHN0cilcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5zZXQocm93Q29vcmRpbmF0ZSwgc3RyKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gc3RyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpICE9PSBtYXhMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbHNDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAgPG1lcmdlQ2VsbCByZWY9XCIke2NvbHVtbkNvb3JkaW5hdGV9OmA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wuaGVhZGVyVHlwZSA9PT0gSGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1heExldmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGFydFZhbHVlICsgKG93bmVyLm1heFJvd0xldmVsID8/IDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dDb29yZGluYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvd25lci5tYXhMZXZlbCArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sKSArIHJvdztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAxOyBrIDwgc3Bhbkxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbiArIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93Q29vcmRpbmF0ZSArIGtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJvd0luZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2wpICsgcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiJHtyb3dTdHlsZX0gLz5gO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5zZXQocm93LCBzdHIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zaGVldERhdGEgKz0gc3RyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbFN0ciArPSBgJHtjb2x1bW5Db29yZGluYXRlfVwiIC8+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXJ0VmFsdWUgKz0gc3Bhbkxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHlsZUZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsnc3R5bGVzLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0U3R5bGVzKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrYm9va0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGZvbGRlclsnd29ya2Jvb2sueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRXb3JrYm9vayh3b3Jrc2hlZXREYXRhLm9wdGlvbnMud29ya3NoZWV0TmFtZSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250ZW50VHlwZXNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBoYXNTaGFyZWRTdHJpbmdzID0gIXdvcmtzaGVldERhdGEuaXNFbXB0eSB8fCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycztcbiAgICAgICAgZm9sZGVyWydbQ29udGVudF9UeXBlc10ueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRDb250ZW50VHlwZXNYTUwoaGFzU2hhcmVkU3RyaW5ncywgd29ya3NoZWV0RGF0YS5vcHRpb25zLmV4cG9ydEFzVGFibGUpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgU2hhcmVkU3RyaW5nc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGRpY3QgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICBjb25zdCBzb3J0ZWRWYWx1ZXMgPSBkaWN0LmdldEtleXMoKTtcbiAgICAgICAgY29uc3Qgc2hhcmVkU3RyaW5ncyA9IG5ldyBBcnJheTxzdHJpbmc+KHNvcnRlZFZhbHVlcy5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc29ydGVkVmFsdWVzKSB7XG4gICAgICAgICAgICBzaGFyZWRTdHJpbmdzW2RpY3QuZ2V0U2FuaXRpemVkVmFsdWUodmFsdWUpXSA9ICc8c2k+PHQ+JyArIHZhbHVlICsgJzwvdD48L3NpPic7XG4gICAgICAgIH1cblxuICAgICAgICBmb2xkZXJbJ3NoYXJlZFN0cmluZ3MueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRTaGFyZWRTdHJpbmdYTUwoXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnN0cmluZ3NDb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZFZhbHVlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRTdHJpbmdzLmpvaW4oJycpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWJsZXNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBjb2x1bW5Db3VudCA9IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQ7XG4gICAgICAgIGNvbnN0IGxhc3RDb2x1bW4gPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uQ291bnQgLSAxKSArIHdvcmtzaGVldERhdGEucm93Q291bnQ7XG4gICAgICAgIGNvbnN0IGF1dG9GaWx0ZXJEaW1lbnNpb24gPSAnQTE6JyArIGxhc3RDb2x1bW47XG4gICAgICAgIGNvbnN0IHRhYmxlRGltZW5zaW9uID0gd29ya3NoZWV0RGF0YS5pc0VtcHR5XG4gICAgICAgICAgICA/ICdBMTonICsgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbkNvdW50IC0gMSkgKyAod29ya3NoZWV0RGF0YS5yb3dDb3VudCArIDEpXG4gICAgICAgICAgICA6IGF1dG9GaWx0ZXJEaW1lbnNpb247XG4gICAgICAgIGNvbnN0IGhhc1VzZXJTZXRJbmRleCA9IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1ucy5zb21lKGMgPT4gYy5leHBvcnRJbmRleCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gaGFzVXNlclNldEluZGV4XG4gICAgICAgICAgICA/IHdvcmtzaGVldERhdGEucm9vdEtleXNcbiAgICAgICAgICAgIDogd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihjID0+ICFjLnNraXApXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleCAtIGIucGlubmVkSW5kZXgpXG4gICAgICAgICAgICAgICAgLm1hcChjID0+IGMuaGVhZGVyKTtcblxuICAgICAgICBsZXQgc29ydFN0cmluZyA9ICcnO1xuXG4gICAgICAgIGxldCB0YWJsZUNvbHVtbnMgPSAnPHRhYmxlQ29sdW1ucyBjb3VudD1cIicgKyBjb2x1bW5Db3VudCArICdcIj4nO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gIHZhbHVlc1tpXTtcbiAgICAgICAgICAgIHRhYmxlQ29sdW1ucyArPSAnPHRhYmxlQ29sdW1uIGlkPVwiJyArIChpICsgMSkgKyAnXCIgbmFtZT1cIicgKyB2YWx1ZSArICdcIi8+JztcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlQ29sdW1ucyArPSAnPC90YWJsZUNvbHVtbnM+JztcblxuICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5zb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0aW5nRXhwcmVzc2lvbiA9IHdvcmtzaGVldERhdGEuc29ydDtcbiAgICAgICAgICAgIGNvbnN0IHNjID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHZhbHVlcy5pbmRleE9mKHNvcnRpbmdFeHByZXNzaW9uLmZpZWxkTmFtZSkpO1xuICAgICAgICAgICAgY29uc3QgZGlyID0gc29ydGluZ0V4cHJlc3Npb24uZGlyIC0gMTtcbiAgICAgICAgICAgIHNvcnRTdHJpbmcgPSBgPHNvcnRTdGF0ZSByZWY9XCJBMjoke2xhc3RDb2x1bW59XCI+PHNvcnRDb25kaXRpb24gZGVzY2VuZGluZz1cIiR7ZGlyfVwiIHJlZj1cIiR7c2N9MToke3NjfTE1XCIvPjwvc29ydFN0YXRlPmA7XG4gICAgICAgIH1cblxuICAgICAgICBmb2xkZXJbJ3RhYmxlMS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFRhYmxlc1hNTChhdXRvRmlsdGVyRGltZW5zaW9uLCB0YWJsZURpbWVuc2lvbiwgdGFibGVDb2x1bW5zLCBzb3J0U3RyaW5nKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzaGVldFJlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ3NoZWV0MS54bWwucmVscyddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0V29ya3NoZWV0UmVscygpKTtcbiAgICB9XG59XG4iXX0=
|
|
456
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvZXhjZWwtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQTJDLE1BQU0sd0NBQXdDLENBQUM7QUFFL0g7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNkLFlBQVksQ0FBQyxNQUFjO1FBQzlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sT0FBTztJQUNULFlBQVksQ0FBQyxNQUFjLEVBQUUsYUFBNEI7UUFDNUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1YsWUFBWSxDQUFDLE1BQWM7UUFDOUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsWUFBWSxDQUFDLE1BQWMsRUFBRSxhQUE0QjtRQUM1RCxNQUFNLGdCQUFnQixHQUFHLENB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R0FBRyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDdEMsVUFBVSxHQUFHLHNCQUFzQixVQUFVLGdDQUFnQyxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUM7U0FDMUg7UUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdILENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixZQUFZLENBQUMsTUFBYztRQUM5QixNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRXhjZWxGaWxlIH0gZnJvbSAnLi9leGNlbC1pbnRlcmZhY2VzJztcbmltcG9ydCB7IEV4Y2VsU3RyaW5ncyB9IGZyb20gJy4vZXhjZWwtc3RyaW5ncyc7XG5pbXBvcnQgeyBXb3Jrc2hlZXREYXRhIH0gZnJvbSAnLi93b3Jrc2hlZXQtZGF0YSc7XG5cbmltcG9ydCB7IHN0clRvVTggfSBmcm9tICdmZmxhdGUnO1xuaW1wb3J0IHsgeWllbGRpbmdMb29wIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBIZWFkZXJUeXBlLCBFeHBvcnRSZWNvcmRUeXBlLCBJRXhwb3J0UmVjb3JkLCBJQ29sdW1uTGlzdCwgSUNvbHVtbkluZm8gfSBmcm9tICcuLi9leHBvcnRlci1jb21tb24vYmFzZS1leHBvcnQtc2VydmljZSc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgUm9vdFJlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJy5yZWxzJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRSZWxzKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBmb2xkZXJbJ2FwcC54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldEFwcCh3b3Jrc2hlZXREYXRhLm9wdGlvbnMud29ya3NoZWV0TmFtZSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb3JlRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWydjb3JlLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0Q29yZSgpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tSZWxzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzU2hhcmVkU3RyaW5ncyA9ICF3b3Jrc2hlZXREYXRhLmlzRW1wdHkgfHwgd29ya3NoZWV0RGF0YS5vcHRpb25zLmFsd2F5c0V4cG9ydEhlYWRlcnM7XG4gICAgICAgIGZvbGRlclsnd29ya2Jvb2sueG1sLnJlbHMnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFdvcmtib29rUmVscyhoYXNTaGFyZWRTdHJpbmdzKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFRoZW1lRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWyd0aGVtZTEueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRUaGVtZSgpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0RmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHByaXZhdGUgc3RhdGljIE1JTl9XSURUSCA9IDguNDM7XG4gICAgcHJpdmF0ZSBtYXhPdXRsaW5lTGV2ZWwgPSAwO1xuICAgIHByaXZhdGUgc2hlZXREYXRhID0gJyc7XG4gICAgcHJpdmF0ZSBkaW1lbnNpb24gPSAnJztcbiAgICBwcml2YXRlIGZyZWV6ZVBhbmUgPSAnJztcbiAgICBwcml2YXRlIHJvd0hlaWdodCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBtZXJnZUNlbGxTdHIgPSAnJztcbiAgICBwcml2YXRlIG1lcmdlQ2VsbHNDb3VudGVyID0gMDtcbiAgICBwcml2YXRlIHJvd0luZGV4ID0gMDtcbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0hlYWRlcnNNYXAgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuXG4gICAgcHVibGljIHdyaXRlRWxlbWVudCgpIHt9XG5cbiAgICBwdWJsaWMgYXN5bmMgd3JpdGVFbGVtZW50QXN5bmMoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRGF0YUFzeW5jKHdvcmtzaGVldERhdGEsIChjb2xzLCByb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGFibGUgPSAoIXdvcmtzaGVldERhdGEuaXNFbXB0eSB8fCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycylcbiAgICAgICAgICAgICAgICAgICAgJiYgd29ya3NoZWV0RGF0YS5vcHRpb25zLmV4cG9ydEFzVGFibGU7XG5cbiAgICAgICAgICAgICAgICBmb2xkZXJbJ3NoZWV0MS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFNoZWV0WE1MKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiwgdGhpcy5mcmVlemVQYW5lLCBjb2xzLCByb3dzLCBoYXNUYWJsZSwgdGhpcy5tYXhPdXRsaW5lTGV2ZWwsIHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWwpKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlRGF0YUFzeW5jKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIGRvbmU6IChjb2xzOiBzdHJpbmcsIHNoZWV0RGF0YTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuc2hlZXREYXRhID0gJyc7XG4gICAgICAgIGxldCBjb2xzID0gJyc7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICB0aGlzLnJvd0luZGV4ID0gMDtcblxuICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5pc0VtcHR5ICYmICghd29ya3NoZWV0RGF0YS5vcHRpb25zLmFsd2F5c0V4cG9ydEhlYWRlcnMgfHwgd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9ICc8c2hlZXREYXRhLz4nO1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb24gPSAnQTEnO1xuICAgICAgICAgICAgZG9uZSgnJywgdGhpcy5zaGVldERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVyO1xuICAgICAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbDtcbiAgICAgICAgICAgIGNvbnN0IGhhc011bHRpQ29sdW1uSGVhZGVyID0gd29ya3NoZWV0RGF0YS5oYXNNdWx0aUNvbHVtbkhlYWRlcjtcbiAgICAgICAgICAgIGNvbnN0IGhhc011bHRpUm93SGVhZGVyID0gd29ya3NoZWV0RGF0YS5oYXNNdWx0aVJvd0hlYWRlcjtcblxuICAgICAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gb3duZXIuY29sdW1ucy5zb21lKGNvbCA9PiBjb2wuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9ICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMucm93SGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBoZWlnaHQgPyBgIGh0PVwiJHtoZWlnaHR9XCIgY3VzdG9tSGVpZ2h0PVwiMVwiYCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxzaGVldERhdGE+YDtcblxuICAgICAgICAgICAgbGV0IGhlYWRlcnNGb3JMZXZlbDogSUNvbHVtbkluZm9bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDw9IG93bmVyLm1heFJvd0xldmVsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzRm9yTGV2ZWwgPSAgb3duZXIuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmxldmVsID09PSBpICYmIGMucm93U3BhbiA+IDAgJiYgIWMuc2tpcClcblxuICAgICAgICAgICAgICAgIHRoaXMucHJpbnRIZWFkZXJzKHdvcmtzaGVldERhdGEsIGhlYWRlcnNGb3JMZXZlbCwgaSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93SW5kZXggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBvd25lci5tYXhMZXZlbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dJbmRleCsrO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpdm90R3JpZENvbHVtbnMgPSB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuZ2V0KHRoaXMucm93SW5kZXgpID8/IFwiXCI7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9PiR7cGl2b3RHcmlkQ29sdW1uc31gO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYWxsb3dlZENvbHVtbnMgPSBvd25lci5jb2x1bW5zLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5Sb3dIZWFkZXIgJiYgYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyKTtcblxuICAgICAgICAgICAgICAgIGhlYWRlcnNGb3JMZXZlbCA9IGhhc011bHRpQ29sdW1uSGVhZGVyID9cbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAoYy5sZXZlbCA8IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaSkgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCkgOlxuICAgICAgICAgICAgICAgICAgICBoYXNVc2VyU2V0SW5kZXggP1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnByaW50SGVhZGVycyh3b3Jrc2hlZXREYXRhLCBoZWFkZXJzRm9yTGV2ZWwsIGksIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IGA8L3Jvdz5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtdWx0aUNvbHVtbkhlYWRlckxldmVsID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycyA/IDAgOiBvd25lci5tYXhMZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IGZyZWV6ZUhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZnJlZXplSGVhZGVycyA/IDIgKyBtdWx0aUNvbHVtbkhlYWRlckxldmVsIDogMTtcblxuICAgICAgICAgICAgaWYgKCFpc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgICdBMTonICsgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgLSAxKSArICh3b3Jrc2hlZXREYXRhLnJvd0NvdW50KTtcblxuICAgICAgICAgICAgICAgIGNvbHMgKz0gJzxjb2xzPic7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWhhc011bHRpQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IGRpY3Rpb25hcnkuY29sdW1uV2lkdGhzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB3aWR0aCBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3aWR0aEluVHdpcHMgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoKCh3aWR0aCAvIDk2KSAqIDE0LjQpLCBXb3Jrc2hlZXRGaWxlLk1JTl9XSURUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh3aWR0aEluVHdpcHMgPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoSW5Ud2lwcyA9IFdvcmtzaGVldEZpbGUuTUlOX1dJRFRIO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29sIG1pbj1cIiR7KGogKyAxKX1cIiBtYXg9XCIkeyhqICsgMSl9XCIgd2lkdGg9XCIke3dpZHRoSW5Ud2lwc31cIiBjdXN0b21XaWR0aD1cIjFcIi8+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2wgbWluPVwiMVwiIG1heD1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudH1cIiB3aWR0aD1cIjE1XCIgY3VzdG9tV2lkdGg9XCIxXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29scyArPSAnPC9jb2xzPic7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiA9IHdvcmtzaGVldERhdGEuaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW47XG4gICAgICAgICAgICAgICAgY29uc3QgZnJvemVuQ29sdW1uQ291bnQgPSBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiArIDE7XG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihmcm96ZW5Db2x1bW5Db3VudCkgKyBmcmVlemVIZWFkZXJzO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleE9mTGFzdFBpbm5lZENvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAhd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZVBpbm5pbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgIXdvcmtzaGVldERhdGEub3B0aW9ucy5pZ25vcmVDb2x1bW5zT3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVlemVQYW5lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGA8cGFuZSB4U3BsaXQ9XCIke2Zyb3plbkNvbHVtbkNvdW50fVwiIHlTcGxpdD1cIiR7ZnJlZXplSGVhZGVycyAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZnJlZXplSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdENlbGwgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oMCkgKyBmcmVlemVIZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIjBcIiB5U3BsaXQ9XCIke2ZyZWV6ZUhlYWRlcnMgLSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdENlbGw9XCIke2ZpcnN0Q2VsbH1cIiBhY3RpdmVQYW5lPVwidG9wUmlnaHRcIiBzdGF0ZT1cImZyb3plblwiLz5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggPyB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggOiAyMDtcbiAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29scz48Y29sIG1pbj1cIjFcIiBtYXg9XCIke3dvcmtzaGVldERhdGEuY29sdW1uQ291bnR9XCIgd2lkdGg9XCIke2NvbHVtbldpZHRofVwiIGN1c3RvbVdpZHRoPVwiMVwiLz48L2NvbHM+YDtcbiAgICAgICAgICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5vcHRpb25zLmZyZWV6ZUhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDZWxsID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKDApICsgZnJlZXplSGVhZGVycztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVlemVQYW5lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGA8cGFuZSB4U3BsaXQ9XCIwXCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGFSZWNvcmRzQXN5bmMod29ya3NoZWV0RGF0YSwgKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSByb3dzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9ICc8L3NoZWV0RGF0YT4nO1xuXG4gICAgICAgICAgICAgICAgaWYgKChoYXNNdWx0aUNvbHVtbkhlYWRlciB8fCBoYXNNdWx0aVJvd0hlYWRlcikgJiYgdGhpcy5tZXJnZUNlbGxzQ291bnRlciA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxtZXJnZUNlbGxzIGNvdW50PVwiJHt0aGlzLm1lcmdlQ2VsbHNDb3VudGVyfVwiPiR7dGhpcy5tZXJnZUNlbGxTdHJ9PC9tZXJnZUNlbGxzPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShjb2xzLCB0aGlzLnNoZWV0RGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0RhdGFSZWNvcmRzQXN5bmMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgZG9uZTogKHJvd3M6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCByb3dEYXRhQXJyID0gW107XG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMucm93SGVpZ2h0O1xuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IGhlaWdodCA/ICcgaHQ9XCInICsgaGVpZ2h0ICsgJ1wiIGN1c3RvbUhlaWdodD1cIjFcIicgOiAnJztcblxuICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsO1xuICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMuc29tZShjID0+IGMuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgbGV0IHJlY29yZEhlYWRlcnMgPSBbXTtcblxuICAgICAgICB5aWVsZGluZ0xvb3Aod29ya3NoZWV0RGF0YS5yb3dDb3VudCAtIHdvcmtzaGVldERhdGEubXVsdGlDb2x1bW5IZWFkZXJSb3dzIC0gMSwgMTAwMCxcbiAgICAgICAgICAgIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF3b3Jrc2hlZXREYXRhLmlzRW1wdHkpe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VzZXJTZXRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZEhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLnJvb3RLZXlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgJiYgYy5oZWFkZXJUeXBlICE9PSBIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyICYmIGMuaGVhZGVyVHlwZSAhPT0gSGVhZGVyVHlwZS5Sb3dIZWFkZXIgJiYgIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleC1iLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4LWIucGlubmVkSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHdvcmtzaGVldERhdGEuZGF0YVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZE93bmVyID0gd29ya3NoZWV0RGF0YS5vd25lcnMuZ2V0KHJlY29yZC5vd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTXVsdGlDb2x1bW5IZWFkZXJzID0gcmVjb3JkT3duZXIuY29sdW1ucy5zb21lKGMgPT4gIWMuc2tpcCAmJiBjLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc011bHRpQ29sdW1uSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhHcmlkUHJpbnRNdWx0aUNvbEhlYWRlcnMod29ya3NoZWV0RGF0YSwgcm93RGF0YUFyciwgcmVjb3JkLCByZWNvcmRPd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gT2JqZWN0LmtleXMod29ya3NoZWV0RGF0YS5kYXRhW2ldLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YUFyci5wdXNoKHRoaXMucHJvY2Vzc1Jvdyh3b3Jrc2hlZXREYXRhLCBpLCByZWNvcmRIZWFkZXJzLCBpc0hpZXJhcmNoaWNhbEdyaWQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUocm93RGF0YUFyci5qb2luKCcnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaEdyaWRQcmludE11bHRpQ29sSGVhZGVycyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3dEYXRhQXJyOiBhbnlbXSwgcmVjb3JkOiBJRXhwb3J0UmVjb3JkLFxuICAgICAgICBvd25lcjogSUNvbHVtbkxpc3QpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvd25lci5tYXhMZXZlbDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRMZXZlbCA9IHJlY29yZC5sZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJlY29yZExldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyZWNvcmRMZXZlbH1cImAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF4T3V0bGluZUxldmVsID0gdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPCByZWNvcmRMZXZlbCA/IHJlY29yZExldmVsIDogdGhpcy5tYXhPdXRsaW5lTGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICBsZXQgcm93ID0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9JHtvdXRsaW5lTGV2ZWx9JHtzSGlkZGVufT5gO1xuXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzRm9yTGV2ZWwgPSBvd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IChjLmxldmVsIDwgaiAmJlxuICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaikgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgbGV0IHN0YXJ0VmFsdWUgPSAwICsgcmVjb3JkLmxldmVsO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDb2wgb2YgaGVhZGVyc0ZvckxldmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wubGV2ZWwgPT09IGopIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUpICsgdGhpcy5yb3dJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnkuc2F2ZVZhbHVlKGN1cnJlbnRDb2wuaGVhZGVyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcm93ICs9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiIHM9XCIzXCIgdD1cInNcIj48dj4ke2NvbHVtblZhbHVlfTwvdj48L2M+YDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPT0gb3duZXIubWF4TGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAgPG1lcmdlQ2VsbCByZWY9XCIke2NvbHVtbkNvb3JkaW5hdGV9OmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmhlYWRlclR5cGUgPT09IEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnJvd0luZGV4ICsgb3duZXIubWF4TGV2ZWwgLSBjdXJyZW50Q29sLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBjdXJyZW50Q29sLmNvbHVtblNwYW47IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUgKyBrKSArIHRoaXMucm93SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyArPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiBzPVwiM1wiIC8+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAke2NvbHVtbkNvb3JkaW5hdGV9XCIgLz5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBjdXJyZW50Q29sLmNvbHVtblNwYW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgKz0gYDwvcm93PmA7XG4gICAgICAgICAgICByb3dEYXRhQXJyLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1Jvdyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBpOiBudW1iZXIsIGhlYWRlcnNGb3JMZXZlbDogYW55W10sIGlzSGllcmFyY2hpY2FsR3JpZDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB3b3Jrc2hlZXREYXRhLmRhdGFbaV07XG5cbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IG5ldyBBcnJheSh3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMik7XG5cbiAgICAgICAgY29uc3Qgcm93TGV2ZWwgPSByZWNvcmQubGV2ZWw7XG4gICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJvd0xldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyb3dMZXZlbH1cImAgOiAnJztcbiAgICAgICAgdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPSB0aGlzLm1heE91dGxpbmVMZXZlbCA8IHJvd0xldmVsID8gcm93TGV2ZWwgOiB0aGlzLm1heE91dGxpbmVMZXZlbDtcblxuICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgY29uc3QgcGl2b3RHcmlkQ29sdW1ucyA9IHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5nZXQodGhpcy5yb3dJbmRleCkgPz8gXCJcIjtcblxuICAgICAgICByb3dEYXRhWzBdID1cbiAgICAgICAgICAgIGA8cm93IHI9XCIke3RoaXMucm93SW5kZXh9XCIke3RoaXMucm93SGVpZ2h0fSR7b3V0bGluZUxldmVsfSR7c0hpZGRlbn0+JHtwaXZvdEdyaWRDb2x1bW5zfWA7XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IHdvcmtzaGVldERhdGEuaXNTcGVjaWFsRGF0YSA/IFtyZWNvcmQuZGF0YV0gOiBoZWFkZXJzRm9yTGV2ZWw7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBqICsgKGlzSGllcmFyY2hpY2FsR3JpZCA/IHJvd0xldmVsIDogd29ya3NoZWV0RGF0YS5pc1Bpdm90R3JpZCA/IHdvcmtzaGVldERhdGEub3duZXIubWF4Um93TGV2ZWwgOiAwKTtcblxuICAgICAgICAgICAgY29uc3QgY2VsbERhdGEgPSB0aGlzLmdldENlbGxEYXRhKHdvcmtzaGVldERhdGEsIGksIGNvbCwga2V5c1tqXSk7XG5cbiAgICAgICAgICAgIHJvd0RhdGFbaiArIDFdID0gY2VsbERhdGE7XG4gICAgICAgIH1cblxuICAgICAgICByb3dEYXRhW2tleXMubGVuZ3RoICsgMV0gPSAnPC9yb3c+JztcblxuICAgICAgICByZXR1cm4gcm93RGF0YS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENlbGxEYXRhKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW4pICsgKHRoaXMucm93SW5kZXgpO1xuICAgICAgICBjb25zdCBmdWxsUm93ID0gd29ya3NoZWV0RGF0YS5kYXRhW3Jvd107XG4gICAgICAgIGNvbnN0IGlzSGVhZGVyUmVjb3JkID0gZnVsbFJvdy50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZDtcblxuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSB3b3Jrc2hlZXREYXRhLmlzU3BlY2lhbERhdGEgP1xuICAgICAgICAgICAgZnVsbFJvdy5kYXRhIDpcbiAgICAgICAgICAgIGZ1bGxSb3cuZGF0YVtrZXldO1xuXG4gICAgICAgIGlmIChjZWxsVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBjZWxsVmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiBzPVwiMVwiLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZWRWYWx1ZSA9IGRpY3Rpb25hcnkuc2F2ZVZhbHVlKGNlbGxWYWx1ZSwgaXNIZWFkZXJSZWNvcmQpO1xuICAgICAgICAgICAgY29uc3QgaXNTYXZlZEFzU3RyaW5nID0gc2F2ZWRWYWx1ZSAhPT0gLTE7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzU2F2ZWRBc0RhdGUgPSAhaXNTYXZlZEFzU3RyaW5nICYmIGNlbGxWYWx1ZSBpbnN0YW5jZW9mIERhdGU7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGlzU2F2ZWRBc1N0cmluZyA/IHNhdmVkVmFsdWUgOiBjZWxsVmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChpc1NhdmVkQXNEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZVpvbmVPZmZzZXQgPSB2YWx1ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNvU3RyaW5nID0gKG5ldyBEYXRlKHZhbHVlIC0gdGltZVpvbmVPZmZzZXQpKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaXNvU3RyaW5nLnN1YnN0cmluZygwLCBpc29TdHJpbmcuaW5kZXhPZignLicpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IGlzU2F2ZWRBc1N0cmluZyA/IGAgdD1cInNcImAgOiBpc1NhdmVkQXNEYXRlID8gYCB0PVwiZFwiYCA6ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBpc0hlYWRlclJlY29yZCA/IGAgcz1cIjNcImAgOiBpc1NhdmVkQXNTdHJpbmcgPyAnJyA6IGlzU2F2ZWRBc0RhdGUgPyBgIHM9XCIyXCJgIDogYCBzPVwiMVwiYDtcblxuICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiJHt0eXBlfSR7Zm9ybWF0fT48dj4ke3ZhbHVlfTwvdj48L2M+YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJpbnRIZWFkZXJzKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIGhlYWRlcnNGb3JMZXZlbDogSUNvbHVtbkluZm9bXSwgaTogbnVtYmVyLCBpc1ZlcnRpY2FsOiBib29sZWFuKSB7XG4gICAgICAgIGxldCBzdGFydFZhbHVlID0gMDtcbiAgICAgICAgbGV0IHN0ciA9ICcnO1xuXG4gICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWw7XG4gICAgICAgIGxldCByb3dTdHlsZSA9IGlzSGllcmFyY2hpY2FsR3JpZCA/ICcgcz1cIjNcIicgOiAnJztcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IG93bmVyID0gd29ya3NoZWV0RGF0YS5vd25lcjtcbiAgICAgICAgY29uc3QgbWF4TGV2ZWwgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICA/IG93bmVyLm1heFJvd0xldmVsXG4gICAgICAgICAgICA6IG93bmVyLm1heExldmVsO1xuXG4gICAgICAgIGZvciAoY29uc3QgY3VycmVudENvbCBvZiBoZWFkZXJzRm9yTGV2ZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYW5MZW5ndGggPSBpc1ZlcnRpY2FsID8gY3VycmVudENvbC5yb3dTcGFuIDogY3VycmVudENvbC5jb2x1bW5TcGFuO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudENvbC5sZXZlbCA9PT0gaSkge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5Db29yZGluYXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnJvd0luZGV4XG4gICAgICAgICAgICAgICAgICAgIDogc3RhcnRWYWx1ZSArIChvd25lci5tYXhSb3dMZXZlbCA/PyAwKVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgcm93Q29vcmRpbmF0ZSA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgPyBzdGFydFZhbHVlICsgb3duZXIubWF4TGV2ZWwgKyAyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5yb3dJbmRleFxuXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjdXJyZW50Q29sLmhlYWRlciwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW4pICsgcm93Q29vcmRpbmF0ZTtcbiAgICAgICAgICAgICAgICByb3dTdHlsZSA9IGlzVmVydGljYWwgJiYgY3VycmVudENvbC5yb3dTcGFuID4gMSA/ICcgcz1cIjRcIicgOiByb3dTdHlsZTtcbiAgICAgICAgICAgICAgICBzdHIgPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiR7cm93U3R5bGV9IHQ9XCJzXCI+PHY+JHtjb2x1bW5WYWx1ZX08L3Y+PC9jPmA7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLmhhcyhyb3dDb29yZGluYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3dDb29yZGluYXRlLCB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuZ2V0KHJvd0Nvb3JkaW5hdGUpICsgc3RyKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3dDb29yZGluYXRlLCBzdHIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBzdHI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IG1heExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCA8bWVyZ2VDZWxsIHJlZj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX06YDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbC5oZWFkZXJUeXBlID09PSBIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWF4TGV2ZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXJ0VmFsdWUgKyAob3duZXIubWF4Um93TGV2ZWwgPz8gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd0Nvb3JkaW5hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG93bmVyLm1heExldmVsICsgMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2wpICsgcm93O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBzcGFuTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uICsgaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dDb29yZGluYXRlICsga1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucm93SW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbCkgKyByb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIke3Jvd1N0eWxlfSAvPmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3csIHN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNoZWV0RGF0YSArPSBzdHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAke2NvbHVtbkNvb3JkaW5hdGV9XCIgLz5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBzcGFuTGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0eWxlRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWydzdHlsZXMueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRTdHlsZXMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtib29rRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyWyd3b3JrYm9vay54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFdvcmtib29rKHdvcmtzaGVldERhdGEub3B0aW9ucy53b3Jrc2hlZXROYW1lKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRUeXBlc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc1NoYXJlZFN0cmluZ3MgPSAhd29ya3NoZWV0RGF0YS5pc0VtcHR5IHx8IHdvcmtzaGVldERhdGEub3B0aW9ucy5hbHdheXNFeHBvcnRIZWFkZXJzO1xuICAgICAgICBmb2xkZXJbJ1tDb250ZW50X1R5cGVzXS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldENvbnRlbnRUeXBlc1hNTChoYXNTaGFyZWRTdHJpbmdzLCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZXhwb3J0QXNUYWJsZSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGFyZWRTdHJpbmdzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgZGljdCA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IHNvcnRlZFZhbHVlcyA9IGRpY3QuZ2V0S2V5cygpO1xuICAgICAgICBjb25zdCBzaGFyZWRTdHJpbmdzID0gbmV3IEFycmF5PHN0cmluZz4oc29ydGVkVmFsdWVzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzb3J0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHNoYXJlZFN0cmluZ3NbZGljdC5nZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZSldID0gJzxzaT48dD4nICsgdmFsdWUgKyAnPC90Pjwvc2k+JztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRlclsnc2hhcmVkU3RyaW5ncy54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFNoYXJlZFN0cmluZ1hNTChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Quc3RyaW5nc0NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkVmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFN0cmluZ3Muam9pbignJykpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDtcbiAgICAgICAgY29uc3QgbGFzdENvbHVtbiA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW5Db3VudCAtIDEpICsgd29ya3NoZWV0RGF0YS5yb3dDb3VudDtcbiAgICAgICAgY29uc3QgYXV0b0ZpbHRlckRpbWVuc2lvbiA9ICdBMTonICsgbGFzdENvbHVtbjtcbiAgICAgICAgY29uc3QgdGFibGVEaW1lbnNpb24gPSB3b3Jrc2hlZXREYXRhLmlzRW1wdHlcbiAgICAgICAgICAgID8gJ0ExOicgKyBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uQ291bnQgLSAxKSArICh3b3Jrc2hlZXREYXRhLnJvd0NvdW50ICsgMSlcbiAgICAgICAgICAgIDogYXV0b0ZpbHRlckRpbWVuc2lvbjtcbiAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zLnNvbWUoYyA9PiBjLmV4cG9ydEluZGV4ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBoYXNVc2VyU2V0SW5kZXhcbiAgICAgICAgICAgID8gd29ya3NoZWV0RGF0YS5yb290S2V5c1xuICAgICAgICAgICAgOiB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gIWMuc2tpcClcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleClcbiAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5oZWFkZXIpO1xuXG4gICAgICAgIGxldCBzb3J0U3RyaW5nID0gJyc7XG5cbiAgICAgICAgbGV0IHRhYmxlQ29sdW1ucyA9ICc8dGFibGVDb2x1bW5zIGNvdW50PVwiJyArIGNvbHVtbkNvdW50ICsgJ1wiPic7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAgdmFsdWVzW2ldO1xuICAgICAgICAgICAgdGFibGVDb2x1bW5zICs9ICc8dGFibGVDb2x1bW4gaWQ9XCInICsgKGkgKyAxKSArICdcIiBuYW1lPVwiJyArIHZhbHVlICsgJ1wiLz4nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVDb2x1bW5zICs9ICc8L3RhYmxlQ29sdW1ucz4nO1xuXG4gICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLnNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdFeHByZXNzaW9uID0gd29ya3NoZWV0RGF0YS5zb3J0O1xuICAgICAgICAgICAgY29uc3Qgc2MgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4odmFsdWVzLmluZGV4T2Yoc29ydGluZ0V4cHJlc3Npb24uZmllbGROYW1lKSk7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBzb3J0aW5nRXhwcmVzc2lvbi5kaXIgLSAxO1xuICAgICAgICAgICAgc29ydFN0cmluZyA9IGA8c29ydFN0YXRlIHJlZj1cIkEyOiR7bGFzdENvbHVtbn1cIj48c29ydENvbmRpdGlvbiBkZXNjZW5kaW5nPVwiJHtkaXJ9XCIgcmVmPVwiJHtzY30xOiR7c2N9MTVcIi8+PC9zb3J0U3RhdGU+YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRlclsndGFibGUxLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0VGFibGVzWE1MKGF1dG9GaWx0ZXJEaW1lbnNpb24sIHRhYmxlRGltZW5zaW9uLCB0YWJsZUNvbHVtbnMsIHNvcnRTdHJpbmcpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsnc2hlZXQxLnhtbC5yZWxzJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRXb3Jrc2hlZXRSZWxzKCkpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -20,12 +20,12 @@ export class WorksheetDataDictionary {
|
|
|
20
20
|
get columnWidths() {
|
|
21
21
|
return this._columnWidths;
|
|
22
22
|
}
|
|
23
|
-
saveValue(value, isHeader) {
|
|
23
|
+
saveValue(value, isHeader, shouldSanitizeValue = true) {
|
|
24
24
|
let sanitizedValue = '';
|
|
25
25
|
const isDate = value instanceof Date;
|
|
26
26
|
const isSavedAsString = isHeader || (typeof value !== 'number' && value !== Number(value) && !Number.isFinite(value) && !isDate);
|
|
27
27
|
if (isSavedAsString) {
|
|
28
|
-
sanitizedValue =
|
|
28
|
+
sanitizedValue = shouldSanitizeValue ? ExportUtilities.sanitizeValue(value) : value;
|
|
29
29
|
if (this._dictionary[sanitizedValue] === undefined) {
|
|
30
30
|
this._dictionary[sanitizedValue] = this._counter++;
|
|
31
31
|
this.dirtyKeyCollections();
|
|
@@ -41,7 +41,7 @@ export class WorksheetDataDictionary {
|
|
|
41
41
|
return isSavedAsString ? this.getSanitizedValue(sanitizedValue) : -1;
|
|
42
42
|
}
|
|
43
43
|
getValue(value) {
|
|
44
|
-
return this.getSanitizedValue(
|
|
44
|
+
return this.getSanitizedValue(ExportUtilities.sanitizeValue(value));
|
|
45
45
|
}
|
|
46
46
|
getSanitizedValue(sanitizedValue) {
|
|
47
47
|
return this._dictionary[sanitizedValue];
|
|
@@ -69,23 +69,10 @@ export class WorksheetDataDictionary {
|
|
|
69
69
|
}
|
|
70
70
|
return this._context;
|
|
71
71
|
}
|
|
72
|
-
sanitizeValue(value) {
|
|
73
|
-
if (ExportUtilities.hasValue(value) === false) {
|
|
74
|
-
return '';
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
const stringValue = String(value);
|
|
78
|
-
return stringValue.replace(/&/g, '&')
|
|
79
|
-
.replace(/</g, '<')
|
|
80
|
-
.replace(/>/g, '>')
|
|
81
|
-
.replace(/"/g, '"')
|
|
82
|
-
.replace(/'/g, ''');
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
72
|
dirtyKeyCollections() {
|
|
86
73
|
this._keysAreValid = false;
|
|
87
74
|
}
|
|
88
75
|
}
|
|
89
76
|
WorksheetDataDictionary.DEFAULT_FONT = '11pt Calibri';
|
|
90
77
|
WorksheetDataDictionary.TEXT_PADDING = 5;
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NoZWV0LWRhdGEtZGljdGlvbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy9leGNlbC93b3Jrc2hlZXQtZGF0YS1kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RSxjQUFjO0FBQ2QsTUFBTSxPQUFPLHVCQUF1QjtJQW1CaEMsWUFBWSxXQUFtQixFQUFFLFdBQW1CLEVBQUUsZ0JBQTBCO1FBZnpFLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBZXpCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBUyxXQUFXLENBQUMsQ0FBQztRQUVwRCxJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hDO2FBQU07WUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO1NBQ3pDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFVLEVBQUUsUUFBaUIsRUFBRSxzQkFBK0IsSUFBSTtRQUMvRSxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsS0FB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bnRlbnQiOlsiaW1wb3J0IHsgRXhwb3J0VXRpbGl0aWVzIH0gZnJvbSAnLi4vZXhwb3J0ZXItY29tbW9uL2V4cG9ydC11dGlsaXRpZXMnO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtzaGVldERhdGFEaWN0aW9uYXJ5IHtcbiAgICBwcml2YXRlIHN0YXRpYyBERUZBVUxUX0ZPTlQgPSAnMTFwdCBDYWxpYnJpJztcbiAgICBwcml2YXRlIHN0YXRpYyBURVhUX1BBRERJTkcgPSA1O1xuXG4gICAgcHVibGljIGhhc051bWJlclZhbHVlcyA9IGZhbHNlO1xuICAgIHB1YmxpYyBoYXNEYXRlVmFsdWVzID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc3RyaW5nc0NvdW50OiBudW1iZXI7XG5cbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5OiBhbnk7XG4gICAgcHJpdmF0ZSBfd2lkdGhzRGljdGlvbmFyeTogYW55O1xuXG4gICAgcHJpdmF0ZSBfa2V5czogc3RyaW5nW107XG4gICAgcHJpdmF0ZSBfa2V5c0FyZVZhbGlkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBfY291bnRlcjogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NvbHVtbldpZHRoczogbnVtYmVyW107XG4gICAgcHJpdmF0ZSBfY29udGV4dDogYW55O1xuXG4gICAgY29uc3RydWN0b3IoY29sdW1uQ291bnQ6IG51bWJlciwgY29sdW1uV2lkdGg6IG51bWJlciwgY29sdW1uV2lkdGhzTGlzdDogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy5fZGljdGlvbmFyeSA9IHt9O1xuICAgICAgICB0aGlzLl93aWR0aHNEaWN0aW9uYXJ5ID0ge307XG4gICAgICAgIHRoaXMuX2NvdW50ZXIgPSAwO1xuICAgICAgICB0aGlzLmRpcnR5S2V5Q29sbGVjdGlvbnMoKTtcblxuICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSBuZXcgQXJyYXk8bnVtYmVyPihjb2x1bW5Db3VudCk7XG5cbiAgICAgICAgaWYgKGNvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMuZmlsbChjb2x1bW5XaWR0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSBjb2x1bW5XaWR0aHNMaXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJpbmdzQ291bnQgPSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uV2lkdGhzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uV2lkdGhzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlVmFsdWUodmFsdWU6IGFueSwgaXNIZWFkZXI6IGJvb2xlYW4sIHNob3VsZFNhbml0aXplVmFsdWU6IGJvb2xlYW4gPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHNhbml0aXplZFZhbHVlID0gJyc7XG4gICAgICAgIGNvbnN0IGlzRGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcbiAgICAgICAgY29uc3QgaXNTYXZlZEFzU3RyaW5nID0gaXNIZWFkZXIgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgJiYgdmFsdWUgIT09IE51bWJlcih2YWx1ZSkgJiYgIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgJiYgIWlzRGF0ZSk7XG5cbiAgICAgICAgaWYgKGlzU2F2ZWRBc1N0cmluZykge1xuICAgICAgICAgICAgc2FuaXRpemVkVmFsdWUgPSBzaG91bGRTYW5pdGl6ZVZhbHVlID8gRXhwb3J0VXRpbGl0aWVzLnNhbml0aXplVmFsdWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kaWN0aW9uYXJ5W3Nhbml0aXplZFZhbHVlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGljdGlvbmFyeVtzYW5pdGl6ZWRWYWx1ZV0gPSB0aGlzLl9jb3VudGVyKys7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXJ0eUtleUNvbGxlY3Rpb25zKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RyaW5nc0NvdW50ICsrO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5oYXNEYXRlVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFzTnVtYmVyVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1NhdmVkQXNTdHJpbmcgPyB0aGlzLmdldFNhbml0aXplZFZhbHVlKHNhbml0aXplZFZhbHVlKSA6IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2FuaXRpemVkVmFsdWUoRXhwb3J0VXRpbGl0aWVzLnNhbml0aXplVmFsdWUodmFsdWUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2FuaXRpemVkVmFsdWUoc2FuaXRpemVkVmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWN0aW9uYXJ5W3Nhbml0aXplZFZhbHVlXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0S2V5cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghdGhpcy5fa2V5c0FyZVZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlzID0gT2JqZWN0LmtleXModGhpcy5fZGljdGlvbmFyeSk7XG4gICAgICAgICAgICB0aGlzLl9rZXlzQXJlVmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUZXh0V2lkdGgodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl93aWR0aHNEaWN0aW9uYXJ5W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBtZXRyaWNzID0gY29udGV4dC5tZWFzdXJlVGV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl93aWR0aHNEaWN0aW9uYXJ5W3ZhbHVlXSA9IG1ldHJpY3Mud2lkdGggKyBXb3Jrc2hlZXREYXRhRGljdGlvbmFyeS5URVhUX1BBRERJTkc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGhzRGljdGlvbmFyeVt2YWx1ZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250ZXh0KCk6IGFueSB7XG4gICAgICAgIGlmICghdGhpcy5fY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0LmZvbnQgPSBXb3Jrc2hlZXREYXRhRGljdGlvbmFyeS5ERUZBVUxUX0ZPTlQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGV4dDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRpcnR5S2V5Q29sbGVjdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleXNBcmVWYWxpZCA9IGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|