@datorama/core 22.5.2 → 22.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.
Files changed (29) hide show
  1. package/bundles/datorama-core.umd.js +25 -8
  2. package/bundles/datorama-core.umd.js.map +1 -1
  3. package/bundles/datorama-core.umd.min.js +4 -4
  4. package/bundles/datorama-core.umd.min.js.map +1 -1
  5. package/datorama-core.metadata.json +1 -1
  6. package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
  7. package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +6 -2
  8. package/esm2015/lib/grid-v2/grid-no-data-overlay/grid-v2-no-data-overlay.component.js +15 -6
  9. package/esm2015/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
  10. package/esm2015/lib/grid-v2/grid-store/grid.service.js +2 -2
  11. package/esm2015/lib/icon/icon.types.js +1 -1
  12. package/esm2015/lib/version.js +2 -2
  13. package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
  14. package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +6 -2
  15. package/esm5/lib/grid-v2/grid-no-data-overlay/grid-v2-no-data-overlay.component.js +19 -6
  16. package/esm5/lib/grid-v2/grid-pagination/grid-pagination.component.js +2 -2
  17. package/esm5/lib/grid-v2/grid-store/grid.service.js +2 -2
  18. package/esm5/lib/icon/icon.types.js +1 -1
  19. package/esm5/lib/version.js +2 -2
  20. package/fesm2015/datorama-core.js +21 -8
  21. package/fesm2015/datorama-core.js.map +1 -1
  22. package/fesm5/datorama-core.js +25 -8
  23. package/fesm5/datorama-core.js.map +1 -1
  24. package/i18n/locale-en_US.json +2 -0
  25. package/lib/grid-v2/grid/grid-v2.types.d.ts +1 -0
  26. package/lib/grid-v2/grid-filter/grid-filter.component.d.ts +1 -0
  27. package/lib/grid-v2/grid-no-data-overlay/grid-v2-no-data-overlay.component.d.ts +4 -1
  28. package/lib/icon/icon.types.d.ts +1 -1
  29. package/package.json +1 -1
@@ -33,4 +33,4 @@ export var GridRowSelectionType;
33
33
  GridRowSelectionType["SINGLE"] = "single";
34
34
  GridRowSelectionType["MULTIPLE"] = "multiple";
