@rivet-health/design-system 25.5.0 → 25.6.0
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/table/table/state.mjs +9 -1
- package/esm2020/lib/table/table/table/table.component.mjs +4 -3
- package/fesm2015/rivet-health-design-system.mjs +9 -3
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +10 -2
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/table/table/state.d.ts +2 -0
- package/package.json +1 -1
|
@@ -69,6 +69,8 @@ export var RivTable;
|
|
|
69
69
|
next: getNextPage(s),
|
|
70
70
|
pageCount: getPageCount(s),
|
|
71
71
|
showControls: getShowPaginationControls(s),
|
|
72
|
+
pageRowStart: getPageRowStart(s),
|
|
73
|
+
pageRowEnd: getPageRowEnd(s),
|
|
72
74
|
},
|
|
73
75
|
noSearchColumnsSelected: getSearchColumnsSelectedState(s, 'none'),
|
|
74
76
|
},
|
|
@@ -324,6 +326,12 @@ function getShowPaginationControls(state) {
|
|
|
324
326
|
}
|
|
325
327
|
return (state.result.totalMatchingRowCount > Math.min(...[...RivTable.pageSizes]));
|
|
326
328
|
}
|
|
329
|
+
function getPageRowStart(state) {
|
|
330
|
+
return state.query.pagination.page * state.query.pagination.pageSize + 1;
|
|
331
|
+
}
|
|
332
|
+
function getPageRowEnd(state) {
|
|
333
|
+
return Math.min((state.query.pagination.page + 1) * state.query.pagination.pageSize, state.result.totalMatchingRowCount);
|
|
334
|
+
}
|
|
327
335
|
function getAllColumns(state, supportedColumns, columnNameMap) {
|
|
328
336
|
// If the table offers more columns than the user has configuration settings
|
|
329
337
|
// for (or if the user has no configuration settings yet), we'll append them
|
|
@@ -1027,4 +1035,4 @@ function getAllRowsFromResult(result) {
|
|
|
1027
1035
|
return result.currentPageData;
|
|
1028
1036
|
}
|
|
1029
1037
|
}
|
|
1030
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBRUwsV0FBVyxFQUNYLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxLQUFXLFFBQVEsQ0EwdkJ4QjtBQTF2QkQsV0FBaUIsUUFBUTtJQTBDVixrQkFBUyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFVLENBQUM7SUF3T3JELG1EQUFtRDtJQUV0Qyx3QkFBZSxHQUFHO1FBQzdCLFVBQVU7UUFDVixVQUFVO1FBQ1YsTUFBTTtRQUNOLE1BQU07UUFDTixVQUFVO1FBQ1YsUUFBUTtRQUNSLFdBQVc7S0FDSCxDQUFDO0lBb0lYLFNBQWdCLGFBQWEsQ0FNM0IsTUFBMEIsRUFDMUIsT0FBK0IsRUFDL0IsZ0JBQXdCLEVBQ3hCLE9BQW9DO1FBRXBDLGtDQUFrQztRQUNsQyxNQUFNLFlBQVksR0FBMEI7WUFDMUMsS0FBSyxFQUFFO2dCQUNMLEtBQUssRUFBRSxJQUFJO2dCQUNYLE1BQU0sRUFBRSxFQUFFO2dCQUNWLGFBQWEsRUFBRSxJQUFJLEdBQUcsQ0FDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUNuRDtn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Q0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3RFO1NBQU07UUFDTCxPQUFPLE1BQU0sQ0FBQyxlQUFlLENBQUM7S0FDL0I7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbXMsIFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IEZ1c2UsIHsgSUZ1c2VPcHRpb25zIH0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAsXG4gIGRpZmZlcmVuY2UsXG4gIGlzRXF1YWwsXG4gIG9yZGVyQnksXG4gIHJhbmdlLFxuICB1bmlvbixcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIENvbm5lY3RhYmxlLFxuICBjb25uZWN0YWJsZSxcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZVNjYW4sXG4gIE9ic2VydmFibGUsXG4gIFJlcGxheVN1YmplY3QsXG4gIHNjYW4sXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcblxuZXhwb3J0IG5hbWVzcGFjZSBSaXZUYWJsZSB7XG4gIGV4cG9ydCB0eXBlIFJvdyA9IHsgaWQ6IHN0cmluZyB8IG51bWJlciB9O1xuICBleHBvcnQgdHlwZSBDb2x1bW4gPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIEZpbHRlcnMgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIEdyb3VwID0geyBrZXk6IHN0cmluZyB8IG51bWJlciB9O1xuXG4gIC8qKlxuICAgKiBSaXZUYWJsZSdzIHN0YXRlIGFuZCB1c2VyIGFjdGlvbnMgYXJlIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIGNodW5rczpcbiAgICpcbiAgICogLSBRdWVyeSAoZm9yIHRoaW5ncyBsaWtlIGZpbHRlcnMsIHBhZ2luYXRpb24sIHNlYXJjaCwgZXRjLilcbiAgICogLSBMb2FkaW5nIChmb3Igd2hldGhlciBvciBub3QgdGhlIHRhYmxlIGlzIGxvYWRpbmcgcm93IGRhdGEpXG4gICAqIC0gUmVzdWx0IChmb3IgdGhlIHJvdyBkYXRhIGl0c2VsZilcbiAgICogLSBEaXNwbGF5IChmb3IgdGhpbmdzIGxpa2UgY29sdW1uIGNvbmZpZ3VyYXRpb24pXG4gICAqIC0gU2VsZWN0aW9uIChmb3IgdHJhY2tpbmcgdGhlIHVzZXIncyByb3cgc2VsZWN0aW9ucylcbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBkYXRhIGZsb3cgaXMgdW5pZGlyZWN0aW9uYWw6IHRoZSBVSSBpc3N1ZXMgYWN0aW9ucywgd2hpY2hcbiAgICogYWZmZWN0IHRoZSBzdGF0ZSwgYW5kIHRoZSBzdGF0ZSBnZXRzIHBhc3NlZCBiYWNrIHRvIHRoZSBVSSBmb3IgZGlzcGxheS5cbiAgICpcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiAgVUkgIOKXhOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilJggICAgICAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pSCXG4gICAqIOKUgiAgQWN0aW9ucyAg4pSCICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSQXG4gICAqIOKUgiAgU3RhdGUgcmVkdWNlciAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBGcm9tIHRoZSBjb3JlIHN0YXRlLCBjYWxjdWxhdGVkIHN0YXRlIGlzIGRlcml2ZWQgYW5kIGFkZGVkIHRvIHRoZSBjb3JlXG4gICAqIHN0YXRlIChlLmcuLCBmcm9tIHRoZSByYXcgc2VsZWN0aW9uIHN0YXRlIHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWxsIHRoZSByb3dzIG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UgYXJlIHNlbGVjdGVkLCBldGMuKS5cbiAgICovXG5cbiAgLy8vLy8vLy8vLy9cbiAgLy8gUXVlcnkgLy9cbiAgLy8vLy8vLy8vLy9cblxuICAvLyBRdWVyeSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIE9yZGVyRGlyZWN0aW9uID0gJ2FzYycgfCAnZGVzYyc7XG4gIGV4cG9ydCBjb25zdCBwYWdlU2l6ZXMgPSBbMjUsIDUwLCAxMDAsIDI1MF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFF1ZXJ5PEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBvcmRlcjoge1xuICAgICAgZGlyZWN0aW9uOiBPcmRlckRpcmVjdGlvbjtcbiAgICAgIGNvbHVtbjogQztcbiAgICB9IHwgbnVsbDtcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBzZWFyY2hDb2x1bW5zOiBNYXA8QywgYm9vbGVhbj47XG4gICAgZmlsdGVyczogRiB8IG51bGw7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB9O1xuICAgIGdyb3VwaW5nOiB7XG4gICAgICB2aWV3TW9yZUtleTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGdyb3Vwc1BlclBhZ2U6IG51bWJlcjtcbiAgICAgIGNvdW50UGVyR3JvdXA6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFF1ZXJ5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBRdWVyeUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZCcgfVxuICAgIHwgeyB0eXBlOiAnb3JkZXJDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnb3JkZXInXSB9XG4gICAgfCB7IHR5cGU6ICdvcmRlckNvbHVtblRvZ2dsZSc7IGNvbHVtbjogQyB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoJ10gfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ29sdW1uc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2hDb2x1bW5zJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydmaWx0ZXJzJ10gfVxuICAgIHwgeyB0eXBlOiAncGFnaW5hdGlvbkNoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydwYWdpbmF0aW9uJ10gfVxuICAgIHwgeyB0eXBlOiAnZ3JvdXBpbmdDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnZ3JvdXBpbmcnXSB9XG4gICAgfCB7IHR5cGU6ICduZXh0UGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncGFnZUNoYW5nZSc7IHBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdwYWdlU2l6ZUNoYW5nZSc7IHNpemU6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdncm91cHNQZXJQYWdlQ2hhbmdlJzsgZ3JvdXBzUGVyUGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOyBjb3VudFBlckdyb3VwOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAndmlld01vcmVLZXlDaGFuZ2UnOyB2aWV3TW9yZUtleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnIH07XG5cbiAgLy8vLy8vLy8vL1xuICAvLyBMb2FkIC8vXG4gIC8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBMb2FkID0ge1xuICAgIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vL1xuICAvLyBSZXN1bHQgLy9cbiAgLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgUmVzdWx0PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZC5cbiAgICAgKi9cbiAgICBjdXJyZW50UGFnZURhdGE6IFJbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU3ViR3JvdXBSZXN1bHQ8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IFJlc3VsdDxSPiAmIHtcbiAgICAvKipcbiAgICAgKiBBbnkgb3RoZXIgcmVsZXZhbnQgZ3JvdXAgZGF0YSwgdXNlZCBmb3IgdGhlIHN1YmhlYWRlclxuICAgICAqL1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZCwgc3BsaXQgaW50byBncm91cHNcbiAgICAgKi9cbiAgICBncm91cFJlc3VsdHM6IFN1Ykdyb3VwUmVzdWx0PFIsIEc+W107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBncm91cHMgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxHcm91cENvdW50OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBTb3VyY2U8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gKFxuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPixcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248UiwgQywgRiwgRz4sXG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPj47XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBEaXNwbGF5IC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvLyBEaXNwbGF5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uU2V0dGluZ3M8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAgbmFtZTogQztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgcGlubmVkOiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBEaXNwbGF5PEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGNvbHVtblNldHRpbmdzOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICB9O1xuXG4gIC8vIERpc3BsYXkgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIERpc3BsYXlBY3Rpb248QyBleHRlbmRzIENvbHVtbj4gPVxuICAgIHwgeyB0eXBlOiAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOyBwYXlsb2FkOiBEaXNwbGF5PEM+Wydjb2x1bW5TZXR0aW5ncyddIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtblBpbkNoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcGlubmVkOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnO1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBmcmVlemU6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5PcmRlckNoYW5nZSc7XG4gICAgICAgIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgICAgICAgbmV3SW5kZXg6IG51bWJlcjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJztcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbldpZHRoQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwcmVmZXJyZWRXaWR0aDogbnVtYmVyIHwgJ2F1dG8nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFNlbGVjdGlvbiAvL1xuICAvLy8vLy8vLy8vLy8vLy9cblxuICAvLyBTZWxlY3Rpb24gc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb248UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IFJbJ2lkJ10gfCBudWxsO1xuICB9ICYgKFxuICAgIHwge1xuICAgICAgICBtb2RlOiAnaW5jbHVkZSc7XG4gICAgICAgIGluY2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdleGNsdWRlJztcbiAgICAgICAgZXhjbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgKTtcblxuICAvLyBTZWxlY3Rpb24gYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjdGlvbjxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfT4gPVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogU2VsZWN0aW9uPFI+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnZ3JvdXBTZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBSb3dHcm91cDxSLCBHPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3Jvd1NlbGVjdGVkQ2hhbmdlJztcbiAgICAgICAgaWQ6IFJbJ2lkJ107XG4gICAgICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgICAgICBjb250aWd1b3VzOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncGFnZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2FsbFNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNsZWFyJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvLyBDb21iaW5lZCBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvcmVTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgcXVlcnk6IFF1ZXJ5PEMsIEY+O1xuICAgIGxvYWQ6IExvYWQ7XG4gICAgcmVzdWx0OiBSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPjtcbiAgICBkaXNwbGF5OiBEaXNwbGF5PEM+O1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uPFI+O1xuICB9O1xuXG4gIC8vIENvbWJpbmVkIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBBY3Rpb248XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gUXVlcnlBY3Rpb248QywgRj4gfCBEaXNwbGF5QWN0aW9uPEM+IHwgU2VsZWN0aW9uQWN0aW9uPFIsIEc+O1xuXG4gIC8vIEZ1bGwgc3RhdGUgKGNvcmUgc3RhdGUgcGx1cyBwdXJlIGRlcml2YXRpb25zKSAvL1xuXG4gIGV4cG9ydCBjb25zdCBDb2x1bW5EYXRhVHlwZXMgPSBbXG4gICAgJ2FkdmFuY2VkJyxcbiAgICAnY3VycmVuY3knLFxuICAgICdkYXRlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvbmdUZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnc2hvcnRUZXh0JyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPSAodHlwZW9mIENvbHVtbkRhdGFUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZGVmYXVsdFBpbm5lZD86IGJvb2xlYW47XG4gICAgY2xpY2tQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XG4gICAgY2xpY2tTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBSb3dMaW5rID0gRXh0ZXJuYWxSb3dMaW5rIHwgSW50ZXJuYWxSb3dMaW5rO1xuICBleHBvcnQgdHlwZSBGdWxsUm93PFIgZXh0ZW5kcyBSb3c+ID0gUiAmIHtcbiAgICByb3dMaW5rOiBSb3dMaW5rIHwgbnVsbDtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBSb3dHcm91cDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICBzZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgICBncm91cERhdGE6IEc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEZ1bGxDb2x1bW48QyBleHRlbmRzIENvbHVtbj4gPSBDb2x1bW5TZXR0aW5nczxDPiAmXG4gICAgQ29sdW1uTWV0YWRhdGEgJiB7XG4gICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgbGVmdDogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGFsaWdubWVudDogQ29sdW1uQWxpZ25tZW50O1xuICAgIH07XG4gIGV4cG9ydCB0eXBlIE11bHRpU2VsZWN0aW9uU3RhdGUgPSBib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGUnO1xuXG4gIGV4cG9ydCB0eXBlIENzdkNlbGxGb3JtYXR0ZXI8UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93OiBSLFxuICAgIGNvbHVtbjogRnVsbENvbHVtbjxDPixcbiAgKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIGV4cG9ydCB0eXBlIENzdlJvdyA9IHN0cmluZ1tdO1xuICBleHBvcnQgdHlwZSBDc3YgPSBDc3ZSb3dbXTtcbiAgZXhwb3J0IHR5cGUgQ3N2TW9kZSA9ICdmdWxsJyB8ICdzZWxlY3Rpb24nO1xuICBleHBvcnQgdHlwZSBDc3ZPdXRwdXQgPVxuICAgIHwgeyBsb2FkaW5nOiB0cnVlOyBkYXRhOiBudWxsIH1cbiAgICB8IHsgbG9hZGluZzogZmFsc2U7IGRhdGE6IENzdiB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtbk5hbWVNYXA8QyBleHRlbmRzIENvbHVtbj4gPSBNYXA8QywgQyB8IHN0cmluZz47XG5cbiAgZXhwb3J0IHR5cGUgRnVsbFN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiAmIHtcbiAgICBxdWVyeToge1xuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBwcmV2aW91czogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZXM6IG51bWJlcltdO1xuICAgICAgICBuZXh0OiBudW1iZXIgfCBudWxsO1xuICAgICAgICBwYWdlQ291bnQ6IG51bWJlcjtcbiAgICAgICAgc2hvd0NvbnRyb2xzOiBib29sZWFuO1xuICAgICAgfTtcbiAgICAgIG5vU2VhcmNoQ29sdW1uc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIH07XG4gICAgcmVzdWx0OlxuICAgICAgfCB7XG4gICAgICAgICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgICAgICAgIHJvd3NBc0dyb3VwOiBSb3dHcm91cDxSLCBHPjtcbiAgICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZTtcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBjb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICBhbGxDb2x1bW5zOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgICBzZWxlY3Rpb246IHtcbiAgICAgIGFsbG93U2VsZWN0aW9uOiBib29sZWFuO1xuICAgICAgaXNBbGxTZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICAgIHNlbGVjdGVkQ291bnQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuYWdlciBpcyB3aGF0IHNldHMgdXAgdGhlIGluaXRpYWwgc3RhdGUgYW5kIHRyYW5zbGF0ZXMgdXNlciBhY3Rpb25zXG4gICAqIChsaWtlIHBhZ2luYXRpb24gb3IgZmlsdGVyIGNoYW5nZXMsIGV0Yy4pIGludG8gbmV3IHJvdyBkYXRhIGJ5IGNhbGxpbmcgdGhlXG4gICAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IGFsc28gYXVnbWVudHMgdGhlIGNvcmUgc3RhdGUgd2l0aCBhZGRpdGlvbmFsIGRlcml2ZWRcbiAgICogc3RhdGUuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPFIsIEMsIEYsIEc+PjtcbiAgICBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICByb3dMaW5rPzogKHJvdzogUikgPT4gUm93TGluaztcbiAgICBjc3ZDZWxsRm9ybWF0dGVyPzogQ3N2Q2VsbEZvcm1hdHRlcjxSLCBDPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gICAgYWxsb3dTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIGRlZmF1bHRDb2x1bW5TdGF0ZT86IENvbHVtblNldHRpbmdzPEM+W107XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIHNvdXJjZTogU291cmNlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxSLCBDLCBGLCBHPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGLCBHPiB7XG4gICAgLy8gU2V0IHVwIHRoZSBpbml0aWFsIHRhYmxlIHN0YXRlLlxuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoXG4gICAgICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmtleXMoKSkubWFwKGtleSA9PiBba2V5LCB0cnVlXSksXG4gICAgICAgICksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICB2aWV3TW9yZUtleTogbnVsbCxcbiAgICAgICAgICBncm91cHNQZXJQYWdlOiA1LFxuICAgICAgICAgIGNvdW50UGVyR3JvdXA6IDEwLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxvYWQ6IHsgbG9hZGluZzogZmFsc2UsIGVycm9yOiBudWxsIH0sXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBbXSxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IFtdLFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz4gPSBuZXcgTWFwPEMsIEMgfCBzdHJpbmc+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBtZXRhZGF0YS5kaXNwbGF5TmFtZSA/PyBrZXksXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtblN0YXRlID1cbiAgICAgIG9wdGlvbnM/LmRlZmF1bHRDb2x1bW5TdGF0ZSA/P1xuICAgICAgZGVmYXVsdGVkSW5pdGlhbFN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3M7XG5cbiAgICAvLyBXaXJlIHVwIHJlZHVjZWQgc3RhdGUgZnJvbSBhY3Rpb25zIGFuZCBpbml0aWFsIHN0YXRlLlxuICAgIGNvbnN0IGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPFIsIEMsIEYsIEc+PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgY29yZVN0YXRlOiBPYnNlcnZhYmxlPENvcmVTdGF0ZTxSLCBDLCBGLCBHPj4gPSBhY3Rpb25zLnBpcGUoXG4gICAgICBtZXJnZVNjYW4oXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PlxuICAgICAgICAgIGZyb20oXG4gICAgICAgICAgICByZWR1Y2UoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUsXG4gICAgICAgIDEsXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcCgoczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+ID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0ZVdpdGhvdXRSZXN1bHQ6IE9taXQ8XG4gICAgICAgICAgICBGdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgICAgICAgICAncmVzdWx0JyB8ICdpc0dyb3VwZWQnXG4gICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4ucy5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzOiBnZXRQcmV2aW91c1BhZ2UocyksXG4gICAgICAgICAgICAgICAgcGFnZXM6IGdldFBhZ2VzKHMpLFxuICAgICAgICAgICAgICAgIG5leHQ6IGdldE5leHRQYWdlKHMpLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogZ2V0UGFnZUNvdW50KHMpLFxuICAgICAgICAgICAgICAgIHNob3dDb250cm9sczogZ2V0U2hvd1BhZ2luYXRpb25Db250cm9scyhzKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbm9TZWFyY2hDb2x1bW5zU2VsZWN0ZWQ6IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHMsICdub25lJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgICAuLi5zLmRpc3BsYXksXG4gICAgICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVDb2x1bW5zKFxuICAgICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM/LmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBhbGxDb2x1bW5zOiBnZXRBbGxDb2x1bW5zKHMsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBnZXRaZXJvU3RhdGVNZXNzYWdlKHMsIHBsdXJhbEVudGl0eU5hbWUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgYWxsb3dTZWxlY3Rpb246ICEhb3B0aW9ucz8uYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgICAgIGlzQWxsU2VsZWN0ZWQ6IGlzQWxsU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDogaXNDdXJyZW50UGFnZVNlbGVjdGVkKHMpLFxuICAgICAgICAgICAgICBzZWxlY3RlZENvdW50OiBzZWxlY3RlZENvdW50KHMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGNvbW1vblJlc3VsdERhdGE6IHtcbiAgICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICAgIGNzdkZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgfSA9IHtcbiAgICAgICAgICAgIGNzdkRhdGE6IGFzeW5jIGZ1bmN0aW9uKiAobW9kZSA9ICdmdWxsJykge1xuICAgICAgICAgICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgICAgICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBzLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29uc3QgZnVsbENvbHVtbnMgPSByZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBkYXRhOiBDc3YgPSBbXTtcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKFxuICAgICAgICAgICAgICAgIGZ1bGxDb2x1bW5zLm1hcCgoeyBuYW1lIH0pID0+IGNvbHVtbk5hbWVNYXAuZ2V0KG5hbWUpID8/IG5hbWUpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBnZXRBbGxSb3dzRnJvbVJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnc2VsZWN0aW9uJyAmJiAhaXNSb3dTZWxlY3RlZChzLCByZWNvcmQuaWQpKVxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBmdWxsQ29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB5aWVsZCB7IGxvYWRpbmc6IGZhbHNlLCBkYXRhIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3N2RmlsZW5hbWU6XG4gICAgICAgICAgICAgIChvcHRpb25zPy5jc3ZGaWxlQmFzZW5hbWU/LnNsaWNlKDAsIDIwMCkgPz8gcGx1cmFsRW50aXR5TmFtZSkgK1xuICAgICAgICAgICAgICAnLmNzdicsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChpc0dyb3VwUmVzdWx0KHMucmVzdWx0KSkge1xuICAgICAgICAgICAgY29uc3Qgcm93R3JvdXBzID0gcy5yZXN1bHQuZ3JvdXBSZXN1bHRzLm1hcChncm91cCA9PiAoe1xuICAgICAgICAgICAgICByb3dzOiBncm91cC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnJvdyxcbiAgICAgICAgICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rID8gb3B0aW9ucy5yb3dMaW5rKHJvdykgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBpc1Jvd1NlbGVjdGVkKHMsIHJvdy5pZCksXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGlzR3JvdXBTZWxlY3RlZChzLCBncm91cCksXG4gICAgICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZ3JvdXAudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgICAgICBncm91cERhdGE6IGdyb3VwLmdyb3VwRGF0YSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlV2l0aG91dFJlc3VsdCxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5yZXN1bHQsXG4gICAgICAgICAgICAgICAgLi4uY29tbW9uUmVzdWx0RGF0YSxcbiAgICAgICAgICAgICAgICBpc0dyb3VwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgcm93R3JvdXBzLFxuICAgICAgICAgICAgICAgIHJvd3M6IHJvd0dyb3Vwcy5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLnJvd3MpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IHMucmVzdWx0LmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnJvdyxcbiAgICAgICAgICAgICAgcm93TGluazogb3B0aW9ucz8ucm93TGluayA/IG9wdGlvbnMucm93TGluayhyb3cpIDogbnVsbCxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlV2l0aG91dFJlc3VsdCxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5yZXN1bHQsXG4gICAgICAgICAgICAgICAgLi4uY29tbW9uUmVzdWx0RGF0YSxcbiAgICAgICAgICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgICAgICAgcm93c0FzR3JvdXA6IHtcbiAgICAgICAgICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IHJvd3MubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBEYXRhOiB7IGtleTogJycgfSBhcyBHLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNjYW4oKHN0YWJsZSwgbmV3U3RhdGUpID0+IHN0YWJsZVN0YXRlKHN0YWJsZSwgbmV3U3RhdGUpKSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBzdGF0ZS5jb25uZWN0KCk7XG5cbiAgICAvLyBMb2FkIGluaXRpYWwgdGFibGUgcm93IGRhdGEuXG4gICAgYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuXG4gICAgcmV0dXJuIHsgYWN0aW9ucywgc3RhdGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3N0IHRhYmxlcyB1c2UgcmVtb3RlIGJhY2tlbmRzIHRvIGZldGNoIGRhdGEgYXN5bmNocm9ub3VzbHksIGJ1dCBhblxuICAgKiBpbi1tZW1vcnkgc291cmNlIGlzIHVzZWZ1bCBmb3Igc21hbGwgZGF0YXNldHMsIHdoZW4gUml2VGFibGUgZmVhdHVyZXMgbGlrZVxuICAgKiBvcmRlcmluZyBhbmQgcGFnaW5hdGlvbiBhcmUgZGVzaXJlZC5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSIGV4dGVuZHMgUm93PiA9IE9taXQ8XG4gICAgQ29sdW1uTWV0YWRhdGEsXG4gICAgJ29yZGVyYWJsZSdcbiAgPiAmIHsgb3JkZXJLZXk/OiBrZXlvZiBSIH07XG5cbiAgZXhwb3J0IHR5cGUgSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSBNYW5hZ2VyT3B0aW9uczxSLCBDLCBGLCBHPiAmIHtcbiAgICBmdXNlT3B0aW9ucz86IElGdXNlT3B0aW9uczxSPjtcbiAgICBmaWx0ZXI/OiAoZmlsdGVyczogRiB8IG51bGwsIHJvdzogUikgPT4gYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5NZW1vcnlNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgPihcbiAgICBmZXRjaERhdGFzZXQ6ICgpID0+IFByb21pc2U8UltdPiB8IFJbXSxcbiAgICBjb2x1bW5zOiBNYXA8QywgSW5NZW1vcnlDb2x1bW5NZXRhZGF0YTxSPj4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEY+IHtcbiAgICBsZXQgZGF0YTogUltdO1xuICAgIGxldCBmdXNlOiBGdXNlPFI+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8UiwgQywgRj4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8vRm9yIGluTWVtb3J5TWFuYWdlcnMgdGhhdCBkbyBub3QgdXRpbGl6ZSBzZWFyY2hDb2x1bW5zLFxuICAgICAgLy93ZSBkbyBub3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlaXIgZnVzZU9wdGlvbnNcbiAgICAgIGlmIChtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdzZWFyY2hDb2x1bW5zQ2hhbmdlJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIHtcbiAgICAgICAgICAuLi5vcHRpb25zPy5mdXNlT3B0aW9ucyxcbiAgICAgICAgICBrZXlzOiBBcnJheS5mcm9tKHF1ZXJ5LnNlYXJjaENvbHVtbnMuZW50cmllcygpKVxuICAgICAgICAgICAgLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5tYXAoKFtrZXksIF9dKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtbktleSA9IGNvbHVtbnMuZ2V0KGtleSk7XG4gICAgICAgICAgICAgIHJldHVybiAoY29sdW1uS2V5Py5vcmRlcktleSBhcyBDKSB8fCBrZXk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBvcmRlckNvbHVtbjoga2V5b2YgUiB8IHVuZGVmaW5lZCA9IHF1ZXJ5Lm9yZGVyXG4gICAgICAgID8gY29sdW1ucy5nZXQocXVlcnkub3JkZXIuY29sdW1uKT8ub3JkZXJLZXlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBvcmRlcmVkID0gcXVlcnkuc2VhcmNoXG4gICAgICAgID8gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKVxuICAgICAgICA6IHF1ZXJ5Lm9yZGVyICYmIG9yZGVyQ29sdW1uXG4gICAgICAgID8gb3JkZXJCeShkYXRhLCBvcmRlckNvbHVtbiwgcXVlcnkub3JkZXIuZGlyZWN0aW9uKVxuICAgICAgICA6IGRhdGE7XG4gICAgICBjb25zdCBmaWx0ZXIgPSBvcHRpb25zPy5maWx0ZXI7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlclxuICAgICAgICA/IG9yZGVyZWQuZmlsdGVyKHJvdyA9PiBmaWx0ZXIocXVlcnkuZmlsdGVycywgcm93KSlcbiAgICAgICAgOiBvcmRlcmVkO1xuICAgICAgY29uc3Qgc3RhcnRJZHggPSBxdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplICogcXVlcnkucGFnaW5hdGlvbi5wYWdlO1xuICAgICAgY29uc3QgZW5kSWR4ID0gc3RhcnRJZHggKyBxdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgICAgY29uc3QgcGFnaW5hdGVkID0gZmlsdGVyZWQuc2xpY2Uoc3RhcnRJZHgsIGVuZElkeCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjdXJyZW50UGFnZURhdGE6IHBhZ2luYXRlZCxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBmaWx0ZXJlZC5sZW5ndGgsXG4gICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgY29sdW1uTWV0YWRhdGE6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4gPSBuZXcgTWFwKFxuICAgICAgWy4uLmNvbHVtbnMuZW50cmllcygpXS5tYXAoKFtuYW1lLCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAgbmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIG9yZGVyYWJsZTogISFtZXRhZGF0YS5vcmRlcktleSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogbWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbWluV2lkdGg6IG1ldGFkYXRhLm1pbldpZHRoLFxuICAgICAgICAgIGRhdGFUeXBlOiBtZXRhZGF0YS5kYXRhVHlwZSxcbiAgICAgICAgICBkZWZhdWx0UGlubmVkOiBtZXRhZGF0YS5kZWZhdWx0UGlubmVkLFxuICAgICAgICAgIGNsaWNrUHJldmVudERlZmF1bHQ6IG1ldGFkYXRhLmNsaWNrUHJldmVudERlZmF1bHQsXG4gICAgICAgICAgY2xpY2tTdG9wUHJvcGFnYXRpb246IG1ldGFkYXRhLmNsaWNrU3RvcFByb3BhZ2F0aW9uLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBtZXRhZGF0YS5kaXNwbGF5TmFtZSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgcmV0dXJuIGNyZWF0ZU1hbmFnZXIoc291cmNlLCBjb2x1bW5NZXRhZGF0YSwgcGx1cmFsRW50aXR5TmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy9cbiAgLy8gVXRpbGl0aWVzIC8vXG4gIC8vLy8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5BbGlnbm1lbnQoXG4gICAgZGF0YVR5cGU6IENvbHVtbkRhdGFUeXBlLFxuICAgIGlzRmlyc3Q6IGJvb2xlYW4sXG4gICk6IENvbHVtbkFsaWdubWVudCB7XG4gICAgaWYgKGlzRmlyc3QpIHJldHVybiAnbGVmdCc7XG4gICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdsb25nVGV4dCc6XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgICBjYXNlICdhZHZhbmNlZCc6XG4gICAgICBjYXNlICdpY29uJzpcbiAgICAgIGNhc2UgJ3Nob3J0VGV4dCc6XG4gICAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24ga2VlcHMgdGhlIHN0YXRlIG9iamVjdCByZWZlcmVuY2VzIGFzIHN0YWJsZSBhcyBwb3NzaWJsZSwgd2hpY2hcbiAqIGhlbHBzIEFuZ3VsYXIgcmVkdWNlIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMuIEZvciBub3csIHNpbXBsZSBpc0VxdWFsKClcbiAqIGNoZWNrcyBhdCB0aGUgc3RhdGUncyB0b3AtbGV2ZWwga2V5cyBhcmUgc3VmZmljaWVudCB0byBkcmFtYXRpY2FsbHkgc3BlZWQgdXBcbiAqIHJlbmRlcmluZywgYnV0IGlmIG90aGVyIHBlcmZvcm1hbmNlIGlzc3VlcyBhcmlzZSwgd2UgY291bGQgaW1wbGVtZW50IG1vcmVcbiAqIGdyYW51bGFyIGNoZWNrcy9zdXJnaWNhbCB1cGRhdGVzIGFzIG5lZWRlZCAodGhlIHN0YXRlLnJlc3VsdCBiZWluZyB0aGUgbW9zdFxuICogbGlrZWx5IGNhbmRpZGF0ZSwgc2luY2UgbWFueSB0eXBlcyBvZiBzdGF0ZSB1cGRhdGVzIGFmZmVjdCBwYXJ0cyBvZiB0aGVcbiAqIHJlc3VsdCByb3dzKS5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlU3RhdGU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICB0YXJnZXQ6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc291cmNlOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4pOiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4ge1xuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnF1ZXJ5LCBzb3VyY2UucXVlcnkpKSB7XG4gICAgdGFyZ2V0LnF1ZXJ5ID0gc291cmNlLnF1ZXJ5O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQubG9hZCwgc291cmNlLmxvYWQpKSB7XG4gICAgdGFyZ2V0LmxvYWQgPSBzb3VyY2UubG9hZDtcbiAgfVxuXG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LmNzdkRhdGEsIHNvdXJjZS5yZXN1bHQuY3N2RGF0YSkpIHtcbiAgICB0YXJnZXQucmVzdWx0LmNzdkRhdGEgPSBzb3VyY2UucmVzdWx0LmNzdkRhdGE7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQuY3N2RmlsZW5hbWUsIHNvdXJjZS5yZXN1bHQuY3N2RmlsZW5hbWUpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC5jc3ZGaWxlbmFtZSA9IHNvdXJjZS5yZXN1bHQuY3N2RmlsZW5hbWU7XG4gIH1cbiAgaWYgKFxuICAgICFpc0VxdWFsKFxuICAgICAgdGFyZ2V0LnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBzb3VyY2UucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICApXG4gICkge1xuICAgIHRhcmdldC5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID0gc291cmNlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQ7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQsIHNvdXJjZS5yZXN1bHQpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdCA9IHNvdXJjZS5yZXN1bHQ7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5kaXNwbGF5LCBzb3VyY2UuZGlzcGxheSkpIHtcbiAgICB0YXJnZXQuZGlzcGxheSA9IHNvdXJjZS5kaXNwbGF5O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuc2VsZWN0aW9uLCBzb3VyY2Uuc2VsZWN0aW9uKSkge1xuICAgIHRhcmdldC5zZWxlY3Rpb24gPSBzb3VyY2Uuc2VsZWN0aW9uO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2VDb3VudDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB7XG4gIGlmIChpc0dyb3VwUmVzdWx0KHN0YXRlLnJlc3VsdCkpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICBNYXRoLmNlaWwoXG4gICAgICAgIHN0YXRlLnJlc3VsdC50b3RhbEdyb3VwQ291bnQgLyBzdGF0ZS5xdWVyeS5ncm91cGluZy5ncm91cHNQZXJQYWdlLFxuICAgICAgKSxcbiAgICAgIDEsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gTWF0aC5tYXgoXG4gICAgTWF0aC5jZWlsKFxuICAgICAgc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCAvIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgKSxcbiAgICAxLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRQcmV2aW91c1BhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIgfCBudWxsIHtcbiAgcmV0dXJuIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSA9PT0gMFxuICAgID8gbnVsbFxuICAgIDogc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlIC0gMTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFnZXM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHBhZGRpbmcgPSA0O1xuICBjb25zdCBtaW4gPSAwO1xuICBjb25zdCBtYXggPSBnZXRQYWdlQ291bnQoc3RhdGUpIC0gMTtcbiAgY29uc3QgZGVzaXJlZFN0YXJ0ID0gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlIC0gcGFkZGluZztcbiAgY29uc3QgY2xhbXBlZFN0YXJ0ID0gTWF0aC5tYXgobWluLCBkZXNpcmVkU3RhcnQpO1xuICBjb25zdCBkZXNpcmVkRW5kID0gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlICsgcGFkZGluZztcbiAgY29uc3QgY2xhbXBlZEVuZCA9IE1hdGgubWluKG1heCwgZGVzaXJlZEVuZCk7XG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgobWluLCBjbGFtcGVkU3RhcnQgLSAoZGVzaXJlZEVuZCAtIGNsYW1wZWRFbmQpKTtcbiAgY29uc3QgZW5kID0gTWF0aC5taW4obWF4LCBjbGFtcGVkRW5kICsgKGNsYW1wZWRTdGFydCAtIGRlc2lyZWRTdGFydCkpO1xuICByZXR1cm4gcmFuZ2Uoc3RhcnQsIGVuZCArIDEpO1xufVxuXG5mdW5jdGlvbiBnZXROZXh0UGFnZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBtYXggPSBnZXRQYWdlQ291bnQoc3RhdGUpIC0gMTtcbiAgY29uc3QgbmV4dCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIDE7XG4gIHJldHVybiBuZXh0IDw9IG1heCA/IG5leHQgOiBudWxsO1xufVxuXG4vLyBXZSBkb24ndCB3YW50IHRvIHNob3cgdGhlIHBhZ2luYXRpb24gY29udHJvbHMgd2hlbiB0aGV5IGFyZSB1bm5lY2Vzc2FyeS5cbmZ1bmN0aW9uIGdldFNob3dQYWdpbmF0aW9uQ29udHJvbHM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBib29sZWFuIHtcbiAgaWYgKGlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSkge1xuICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50ID4gc3RhdGUucXVlcnkuZ3JvdXBpbmcuZ3JvdXBzUGVyUGFnZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiBNYXRoLm1pbiguLi5bLi4uUml2VGFibGUucGFnZVNpemVzXSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxsQ29sdW1uczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4pOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdIHtcbiAgLy8gSWYgdGhlIHRhYmxlIG9mZmVycyBtb3JlIGNvbHVtbnMgdGhhbiB0aGUgdXNlciBoYXMgY29uZmlndXJhdGlvbiBzZXR0aW5nc1xuICAvLyBmb3IgKG9yIGlmIHRoZSB1c2VyIGhhcyBubyBjb25maWd1cmF0aW9uIHNldHRpbmdzIHlldCksIHdlJ2xsIGFwcGVuZCB0aGVtXG4gIC8vIHRvIHRoZSBlbmQgKHVubGVzcyB0aGV5IHNob3VsZCBiZSBwaW5uZWQgYnkgZGVmYXVsdCwgaW4gd2hpY2ggY2FzZSB3ZSdsbFxuICAvLyBhcHBlbmQgdGhlbSBhZnRlciB0aGUgb3RoZXIgcGlubmVkIGNvbHVtbnMpLiBUaGlzIGVuc3VyZXMgdGhhdCBuZXcgY29sdW1uc1xuICAvLyB3ZSBhZGQgdG8gZXhpc3RpbmcgdGFibGVzIG92ZXIgdGltZSAoMSkgZ2V0IGRpc3BsYXllZCBldmVuIHRob3VnaCB0aGV5XG4gIC8vIGRvbid0IGFwcGVhciBpbiB0aGUgdXNlcidzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgeWV0LCBhbmQgKDIpIGRvbid0XG4gIC8vIGludGVycnVwdCB0aGVpciBleGlzdGluZyBzZXR1cC5cbiAgY29uc3QgY29sdW1uTmFtZXNXaXRob3V0VXNlclNldHRpbmdzID0gZGlmZmVyZW5jZShcbiAgICBbLi4uc3VwcG9ydGVkQ29sdW1ucy5rZXlzKCldLFxuICAgIHN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3MubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksXG4gICk7XG5cbiAgLy8gVGhyb3cgb3V0IHNldHRpbmdzIGZvciBjb2x1bW5zIG5vIGxvbmdlciBvZmZlcmVkIGJ5IHRoZSB0YWJsZS5cbiAgY29uc3QgY29sdW1uc1dpdGhVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPVxuICAgIHN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3MuZmlsdGVyKCh7IG5hbWUgfSkgPT5cbiAgICAgIHN1cHBvcnRlZENvbHVtbnMuaGFzKG5hbWUpLFxuICAgICk7XG5cbiAgY29uc3QgY29sdW1uc1dpdGhvdXRVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPSBbXG4gICAgLi4uY29sdW1uTmFtZXNXaXRob3V0VXNlclNldHRpbmdzLFxuICBdLm1hcCgobmFtZTogQykgPT4gKHtcbiAgICBuYW1lLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcHJlZmVycmVkV2lkdGg6ICdhdXRvJyxcbiAgICBwaW5uZWQ6ICEhc3VwcG9ydGVkQ29sdW1ucy5nZXQobmFtZSk/LmRlZmF1bHRQaW5uZWQsXG4gIH0pKTtcblxuICByZXR1cm4gb3JkZXJJbnRlbnRpb25hbGx5KFxuICAgIFsuLi5jb2x1bW5zV2l0aFVzZXJTZXR0aW5ncywgLi4uY29sdW1uc1dpdGhvdXRVc2VyU2V0dGluZ3NdLFxuICAgIGNvbHVtbk5hbWVNYXAsXG4gICk7XG59XG5cbmZ1bmN0aW9uIG9yZGVySW50ZW50aW9uYWxseTxDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uPihcbiAgY29sdW1uczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbik6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10ge1xuICByZXR1cm4gW1xuICAgIC4uLmNvbHVtbnMuZmlsdGVyKHYgPT4gdi5waW5uZWQpLFxuICAgIC4uLmNvbHVtbnMuZmlsdGVyKHYgPT4gdi5lbmFibGVkICYmICF2LnBpbm5lZCksXG4gICAgLi4uY29sdW1uc1xuICAgICAgLmZpbHRlcih2ID0+ICF2LmVuYWJsZWQgJiYgIXYucGlubmVkKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYU5hbWUgPSBjb2x1bW5OYW1lTWFwLmdldChhLm5hbWUpID8/IGEubmFtZTtcbiAgICAgICAgY29uc3QgYk5hbWUgPSBjb2x1bW5OYW1lTWFwLmdldChiLm5hbWUpID8/IGIubmFtZTtcbiAgICAgICAgcmV0dXJuIGFOYW1lLmxvY2FsZUNvbXBhcmUoYk5hbWUpO1xuICAgICAgfSksXG4gIF07XG59XG5cbmZ1bmN0aW9uIGdldEFsaWdubWVudChcbiAgbWV0YWRhdGE6IFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhLFxuICBpbmRleDogbnVtYmVyLFxuICBhbGxvd1NlbGVjdGlvbj86IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db2x1bW5BbGlnbm1lbnQge1xuICByZXR1cm4gUml2VGFibGUuZ2V0Q29sdW1uQWxpZ25tZW50KFxuICAgIG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgIGluZGV4ID09PSAwICYmICFhbGxvd1NlbGVjdGlvbixcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNvbHVtbnM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBzdXBwb3J0ZWRDb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBhbGxvd1NlbGVjdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbik6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBzdXBwb3J0ZWRDb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgcmV0dXJuIGFsbENvbHVtbnNcbiAgICAuZmlsdGVyKCh7IGVuYWJsZWQgfSkgPT4gZW5hYmxlZClcbiAgICAucmVkdWNlKFxuICAgICAgKFxuICAgICAgICBmdWxsQ29sdW1uczogUml2VGFibGUuRnVsbENvbHVtbjxDPltdLFxuICAgICAgICBzZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz4sXG4gICAgICAgIGk6IG51bWJlcixcbiAgICAgICk6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gc3VwcG9ydGVkQ29sdW1ucy5nZXQoc2V0dGluZ3MubmFtZSkhO1xuICAgICAgICBjb25zdCByZXNvbHZlZFdpZHRoID1cbiAgICAgICAgICBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCA9PT0gJ2F1dG8nXG4gICAgICAgICAgICA/IG1ldGFkYXRhLm1pbldpZHRoXG4gICAgICAgICAgICA6IE1hdGgubWF4KG1ldGFkYXRhLm1pbldpZHRoLCBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ29sdW1uOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+IHwgdW5kZWZpbmVkID1cbiAgICAgICAgICBmdWxsQ29sdW1uc1tpIC0gMV07XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgLi4uZnVsbENvbHVtbnMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgICAgIHdpZHRoOiByZXNvbHZlZFdpZHRoLFxuICAgICAgICAgICAgbGVmdDogc2V0dGluZ3MucGlubmVkXG4gICAgICAgICAgICAgID8gcHJldmlvdXNDb2x1bW5cbiAgICAgICAgICAgICAgICA/IChwcmV2aW91c0NvbHVtbi5sZWZ0IHx8IDApICsgcHJldmlvdXNDb2x1bW4ud2lkdGhcbiAgICAgICAgICAgICAgICA6IGFsbG93U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgPyA0MFxuICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICBhbGlnbm1lbnQ6IGdldEFsaWdubWVudChtZXRhZGF0YSwgaSwgYWxsb3dTZWxlY3Rpb24pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgICAgW10sXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0WmVyb1N0YXRlTWVzc2FnZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiwgZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKFxuICAgIChpc0dyb3VwUmVzdWx0KHN0YXRlLnJlc3VsdCkgJiYgc3RhdGUucmVzdWx0LnRvdGFsR3JvdXBDb3VudCA+IDApIHx8XG4gICAgKCFpc0dyb3VwUmVzdWx0KHN0YXRlLnJlc3VsdCkgJiYgc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA+IDApXG4gIClcbiAgICByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWxsU2VhcmNoQ29sdW1uc1NlbGVjdGVkID0gZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGUoc3RhdGUsICdhbGwnKTtcbiAgaWYgKHN0YXRlLnF1ZXJ5LnNlYXJjaCAmJiBhbGxTZWFyY2hDb2x1bW5zU2VsZWN0ZWQpXG4gICAgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IHNlYXJjaCBrZXl3b3JkLmA7XG4gIGlmIChzdGF0ZS5xdWVyeS5zZWFyY2ggJiYgIWFsbFNlYXJjaENvbHVtbnNTZWxlY3RlZClcbiAgICByZXR1cm4gYE5vICR7ZW50aXR5fSBtYXRjaCB5b3VyIGN1cnJlbnQgc2VhcmNoIGtleXdvcmQgaW4gdGhlIHNlbGVjdGVkIHNlYXJjaCBjb2x1bW5zLmA7XG4gIGlmIChzdGF0ZS5xdWVyeS5maWx0ZXJzKSByZXR1cm4gYE5vICR7ZW50aXR5fSBtYXRjaCB5b3VyIGN1cnJlbnQgZmlsdGVycy5gO1xuICByZXR1cm4gYE5vICR7ZW50aXR5fS5gO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VDb2x1bW5QaW48XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIHBpbm5lZDogYm9vbGVhbixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uU2V0dGluZ3M6IG9yZGVySW50ZW50aW9uYWxseShcbiAgICAgICAgYWxsQ29sdW1ucy5tYXAoYyA9PiAoe1xuICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgcGlubmVkOiBjLm5hbWUgPT09IGNvbHVtbiA/IHBpbm5lZCA6IGMucGlubmVkLFxuICAgICAgICAgIC8vIENoZWNrL2VuYWJsZSBpZiBiZWluZyBwaW5uZWRcbiAgICAgICAgICBlbmFibGVkOiBjLm5hbWUgPT09IGNvbHVtbiAmJiBwaW5uZWQgPyB0cnVlIDogYy5lbmFibGVkLFxuICAgICAgICB9KSksXG4gICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICApLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGluZGV4OiBudW1iZXIsXG4gIGZyZWV6ZTogYm9vbGVhbixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogYWxsQ29sdW1ucy5tYXAoKGMsIGkpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYywgcGlubmVkOiBmcmVlemUgJiYgaSA8PSBpbmRleCB9O1xuICAgICAgfSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbW92ZUNvbHVtblRvPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgY29sdW1uOiBDLFxuICBwb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICBjb25zdCBwcmV2aW91c0luZGV4ID0gYWxsQ29sdW1ucy5maW5kSW5kZXgoYyA9PiBjLm5hbWUgPT09IGNvbHVtbik7XG4gIGNvbnN0IGxhc3RJbmRleCA9XG4gICAgcG9zaXRpb24gPT0gJ2VuZCcgPyBhbGxDb2x1bW5zLmZpbmRJbmRleChjID0+ICFjLmVuYWJsZWQpIDogMDtcbiAgY29uc3QgbmV3SW5kZXggPVxuICAgIHBvc2l0aW9uID09ICdzdGFydCdcbiAgICAgID8gMFxuICAgICAgOiBsYXN0SW5kZXggPT0gLTFcbiAgICAgID8gYWxsQ29sdW1ucy5sZW5ndGggLSAxXG4gICAgICA6IGxhc3RJbmRleDtcblxuICBjb25zdCBtb3ZlZFN0YXRlID0gY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgc3RhdGUsXG4gICAgY29sdW1ucyxcbiAgICBjb2x1bW5OYW1lTWFwLFxuICAgIHByZXZpb3VzSW5kZXgsXG4gICAgbmV3SW5kZXgsXG4gICk7XG4gIC8vTWFrZSBzdXJlIHRoZSBjb2x1bW4gaXMgZW5hYmxlZFxuICByZXR1cm4gY2hhbmdlQ29sdW1uRW5hYmxlZChtb3ZlZFN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwLCBjb2x1bW4sIHRydWUpO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VDb2x1bW5PcmRlcjxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcixcbiAgbmV3SW5kZXg6IG51bWJlcixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcblxuICAvLyBGaXJzdCwgcHV0IHRoZSBjb2x1bW5zIGluIHRoZSBkZXNpcmVkIG9yZGVyLlxuICBjb25zdCBpdGVtID0gYWxsQ29sdW1uc1twcmV2aW91c0luZGV4XTtcbiAgY29uc3Qgd2l0aG91dEl0ZW0gPSBhbGxDb2x1bW5zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gcHJldmlvdXNJbmRleCk7XG4gIGNvbnN0IHJlb3JkZXJlZCA9IFtcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZSgwLCBuZXdJbmRleCksXG4gICAgaXRlbSxcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZShuZXdJbmRleCksXG4gIF07XG5cbiAgLy8gVGhlbiwgd2UgbWF5IG5lZWQgdG8gZml4IHRoZSBwaW5zIChhbGwgcGlubmVkIGNvbHVtbnMgYXBwZWFyIGF0IHRoZVxuICAvLyBiZWdpbm5pbmcgb2YgdGhlIGNvbHVtbnMgYXJyYXkpIHNpbmNlIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZHJhZ1xuICAvLyBhbmQgZHJvcCBjb2x1bW5zIHRvIGFuZCBmcm9tIHRoZSBwaW5uZWQgYXJlYS4gSWYgdGhlIHVzZXIgZHJhZ3MgYVxuICAvLyBjb2x1bW4gYWNyb3NzIHRoYXQgdGhyZXNob2xkLCB1cGRhdGUgaXRzIHBpbm5lZCBzdGF0dXMuXG4gIGNvbnN0IHVwZGF0ZWQgPSByZW9yZGVyZWQubWFwKChzZXR0aW5ncywgaSwgYXJyKSA9PiB7XG4gICAgaWYgKG5ld0luZGV4ID09PSBpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgcGlubmVkOiBzZXR0aW5ncy5waW5uZWRcbiAgICAgICAgICA/IGFycltpIC0gMV0/LnBpbm5lZCA/PyB0cnVlXG4gICAgICAgICAgOiBhcnJbaSArIDFdPy5waW5uZWQgPz8gZmFsc2UsXG4gICAgICAgIGVuYWJsZWQ6IHNldHRpbmdzLmVuYWJsZWRcbiAgICAgICAgICA/IGFycltpIC0gMV0/LmVuYWJsZWQgPz8gdHJ1ZVxuICAgICAgICAgIDogYXJyW2kgKyAxXT8uZW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHJldHVybiBzZXR0aW5ncztcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uU2V0dGluZ3M6IG9yZGVySW50ZW50aW9uYWxseSh1cGRhdGVkLCBjb2x1bW5OYW1lTWFwKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VDb2x1bW5FbmFibGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgY29sdW1uOiBDLFxuICBlbmFibGVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KFxuICAgICAgICBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBlbmFibGVkOiBjLm5hbWUgPT09IGNvbHVtbiA/IGVuYWJsZWQgOiBjLmVuYWJsZWQsXG4gICAgICAgICAgLy8gVW5waW4gaWYgYmVpbmcgdW5jaGVja2VkXG4gICAgICAgICAgcGlubmVkOiBjLm5hbWUgPT09IGNvbHVtbiAmJiAhZW5hYmxlZCA/IGZhbHNlIDogYy5waW5uZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cbmZ1bmN0aW9uIGVuYWJsZUFsbENvbHVtbnM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBlbmFibGVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KFxuICAgICAgICBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBlbmFibGVkOiBlbmFibGVkLFxuICAgICAgICAgIC8vIFVucGluIGlmIGJlaW5nIHVuY2hlY2tlZFxuICAgICAgICAgIHBpbm5lZDogIWVuYWJsZWQgPyBmYWxzZSA6IGMucGlubmVkLFxuICAgICAgICB9KSksXG4gICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICApLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbldpZHRoPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgY29sdW1uOiBDLFxuICBwcmVmZXJyZWRXaWR0aDogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bJ3ByZWZlcnJlZFdpZHRoJ10sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgIC4uLmMsXG4gICAgICAgIHByZWZlcnJlZFdpZHRoOiBjLm5hbWUgPT09IGNvbHVtbiA/IHByZWZlcnJlZFdpZHRoIDogYy5wcmVmZXJyZWRXaWR0aCxcbiAgICAgIH0pKSxcbiAgICB9LFxuICB9O1xufVxuZnVuY3Rpb24gcmVzZXRUb0RlZmF1bHRDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgZGVmYXVsdENvbHVtblN0YXRlOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KGRlZmF1bHRDb2x1bW5TdGF0ZSwgY29sdW1uTmFtZU1hcCksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNSb3dTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiwgaWQ6IFJbJ2lkJ10pOiBib29sZWFuIHtcbiAgc3dpdGNoIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSkge1xuICAgIGNhc2UgJ2luY2x1ZGUnOlxuICAgICAgcmV0dXJuIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5oYXMoaWQpO1xuICAgIGNhc2UgJ2V4Y2x1ZGUnOlxuICAgICAgcmV0dXJuICFzdGF0ZS5zZWxlY3Rpb24uZXhjbHVkZWQuaGFzKGlkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0dyb3VwU2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBncm91cDogUml2VGFibGUuU3ViR3JvdXBSZXN1bHQ8UiwgRz4sXG4pOiBSaXZUYWJsZS5NdWx0aVNlbGVjdGlvblN0YXRlIHtcbiAgc3dpdGNoIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSkge1xuICAgIGNhc2UgJ2luY2x1ZGUnOiB7XG4gICAgICBsZXQgYWxsRm91bmQgPSB0cnVlO1xuICAgICAgbGV0IGFueUZvdW5kID0gZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBncm91cC5jdXJyZW50UGFnZURhdGEpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuaGFzKHJvdy5pZCkpIHtcbiAgICAgICAgICBhbGxGb3VuZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFueUZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFsbEZvdW5kID8gdHJ1ZSA6IGFueUZvdW5kID8gJ2luZGV0ZXJtaW5hdGUnIDogZmFsc2U7XG4gICAgfVxuICAgIGNhc2UgJ2V4Y2x1ZGUnOiB7XG4gICAgICBsZXQgYWxsRm91bmQgPSB0cnVlO1xuICAgICAgbGV0IGFueUZvdW5kID0gZmFsc2U7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBncm91cC5jdXJyZW50UGFnZURhdGEpIHtcbiAgICAgICAgaWYgKHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5oYXMocm93LmlkKSkge1xuICAgICAgICAgIGFsbEZvdW5kID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYW55Rm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWxsRm91bmQgPyB0cnVlIDogYW55Rm91bmQgPyAnaW5kZXRlcm1pbmF0ZScgOiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBbGxTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICAvLyBJZiB0aGVyZSBhcmUgbm8gcm93cywgXCJhbGwgc2VsZWN0ZWRcIiBzaG91bGQgYmUgZmFsc2VcbiAgaWYgKHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnZXhjbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplID09PSAwKSB8fFxuICAgIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSA9PT0gJ2luY2x1ZGUnICYmXG4gICAgICBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZSA9PT0gc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudClcbiAgKVxuICAgIHJldHVybiB0cnVlO1xuICBpZiAoXG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnZXhjbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplID09PSBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50KSB8fFxuICAgIChzdGF0ZS5zZWxlY3Rpb24ubW9kZSA9PT0gJ2luY2x1ZGUnICYmIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5zaXplID09PSAwKVxuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xufVxuXG5mdW5jdGlvbiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5NdWx0aVNlbGVjdGlvblN0YXRlIHtcbiAgY29uc3Qgc2VsZWN0ZWRTdGF0ZXMgPSBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLm1hcCgoeyBpZCB9KSA9PlxuICAgIGlzUm93U2VsZWN0ZWQoc3RhdGUsIGlkKSxcbiAgKTtcbiAgaWYgKHNlbGVjdGVkU3RhdGVzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc2VsZWN0ZWRTdGF0ZXMuZXZlcnkodiA9PiB2KSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHNlbGVjdGVkU3RhdGVzLnNvbWUodiA9PiB2KSkgcmV0dXJuICdpbmRldGVybWluYXRlJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGVkQ291bnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIge1xuICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgY2FzZSAnaW5jbHVkZSc6XG4gICAgICByZXR1cm4gc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkLnNpemU7XG4gICAgY2FzZSAnZXhjbHVkZSc6XG4gICAgICByZXR1cm4gc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCAtIHN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5zaXplO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWZyZXNoUmVzdWx0V2l0aDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIHNvdXJjZTogUml2VGFibGUuU291cmNlPFIsIEMsIEYsIEc+LFxuICBtb3N0UmVjZW50QWN0aW9uOiBSaXZUYWJsZS5BY3Rpb248UiwgQywgRiwgRz4sXG4pOiBBc3luY0dlbmVyYXRvcjxSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4+IHtcbiAgeWllbGQge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWQ6IHtcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICB9LFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNvdXJjZShzdGF0ZS5xdWVyeSwgbW9zdFJlY2VudEFjdGlvbik7XG4gICAgeWllbGQge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgICByZXN1bHQsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB5aWVsZCB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWQ6IHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJvd1NlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgaWQ6IFJbJ2lkJ10sXG4gIHNlbGVjdGVkOiBib29sZWFuLFxuICBjb250aWd1b3VzOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKHNlbGVjdGVkKSB7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IFNldDxSWydpZCddPihbaWRdKTtcbiAgICBpZiAoY29udGlndW91cyAmJiBzdGF0ZS5zZWxlY3Rpb24ubW9zdFJlY2VudGx5U2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gZ2V0QWxsUm93c0Zyb21SZXN1bHQoc3RhdGUucmVzdWx0KS5maW5kSW5kZXgoXG4gICAgICAgIHJvdyA9PiByb3cuaWQgPT09IHN0YXRlLnNlbGVjdGlvbi5tb3N0UmVjZW50bHlTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgICBjb25zdCBlbmRJZHggPSBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLmZpbmRJbmRleChcbiAgICAgICAgcm93ID0+IHJvdy5pZCA9PT0gaWQsXG4gICAgICApO1xuICAgICAgaWYgKHR5cGVvZiBzdGFydElkeCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGVuZElkeCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBsZXQgaSA9IE1hdGgubWluKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgICAgIGkgPD0gTWF0aC5tYXgoc3RhcnRJZHgsIGVuZElkeCk7XG4gICAgICAgICAgaSsrXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld1NlbGVjdGlvbi5hZGQoZ2V0QWxsUm93c0Zyb21SZXN1bHQoc3RhdGUucmVzdWx0KVtpXS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBpZCxcbiAgICAgICAgLi4uKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZSdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldChcbiAgICAgICAgICAgICAgICB1bmlvbihbLi4uc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkXSwgWy4uLm5ld1NlbGVjdGlvbl0pLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBtb2RlOiAnZXhjbHVkZScsXG4gICAgICAgICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UoWy4uLnN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZF0sIFsuLi5uZXdTZWxlY3Rpb25dKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgLi4uKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZSdcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldChcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlKFsuLi5zdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWRdLCBbaWRdKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnLFxuICAgICAgICAgICAgICBleGNsdWRlZDogbmV3IFNldCh1bmlvbihbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkXSwgW2lkXSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9nZ2xlR3JvdXBTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGdyb3VwOiBSaXZUYWJsZS5Sb3dHcm91cDxSLCBHPixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGlzR3JvdXBGdWxseVNlbGVjdGVkID1cbiAgICBpc0dyb3VwU2VsZWN0ZWQoc3RhdGUsIHsgLi4uZ3JvdXAsIGN1cnJlbnRQYWdlRGF0YTogZ3JvdXAucm93cyB9KSA9PT0gdHJ1ZTtcbiAgcmV0dXJuIGdyb3VwLnJvd3MucmVkdWNlKChhY2N1bXVsYXRlZFN0YXRlLCByb3cpID0+IHtcbiAgICByZXR1cm4gc2V0Um93U2VsZWN0ZWQoXG4gICAgICBhY2N1bXVsYXRlZFN0YXRlLFxuICAgICAgcm93LmlkLFxuICAgICAgIWlzR3JvdXBGdWxseVNlbGVjdGVkLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfSwgc3RhdGUpO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVQYWdlU2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBpc1BhZ2VGdWxseVNlbGVjdGVkID0gZ2V0QWxsUm93c0Zyb21SZXN1bHQoc3RhdGUucmVzdWx0KS5ldmVyeShcbiAgICAoeyBpZCB9KSA9PiBpc1Jvd1NlbGVjdGVkKHN0YXRlLCBpZCksXG4gICk7XG4gIHJldHVybiBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLnJlZHVjZSgoYWNjdW11bGF0ZWRTdGF0ZSwgcm93KSA9PiB7XG4gICAgcmV0dXJuIHNldFJvd1NlbGVjdGVkKFxuICAgICAgYWNjdW11bGF0ZWRTdGF0ZSxcbiAgICAgIHJvdy5pZCxcbiAgICAgICFpc1BhZ2VGdWxseVNlbGVjdGVkLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfSwgc3RhdGUpO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVBbGxTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGlmIChpc0FsbFNlbGVjdGVkKHN0YXRlKSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnLFxuICAgICAgICBleGNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3Rpb246IHtcbiAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiB0b2dnbGVDb2x1bW5PcmRlcjxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbjogQyxcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGlmIChzdGF0ZS5xdWVyeS5vcmRlcj8uY29sdW1uID09PSBjb2x1bW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBxdWVyeToge1xuICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgb3JkZXI6XG4gICAgICAgICAgc3RhdGUucXVlcnkub3JkZXIuZGlyZWN0aW9uID09PSAnYXNjJ1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2Rlc2MnLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBxdWVyeToge1xuICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICBvcmRlcjoge1xuICAgICAgICBjb2x1bW4sXG4gICAgICAgIGRpcmVjdGlvbjogJ2FzYycsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgZXhwZWN0ZWRWYWx1ZTogJ2FsbCcgfCAnbm9uZScsXG4pOiBib29sZWFuIHtcbiAgc3dpdGNoIChleHBlY3RlZFZhbHVlKSB7XG4gICAgY2FzZSAnYWxsJzpcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMudmFsdWVzKCkpLmV2ZXJ5KFxuICAgICAgICB2YWx1ZSA9PiB2YWx1ZSxcbiAgICAgICk7XG5cbiAgICBjYXNlICdub25lJzpcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMudmFsdWVzKCkpLmV2ZXJ5KFxuICAgICAgICB2YWx1ZSA9PiAhdmFsdWUsXG4gICAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUFsbFNlYXJjaENvbHVtbnM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBub25lU2VsZWN0ZWQgPSBnZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShzdGF0ZSwgJ25vbmUnKTtcbiAgY29uc3QgcGF5bG9hZCA9IG5ldyBNYXAoXG4gICAgQXJyYXkuZnJvbShzdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLmtleXMoKSkubWFwKGtleSA9PiBbXG4gICAgICBrZXksXG4gICAgICBub25lU2VsZWN0ZWQsXG4gICAgXSksXG4gICk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgcXVlcnk6IHtcbiAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgc2VhcmNoQ29sdW1uczogcGF5bG9hZCxcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiogcmVkdWNlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgYWN0aW9uOiBSaXZUYWJsZS5BY3Rpb248UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIHNvdXJjZTogUml2VGFibGUuU291cmNlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBkZWZhdWx0Q29sdW1uU3RhdGU6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10sXG4pOiBBc3luY0dlbmVyYXRvcjxSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKHN0YXRlLCBzb3VyY2UsIGFjdGlvbik7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcmRlckNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBvcmRlcjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdvcmRlckNvbHVtblRvZ2dsZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHRvZ2dsZUNvbHVtbk9yZGVyKHN0YXRlLCBhY3Rpb24uY29sdW1uKSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VhcmNoQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaDogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VhcmNoQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBzZWFyY2hDb2x1bW5zOiBuZXcgTWFwKFtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucyxcbiAgICAgICAgICAgICAgLi4uYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdpbmF0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dyb3VwaW5nQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IGdldFByZXZpb3VzUGFnZShzdGF0ZSkgPz8gMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbmV4dFBhZ2VOYXZpZ2F0ZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IGdldE5leHRQYWdlKHN0YXRlKSA/PyBnZXRQYWdlQ291bnQoc3RhdGUpIC0gMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IGFjdGlvbi5wYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2l6ZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBhY3Rpb24uc2l6ZSxcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmlsdGVyc0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBmaWx0ZXJzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgICBjb2x1bW5TZXR0aW5nczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uUGluQ2hhbmdlJzpcbiAgICAgIHlpZWxkIGNoYW5nZUNvbHVtblBpbihcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgIGFjdGlvbi5waW5uZWQsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uc0ZyZWV6ZVN0YXRlKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgYWN0aW9uLmluZGV4LFxuICAgICAgICBhY3Rpb24uZnJlZXplLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbk9yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkIGNoYW5nZUNvbHVtbk9yZGVyKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgYWN0aW9uLnByZXZpb3VzSW5kZXgsXG4gICAgICAgIGFjdGlvbi5uZXdJbmRleCxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnOlxuICAgICAgeWllbGQgbW92ZUNvbHVtblRvKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgYWN0aW9uLnBvc2l0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uRW5hYmxlZChcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgIGFjdGlvbi5lbmFibGVkLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuYWJsZUFsbENvbHVtbnNDaGFuZ2UnOlxuICAgICAgeWllbGQgZW5hYmxlQWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCwgYWN0aW9uLmVuYWJsZWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uV2lkdGgoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICBhY3Rpb24ucHJlZmVycmVkV2lkdGgsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJzpcbiAgICAgIHlpZWxkIHJlc2V0VG9EZWZhdWx0Q29sdW1ucyhcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc2VsZWN0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb3dTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCBzZXRSb3dTZWxlY3RlZChcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGFjdGlvbi5pZCxcbiAgICAgICAgYWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICBhY3Rpb24uY29udGlndW91cyxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgdG9nZ2xlUGFnZVNlbGVjdGVkKHN0YXRlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2FsbFNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHRvZ2dsZUFsbFNlbGVjdGVkKHN0YXRlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNsZWFyJzpcbiAgICAgIHlpZWxkIGNsZWFyU2VsZWN0aW9uKHN0YXRlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dyb3VwU2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHRvZ2dsZUdyb3VwU2VsZWN0ZWQoc3RhdGUsIGFjdGlvbi5wYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dyb3Vwc1BlclBhZ2VDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIGdyb3Vwc1BlclBhZ2U6IGFjdGlvbi5ncm91cHNQZXJQYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb3VudFBlckdyb3VwQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICBjb3VudFBlckdyb3VwOiBhY3Rpb24uY291bnRQZXJHcm91cCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlld01vcmVLZXlDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIHZpZXdNb3JlS2V5OiBhY3Rpb24udmlld01vcmVLZXksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKHRvZ2dsZUFsbFNlYXJjaENvbHVtbnMoc3RhdGUpLCBzb3VyY2UsIGFjdGlvbik7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0dyb3VwUmVzdWx0KFxuICByZXN1bHQ6IFJpdlRhYmxlLlJlc3VsdDxhbnk+IHwgUml2VGFibGUuR3JvdXBSZXN1bHQ8YW55LCBhbnk+LFxuKTogcmVzdWx0IGlzIFJpdlRhYmxlLkdyb3VwUmVzdWx0PGFueSwgYW55PiB7XG4gIGlmICgndG90YWxHcm91cENvdW50JyBpbiByZXN1bHQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEFsbFJvd3NGcm9tUmVzdWx0KFxuICByZXN1bHQ6IFJpdlRhYmxlLlJlc3VsdDxhbnk+IHwgUml2VGFibGUuR3JvdXBSZXN1bHQ8YW55LCBhbnk+LFxuKSB7XG4gIGlmIChpc0dyb3VwUmVzdWx0KHJlc3VsdCkpIHtcbiAgICByZXR1cm4gcmVzdWx0Lmdyb3VwUmVzdWx0cy5mbGF0TWFwKGdyb3VwcyA9PiBncm91cHMuY3VycmVudFBhZ2VEYXRhKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzdWx0LmN1cnJlbnRQYWdlRGF0YTtcbiAgfVxufVxuIl19
|
|
1038
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBRUwsV0FBVyxFQUNYLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxLQUFXLFFBQVEsQ0E4dkJ4QjtBQTl2QkQsV0FBaUIsUUFBUTtJQTBDVixrQkFBUyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFVLENBQUM7SUF3T3JELG1EQUFtRDtJQUV0Qyx3QkFBZSxHQUFHO1FBQzdCLFVBQVU7UUFDVixVQUFVO1FBQ1YsTUFBTTtRQUNOLE1BQU07UUFDTixVQUFVO1FBQ1YsUUFBUTtRQUNSLFdBQVc7S0FDSCxDQUFDO0lBc0lYLFNBQWdCLGFBQWEsQ0FNM0IsTUFBMEIsRUFDMUIsT0FBK0IsRUFDL0IsZ0JBQXdCLEVBQ3hCLE9BQW9DO1FBRXBDLGtDQUFrQztRQUNsQyxNQUFNLFlBQVksR0FBMEI7WUFDMUMsS0FBSyxFQUFFO2dCQUNMLEtBQUssRUFBRSxJQUFJO2dCQUNYLE1BQU0sRUFBRSxFQUFFO2dCQUNWLGFBQWEsRUFBRSxJQUFJLEdBQUcsQ0FDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUNuRDtn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UUFBUTt3QkFDdkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO3FCQUNoQztpQkFDRjthQUNGLEVBQ0QsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssd0JBQXdCO1lBQzNCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4RSxNQUFNO0tBQ1Q7QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ3BCLE1BQTZEO0lBRTdELElBQUksaUJBQWlCLElBQUksTUFBTSxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixNQUE2RDtJQUU3RCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN6QixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3RFO1NBQU07UUFDTCxPQUFPLE1BQU0sQ0FBQyxlQUFlLENBQUM7S0FDL0I7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbXMsIFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IEZ1c2UsIHsgSUZ1c2VPcHRpb25zIH0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAsXG4gIGRpZmZlcmVuY2UsXG4gIGlzRXF1YWwsXG4gIG9yZGVyQnksXG4gIHJhbmdlLFxuICB1bmlvbixcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIENvbm5lY3RhYmxlLFxuICBjb25uZWN0YWJsZSxcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZVNjYW4sXG4gIE9ic2VydmFibGUsXG4gIFJlcGxheVN1YmplY3QsXG4gIHNjYW4sXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcblxuZXhwb3J0IG5hbWVzcGFjZSBSaXZUYWJsZSB7XG4gIGV4cG9ydCB0eXBlIFJvdyA9IHsgaWQ6IHN0cmluZyB8IG51bWJlciB9O1xuICBleHBvcnQgdHlwZSBDb2x1bW4gPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIEZpbHRlcnMgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIEdyb3VwID0geyBrZXk6IHN0cmluZyB8IG51bWJlciB9O1xuXG4gIC8qKlxuICAgKiBSaXZUYWJsZSdzIHN0YXRlIGFuZCB1c2VyIGFjdGlvbnMgYXJlIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIGNodW5rczpcbiAgICpcbiAgICogLSBRdWVyeSAoZm9yIHRoaW5ncyBsaWtlIGZpbHRlcnMsIHBhZ2luYXRpb24sIHNlYXJjaCwgZXRjLilcbiAgICogLSBMb2FkaW5nIChmb3Igd2hldGhlciBvciBub3QgdGhlIHRhYmxlIGlzIGxvYWRpbmcgcm93IGRhdGEpXG4gICAqIC0gUmVzdWx0IChmb3IgdGhlIHJvdyBkYXRhIGl0c2VsZilcbiAgICogLSBEaXNwbGF5IChmb3IgdGhpbmdzIGxpa2UgY29sdW1uIGNvbmZpZ3VyYXRpb24pXG4gICAqIC0gU2VsZWN0aW9uIChmb3IgdHJhY2tpbmcgdGhlIHVzZXIncyByb3cgc2VsZWN0aW9ucylcbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBkYXRhIGZsb3cgaXMgdW5pZGlyZWN0aW9uYWw6IHRoZSBVSSBpc3N1ZXMgYWN0aW9ucywgd2hpY2hcbiAgICogYWZmZWN0IHRoZSBzdGF0ZSwgYW5kIHRoZSBzdGF0ZSBnZXRzIHBhc3NlZCBiYWNrIHRvIHRoZSBVSSBmb3IgZGlzcGxheS5cbiAgICpcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiAgVUkgIOKXhOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilJggICAgICAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pSCXG4gICAqIOKUgiAgQWN0aW9ucyAg4pSCICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSQXG4gICAqIOKUgiAgU3RhdGUgcmVkdWNlciAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBGcm9tIHRoZSBjb3JlIHN0YXRlLCBjYWxjdWxhdGVkIHN0YXRlIGlzIGRlcml2ZWQgYW5kIGFkZGVkIHRvIHRoZSBjb3JlXG4gICAqIHN0YXRlIChlLmcuLCBmcm9tIHRoZSByYXcgc2VsZWN0aW9uIHN0YXRlIHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWxsIHRoZSByb3dzIG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UgYXJlIHNlbGVjdGVkLCBldGMuKS5cbiAgICovXG5cbiAgLy8vLy8vLy8vLy9cbiAgLy8gUXVlcnkgLy9cbiAgLy8vLy8vLy8vLy9cblxuICAvLyBRdWVyeSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIE9yZGVyRGlyZWN0aW9uID0gJ2FzYycgfCAnZGVzYyc7XG4gIGV4cG9ydCBjb25zdCBwYWdlU2l6ZXMgPSBbMjUsIDUwLCAxMDAsIDI1MF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFF1ZXJ5PEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBvcmRlcjoge1xuICAgICAgZGlyZWN0aW9uOiBPcmRlckRpcmVjdGlvbjtcbiAgICAgIGNvbHVtbjogQztcbiAgICB9IHwgbnVsbDtcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBzZWFyY2hDb2x1bW5zOiBNYXA8QywgYm9vbGVhbj47XG4gICAgZmlsdGVyczogRiB8IG51bGw7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB9O1xuICAgIGdyb3VwaW5nOiB7XG4gICAgICB2aWV3TW9yZUtleTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGdyb3Vwc1BlclBhZ2U6IG51bWJlcjtcbiAgICAgIGNvdW50UGVyR3JvdXA6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFF1ZXJ5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBRdWVyeUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZCcgfVxuICAgIHwgeyB0eXBlOiAnb3JkZXJDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnb3JkZXInXSB9XG4gICAgfCB7IHR5cGU6ICdvcmRlckNvbHVtblRvZ2dsZSc7IGNvbHVtbjogQyB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoJ10gfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ29sdW1uc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2hDb2x1bW5zJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydmaWx0ZXJzJ10gfVxuICAgIHwgeyB0eXBlOiAncGFnaW5hdGlvbkNoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydwYWdpbmF0aW9uJ10gfVxuICAgIHwgeyB0eXBlOiAnZ3JvdXBpbmdDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnZ3JvdXBpbmcnXSB9XG4gICAgfCB7IHR5cGU6ICduZXh0UGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncGFnZUNoYW5nZSc7IHBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdwYWdlU2l6ZUNoYW5nZSc7IHNpemU6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdncm91cHNQZXJQYWdlQ2hhbmdlJzsgZ3JvdXBzUGVyUGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOyBjb3VudFBlckdyb3VwOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAndmlld01vcmVLZXlDaGFuZ2UnOyB2aWV3TW9yZUtleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnIH07XG5cbiAgLy8vLy8vLy8vL1xuICAvLyBMb2FkIC8vXG4gIC8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBMb2FkID0ge1xuICAgIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vL1xuICAvLyBSZXN1bHQgLy9cbiAgLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgUmVzdWx0PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZC5cbiAgICAgKi9cbiAgICBjdXJyZW50UGFnZURhdGE6IFJbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU3ViR3JvdXBSZXN1bHQ8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IFJlc3VsdDxSPiAmIHtcbiAgICAvKipcbiAgICAgKiBBbnkgb3RoZXIgcmVsZXZhbnQgZ3JvdXAgZGF0YSwgdXNlZCBmb3IgdGhlIHN1YmhlYWRlclxuICAgICAqL1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZCwgc3BsaXQgaW50byBncm91cHNcbiAgICAgKi9cbiAgICBncm91cFJlc3VsdHM6IFN1Ykdyb3VwUmVzdWx0PFIsIEc+W107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBncm91cHMgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxHcm91cENvdW50OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBTb3VyY2U8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gKFxuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPixcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248UiwgQywgRiwgRz4sXG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPj47XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBEaXNwbGF5IC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvLyBEaXNwbGF5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uU2V0dGluZ3M8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAgbmFtZTogQztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgcGlubmVkOiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBEaXNwbGF5PEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGNvbHVtblNldHRpbmdzOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICB9O1xuXG4gIC8vIERpc3BsYXkgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIERpc3BsYXlBY3Rpb248QyBleHRlbmRzIENvbHVtbj4gPVxuICAgIHwgeyB0eXBlOiAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOyBwYXlsb2FkOiBEaXNwbGF5PEM+Wydjb2x1bW5TZXR0aW5ncyddIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtblBpbkNoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcGlubmVkOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnO1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBmcmVlemU6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5PcmRlckNoYW5nZSc7XG4gICAgICAgIHByZXZpb3VzSW5kZXg6IG51bWJlcjtcbiAgICAgICAgbmV3SW5kZXg6IG51bWJlcjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJztcbiAgICAgICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbldpZHRoQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwcmVmZXJyZWRXaWR0aDogbnVtYmVyIHwgJ2F1dG8nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncmVzZXRUb0RlZmF1bHRDb2x1bW5zJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFNlbGVjdGlvbiAvL1xuICAvLy8vLy8vLy8vLy8vLy9cblxuICAvLyBTZWxlY3Rpb24gc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb248UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IFJbJ2lkJ10gfCBudWxsO1xuICB9ICYgKFxuICAgIHwge1xuICAgICAgICBtb2RlOiAnaW5jbHVkZSc7XG4gICAgICAgIGluY2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdleGNsdWRlJztcbiAgICAgICAgZXhjbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgKTtcblxuICAvLyBTZWxlY3Rpb24gYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbkFjdGlvbjxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfT4gPVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogU2VsZWN0aW9uPFI+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnZ3JvdXBTZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBSb3dHcm91cDxSLCBHPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3Jvd1NlbGVjdGVkQ2hhbmdlJztcbiAgICAgICAgaWQ6IFJbJ2lkJ107XG4gICAgICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgICAgICBjb250aWd1b3VzOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncGFnZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2FsbFNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNsZWFyJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvLyBDb21iaW5lZCBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvcmVTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgcXVlcnk6IFF1ZXJ5PEMsIEY+O1xuICAgIGxvYWQ6IExvYWQ7XG4gICAgcmVzdWx0OiBSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPjtcbiAgICBkaXNwbGF5OiBEaXNwbGF5PEM+O1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uPFI+O1xuICB9O1xuXG4gIC8vIENvbWJpbmVkIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBBY3Rpb248XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gUXVlcnlBY3Rpb248QywgRj4gfCBEaXNwbGF5QWN0aW9uPEM+IHwgU2VsZWN0aW9uQWN0aW9uPFIsIEc+O1xuXG4gIC8vIEZ1bGwgc3RhdGUgKGNvcmUgc3RhdGUgcGx1cyBwdXJlIGRlcml2YXRpb25zKSAvL1xuXG4gIGV4cG9ydCBjb25zdCBDb2x1bW5EYXRhVHlwZXMgPSBbXG4gICAgJ2FkdmFuY2VkJyxcbiAgICAnY3VycmVuY3knLFxuICAgICdkYXRlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvbmdUZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnc2hvcnRUZXh0JyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPSAodHlwZW9mIENvbHVtbkRhdGFUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZGVmYXVsdFBpbm5lZD86IGJvb2xlYW47XG4gICAgY2xpY2tQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XG4gICAgY2xpY2tTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBSb3dMaW5rID0gRXh0ZXJuYWxSb3dMaW5rIHwgSW50ZXJuYWxSb3dMaW5rO1xuICBleHBvcnQgdHlwZSBGdWxsUm93PFIgZXh0ZW5kcyBSb3c+ID0gUiAmIHtcbiAgICByb3dMaW5rOiBSb3dMaW5rIHwgbnVsbDtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBSb3dHcm91cDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICBzZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgICBncm91cERhdGE6IEc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEZ1bGxDb2x1bW48QyBleHRlbmRzIENvbHVtbj4gPSBDb2x1bW5TZXR0aW5nczxDPiAmXG4gICAgQ29sdW1uTWV0YWRhdGEgJiB7XG4gICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgbGVmdDogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGFsaWdubWVudDogQ29sdW1uQWxpZ25tZW50O1xuICAgIH07XG4gIGV4cG9ydCB0eXBlIE11bHRpU2VsZWN0aW9uU3RhdGUgPSBib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGUnO1xuXG4gIGV4cG9ydCB0eXBlIENzdkNlbGxGb3JtYXR0ZXI8UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93OiBSLFxuICAgIGNvbHVtbjogRnVsbENvbHVtbjxDPixcbiAgKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIGV4cG9ydCB0eXBlIENzdlJvdyA9IHN0cmluZ1tdO1xuICBleHBvcnQgdHlwZSBDc3YgPSBDc3ZSb3dbXTtcbiAgZXhwb3J0IHR5cGUgQ3N2TW9kZSA9ICdmdWxsJyB8ICdzZWxlY3Rpb24nO1xuICBleHBvcnQgdHlwZSBDc3ZPdXRwdXQgPVxuICAgIHwgeyBsb2FkaW5nOiB0cnVlOyBkYXRhOiBudWxsIH1cbiAgICB8IHsgbG9hZGluZzogZmFsc2U7IGRhdGE6IENzdiB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtbk5hbWVNYXA8QyBleHRlbmRzIENvbHVtbj4gPSBNYXA8QywgQyB8IHN0cmluZz47XG5cbiAgZXhwb3J0IHR5cGUgRnVsbFN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiAmIHtcbiAgICBxdWVyeToge1xuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBwcmV2aW91czogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZXM6IG51bWJlcltdO1xuICAgICAgICBuZXh0OiBudW1iZXIgfCBudWxsO1xuICAgICAgICBwYWdlQ291bnQ6IG51bWJlcjtcbiAgICAgICAgc2hvd0NvbnRyb2xzOiBib29sZWFuO1xuICAgICAgICBwYWdlUm93U3RhcnQ6IG51bWJlcjtcbiAgICAgICAgcGFnZVJvd0VuZDogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIG5vU2VhcmNoQ29sdW1uc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIH07XG4gICAgcmVzdWx0OlxuICAgICAgfCB7XG4gICAgICAgICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgICAgICAgIHJvd3NBc0dyb3VwOiBSb3dHcm91cDxSLCBHPjtcbiAgICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZTtcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBjb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICBhbGxDb2x1bW5zOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgICBzZWxlY3Rpb246IHtcbiAgICAgIGFsbG93U2VsZWN0aW9uOiBib29sZWFuO1xuICAgICAgaXNBbGxTZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICAgIHNlbGVjdGVkQ291bnQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuYWdlciBpcyB3aGF0IHNldHMgdXAgdGhlIGluaXRpYWwgc3RhdGUgYW5kIHRyYW5zbGF0ZXMgdXNlciBhY3Rpb25zXG4gICAqIChsaWtlIHBhZ2luYXRpb24gb3IgZmlsdGVyIGNoYW5nZXMsIGV0Yy4pIGludG8gbmV3IHJvdyBkYXRhIGJ5IGNhbGxpbmcgdGhlXG4gICAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IGFsc28gYXVnbWVudHMgdGhlIGNvcmUgc3RhdGUgd2l0aCBhZGRpdGlvbmFsIGRlcml2ZWRcbiAgICogc3RhdGUuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPFIsIEMsIEYsIEc+PjtcbiAgICBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICByb3dMaW5rPzogKHJvdzogUikgPT4gUm93TGluaztcbiAgICBjc3ZDZWxsRm9ybWF0dGVyPzogQ3N2Q2VsbEZvcm1hdHRlcjxSLCBDPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gICAgYWxsb3dTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIGRlZmF1bHRDb2x1bW5TdGF0ZT86IENvbHVtblNldHRpbmdzPEM+W107XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIHNvdXJjZTogU291cmNlPFIsIEMsIEYsIEc+LFxuICAgIGNvbHVtbnM6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4sXG4gICAgcGx1cmFsRW50aXR5TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxSLCBDLCBGLCBHPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGLCBHPiB7XG4gICAgLy8gU2V0IHVwIHRoZSBpbml0aWFsIHRhYmxlIHN0YXRlLlxuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoXG4gICAgICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmtleXMoKSkubWFwKGtleSA9PiBba2V5LCB0cnVlXSksXG4gICAgICAgICksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICB2aWV3TW9yZUtleTogbnVsbCxcbiAgICAgICAgICBncm91cHNQZXJQYWdlOiA1LFxuICAgICAgICAgIGNvdW50UGVyR3JvdXA6IDEwLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxvYWQ6IHsgbG9hZGluZzogZmFsc2UsIGVycm9yOiBudWxsIH0sXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBbXSxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IFtdLFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz4gPSBuZXcgTWFwPEMsIEMgfCBzdHJpbmc+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBtZXRhZGF0YS5kaXNwbGF5TmFtZSA/PyBrZXksXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtblN0YXRlID1cbiAgICAgIG9wdGlvbnM/LmRlZmF1bHRDb2x1bW5TdGF0ZSA/P1xuICAgICAgZGVmYXVsdGVkSW5pdGlhbFN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3M7XG5cbiAgICAvLyBXaXJlIHVwIHJlZHVjZWQgc3RhdGUgZnJvbSBhY3Rpb25zIGFuZCBpbml0aWFsIHN0YXRlLlxuICAgIGNvbnN0IGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPFIsIEMsIEYsIEc+PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgY29yZVN0YXRlOiBPYnNlcnZhYmxlPENvcmVTdGF0ZTxSLCBDLCBGLCBHPj4gPSBhY3Rpb25zLnBpcGUoXG4gICAgICBtZXJnZVNjYW4oXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PlxuICAgICAgICAgIGZyb20oXG4gICAgICAgICAgICByZWR1Y2UoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUsXG4gICAgICAgIDEsXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcCgoczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+ID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0ZVdpdGhvdXRSZXN1bHQ6IE9taXQ8XG4gICAgICAgICAgICBGdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgICAgICAgICAncmVzdWx0JyB8ICdpc0dyb3VwZWQnXG4gICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4ucy5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzOiBnZXRQcmV2aW91c1BhZ2UocyksXG4gICAgICAgICAgICAgICAgcGFnZXM6IGdldFBhZ2VzKHMpLFxuICAgICAgICAgICAgICAgIG5leHQ6IGdldE5leHRQYWdlKHMpLFxuICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogZ2V0UGFnZUNvdW50KHMpLFxuICAgICAgICAgICAgICAgIHNob3dDb250cm9sczogZ2V0U2hvd1BhZ2luYXRpb25Db250cm9scyhzKSxcbiAgICAgICAgICAgICAgICBwYWdlUm93U3RhcnQ6IGdldFBhZ2VSb3dTdGFydChzKSxcbiAgICAgICAgICAgICAgICBwYWdlUm93RW5kOiBnZXRQYWdlUm93RW5kKHMpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGUocywgJ25vbmUnKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAgIC4uLnMuZGlzcGxheSxcbiAgICAgICAgICAgICAgY29sdW1uczogcmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgICAgb3B0aW9ucz8uYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGFsbENvbHVtbnM6IGdldEFsbENvbHVtbnMocywgY29sdW1ucywgY29sdW1uTmFtZU1hcCksXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IGdldFplcm9TdGF0ZU1lc3NhZ2UocywgcGx1cmFsRW50aXR5TmFtZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICBhbGxvd1NlbGVjdGlvbjogISFvcHRpb25zPy5hbGxvd1NlbGVjdGlvbixcbiAgICAgICAgICAgICAgaXNBbGxTZWxlY3RlZDogaXNBbGxTZWxlY3RlZChzKSxcbiAgICAgICAgICAgICAgaXNDdXJyZW50UGFnZVNlbGVjdGVkOiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQ6IHNlbGVjdGVkQ291bnQocyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgY29tbW9uUmVzdWx0RGF0YToge1xuICAgICAgICAgICAgY3N2RGF0YTogKG1vZGU/OiBDc3ZNb2RlKSA9PiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+O1xuICAgICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgICB9ID0ge1xuICAgICAgICAgICAgY3N2RGF0YTogYXN5bmMgZnVuY3Rpb24qIChtb2RlID0gJ2Z1bGwnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgICAgICAgICBpZiAoIWNlbGxGb3JtYXR0ZXIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgJ29wdGlvbnMuY3N2Q2VsbEZvcm1hdHRlciBpcyByZXF1aXJlZCBmb3IgQ1NWIGV4cG9ydCcsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgeWllbGQgeyBsb2FkaW5nOiB0cnVlLCBkYXRhOiBudWxsIH07XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSBhd2FpdCBzb3VyY2UoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHMucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdsb2FkJyB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IHJlc29sdmVDb2x1bW5zKFxuICAgICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgICAgICAgICBkYXRhLnB1c2goXG4gICAgICAgICAgICAgICAgZnVsbENvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQobmFtZSkgPz8gbmFtZSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGdldEFsbFJvd3NGcm9tUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdzZWxlY3Rpb24nICYmICFpc1Jvd1NlbGVjdGVkKHMsIHJlY29yZC5pZCkpXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3c6IENzdlJvdyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjc3ZGaWxlbmFtZTpcbiAgICAgICAgICAgICAgKG9wdGlvbnM/LmNzdkZpbGVCYXNlbmFtZT8uc2xpY2UoMCwgMjAwKSA/PyBwbHVyYWxFbnRpdHlOYW1lKSArXG4gICAgICAgICAgICAgICcuY3N2JyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGlzR3JvdXBSZXN1bHQocy5yZXN1bHQpKSB7XG4gICAgICAgICAgICBjb25zdCByb3dHcm91cHMgPSBzLnJlc3VsdC5ncm91cFJlc3VsdHMubWFwKGdyb3VwID0+ICh7XG4gICAgICAgICAgICAgIHJvd3M6IGdyb3VwLmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICAgICAgIHJvd0xpbms6IG9wdGlvbnM/LnJvd0xpbmsgPyBvcHRpb25zLnJvd0xpbmsocm93KSA6IG51bGwsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogaXNHcm91cFNlbGVjdGVkKHMsIGdyb3VwKSxcbiAgICAgICAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBncm91cC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgICAgIGdyb3VwRGF0YTogZ3JvdXAuZ3JvdXBEYXRhLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uc3RhdGVXaXRob3V0UmVzdWx0LFxuICAgICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAuLi5jb21tb25SZXN1bHREYXRhLFxuICAgICAgICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICByb3dHcm91cHMsXG4gICAgICAgICAgICAgICAgcm93czogcm93R3JvdXBzLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAucm93cyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gcy5yZXN1bHQuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rID8gb3B0aW9ucy5yb3dMaW5rKHJvdykgOiBudWxsLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uc3RhdGVXaXRob3V0UmVzdWx0LFxuICAgICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zLnJlc3VsdCxcbiAgICAgICAgICAgICAgICAuLi5jb21tb25SZXN1bHREYXRhLFxuICAgICAgICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICByb3dzQXNHcm91cDoge1xuICAgICAgICAgICAgICAgICAgcm93cyxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICBncm91cERhdGE6IHsga2V5OiAnJyB9IGFzIEcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc2Nhbigoc3RhYmxlLCBuZXdTdGF0ZSkgPT4gc3RhYmxlU3RhdGUoc3RhYmxlLCBuZXdTdGF0ZSkpLFxuICAgICAgKSxcbiAgICAgIHtcbiAgICAgICAgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSxcbiAgICAgICAgcmVzZXRPbkRpc2Nvbm5lY3Q6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIHN0YXRlLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgaW5pdGlhbCB0YWJsZSByb3cgZGF0YS5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3QgdGFibGVzIHVzZSByZW1vdGUgYmFja2VuZHMgdG8gZmV0Y2ggZGF0YSBhc3luY2hyb25vdXNseSwgYnV0IGFuXG4gICAqIGluLW1lbW9yeSBzb3VyY2UgaXMgdXNlZnVsIGZvciBzbWFsbCBkYXRhc2V0cywgd2hlbiBSaXZUYWJsZSBmZWF0dXJlcyBsaWtlXG4gICAqIG9yZGVyaW5nIGFuZCBwYWdpbmF0aW9uIGFyZSBkZXNpcmVkLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFIgZXh0ZW5kcyBSb3c+ID0gT21pdDxcbiAgICBDb2x1bW5NZXRhZGF0YSxcbiAgICAnb3JkZXJhYmxlJ1xuICA+ICYgeyBvcmRlcktleT86IGtleW9mIFIgfTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+ICYge1xuICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPFI+O1xuICAgIGZpbHRlcj86IChmaWx0ZXJzOiBGIHwgbnVsbCwgcm93OiBSKSA9PiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbk1lbW9yeU1hbmFnZXI8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICA+KFxuICAgIGZldGNoRGF0YXNldDogKCkgPT4gUHJvbWlzZTxSW10+IHwgUltdLFxuICAgIGNvbHVtbnM6IE1hcDxDLCBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFI+PixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8UiwgQywgRj4sXG4gICk6IE1hbmFnZXI8UiwgQywgRj4ge1xuICAgIGxldCBkYXRhOiBSW107XG4gICAgbGV0IGZ1c2U6IEZ1c2U8Uj47XG5cbiAgICBjb25zdCBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGPiA9IGFzeW5jIChxdWVyeSwgbW9zdFJlY2VudEFjdGlvbikgPT4ge1xuICAgICAgLy9Gb3IgaW5NZW1vcnlNYW5hZ2VycyB0aGF0IGRvIG5vdCB1dGlsaXplIHNlYXJjaENvbHVtbnMsXG4gICAgICAvL3dlIGRvIG5vdCB3YW50IHRvIG92ZXJ3cml0ZSB0aGVpciBmdXNlT3B0aW9uc1xuICAgICAgaWYgKG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIHtcbiAgICAgICAgICAuLi5vcHRpb25zPy5mdXNlT3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENvbHVtbnNDaGFuZ2UnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2UoZGF0YSwge1xuICAgICAgICAgIC4uLm9wdGlvbnM/LmZ1c2VPcHRpb25zLFxuICAgICAgICAgIGtleXM6IEFycmF5LmZyb20ocXVlcnkuc2VhcmNoQ29sdW1ucy5lbnRyaWVzKCkpXG4gICAgICAgICAgICAuZmlsdGVyKChbXywgdmFsdWVdKSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgX10pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29sdW1uS2V5ID0gY29sdW1ucy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIChjb2x1bW5LZXk/Lm9yZGVyS2V5IGFzIEMpIHx8IGtleTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1uOiBrZXlvZiBSIHwgdW5kZWZpbmVkID0gcXVlcnkub3JkZXJcbiAgICAgICAgPyBjb2x1bW5zLmdldChxdWVyeS5vcmRlci5jb2x1bW4pPy5vcmRlcktleVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG9yZGVyZWQgPSBxdWVyeS5zZWFyY2hcbiAgICAgICAgPyBmdXNlLnNlYXJjaChxdWVyeS5zZWFyY2gpLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0pXG4gICAgICAgIDogcXVlcnkub3JkZXIgJiYgb3JkZXJDb2x1bW5cbiAgICAgICAgPyBvcmRlckJ5KGRhdGEsIG9yZGVyQ29sdW1uLCBxdWVyeS5vcmRlci5kaXJlY3Rpb24pXG4gICAgICAgIDogZGF0YTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnM/LmZpbHRlcjtcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gZmlsdGVyXG4gICAgICAgID8gb3JkZXJlZC5maWx0ZXIocm93ID0+IGZpbHRlcihxdWVyeS5maWx0ZXJzLCByb3cpKVxuICAgICAgICA6IG9yZGVyZWQ7XG4gICAgICBjb25zdCBzdGFydElkeCA9IHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUgKiBxdWVyeS5wYWdpbmF0aW9uLnBhZ2U7XG4gICAgICBjb25zdCBlbmRJZHggPSBzdGFydElkeCArIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgICBjb25zdCBwYWdpbmF0ZWQgPSBmaWx0ZXJlZC5zbGljZShzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogcGFnaW5hdGVkLFxuICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGZpbHRlcmVkLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBjb2x1bW5NZXRhZGF0YTogTWFwPEMsIENvbHVtbk1ldGFkYXRhPiA9IG5ldyBNYXAoXG4gICAgICBbLi4uY29sdW1ucy5lbnRyaWVzKCldLm1hcCgoW25hbWUsIG1ldGFkYXRhXSkgPT4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgb3JkZXJhYmxlOiAhIW1ldGFkYXRhLm9yZGVyS2V5LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICBtaW5XaWR0aDogbWV0YWRhdGEubWluV2lkdGgsXG4gICAgICAgICAgZGF0YVR5cGU6IG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgICAgICAgIGRlZmF1bHRQaW5uZWQ6IG1ldGFkYXRhLmRlZmF1bHRQaW5uZWQsXG4gICAgICAgICAgY2xpY2tQcmV2ZW50RGVmYXVsdDogbWV0YWRhdGEuY2xpY2tQcmV2ZW50RGVmYXVsdCxcbiAgICAgICAgICBjbGlja1N0b3BQcm9wYWdhdGlvbjogbWV0YWRhdGEuY2xpY2tTdG9wUHJvcGFnYXRpb24sXG4gICAgICAgICAgZGlzcGxheU5hbWU6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgICByZXR1cm4gY3JlYXRlTWFuYWdlcihzb3VyY2UsIGNvbHVtbk1ldGFkYXRhLCBwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vL1xuICAvLyBVdGlsaXRpZXMgLy9cbiAgLy8vLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkFsaWdubWVudChcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGUsXG4gICAgaXNGaXJzdDogYm9vbGVhbixcbiAgKTogQ29sdW1uQWxpZ25tZW50IHtcbiAgICBpZiAoaXNGaXJzdCkgcmV0dXJuICdsZWZ0JztcbiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ2xvbmdUZXh0JzpcbiAgICAgICAgcmV0dXJuICdsZWZ0JztcbiAgICAgIGNhc2UgJ2FkdmFuY2VkJzpcbiAgICAgIGNhc2UgJ2ljb24nOlxuICAgICAgY2FzZSAnc2hvcnRUZXh0JzpcbiAgICAgICAgcmV0dXJuICdjZW50ZXInO1xuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBrZWVwcyB0aGUgc3RhdGUgb2JqZWN0IHJlZmVyZW5jZXMgYXMgc3RhYmxlIGFzIHBvc3NpYmxlLCB3aGljaFxuICogaGVscHMgQW5ndWxhciByZWR1Y2UgdW5uZWNlc3NhcnkgcmUtcmVuZGVycy4gRm9yIG5vdywgc2ltcGxlIGlzRXF1YWwoKVxuICogY2hlY2tzIGF0IHRoZSBzdGF0ZSdzIHRvcC1sZXZlbCBrZXlzIGFyZSBzdWZmaWNpZW50IHRvIGRyYW1hdGljYWxseSBzcGVlZCB1cFxuICogcmVuZGVyaW5nLCBidXQgaWYgb3RoZXIgcGVyZm9ybWFuY2UgaXNzdWVzIGFyaXNlLCB3ZSBjb3VsZCBpbXBsZW1lbnQgbW9yZVxuICogZ3JhbnVsYXIgY2hlY2tzL3N1cmdpY2FsIHVwZGF0ZXMgYXMgbmVlZGVkICh0aGUgc3RhdGUucmVzdWx0IGJlaW5nIHRoZSBtb3N0XG4gKiBsaWtlbHkgY2FuZGlkYXRlLCBzaW5jZSBtYW55IHR5cGVzIG9mIHN0YXRlIHVwZGF0ZXMgYWZmZWN0IHBhcnRzIG9mIHRoZVxuICogcmVzdWx0IHJvd3MpLlxuICovXG5mdW5jdGlvbiBzdGFibGVTdGF0ZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHRhcmdldDogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPixcbik6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucXVlcnksIHNvdXJjZS5xdWVyeSkpIHtcbiAgICB0YXJnZXQucXVlcnkgPSBzb3VyY2UucXVlcnk7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5sb2FkLCBzb3VyY2UubG9hZCkpIHtcbiAgICB0YXJnZXQubG9hZCA9IHNvdXJjZS5sb2FkO1xuICB9XG5cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQuY3N2RGF0YSwgc291cmNlLnJlc3VsdC5jc3ZEYXRhKSkge1xuICAgIHRhcmdldC5yZXN1bHQuY3N2RGF0YSA9IHNvdXJjZS5yZXN1bHQuY3N2RGF0YTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdC5jc3ZGaWxlbmFtZSwgc291cmNlLnJlc3VsdC5jc3ZGaWxlbmFtZSkpIHtcbiAgICB0YXJnZXQucmVzdWx0LmNzdkZpbGVuYW1lID0gc291cmNlLnJlc3VsdC5jc3ZGaWxlbmFtZTtcbiAgfVxuICBpZiAoXG4gICAgIWlzRXF1YWwoXG4gICAgICB0YXJnZXQucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgIHNvdXJjZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgIClcbiAgKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPSBzb3VyY2UucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudDtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdCwgc291cmNlLnJlc3VsdCkpIHtcbiAgICB0YXJnZXQucmVzdWx0ID0gc291cmNlLnJlc3VsdDtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LmRpc3BsYXksIHNvdXJjZS5kaXNwbGF5KSkge1xuICAgIHRhcmdldC5kaXNwbGF5ID0gc291cmNlLmRpc3BsYXk7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5zZWxlY3Rpb24sIHNvdXJjZS5zZWxlY3Rpb24pKSB7XG4gICAgdGFyZ2V0LnNlbGVjdGlvbiA9IHNvdXJjZS5zZWxlY3Rpb247XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gZ2V0UGFnZUNvdW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHtcbiAgaWYgKGlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSkge1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIE1hdGguY2VpbChcbiAgICAgICAgc3RhdGUucmVzdWx0LnRvdGFsR3JvdXBDb3VudCAvIHN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLmdyb3Vwc1BlclBhZ2UsXG4gICAgICApLFxuICAgICAgMSxcbiAgICApO1xuICB9XG4gIHJldHVybiBNYXRoLm1heChcbiAgICBNYXRoLmNlaWwoXG4gICAgICBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50IC8gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICApLFxuICAgIDEsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFByZXZpb3VzUGFnZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB8IG51bGwge1xuICByZXR1cm4gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlID09PSAwXG4gICAgPyBudWxsXG4gICAgOiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgLSAxO1xufVxuXG5mdW5jdGlvbiBnZXRQYWdlczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlcltdIHtcbiAgY29uc3QgcGFkZGluZyA9IDQ7XG4gIGNvbnN0IG1pbiA9IDA7XG4gIGNvbnN0IG1heCA9IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxO1xuICBjb25zdCBkZXNpcmVkU3RhcnQgPSBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgLSBwYWRkaW5nO1xuICBjb25zdCBjbGFtcGVkU3RhcnQgPSBNYXRoLm1heChtaW4sIGRlc2lyZWRTdGFydCk7XG4gIGNvbnN0IGRlc2lyZWRFbmQgPSBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKyBwYWRkaW5nO1xuICBjb25zdCBjbGFtcGVkRW5kID0gTWF0aC5taW4obWF4LCBkZXNpcmVkRW5kKTtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heChtaW4sIGNsYW1wZWRTdGFydCAtIChkZXNpcmVkRW5kIC0gY2xhbXBlZEVuZCkpO1xuICBjb25zdCBlbmQgPSBNYXRoLm1pbihtYXgsIGNsYW1wZWRFbmQgKyAoY2xhbXBlZFN0YXJ0IC0gZGVzaXJlZFN0YXJ0KSk7XG4gIHJldHVybiByYW5nZShzdGFydCwgZW5kICsgMSk7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRQYWdlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IG1heCA9IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxO1xuICBjb25zdCBuZXh0ID0gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlICsgMTtcbiAgcmV0dXJuIG5leHQgPD0gbWF4ID8gbmV4dCA6IG51bGw7XG59XG5cbi8vIFdlIGRvbid0IHdhbnQgdG8gc2hvdyB0aGUgcGFnaW5hdGlvbiBjb250cm9scyB3aGVuIHRoZXkgYXJlIHVubmVjZXNzYXJ5LlxuZnVuY3Rpb24gZ2V0U2hvd1BhZ2luYXRpb25Db250cm9sczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IGJvb2xlYW4ge1xuICBpZiAoaXNHcm91cFJlc3VsdChzdGF0ZS5yZXN1bHQpKSB7XG4gICAgcmV0dXJuIHN0YXRlLnJlc3VsdC50b3RhbEdyb3VwQ291bnQgPiBzdGF0ZS5xdWVyeS5ncm91cGluZy5ncm91cHNQZXJQYWdlO1xuICB9XG4gIHJldHVybiAoXG4gICAgc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA+IE1hdGgubWluKC4uLlsuLi5SaXZUYWJsZS5wYWdlU2l6ZXNdKVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYWdlUm93U3RhcnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlICogc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSArIDE7XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2VSb3dFbmQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5taW4oXG4gICAgKHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIDEpICogc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc3VwcG9ydGVkQ29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbik6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10ge1xuICAvLyBJZiB0aGUgdGFibGUgb2ZmZXJzIG1vcmUgY29sdW1ucyB0aGFuIHRoZSB1c2VyIGhhcyBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4gIC8vIGZvciAob3IgaWYgdGhlIHVzZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgeWV0KSwgd2UnbGwgYXBwZW5kIHRoZW1cbiAgLy8gdG8gdGhlIGVuZCAodW5sZXNzIHRoZXkgc2hvdWxkIGJlIHBpbm5lZCBieSBkZWZhdWx0LCBpbiB3aGljaCBjYXNlIHdlJ2xsXG4gIC8vIGFwcGVuZCB0aGVtIGFmdGVyIHRoZSBvdGhlciBwaW5uZWQgY29sdW1ucykuIFRoaXMgZW5zdXJlcyB0aGF0IG5ldyBjb2x1bW5zXG4gIC8vIHdlIGFkZCB0byBleGlzdGluZyB0YWJsZXMgb3ZlciB0aW1lICgxKSBnZXQgZGlzcGxheWVkIGV2ZW4gdGhvdWdoIHRoZXlcbiAgLy8gZG9uJ3QgYXBwZWFyIGluIHRoZSB1c2VyJ3MgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB5ZXQsIGFuZCAoMikgZG9uJ3RcbiAgLy8gaW50ZXJydXB0IHRoZWlyIGV4aXN0aW5nIHNldHVwLlxuICBjb25zdCBjb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MgPSBkaWZmZXJlbmNlKFxuICAgIFsuLi5zdXBwb3J0ZWRDb2x1bW5zLmtleXMoKV0sXG4gICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKSxcbiAgKTtcblxuICAvLyBUaHJvdyBvdXQgc2V0dGluZ3MgZm9yIGNvbHVtbnMgbm8gbG9uZ2VyIG9mZmVyZWQgYnkgdGhlIHRhYmxlLlxuICBjb25zdCBjb2x1bW5zV2l0aFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9XG4gICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5maWx0ZXIoKHsgbmFtZSB9KSA9PlxuICAgICAgc3VwcG9ydGVkQ29sdW1ucy5oYXMobmFtZSksXG4gICAgKTtcblxuICBjb25zdCBjb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9IFtcbiAgICAuLi5jb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MsXG4gIF0ubWFwKChuYW1lOiBDKSA9PiAoe1xuICAgIG5hbWUsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBwcmVmZXJyZWRXaWR0aDogJ2F1dG8nLFxuICAgIHBpbm5lZDogISFzdXBwb3J0ZWRDb2x1bW5zLmdldChuYW1lKT8uZGVmYXVsdFBpbm5lZCxcbiAgfSkpO1xuXG4gIHJldHVybiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgWy4uLmNvbHVtbnNXaXRoVXNlclNldHRpbmdzLCAuLi5jb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nc10sXG4gICAgY29sdW1uTmFtZU1hcCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gb3JkZXJJbnRlbnRpb25hbGx5PEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4+KFxuICBjb2x1bW5zOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuKTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSB7XG4gIHJldHVybiBbXG4gICAgLi4uY29sdW1ucy5maWx0ZXIodiA9PiB2LnBpbm5lZCksXG4gICAgLi4uY29sdW1ucy5maWx0ZXIodiA9PiB2LmVuYWJsZWQgJiYgIXYucGlubmVkKSxcbiAgICAuLi5jb2x1bW5zXG4gICAgICAuZmlsdGVyKHYgPT4gIXYuZW5hYmxlZCAmJiAhdi5waW5uZWQpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhTmFtZSA9IGNvbHVtbk5hbWVNYXAuZ2V0KGEubmFtZSkgPz8gYS5uYW1lO1xuICAgICAgICBjb25zdCBiTmFtZSA9IGNvbHVtbk5hbWVNYXAuZ2V0KGIubmFtZSkgPz8gYi5uYW1lO1xuICAgICAgICByZXR1cm4gYU5hbWUubG9jYWxlQ29tcGFyZShiTmFtZSk7XG4gICAgICB9KSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KFxuICBtZXRhZGF0YTogUml2VGFibGUuQ29sdW1uTWV0YWRhdGEsXG4gIGluZGV4OiBudW1iZXIsXG4gIGFsbG93U2VsZWN0aW9uPzogYm9vbGVhbixcbik6IFJpdlRhYmxlLkNvbHVtbkFsaWdubWVudCB7XG4gIHJldHVybiBSaXZUYWJsZS5nZXRDb2x1bW5BbGlnbm1lbnQoXG4gICAgbWV0YWRhdGEuZGF0YVR5cGUsXG4gICAgaW5kZXggPT09IDAgJiYgIWFsbG93U2VsZWN0aW9uLFxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29sdW1uczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIHN1cHBvcnRlZENvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGFsbG93U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogUml2VGFibGUuRnVsbENvbHVtbjxDPltdIHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIHN1cHBvcnRlZENvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICByZXR1cm4gYWxsQ29sdW1uc1xuICAgIC5maWx0ZXIoKHsgZW5hYmxlZCB9KSA9PiBlbmFibGVkKVxuICAgIC5yZWR1Y2UoXG4gICAgICAoXG4gICAgICAgIGZ1bGxDb2x1bW5zOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10sXG4gICAgICAgIHNldHRpbmdzOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPixcbiAgICAgICAgaTogbnVtYmVyLFxuICAgICAgKTogUml2VGFibGUuRnVsbENvbHVtbjxDPltdID0+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBzdXBwb3J0ZWRDb2x1bW5zLmdldChzZXR0aW5ncy5uYW1lKSE7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkV2lkdGggPVxuICAgICAgICAgIHNldHRpbmdzLnByZWZlcnJlZFdpZHRoID09PSAnYXV0bydcbiAgICAgICAgICAgID8gbWV0YWRhdGEubWluV2lkdGhcbiAgICAgICAgICAgIDogTWF0aC5tYXgobWV0YWRhdGEubWluV2lkdGgsIHNldHRpbmdzLnByZWZlcnJlZFdpZHRoKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNDb2x1bW46IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz4gfCB1bmRlZmluZWQgPVxuICAgICAgICAgIGZ1bGxDb2x1bW5zW2kgLSAxXTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAuLi5mdWxsQ29sdW1ucyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgICAgICAgd2lkdGg6IHJlc29sdmVkV2lkdGgsXG4gICAgICAgICAgICBsZWZ0OiBzZXR0aW5ncy5waW5uZWRcbiAgICAgICAgICAgICAgPyBwcmV2aW91c0NvbHVtblxuICAgICAgICAgICAgICAgID8gKHByZXZpb3VzQ29sdW1uLmxlZnQgfHwgMCkgKyBwcmV2aW91c0NvbHVtbi53aWR0aFxuICAgICAgICAgICAgICAgIDogYWxsb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICA/IDQwXG4gICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGFsaWdubWVudDogZ2V0QWxpZ25tZW50KG1ldGFkYXRhLCBpLCBhbGxvd1NlbGVjdGlvbiksXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0sXG4gICAgICBbXSxcbiAgICApO1xufVxuXG5mdW5jdGlvbiBnZXRaZXJvU3RhdGVNZXNzYWdlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LCBlbnRpdHk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoXG4gICAgKGlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSAmJiBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50ID4gMCkgfHxcbiAgICAoIWlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSAmJiBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID4gMClcbiAgKVxuICAgIHJldHVybiBudWxsO1xuICBjb25zdCBhbGxTZWFyY2hDb2x1bW5zU2VsZWN0ZWQgPSBnZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShzdGF0ZSwgJ2FsbCcpO1xuICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoICYmIGFsbFNlYXJjaENvbHVtbnNTZWxlY3RlZClcbiAgICByZXR1cm4gYE5vICR7ZW50aXR5fSBtYXRjaCB5b3VyIGN1cnJlbnQgc2VhcmNoIGtleXdvcmQuYDtcbiAgaWYgKHN0YXRlLnF1ZXJ5LnNlYXJjaCAmJiAhYWxsU2VhcmNoQ29sdW1uc1NlbGVjdGVkKVxuICAgIHJldHVybiBgTm8gJHtlbnRpdHl9IG1hdGNoIHlvdXIgY3VycmVudCBzZWFyY2gga2V5d29yZCBpbiB0aGUgc2VsZWN0ZWQgc2VhcmNoIGNvbHVtbnMuYDtcbiAgaWYgKHN0YXRlLnF1ZXJ5LmZpbHRlcnMpIHJldHVybiBgTm8gJHtlbnRpdHl9IG1hdGNoIHlvdXIgY3VycmVudCBmaWx0ZXJzLmA7XG4gIHJldHVybiBgTm8gJHtlbnRpdHl9LmA7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtblBpbjxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGNvbHVtbjogQyxcbiAgcGlubmVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KFxuICAgICAgICBhbGxDb2x1bW5zLm1hcChjID0+ICh7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBwaW5uZWQ6IGMubmFtZSA9PT0gY29sdW1uID8gcGlubmVkIDogYy5waW5uZWQsXG4gICAgICAgICAgLy8gQ2hlY2svZW5hYmxlIGlmIGJlaW5nIHBpbm5lZFxuICAgICAgICAgIGVuYWJsZWQ6IGMubmFtZSA9PT0gY29sdW1uICYmIHBpbm5lZCA/IHRydWUgOiBjLmVuYWJsZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uc0ZyZWV6ZVN0YXRlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgaW5kZXg6IG51bWJlcixcbiAgZnJlZXplOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBhbGxDb2x1bW5zLm1hcCgoYywgaSkgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5jLCBwaW5uZWQ6IGZyZWV6ZSAmJiBpIDw9IGluZGV4IH07XG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtb3ZlQ29sdW1uVG88XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCcsXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIGNvbnN0IHByZXZpb3VzSW5kZXggPSBhbGxDb2x1bW5zLmZpbmRJbmRleChjID0+IGMubmFtZSA9PT0gY29sdW1uKTtcbiAgY29uc3QgbGFzdEluZGV4ID1cbiAgICBwb3NpdGlvbiA9PSAnZW5kJyA/IGFsbENvbHVtbnMuZmluZEluZGV4KGMgPT4gIWMuZW5hYmxlZCkgOiAwO1xuICBjb25zdCBuZXdJbmRleCA9XG4gICAgcG9zaXRpb24gPT0gJ3N0YXJ0J1xuICAgICAgPyAwXG4gICAgICA6IGxhc3RJbmRleCA9PSAtMVxuICAgICAgPyBhbGxDb2x1bW5zLmxlbmd0aCAtIDFcbiAgICAgIDogbGFzdEluZGV4O1xuXG4gIGNvbnN0IG1vdmVkU3RhdGUgPSBjaGFuZ2VDb2x1bW5PcmRlcihcbiAgICBzdGF0ZSxcbiAgICBjb2x1bW5zLFxuICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgcHJldmlvdXNJbmRleCxcbiAgICBuZXdJbmRleCxcbiAgKTtcbiAgLy9NYWtlIHN1cmUgdGhlIGNvbHVtbiBpcyBlbmFibGVkXG4gIHJldHVybiBjaGFuZ2VDb2x1bW5FbmFibGVkKG1vdmVkU3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXAsIGNvbHVtbiwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbk9yZGVyPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgcHJldmlvdXNJbmRleDogbnVtYmVyLFxuICBuZXdJbmRleDogbnVtYmVyLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gIC8vIEZpcnN0LCBwdXQgdGhlIGNvbHVtbnMgaW4gdGhlIGRlc2lyZWQgb3JkZXIuXG4gIGNvbnN0IGl0ZW0gPSBhbGxDb2x1bW5zW3ByZXZpb3VzSW5kZXhdO1xuICBjb25zdCB3aXRob3V0SXRlbSA9IGFsbENvbHVtbnMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBwcmV2aW91c0luZGV4KTtcbiAgY29uc3QgcmVvcmRlcmVkID0gW1xuICAgIC4uLndpdGhvdXRJdGVtLnNsaWNlKDAsIG5ld0luZGV4KSxcbiAgICBpdGVtLFxuICAgIC4uLndpdGhvdXRJdGVtLnNsaWNlKG5ld0luZGV4KSxcbiAgXTtcblxuICAvLyBUaGVuLCB3ZSBtYXkgbmVlZCB0byBmaXggdGhlIHBpbnMgKGFsbCBwaW5uZWQgY29sdW1ucyBhcHBlYXIgYXQgdGhlXG4gIC8vIGJlZ2lubmluZyBvZiB0aGUgY29sdW1ucyBhcnJheSkgc2luY2UgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBkcmFnXG4gIC8vIGFuZCBkcm9wIGNvbHVtbnMgdG8gYW5kIGZyb20gdGhlIHBpbm5lZCBhcmVhLiBJZiB0aGUgdXNlciBkcmFncyBhXG4gIC8vIGNvbHVtbiBhY3Jvc3MgdGhhdCB0aHJlc2hvbGQsIHVwZGF0ZSBpdHMgcGlubmVkIHN0YXR1cy5cbiAgY29uc3QgdXBkYXRlZCA9IHJlb3JkZXJlZC5tYXAoKHNldHRpbmdzLCBpLCBhcnIpID0+IHtcbiAgICBpZiAobmV3SW5kZXggPT09IGkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICBwaW5uZWQ6IHNldHRpbmdzLnBpbm5lZFxuICAgICAgICAgID8gYXJyW2kgLSAxXT8ucGlubmVkID8/IHRydWVcbiAgICAgICAgICA6IGFycltpICsgMV0/LnBpbm5lZCA/PyBmYWxzZSxcbiAgICAgICAgZW5hYmxlZDogc2V0dGluZ3MuZW5hYmxlZFxuICAgICAgICAgID8gYXJyW2kgLSAxXT8uZW5hYmxlZCA/PyB0cnVlXG4gICAgICAgICAgOiBhcnJbaSArIDFdPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgfTtcbiAgICB9IGVsc2UgcmV0dXJuIHNldHRpbmdzO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KHVwZGF0ZWQsIGNvbHVtbk5hbWVNYXApLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbkVuYWJsZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIGVuYWJsZWQ6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGVuYWJsZWQ6IGMubmFtZSA9PT0gY29sdW1uID8gZW5hYmxlZCA6IGMuZW5hYmxlZCxcbiAgICAgICAgICAvLyBVbnBpbiBpZiBiZWluZyB1bmNoZWNrZWRcbiAgICAgICAgICBwaW5uZWQ6IGMubmFtZSA9PT0gY29sdW1uICYmICFlbmFibGVkID8gZmFsc2UgOiBjLnBpbm5lZCxcbiAgICAgICAgfSkpLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgKSxcbiAgICB9LFxuICB9O1xufVxuZnVuY3Rpb24gZW5hYmxlQWxsQ29sdW1uczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGVuYWJsZWQ6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgICAgLy8gVW5waW4gaWYgYmVpbmcgdW5jaGVja2VkXG4gICAgICAgICAgcGlubmVkOiAhZW5hYmxlZCA/IGZhbHNlIDogYy5waW5uZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uV2lkdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIHByZWZlcnJlZFdpZHRoOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPlsncHJlZmVycmVkV2lkdGgnXSxcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uU2V0dGluZ3M6IGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgLi4uYyxcbiAgICAgICAgcHJlZmVycmVkV2lkdGg6IGMubmFtZSA9PT0gY29sdW1uID8gcHJlZmVycmVkV2lkdGggOiBjLnByZWZlcnJlZFdpZHRoLFxuICAgICAgfSkpLFxuICAgIH0sXG4gIH07XG59XG5mdW5jdGlvbiByZXNldFRvRGVmYXVsdENvbHVtbnM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBkZWZhdWx0Q29sdW1uU3RhdGU6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoZGVmYXVsdENvbHVtblN0YXRlLCBjb2x1bW5OYW1lTWFwKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1Jvd1NlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LCBpZDogUlsnaWQnXSk6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgY2FzZSAnaW5jbHVkZSc6XG4gICAgICByZXR1cm4gc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkLmhhcyhpZCk7XG4gICAgY2FzZSAnZXhjbHVkZSc6XG4gICAgICByZXR1cm4gIXN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5oYXMoaWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXBTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGdyb3VwOiBSaXZUYWJsZS5TdWJHcm91cFJlc3VsdDxSLCBHPixcbik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgY2FzZSAnaW5jbHVkZSc6IHtcbiAgICAgIGxldCBhbGxGb3VuZCA9IHRydWU7XG4gICAgICBsZXQgYW55Rm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoIXN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5oYXMocm93LmlkKSkge1xuICAgICAgICAgIGFsbEZvdW5kID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYW55Rm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWxsRm91bmQgPyB0cnVlIDogYW55Rm91bmQgPyAnaW5kZXRlcm1pbmF0ZScgOiBmYWxzZTtcbiAgICB9XG4gICAgY2FzZSAnZXhjbHVkZSc6IHtcbiAgICAgIGxldCBhbGxGb3VuZCA9IHRydWU7XG4gICAgICBsZXQgYW55Rm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLmhhcyhyb3cuaWQpKSB7XG4gICAgICAgICAgYWxsRm91bmQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbnlGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbGxGb3VuZCA/IHRydWUgOiBhbnlGb3VuZCA/ICdpbmRldGVybWluYXRlJyA6IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FsbFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gIC8vIElmIHRoZXJlIGFyZSBubyByb3dzLCBcImFsbCBzZWxlY3RlZFwiIHNob3VsZCBiZSBmYWxzZVxuICBpZiAoc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAoc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdleGNsdWRlJyAmJlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemUgPT09IDApIHx8XG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5zaXplID09PSBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50KVxuICApXG4gICAgcmV0dXJuIHRydWU7XG4gIGlmIChcbiAgICAoc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdleGNsdWRlJyAmJlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemUgPT09IHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQpIHx8XG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZScgJiYgc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkLnNpemUgPT09IDApXG4gIClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAnaW5kZXRlcm1pbmF0ZSc7XG59XG5cbmZ1bmN0aW9uIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCBzZWxlY3RlZFN0YXRlcyA9IGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkubWFwKCh7IGlkIH0pID0+XG4gICAgaXNSb3dTZWxlY3RlZChzdGF0ZSwgaWQpLFxuICApO1xuICBpZiAoc2VsZWN0ZWRTdGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChzZWxlY3RlZFN0YXRlcy5ldmVyeSh2ID0+IHYpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoc2VsZWN0ZWRTdGF0ZXMuc29tZSh2ID0+IHYpKSByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0ZWRDb3VudDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB7XG4gIHN3aXRjaCAoc3RhdGUuc2VsZWN0aW9uLm1vZGUpIHtcbiAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZTtcbiAgICBjYXNlICdleGNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50IC0gc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZnJlc2hSZXN1bHRXaXRoPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIG1vc3RSZWNlbnRBY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbik6IEFzeW5jR2VuZXJhdG9yPFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPj4ge1xuICB5aWVsZCB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZDoge1xuICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgIH0sXG4gIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc291cmNlKHN0YXRlLnF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKTtcbiAgICB5aWVsZCB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWQ6IHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSxcbiAgICAgIHJlc3VsdCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHlpZWxkIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZDoge1xuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Um93U2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBpZDogUlsnaWQnXSxcbiAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gIGNvbnRpZ3VvdXM6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBpZiAoc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgU2V0PFJbJ2lkJ10+KFtpZF0pO1xuICAgIGlmIChjb250aWd1b3VzICYmIHN0YXRlLnNlbGVjdGlvbi5tb3N0UmVjZW50bHlTZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc3RhcnRJZHggPSBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLmZpbmRJbmRleChcbiAgICAgICAgcm93ID0+IHJvdy5pZCA9PT0gc3RhdGUuc2VsZWN0aW9uLm1vc3RSZWNlbnRseVNlbGVjdGVkLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkuZmluZEluZGV4KFxuICAgICAgICByb3cgPT4gcm93LmlkID09PSBpZCxcbiAgICAgICk7XG4gICAgICBpZiAodHlwZW9mIHN0YXJ0SWR4ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgZW5kSWR4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIGxldCBpID0gTWF0aC5taW4oc3RhcnRJZHgsIGVuZElkeCk7XG4gICAgICAgICAgaSA8PSBNYXRoLm1heChzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgICAgICBpKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3U2VsZWN0aW9uLmFkZChnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpW2ldLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IGlkLFxuICAgICAgICAuLi4oc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIHVuaW9uKFsuLi5zdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWRdLCBbLi4ubmV3U2VsZWN0aW9uXSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG1vZGU6ICdleGNsdWRlJyxcbiAgICAgICAgICAgICAgZXhjbHVkZWQ6IG5ldyBTZXQoXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZShbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkXSwgWy4uLm5ld1NlbGVjdGlvbl0pLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAuLi4oc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UoWy4uLnN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZF0sIFtpZF0pLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBtb2RlOiAnZXhjbHVkZScsXG4gICAgICAgICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KHVuaW9uKFsuLi5zdGF0ZS5zZWxlY3Rpb24uZXhjbHVkZWRdLCBbaWRdKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2dnbGVHcm91cFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgZ3JvdXA6IFJpdlRhYmxlLlJvd0dyb3VwPFIsIEc+LFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgaXNHcm91cEZ1bGx5U2VsZWN0ZWQgPVxuICAgIGlzR3JvdXBTZWxlY3RlZChzdGF0ZSwgeyAuLi5ncm91cCwgY3VycmVudFBhZ2VEYXRhOiBncm91cC5yb3dzIH0pID09PSB0cnVlO1xuICByZXR1cm4gZ3JvdXAucm93cy5yZWR1Y2UoKGFjY3VtdWxhdGVkU3RhdGUsIHJvdykgPT4ge1xuICAgIHJldHVybiBzZXRSb3dTZWxlY3RlZChcbiAgICAgIGFjY3VtdWxhdGVkU3RhdGUsXG4gICAgICByb3cuaWQsXG4gICAgICAhaXNHcm91cEZ1bGx5U2VsZWN0ZWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9LCBzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZVBhZ2VTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGlzUGFnZUZ1bGx5U2VsZWN0ZWQgPSBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLmV2ZXJ5KFxuICAgICh7IGlkIH0pID0+IGlzUm93U2VsZWN0ZWQoc3RhdGUsIGlkKSxcbiAgKTtcbiAgcmV0dXJuIGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkucmVkdWNlKChhY2N1bXVsYXRlZFN0YXRlLCByb3cpID0+IHtcbiAgICByZXR1cm4gc2V0Um93U2VsZWN0ZWQoXG4gICAgICBhY2N1bXVsYXRlZFN0YXRlLFxuICAgICAgcm93LmlkLFxuICAgICAgIWlzUGFnZUZ1bGx5U2VsZWN0ZWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9LCBzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUFsbFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKGlzQWxsU2VsZWN0ZWQoc3RhdGUpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnZXhjbHVkZScsXG4gICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb248XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGlvbjoge1xuICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNvbHVtbk9yZGVyPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uOiBDLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKHN0YXRlLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICBvcmRlcjpcbiAgICAgICAgICBzdGF0ZS5xdWVyeS5vcmRlci5kaXJlY3Rpb24gPT09ICdhc2MnXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnZGVzYycsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHF1ZXJ5OiB7XG4gICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgZGlyZWN0aW9uOiAnYXNjJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBleHBlY3RlZFZhbHVlOiAnYWxsJyB8ICdub25lJyxcbik6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKGV4cGVjdGVkVmFsdWUpIHtcbiAgICBjYXNlICdhbGwnOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucy52YWx1ZXMoKSkuZXZlcnkoXG4gICAgICAgIHZhbHVlID0+IHZhbHVlLFxuICAgICAgKTtcblxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucy52YWx1ZXMoKSkuZXZlcnkoXG4gICAgICAgIHZhbHVlID0+ICF2YWx1ZSxcbiAgICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9nZ2xlQWxsU2VhcmNoQ29sdW1uczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IG5vbmVTZWxlY3RlZCA9IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHN0YXRlLCAnbm9uZScpO1xuICBjb25zdCBwYXlsb2FkID0gbmV3IE1hcChcbiAgICBBcnJheS5mcm9tKHN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMua2V5cygpKS5tYXAoa2V5ID0+IFtcbiAgICAgIGtleSxcbiAgICAgIG5vbmVTZWxlY3RlZCxcbiAgICBdKSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBxdWVyeToge1xuICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICBzZWFyY2hDb2x1bW5zOiBwYXlsb2FkLFxuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWR1Y2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IEFzeW5jR2VuZXJhdG9yPFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPj4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbG9hZCc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoc3RhdGUsIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ29sdW1uVG9nZ2xlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgdG9nZ2xlQ29sdW1uT3JkZXIoc3RhdGUsIGFjdGlvbi5jb2x1bW4pLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoW1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLFxuICAgICAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBpbmdDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogZ2V0UHJldmlvdXNQYWdlKHN0YXRlKSA/PyAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICduZXh0UGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogZ2V0TmV4dFBhZ2Uoc3RhdGUpID8/IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogYWN0aW9uLnBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTaXplQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZVNpemU6IGFjdGlvbi5zaXplLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJzQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGZpbHRlcnM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblNldHRpbmdzQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgICAgIGNvbHVtblNldHRpbmdzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5QaW5DaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uUGluKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgYWN0aW9uLnBpbm5lZCxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZSc6XG4gICAgICB5aWVsZCBjaGFuZ2VDb2x1bW5zRnJlZXplU3RhdGUoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICBhY3Rpb24uaW5kZXgsXG4gICAgICAgIGFjdGlvbi5mcmVlemUsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQgY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICBhY3Rpb24ucHJldmlvdXNJbmRleCxcbiAgICAgICAgYWN0aW9uLm5ld0luZGV4LFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbk1vdmVUb0NoYW5nZSc6XG4gICAgICB5aWVsZCBtb3ZlQ29sdW1uVG8oXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICBhY3Rpb24ucG9zaXRpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uRW5hYmxlZENoYW5nZSc6XG4gICAgICB5aWVsZCBjaGFuZ2VDb2x1bW5FbmFibGVkKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCBlbmFibGVBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwLCBhY3Rpb24uZW5hYmxlZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5XaWR0aENoYW5nZSc6XG4gICAgICB5aWVsZCBjaGFuZ2VDb2x1bW5XaWR0aChcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgIGFjdGlvbi5wcmVmZXJyZWRXaWR0aCxcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyZXNldFRvRGVmYXVsdENvbHVtbnMnOlxuICAgICAgeWllbGQgcmVzZXRUb0RlZmF1bHRDb2x1bW5zKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzZWxlY3Rpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jvd1NlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHNldFJvd1NlbGVjdGVkKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICBhY3Rpb24uc2VsZWN0ZWQsXG4gICAgICAgIGFjdGlvbi5jb250aWd1b3VzLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB0b2dnbGVQYWdlU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWxsU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQgdG9nZ2xlQWxsU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0aW9uQ2xlYXInOlxuICAgICAgeWllbGQgY2xlYXJTZWxlY3Rpb24oc3RhdGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBTZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgeWllbGQgdG9nZ2xlR3JvdXBTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLnBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgZ3JvdXBzUGVyUGFnZTogYWN0aW9uLmdyb3Vwc1BlclBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIGNvdW50UGVyR3JvdXA6IGFjdGlvbi5jb3VudFBlckdyb3VwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWV3TW9yZUtleUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgdmlld01vcmVLZXk6IGFjdGlvbi52aWV3TW9yZUtleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucyc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgodG9nZ2xlQWxsU2VhcmNoQ29sdW1ucyhzdGF0ZSksIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXBSZXN1bHQoXG4gIHJlc3VsdDogUml2VGFibGUuUmVzdWx0PGFueT4gfCBSaXZUYWJsZS5Hcm91cFJlc3VsdDxhbnksIGFueT4sXG4pOiByZXN1bHQgaXMgUml2VGFibGUuR3JvdXBSZXN1bHQ8YW55LCBhbnk+IHtcbiAgaWYgKCd0b3RhbEdyb3VwQ291bnQnIGluIHJlc3VsdCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxsUm93c0Zyb21SZXN1bHQoXG4gIHJlc3VsdDogUml2VGFibGUuUmVzdWx0PGFueT4gfCBSaXZUYWJsZS5Hcm91cFJlc3VsdDxhbnksIGFueT4sXG4pIHtcbiAgaWYgKGlzR3JvdXBSZXN1bHQocmVzdWx0KSkge1xuICAgIHJldHVybiByZXN1bHQuZ3JvdXBSZXN1bHRzLmZsYXRNYXAoZ3JvdXBzID0+IGdyb3Vwcy5jdXJyZW50UGFnZURhdGEpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXN1bHQuY3VycmVudFBhZ2VEYXRhO1xuICB9XG59XG4iXX0=
|