35
35
  })(GridRowSelectionType || (GridRowSelectionType = {}));
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC12Mi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC9ncmlkLXYyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQ3BELE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsTUFBTSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFOUYsTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQUcsQ0FBQyxNQUEyQixFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUN6RyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsT0FBTyx1Q0FBdUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7QUFDeEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxNQUEyQixFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUM3RixVQUFVLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkUsT0FBTyxVQUFVO1FBQ2YsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxrQ0FBa0MsR0FBRyxTQUFTLENBQUM7UUFDOUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNaLENBQUMsQ0FBQztBQW9IRixNQUFNLENBQU4sSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3ZCLHlEQUFhLENBQUE7SUFDYiw2REFBZSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxhQUFhLEtBQWIsYUFBYSxRQUd4QjtBQUVELE1BQU0sQ0FBTixJQUFZLG1CQVNYO0FBVEQsV0FBWSxtQkFBbUI7SUFDN0Isd0NBQWlCLENBQUE7SUFDakIsd0NBQWlCLENBQUE7SUFDakIsb0NBQWEsQ0FBQTtJQUNiLHdDQUFpQixDQUFBO0lBQ2pCLHNDQUFlLENBQUE7SUFDZixnREFBeUIsQ0FBQTtJQUN6Qiw0Q0FBcUIsQ0FBQTtJQUNyQix3Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBVFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVM5QjtBQWNELE1BQU0sQ0FBTixJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIseUNBQWlCLENBQUE7SUFDakIsNkNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUhXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFHL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xEZWYsIEdyaWRPcHRpb25zLCBJQ2VsbFJlbmRlcmVyUGFyYW1zLCBJR2V0Um93c1BhcmFtcywgTWVudUl0ZW1EZWYsIFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBEYXRvR3JpZEV4dGVybmFsRmlsdGVyLCBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLCBMaXN0SXRlbSB9IGZyb20gJy4uL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IERhdG9TZXJ2ZXJQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSAnLi4vZ3JpZC1wYWdpbmF0aW9uL2dyaWQtcGFnaW5hdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBBZ0dyaWRFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5L2Rpc3QvbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXRvb2xiYXIvZ3JpZC10b29sYmFyLnR5cGVzJztcbmltcG9ydCB7IEljb25SZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ljb24tcmVnaXN0cnknO1xuaW1wb3J0IHsgRGF0b0dyaWRBcGkgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLnR5cGVzJztcbmltcG9ydCB7IERhdG9HcmlkU2V0dGluZ3MgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc3RvcmUudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRNb3JlTWVudUFjdGlvbnMgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXItbW9yZS1tZW51L2dyaWQtY29sdW1uLWhlYWRlci1tb3JlLW1lbnUudHlwZXMnO1xuaW1wb3J0IHsgSGFzaE1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IENvcmVFdmVudFR5cGVzIH0gZnJvbSAnLi4vLi4vZXZlbnQtbG9nZ2VyJztcbmltcG9ydCB7IERhdG9HcmlkT3ZlcmxheUlucHV0IH0gZnJvbSAnLi4vZ3JpZC1uby1kYXRhLW92ZXJsYXkvZ3JpZC12Mi1uby1kYXRhLW92ZXJsYXkudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEVkaXRhYmxlQ29sdW1uUmVuZGVyZXIgPSBwYXJhbXMgPT5cbiAgcGFyYW1zICYmIHBhcmFtcy52YWx1ZSA/IGA8ZGl2IGNsYXNzPVwidmFsdWUtd3JhcHBlciBlbGxpcHNpc1wiPiR7cGFyYW1zLnZhbHVlfTwvZGl2PmAgOiBudWxsO1xuXG5leHBvcnQgY29uc3QgZWRpdGFibGVDZWxsUmVuZGVyZXJXaXRoU2VhcmNoSGlnaGxpZ2h0ID0gKHBhcmFtczogSUNlbGxSZW5kZXJlclBhcmFtcywgc2VhcmNoVGVybTogc3RyaW5nKSA9PiB7XG4gIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gYDxkaXYgY2xhc3M9XCJ2YWx1ZS13cmFwcGVyIGVsbGlwc2lzXCI+JHtzZWFyY2hIaWdobGlnaHRDZWxsUmVuZGVyZXIocGFyYW1zLCBzZWFyY2hUZXJtKX08L2Rpdj5gO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlYXJjaEhpZ2hsaWdodENlbGxSZW5kZXJlciA9IChwYXJhbXM6IElDZWxsUmVuZGVyZXJQYXJhbXMsIHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICBzZWFyY2hUZXJtID0gKHNlYXJjaFRlcm0gfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgdmFsdWUgPSAocGFyYW1zLnZhbHVlRm9ybWF0dGVkIHx8IHBhcmFtcy52YWx1ZSB8fCAnJykudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHNlYXJjaFRlcm1cbiAgICA/IHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChzZWFyY2hUZXJtLCAnZ2knKSwgKHN0cjogc3RyaW5nKSA9PiBgPHNwYW4gY2xhc3M9XCJzZWFyY2gtaGlnaGxpZ2h0XCI+JHtzdHJ9PC9zcGFuPmApXG4gICAgOiB2YWx1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkQ29sdW1uRGVmID0ge1xuICBmaWx0ZXJzQ29uZmlnPzogRGF0b0dyaWRGaWx0ZXJDb25maWc7XG4gIG1vcmVNZW51QWN0aW9ucz86IERhdG9HcmlkTW9yZU1lbnVBY3Rpb25zW107XG4gIGluZm8/OiBzdHJpbmc7XG4gIG9yaWdpbmFsV2lkdGg/OiBudW1iZXI7XG4gIGluY2x1ZGVJblNlYXJjaD86IGJvb2xlYW47XG4gIGN1c3RvbUNlbGxDb25maWc/OiBEYXRvR3JpZEN1c3RvbUNlbGxDb25maWc7XG4gIHZhbHVlVG9DdXN0b21DZWxsQ29uZmlnPzogSGFzaE1hcDxEYXRvR3JpZEN1c3RvbUNlbGxDb25maWc+O1xufSAmIENvbERlZjtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRDdXN0b21DZWxsQ29uZmlnID0ge1xuICBjb2xvcj86ICdwcmltYXJ5JyB8ICdncmVlbicgfCAncmVkJyB8ICdhY2NlbnQnIHwgJ3llbGxvdyc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuICBpY29uQ3NzQ2xhc3M/OiBzdHJpbmc7XG4gIG1pbldpZHRoPzogbnVtYmVyO1xuICBzaG93U3Bpbm5lcj86IGJvb2xlYW47XG4gIG1heExhYmVscz86IG51bWJlcjtcbiAgZ2V0QWRkaXRpb25hbFRleHQ/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG4gIGdldEltYWdlVXJsPzogKGRhdGE6IGFueSkgPT4gc3RyaW5nO1xuICBpbml0aWFsc0NvbmZpZz86IERhdG9HcmlkSW5pdGlhbHNDZWxsQ29uZmlnO1xuICBnZXRJc1Zpc2libGU/OiAoZGF0YTogYW55KSA9PiBib29sZWFuO1xuICBnZXRJdGVtcz86IChkYXRhOiBhbnkpID0+IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRJbml0aWFsc0NlbGxDb25maWcgPSB7XG4gIGZpcnN0TmFtZUZpZWxkPzogc3RyaW5nO1xuICBsYXN0TmFtZUZpZWxkPzogc3RyaW5nO1xuICBmdWxsTmFtZUZpZWxkPzogc3RyaW5nO1xuICBnZXRGdWxsTmFtZT86IChkYXRhOiBhbnkpID0+IHN0cmluZztcbiAgaXNCb2xkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkRmlsdGVyQ29uZmlnID0ge1xuICBzZWN0aW9ucz86IERhdG9HcmlkRmlsdGVyU2VjdGlvbnM7XG4gIHByZWRlZmluZWRMaXN0VmFsdWVzPzogKHN0cmluZyB8IExpc3RJdGVtKVtdO1xuICBrZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyPzogYm9vbGVhbjtcbiAgc2hvd0VtcHR5Q29uZGl0aW9ucz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdG9HcmlkRGF0YUNoYW5nZWRFdmVudCBleHRlbmRzIEFnR3JpZEV2ZW50IHtcbiAgdHlwZTogJ1NlcnZlckRhdGFMb2FkZWQnIHwgJ3Jvd0RhdGFDaGFuZ2VkJyB8ICdyb3dEYXRhVXBkYXRlZCc7XG4gIHBhZ2luYXRpb25QYWdlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdG9HcmlkR2V0Um93c1BhcmFtcyBleHRlbmRzIElHZXRSb3dzUGFyYW1zIHtcbiAgc2VydmVyQ29uZmlnOiBEYXRvU2VydmVyUGFnaW5hdGlvbkNvbmZpZztcbn1cblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRFeHBvcnRQYXJhbXMgPSBEYXRvR3JpZEFwaSAmIERhdG9HcmlkU2V0dGluZ3M7XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkT25Ib3ZlckNvbmZpZyA9IHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG4gIG1heERpc3BsYXllZEl0ZW1zPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRvR3JpZE9wdGlvbnMgZXh0ZW5kcyBHcmlkT3B0aW9ucyB7XG4gIGdyaWROYW1lOiBzdHJpbmc7XG4gIGNvbHVtbkRlZnM6IERhdG9HcmlkQ29sdW1uRGVmW107XG4gIHNhdmVTZXR0aW5ncz86IGJvb2xlYW47XG4gIGVuYWJsZVYyXzE/OiBib29sZWFuO1xuICBleHBvcnRHcmlkPyhwYXJhbXM6IERhdG9HcmlkRXhwb3J0UGFyYW1zKTogdm9pZDtcbiAgZGVmYXVsdENvbERlZj86IERhdG9HcmlkQ29sdW1uRGVmO1xuICBkYXRhc291cmNlPzoge1xuICAgIGdldFJvd3MocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpOiB2b2lkO1xuICAgIC8vIG9wdGlvbmFsIGRlc3Ryb3kgbWV0aG9kLCBpZiB5b3VyIGRhdGFzb3VyY2UgaGFzIHN0YXRlIGl0IG5lZWRzIHRvIGNsZWFuIHVwXG4gICAgZGVzdHJveT8oKTogdm9pZDtcbiAgfTtcbiAgY3VzdG9tQ29udGV4dE1lbnU/KHJvd0FjdGlvbnM6IFJvd0FjdGlvbltdKTogUm93QWN0aW9uW107XG4gIGhvdmVyQ29uZmlnPzogRGF0b0dyaWRPbkhvdmVyQ29uZmlnO1xuICBvdmVybGF5c0NvbmZpZz86IERhdG9HcmlkT3ZlcmxheUlucHV0O1xuICBkaXN0aW5jdFJlc3VsdHM/OiBib29sZWFuO1xuICBtYXhEZXB0aD86IG51bWJlcjtcbiAgZW5hYmxlU2VhcmNoPzogYm9vbGVhbjtcbiAgZW5hYmxlU2VhcmNoSGlnaGxpZ2h0PzogYm9vbGVhbjtcbiAgY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHQ/OiBib29sZWFuO1xuICBzZWFyY2hEZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gIGluY2x1ZGVIaWRkZW5Db2x1bW5zSW5TZWFyY2g/OiBib29sZWFuO1xuICBzaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzPzogYm9vbGVhbjtcbiAgZW5hYmxlQWxsUGFnZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuICBpZENvbHVtbktleT86IHN0cmluZztcbiAgZW5hYmxlQmFja2dyb3VuZD86IGJvb2xlYW47XG4gIHNob3dCb3R0b21Db250cm9scz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIENvbnRleHRNZW51SXRlbSA9IHN0cmluZyB8IE1lbnVJdGVtRGVmO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNvbnZlcnRlclBhcmFtcyB7XG4gIG5vZGU6IFJvd05vZGU7XG4gIHRvb2xiYXJBY3Rpb25zOiBSb3dBY3Rpb25bXTtcbiAgc2VsZWN0ZWRSb3dzOiBSb3dOb2RlW107XG4gIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5O1xuICBsb2dnZXI/OiB7XG4gICAgbG9nKGV2ZW50VHlwZTogQ29yZUV2ZW50VHlwZXMuR1JJRF9UQUJMRV9BQ1RJT04sIGV2ZW50UHJvcGVydGllcz86IEhhc2hNYXA8YW55Pik6IHZvaWQ7XG4gICAgZXZlbnRPcmlnaW4/OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkU29ydERpcmVjdGlvbiA9ICdhc2MnIHwgJ2Rlc2MnO1xuZXhwb3J0IHR5cGUgRGF0b0dyaWRTb3J0ID0ge1xuICBjb2xJZDogc3RyaW5nO1xuICBzb3J0OiBEYXRvR3JpZFNvcnREaXJlY3Rpb247XG4gIGZpZWxkPzogc3RyaW5nO1xuICBzb3J0SW5kZXg/OiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgRGF0b0dyaWRTZXJ2ZXJTb3J0RGlyZWN0aW9uID0gJ0FTQycgfCAnREVTQyc7XG5leHBvcnQgdHlwZSBEYXRvR3JpZFNlcnZlclNvcnQgPSB7IGNvbHVtbjogc3RyaW5nOyBzb3J0T3JkZXI6IERhdG9HcmlkU2VydmVyU29ydERpcmVjdGlvbiB9O1xuXG5leHBvcnQgY29uc3QgZW51bSBEYXRvR3JpZEFsaWdubWVudCB7XG4gIEZJVF9UT19DT05UQUlORVIsXG4gIEZJVF9UT19DT05URU5ULFxuICBDVVNUT01cbn1cblxuZXhwb3J0IGVudW0gR3JpZE1pbldpZHRocyB7XG4gIERlZmF1bHQgPSAxMDcsXG4gIFdpdGhfSW5mbyA9IDEzMVxufVxuXG5leHBvcnQgZW51bSBEYXRvR3JpZENvbHVtblR5cGVzIHtcbiAgU3RyaW5nID0gJ1N0cmluZycsXG4gIE51bWJlciA9ICdOdW1iZXInLFxuICBEYXRlID0gJ0RhdGUnLFxuICBTdGF0dXMgPSAnU3RhdHVzJyxcbiAgSXRlbXMgPSAnSXRlbXMnLFxuICBJdGVtc0NvdW50ID0gJ0l0ZW1zQ291bnQnLFxuICBJbml0aWFscyA9ICdJbml0aWFscycsXG4gIEF2YXRhciA9ICdBdmF0YXInXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0b0dyaWRUcmVlQ29uZmlnIHtcbiAgaWRLZXk6IHN0cmluZztcbiAgcGFyZW50SURLZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQWdHcmlkUm93SWNvbiA9XG4gIHwgc3RyaW5nXG4gIHwge1xuICAgICAgZXhwYW5kZWQ6IHN0cmluZztcbiAgICAgIGNvbGxhcHNlZDogc3RyaW5nO1xuICAgIH07XG5cbmV4cG9ydCBlbnVtIEdyaWRSb3dTZWxlY3Rpb25UeXBlIHtcbiAgU0lOR0xFID0gJ3NpbmdsZScsXG4gIE1VTFRJUExFID0gJ211bHRpcGxlJ1xufVxuXG5leHBvcnQgdHlwZSBHcmlkUm93c1NlbGVjdGlvbkRhdGEgPSB7XG4gIHRvdGFsUm93c0NvdW50OiBudW1iZXI7XG4gIHNlbGVjdGVkUm93c0NvdW50OiBudW1iZXI7XG4gIHNlbGVjdGVkUGFnZVJvd3NDb3VudDogbnVtYmVyO1xuICBpc0FsbFBhZ2VSb3dzU2VsZWN0ZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBHcmlkQ2hhbmdlRXZlbnQgPSB7XG4gIHR5cGU6IHN0cmluZztcbiAgZGF0YTogUm93Tm9kZVtdO1xuICBmaWx0ZXI6IERhdG9HcmlkRXh0ZXJuYWxGaWx0ZXJbXTtcbiAgc29ydDogRGF0b0dyaWRTb3J0O1xufTtcbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC12Mi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC9ncmlkLXYyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQ3BELE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsTUFBTSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFOUYsTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQUcsQ0FBQyxNQUEyQixFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUN6RyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtRQUM1QixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsT0FBTyx1Q0FBdUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7QUFDeEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxNQUEyQixFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUM3RixVQUFVLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkUsT0FBTyxVQUFVO1FBQ2YsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxrQ0FBa0MsR0FBRyxTQUFTLENBQUM7UUFDOUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNaLENBQUMsQ0FBQztBQXFIRixNQUFNLENBQU4sSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3ZCLHlEQUFhLENBQUE7SUFDYiw2REFBZSxDQUFBO0FBQ2pCLENBQUMsRUFIVyxhQUFhLEtBQWIsYUFBYSxRQUd4QjtBQUVELE1BQU0sQ0FBTixJQUFZLG1CQVNYO0FBVEQsV0FBWSxtQkFBbUI7SUFDN0Isd0NBQWlCLENBQUE7SUFDakIsd0NBQWlCLENBQUE7SUFDakIsb0NBQWEsQ0FBQTtJQUNiLHdDQUFpQixDQUFBO0lBQ2pCLHNDQUFlLENBQUE7SUFDZixnREFBeUIsQ0FBQTtJQUN6Qiw0Q0FBcUIsQ0FBQTtJQUNyQix3Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBVFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVM5QjtBQWNELE1BQU0sQ0FBTixJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIseUNBQWlCLENBQUE7SUFDakIsNkNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUhXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFHL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xEZWYsIEdyaWRPcHRpb25zLCBJQ2VsbFJlbmRlcmVyUGFyYW1zLCBJR2V0Um93c1BhcmFtcywgTWVudUl0ZW1EZWYsIFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBEYXRvR3JpZEV4dGVybmFsRmlsdGVyLCBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLCBMaXN0SXRlbSB9IGZyb20gJy4uL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IERhdG9TZXJ2ZXJQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSAnLi4vZ3JpZC1wYWdpbmF0aW9uL2dyaWQtcGFnaW5hdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBBZ0dyaWRFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5L2Rpc3QvbGliL2V2ZW50cyc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXRvb2xiYXIvZ3JpZC10b29sYmFyLnR5cGVzJztcbmltcG9ydCB7IEljb25SZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ljb24tcmVnaXN0cnknO1xuaW1wb3J0IHsgRGF0b0dyaWRBcGkgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLnR5cGVzJztcbmltcG9ydCB7IERhdG9HcmlkU2V0dGluZ3MgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc3RvcmUudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRNb3JlTWVudUFjdGlvbnMgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXItbW9yZS1tZW51L2dyaWQtY29sdW1uLWhlYWRlci1tb3JlLW1lbnUudHlwZXMnO1xuaW1wb3J0IHsgSGFzaE1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IENvcmVFdmVudFR5cGVzIH0gZnJvbSAnLi4vLi4vZXZlbnQtbG9nZ2VyJztcbmltcG9ydCB7IERhdG9HcmlkT3ZlcmxheUlucHV0IH0gZnJvbSAnLi4vZ3JpZC1uby1kYXRhLW92ZXJsYXkvZ3JpZC12Mi1uby1kYXRhLW92ZXJsYXkudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEVkaXRhYmxlQ29sdW1uUmVuZGVyZXIgPSBwYXJhbXMgPT5cbiAgcGFyYW1zICYmIHBhcmFtcy52YWx1ZSA/IGA8ZGl2IGNsYXNzPVwidmFsdWUtd3JhcHBlciBlbGxpcHNpc1wiPiR7cGFyYW1zLnZhbHVlfTwvZGl2PmAgOiBudWxsO1xuXG5leHBvcnQgY29uc3QgZWRpdGFibGVDZWxsUmVuZGVyZXJXaXRoU2VhcmNoSGlnaGxpZ2h0ID0gKHBhcmFtczogSUNlbGxSZW5kZXJlclBhcmFtcywgc2VhcmNoVGVybTogc3RyaW5nKSA9PiB7XG4gIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gYDxkaXYgY2xhc3M9XCJ2YWx1ZS13cmFwcGVyIGVsbGlwc2lzXCI+JHtzZWFyY2hIaWdobGlnaHRDZWxsUmVuZGVyZXIocGFyYW1zLCBzZWFyY2hUZXJtKX08L2Rpdj5gO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlYXJjaEhpZ2hsaWdodENlbGxSZW5kZXJlciA9IChwYXJhbXM6IElDZWxsUmVuZGVyZXJQYXJhbXMsIHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICBzZWFyY2hUZXJtID0gKHNlYXJjaFRlcm0gfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgdmFsdWUgPSAocGFyYW1zLnZhbHVlRm9ybWF0dGVkIHx8IHBhcmFtcy52YWx1ZSB8fCAnJykudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHNlYXJjaFRlcm1cbiAgICA/IHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChzZWFyY2hUZXJtLCAnZ2knKSwgKHN0cjogc3RyaW5nKSA9PiBgPHNwYW4gY2xhc3M9XCJzZWFyY2gtaGlnaGxpZ2h0XCI+JHtzdHJ9PC9zcGFuPmApXG4gICAgOiB2YWx1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkQ29sdW1uRGVmID0ge1xuICBmaWx0ZXJzQ29uZmlnPzogRGF0b0dyaWRGaWx0ZXJDb25maWc7XG4gIG1vcmVNZW51QWN0aW9ucz86IERhdG9HcmlkTW9yZU1lbnVBY3Rpb25zW107XG4gIGluZm8/OiBzdHJpbmc7XG4gIG9yaWdpbmFsV2lkdGg/OiBudW1iZXI7XG4gIGluY2x1ZGVJblNlYXJjaD86IGJvb2xlYW47XG4gIGN1c3RvbUNlbGxDb25maWc/OiBEYXRvR3JpZEN1c3RvbUNlbGxDb25maWc7XG4gIHZhbHVlVG9DdXN0b21DZWxsQ29uZmlnPzogSGFzaE1hcDxEYXRvR3JpZEN1c3RvbUNlbGxDb25maWc+O1xufSAmIENvbERlZjtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRDdXN0b21DZWxsQ29uZmlnID0ge1xuICBjb2xvcj86ICdwcmltYXJ5JyB8ICdncmVlbicgfCAncmVkJyB8ICdhY2NlbnQnIHwgJ3llbGxvdyc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuICBpY29uQ3NzQ2xhc3M/OiBzdHJpbmc7XG4gIG1pbldpZHRoPzogbnVtYmVyO1xuICBzaG93U3Bpbm5lcj86IGJvb2xlYW47XG4gIG1heExhYmVscz86IG51bWJlcjtcbiAgZ2V0QWRkaXRpb25hbFRleHQ/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG4gIGdldEltYWdlVXJsPzogKGRhdGE6IGFueSkgPT4gc3RyaW5nO1xuICBpbml0aWFsc0NvbmZpZz86IERhdG9HcmlkSW5pdGlhbHNDZWxsQ29uZmlnO1xuICBnZXRJc1Zpc2libGU/OiAoZGF0YTogYW55KSA9PiBib29sZWFuO1xuICBnZXRJdGVtcz86IChkYXRhOiBhbnkpID0+IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRJbml0aWFsc0NlbGxDb25maWcgPSB7XG4gIGZpcnN0TmFtZUZpZWxkPzogc3RyaW5nO1xuICBsYXN0TmFtZUZpZWxkPzogc3RyaW5nO1xuICBmdWxsTmFtZUZpZWxkPzogc3RyaW5nO1xuICBnZXRGdWxsTmFtZT86IChkYXRhOiBhbnkpID0+IHN0cmluZztcbiAgaXNCb2xkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkRmlsdGVyQ29uZmlnID0ge1xuICBzZWN0aW9ucz86IERhdG9HcmlkRmlsdGVyU2VjdGlvbnM7XG4gIHByZWRlZmluZWRMaXN0VmFsdWVzPzogKHN0cmluZyB8IExpc3RJdGVtKVtdO1xuICBrZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyPzogYm9vbGVhbjtcbiAgc2hvd0VtcHR5Q29uZGl0aW9ucz86IGJvb2xlYW47XG4gIHNob3dDbGVhckZpbHRlcnNCdXR0b24/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRvR3JpZERhdGFDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBBZ0dyaWRFdmVudCB7XG4gIHR5cGU6ICdTZXJ2ZXJEYXRhTG9hZGVkJyB8ICdyb3dEYXRhQ2hhbmdlZCcgfCAncm93RGF0YVVwZGF0ZWQnO1xuICBwYWdpbmF0aW9uUGFnZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRvR3JpZEdldFJvd3NQYXJhbXMgZXh0ZW5kcyBJR2V0Um93c1BhcmFtcyB7XG4gIHNlcnZlckNvbmZpZzogRGF0b1NlcnZlclBhZ2luYXRpb25Db25maWc7XG59XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkRXhwb3J0UGFyYW1zID0gRGF0b0dyaWRBcGkgJiBEYXRvR3JpZFNldHRpbmdzO1xuXG5leHBvcnQgdHlwZSBEYXRvR3JpZE9uSG92ZXJDb25maWcgPSB7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xuICBtYXhEaXNwbGF5ZWRJdGVtcz86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0b0dyaWRPcHRpb25zIGV4dGVuZHMgR3JpZE9wdGlvbnMge1xuICBncmlkTmFtZTogc3RyaW5nO1xuICBjb2x1bW5EZWZzOiBEYXRvR3JpZENvbHVtbkRlZltdO1xuICBzYXZlU2V0dGluZ3M/OiBib29sZWFuO1xuICBlbmFibGVWMl8xPzogYm9vbGVhbjtcbiAgZXhwb3J0R3JpZD8ocGFyYW1zOiBEYXRvR3JpZEV4cG9ydFBhcmFtcyk6IHZvaWQ7XG4gIGRlZmF1bHRDb2xEZWY/OiBEYXRvR3JpZENvbHVtbkRlZjtcbiAgZGF0YXNvdXJjZT86IHtcbiAgICBnZXRSb3dzKHBhcmFtczogRGF0b0dyaWRHZXRSb3dzUGFyYW1zKTogdm9pZDtcbiAgICAvLyBvcHRpb25hbCBkZXN0cm95IG1ldGhvZCwgaWYgeW91ciBkYXRhc291cmNlIGhhcyBzdGF0ZSBpdCBuZWVkcyB0byBjbGVhbiB1cFxuICAgIGRlc3Ryb3k/KCk6IHZvaWQ7XG4gIH07XG4gIGN1c3RvbUNvbnRleHRNZW51Pyhyb3dBY3Rpb25zOiBSb3dBY3Rpb25bXSk6IFJvd0FjdGlvbltdO1xuICBob3ZlckNvbmZpZz86IERhdG9HcmlkT25Ib3ZlckNvbmZpZztcbiAgb3ZlcmxheXNDb25maWc/OiBEYXRvR3JpZE92ZXJsYXlJbnB1dDtcbiAgZGlzdGluY3RSZXN1bHRzPzogYm9vbGVhbjtcbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIGVuYWJsZVNlYXJjaD86IGJvb2xlYW47XG4gIGVuYWJsZVNlYXJjaEhpZ2hsaWdodD86IGJvb2xlYW47XG4gIGNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0PzogYm9vbGVhbjtcbiAgc2VhcmNoRGVib3VuY2VUaW1lPzogbnVtYmVyO1xuICBpbmNsdWRlSGlkZGVuQ29sdW1uc0luU2VhcmNoPzogYm9vbGVhbjtcbiAgc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcz86IGJvb2xlYW47XG4gIGVuYWJsZUFsbFBhZ2VzU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgaWRDb2x1bW5LZXk/OiBzdHJpbmc7XG4gIGVuYWJsZUJhY2tncm91bmQ/OiBib29sZWFuO1xuICBzaG93Qm90dG9tQ29udHJvbHM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBDb250ZXh0TWVudUl0ZW0gPSBzdHJpbmcgfCBNZW51SXRlbURlZjtcblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25Db252ZXJ0ZXJQYXJhbXMge1xuICBub2RlOiBSb3dOb2RlO1xuICB0b29sYmFyQWN0aW9uczogUm93QWN0aW9uW107XG4gIHNlbGVjdGVkUm93czogUm93Tm9kZVtdO1xuICBpY29uUmVnaXN0cnk6IEljb25SZWdpc3RyeTtcbiAgbG9nZ2VyPzoge1xuICAgIGxvZyhldmVudFR5cGU6IENvcmVFdmVudFR5cGVzLkdSSURfVEFCTEVfQUNUSU9OLCBldmVudFByb3BlcnRpZXM/OiBIYXNoTWFwPGFueT4pOiB2b2lkO1xuICAgIGV2ZW50T3JpZ2luPzogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBEYXRvR3JpZFNvcnREaXJlY3Rpb24gPSAnYXNjJyB8ICdkZXNjJztcbmV4cG9ydCB0eXBlIERhdG9HcmlkU29ydCA9IHtcbiAgY29sSWQ6IHN0cmluZztcbiAgc29ydDogRGF0b0dyaWRTb3J0RGlyZWN0aW9uO1xuICBmaWVsZD86IHN0cmluZztcbiAgc29ydEluZGV4PzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIERhdG9HcmlkU2VydmVyU29ydERpcmVjdGlvbiA9ICdBU0MnIHwgJ0RFU0MnO1xuZXhwb3J0IHR5cGUgRGF0b0dyaWRTZXJ2ZXJTb3J0ID0geyBjb2x1bW46IHN0cmluZzsgc29ydE9yZGVyOiBEYXRvR3JpZFNlcnZlclNvcnREaXJlY3Rpb24gfTtcblxuZXhwb3J0IGNvbnN0IGVudW0gRGF0b0dyaWRBbGlnbm1lbnQge1xuICBGSVRfVE9fQ09OVEFJTkVSLFxuICBGSVRfVE9fQ09OVEVOVCxcbiAgQ1VTVE9NXG59XG5cbmV4cG9ydCBlbnVtIEdyaWRNaW5XaWR0aHMge1xuICBEZWZhdWx0ID0gMTA3LFxuICBXaXRoX0luZm8gPSAxMzFcbn1cblxuZXhwb3J0IGVudW0gRGF0b0dyaWRDb2x1bW5UeXBlcyB7XG4gIFN0cmluZyA9ICdTdHJpbmcnLFxuICBOdW1iZXIgPSAnTnVtYmVyJyxcbiAgRGF0ZSA9ICdEYXRlJyxcbiAgU3RhdHVzID0gJ1N0YXR1cycsXG4gIEl0ZW1zID0gJ0l0ZW1zJyxcbiAgSXRlbXNDb3VudCA9ICdJdGVtc0NvdW50JyxcbiAgSW5pdGlhbHMgPSAnSW5pdGlhbHMnLFxuICBBdmF0YXIgPSAnQXZhdGFyJ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdG9HcmlkVHJlZUNvbmZpZyB7XG4gIGlkS2V5OiBzdHJpbmc7XG4gIHBhcmVudElES2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEFnR3JpZFJvd0ljb24gPVxuICB8IHN0cmluZ1xuICB8IHtcbiAgICAgIGV4cGFuZGVkOiBzdHJpbmc7XG4gICAgICBjb2xsYXBzZWQ6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgZW51bSBHcmlkUm93U2VsZWN0aW9uVHlwZSB7XG4gIFNJTkdMRSA9ICdzaW5nbGUnLFxuICBNVUxUSVBMRSA9ICdtdWx0aXBsZSdcbn1cblxuZXhwb3J0IHR5cGUgR3JpZFJvd3NTZWxlY3Rpb25EYXRhID0ge1xuICB0b3RhbFJvd3NDb3VudDogbnVtYmVyO1xuICBzZWxlY3RlZFJvd3NDb3VudDogbnVtYmVyO1xuICBzZWxlY3RlZFBhZ2VSb3dzQ291bnQ6IG51bWJlcjtcbiAgaXNBbGxQYWdlUm93c1NlbGVjdGVkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgR3JpZENoYW5nZUV2ZW50ID0ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGRhdGE6IFJvd05vZGVbXTtcbiAgZmlsdGVyOiBEYXRvR3JpZEV4dGVybmFsRmlsdGVyW107XG4gIHNvcnQ6IERhdG9HcmlkU29ydDtcbn07XG4iXX0=
@@ -57,6 +57,7 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
57
57
  };
58
58
  this.hotKeyTooltip = formatKeys(this.applyHotKeyConfig.keys);
59
59
  this.activeAccordionId = 0;
60
+ this.showClearFiltersButton = true;
60
61
  this.excludedValues = new Set();
61
62
  }
62
63
  get byValueControl() {
@@ -121,6 +122,9 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
121
122
  const colFilter = filter || colDef.filter;
122
123
  const filterOptions = DatoGridFilterOptionsMap[colFilter];
123
124
  this.pivotColumn = gridQuery.api.columns.getSecondaryPivotColumn(pivotKeys, pivotValueColumn);
125
+ if (!isNil(filtersConfig.showClearFiltersButton)) {
126
+ this.showClearFiltersButton = filtersConfig.showClearFiltersButton;
127
+ }
124
128
  if (filtersConfig.sections) {
125
129
  this.filterSections = { [filtersConfig.sections]: true };
126
130
  }
@@ -595,7 +599,7 @@ DatoGridFilterComponent.ctorParameters = () => [
595
599
  DatoGridFilterComponent = __decorate([
596
600
  Component({
597
601
  selector: 'dato-grid-filter',
598
- template: "<form class=\"container primary-0-background-color\" [formGroup]=\"filterForm\" datoForm\n *datoSubscribe=\"hasFilter$ as hasFilter\">\n <ng-container>\n <dato-accordion closeOthers=\"true\" class=\"filter-options\" [activeIds]=\"activeAccordionId\">\n <ng-container *ngIf=\"filterSections.Conditional\">\n\n <dato-accordion-group>\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"conditional-filters\"\n [class.primary-100-background-color]=\"header_1.isOpen\" #header_1>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex-grow d-flex align-start-center\">{{'core.filterByCondition' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_1.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #conditionalContent>\n <div class=\"conditional-content-container d-flex-column\" formGroupName=\"conditional\"\n [class.multi-conditions]=\"conditionsControls.length > 1\">\n <div class=\"operand d-flex-column mb-10\"\n [attr.data-auto-id]=\"'condition-' + i\"\n *ngFor=\"let operand of conditionsControls; index as i; last as last\">\n <div class=\"d-flex\">\n <div class=\"d-flex-column d-flex-grow min-width-0\">\n <ng-container formArrayName=\"conditions\">\n\n <ng-container [formGroupName]=\"i\">\n <dato-select datoSize=\"sm\" class=\"mb-10\" [attr.data-auto-id]=\"'condition-' + i + '-operand'\" formControlName=\"type\"\n datoSelectClass=\"operand-select\"\n [dataSet]=\"conditionalFilterOptions\"\n [isCombo]=\"false\" #select>\n <dato-option *ngFor=\"let option of select.data; index as index\"\n [option]=\"option\">\n {{ option.label }}\n </dato-option>\n </dato-select>\n <ng-container [ngSwitch]=\"filterType\">\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Date\">\n <dato-date-picker [attr.data-auto-id]=\"'condition-date-' + i + '-value'\"\n formControlName=\"value\" class=\"d-flex-grow range-calendar\">\n <ng-template>\n <dato-date-picker-range *ngIf=\"getOperandType(i) === rangeOperand; else singleDate\"></dato-date-picker-range>\n <ng-template #singleDate>\n <dato-date-picker-single></dato-date-picker-single>\n </ng-template>\n </ng-template>\n </dato-date-picker>\n </div>\n <ng-container *ngIf=\"!isConditionalEmpty(operand)\">\n <dato-input *ngSwitchCase=\"gridFilterTypes.String\" datoSize=\"sm\"\n (keydown.enter.stop.prevent)=\"closePopUp()\"\n datoControlErrors [attr.data-auto-id]=\"'condition-string-' + i + '-value'\"\n [datoControlErrorsOnBlur]=\"false\"\n class=\"condition-value\"\n placeholder=\"core.filter\" formControlName=\"value\"\n [isFocused]=\"conditionalContent._expanded\"\n ></dato-input>\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Number\">\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\" [showControls]=\"false\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"value\" [attr.data-auto-id]=\"'condition-number-' + i + '-value'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors [datoAutoFocus]=\"conditionalContent._expanded\"\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n <ng-container *ngIf=\"getOperandType(i) === rangeOperand\">\n <div class=\"mx-5\">-</div>\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"rangeEnd\" [attr.data-auto-id]=\"'condition-number-' + i + '-range-end'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div>\n\n <dato-icon-button datoSize=\"md\"\n datoType=\"none\" icon=\"trash\"\n class=\"overflow-hidden delete\"\n datoTooltip=\"core.deleteFilterCondition\"\n [attr.data-auto-id]=\"'condition-' + i + '-remove'\"\n (click)=\"removeCondition(i)\"\n datoTooltipPosition=\"right-start\"></dato-icon-button>\n </div>\n </div>\n <dato-operator-toggler class=\"mt-10 justify-center width-100 d-flex\" data-auto-id=\"operator-toggler\"\n expanded=\"true\" [datoTogglerValue]=\"conditionsOperator\"\n *ngIf=\"conditionsControls.length > 1 && !last\"\n formControlName=\"operator\"></dato-operator-toggler>\n </div>\n <div class=\"d-flex align-center\">\n <dato-link *ngIf=\"conditionsControls.length < 3\" class=\"no-select\" datoSize=\"sm\" data-auto-id=\"add-condition\"\n datoType=\"secondary\" (click)=\"addCondition()\">\n <dato-icon height=\"10px\" width=\"10px\" icon=\"plus-simple\"></dato-icon>\n {{ 'core.condition' | translate }}\n </dato-link>\n </div>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n <ng-container *ngIf=\"filterSections.By_Value\">\n <dato-accordion-group class=\"list-content\">\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"by-value-filters\"\n [class.primary-100-background-color]=\"header_2.isOpen\" #header_2>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex d-flex-grow align-start-center\">{{'core.filterByValue' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_2.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #byValueContent>\n <div class=\"value-content-container d-flex-column\">\n <dato-input datoSize=\"sm\" placeholder=\"core.search-all-values\" [debounceTime]=\"300\" #search [formControl]=\"listSearchControl\" [isFocused]=\"byValueContent._expanded\"></dato-input>\n <dato-list-v2 class=\"primary-0-background-color\"\n containerHeight=\"195px\"\n [withSelectAll]=\"true\"\n [clientSearch]=\"isClientSideGrid\"\n [sortByKey]=\"listSortByKey\"\n [labelType]=\"listLabelType\"\n [searchController]=\"search\"\n [options]=\"listOptions\"\n [isSortList]=\"!keepPredefinedListOriginalOrder\"\n [loading]=\"loadingList\"\n [noDataTpl]=\"isClientSideGrid ? null : noData\"\n formControlName=\"byValue\"\n data-auto-id=\"by-value-filters-list\">\n </dato-list-v2>\n <ng-template #noData>\n <div *ngIf=\"serverSearchErrored; else noResults\" class=\"mb-10 d-flex-1 d-flex-column align-center\" data-auto-id=\"by-value-server-error\">\n <img class=\"mt-20\" datoStaticSrc=\"core/grid/filter-server-error.svg\"/>\n <p class=\"dato-note-bold mt-10 mb-10 primary-300-color\">{{ 'core.something-went-wrong' | translate }}</p>\n <p class=\"dato-note-italic primary-300-color\">{{ 'core.try-again-later' | translate }}</p>\n </div>\n <ng-template #noResults>\n <dato-list-no-result class=\"mb-10 block\" data-auto-id=\"by-value-no-results\"></dato-list-no-result>\n </ng-template>\n </ng-template>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n </dato-accordion>\n </ng-container>\n <div class=\"actions no-select px-10 py-12 d-flex align-end-center\">\n <dato-link class=\"mr-30\" datoType=\"secondary\" datoSize=\"sm\" (click)=\"clearFilters()\" data-auto-id=\"clear-filters\"\n [disabled]=\"!hasFilter\">{{ 'core.clearFilters' | translate }}</dato-link>\n <dato-button datoSize=\"sm\" [datoTooltip]=\"hotKeyTooltip\" [datoHotkeys]=\"applyHotKeyConfig\" (click)=\"closePopUp()\" data-auto-id=\"apply-filters\">{{'core.apply' | translate}}</dato-button>\n </div>\n</form>\n",
602
+ template: "<form class=\"container primary-0-background-color\" [formGroup]=\"filterForm\" datoForm\n *datoSubscribe=\"hasFilter$ as hasFilter\">\n <ng-container>\n <dato-accordion closeOthers=\"true\" class=\"filter-options\" [activeIds]=\"activeAccordionId\">\n <ng-container *ngIf=\"filterSections.Conditional\">\n\n <dato-accordion-group>\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"conditional-filters\"\n [class.primary-100-background-color]=\"header_1.isOpen\" #header_1>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex-grow d-flex align-start-center\">{{'core.filterByCondition' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_1.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #conditionalContent>\n <div class=\"conditional-content-container d-flex-column\" formGroupName=\"conditional\"\n [class.multi-conditions]=\"conditionsControls.length > 1\">\n <div class=\"operand d-flex-column mb-10\"\n [attr.data-auto-id]=\"'condition-' + i\"\n *ngFor=\"let operand of conditionsControls; index as i; last as last\">\n <div class=\"d-flex\">\n <div class=\"d-flex-column d-flex-grow min-width-0\">\n <ng-container formArrayName=\"conditions\">\n\n <ng-container [formGroupName]=\"i\">\n <dato-select datoSize=\"sm\" class=\"mb-10\" [attr.data-auto-id]=\"'condition-' + i + '-operand'\" formControlName=\"type\"\n datoSelectClass=\"operand-select\"\n [dataSet]=\"conditionalFilterOptions\"\n [isCombo]=\"false\" #select>\n <dato-option *ngFor=\"let option of select.data; index as index\"\n [option]=\"option\">\n {{ option.label }}\n </dato-option>\n </dato-select>\n <ng-container [ngSwitch]=\"filterType\">\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Date\">\n <dato-date-picker [attr.data-auto-id]=\"'condition-date-' + i + '-value'\"\n formControlName=\"value\" class=\"d-flex-grow range-calendar\">\n <ng-template>\n <dato-date-picker-range *ngIf=\"getOperandType(i) === rangeOperand; else singleDate\"></dato-date-picker-range>\n <ng-template #singleDate>\n <dato-date-picker-single></dato-date-picker-single>\n </ng-template>\n </ng-template>\n </dato-date-picker>\n </div>\n <ng-container *ngIf=\"!isConditionalEmpty(operand)\">\n <dato-input *ngSwitchCase=\"gridFilterTypes.String\" datoSize=\"sm\"\n (keydown.enter.stop.prevent)=\"closePopUp()\"\n datoControlErrors [attr.data-auto-id]=\"'condition-string-' + i + '-value'\"\n [datoControlErrorsOnBlur]=\"false\"\n class=\"condition-value\"\n placeholder=\"core.filter\" formControlName=\"value\"\n [isFocused]=\"conditionalContent._expanded\"\n ></dato-input>\n <div class=\"d-flex\" *ngSwitchCase=\"gridFilterTypes.Number\">\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\" [showControls]=\"false\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"value\" [attr.data-auto-id]=\"'condition-number-' + i + '-value'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors [datoAutoFocus]=\"conditionalContent._expanded\"\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n <ng-container *ngIf=\"getOperandType(i) === rangeOperand\">\n <div class=\"mx-5\">-</div>\n <dato-input-number (keydown.enter.stop.prevent)=\"closePopUp()\"\n class=\"width-100 condition-value\" allowNegative=\"true\">\n <input type=\"number\" formControlName=\"rangeEnd\" [attr.data-auto-id]=\"'condition-number-' + i + '-range-end'\"\n datoInputNumber datoSize=\"sm\" datoControlErrors\n [datoControlErrorsOnBlur]=\"false\"/>\n </dato-input-number>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div>\n\n <dato-icon-button datoSize=\"md\"\n datoType=\"none\" icon=\"trash\"\n class=\"overflow-hidden delete\"\n datoTooltip=\"core.deleteFilterCondition\"\n [attr.data-auto-id]=\"'condition-' + i + '-remove'\"\n (click)=\"removeCondition(i)\"\n datoTooltipPosition=\"right-start\"></dato-icon-button>\n </div>\n </div>\n <dato-operator-toggler class=\"mt-10 justify-center width-100 d-flex\" data-auto-id=\"operator-toggler\"\n expanded=\"true\" [datoTogglerValue]=\"conditionsOperator\"\n *ngIf=\"conditionsControls.length > 1 && !last\"\n formControlName=\"operator\"></dato-operator-toggler>\n </div>\n <div class=\"d-flex align-center\">\n <dato-link *ngIf=\"conditionsControls.length < 3\" class=\"no-select\" datoSize=\"sm\" data-auto-id=\"add-condition\"\n datoType=\"secondary\" (click)=\"addCondition()\">\n <dato-icon height=\"10px\" width=\"10px\" icon=\"plus-simple\"></dato-icon>\n {{ 'core.condition' | translate }}\n </dato-link>\n </div>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n <ng-container *ngIf=\"filterSections.By_Value\">\n <dato-accordion-group class=\"list-content\">\n <dato-accordion-header class=\"dato-note-bold primary-600-color\" data-auto-id=\"by-value-filters\"\n [class.primary-100-background-color]=\"header_2.isOpen\" #header_2>\n <div class=\"px-10 d-flex align-start-center\">\n <div class=\"filter-title d-flex d-flex-grow align-start-center\">{{'core.filterByValue' | translate}}</div>\n <dato-icon class=\"primary-200-color\" height=\"18px\"\n [icon]=\"header_2.isOpen ? 'collapse' : 'expand'\"></dato-icon>\n </div>\n </dato-accordion-header>\n <dato-accordion-content #byValueContent>\n <div class=\"value-content-container d-flex-column\">\n <dato-input datoSize=\"sm\" placeholder=\"core.search-all-values\" [debounceTime]=\"300\" #search [formControl]=\"listSearchControl\" [isFocused]=\"byValueContent._expanded\"></dato-input>\n <dato-list-v2 class=\"primary-0-background-color\"\n containerHeight=\"195px\"\n [withSelectAll]=\"true\"\n [clientSearch]=\"isClientSideGrid\"\n [sortByKey]=\"listSortByKey\"\n [labelType]=\"listLabelType\"\n [searchController]=\"search\"\n [options]=\"listOptions\"\n [isSortList]=\"!keepPredefinedListOriginalOrder\"\n [loading]=\"loadingList\"\n [noDataTpl]=\"isClientSideGrid ? null : noData\"\n formControlName=\"byValue\"\n data-auto-id=\"by-value-filters-list\">\n </dato-list-v2>\n <ng-template #noData>\n <div *ngIf=\"serverSearchErrored; else noResults\" class=\"mb-10 d-flex-1 d-flex-column align-center\" data-auto-id=\"by-value-server-error\">\n <img class=\"mt-20\" datoStaticSrc=\"core/grid/filter-server-error.svg\"/>\n <p class=\"dato-note-bold mt-10 mb-10 primary-300-color\">{{ 'core.something-went-wrong' | translate }}</p>\n <p class=\"dato-note-italic primary-300-color\">{{ 'core.try-again-later' | translate }}</p>\n </div>\n <ng-template #noResults>\n <dato-list-no-result class=\"mb-10 block\" data-auto-id=\"by-value-no-results\"></dato-list-no-result>\n </ng-template>\n </ng-template>\n </div>\n </dato-accordion-content>\n </dato-accordion-group>\n <div class=\"separator\"></div>\n </ng-container>\n </dato-accordion>\n </ng-container>\n <div class=\"actions no-select px-10 py-12 d-flex align-end-center\">\n <dato-link *ngIf=\"showClearFiltersButton\" class=\"mr-30\" datoType=\"secondary\" datoSize=\"sm\"\n (click)=\"clearFilters()\" data-auto-id=\"clear-filters\" [disabled]=\"!hasFilter\">\n {{ 'core.clearFilters' | translate }}\n </dato-link>\n <dato-button datoSize=\"sm\" [datoTooltip]=\"hotKeyTooltip\" [datoHotkeys]=\"applyHotKeyConfig\" (click)=\"closePopUp()\" data-auto-id=\"apply-filters\">{{'core.apply' | translate}}</dato-button>\n </div>\n</form>\n",
599
603
  changeDetection: ChangeDetectionStrategy.OnPush,
600
604
  styles: [":host dato-accordion-header{transition:background-color .2s ease-in-out}:host>.container{width:242px}:host .value-content-container dato-input{padding:10px}:host .conditional-content-container{padding:10px;transition:padding-right .2s ease-in-out}:host .conditional-content-container.multi-conditions{padding-right:0}:host .conditional-content-container.multi-conditions .delete{width:24px}:host .filter-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;height:40px;transition:color .2s ease-in-out}:host .separator{height:1px;width:100%}:host .delete{transition:width .2s ease-in-out;width:0}"]
601
605
  }),
@@ -607,4 +611,4 @@ DatoGridFilterComponent = __decorate([
607
611
  ], DatoGridFilterComponent);
608
612
  export { DatoGridFilterComponent };
609
613
  export { ɵ0, ɵ1, ɵ2 };
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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QUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLE1BQW1CLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDckQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUVqRixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzFDO1FBRUQsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7O1lBN25CaUIsVUFBVTtZQUNQLFVBQVU7WUFDZixXQUFXO1lBQ0osb0JBQW9CO1lBQzFCLGlCQUFpQjs7QUF4Q3JCLHVCQUF1QjtJQU5uQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLG10YUFBMkM7UUFFM0MsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O0tBQ2hELENBQUM7cUNBcUNnQixVQUFVO1FBQ1AsVUFBVTtRQUNmLFdBQVc7UUFDSixvQkFBb0I7UUFDMUIsaUJBQWlCO0dBeENyQix1QkFBdUIsQ0FpcUJuQztTQWpxQlksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyLFxuICBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRGaWx0ZXJPcHRpb25zTWFwLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlclR5cGVzLFxuICBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnMsXG4gIGlzUmFuZ2VDb25kaXRpb24sXG4gIExpc3RJdGVtXG59IGZyb20gJy4vZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUG9wb3ZlclJlZiB9IGZyb20gJy4uLy4uL3BvcG92ZXIvcG9wb3Zlci1yZWYnO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRpZmZlcmVuY2UsIGlzQXJyYXlWYWx1ZXNFcXVhbCwgdW5pcUJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBPcGVyYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vb3BlcmF0b3ItdG9nZ2xlci9vcGVyYXRvci10b2dnbGVyLnR5cGVzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWx0ZXIgfSBmcm9tICcuL2ZpbHRlci12YWxpZGF0b3InO1xuaW1wb3J0IHsgRGF0b0dyaWRDb2x1bW5EZWYsIERhdG9HcmlkR2V0Um93c1BhcmFtcyB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgRGF0b0NvbHVtbk1lbnVEYXRhIH0gZnJvbSAnLi4vZ3JpZC1jb2x1bW4taGVhZGVyL2dyaWQtY29sdW1uLWhlYWRlci50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW4sIENvbHVtbkdyb3VwLCBHcmlkQXBpLCBSb3dOb2RlIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIudHlwZXMnO1xuaW1wb3J0IHsgY3VycnkgfSBmcm9tICcuLi8uLi91dGlscy9mdW5jdGlvbic7XG5pbXBvcnQgeyBTb3J0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2VhcmNoLXJlc3VsdHMucGlwZSc7XG5pbXBvcnQgeyBIb3RLZXlDb25maWcgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleS50eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXRLZXlzIH0gZnJvbSAnLi4vLi4vaG90a2V5cy9ob3RrZXlzLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCB9IGZyb20gJy4uL2dyaWQtc3RvcmUvdXRpbCc7XG5cbmNvbnN0IG1hcFRvVmFsdWUgPSAoeyB2YWx1ZSB9KSA9PiB2YWx1ZTtcbmNvbnN0IG1hcFRvTGlzdEl0ZW0gPSB2YWwgPT4gKHsgaWQ6IHZhbCwgbGFiZWw6IGlzTmlsKHZhbCkgPyBgKEVtcHR5KWAgOiBgJHt2YWx9YC50cmltKCksIHZhbHVlOiB2YWwgfSk7XG5jb25zdCBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZCA9ICh7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9LCBrZXk/KSA9PiAoe1xuICBpZDoga2V5ICYmIHZhbHVlID8gdmFsdWVba2V5XSA6IHZhbHVlLFxuICBsYWJlbDogaXNOaWwoZm9ybWF0dGVkVmFsdWUpID8gYChFbXB0eSlgIDogYCR7a2V5ID8gZm9ybWF0dGVkVmFsdWVba2V5XSA6IGZvcm1hdHRlZFZhbHVlfWAudHJpbSgpLFxuICB2YWx1ZToga2V5ICYmIHZhbHVlID8gdmFsdWVba2V5XSA6IHZhbHVlXG59KTtcblxudHlwZSBDb25kaXRpb25zID0ge1xuICB0eXBlOiB7XG4gICAgb3BlcmFuZDogRXhjbHVkZTxEYXRvRmlsdGVyQ29uZGl0aW9ucywgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCB8IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUPjtcbiAgfTtcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgcmFuZ2VFbmQ6IHN0cmluZyB8IG51bWJlcjtcbn1bXTtcblxudHlwZSBDb25kaXRpb25PcHRpb24gPSB7IGlkOiBudW1iZXI7IGxhYmVsOiBzdHJpbmc7IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zIH07XG5cbnR5cGUgVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSA9IHsgdmFsdWU6IHN0cmluZyB8IG51bWJlcjsgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IG51bWJlciB9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBncmlkRmlsdGVyVHlwZXMgPSBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBmaWx0ZXJUeXBlOiBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBjb2x1bW5WYWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXTtcbiAgbGlzdE9wdGlvbnM6IExpc3RJdGVtW10gPSBbXTtcbiAgY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zOiBDb25kaXRpb25PcHRpb25bXTtcbiAgaGFzRmlsdGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuICBmaWx0ZXJTZWN0aW9uczogeyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV0/OiBib29sZWFuOyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbF0/OiBib29sZWFuIH0gPSB7XG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQnlfVmFsdWVdOiB0cnVlLFxuICAgIFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXTogdHJ1ZVxuICB9O1xuICByYW5nZU9wZXJhbmQgPSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRTtcbiAgbGlzdExhYmVsVHlwZTogU29ydExhYmVsVHlwZTtcbiAgbGlzdFNvcnRCeUtleTogc3RyaW5nO1xuICBpc0NsaWVudFNpZGVHcmlkID0gZmFsc2U7XG4gIGxpc3RTZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIGxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gIHNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgYXBwbHlIb3RLZXlDb25maWc6IEhvdEtleUNvbmZpZyA9IHtcbiAgICBrZXlzOiAnbWV0YS5lbnRlcicsXG4gICAgaGFuZGxlcjogKCkgPT4gdGhpcy5jbG9zZVBvcFVwKCksXG4gICAgZGVzY3JpcHRpb246ICdjb3JlLmFwcGx5LWZpbHRlcnMnXG4gIH07XG4gIGhvdEtleVRvb2x0aXAgPSBmb3JtYXRLZXlzKHRoaXMuYXBwbHlIb3RLZXlDb25maWcua2V5cyk7XG4gIGFjdGl2ZUFjY29yZGlvbklkID0gMDtcbiAga2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlcjogYm9vbGVhbjtcblxuICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5O1xuICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZTtcbiAgcHJpdmF0ZSBjb2xGaWVsZDogc3RyaW5nO1xuICBwcml2YXRlIGV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XG4gIHByaXZhdGUgYnlWYWx1ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBpdm90Q29sdW1uOiBDb2x1bW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcG9wb3ZlcjogUG9wb3ZlclJlZjxEYXRvQ29sdW1uTWVudURhdGE+LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIGdldCBieVZhbHVlQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdieVZhbHVlJyk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc0NvbnRyb2xzKCk6IEFic3RyYWN0Q29udHJvbFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNPcGVyYXRvcigpOiBPcGVyYXRvclR5cGVzIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwub3BlcmF0b3InKS52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRPcGVyYW5kKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgdHlwZTogW3RoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdXSxcbiAgICAgIHZhbHVlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByYW5nZUVuZDogW251bGxdXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1ByZWRlZmluZWRMaXN0SXRlbXMoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzQ29uZmlnID0ge30gfSA9IHRoaXMuY29sRGVmO1xuICAgIHJldHVybiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzICYmIHR5cGVvZiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzWzBdID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRDb25kaXRpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW09wZXJhdG9yVHlwZXMuQU5EXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJ5VmFsdWUoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmNvbHVtblZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Rm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlcnM6IHsgYnlWYWx1ZT87IGNvbmRpdGlvbmFsPyB9ID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlcnMuYnlWYWx1ZSA9IHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJzLmNvbmRpdGlvbmFsID0gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZGl0aW9ucygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5jb25kaXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKVt0aGlzLmNvbEZpZWxkXTtcblxuICAgIHJldHVybiBmaWx0ZXIgJiYgaXNBcnJheVZhbHVlc0VxdWFsKHRoaXMucGl2b3RLZXlzLCBmaWx0ZXIucGl2b3RLZXlzKSA/IGZpbHRlciA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xEZWYoKTogRGF0b0dyaWRDb2x1bW5EZWYge1xuICAgIHJldHVybiB0aGlzLnBvcG92ZXIuZGF0YS5jb2x1bW4uZ2V0Q29sRGVmKCkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gIH1cblxuICBwcml2YXRlIGdldCBwaXZvdEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbERlZi5waXZvdEtleXMgfHwgW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGdyaWRTZXJ2aWNlLCBncmlkUXVlcnkgfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgIGNvbnN0IHsgZmlsdGVyLCBwaXZvdFZhbHVlQ29sdW1uLCBwaXZvdEtleXMgfSA9IHRoaXMuY29sRGVmO1xuICAgIGNvbnN0IGNvbERlZnMgPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpLm1hcChjb2x1bW4gPT4gY29sdW1uLmdldENvbERlZigpKTtcblxuICAgIHRoaXMuY29sRmllbGQgPSBnZXRDb2xGaWVsZCh0aGlzLmNvbERlZik7XG5cbiAgICBjb25zdCBjb2xEZWY6IERhdG9HcmlkQ29sdW1uRGVmID0gY29sRGVmcy5maW5kKGNvbERlZiA9PiBjb2xEZWYuZmllbGQgPT09IHRoaXMuY29sRmllbGQpO1xuICAgIGNvbnN0IGZpbHRlcnNDb25maWcgPSBjb2xEZWYuZmlsdGVyc0NvbmZpZyB8fCB0aGlzLmNvbERlZi5maWx0ZXJzQ29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IGNvbEZpbHRlciA9IGZpbHRlciB8fCBjb2xEZWYuZmlsdGVyO1xuICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXBbY29sRmlsdGVyIGFzIHN0cmluZ107XG5cbiAgICB0aGlzLnBpdm90Q29sdW1uID0gZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeVBpdm90Q29sdW1uKHBpdm90S2V5cywgcGl2b3RWYWx1ZUNvbHVtbik7XG5cbiAgICBpZiAoZmlsdGVyc0NvbmZpZy5zZWN0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJTZWN0aW9ucyA9IHsgW2ZpbHRlcnNDb25maWcuc2VjdGlvbnNdOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhpcy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyID1cbiAgICAgIGZpbHRlcnNDb25maWcua2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlciAmJiAhaXNFbXB0eShmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzKTtcblxuICAgIHRoaXMuZmlsdGVyVHlwZSA9IGZpbHRlck9wdGlvbnMgPyAoY29sRmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIDogRGF0b0dyaWRGaWx0ZXJUeXBlcy5TdHJpbmc7XG4gICAgdGhpcy5saXN0TGFiZWxUeXBlID0gdGhpcy5maWx0ZXJUeXBlLnRvTG93ZXJDYXNlKCkgYXMgU29ydExhYmVsVHlwZTtcbiAgICB0aGlzLmxpc3RTb3J0QnlLZXkgPSB0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyICYmIHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyID8gJ2lkJyA6ICdsYWJlbCc7XG4gICAgdGhpcy5ncmlkUXVlcnkgPSBncmlkUXVlcnk7XG4gICAgdGhpcy5ncmlkU2VydmljZSA9IGdyaWRTZXJ2aWNlO1xuICAgIHRoaXMuaGFzRmlsdGVyJCA9IHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLmZpbHRlclt0aGlzLmNvbEZpZWxkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoZmlsdGVyID0+IHtcbiAgICAgICAgICByZXR1cm4gIWlzTmlsKGZpbHRlcikgJiYgaXNBcnJheVZhbHVlc0VxdWFsKGZpbHRlci5waXZvdEtleXMsIHRoaXMucGl2b3RLZXlzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IERhdG9GaWx0ZXJDb25kaXRpb25zW10gPSBmaWx0ZXJPcHRpb25zIHx8IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucztcblxuICAgICAgaWYgKGZpbHRlcnNDb25maWcuc2hvd0VtcHR5Q29uZGl0aW9ucykge1xuICAgICAgICBsZXQgZW1wdHlDb25kaXRpb25zID0gW0RhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfRU1QVFldO1xuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgZW1wdHlDb25kaXRpb25zID0gW0RhdG9GaWx0ZXJDb25kaXRpb25zLklTX05VTEwsIERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9OVUxMXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZW1wdHlDb25kaXRpb25zXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zID0gZmlsdGVyQ29uZGl0aW9ucy5tYXAoKG9wZXJhbmQsIGlkKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgb3BlcmFuZCxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShgY29yZS4ke3RoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlID8gJ0RBVEVfJyA6ICcnfSR7b3BlcmFuZH1gKVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGxldCBvcmlnaW5hbE9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgY29uc3QgeyBwcmVkZWZpbmVkTGlzdFZhbHVlcyB9ID0gZmlsdGVyc0NvbmZpZztcbiAgICAgIHRoaXMuaXNDbGllbnRTaWRlR3JpZCA9ICFpc05pbChwcmVkZWZpbmVkTGlzdFZhbHVlcykgfHwgIWdyaWRRdWVyeS5pc1NlcnZlclNpZGU7XG4gICAgICBpZiAoIXByZWRlZmluZWRMaXN0VmFsdWVzIHx8IHRoaXMuaXNTdHJpbmdBcnJheShwcmVkZWZpbmVkTGlzdFZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChyYXdWYWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtblZhbHVlcyA9IHJhd1ZhbHVlcztcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzLm1hcChtYXBUb0xpc3RJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSB0aGlzLmdldENvbHVtblZhbHVlcygpO1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHZhbHVlID8gdmFsdWVbdGhpcy5jb2xGaWVsZF0gOiB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gY29sdW1uVmFsdWVzLm1hcChjb2xWYWx1ZSA9PlxuICAgICAgICAgICAgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQoY29sVmFsdWUsICFpc05pbCh0aGlzLnBpdm90Q29sdW1uKSAmJiB0aGlzLmNvbEZpZWxkKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlcyA9IHByZWRlZmluZWRMaXN0VmFsdWVzIGFzIExpc3RJdGVtW107XG4gICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzLm1hcChtYXBUb1ZhbHVlKTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IHJhd1ZhbHVlcztcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5saXN0T3B0aW9ucztcblxuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5saXN0U2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc2VhcmNoVGVybS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gb3JpZ2luYWxPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIodGhpcy5jb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBjbG9zZVBvcFVwKCkge1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbGlkICYmIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5kaXJ0eSAmJiAodGhpcy5maWx0ZXJGb3JtLnZhbGlkIHx8IHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsJykucHJpc3RpbmUpKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbiB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKCk7XG4gICAgICBpc0VtcHR5KGZpbHRlcilcbiAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpXG4gICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWx0ZXIoY29sdW1uLCBmaWx0ZXIpO1xuXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29uZGl0aW9ucy5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jb25kaXRpb25zLnB1c2godGhpcy5kZWZhdWx0T3BlcmFuZCk7XG4gIH1cblxuICBnZXRPcGVyYW5kVHlwZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBjb25kaXRpb25UeXBlID0gdGhpcy5jb25kaXRpb25zLmF0KGkpLnZhbHVlLnR5cGU7XG4gICAgcmV0dXJuIGNvbmRpdGlvblR5cGUgPyBjb25kaXRpb25UeXBlLm9wZXJhbmQgOiBudWxsO1xuICB9XG5cbiAgaXNDb25kaXRpb25hbEVtcHR5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zID1cbiAgICAgIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLnR5cGUgPyBjb250cm9sLnZhbHVlLnR5cGUub3BlcmFuZCA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gJiYgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHR5cGU6IFwiRXhjbHVkZVwiXG4gICAqIFNlbGVjdGVkIHZhbHVlczogQSwgQywgRFxuICAgKiBBbGwgbGlzdDogQSwgQiwgQywgRFxuICAgKiBSZXN1bHQ6IEJcbiAgICogQHBhcmFtIGluY2x1ZGVkQXJyIC1UaGUgbGlzdCBvZiB2YWx1ZXMgdG8gaW5jbHVkZVxuICAgKiBAcGFyYW0gYXNMaXN0SXRlbSAtSW5kaWNhdGVzIGlmIHRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBhcyBzdHJpbmcgb3IgYXMgTGlzdEl0ZW1cbiAgICovXG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSwgYXNMaXN0SXRlbTogdHJ1ZSk6IExpc3RJdGVtW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoXG4gICAgaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSxcbiAgICBhc0xpc3RJdGVtID0gZmFsc2VcbiAgKTogKHN0cmluZyB8IG51bWJlcilbXSB8IExpc3RJdGVtW10ge1xuICAgIGxldCBpbmNsdWRlZFNldDtcbiAgICBpZiAodGhpcy5pc1ByZWRlZmluZWRMaXN0SXRlbXMpIHtcbiAgICAgIGNvbnN0IHByZWRlZmluZWRMaXN0ID0gdGhpcy5jb2xEZWYuZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBMaXN0SXRlbVtdO1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KFxuICAgICAgICBpbmNsdWRlZEFyci5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gcHJlZGVmaW5lZExpc3QuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gdmFsKTtcbiAgICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChpbmNsdWRlZEFyci5tYXAodmFsID0+IChpc09iamVjdDxMaXN0SXRlbT4odmFsKSA/IHZhbC52YWx1ZSA6IHZhbCkpKTtcbiAgICB9XG4gICAgaWYgKGFzTGlzdEl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3RPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlcy5maWx0ZXIodmFsdWUgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlciB7XG4gICAgY29uc3QgeyBieVZhbHVlLCBjb25kaXRpb25hbCB9ID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIgPSB7fTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLnNldENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlciwgY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5zZXRCeVZhbHVlRmlsdGVyKGZpbHRlciwgYnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIElmIGZpbHRlcnMgYXBwbGllZCwgYWRkIHRoZSBleHRyYSBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgcGl2b3QgbW9kZSAqL1xuICAgIGlmIChmaWx0ZXIuYnlWYWx1ZSB8fCBmaWx0ZXIuY29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlci5jb2xJZCA9IHRoaXMuY29sRGVmLmNvbElkO1xuICAgICAgZmlsdGVyLnBpdm90S2V5cyA9IHRoaXMucGl2b3RLZXlzO1xuXG4gICAgICBpZiAodGhpcy5waXZvdENvbHVtbikge1xuICAgICAgICBmaWx0ZXIucGl2b3RGaWVsZHNNYXAgPSB0aGlzLmdldFBpdm90RmllbGRzKHRoaXMucGl2b3RDb2x1bW4uZ2V0UGFyZW50KCkpLnJlZHVjZSgoZmllbGRNYXAsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnBpdm90S2V5c1tpbmRleF0pIHtcbiAgICAgICAgICAgIGZpZWxkTWFwW2ZpZWxkXSA9IHRoaXMucGl2b3RLZXlzW2luZGV4XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmllbGRNYXA7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZpbHRlclZhbHVlID8gdGhpcy5idWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlclZhbHVlKSA6IHRoaXMuZGVmYXVsdEZvcm07XG4gICAgdGhpcy5yZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBmaWx0ZXIgdmlldyBmcm9tIGEgZ2l2ZW4gZmlsdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcik6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyR3JvdXAgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2NvbmRpdGlvbmFsJ10gPSB0aGlzLmJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLmNvbmRpdGlvbmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlckdyb3VwWydieVZhbHVlJ10gPSB0aGlzLmJ1aWxkQnlWYWx1ZUZpbHRlcihmaWx0ZXIuYnlWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgZmlsdGVyIHZpZXdcbiAgICovXG4gIHByaXZhdGUgcmVzZXRGb3JtKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgbGV0IG9yaWdpbmFsU3RhdGUgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHsgYnlWYWx1ZTogdGhpcy5jb2x1bW5WYWx1ZXMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7XG4gICAgICAgIC4uLm9yaWdpbmFsU3RhdGUsXG4gICAgICAgIGNvbmRpdGlvbmFsOiB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdLCB2YWx1ZTogbnVsbCwgcmFuZ2VFbmQ6IG51bGwgfV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLmNvbmRpdGlvbmFsIGFzIEZvcm1Hcm91cDtcbiAgICAgIGNvbmRpdGlvbmFsLnJlbW92ZUNvbnRyb2woJ2NvbmRpdGlvbnMnKTtcbiAgICAgIGNvbmRpdGlvbmFsLmFkZENvbnRyb2woJ2NvbmRpdGlvbnMnLCB0aGlzLmZiLmFycmF5KFt0aGlzLmRlZmF1bHRPcGVyYW5kXSkpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQob3JpZ2luYWxTdGF0ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgY29sdW1uIHZhbHVlcyB0byBkaXNwbGF5IG9uIHRoZSBsaXN0LlxuICAgKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkXG4gICAqIDIuIFNpbmNlIHdlIGFsc28gd2FudCB0byBzaG93IHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gZmlsdGVyIHdlIGFyZSBpdGVyYXRpbmcgYWxsIHRoZSByb3dzXG4gICAqIChiZWZvcmUgdGhlIGZpbHRlcmluZyksIGZpbmRpbmcgd2hpY2ggd2VyZSByZW1vdmVkIGJ5IHRoaXMgY29sdW1uJ3MgZmlsdGVyIGFuZCBhZGRpbmcgdGhlbSBiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZXMoKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdIHtcbiAgICBsZXQgdmFsdWVzOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIGNvbnN0IGRpc3BsYXllZFJvdyA9IHt9O1xuICAgIGNvbnN0IGJ5VmFsdWVUeXBlID0gZmlsdGVyVmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlLmNvbmRpdGlvbjtcbiAgICBjb25zdCBhcGkgPSB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZDtcbiAgICBjb25zdCBnZXRWYWx1ZUN1cnJpZWQgPSBjdXJyeSh0aGlzLmdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUpKHRoaXMuY29sRmllbGQsIGFwaSwgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIpO1xuICAgIC8qKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkICovXG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgYXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KHJvdyA9PiB7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgZGlzcGxheWVkUm93W3Jvdy5pZF0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFdlIG9ubHkgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBsaXN0ICovXG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IGFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VTaXplICogY3VycmVudFBhZ2U7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZShyb3cgPT4ge1xuICAgICAgICBjb25zdCB7IHJvd0luZGV4IH0gPSByb3c7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSBzdGFydEluZGV4ICYmIHJvd0luZGV4IDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiAyLiBBZGQgYmFjayB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uICovXG4gICAgaWYgKGJ5VmFsdWVUeXBlKSB7XG4gICAgICBpZiAoYnlWYWx1ZVR5cGUgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyIGFzIChwYXJhbXM6IGFueSkgPT4gc3RyaW5nO1xuICAgICAgICBjb25zdCBjdXJyRmlsdGVyVmFsdWVzID0gZmlsdGVyVmFsdWUuYnlWYWx1ZS52YWx1ZXMubWFwKCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9KSA6IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChjdXJyRmlsdGVyVmFsdWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uYWwgfSA9IHRoaXMuY29sRmlsdGVyO1xuICAgICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpLFxuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXTogeyBjb25kaXRpb25hbCB9XG4gICAgICAgIH07XG4gICAgICAgIGFwaS5mb3JFYWNoTGVhZk5vZGUocm93ID0+IHtcbiAgICAgICAgICBpZiAoIWRpc3BsYXllZFJvdy5oYXNPd25Qcm9wZXJ0eShyb3cuaWQpICYmIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGkgfSwgYWN0aXZlRmlsdGVycykpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcUJ5KHZhbHVlcywgJ3ZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBhcGk6IEdyaWRBcGksXG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMTAxOVxuICAgIGZvcm1hdHRlcjogKHBhcmFtczogYW55KSA9PiBzdHJpbmcsXG4gICAgcm93OiBSb3dOb2RlXG4gICk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUge1xuICAgIGNvbnN0IHZhbHVlID0gYXBpLmdldFZhbHVlKGZpZWxkLCByb3cpO1xuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTA5NjM/cGFnZT0xXG4gICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9IGFzIGFueSkgOiB2YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbEZpbHRlcihcbiAgICBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLFxuICAgIHsgb3BlcmF0b3IsIGNvbmRpdGlvbnMgfTogeyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlczsgY29uZGl0aW9uczogQ29uZGl0aW9ucyB9XG4gICkge1xuICAgIGNvbnN0IHZhbGlkQ29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuZmlsdGVyKCh7IHZhbHVlLCB0eXBlIH0pID0+ICFpc05pbCh2YWx1ZSkgfHwgdGhpcy5pc0VtcHR5T3BlcmFuZCh0eXBlLm9wZXJhbmQpKTtcbiAgICBpZiAodmFsaWRDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgZmlsdGVyLmNvbmRpdGlvbmFsID0ge1xuICAgICAgICB0eXBlOiAodGhpcy5jb2xEZWYuZmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIHx8IERhdG9HcmlkRmlsdGVyVHlwZXMuU3RyaW5nLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9ucy5tYXAoKHsgdmFsdWUsIHR5cGUsIHJhbmdlRW5kIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWUgfTtcbiAgICAgICAgICBpZiAodHlwZS5vcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHsgLi4uYmFzZSwgcmFuZ2VFbmQgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB2YWx1ZSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlOiBmcm9tIGFzIHN0cmluZywgcmFuZ2VFbmQ6IHRvIGFzIHN0cmluZyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmFzZSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRCeVZhbHVlRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIGJ5VmFsdWU6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBjb25zdCB2YWx1ZXNDb3VudCA9IHRoaXMuY29sdW1uVmFsdWVzLmxlbmd0aDtcbiAgICAgIGlmIChieVZhbHVlLmxlbmd0aCAhPT0gdmFsdWVzQ291bnQpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgICBieVZhbHVlLmxlbmd0aCA8IHZhbHVlc0NvdW50IC8gMiA/IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgIHZhbHVlczogY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUID8gYnlWYWx1ZSA6IHRoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmV4Y2x1ZGVkVmFsdWVzLnZhbHVlcygpKTtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCeVZhbHVlRmlsdGVyKGJ5VmFsdWU6IERhdG9HcmlkRmlsdGVyWydieVZhbHVlJ10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdW10ge1xuICAgIGlmICghYnlWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLnZhbHVlcy5sZW5ndGggJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgdGhpcy5hY3RpdmVBY2NvcmRpb25JZCA9IDE7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0KGJ5VmFsdWUudmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlLnZhbHVlcyldO1xuICAgIH1cbiAgICByZXR1cm4gW2J5VmFsdWUudmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25hbEZpbHRlcihjb25kaXRpb25hbDogRGF0b0dyaWRGaWx0ZXJbJ2NvbmRpdGlvbmFsJ10pOiBGb3JtR3JvdXAge1xuICAgIGlmICghY29uZGl0aW9uYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFtjb25kaXRpb25hbC5vcGVyYXRvcl0sXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmZiLmFycmF5KHRoaXMuYnVpbGRDb25kaXRpb25zKGNvbmRpdGlvbmFsLmNvbmRpdGlvbnMpKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmRpdGlvbnMoY29uZGl0aW9uczogKERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uIHwgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbilbXSk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gY29uZGl0aW9ucy5tYXAoY29uZGl0aW9uID0+IHtcbiAgICAgIGNvbnN0IHsgY29uZGl0aW9uOiBjdXJyZW50T3BlcmFuZCwgdmFsdWUgfSA9IGNvbmRpdGlvbjtcbiAgICAgIGNvbnN0IGdyb3VwID0ge1xuICAgICAgICB0eXBlOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zLmZpbmRJbmRleCgoeyBvcGVyYW5kIH0pID0+IG9wZXJhbmQgPT09IGN1cnJlbnRPcGVyYW5kKSxcbiAgICAgICAgICAgIG9wZXJhbmQ6IGN1cnJlbnRPcGVyYW5kLFxuICAgICAgICAgICAgbGFiZWw6IGBjb3JlLiR7Y3VycmVudE9wZXJhbmR9YFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWU6IFt2YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHJhbmdlRW5kOiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKGlzUmFuZ2VDb25kaXRpb248RGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbj4oY29uZGl0aW9uKSkge1xuICAgICAgICBncm91cC5yYW5nZUVuZCA9IFtjb25kaXRpb24ucmFuZ2VFbmQsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICBncm91cC52YWx1ZSA9IFt7IGZyb206IGNvbmRpdGlvbi52YWx1ZSBhcyBzdHJpbmcsIHRvOiBjb25kaXRpb24ucmFuZ2VFbmQgYXMgc3RyaW5nIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZ3JvdXApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHJhbmdlIGlzIG5vdCByZXF1aXJlZCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIG1ha2UgaXQgcmVxdWlyZWQgb25jZSB0aGlzIG9wZXJhbmQgaXMgc2VsZWN0ZWQuXG4gICAqICovXG4gIHByaXZhdGUgcmVnaXN0ZXJPcGVyYW5kTGlzdGVuZXJzKCkge1xuICAgIGlmICghdGhpcy5jb25kaXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZGl0aW9ucy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5jb25kaXRpb25zLmxlbmd0aCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZXMgPSB0aGlzLmNvbmRpdGlvbnMuY29udHJvbHMubWFwKChncm91cDogRm9ybUdyb3VwLCBpbmRleCkgPT5cbiAgICAgICAgICAgIGdyb3VwLmdldCgndHlwZScpLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgodmFsdWU6IENvbmRpdGlvbk9wdGlvbikgPT4gKHsgdmFsdWUsIGluZGV4IH0pKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBtZXJnZSguLi52YWx1ZUNoYW5nZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgdmFsdWU6IHsgb3BlcmFuZCB9LCBpbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgaW5kZXgsIGluUmFuZ2U6IG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFIH07XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRGF0ZUlucHV0KHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLk51bWJlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlTnVtYmVySW5wdXQocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kLCBpbmRleCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZUlucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgndmFsdWUnKTtcbiAgICBpZiAoY29udHJvbC5kaXJ0eSkge1xuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gY29udHJvbDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaW5SYW5nZSA/IHsgZnJvbTogdmFsdWUsIHRvOiB2YWx1ZSB9IDogdmFsdWUuZnJvbTtcbiAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVOdW1iZXJJbnB1dCh7IGluUmFuZ2UsIGluZGV4IH0pIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBpblJhbmdlID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgcmFuZ2VFbmQgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgncmFuZ2VFbmQnKTtcbiAgICByYW5nZUVuZC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgcmFuZ2VFbmQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZUNvbnRyb2xWYWxpZGF0b3Iob3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSAhdGhpcy5pc0VtcHR5T3BlcmFuZChvcGVyYW5kKSA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsO1xuICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpIGFzIEZvcm1Db250cm9sO1xuICAgIHZhbHVlQ29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgdmFsdWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eU9wZXJhbmQob3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgfHxcbiAgICAgIG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTExcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmluZ0FycmF5KHZhbHVlOiAoc3RyaW5nIHwgTGlzdEl0ZW0pW10pOiB2YWx1ZSBpcyBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVzRnJvbVNlcnZlcihzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRpbmdMaXN0ID0gdHJ1ZTtcbiAgICB0aGlzLmxpc3RPcHRpb25zID0gW107XG4gICAgY29uc3QgcGFyYW1zOiBQYXJ0aWFsPERhdG9HcmlkR2V0Um93c1BhcmFtcz4gPSB7XG4gICAgICBmYWlsQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBzdWNjZXNzQ2FsbGJhY2s6IGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZsYXREYXRhID0gZGF0YS5tYXAodmFsdWUgPT4gdmFsdWVbdGhpcy5jb2xGaWVsZF0pO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gZmxhdERhdGEubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB0aGlzLnBhdGNoQW5kUmVSZWdpc3RlcihmbGF0RGF0YSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBzZXJ2ZXJDb25maWc6IHtcbiAgICAgICAgcGFnZVNpemU6IDMwLFxuICAgICAgICBwYWdlTnVtYmVyOiAxLFxuICAgICAgICBjb2x1bW5GaWx0ZXJzOiB7XG4gICAgICAgICAgW3RoaXMuY29sRmllbGRdOiB7XG4gICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLkNPTlRBSU5TLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hUZXJtXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IFtdLFxuICAgICAgICBjb2x1bW5zVG9SZXR1cm46IFt0aGlzLmNvbEZpZWxkXSxcbiAgICAgICAgZGlzdGluY3RSZXN1bHRzOiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLl9vcmlnaW5hbEdldFJvd3MocGFyYW1zIGFzIGFueSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyogV2hlbiBzZWFyY2hpbmcgdGhlIGJ5IHZhbHVlIGZpbHRlciBvbiBzZXJ2ZXIgc2lkZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29udHJvbCB3aXRoIHRoZSBuZXcgdmFsdWVzIGFuZCByZS1yZWdpc3RlciB0byB0aGUgY2hhbmdlcyAqL1xuICBwcml2YXRlIHBhdGNoQW5kUmVSZWdpc3RlcihkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5ieVZhbHVlQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZ2V0Tm9uRXhjbHVkZWRWYWx1ZXMoZGF0YSkpO1xuICAgIHRoaXMucmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKSB7XG4gICAgY29uc3QgYnlWYWx1ZSA9IHRoaXMuYnlWYWx1ZUNvbnRyb2w7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uID0gYnlWYWx1ZS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHN0YXJ0V2l0aChieVZhbHVlLnZhbHVlKSwgcGFpcndpc2UoKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtwcmV2LCBjdXJyZW50XSkgPT4ge1xuICAgICAgICBjb25zdCBhZGRUb0V4Y2x1ZGVkID0gY3VycmVudC5sZW5ndGggPCBwcmV2Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGlmZiA9IGFkZFRvRXhjbHVkZWQgPyBkaWZmZXJlbmNlKHByZXYsIGN1cnJlbnQpIDogZGlmZmVyZW5jZShjdXJyZW50LCBwcmV2KTtcbiAgICAgICAgZGlmZi5mb3JFYWNoKHYgPT4gKGFkZFRvRXhjbHVkZWQgPyB0aGlzLmV4Y2x1ZGVkVmFsdWVzLmFkZCh2KSA6IHRoaXMuZXhjbHVkZWRWYWx1ZXMuZGVsZXRlKHYpKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Tm9uRXhjbHVkZWRWYWx1ZXMoZGF0YTogKHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcih2ID0+ICF0aGlzLmV4Y2x1ZGVkVmFsdWVzLmhhcyh2KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBpdm90IGRpbWVuc2lvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcGFyZW50IGdyb3VwIGNvbHVtbiBoZWFkZXIgY2xhc3MuXG4gICAqL1xuICBwcml2YXRlIGdldFBpdm90RmllbGRzKHBhcmVudDogQ29sdW1uR3JvdXAsIGZpZWxkcyA9IFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGdyYW5kUGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuICAgIGNvbnN0IGhlYWRlckNsYXNzID0gcGFyZW50LmdldE9yaWdpbmFsQ29sdW1uR3JvdXAoKS5nZXRDb2xHcm91cERlZigpLmhlYWRlckNsYXNzO1xuXG4gICAgaWYgKGdyYW5kUGFyZW50KSB7XG4gICAgICB0aGlzLmdldFBpdm90RmllbGRzKGdyYW5kUGFyZW50LCBmaWVsZHMpO1xuICAgIH1cblxuICAgIGhlYWRlckNsYXNzICYmIGZpZWxkcy5wdXNoKGhlYWRlckNsYXNzWzBdKTtcblxuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cbn1cbiJdfQ==
614
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQXlCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjLENBQUMsTUFBbUIsRUFBRSxNQUFNLEdBQUcsRUFBRTtRQUNyRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsV0FBVyxDQUFDO1FBRWpGLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDMUM7UUFFRCxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YsQ0FBQTs7WUFwb0JpQixVQUFVO1lBQ1AsVUFBVTtZQUNmLFdBQVc7WUFDSixvQkFBb0I7WUFDMUIsaUJBQWlCOztBQXpDckIsdUJBQXVCO0lBTm5DLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsMHdhQUEyQztRQUUzQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7S0FDaEQsQ0FBQztxQ0FzQ2dCLFVBQVU7UUFDUCxVQUFVO1FBQ2YsV0FBVztRQUNKLG9CQUFvQjtRQUMxQixpQkFBaUI7R0F6Q3JCLHVCQUF1QixDQXlxQm5DO1NBenFCWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgRGF0b3JhbWEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gQXBhY2hlIExpY2Vuc2UgMi4wIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2RhdG9yYW1hL2NsaWVudC1jb3JlL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXAsXG4gIERhdG9HcmlkRmlsdGVyU2VjdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyVHlwZXMsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucyxcbiAgaXNSYW5nZUNvbmRpdGlvbixcbiAgTGlzdEl0ZW1cbn0gZnJvbSAnLi9ncmlkLWZpbHRlci50eXBlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQb3BvdmVyUmVmIH0gZnJvbSAnLi4vLi4vcG9wb3Zlci9wb3BvdmVyLXJlZic7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgcGFpcndpc2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGlmZmVyZW5jZSwgaXNBcnJheVZhbHVlc0VxdWFsLCB1bmlxQnkgfSBmcm9tICcuLi8uLi91dGlscy9hcnJheSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbHRlciB9IGZyb20gJy4vZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBEYXRvR3JpZENvbHVtbkRlZiwgRGF0b0dyaWRHZXRSb3dzUGFyYW1zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBEYXRvQ29sdW1uTWVudURhdGEgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXIvZ3JpZC1jb2x1bW4taGVhZGVyLnR5cGVzJztcbmltcG9ydCB7IENvbHVtbiwgQ29sdW1uR3JvdXAsIEdyaWRBcGksIFJvd05vZGUgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci50eXBlcyc7XG5pbXBvcnQgeyBjdXJyeSB9IGZyb20gJy4uLy4uL3V0aWxzL2Z1bmN0aW9uJztcbmltcG9ydCB7IFNvcnRMYWJlbFR5cGUgfSBmcm9tICcuLi8uLi9waXBlcy9zZWFyY2gtcmVzdWx0cy5waXBlJztcbmltcG9ydCB7IEhvdEtleUNvbmZpZyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5LnR5cGVzJztcbmltcG9ydCB7IGZvcm1hdEtleXMgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleXMtZm9ybWF0dGVyJztcbmltcG9ydCB7IGdldENvbEZpZWxkIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS91dGlsJztcblxuY29uc3QgbWFwVG9WYWx1ZSA9ICh7IHZhbHVlIH0pID0+IHZhbHVlO1xuY29uc3QgbWFwVG9MaXN0SXRlbSA9IHZhbCA9PiAoeyBpZDogdmFsLCBsYWJlbDogaXNOaWwodmFsKSA/IGAoRW1wdHkpYCA6IGAke3ZhbH1gLnRyaW0oKSwgdmFsdWU6IHZhbCB9KTtcbmNvbnN0IG1hcFRvTGlzdEl0ZW1XaXRoRm9ybWF0dGVkID0gKHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlIH0sIGtleT8pID0+ICh7XG4gIGlkOiBrZXkgJiYgdmFsdWUgPyB2YWx1ZVtrZXldIDogdmFsdWUsXG4gIGxhYmVsOiBpc05pbChmb3JtYXR0ZWRWYWx1ZSkgPyBgKEVtcHR5KWAgOiBgJHtrZXkgPyBmb3JtYXR0ZWRWYWx1ZVtrZXldIDogZm9ybWF0dGVkVmFsdWV9YC50cmltKCksXG4gIHZhbHVlOiBrZXkgJiYgdmFsdWUgPyB2YWx1ZVtrZXldIDogdmFsdWVcbn0pO1xuXG50eXBlIENvbmRpdGlvbnMgPSB7XG4gIHR5cGU6IHtcbiAgICBvcGVyYW5kOiBFeGNsdWRlPERhdG9GaWx0ZXJDb25kaXRpb25zLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q+O1xuICB9O1xuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuICByYW5nZUVuZDogc3RyaW5nIHwgbnVtYmVyO1xufVtdO1xuXG50eXBlIENvbmRpdGlvbk9wdGlvbiA9IHsgaWQ6IG51bWJlcjsgbGFiZWw6IHN0cmluZzsgb3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMgfTtcblxudHlwZSBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlID0geyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyOyBmb3JtYXR0ZWRWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIH07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdG8tZ3JpZC1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLWZpbHRlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBEYXRvR3JpZEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGdyaWRGaWx0ZXJUeXBlcyA9IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIGZpbHRlclR5cGU6IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIGNvbHVtblZhbHVlczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICBsaXN0T3B0aW9uczogTGlzdEl0ZW1bXSA9IFtdO1xuICBjb25kaXRpb25hbEZpbHRlck9wdGlvbnM6IENvbmRpdGlvbk9wdGlvbltdO1xuICBoYXNGaWx0ZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBmaWx0ZXJGb3JtOiBGb3JtR3JvdXA7XG4gIGZpbHRlclNlY3Rpb25zOiB7IFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlXT86IGJvb2xlYW47IFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXT86IGJvb2xlYW4gfSA9IHtcbiAgICBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV06IHRydWUsXG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWxdOiB0cnVlXG4gIH07XG4gIHJhbmdlT3BlcmFuZCA9IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFO1xuICBsaXN0TGFiZWxUeXBlOiBTb3J0TGFiZWxUeXBlO1xuICBsaXN0U29ydEJ5S2V5OiBzdHJpbmc7XG4gIGlzQ2xpZW50U2lkZUdyaWQgPSBmYWxzZTtcbiAgbGlzdFNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgbG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgc2VydmVyU2VhcmNoRXJyb3JlZCA9IGZhbHNlO1xuICBhcHBseUhvdEtleUNvbmZpZzogSG90S2V5Q29uZmlnID0ge1xuICAgIGtleXM6ICdtZXRhLmVudGVyJyxcbiAgICBoYW5kbGVyOiAoKSA9PiB0aGlzLmNsb3NlUG9wVXAoKSxcbiAgICBkZXNjcmlwdGlvbjogJ2NvcmUuYXBwbHktZmlsdGVycydcbiAgfTtcbiAgaG90S2V5VG9vbHRpcCA9IGZvcm1hdEtleXModGhpcy5hcHBseUhvdEtleUNvbmZpZy5rZXlzKTtcbiAgYWN0aXZlQWNjb3JkaW9uSWQgPSAwO1xuICBrZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyOiBib29sZWFuO1xuICBzaG93Q2xlYXJGaWx0ZXJzQnV0dG9uID0gdHJ1ZTtcblxuICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5O1xuICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZTtcbiAgcHJpdmF0ZSBjb2xGaWVsZDogc3RyaW5nO1xuICBwcml2YXRlIGV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XG4gIHByaXZhdGUgYnlWYWx1ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBpdm90Q29sdW1uOiBDb2x1bW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcG9wb3ZlcjogUG9wb3ZlclJlZjxEYXRvQ29sdW1uTWVudURhdGE+LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIGdldCBieVZhbHVlQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdieVZhbHVlJyk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc0NvbnRyb2xzKCk6IEFic3RyYWN0Q29udHJvbFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNPcGVyYXRvcigpOiBPcGVyYXRvclR5cGVzIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwub3BlcmF0b3InKS52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRPcGVyYW5kKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgdHlwZTogW3RoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdXSxcbiAgICAgIHZhbHVlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByYW5nZUVuZDogW251bGxdXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1ByZWRlZmluZWRMaXN0SXRlbXMoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzQ29uZmlnID0ge30gfSA9IHRoaXMuY29sRGVmO1xuICAgIHJldHVybiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzICYmIHR5cGVvZiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzWzBdID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRDb25kaXRpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW09wZXJhdG9yVHlwZXMuQU5EXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJ5VmFsdWUoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmNvbHVtblZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Rm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlcnM6IHsgYnlWYWx1ZT87IGNvbmRpdGlvbmFsPyB9ID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlcnMuYnlWYWx1ZSA9IHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJzLmNvbmRpdGlvbmFsID0gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZGl0aW9ucygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5jb25kaXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKVt0aGlzLmNvbEZpZWxkXTtcblxuICAgIHJldHVybiBmaWx0ZXIgJiYgaXNBcnJheVZhbHVlc0VxdWFsKHRoaXMucGl2b3RLZXlzLCBmaWx0ZXIucGl2b3RLZXlzKSA/IGZpbHRlciA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xEZWYoKTogRGF0b0dyaWRDb2x1bW5EZWYge1xuICAgIHJldHVybiB0aGlzLnBvcG92ZXIuZGF0YS5jb2x1bW4uZ2V0Q29sRGVmKCkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gIH1cblxuICBwcml2YXRlIGdldCBwaXZvdEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbERlZi5waXZvdEtleXMgfHwgW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGdyaWRTZXJ2aWNlLCBncmlkUXVlcnkgfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgIGNvbnN0IHsgZmlsdGVyLCBwaXZvdFZhbHVlQ29sdW1uLCBwaXZvdEtleXMgfSA9IHRoaXMuY29sRGVmO1xuICAgIGNvbnN0IGNvbERlZnMgPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpLm1hcChjb2x1bW4gPT4gY29sdW1uLmdldENvbERlZigpKTtcblxuICAgIHRoaXMuY29sRmllbGQgPSBnZXRDb2xGaWVsZCh0aGlzLmNvbERlZik7XG5cbiAgICBjb25zdCBjb2xEZWY6IERhdG9HcmlkQ29sdW1uRGVmID0gY29sRGVmcy5maW5kKGNvbERlZiA9PiBjb2xEZWYuZmllbGQgPT09IHRoaXMuY29sRmllbGQpO1xuICAgIGNvbnN0IGZpbHRlcnNDb25maWcgPSBjb2xEZWYuZmlsdGVyc0NvbmZpZyB8fCB0aGlzLmNvbERlZi5maWx0ZXJzQ29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IGNvbEZpbHRlciA9IGZpbHRlciB8fCBjb2xEZWYuZmlsdGVyO1xuICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXBbY29sRmlsdGVyIGFzIHN0cmluZ107XG5cbiAgICB0aGlzLnBpdm90Q29sdW1uID0gZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeVBpdm90Q29sdW1uKHBpdm90S2V5cywgcGl2b3RWYWx1ZUNvbHVtbik7XG5cbiAgICBpZiAoIWlzTmlsKGZpbHRlcnNDb25maWcuc2hvd0NsZWFyRmlsdGVyc0J1dHRvbikpIHtcbiAgICAgIHRoaXMuc2hvd0NsZWFyRmlsdGVyc0J1dHRvbiA9IGZpbHRlcnNDb25maWcuc2hvd0NsZWFyRmlsdGVyc0J1dHRvbjtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyc0NvbmZpZy5zZWN0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJTZWN0aW9ucyA9IHsgW2ZpbHRlcnNDb25maWcuc2VjdGlvbnNdOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhpcy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyID1cbiAgICAgIGZpbHRlcnNDb25maWcua2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlciAmJiAhaXNFbXB0eShmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzKTtcblxuICAgIHRoaXMuZmlsdGVyVHlwZSA9IGZpbHRlck9wdGlvbnMgPyAoY29sRmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIDogRGF0b0dyaWRGaWx0ZXJUeXBlcy5TdHJpbmc7XG4gICAgdGhpcy5saXN0TGFiZWxUeXBlID0gdGhpcy5maWx0ZXJUeXBlLnRvTG93ZXJDYXNlKCkgYXMgU29ydExhYmVsVHlwZTtcbiAgICB0aGlzLmxpc3RTb3J0QnlLZXkgPSB0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyICYmIHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyID8gJ2lkJyA6ICdsYWJlbCc7XG4gICAgdGhpcy5ncmlkUXVlcnkgPSBncmlkUXVlcnk7XG4gICAgdGhpcy5ncmlkU2VydmljZSA9IGdyaWRTZXJ2aWNlO1xuICAgIHRoaXMuaGFzRmlsdGVyJCA9IHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLmZpbHRlclt0aGlzLmNvbEZpZWxkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoZmlsdGVyID0+IHtcbiAgICAgICAgICByZXR1cm4gIWlzTmlsKGZpbHRlcikgJiYgaXNBcnJheVZhbHVlc0VxdWFsKGZpbHRlci5waXZvdEtleXMsIHRoaXMucGl2b3RLZXlzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IERhdG9GaWx0ZXJDb25kaXRpb25zW10gPSBmaWx0ZXJPcHRpb25zIHx8IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucztcblxuICAgICAgaWYgKGZpbHRlcnNDb25maWcuc2hvd0VtcHR5Q29uZGl0aW9ucykge1xuICAgICAgICBsZXQgZW1wdHlDb25kaXRpb25zID0gW0RhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfRU1QVFldO1xuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgZW1wdHlDb25kaXRpb25zID0gW0RhdG9GaWx0ZXJDb25kaXRpb25zLklTX05VTEwsIERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9OVUxMXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZW1wdHlDb25kaXRpb25zXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zID0gZmlsdGVyQ29uZGl0aW9ucy5tYXAoKG9wZXJhbmQsIGlkKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgb3BlcmFuZCxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShgY29yZS4ke3RoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlID8gJ0RBVEVfJyA6ICcnfSR7b3BlcmFuZH1gKVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGxldCBvcmlnaW5hbE9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgY29uc3QgeyBwcmVkZWZpbmVkTGlzdFZhbHVlcyB9ID0gZmlsdGVyc0NvbmZpZztcbiAgICAgIHRoaXMuaXNDbGllbnRTaWRlR3JpZCA9ICFpc05pbChwcmVkZWZpbmVkTGlzdFZhbHVlcykgfHwgIWdyaWRRdWVyeS5pc1NlcnZlclNpZGU7XG4gICAgICBpZiAoIXByZWRlZmluZWRMaXN0VmFsdWVzIHx8IHRoaXMuaXNTdHJpbmdBcnJheShwcmVkZWZpbmVkTGlzdFZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChyYXdWYWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtblZhbHVlcyA9IHJhd1ZhbHVlcztcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzLm1hcChtYXBUb0xpc3RJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSB0aGlzLmdldENvbHVtblZhbHVlcygpO1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHZhbHVlID8gdmFsdWVbdGhpcy5jb2xGaWVsZF0gOiB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gY29sdW1uVmFsdWVzLm1hcChjb2xWYWx1ZSA9PlxuICAgICAgICAgICAgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQoY29sVmFsdWUsICFpc05pbCh0aGlzLnBpdm90Q29sdW1uKSAmJiB0aGlzLmNvbEZpZWxkKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlcyA9IHByZWRlZmluZWRMaXN0VmFsdWVzIGFzIExpc3RJdGVtW107XG4gICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzLm1hcChtYXBUb1ZhbHVlKTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IHJhd1ZhbHVlcztcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5saXN0T3B0aW9ucztcblxuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5saXN0U2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc2VhcmNoVGVybS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gb3JpZ2luYWxPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIodGhpcy5jb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBjbG9zZVBvcFVwKCkge1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbGlkICYmIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5kaXJ0eSAmJiAodGhpcy5maWx0ZXJGb3JtLnZhbGlkIHx8IHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsJykucHJpc3RpbmUpKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbiB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKCk7XG4gICAgICBpc0VtcHR5KGZpbHRlcilcbiAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpXG4gICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWx0ZXIoY29sdW1uLCBmaWx0ZXIpO1xuXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29uZGl0aW9ucy5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jb25kaXRpb25zLnB1c2godGhpcy5kZWZhdWx0T3BlcmFuZCk7XG4gIH1cblxuICBnZXRPcGVyYW5kVHlwZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBjb25kaXRpb25UeXBlID0gdGhpcy5jb25kaXRpb25zLmF0KGkpLnZhbHVlLnR5cGU7XG4gICAgcmV0dXJuIGNvbmRpdGlvblR5cGUgPyBjb25kaXRpb25UeXBlLm9wZXJhbmQgOiBudWxsO1xuICB9XG5cbiAgaXNDb25kaXRpb25hbEVtcHR5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zID1cbiAgICAgIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLnR5cGUgPyBjb250cm9sLnZhbHVlLnR5cGUub3BlcmFuZCA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gJiYgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHR5cGU6IFwiRXhjbHVkZVwiXG4gICAqIFNlbGVjdGVkIHZhbHVlczogQSwgQywgRFxuICAgKiBBbGwgbGlzdDogQSwgQiwgQywgRFxuICAgKiBSZXN1bHQ6IEJcbiAgICogQHBhcmFtIGluY2x1ZGVkQXJyIC1UaGUgbGlzdCBvZiB2YWx1ZXMgdG8gaW5jbHVkZVxuICAgKiBAcGFyYW0gYXNMaXN0SXRlbSAtSW5kaWNhdGVzIGlmIHRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBhcyBzdHJpbmcgb3IgYXMgTGlzdEl0ZW1cbiAgICovXG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSwgYXNMaXN0SXRlbTogdHJ1ZSk6IExpc3RJdGVtW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoXG4gICAgaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSxcbiAgICBhc0xpc3RJdGVtID0gZmFsc2VcbiAgKTogKHN0cmluZyB8IG51bWJlcilbXSB8IExpc3RJdGVtW10ge1xuICAgIGxldCBpbmNsdWRlZFNldDtcbiAgICBpZiAodGhpcy5pc1ByZWRlZmluZWRMaXN0SXRlbXMpIHtcbiAgICAgIGNvbnN0IHByZWRlZmluZWRMaXN0ID0gdGhpcy5jb2xEZWYuZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBMaXN0SXRlbVtdO1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KFxuICAgICAgICBpbmNsdWRlZEFyci5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gcHJlZGVmaW5lZExpc3QuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gdmFsKTtcbiAgICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChpbmNsdWRlZEFyci5tYXAodmFsID0+IChpc09iamVjdDxMaXN0SXRlbT4odmFsKSA/IHZhbC52YWx1ZSA6IHZhbCkpKTtcbiAgICB9XG4gICAgaWYgKGFzTGlzdEl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3RPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlcy5maWx0ZXIodmFsdWUgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlciB7XG4gICAgY29uc3QgeyBieVZhbHVlLCBjb25kaXRpb25hbCB9ID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIgPSB7fTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLnNldENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlciwgY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5zZXRCeVZhbHVlRmlsdGVyKGZpbHRlciwgYnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIElmIGZpbHRlcnMgYXBwbGllZCwgYWRkIHRoZSBleHRyYSBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgcGl2b3QgbW9kZSAqL1xuICAgIGlmIChmaWx0ZXIuYnlWYWx1ZSB8fCBmaWx0ZXIuY29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlci5jb2xJZCA9IHRoaXMuY29sRGVmLmNvbElkO1xuICAgICAgZmlsdGVyLnBpdm90S2V5cyA9IHRoaXMucGl2b3RLZXlzO1xuXG4gICAgICBpZiAodGhpcy5waXZvdENvbHVtbikge1xuICAgICAgICBmaWx0ZXIucGl2b3RGaWVsZHNNYXAgPSB0aGlzLmdldFBpdm90RmllbGRzKHRoaXMucGl2b3RDb2x1bW4uZ2V0UGFyZW50KCkpLnJlZHVjZSgoZmllbGRNYXAsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnBpdm90S2V5c1tpbmRleF0pIHtcbiAgICAgICAgICAgIGZpZWxkTWFwW2ZpZWxkXSA9IHRoaXMucGl2b3RLZXlzW2luZGV4XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmllbGRNYXA7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZpbHRlclZhbHVlID8gdGhpcy5idWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlclZhbHVlKSA6IHRoaXMuZGVmYXVsdEZvcm07XG4gICAgdGhpcy5yZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBmaWx0ZXIgdmlldyBmcm9tIGEgZ2l2ZW4gZmlsdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcik6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyR3JvdXAgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2NvbmRpdGlvbmFsJ10gPSB0aGlzLmJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLmNvbmRpdGlvbmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlckdyb3VwWydieVZhbHVlJ10gPSB0aGlzLmJ1aWxkQnlWYWx1ZUZpbHRlcihmaWx0ZXIuYnlWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgZmlsdGVyIHZpZXdcbiAgICovXG4gIHByaXZhdGUgcmVzZXRGb3JtKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgbGV0IG9yaWdpbmFsU3RhdGUgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHsgYnlWYWx1ZTogdGhpcy5jb2x1bW5WYWx1ZXMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7XG4gICAgICAgIC4uLm9yaWdpbmFsU3RhdGUsXG4gICAgICAgIGNvbmRpdGlvbmFsOiB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdLCB2YWx1ZTogbnVsbCwgcmFuZ2VFbmQ6IG51bGwgfV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLmNvbmRpdGlvbmFsIGFzIEZvcm1Hcm91cDtcbiAgICAgIGNvbmRpdGlvbmFsLnJlbW92ZUNvbnRyb2woJ2NvbmRpdGlvbnMnKTtcbiAgICAgIGNvbmRpdGlvbmFsLmFkZENvbnRyb2woJ2NvbmRpdGlvbnMnLCB0aGlzLmZiLmFycmF5KFt0aGlzLmRlZmF1bHRPcGVyYW5kXSkpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQob3JpZ2luYWxTdGF0ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgY29sdW1uIHZhbHVlcyB0byBkaXNwbGF5IG9uIHRoZSBsaXN0LlxuICAgKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkXG4gICAqIDIuIFNpbmNlIHdlIGFsc28gd2FudCB0byBzaG93IHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gZmlsdGVyIHdlIGFyZSBpdGVyYXRpbmcgYWxsIHRoZSByb3dzXG4gICAqIChiZWZvcmUgdGhlIGZpbHRlcmluZyksIGZpbmRpbmcgd2hpY2ggd2VyZSByZW1vdmVkIGJ5IHRoaXMgY29sdW1uJ3MgZmlsdGVyIGFuZCBhZGRpbmcgdGhlbSBiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZXMoKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdIHtcbiAgICBsZXQgdmFsdWVzOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIGNvbnN0IGRpc3BsYXllZFJvdyA9IHt9O1xuICAgIGNvbnN0IGJ5VmFsdWVUeXBlID0gZmlsdGVyVmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlLmNvbmRpdGlvbjtcbiAgICBjb25zdCBhcGkgPSB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZDtcbiAgICBjb25zdCBnZXRWYWx1ZUN1cnJpZWQgPSBjdXJyeSh0aGlzLmdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUpKHRoaXMuY29sRmllbGQsIGFwaSwgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIpO1xuICAgIC8qKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkICovXG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgYXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KHJvdyA9PiB7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgZGlzcGxheWVkUm93W3Jvdy5pZF0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFdlIG9ubHkgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBsaXN0ICovXG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IGFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VTaXplICogY3VycmVudFBhZ2U7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZShyb3cgPT4ge1xuICAgICAgICBjb25zdCB7IHJvd0luZGV4IH0gPSByb3c7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSBzdGFydEluZGV4ICYmIHJvd0luZGV4IDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiAyLiBBZGQgYmFjayB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uICovXG4gICAgaWYgKGJ5VmFsdWVUeXBlKSB7XG4gICAgICBpZiAoYnlWYWx1ZVR5cGUgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyIGFzIChwYXJhbXM6IGFueSkgPT4gc3RyaW5nO1xuICAgICAgICBjb25zdCBjdXJyRmlsdGVyVmFsdWVzID0gZmlsdGVyVmFsdWUuYnlWYWx1ZS52YWx1ZXMubWFwKCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9KSA6IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChjdXJyRmlsdGVyVmFsdWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uYWwgfSA9IHRoaXMuY29sRmlsdGVyO1xuICAgICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpLFxuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXTogeyBjb25kaXRpb25hbCB9XG4gICAgICAgIH07XG4gICAgICAgIGFwaS5mb3JFYWNoTGVhZk5vZGUocm93ID0+IHtcbiAgICAgICAgICBpZiAoIWRpc3BsYXllZFJvdy5oYXNPd25Qcm9wZXJ0eShyb3cuaWQpICYmIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGkgfSwgYWN0aXZlRmlsdGVycykpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcUJ5KHZhbHVlcywgJ3ZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBhcGk6IEdyaWRBcGksXG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMTAxOVxuICAgIGZvcm1hdHRlcjogKHBhcmFtczogYW55KSA9PiBzdHJpbmcsXG4gICAgcm93OiBSb3dOb2RlXG4gICk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUge1xuICAgIGNvbnN0IHZhbHVlID0gYXBpLmdldFZhbHVlKGZpZWxkLCByb3cpO1xuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTA5NjM/cGFnZT0xXG4gICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9IGFzIGFueSkgOiB2YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbEZpbHRlcihcbiAgICBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLFxuICAgIHsgb3BlcmF0b3IsIGNvbmRpdGlvbnMgfTogeyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlczsgY29uZGl0aW9uczogQ29uZGl0aW9ucyB9XG4gICkge1xuICAgIGNvbnN0IHZhbGlkQ29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuZmlsdGVyKCh7IHZhbHVlLCB0eXBlIH0pID0+ICFpc05pbCh2YWx1ZSkgfHwgdGhpcy5pc0VtcHR5T3BlcmFuZCh0eXBlLm9wZXJhbmQpKTtcbiAgICBpZiAodmFsaWRDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgZmlsdGVyLmNvbmRpdGlvbmFsID0ge1xuICAgICAgICB0eXBlOiAodGhpcy5jb2xEZWYuZmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIHx8IERhdG9HcmlkRmlsdGVyVHlwZXMuU3RyaW5nLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9ucy5tYXAoKHsgdmFsdWUsIHR5cGUsIHJhbmdlRW5kIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWUgfTtcbiAgICAgICAgICBpZiAodHlwZS5vcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHsgLi4uYmFzZSwgcmFuZ2VFbmQgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB2YWx1ZSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlOiBmcm9tIGFzIHN0cmluZywgcmFuZ2VFbmQ6IHRvIGFzIHN0cmluZyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmFzZSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRCeVZhbHVlRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIGJ5VmFsdWU6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBjb25zdCB2YWx1ZXNDb3VudCA9IHRoaXMuY29sdW1uVmFsdWVzLmxlbmd0aDtcbiAgICAgIGlmIChieVZhbHVlLmxlbmd0aCAhPT0gdmFsdWVzQ291bnQpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgICBieVZhbHVlLmxlbmd0aCA8IHZhbHVlc0NvdW50IC8gMiA/IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgIHZhbHVlczogY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUID8gYnlWYWx1ZSA6IHRoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmV4Y2x1ZGVkVmFsdWVzLnZhbHVlcygpKTtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCeVZhbHVlRmlsdGVyKGJ5VmFsdWU6IERhdG9HcmlkRmlsdGVyWydieVZhbHVlJ10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdW10ge1xuICAgIGlmICghYnlWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLnZhbHVlcy5sZW5ndGggJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgdGhpcy5hY3RpdmVBY2NvcmRpb25JZCA9IDE7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0KGJ5VmFsdWUudmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlLnZhbHVlcyldO1xuICAgIH1cbiAgICByZXR1cm4gW2J5VmFsdWUudmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25hbEZpbHRlcihjb25kaXRpb25hbDogRGF0b0dyaWRGaWx0ZXJbJ2NvbmRpdGlvbmFsJ10pOiBGb3JtR3JvdXAge1xuICAgIGlmICghY29uZGl0aW9uYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFtjb25kaXRpb25hbC5vcGVyYXRvcl0sXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmZiLmFycmF5KHRoaXMuYnVpbGRDb25kaXRpb25zKGNvbmRpdGlvbmFsLmNvbmRpdGlvbnMpKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmRpdGlvbnMoY29uZGl0aW9uczogKERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uIHwgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbilbXSk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gY29uZGl0aW9ucy5tYXAoY29uZGl0aW9uID0+IHtcbiAgICAgIGNvbnN0IHsgY29uZGl0aW9uOiBjdXJyZW50T3BlcmFuZCwgdmFsdWUgfSA9IGNvbmRpdGlvbjtcbiAgICAgIGNvbnN0IGdyb3VwID0ge1xuICAgICAgICB0eXBlOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zLmZpbmRJbmRleCgoeyBvcGVyYW5kIH0pID0+IG9wZXJhbmQgPT09IGN1cnJlbnRPcGVyYW5kKSxcbiAgICAgICAgICAgIG9wZXJhbmQ6IGN1cnJlbnRPcGVyYW5kLFxuICAgICAgICAgICAgbGFiZWw6IGBjb3JlLiR7Y3VycmVudE9wZXJhbmR9YFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWU6IFt2YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHJhbmdlRW5kOiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKGlzUmFuZ2VDb25kaXRpb248RGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbj4oY29uZGl0aW9uKSkge1xuICAgICAgICBncm91cC5yYW5nZUVuZCA9IFtjb25kaXRpb24ucmFuZ2VFbmQsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICBncm91cC52YWx1ZSA9IFt7IGZyb206IGNvbmRpdGlvbi52YWx1ZSBhcyBzdHJpbmcsIHRvOiBjb25kaXRpb24ucmFuZ2VFbmQgYXMgc3RyaW5nIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZ3JvdXApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHJhbmdlIGlzIG5vdCByZXF1aXJlZCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIG1ha2UgaXQgcmVxdWlyZWQgb25jZSB0aGlzIG9wZXJhbmQgaXMgc2VsZWN0ZWQuXG4gICAqICovXG4gIHByaXZhdGUgcmVnaXN0ZXJPcGVyYW5kTGlzdGVuZXJzKCkge1xuICAgIGlmICghdGhpcy5jb25kaXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZGl0aW9ucy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5jb25kaXRpb25zLmxlbmd0aCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZXMgPSB0aGlzLmNvbmRpdGlvbnMuY29udHJvbHMubWFwKChncm91cDogRm9ybUdyb3VwLCBpbmRleCkgPT5cbiAgICAgICAgICAgIGdyb3VwLmdldCgndHlwZScpLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgodmFsdWU6IENvbmRpdGlvbk9wdGlvbikgPT4gKHsgdmFsdWUsIGluZGV4IH0pKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBtZXJnZSguLi52YWx1ZUNoYW5nZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgdmFsdWU6IHsgb3BlcmFuZCB9LCBpbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgaW5kZXgsIGluUmFuZ2U6IG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFIH07XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRGF0ZUlucHV0KHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLk51bWJlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlTnVtYmVySW5wdXQocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kLCBpbmRleCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZUlucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgndmFsdWUnKTtcbiAgICBpZiAoY29udHJvbC5kaXJ0eSkge1xuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gY29udHJvbDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaW5SYW5nZSA/IHsgZnJvbTogdmFsdWUsIHRvOiB2YWx1ZSB9IDogdmFsdWUuZnJvbTtcbiAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVOdW1iZXJJbnB1dCh7IGluUmFuZ2UsIGluZGV4IH0pIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBpblJhbmdlID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgcmFuZ2VFbmQgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgncmFuZ2VFbmQnKTtcbiAgICByYW5nZUVuZC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgcmFuZ2VFbmQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZUNvbnRyb2xWYWxpZGF0b3Iob3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSAhdGhpcy5pc0VtcHR5T3BlcmFuZChvcGVyYW5kKSA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsO1xuICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpIGFzIEZvcm1Db250cm9sO1xuICAgIHZhbHVlQ29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgdmFsdWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eU9wZXJhbmQob3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgfHxcbiAgICAgIG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTExcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmluZ0FycmF5KHZhbHVlOiAoc3RyaW5nIHwgTGlzdEl0ZW0pW10pOiB2YWx1ZSBpcyBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVzRnJvbVNlcnZlcihzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRpbmdMaXN0ID0gdHJ1ZTtcbiAgICB0aGlzLmxpc3RPcHRpb25zID0gW107XG4gICAgY29uc3QgcGFyYW1zOiBQYXJ0aWFsPERhdG9HcmlkR2V0Um93c1BhcmFtcz4gPSB7XG4gICAgICBmYWlsQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBzdWNjZXNzQ2FsbGJhY2s6IGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZsYXREYXRhID0gZGF0YS5tYXAodmFsdWUgPT4gdmFsdWVbdGhpcy5jb2xGaWVsZF0pO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gZmxhdERhdGEubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB0aGlzLnBhdGNoQW5kUmVSZWdpc3RlcihmbGF0RGF0YSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBzZXJ2ZXJDb25maWc6IHtcbiAgICAgICAgcGFnZVNpemU6IDMwLFxuICAgICAgICBwYWdlTnVtYmVyOiAxLFxuICAgICAgICBjb2x1bW5GaWx0ZXJzOiB7XG4gICAgICAgICAgW3RoaXMuY29sRmllbGRdOiB7XG4gICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLkNPTlRBSU5TLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hUZXJtXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IFtdLFxuICAgICAgICBjb2x1bW5zVG9SZXR1cm46IFt0aGlzLmNvbEZpZWxkXSxcbiAgICAgICAgZGlzdGluY3RSZXN1bHRzOiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLl9vcmlnaW5hbEdldFJvd3MocGFyYW1zIGFzIGFueSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyogV2hlbiBzZWFyY2hpbmcgdGhlIGJ5IHZhbHVlIGZpbHRlciBvbiBzZXJ2ZXIgc2lkZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29udHJvbCB3aXRoIHRoZSBuZXcgdmFsdWVzIGFuZCByZS1yZWdpc3RlciB0byB0aGUgY2hhbmdlcyAqL1xuICBwcml2YXRlIHBhdGNoQW5kUmVSZWdpc3RlcihkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5ieVZhbHVlQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZ2V0Tm9uRXhjbHVkZWRWYWx1ZXMoZGF0YSkpO1xuICAgIHRoaXMucmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKSB7XG4gICAgY29uc3QgYnlWYWx1ZSA9IHRoaXMuYnlWYWx1ZUNvbnRyb2w7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uID0gYnlWYWx1ZS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoYnlWYWx1ZS52YWx1ZSksXG4gICAgICAgIHBhaXJ3aXNlKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtwcmV2LCBjdXJyZW50XSkgPT4ge1xuICAgICAgICBjb25zdCBhZGRUb0V4Y2x1ZGVkID0gY3VycmVudC5sZW5ndGggPCBwcmV2Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGlmZiA9IGFkZFRvRXhjbHVkZWQgPyBkaWZmZXJlbmNlKHByZXYsIGN1cnJlbnQpIDogZGlmZmVyZW5jZShjdXJyZW50LCBwcmV2KTtcbiAgICAgICAgZGlmZi5mb3JFYWNoKHYgPT4gKGFkZFRvRXhjbHVkZWQgPyB0aGlzLmV4Y2x1ZGVkVmFsdWVzLmFkZCh2KSA6IHRoaXMuZXhjbHVkZWRWYWx1ZXMuZGVsZXRlKHYpKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Tm9uRXhjbHVkZWRWYWx1ZXMoZGF0YTogKHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcih2ID0+ICF0aGlzLmV4Y2x1ZGVkVmFsdWVzLmhhcyh2KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBpdm90IGRpbWVuc2lvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcGFyZW50IGdyb3VwIGNvbHVtbiBoZWFkZXIgY2xhc3MuXG4gICAqL1xuICBwcml2YXRlIGdldFBpdm90RmllbGRzKHBhcmVudDogQ29sdW1uR3JvdXAsIGZpZWxkcyA9IFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGdyYW5kUGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuICAgIGNvbnN0IGhlYWRlckNsYXNzID0gcGFyZW50LmdldE9yaWdpbmFsQ29sdW1uR3JvdXAoKS5nZXRDb2xHcm91cERlZigpLmhlYWRlckNsYXNzO1xuXG4gICAgaWYgKGdyYW5kUGFyZW50KSB7XG4gICAgICB0aGlzLmdldFBpdm90RmllbGRzKGdyYW5kUGFyZW50LCBmaWVsZHMpO1xuICAgIH1cblxuICAgIGhlYWRlckNsYXNzICYmIGZpZWxkcy5wdXNoKGhlYWRlckNsYXNzWzBdKTtcblxuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cbn1cbiJdfQ==
@@ -6,17 +6,25 @@
6
6
  * found in the LICENSE file at https://github.com/datorama/client-core/blob/master/LICENSE
7
7
  */
8
8
  import { __decorate, __metadata } from "tslib";
9
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
9
+ import { ChangeDetectionStrategy, Component, ElementRef, Input } from '@angular/core';
10
10
  import { GridQuery } from '../grid-store/grid.query';
11
11
  import { of } from 'rxjs';
12
12
  import { deepmerge } from '../../internal/deep-merge';
13
13
  import { GridService } from '../grid-store/grid.service';
14
14
  let DatoGridV2NoDataOverlayComponent = class DatoGridV2NoDataOverlayComponent {
15
- constructor(gridQuery, gridService) {
15
+ constructor(gridQuery, gridService, element) {
16
16
  this.gridQuery = gridQuery;
17
17
  this.gridService = gridService;
18
+ this.element = element;
18
19
  this.config = {};
19
20
  }
21
+ get showImage() {
22
+ const elParent = this.element.nativeElement.parentElement;
23
+ if (elParent.classList.contains('ag-overlay-wrapper')) {
24
+ return elParent.offsetHeight >= 390;
25
+ }
26
+ return true;
27
+ }
20
28
  ngOnInit() {
21
29
  this.filterActive$ = this.gridQuery.filterActive$;
22
30
  this.hasError$ = this.gridQuery.isServerSide ? this.gridQuery.serverSideError$ : of(false);
@@ -49,7 +57,8 @@ let DatoGridV2NoDataOverlayComponent = class DatoGridV2NoDataOverlayComponent {
49
57
  };
50
58
  DatoGridV2NoDataOverlayComponent.ctorParameters = () => [
51
59
  { type: GridQuery },
52
- { type: GridService }
60
+ { type: GridService },
61
+ { type: ElementRef }
53
62
  ];
54
63
  __decorate([
55
64
  Input(),
@@ -58,11 +67,11 @@ __decorate([
58
67
  DatoGridV2NoDataOverlayComponent = __decorate([
59
68
  Component({
60
69
  selector: 'dato-grid-v2-no-data-overlay',
61
- template: "<div class=\"container d-flex-column align-center\">\n <ng-container *ngIf=\"(hasError$ | async) === false; else error\">\n <ng-container *ngIf=\"(filterActive$ | async) === true; else noData\">\n <ng-container *ngTemplateOutlet=\"imgNText; context: {$implicit: mergedConfig.noResult }\"></ng-container>\n <div class=\"d-flex items-center\">\n <div class=\"dato-simple primary-400-color\">{{'core.try-to-adjust-or' | translate}}&nbsp;</div>\n <dato-link (click)=\"clearFilters()\">{{ 'core.clear-filters' | translate }}</dato-link>\n </div>\n </ng-container>\n <ng-template #noData>\n <ng-container *ngTemplateOutlet=\"imgNText; context: {$implicit: mergedConfig.noData}\"></ng-container>\n <ng-content select=\"[no-data-content]\"></ng-content>\n </ng-template>\n\n </ng-container>\n <ng-template #error>\n <ng-container *ngTemplateOutlet=\"imgNText; context: {$implicit: mergedConfig.serverSideError}\"></ng-container>\n <div #errorContent><ng-content select=\"[server-error-content]\"></ng-content></div>\n <div class=\"dato-simple primary-400-color\" *ngIf=\"errorContent.children.length === 0\">{{'core.try-to-refresh-or-contact' | translate}}&nbsp;</div>\n </ng-template>\n</div>\n\n<ng-template #imgNText let-view>\n <img class=\"mb-30\" [datoStaticSrc]=\"view.icon\">\n <div class=\"dato-simple-bold primary-500-color mb-3\">{{ view.text | translate }}</div>\n</ng-template>\n",
70
+ template: "<div class=\"container d-flex-column align-center\">\n <ng-container *ngIf=\"(hasError$ | async) === false; else error\">\n <ng-container *ngIf=\"(filterActive$ | async) === true; else noData\">\n <ng-container *ngTemplateOutlet=\"imgNText; context: {$implicit: mergedConfig.noResult }\"></ng-container>\n <div class=\"d-flex items-center\">\n <div class=\"dato-simple primary-400-color\">{{'core.try-to-adjust-or' | translate}}&nbsp;</div>\n <dato-link (click)=\"clearFilters()\">{{ 'core.clear-filters' | translate }}</dato-link>\n </div>\n </ng-container>\n <ng-template #noData>\n <ng-container *ngTemplateOutlet=\"imgNText; context: {$implicit: mergedConfig.noData}\"></ng-container>\n <ng-content select=\"[no-data-content]\"></ng-content>\n </ng-template>\n\n </ng-container>\n <ng-template #error>\n <ng-container *ngTemplateOutlet=\"imgNText; context: {$implicit: mergedConfig.serverSideError}\"></ng-container>\n <div #errorContent><ng-content select=\"[server-error-content]\"></ng-content></div>\n <div class=\"dato-simple primary-400-color\" *ngIf=\"errorContent.children.length === 0\">{{'core.try-to-refresh-or-contact' | translate}}&nbsp;</div>\n </ng-template>\n</div>\n\n<ng-template #imgNText let-view>\n <img class=\"mb-30\" [datoStaticSrc]=\"view.icon\" *ngIf=\"showImage && view.icon\">\n <div class=\"dato-simple-bold primary-500-color mb-3\">{{ view.text | translate }}</div>\n</ng-template>\n",
62
71
  changeDetection: ChangeDetectionStrategy.OnPush,
63
72
  styles: [":host{pointer-events:all}"]
64
73
  }),
65
- __metadata("design:paramtypes", [GridQuery, GridService])
74
+ __metadata("design:paramtypes", [GridQuery, GridService, ElementRef])
66
75
  ], DatoGridV2NoDataOverlayComponent);
67
76
  export { DatoGridV2NoDataOverlayComponent };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC12Mi1uby1kYXRhLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLW5vLWRhdGEtb3ZlcmxheS9ncmlkLXYyLW5vLWRhdGEtb3ZlcmxheS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFpQnpELElBQWEsZ0NBQWdDLEdBQTdDLE1BQWEsZ0NBQWdDO0lBUTNDLFlBQW9CLFNBQW9CLEVBQVUsV0FBd0I7UUFBdEQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUGpFLFdBQU0sR0FBeUIsRUFBRSxDQUFDO0lBT2tDLENBQUM7SUFFOUUsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUN4RSxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBc0IsQ0FBQztJQUNyRixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUE0QixJQUFTLENBQUM7SUFFckMsaUJBQWlCO1FBQ3ZCLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXpELElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLElBQUksRUFBRSwwQkFBMEI7YUFDakM7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjthQUNwRjtZQUNELGVBQWUsRUFBRTtnQkFDZixJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsMEJBQTBCO2FBQ2pDO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFBOztZQW5DZ0MsU0FBUztZQUF1QixXQUFXOztBQVBqRTtJQUFSLEtBQUssRUFBRTs7Z0VBQW1DO0FBRGhDLGdDQUFnQztJQU41QyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsOEJBQThCO1FBQ3hDLGtpREFBdUQ7UUFFdkQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O0tBQ2hELENBQUM7cUNBUytCLFNBQVMsRUFBdUIsV0FBVztHQVIvRCxnQ0FBZ0MsQ0EyQzVDO1NBM0NZLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTm9Sb3dzT3ZlcmxheUFuZ3VsYXJDb21wIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IElOb1Jvd3NPdmVybGF5UGFyYW1zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9kZWVwLW1lcmdlJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0dyaWRPdmVybGF5SW5wdXQgfSBmcm9tICcuL2dyaWQtdjItbm8tZGF0YS1vdmVybGF5LnR5cGVzJztcblxudHlwZSBPdmVybGF5VmlldyA9IHsgaWNvbjogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfTtcblxudHlwZSBHcmlkT3ZlcmxheUNvbmZpZyA9IHtcbiAgbm9EYXRhOiBPdmVybGF5VmlldztcbiAgbm9SZXN1bHQ6IE92ZXJsYXlWaWV3O1xuICBzZXJ2ZXJTaWRlRXJyb3I6IE92ZXJsYXlWaWV3O1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1ncmlkLXYyLW5vLWRhdGEtb3ZlcmxheScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLXYyLW5vLWRhdGEtb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtdjItbm8tZGF0YS1vdmVybGF5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdG9HcmlkVjJOb0RhdGFPdmVybGF5Q29tcG9uZW50IGltcGxlbWVudHMgSU5vUm93c092ZXJsYXlBbmd1bGFyQ29tcCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogRGF0b0dyaWRPdmVybGF5SW5wdXQgPSB7fTtcbiAgbWVyZ2VkQ29uZmlnOiBHcmlkT3ZlcmxheUNvbmZpZztcbiAgZmlsdGVyQWN0aXZlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgaGFzRXJyb3IkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHByaXZhdGUgZGVmYXVsdENvbmZpZzogRGF0b0dyaWRPdmVybGF5SW5wdXQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeSwgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJBY3RpdmUkID0gdGhpcy5ncmlkUXVlcnkuZmlsdGVyQWN0aXZlJDtcbiAgICB0aGlzLmhhc0Vycm9yJCA9IHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZSA/IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVFcnJvciQgOiBvZihmYWxzZSk7XG4gICAgdGhpcy5pbml0RGVmYXVsdENvbmZpZygpO1xuICAgIGNvbnN0IGdyaWRDb25maWcgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLm92ZXJsYXlzQ29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IHVzZXJDb25maWcgPSBkZWVwbWVyZ2UoZ3JpZENvbmZpZywgdGhpcy5jb25maWcpO1xuICAgIHRoaXMubWVyZ2VkQ29uZmlnID0gZGVlcG1lcmdlKHRoaXMuZGVmYXVsdENvbmZpZywgdXNlckNvbmZpZykgYXMgR3JpZE92ZXJsYXlDb25maWc7XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jbGVhckFsbEZpbHRlcnMoKTtcbiAgfVxuXG4gIGFnSW5pdChwYXJhbXM6IElOb1Jvd3NPdmVybGF5UGFyYW1zKTogdm9pZCB7fVxuXG4gIHByaXZhdGUgaW5pdERlZmF1bHRDb25maWcoKSB7XG4gICAgY29uc3QgeyBlbmFibGVTZWFyY2ggfSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7XG4gICAgICBub0RhdGE6IHtcbiAgICAgICAgaWNvbjogJ2NvcmUvZ3JpZC9uby1kYXRhLnN2ZycsXG4gICAgICAgIHRleHQ6ICdjb3JlLm5vLWl0ZW1zLXRvLWRpc3BsYXknXG4gICAgICB9LFxuICAgICAgbm9SZXN1bHQ6IHtcbiAgICAgICAgaWNvbjogJ2NvcmUvZ3JpZC9uby1yZXN1bHRzLnN2ZycsXG4gICAgICAgIHRleHQ6IGVuYWJsZVNlYXJjaCA/ICdjb3JlLm5vLW1hdGNoaW5nLXNlYXJjaC1yZXN1bHRzJyA6ICdjb3JlLm5vLW1hdGNoaW5nLXJlc3VsdHMnXG4gICAgICB9LFxuICAgICAgc2VydmVyU2lkZUVycm9yOiB7XG4gICAgICAgIGljb246ICdjb3JlL2dyaWQvYWxlcnQuc3ZnJyxcbiAgICAgICAgdGV4dDogJ2NvcmUudW5hYmxlLXRvLWxvYWQtZGF0YSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iXX0=
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC12Mi1uby1kYXRhLW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLW5vLWRhdGEtb3ZlcmxheS9ncmlkLXYyLW5vLWRhdGEtb3ZlcmxheS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBaUJ6RCxJQUFhLGdDQUFnQyxHQUE3QyxNQUFhLGdDQUFnQztJQWtCM0MsWUFBb0IsU0FBb0IsRUFBVSxXQUF3QixFQUFVLE9BQW1CO1FBQW5GLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFqQjlGLFdBQU0sR0FBeUIsRUFBRSxDQUFDO0lBaUIrRCxDQUFDO0lBVjNHLElBQUksU0FBUztRQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUUxRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDckQsT0FBTyxRQUFRLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQztTQUNyQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUlELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDeEUsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQXNCLENBQUM7SUFDckYsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBNEIsSUFBUyxDQUFDO0lBRXJDLGlCQUFpQjtRQUN2QixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV6RCxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixJQUFJLEVBQUUsMEJBQTBCO2FBQ2pDO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7YUFDcEY7WUFDRCxlQUFlLEVBQUU7Z0JBQ2YsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsSUFBSSxFQUFFLDBCQUEwQjthQUNqQztTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQTs7WUFuQ2dDLFNBQVM7WUFBdUIsV0FBVztZQUFtQixVQUFVOztBQWpCOUY7SUFBUixLQUFLLEVBQUU7O2dFQUFtQztBQURoQyxnQ0FBZ0M7SUFONUMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLDhCQUE4QjtRQUN4Qyxta0RBQXVEO1FBRXZELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOztLQUNoRCxDQUFDO3FDQW1CK0IsU0FBUyxFQUF1QixXQUFXLEVBQW1CLFVBQVU7R0FsQjVGLGdDQUFnQyxDQXFENUM7U0FyRFksZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElOb1Jvd3NPdmVybGF5QW5ndWxhckNvbXAgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgSU5vUm93c092ZXJsYXlQYXJhbXMgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL2RlZXAtbWVyZ2UnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRvR3JpZE92ZXJsYXlJbnB1dCB9IGZyb20gJy4vZ3JpZC12Mi1uby1kYXRhLW92ZXJsYXkudHlwZXMnO1xuXG50eXBlIE92ZXJsYXlWaWV3ID0geyBpY29uOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9O1xuXG50eXBlIEdyaWRPdmVybGF5Q29uZmlnID0ge1xuICBub0RhdGE6IE92ZXJsYXlWaWV3O1xuICBub1Jlc3VsdDogT3ZlcmxheVZpZXc7XG4gIHNlcnZlclNpZGVFcnJvcjogT3ZlcmxheVZpZXc7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtdjItbm8tZGF0YS1vdmVybGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtdjItbm8tZGF0YS1vdmVybGF5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC12Mi1uby1kYXRhLW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRWMk5vRGF0YU92ZXJsYXlDb21wb25lbnQgaW1wbGVtZW50cyBJTm9Sb3dzT3ZlcmxheUFuZ3VsYXJDb21wIHtcbiAgQElucHV0KCkgY29uZmlnOiBEYXRvR3JpZE92ZXJsYXlJbnB1dCA9IHt9O1xuICBtZXJnZWRDb25maWc6IEdyaWRPdmVybGF5Q29uZmlnO1xuICBmaWx0ZXJBY3RpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBoYXNFcnJvciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgcHJpdmF0ZSBkZWZhdWx0Q29uZmlnOiBEYXRvR3JpZE92ZXJsYXlJbnB1dDtcblxuICBnZXQgc2hvd0ltYWdlKCkge1xuICAgIGNvbnN0IGVsUGFyZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgIGlmIChlbFBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2FnLW92ZXJsYXktd3JhcHBlcicpKSB7XG4gICAgICByZXR1cm4gZWxQYXJlbnQub2Zmc2V0SGVpZ2h0ID49IDM5MDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3JpZFF1ZXJ5OiBHcmlkUXVlcnksIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLCBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJBY3RpdmUkID0gdGhpcy5ncmlkUXVlcnkuZmlsdGVyQWN0aXZlJDtcbiAgICB0aGlzLmhhc0Vycm9yJCA9IHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZSA/IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVFcnJvciQgOiBvZihmYWxzZSk7XG4gICAgdGhpcy5pbml0RGVmYXVsdENvbmZpZygpO1xuICAgIGNvbnN0IGdyaWRDb25maWcgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLm92ZXJsYXlzQ29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IHVzZXJDb25maWcgPSBkZWVwbWVyZ2UoZ3JpZENvbmZpZywgdGhpcy5jb25maWcpO1xuICAgIHRoaXMubWVyZ2VkQ29uZmlnID0gZGVlcG1lcmdlKHRoaXMuZGVmYXVsdENvbmZpZywgdXNlckNvbmZpZykgYXMgR3JpZE92ZXJsYXlDb25maWc7XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jbGVhckFsbEZpbHRlcnMoKTtcbiAgfVxuXG4gIGFnSW5pdChwYXJhbXM6IElOb1Jvd3NPdmVybGF5UGFyYW1zKTogdm9pZCB7fVxuXG4gIHByaXZhdGUgaW5pdERlZmF1bHRDb25maWcoKSB7XG4gICAgY29uc3QgeyBlbmFibGVTZWFyY2ggfSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCk7XG5cbiAgICB0aGlzLmRlZmF1bHRDb25maWcgPSB7XG4gICAgICBub0RhdGE6IHtcbiAgICAgICAgaWNvbjogJ2NvcmUvZ3JpZC9uby1kYXRhLnN2ZycsXG4gICAgICAgIHRleHQ6ICdjb3JlLm5vLWl0ZW1zLXRvLWRpc3BsYXknXG4gICAgICB9LFxuICAgICAgbm9SZXN1bHQ6IHtcbiAgICAgICAgaWNvbjogJ2NvcmUvZ3JpZC9uby1yZXN1bHRzLnN2ZycsXG4gICAgICAgIHRleHQ6IGVuYWJsZVNlYXJjaCA/ICdjb3JlLm5vLW1hdGNoaW5nLXNlYXJjaC1yZXN1bHRzJyA6ICdjb3JlLm5vLW1hdGNoaW5nLXJlc3VsdHMnXG4gICAgICB9LFxuICAgICAgc2VydmVyU2lkZUVycm9yOiB7XG4gICAgICAgIGljb246ICdjb3JlL2dyaWQvYWxlcnQuc3ZnJyxcbiAgICAgICAgdGV4dDogJ2NvcmUudW5hYmxlLXRvLWxvYWQtZGF0YSdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iXX0=