igniteui-angular 16.1.3 → 16.1.5

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 (45) hide show
  1. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +5 -9
  2. package/esm2022/lib/core/utils.mjs +2 -2
  3. package/esm2022/lib/directives/for-of/for_of.directive.mjs +4 -1
  4. package/esm2022/lib/grids/common/strategy.mjs +2 -1
  5. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +6 -3
  6. package/esm2022/lib/grids/grid/grid.component.mjs +15 -3
  7. package/esm2022/lib/grids/headers/grid-header-row.component.mjs +9 -3
  8. package/esm2022/lib/services/overlay/overlay.mjs +2 -2
  9. package/esm2022/lib/snackbar/snackbar.component.mjs +4 -3
  10. package/fesm2022/igniteui-angular.mjs +37 -17
  11. package/fesm2022/igniteui-angular.mjs.map +1 -1
  12. package/lib/buttonGroup/buttonGroup.component.d.ts +2 -2
  13. package/lib/core/styles/components/rating/_rating-theme.scss +5 -5
  14. package/lib/core/styles/components/snackbar/_snackbar-theme.scss +14 -24
  15. package/lib/grids/grid/grid.component.d.ts +9 -0
  16. package/lib/grids/headers/grid-header-row.component.d.ts +4 -0
  17. package/lib/snackbar/snackbar.component.d.ts +1 -1
  18. package/migrations/common/tsUtils.js +1 -1
  19. package/package.json +2 -2
  20. package/styles/igniteui-angular-dark.css +1 -1
  21. package/styles/igniteui-angular.css +1 -1
  22. package/styles/igniteui-bootstrap-dark.css +1 -1
  23. package/styles/igniteui-bootstrap-light.css +1 -1
  24. package/styles/igniteui-dark-green.css +1 -1
  25. package/styles/igniteui-fluent-dark-excel.css +1 -1
  26. package/styles/igniteui-fluent-dark-word.css +1 -1
  27. package/styles/igniteui-fluent-dark.css +1 -1
  28. package/styles/igniteui-fluent-light-excel.css +1 -1
  29. package/styles/igniteui-fluent-light-word.css +1 -1
  30. package/styles/igniteui-fluent-light.css +1 -1
  31. package/styles/igniteui-indigo-dark.css +1 -1
  32. package/styles/igniteui-indigo-light.css +1 -1
  33. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  34. package/styles/maps/igniteui-angular.css.map +1 -1
  35. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  36. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  37. package/styles/maps/igniteui-dark-green.css.map +1 -1
  38. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  39. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  40. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  41. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  42. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  43. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  44. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  45. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -190,6 +190,7 @@ export class IgxGrouping extends IgxSorting {
190
190
  groupBy(data, state, grid, groupsRecords, fullResult = { data: [], metadata: [] }) {
191
191
  const metadata = [];
192
192
  const grouping = this.groupDataRecursive(data, state, 0, null, metadata, grid, groupsRecords, fullResult);
193
+ grid?.groupingPerformedSubject.next();
193
194
  return {
194
195
  data: grouping,
195
196
  metadata
@@ -223,4 +224,4 @@ export class IgxDataRecordSorting extends IgxSorting {
223
224
  return super.getFieldValue(obj.data, key, isDate, isTime);
224
225
  }
225
226
  }
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL3N0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFNNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxzQkFBc0IsRUFBc0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUdwRyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUM7QUFnQzdCOzs7R0FHRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBQ25COzs7Ozs7S0FNQztJQUNNLElBQUksQ0FBQyxJQUFXLEVBQUUsV0FBaUMsRUFBRSxJQUFlO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7OztLQUlDO0lBQ1Msa0JBQWtCLENBQ3hCLElBQVcsRUFDWCxLQUFxQixFQUNyQixLQUFhLEVBQ2IsTUFBc0IsRUFDdEIsUUFBMEIsRUFDMUIsT0FBaUIsSUFBSSxFQUNyQixnQkFBdUIsRUFBRSxFQUN6QixhQUE2QixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUV2RCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxD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LE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLElBQUksQ0FBQyxJQUFXO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7O0FBR0w7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFVBQVU7SUFDakQ7OztNQUdFO0lBQ2tCLGFBQWEsQ0FBQyxHQUFRLEVBQUUsR0FBVyxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDbEYsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbG9uZUFycmF5LCBwYXJzZURhdGUsIHJlc29sdmVOZXN0ZWRQYXRoIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBCeVJlY29yZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXJlY29yZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwaW5nU3RhdGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBCeVJlc3VsdCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGluZy1yZXN1bHQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdldEhpZXJhcmNoeSwgaXNIaWVyYXJjaHlNYXRjaCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9vcGVyYXRpb25zJztcbmltcG9ydCB7IERlZmF1bHRTb3J0aW5nU3RyYXRlZ3ksIElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9ncmlkLmludGVyZmFjZSc7XG5cbmNvbnN0IERBVEVfVFlQRSA9ICdkYXRlJztcbmNvbnN0IFRJTUVfVFlQRSA9ICd0aW1lJztcbmNvbnN0IERBVEVfVElNRV9UWVBFID0gJ2RhdGVUaW1lJztcbmNvbnN0IFNUUklOR19UWVBFID0gJ3N0cmluZyc7XG5cbi8qKiBcbiAqIFJlcHJlc2VudHMgYSBzb3J0aW5nIHN0cmF0ZWd5IGZvciB0aGUgZ3JpZCBkYXRhXG4gKiBDb250YWlucyBhIHNpbmdsZSBtZXRob2Qgc29ydCB0aGF0IHNvcnRzIHRoZSBwcm92aWRlZCBkYXRhIGJhc2VkIG9uIHRoZSBnaXZlbiBzb3J0aW5nIGV4cHJlc3Npb25zIFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU29ydGluZ1N0cmF0ZWd5IHtcbiAgIC8qKlxuICAgKiBgZGF0YWA6IFRoZSBhcnJheSBvZiBkYXRhIHRvIGJlIHNvcnRlZC4gQ291bGQgYmUgb2YgYW55IHR5cGUuXG4gICAqIGBleHByZXNzaW9uc2A6IEFuIGFycmF5IG9mIHNvcnRpbmcgZXhwcmVzc2lvbnMgdGhhdCBkZWZpbmUgdGhlIHNvcnRpbmcgcnVsZXMuIFRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uIGxpa2UgZmlsZSBuYW1lLCB3aGV0aGVyIHRoZSBsZXR0ZXIgY2FzZSBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50LCBldGMuXG4gICAqIGBncmlkYDogKE9wdGlvbmFsKSBUaGUgaW5zdGFuY2Ugb2YgdGhlIGdyaWQgd2hlcmUgdGhlIHNvcnRpbmcgaXMgYXBwbGllZC5cbiAgICogUmV0dXJucyBhIG5ldyBhcnJheSB3aXRoIHRoZSBkYXRhIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIHNvcnRpbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICAgIHNvcnQoZGF0YTogYW55W10sIGV4cHJlc3Npb25zOiBJU29ydGluZ0V4cHJlc3Npb25bXSwgZ3JpZD86IEdyaWRUeXBlKTogYW55W107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGdyb3VwaW5nIHN0cmF0ZWd5IGZvciB0aGUgZ3JpZCBkYXRhLCBleHRlbmRpbmcgdGhlIFNvcnRpbmcgU3RyYXRlZ3kgaW50ZXJmYWNlIChjb250YWlucyBhIHNvcnRpbmcgbWV0aG9kKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJR3JpZEdyb3VwaW5nU3RyYXRlZ3kgZXh0ZW5kcyBJR3JpZFNvcnRpbmdTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIGdyb3VwcyB0aGUgcHJvdmlkZWQgZGF0YSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZ3JvdXBpbmcgc3RhdGUgYW5kIHJldHVybnMgdGhlIHJlc3VsdC5cbiAgICogYGRhdGFgOiBUaGUgYXJyYXkgb2YgZGF0YSB0byBiZSBncm91cGVkLiBDb3VsZCBiZSBvZiBhbnkgdHlwZS5cbiAgICogYHN0YXRlYDogVGhlIGdyb3VwaW5nIHN0YXRlIHRoYXQgZGVmaW5lcyB0aGUgZ3JvdXBpbmcgc2V0dGluZ3MgYW5kIGV4cHJlc3Npb25zLlxuICAgKiBgZ3JpZGA6IChPcHRpb25hbCkgVGhlIGluc3RhbmNlIG9mIHRoZSBncmlkIHdoZXJlIHRoZSBncm91cGluZyBpcyBhcHBsaWVkLlxuICAgKiBgZ3JvdXBzUmVjb3Jkc2A6IChPcHRpb25hbCkgQW4gYXJyYXkgdGhhdCBob2xkcyB0aGUgcmVjb3JkcyBmb3IgZWFjaCBncm91cC5cbiAgICogYGZ1bGxSZXN1bHRgOiAoT3B0aW9uYWwpIFRoZSBjb21wbGV0ZSByZXN1bHQgb2YgZ3JvdXBpbmcgaW5jbHVkaW5nIGdyb3VwcyBhbmQgc3VtbWFyeSBkYXRhLlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGdyb3VwaW5nIG9wZXJhdGlvbi5cbiAgICovXG4gICAgZ3JvdXBCeShkYXRhOiBhbnlbXSwgc3RhdGU6IElHcm91cGluZ1N0YXRlLCBncmlkPzogYW55LCBncm91cHNSZWNvcmRzPzogYW55W10sIGZ1bGxSZXN1bHQ/OiBJR3JvdXBCeVJlc3VsdCk6IElHcm91cEJ5UmVzdWx0O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjbGFzcyBpbXBsZW1lbnRpbmcgdGhlIElHcmlkU29ydGluZ1N0cmF0ZWd5IGludGVyZmFjZS5cbiAqIEl0IHByb3ZpZGVzIHNvcnRpbmcgZnVuY3Rpb25hbGl0eSBmb3IgZ3JpZCBkYXRhIGJhc2VkIG9uIHNvcnRpbmcgZXhwcmVzc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJZ3hTb3J0aW5nIGltcGxlbWVudHMgSUdyaWRTb3J0aW5nU3RyYXRlZ3kge1xuICAgIC8qKlxuICAgKiBTb3J0cyB0aGUgcHJvdmlkZWQgZGF0YSBiYXNlZCBvbiB0aGUgZ2l2ZW4gc29ydGluZyBleHByZXNzaW9ucy5cbiAgICogYGRhdGFgOiBUaGUgYXJyYXkgb2YgZGF0YSB0byBiZSBzb3J0ZWQuXG4gICAqIGBleHByZXNzaW9uc2A6IEFuIGFycmF5IG9mIHNvcnRpbmcgZXhwcmVzc2lvbnMgdGhhdCBkZWZpbmUgdGhlIHNvcnRpbmcgcnVsZXMuIFRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uIGxpa2UgZmlsZSBuYW1lLCB3aGV0aGVyIHRoZSBsZXR0ZXIgY2FzZSBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50LCBldGMuXG4gICAqIGBncmlkYDogKE9wdGlvbmFsKSBUaGUgaW5zdGFuY2Ugb2YgdGhlIGdyaWQgd2hlcmUgdGhlIHNvcnRpbmcgaXMgYXBwbGllZC5cbiAgICogUmV0dXJucyBhIG5ldyBhcnJheSB3aXRoIHRoZSBkYXRhIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIHNvcnRpbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICAgIHB1YmxpYyBzb3J0KGRhdGE6IGFueVtdLCBleHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW10sIGdyaWQ/OiBHcmlkVHlwZSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydERhdGFSZWN1cnNpdmUoZGF0YSwgZXhwcmVzc2lvbnMsIDAsIGdyaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgKiBSZWN1cnNpdmVseSBncm91cHMgdGhlIHByb3ZpZGVkIGRhdGEgYmFzZWQgb24gdGhlIGdpdmVuIGdyb3VwaW5nIHN0YXRlIGFuZCByZXR1cm5zIHRoZSBncm91cGVkIHJlc3VsdC5cbiAgICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBncm91cGVkIHJlc3VsdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAgIHByb3RlY3RlZCBncm91cERhdGFSZWN1cnNpdmUoXG4gICAgICAgIGRhdGE6IGFueVtdLFxuICAgICAgICBzdGF0ZTogSUdyb3VwaW5nU3RhdGUsXG4gICAgICAgIGxldmVsOiBudW1iZXIsXG4gICAgICAgIHBhcmVudDogSUdyb3VwQnlSZWNvcmQsXG4gICAgICAgIG1ldGFkYXRhOiBJR3JvdXBCeVJlY29yZFtdLFxuICAgICAgICBncmlkOiBHcmlkVHlwZSA9IG51bGwsXG4gICAgICAgIGdyb3Vwc1JlY29yZHM6IGFueVtdID0gW10sXG4gICAgICAgIGZ1bGxSZXN1bHQ6IElHcm91cEJ5UmVzdWx0ID0geyBkYXRhOiBbXSwgbWV0YWRhdGE6IFtdIH1cbiAgICApOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gc3RhdGUuZXhwcmVzc2lvbnM7XG4gICAgICAgIGNvbnN0IGV4cGFuc2lvbiA9IHN0YXRlLmV4cGFuc2lvbjtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIHdoaWxlIChpIDwgZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGdyaWQgPyBncmlkLmdldENvbHVtbkJ5TmFtZShleHByZXNzaW9uc1tsZXZlbF0uZmllbGROYW1lKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBpc0RhdGUgPSBjb2x1bW4/LmRhdGFUeXBlID09PSBEQVRFX1RZUEUgfHwgY29sdW1uPy5kYXRhVHlwZSA9PT0gREFURV9USU1FX1RZUEU7XG4gICAgICAgICAgICBjb25zdCBpc1RpbWUgPSBjb2x1bW4/LmRhdGFUeXBlID09PSBUSU1FX1RZUEUgfHwgY29sdW1uPy5kYXRhVHlwZSA9PT0gREFURV9USU1FX1RZUEU7XG4gICAgICAgICAgICBjb25zdCBpc1N0cmluZyA9IGNvbHVtbj8uZGF0YVR5cGUgPT09IFNUUklOR19UWVBFO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwZWRSZWNvcmRzQnlFeHByZXNzaW9uKGRhdGEsIGksIGV4cHJlc3Npb25zW2xldmVsXSwgaXNEYXRlLCBpc1RpbWUsIGlzU3RyaW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uc1tsZXZlbF0sXG4gICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgcmVjb3JkczogY2xvbmVBcnJheShncm91cCksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0RmllbGRWYWx1ZShncm91cFswXSwgZXhwcmVzc2lvbnNbbGV2ZWxdLmZpZWxkTmFtZSwgaXNEYXRlLCBpc1RpbWUpLFxuICAgICAgICAgICAgICAgIGdyb3VwUGFyZW50OiBwYXJlbnQsXG4gICAgICAgICAgICAgICAgZ3JvdXBzOiBbXSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGdyaWQgPyBncmlkLnJlbmRlcmVkUm93SGVpZ2h0IDogbnVsbCxcbiAgICAgICAgICAgICAgICBjb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Lmdyb3Vwcy5wdXNoKGdyb3VwUm93KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBzUmVjb3Jkcy5wdXNoKGdyb3VwUm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhpZXJhcmNoeSA9IGdldEhpZXJhcmNoeShncm91cFJvdyk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRTdGF0ZTogSUdyb3VwQnlFeHBhbmRTdGF0ZSA9IGV4cGFuc2lvbi5maW5kKChzKSA9PlxuICAgICAgICAgICAgICAgIGlzSGllcmFyY2h5TWF0Y2goXG4gICAgICAgICAgICAgICAgICAgIHMuaGllcmFyY2h5IHx8IFt7IGZpZWxkTmFtZTogZ3JvdXBSb3cuZXhwcmVzc2lvbi5maWVsZE5hbWUsIHZhbHVlOiBncm91cFJvdy52YWx1ZSB9XSxcbiAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uc1xuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRTdGF0ZSA/IGV4cGFuZFN0YXRlLmV4cGFuZGVkIDogc3RhdGUuZGVmYXVsdEV4cGFuZGVkO1xuICAgICAgICAgICAgbGV0IHJlY3Vyc2l2ZVJlc3VsdDtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwUm93KTtcbiAgICAgICAgICAgIG1ldGFkYXRhLnB1c2gobnVsbCk7XG4gICAgICAgICAgICBmdWxsUmVzdWx0LmRhdGEucHVzaChncm91cFJvdyk7XG4gICAgICAgICAgICBmdWxsUmVzdWx0Lm1ldGFkYXRhLnB1c2gobnVsbCk7XG4gICAgICAgICAgICBpZiAobGV2ZWwgPCBleHByZXNzaW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlUmVzdWx0ID0gdGhpcy5ncm91cERhdGFSZWN1cnNpdmUoZ3JvdXAsIHN0YXRlLCBsZXZlbCArIDEsIGdyb3VwUm93LFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCA/IG1ldGFkYXRhIDogW10sIGdyaWQsIGdyb3Vwc1JlY29yZHMsIGZ1bGxSZXN1bHQpO1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHJlY3Vyc2l2ZVJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwSXRlbSBvZiBncm91cCkge1xuICAgICAgICAgICAgICAgICAgICBmdWxsUmVzdWx0Lm1ldGFkYXRhLnB1c2goZ3JvdXBSb3cpO1xuICAgICAgICAgICAgICAgICAgICBmdWxsUmVzdWx0LmRhdGEucHVzaChncm91cEl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEucHVzaCguLi5mdWxsUmVzdWx0Lm1ldGFkYXRhLnNsaWNlKGZ1bGxSZXN1bHQubWV0YWRhdGEubGVuZ3RoIC0gZ3JvdXAubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmZ1bGxSZXN1bHQuZGF0YS5zbGljZShmdWxsUmVzdWx0LmRhdGEubGVuZ3RoIC0gZ3JvdXAubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSBncm91cC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGZyb20gdGhlIGdpdmVuIG9iamVjdCwgY29uc2lkZXJpbmcgZGF0ZSBhbmQgdGltZSBkYXRhIHR5cGVzLlxuICAgKiBga2V5YDogVGhlIGtleSBvZiB0aGUgZmllbGQgdG8gcmV0cmlldmUuXG4gICAqIGBpc0RhdGVgOiAoT3B0aW9uYWwpIEluZGljYXRlcyBpZiB0aGUgZmllbGQgaXMgb2YgdHlwZSBEYXRlLlxuICAgKiBgaXNUaW1lYDogKE9wdGlvbmFsKSBJbmRpY2F0ZXMgaWYgdGhlIGZpZWxkIGlzIG9mIHR5cGUgVGltZS5cbiAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZCBpbiB0aGUgZGF0YSBvYmplY3QuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0RmllbGRWYWx1ZTxUPihvYmo6IFQsIGtleTogc3RyaW5nLCBpc0RhdGUgPSBmYWxzZSwgaXNUaW1lID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHJlc29sdmVkVmFsdWUgPSByZXNvbHZlTmVzdGVkUGF0aChvYmosIGtleSk7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUocmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgIGlmIChkYXRlICYmIGlzRGF0ZSAmJiBpc1RpbWUpIHtcbiAgICAgICAgICAgIHJlc29sdmVkVmFsdWUgPSBkYXRlO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGUgJiYgaXNEYXRlICYmICFpc1RpbWUpIHtcbiAgICAgICAgICAgIHJlc29sdmVkVmFsdWUgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIDAsIDAsIDAsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGUgJiYgaXNUaW1lICYmICFpc0RhdGUpIHtcbiAgICAgICAgICAgIHJlc29sdmVkVmFsdWUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAqIEdyb3VwcyB0aGUgcmVjb3JkcyBpbiB0aGUgcHJvdmlkZWQgZGF0YSBhcnJheSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZ3JvdXBpbmcgZXhwcmVzc2lvbi5cbiAgICogYGdyb3VwaW5nQ29tcGFyZXJgOiAoT3B0aW9uYWwpIEEgY3VzdG9tIGdyb3VwaW5nIGNvbXBhcmF0b3IgdG8gZGV0ZXJtaW5lIHRoZSBtZW1iZXJzIG9mIHRoZSBncm91cC5cbiAgICogUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSByZWNvcmRzIHRoYXQgYmVsb25nIHRvIHRoZSBncm91cC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAgIHByaXZhdGUgZ3JvdXBlZFJlY29yZHNCeUV4cHJlc3Npb248VD4oXG4gICAgICAgIGRhdGE6IFRbXSxcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICAgZXhwcmVzc2lvbjogSUdyb3VwaW5nRXhwcmVzc2lvbixcbiAgICAgICAgaXNEYXRlID0gZmFsc2UsXG4gICAgICAgIGlzVGltZSA9IGZhbHNlLFxuICAgICAgICBpc1N0cmluZzogYm9vbGVhbixcbiAgICAgICAgZ3JvdXBpbmdDb21wYXJlcj86IChhOiBhbnksIGI6IGFueSwgY3VyclJlYzogYW55LCBncm91cFJlYzogYW55KSA9PiBudW1iZXJcbiAgICApOiBUW10ge1xuICAgICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgICAgY29uc3Qga2V5ID0gZXhwcmVzc2lvbi5maWVsZE5hbWU7XG4gICAgICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgICAgICBjb25zdCBncm91cFJlY29yZCA9IGRhdGFbaW5kZXhdO1xuICAgICAgICBsZXQgZ3JvdXB2YWwgPSB0aGlzLmdldEZpZWxkVmFsdWUoZ3JvdXBSZWNvcmQsIGtleSwgaXNEYXRlLCBpc1RpbWUpO1xuICAgICAgICByZXMucHVzaChncm91cFJlY29yZCk7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVyID0gZXhwcmVzc2lvbi5ncm91cGluZ0NvbXBhcmVyIHx8IGdyb3VwaW5nQ29tcGFyZXIgfHwgRGVmYXVsdFNvcnRpbmdTdHJhdGVneS5pbnN0YW5jZSgpLmNvbXBhcmVWYWx1ZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUmVjID0gZGF0YVtpXTtcbiAgICAgICAgICAgIGxldCBmaWVsZFZhbHVlID0gdGhpcy5nZXRGaWVsZFZhbHVlKGN1cnJSZWMsIGtleSwgaXNEYXRlLCBpc1RpbWUpO1xuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaWdub3JlQ2FzZSAmJiBpc1N0cmluZykge1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gY29sdW1uJ3MgZGF0YVR5cGUgaXMgc3RyaW5nIGJ1dCB0aGUgdmFsdWUgaXMgbnVtYmVyXG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBncm91cHZhbCA9IGdyb3VwdmFsPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tcGFyZXIoZmllbGRWYWx1ZSwgZ3JvdXB2YWwsIGN1cnJSZWMsIGdyb3VwUmVjb3JkKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlcy5wdXNoKGN1cnJSZWMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgKiBTb3J0cyB0aGUgcHJvdmlkZWQgZGF0YSBhcnJheSBiYXNlZCBvbiB0aGUgZ2l2ZW4gc29ydGluZyBleHByZXNzaW9ucy5cbiAgICogVGhlIG1ldGhvZCBjYW4gYmUgdXNlZCB3aGVuIG11bHRpcGxlIHNvcnRpbmcgaXMgcGVyZm9ybWVkLCBnb2luZyB0aHJvdWdoIGVhY2ggb25lXG4gICAqIFJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCB0aGUgZGF0YSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzb3J0aW5nIGV4cHJlc3Npb25zLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICAgcHJpdmF0ZSBzb3J0RGF0YVJlY3Vyc2l2ZTxUPihcbiAgICAgICAgZGF0YTogVFtdLFxuICAgICAgICBleHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW10sXG4gICAgICAgIGV4cHJlc3Npb25JbmRleCA9IDAsXG4gICAgICAgIGdyaWQ6IEdyaWRUeXBlXG4gICAgKTogVFtdIHtcbiAgICAgICAgbGV0IGk6IG51bWJlcjtcbiAgICAgICAgbGV0IGo6IG51bWJlcjtcbiAgICAgICAgbGV0IGdiRGF0YTogVFtdO1xuICAgICAgICBsZXQgZ2JEYXRhTGVuOiBudW1iZXI7XG4gICAgICAgIGNvbnN0IGV4cHJzTGVuID0gZXhwcmVzc2lvbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBkYXRhTGVuID0gZGF0YS5sZW5ndGg7XG5cbiAgICAgICAgZXhwcmVzc2lvbkluZGV4ID0gZXhwcmVzc2lvbkluZGV4IHx8IDA7XG4gICAgICAgIGlmIChleHByZXNzaW9uSW5kZXggPj0gZXhwcnNMZW4gfHwgZGF0YUxlbiA8PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHByID0gZXhwcmVzc2lvbnNbZXhwcmVzc2lvbkluZGV4XTtcbiAgICAgICAgaWYgKCFleHByLnN0cmF0ZWd5KSB7XG4gICAgICAgICAgICBleHByLnN0cmF0ZWd5ID0gRGVmYXVsdFNvcnRpbmdTdHJhdGVneS5pbnN0YW5jZSgpIGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2x1bW4gPSBncmlkPy5nZXRDb2x1bW5CeU5hbWUoZXhwci5maWVsZE5hbWUpO1xuICAgICAgICBjb25zdCBpc0RhdGUgPSBjb2x1bW4/LmRhdGFUeXBlID09PSBEQVRFX1RZUEUgfHwgY29sdW1uPy5kYXRhVHlwZSA9PT0gREFURV9USU1FX1RZUEU7XG4gICAgICAgIGNvbnN0IGlzVGltZSA9IGNvbHVtbj8uZGF0YVR5cGUgPT09IFRJTUVfVFlQRSB8fCBjb2x1bW4/LmRhdGFUeXBlID09PSBEQVRFX1RJTUVfVFlQRTtcbiAgICAgICAgY29uc3QgaXNTdHJpbmcgPSBjb2x1bW4/LmRhdGFUeXBlID09PSBTVFJJTkdfVFlQRTtcbiAgICAgICAgZGF0YSA9IGV4cHIuc3RyYXRlZ3kuc29ydChkYXRhLCBleHByLmZpZWxkTmFtZSwgZXhwci5kaXIsIGV4cHIuaWdub3JlQ2FzZSwgdGhpcy5nZXRGaWVsZFZhbHVlLCBpc0RhdGUsIGlzVGltZSwgZ3JpZCk7XG4gICAgICAgIGlmIChleHByZXNzaW9uSW5kZXggPT09IGV4cHJzTGVuIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gY2FzZSBvZiBtdWx0aXBsZSBzb3J0aW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGdiRGF0YSA9IHRoaXMuZ3JvdXBlZFJlY29yZHNCeUV4cHJlc3Npb24oZGF0YSwgaSwgZXhwciwgaXNEYXRlLCBpc1RpbWUsIGlzU3RyaW5nLCBjb2x1bW4/Lmdyb3VwaW5nQ29tcGFyZXIpO1xuICAgICAgICAgICAgZ2JEYXRhTGVuID0gZ2JEYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChnYkRhdGFMZW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgZ2JEYXRhID0gdGhpcy5zb3J0RGF0YVJlY3Vyc2l2ZShnYkRhdGEsIGV4cHJlc3Npb25zLCBleHByZXNzaW9uSW5kZXggKyAxLCBncmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnYkRhdGFMZW47IGorKykge1xuICAgICAgICAgICAgICAgIGRhdGFbaSArIGpdID0gZ2JEYXRhW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSArPSBnYkRhdGFMZW4gLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY2xhc3MgaW1wbGVtZW50aW5nIHRoZSBJR3JpZEdyb3VwaW5nU3RyYXRlZ3kgaW50ZXJmYWNlIGFuZCBleHRlbmRpbmcgdGhlIElneFNvcnRpbmcgY2xhc3MuXG4gKiBJdCBwcm92aWRlcyBhIG1ldGhvZCB0byBncm91cCBkYXRhIGJhc2VkIG9uIHRoZSBnaXZlbiBncm91cGluZyBzdGF0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIElneEdyb3VwaW5nIGV4dGVuZHMgSWd4U29ydGluZyBpbXBsZW1lbnRzIElHcmlkR3JvdXBpbmdTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBHcm91cHMgdGhlIHByb3ZpZGVkIGRhdGEgYmFzZWQgb24gdGhlIGdpdmVuIGdyb3VwaW5nIHN0YXRlLlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGdyb3VwaW5nIG9wZXJhdGlvbi5cbiAgICovXG4gICAgcHVibGljIGdyb3VwQnkoZGF0YTogYW55W10sIHN0YXRlOiBJR3JvdXBpbmdTdGF0ZSwgZ3JpZD86IGFueSxcbiAgICAgICAgZ3JvdXBzUmVjb3Jkcz86IGFueVtdLCBmdWxsUmVzdWx0OiBJR3JvdXBCeVJlc3VsdCA9IHsgZGF0YTogW10sIG1ldGFkYXRhOiBbXSB9KTogSUdyb3VwQnlSZXN1bHQge1xuICAgICAgICBjb25zdCBtZXRhZGF0YTogSUdyb3VwQnlSZWNvcmRbXSA9IFtdO1xuICAgICAgICBjb25zdCBncm91cGluZyA9IHRoaXMuZ3JvdXBEYXRhUmVjdXJzaXZlKGRhdGEsIHN0YXRlLCAwLCBudWxsLCBtZXRhZGF0YSwgZ3JpZCwgZ3JvdXBzUmVjb3JkcywgZnVsbFJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBncm91cGluZyxcbiAgICAgICAgICAgIG1ldGFkYXRhXG4gICAgICAgIH07XG4gICAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjbGFzcyBpbXBsZW1lbnRpbmcgdGhlIElHcmlkU29ydGluZ1N0cmF0ZWd5IGludGVyZmFjZSB3aXRoIGEgbm8tb3BlcmF0aW9uIHNvcnRpbmcgc3RyYXRlZ3kuXG4gKiBJdCBwZXJmb3JtcyBubyBzb3J0aW5nIGFuZCByZXR1cm5zIHRoZSBkYXRhIGFzIGl0IGlzLlxuICovXG5leHBvcnQgY2xhc3MgTm9vcFNvcnRpbmdTdHJhdGVneSBpbXBsZW1lbnRzIElHcmlkU29ydGluZ1N0cmF0ZWd5IHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IE5vb3BTb3J0aW5nU3RyYXRlZ3kgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpbnN0YW5jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBOb29wU29ydGluZ1N0cmF0ZWd5KCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0KGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNsYXNzIGV4dGVuZGluZyB0aGUgSWd4U29ydGluZyBjbGFzc1xuICogUHJvdmlkcyBjdXN0b20gZGF0YSByZWNvcmQgc29ydGluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIElneERhdGFSZWNvcmRTb3J0aW5nIGV4dGVuZHMgSWd4U29ydGluZyB7XG4gICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBiYXNlIG1ldGhvZCB0byByZXRyaWV2ZSB0aGUgZmllbGQgdmFsdWUgZnJvbSB0aGUgZGF0YSBvYmplY3QgaW5zdGVhZCBvZiB0aGUgcmVjb3JkIG9iamVjdC5cbiAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZCBpbiB0aGUgZGF0YSBvYmplY3QuXG4gICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXRGaWVsZFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZywgaXNEYXRlID0gZmFsc2UsIGlzVGltZSA9IGZhbHNlKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldEZpZWxkVmFsdWUob2JqLmRhdGEsIGtleSwgaXNEYXRlLCBpc1RpbWUpO1xuICAgIH1cbn1cbiJdfQ==
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvY29tbW9uL3N0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFNNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxzQkFBc0IsRUFBc0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUdwRyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUM7QUFnQzdCOzs7R0FHRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBQ25COzs7Ozs7S0FNQztJQUNNLElBQUksQ0FBQyxJQUFXLEVBQUUsV0FBaUMsRUFBRSxJQUFlO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7OztLQUlDO0lBQ1Msa0JBQWtCLENBQ3hCLElBQVcsRUFDWCxLQUFxQixFQUNyQixLQUFhLEVBQ2IsTUFBc0IsRUFDdEIsUUFBMEIsRUFDMUIsT0FBaUIsSUFBSSxFQUNyQixnQkFBdUIsRUFBRSxFQUN6QixhQUE2QixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUV2RCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxD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QUVyRCxnQkFBd0IsQ0FBQztJQUVsQixNQUFNLENBQUMsUUFBUTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxJQUFJLENBQUMsSUFBVztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztBQUdMOzs7R0FHRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxVQUFVO0lBQ2pEOzs7TUFHRTtJQUNrQixhQUFhLENBQUMsR0FBUSxFQUFFLEdBQVcsRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLE1BQU0sR0FBRyxLQUFLO1FBQ2xGLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xvbmVBcnJheSwgcGFyc2VEYXRlLCByZXNvbHZlTmVzdGVkUGF0aCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSUdyb3VwQnlFeHBhbmRTdGF0ZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LWV4cGFuZC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwQnlSZWNvcmQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1yZWNvcmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ1N0YXRlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwQnlSZXN1bHQgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBpbmctcmVzdWx0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRIaWVyYXJjaHksIGlzSGllcmFyY2h5TWF0Y2ggfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBEZWZhdWx0U29ydGluZ1N0cmF0ZWd5LCBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vZ3JpZC5pbnRlcmZhY2UnO1xuXG5jb25zdCBEQVRFX1RZUEUgPSAnZGF0ZSc7XG5jb25zdCBUSU1FX1RZUEUgPSAndGltZSc7XG5jb25zdCBEQVRFX1RJTUVfVFlQRSA9ICdkYXRlVGltZSc7XG5jb25zdCBTVFJJTkdfVFlQRSA9ICdzdHJpbmcnO1xuXG4vKiogXG4gKiBSZXByZXNlbnRzIGEgc29ydGluZyBzdHJhdGVneSBmb3IgdGhlIGdyaWQgZGF0YVxuICogQ29udGFpbnMgYSBzaW5nbGUgbWV0aG9kIHNvcnQgdGhhdCBzb3J0cyB0aGUgcHJvdmlkZWQgZGF0YSBiYXNlZCBvbiB0aGUgZ2l2ZW4gc29ydGluZyBleHByZXNzaW9ucyBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJR3JpZFNvcnRpbmdTdHJhdGVneSB7XG4gICAvKipcbiAgICogYGRhdGFgOiBUaGUgYXJyYXkgb2YgZGF0YSB0byBiZSBzb3J0ZWQuIENvdWxkIGJlIG9mIGFueSB0eXBlLlxuICAgKiBgZXhwcmVzc2lvbnNgOiBBbiBhcnJheSBvZiBzb3J0aW5nIGV4cHJlc3Npb25zIHRoYXQgZGVmaW5lIHRoZSBzb3J0aW5nIHJ1bGVzLiBUaGUgZXhwcmVzc2lvbiBjb250YWlucyBpbmZvcm1hdGlvbiBsaWtlIGZpbGUgbmFtZSwgd2hldGhlciB0aGUgbGV0dGVyIGNhc2Ugc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCwgZXRjLlxuICAgKiBgZ3JpZGA6IChPcHRpb25hbCkgVGhlIGluc3RhbmNlIG9mIHRoZSBncmlkIHdoZXJlIHRoZSBzb3J0aW5nIGlzIGFwcGxpZWQuXG4gICAqIFJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCB0aGUgZGF0YSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzb3J0aW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgICBzb3J0KGRhdGE6IGFueVtdLCBleHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW10sIGdyaWQ/OiBHcmlkVHlwZSk6IGFueVtdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBncm91cGluZyBzdHJhdGVneSBmb3IgdGhlIGdyaWQgZGF0YSwgZXh0ZW5kaW5nIHRoZSBTb3J0aW5nIFN0cmF0ZWd5IGludGVyZmFjZSAoY29udGFpbnMgYSBzb3J0aW5nIG1ldGhvZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRHcm91cGluZ1N0cmF0ZWd5IGV4dGVuZHMgSUdyaWRTb3J0aW5nU3RyYXRlZ3kge1xuICAvKipcbiAgICogVGhlIG1ldGhvZCBncm91cHMgdGhlIHByb3ZpZGVkIGRhdGEgYmFzZWQgb24gdGhlIGdpdmVuIGdyb3VwaW5nIHN0YXRlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuXG4gICAqIGBkYXRhYDogVGhlIGFycmF5IG9mIGRhdGEgdG8gYmUgZ3JvdXBlZC4gQ291bGQgYmUgb2YgYW55IHR5cGUuXG4gICAqIGBzdGF0ZWA6IFRoZSBncm91cGluZyBzdGF0ZSB0aGF0IGRlZmluZXMgdGhlIGdyb3VwaW5nIHNldHRpbmdzIGFuZCBleHByZXNzaW9ucy5cbiAgICogYGdyaWRgOiAoT3B0aW9uYWwpIFRoZSBpbnN0YW5jZSBvZiB0aGUgZ3JpZCB3aGVyZSB0aGUgZ3JvdXBpbmcgaXMgYXBwbGllZC5cbiAgICogYGdyb3Vwc1JlY29yZHNgOiAoT3B0aW9uYWwpIEFuIGFycmF5IHRoYXQgaG9sZHMgdGhlIHJlY29yZHMgZm9yIGVhY2ggZ3JvdXAuXG4gICAqIGBmdWxsUmVzdWx0YDogKE9wdGlvbmFsKSBUaGUgY29tcGxldGUgcmVzdWx0IG9mIGdyb3VwaW5nIGluY2x1ZGluZyBncm91cHMgYW5kIHN1bW1hcnkgZGF0YS5cbiAgICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBncm91cGluZyBvcGVyYXRpb24uXG4gICAqL1xuICAgIGdyb3VwQnkoZGF0YTogYW55W10sIHN0YXRlOiBJR3JvdXBpbmdTdGF0ZSwgZ3JpZD86IGFueSwgZ3JvdXBzUmVjb3Jkcz86IGFueVtdLCBmdWxsUmVzdWx0PzogSUdyb3VwQnlSZXN1bHQpOiBJR3JvdXBCeVJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY2xhc3MgaW1wbGVtZW50aW5nIHRoZSBJR3JpZFNvcnRpbmdTdHJhdGVneSBpbnRlcmZhY2UuXG4gKiBJdCBwcm92aWRlcyBzb3J0aW5nIGZ1bmN0aW9uYWxpdHkgZm9yIGdyaWQgZGF0YSBiYXNlZCBvbiBzb3J0aW5nIGV4cHJlc3Npb25zLlxuICovXG5leHBvcnQgY2xhc3MgSWd4U29ydGluZyBpbXBsZW1lbnRzIElHcmlkU29ydGluZ1N0cmF0ZWd5IHtcbiAgICAvKipcbiAgICogU29ydHMgdGhlIHByb3ZpZGVkIGRhdGEgYmFzZWQgb24gdGhlIGdpdmVuIHNvcnRpbmcgZXhwcmVzc2lvbnMuXG4gICAqIGBkYXRhYDogVGhlIGFycmF5IG9mIGRhdGEgdG8gYmUgc29ydGVkLlxuICAgKiBgZXhwcmVzc2lvbnNgOiBBbiBhcnJheSBvZiBzb3J0aW5nIGV4cHJlc3Npb25zIHRoYXQgZGVmaW5lIHRoZSBzb3J0aW5nIHJ1bGVzLiBUaGUgZXhwcmVzc2lvbiBjb250YWlucyBpbmZvcm1hdGlvbiBsaWtlIGZpbGUgbmFtZSwgd2hldGhlciB0aGUgbGV0dGVyIGNhc2Ugc2hvdWxkIGJlIHRha2VuIGludG8gYWNjb3VudCwgZXRjLlxuICAgKiBgZ3JpZGA6IChPcHRpb25hbCkgVGhlIGluc3RhbmNlIG9mIHRoZSBncmlkIHdoZXJlIHRoZSBzb3J0aW5nIGlzIGFwcGxpZWQuXG4gICAqIFJldHVybnMgYSBuZXcgYXJyYXkgd2l0aCB0aGUgZGF0YSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzb3J0aW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgICBwdWJsaWMgc29ydChkYXRhOiBhbnlbXSwgZXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdLCBncmlkPzogR3JpZFR5cGUpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvcnREYXRhUmVjdXJzaXZlKGRhdGEsIGV4cHJlc3Npb25zLCAwLCBncmlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICogUmVjdXJzaXZlbHkgZ3JvdXBzIHRoZSBwcm92aWRlZCBkYXRhIGJhc2VkIG9uIHRoZSBnaXZlbiBncm91cGluZyBzdGF0ZSBhbmQgcmV0dXJucyB0aGUgZ3JvdXBlZCByZXN1bHQuXG4gICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgZ3JvdXBlZCByZXN1bHQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgICBwcm90ZWN0ZWQgZ3JvdXBEYXRhUmVjdXJzaXZlKFxuICAgICAgICBkYXRhOiBhbnlbXSxcbiAgICAgICAgc3RhdGU6IElHcm91cGluZ1N0YXRlLFxuICAgICAgICBsZXZlbDogbnVtYmVyLFxuICAgICAgICBwYXJlbnQ6IElHcm91cEJ5UmVjb3JkLFxuICAgICAgICBtZXRhZGF0YTogSUdyb3VwQnlSZWNvcmRbXSxcbiAgICAgICAgZ3JpZDogR3JpZFR5cGUgPSBudWxsLFxuICAgICAgICBncm91cHNSZWNvcmRzOiBhbnlbXSA9IFtdLFxuICAgICAgICBmdWxsUmVzdWx0OiBJR3JvdXBCeVJlc3VsdCA9IHsgZGF0YTogW10sIG1ldGFkYXRhOiBbXSB9XG4gICAgKTogYW55W10ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IHN0YXRlLmV4cHJlc3Npb25zO1xuICAgICAgICBjb25zdCBleHBhbnNpb24gPSBzdGF0ZS5leHBhbnNpb247XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICB3aGlsZSAoaSA8IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBncmlkID8gZ3JpZC5nZXRDb2x1bW5CeU5hbWUoZXhwcmVzc2lvbnNbbGV2ZWxdLmZpZWxkTmFtZSkgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgaXNEYXRlID0gY29sdW1uPy5kYXRhVHlwZSA9PT0gREFURV9UWVBFIHx8IGNvbHVtbj8uZGF0YVR5cGUgPT09IERBVEVfVElNRV9UWVBFO1xuICAgICAgICAgICAgY29uc3QgaXNUaW1lID0gY29sdW1uPy5kYXRhVHlwZSA9PT0gVElNRV9UWVBFIHx8IGNvbHVtbj8uZGF0YVR5cGUgPT09IERBVEVfVElNRV9UWVBFO1xuICAgICAgICAgICAgY29uc3QgaXNTdHJpbmcgPSBjb2x1bW4/LmRhdGFUeXBlID09PSBTVFJJTkdfVFlQRTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cGVkUmVjb3Jkc0J5RXhwcmVzc2lvbihkYXRhLCBpLCBleHByZXNzaW9uc1tsZXZlbF0sIGlzRGF0ZSwgaXNUaW1lLCBpc1N0cmluZyk7XG4gICAgICAgICAgICBjb25zdCBncm91cFJvdzogSUdyb3VwQnlSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvbnNbbGV2ZWxdLFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIHJlY29yZHM6IGNsb25lQXJyYXkoZ3JvdXApLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldEZpZWxkVmFsdWUoZ3JvdXBbMF0sIGV4cHJlc3Npb25zW2xldmVsXS5maWVsZE5hbWUsIGlzRGF0ZSwgaXNUaW1lKSxcbiAgICAgICAgICAgICAgICBncm91cFBhcmVudDogcGFyZW50LFxuICAgICAgICAgICAgICAgIGdyb3VwczogW10sXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBncmlkID8gZ3JpZC5yZW5kZXJlZFJvd0hlaWdodCA6IG51bGwsXG4gICAgICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIHBhcmVudC5ncm91cHMucHVzaChncm91cFJvdyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3Vwc1JlY29yZHMucHVzaChncm91cFJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoaWVyYXJjaHkgPSBnZXRIaWVyYXJjaHkoZ3JvdXBSb3cpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kU3RhdGU6IElHcm91cEJ5RXhwYW5kU3RhdGUgPSBleHBhbnNpb24uZmluZCgocykgPT5cbiAgICAgICAgICAgICAgICBpc0hpZXJhcmNoeU1hdGNoKFxuICAgICAgICAgICAgICAgICAgICBzLmhpZXJhcmNoeSB8fCBbeyBmaWVsZE5hbWU6IGdyb3VwUm93LmV4cHJlc3Npb24uZmllbGROYW1lLCB2YWx1ZTogZ3JvdXBSb3cudmFsdWUgfV0sXG4gICAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kU3RhdGUgPyBleHBhbmRTdGF0ZS5leHBhbmRlZCA6IHN0YXRlLmRlZmF1bHRFeHBhbmRlZDtcbiAgICAgICAgICAgIGxldCByZWN1cnNpdmVSZXN1bHQ7XG4gICAgICAgICAgICByZXN1bHQucHVzaChncm91cFJvdyk7XG4gICAgICAgICAgICBtZXRhZGF0YS5wdXNoKG51bGwpO1xuICAgICAgICAgICAgZnVsbFJlc3VsdC5kYXRhLnB1c2goZ3JvdXBSb3cpO1xuICAgICAgICAgICAgZnVsbFJlc3VsdC5tZXRhZGF0YS5wdXNoKG51bGwpO1xuICAgICAgICAgICAgaWYgKGxldmVsIDwgZXhwcmVzc2lvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZVJlc3VsdCA9IHRoaXMuZ3JvdXBEYXRhUmVjdXJzaXZlKGdyb3VwLCBzdGF0ZSwgbGV2ZWwgKyAxLCBncm91cFJvdyxcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgPyBtZXRhZGF0YSA6IFtdLCBncmlkLCBncm91cHNSZWNvcmRzLCBmdWxsUmVzdWx0KTtcbiAgICAgICAgICAgICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChyZWN1cnNpdmVSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBncm91cEl0ZW0gb2YgZ3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgZnVsbFJlc3VsdC5tZXRhZGF0YS5wdXNoKGdyb3VwUm93KTtcbiAgICAgICAgICAgICAgICAgICAgZnVsbFJlc3VsdC5kYXRhLnB1c2goZ3JvdXBJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnB1c2goLi4uZnVsbFJlc3VsdC5tZXRhZGF0YS5zbGljZShmdWxsUmVzdWx0Lm1ldGFkYXRhLmxlbmd0aCAtIGdyb3VwLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5mdWxsUmVzdWx0LmRhdGEuc2xpY2UoZnVsbFJlc3VsdC5kYXRhLmxlbmd0aCAtIGdyb3VwLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gZ3JvdXAubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZCBmcm9tIHRoZSBnaXZlbiBvYmplY3QsIGNvbnNpZGVyaW5nIGRhdGUgYW5kIHRpbWUgZGF0YSB0eXBlcy5cbiAgICogYGtleWA6IFRoZSBrZXkgb2YgdGhlIGZpZWxkIHRvIHJldHJpZXZlLlxuICAgKiBgaXNEYXRlYDogKE9wdGlvbmFsKSBJbmRpY2F0ZXMgaWYgdGhlIGZpZWxkIGlzIG9mIHR5cGUgRGF0ZS5cbiAgICogYGlzVGltZWA6IChPcHRpb25hbCkgSW5kaWNhdGVzIGlmIHRoZSBmaWVsZCBpcyBvZiB0eXBlIFRpbWUuXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW4gdGhlIGRhdGEgb2JqZWN0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICAgcHJvdGVjdGVkIGdldEZpZWxkVmFsdWU8VD4ob2JqOiBULCBrZXk6IHN0cmluZywgaXNEYXRlID0gZmFsc2UsIGlzVGltZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXNvbHZlZFZhbHVlID0gcmVzb2x2ZU5lc3RlZFBhdGgob2JqLCBrZXkpO1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHJlc29sdmVkVmFsdWUpO1xuICAgICAgICBpZiAoZGF0ZSAmJiBpc0RhdGUgJiYgaXNUaW1lKSB7XG4gICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gZGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlICYmIGlzRGF0ZSAmJiAhaXNUaW1lKSB7XG4gICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCAwLCAwLCAwLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlICYmIGlzVGltZSAmJiAhaXNEYXRlKSB7XG4gICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gbmV3IERhdGUobmV3IERhdGUoKS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgKiBHcm91cHMgdGhlIHJlY29yZHMgaW4gdGhlIHByb3ZpZGVkIGRhdGEgYXJyYXkgYmFzZWQgb24gdGhlIGdpdmVuIGdyb3VwaW5nIGV4cHJlc3Npb24uXG4gICAqIGBncm91cGluZ0NvbXBhcmVyYDogKE9wdGlvbmFsKSBBIGN1c3RvbSBncm91cGluZyBjb21wYXJhdG9yIHRvIGRldGVybWluZSB0aGUgbWVtYmVycyBvZiB0aGUgZ3JvdXAuXG4gICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcmVjb3JkcyB0aGF0IGJlbG9uZyB0byB0aGUgZ3JvdXAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgICBwcml2YXRlIGdyb3VwZWRSZWNvcmRzQnlFeHByZXNzaW9uPFQ+KFxuICAgICAgICBkYXRhOiBUW10sXG4gICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICAgIGV4cHJlc3Npb246IElHcm91cGluZ0V4cHJlc3Npb24sXG4gICAgICAgIGlzRGF0ZSA9IGZhbHNlLFxuICAgICAgICBpc1RpbWUgPSBmYWxzZSxcbiAgICAgICAgaXNTdHJpbmc6IGJvb2xlYW4sXG4gICAgICAgIGdyb3VwaW5nQ29tcGFyZXI/OiAoYTogYW55LCBiOiBhbnksIGN1cnJSZWM6IGFueSwgZ3JvdXBSZWM6IGFueSkgPT4gbnVtYmVyXG4gICAgKTogVFtdIHtcbiAgICAgICAgY29uc3QgcmVzID0gW107XG4gICAgICAgIGNvbnN0IGtleSA9IGV4cHJlc3Npb24uZmllbGROYW1lO1xuICAgICAgICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZ3JvdXBSZWNvcmQgPSBkYXRhW2luZGV4XTtcbiAgICAgICAgbGV0IGdyb3VwdmFsID0gdGhpcy5nZXRGaWVsZFZhbHVlKGdyb3VwUmVjb3JkLCBrZXksIGlzRGF0ZSwgaXNUaW1lKTtcbiAgICAgICAgcmVzLnB1c2goZ3JvdXBSZWNvcmQpO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBjb25zdCBjb21wYXJlciA9IGV4cHJlc3Npb24uZ3JvdXBpbmdDb21wYXJlciB8fCBncm91cGluZ0NvbXBhcmVyIHx8IERlZmF1bHRTb3J0aW5nU3RyYXRlZ3kuaW5zdGFuY2UoKS5jb21wYXJlVmFsdWVzO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY3VyclJlYyA9IGRhdGFbaV07XG4gICAgICAgICAgICBsZXQgZmllbGRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRWYWx1ZShjdXJyUmVjLCBrZXksIGlzRGF0ZSwgaXNUaW1lKTtcbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmlnbm9yZUNhc2UgJiYgaXNTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIGNvbHVtbidzIGRhdGFUeXBlIGlzIHN0cmluZyBidXQgdGhlIHZhbHVlIGlzIG51bWJlclxuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgZ3JvdXB2YWwgPSBncm91cHZhbD8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbXBhcmVyKGZpZWxkVmFsdWUsIGdyb3VwdmFsLCBjdXJyUmVjLCBncm91cFJlY29yZCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChjdXJyUmVjKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICogU29ydHMgdGhlIHByb3ZpZGVkIGRhdGEgYXJyYXkgYmFzZWQgb24gdGhlIGdpdmVuIHNvcnRpbmcgZXhwcmVzc2lvbnMuXG4gICAqIFRoZSBtZXRob2QgY2FuIGJlIHVzZWQgd2hlbiBtdWx0aXBsZSBzb3J0aW5nIGlzIHBlcmZvcm1lZCwgZ29pbmcgdGhyb3VnaCBlYWNoIG9uZVxuICAgKiBSZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggdGhlIGRhdGEgc29ydGVkIGFjY29yZGluZyB0byB0aGUgc29ydGluZyBleHByZXNzaW9ucy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAgIHByaXZhdGUgc29ydERhdGFSZWN1cnNpdmU8VD4oXG4gICAgICAgIGRhdGE6IFRbXSxcbiAgICAgICAgZXhwcmVzc2lvbnM6IElTb3J0aW5nRXhwcmVzc2lvbltdLFxuICAgICAgICBleHByZXNzaW9uSW5kZXggPSAwLFxuICAgICAgICBncmlkOiBHcmlkVHlwZVxuICAgICk6IFRbXSB7XG4gICAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICAgIGxldCBqOiBudW1iZXI7XG4gICAgICAgIGxldCBnYkRhdGE6IFRbXTtcbiAgICAgICAgbGV0IGdiRGF0YUxlbjogbnVtYmVyO1xuICAgICAgICBjb25zdCBleHByc0xlbiA9IGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGF0YUxlbiA9IGRhdGEubGVuZ3RoO1xuXG4gICAgICAgIGV4cHJlc3Npb25JbmRleCA9IGV4cHJlc3Npb25JbmRleCB8fCAwO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbkluZGV4ID49IGV4cHJzTGVuIHx8IGRhdGFMZW4gPD0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwciA9IGV4cHJlc3Npb25zW2V4cHJlc3Npb25JbmRleF07XG4gICAgICAgIGlmICghZXhwci5zdHJhdGVneSkge1xuICAgICAgICAgICAgZXhwci5zdHJhdGVneSA9IERlZmF1bHRTb3J0aW5nU3RyYXRlZ3kuaW5zdGFuY2UoKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sdW1uID0gZ3JpZD8uZ2V0Q29sdW1uQnlOYW1lKGV4cHIuZmllbGROYW1lKTtcbiAgICAgICAgY29uc3QgaXNEYXRlID0gY29sdW1uPy5kYXRhVHlwZSA9PT0gREFURV9UWVBFIHx8IGNvbHVtbj8uZGF0YVR5cGUgPT09IERBVEVfVElNRV9UWVBFO1xuICAgICAgICBjb25zdCBpc1RpbWUgPSBjb2x1bW4/LmRhdGFUeXBlID09PSBUSU1FX1RZUEUgfHwgY29sdW1uPy5kYXRhVHlwZSA9PT0gREFURV9USU1FX1RZUEU7XG4gICAgICAgIGNvbnN0IGlzU3RyaW5nID0gY29sdW1uPy5kYXRhVHlwZSA9PT0gU1RSSU5HX1RZUEU7XG4gICAgICAgIGRhdGEgPSBleHByLnN0cmF0ZWd5LnNvcnQoZGF0YSwgZXhwci5maWVsZE5hbWUsIGV4cHIuZGlyLCBleHByLmlnbm9yZUNhc2UsIHRoaXMuZ2V0RmllbGRWYWx1ZSwgaXNEYXRlLCBpc1RpbWUsIGdyaWQpO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbkluZGV4ID09PSBleHByc0xlbiAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIC8vIGluIGNhc2Ugb2YgbXVsdGlwbGUgc29ydGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbjsgaSsrKSB7XG4gICAgICAgICAgICBnYkRhdGEgPSB0aGlzLmdyb3VwZWRSZWNvcmRzQnlFeHByZXNzaW9uKGRhdGEsIGksIGV4cHIsIGlzRGF0ZSwgaXNUaW1lLCBpc1N0cmluZywgY29sdW1uPy5ncm91cGluZ0NvbXBhcmVyKTtcbiAgICAgICAgICAgIGdiRGF0YUxlbiA9IGdiRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoZ2JEYXRhTGVuID4gMSkge1xuICAgICAgICAgICAgICAgIGdiRGF0YSA9IHRoaXMuc29ydERhdGFSZWN1cnNpdmUoZ2JEYXRhLCBleHByZXNzaW9ucywgZXhwcmVzc2lvbkluZGV4ICsgMSwgZ3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2JEYXRhTGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBkYXRhW2kgKyBqXSA9IGdiRGF0YVtqXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkgKz0gZ2JEYXRhTGVuIC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNsYXNzIGltcGxlbWVudGluZyB0aGUgSUdyaWRHcm91cGluZ1N0cmF0ZWd5IGludGVyZmFjZSBhbmQgZXh0ZW5kaW5nIHRoZSBJZ3hTb3J0aW5nIGNsYXNzLlxuICogSXQgcHJvdmlkZXMgYSBtZXRob2QgdG8gZ3JvdXAgZGF0YSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZ3JvdXBpbmcgc3RhdGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBJZ3hHcm91cGluZyBleHRlbmRzIElneFNvcnRpbmcgaW1wbGVtZW50cyBJR3JpZEdyb3VwaW5nU3RyYXRlZ3kge1xuICAvKipcbiAgICogR3JvdXBzIHRoZSBwcm92aWRlZCBkYXRhIGJhc2VkIG9uIHRoZSBnaXZlbiBncm91cGluZyBzdGF0ZS5cbiAgICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBncm91cGluZyBvcGVyYXRpb24uXG4gICAqL1xuICAgIHB1YmxpYyBncm91cEJ5KGRhdGE6IGFueVtdLCBzdGF0ZTogSUdyb3VwaW5nU3RhdGUsIGdyaWQ/OiBhbnksXG4gICAgICAgIGdyb3Vwc1JlY29yZHM/OiBhbnlbXSwgZnVsbFJlc3VsdDogSUdyb3VwQnlSZXN1bHQgPSB7IGRhdGE6IFtdLCBtZXRhZGF0YTogW10gfSk6IElHcm91cEJ5UmVzdWx0IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IElHcm91cEJ5UmVjb3JkW10gPSBbXTtcbiAgICAgICAgY29uc3QgZ3JvdXBpbmcgPSB0aGlzLmdyb3VwRGF0YVJlY3Vyc2l2ZShkYXRhLCBzdGF0ZSwgMCwgbnVsbCwgbWV0YWRhdGEsIGdyaWQsIGdyb3Vwc1JlY29yZHMsIGZ1bGxSZXN1bHQpO1xuICAgICAgICBncmlkPy5ncm91cGluZ1BlcmZvcm1lZFN1YmplY3QubmV4dCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogZ3JvdXBpbmcsXG4gICAgICAgICAgICBtZXRhZGF0YVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY2xhc3MgaW1wbGVtZW50aW5nIHRoZSBJR3JpZFNvcnRpbmdTdHJhdGVneSBpbnRlcmZhY2Ugd2l0aCBhIG5vLW9wZXJhdGlvbiBzb3J0aW5nIHN0cmF0ZWd5LlxuICogSXQgcGVyZm9ybXMgbm8gc29ydGluZyBhbmQgcmV0dXJucyB0aGUgZGF0YSBhcyBpdCBpcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vb3BTb3J0aW5nU3RyYXRlZ3kgaW1wbGVtZW50cyBJR3JpZFNvcnRpbmdTdHJhdGVneSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBOb29wU29ydGluZ1N0cmF0ZWd5ID0gbnVsbDtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgTm9vcFNvcnRpbmdTdHJhdGVneSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydChkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjbGFzcyBleHRlbmRpbmcgdGhlIElneFNvcnRpbmcgY2xhc3NcbiAqIFByb3ZpZHMgY3VzdG9tIGRhdGEgcmVjb3JkIHNvcnRpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBJZ3hEYXRhUmVjb3JkU29ydGluZyBleHRlbmRzIElneFNvcnRpbmcge1xuICAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGUgYmFzZSBtZXRob2QgdG8gcmV0cmlldmUgdGhlIGZpZWxkIHZhbHVlIGZyb20gdGhlIGRhdGEgb2JqZWN0IGluc3RlYWQgb2YgdGhlIHJlY29yZCBvYmplY3QuXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW4gdGhlIGRhdGEgb2JqZWN0LlxuICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0RmllbGRWYWx1ZShvYmo6IGFueSwga2V5OiBzdHJpbmcsIGlzRGF0ZSA9IGZhbHNlLCBpc1RpbWUgPSBmYWxzZSk6IGFueSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRGaWVsZFZhbHVlKG9iai5kYXRhLCBrZXksIGlzRGF0ZSwgaXNUaW1lKTtcbiAgICB9XG59XG4iXX0=
@@ -53,6 +53,9 @@ export class IgxExcelStyleConditionalFilterComponent {
53
53
  if (eventArgs.key === this.platform.KEYMAP.ENTER) {
54
54
  this.onTextFilterClick(eventArgs);
55
55
  }
56
+ else if (eventArgs.key === this.platform.KEYMAP.TAB) {
57
+ this.subMenu.close();
58
+ }
56
59
  }
57
60
  /**
58
61
  * @hidden @internal
@@ -150,11 +153,11 @@ export class IgxExcelStyleConditionalFilterComponent {
150
153
  return this.esf.column.filters.conditionList();
151
154
  }
152
155
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, deps: [{ token: i1.BaseFilteringComponent }, { token: i2.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
153
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxExcelStyleConditionalFilterComponent, isStandalone: true, selector: "igx-excel-style-conditional-filter", viewQueries: [{ propertyName: "customDialog", first: true, predicate: ["customDialog"], descendants: true, read: IgxExcelStyleCustomDialogComponent }, { propertyName: "subMenu", first: true, predicate: ["subMenu"], descendants: true, read: IgxDropDownComponent }], ngImport: i0, template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\">\n <span>{{ subMenuText }}</span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\"\n [allowItemsFocus]=\"true\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "component", type: IgxExcelStyleCustomDialogComponent, selector: "igx-excel-style-custom-dialog", inputs: ["expressionsList", "column", "selectedOperator", "filteringService", "overlayComponentId", "displayDensity"] }] }); }
156
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.8", type: IgxExcelStyleConditionalFilterComponent, isStandalone: true, selector: "igx-excel-style-conditional-filter", viewQueries: [{ propertyName: "customDialog", first: true, predicate: ["customDialog"], descendants: true, read: IgxExcelStyleCustomDialogComponent }, { propertyName: "subMenu", first: true, predicate: ["subMenu"], descendants: true, read: IgxDropDownComponent }], ngImport: i0, template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span>{{ subMenuText }}</span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus", "labelledBy"], outputs: ["opening", "opened", "closing", "closed"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxDropDownItemComponent, selector: "igx-drop-down-item" }, { kind: "component", type: IgxExcelStyleCustomDialogComponent, selector: "igx-excel-style-custom-dialog", inputs: ["expressionsList", "column", "selectedOperator", "filteringService", "overlayComponentId", "displayDensity"] }] }); }
154
157
  }
155
158
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImport: i0, type: IgxExcelStyleConditionalFilterComponent, decorators: [{
156
159
  type: Component,
157
- args: [{ selector: 'igx-excel-style-conditional-filter', standalone: true, imports: [NgIf, IgxDropDownItemNavigationDirective, IgxIconComponent, IgxDropDownComponent, NgFor, IgxDropDownItemComponent, IgxExcelStyleCustomDialogComponent], template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\">\n <span>{{ subMenuText }}</span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\"\n [allowItemsFocus]=\"true\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n" }]
160
+ args: [{ selector: 'igx-excel-style-conditional-filter', standalone: true, imports: [NgIf, IgxDropDownItemNavigationDirective, IgxIconComponent, IgxDropDownComponent, NgFor, IgxDropDownItemComponent, IgxExcelStyleCustomDialogComponent], template: "<ng-container *ngIf=\"esf.column\">\n <div tabindex=\"0\"\n class=\"igx-excel-filter__actions-filter\"\n (keydown)=\"onTextFilterKeyDown($event)\"\n (click)=\"onTextFilterClick($event)\"\n [igxDropDownItemNavigation]=\"subMenu\"\n role=\"menuitem\"\n aria-haspopup=\"true\"\n [attr.aria-controls]=\"this.subMenu.listId\"\n [attr.aria-activedescendant]=\"!this.subMenu.collapsed ? this.subMenu.focusedItem?.id : null\">\n <span>{{ subMenuText }}</span>\n <igx-icon>keyboard_arrow_right</igx-icon>\n </div>\n\n <igx-drop-down\n #subMenu\n [maxHeight]=\"'397px'\"\n [displayDensity]=\"esf.displayDensity\"\n (selectionChanging)=\"onSubMenuSelection($event)\"\n (closed)=\"onSubMenuClosed()\">\n <div>\n <igx-drop-down-item\n *ngFor=\"let condition of conditions\"\n [value]=\"condition\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon family=\"imx-icons\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n </div>\n </igx-drop-down-item>\n <igx-drop-down-item *ngIf=\"showCustomFilterItem()\">\n <div class=\"igx-grid__filtering-dropdown-items\">\n <igx-icon>filter_list</igx-icon>\n <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n </div>\n </igx-drop-down-item>\n </div>\n </igx-drop-down>\n\n <igx-excel-style-custom-dialog\n #customDialog\n [column]=\"esf.column\"\n [filteringService]=\"esf.grid.filteringService\"\n [overlayComponentId]=\"esf.overlayComponentId\"\n [displayDensity]=\"esf.displayDensity\">\n </igx-excel-style-custom-dialog>\n</ng-container>\n" }]
158
161
  }], ctorParameters: function () { return [{ type: i1.BaseFilteringComponent }, { type: i2.PlatformUtil }]; }, propDecorators: { customDialog: [{
159
162
  type: ViewChild,
160
163
  args: ['customDialog', { read: IgxExcelStyleCustomDialogComponent }]
@@ -162,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
162
165
  type: ViewChild,
163
166
  args: ['subMenu', { read: IgxDropDownComponent }]
164
167
  }] } });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR3hFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRzNGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxtQkFBbUIsRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUs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QixFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxrQ0FBa0MsQ0FBQzt3SUFPekosWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0NBQWtDLEVBQUU7Z0JBT2hFLE9BQU87c0JBRGIsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElGaWx0ZXJpbmdPcGVyYXRpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZUN1c3RvbURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZXhjZWwtc3R5bGUtY3VzdG9tLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWZpbHRlcmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vdmVybGF5L3Bvc2l0aW9uL2F1dG8tcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL292ZXJsYXkvc2Nyb2xsL2Fic29sdXRlLXNjcm9sbC1zdHJhdGVneSc7XG5pbXBvcnQgeyBIb3Jpem9udGFsQWxpZ25tZW50LCBPdmVybGF5U2V0dGluZ3MsIFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tICcuLi8uLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbW1vbic7XG5cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB1c2VkIGZvciBwcmVzZW50aW5nIEV4Y2VsIHN0eWxlIGNvbmRpdGlvbmFsIGZpbHRlciBVSS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBJZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uRGlyZWN0aXZlLCBJZ3hJY29uQ29tcG9uZW50LCBJZ3hEcm9wRG93bkNvbXBvbmVudCwgTmdGb3IsIElneERyb3BEb3duSXRlbUNvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUN1c3RvbURpYWxvZ0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZUNvbmRpdGlvbmFsRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbURpYWxvZycsIHsgcmVhZDogSWd4RXhjZWxTdHlsZUN1c3RvbURpYWxvZ0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjdXN0b21EaWFsb2c6IElneEV4Y2VsU3R5bGVDdXN0b21EaWFsb2dDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3N1Yk1lbnUnLCB7IHJlYWQ6IElneERyb3BEb3duQ29tcG9uZW50IH0pXG4gICAgcHVibGljIHN1Yk1lbnU6IElneERyb3BEb3duQ29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSBzaG91bGRPcGVuU3ViTWVudSA9IHRydWU7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBwcml2YXRlIF9zdWJNZW51UG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Ub3BcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfc3ViTWVudU92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSh0aGlzLl9zdWJNZW51UG9zaXRpb25TZXR0aW5ncyksXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlc2Y6IEJhc2VGaWx0ZXJpbmdDb21wb25lbnQsIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHRoaXMuZXNmLmNvbHVtbkNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVzZi5ncmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRPcGVuU3ViTWVudSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViTWVudU92ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLmVzZi5ncmlkLm91dGxldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXNmLmdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3Mub3V0bGV0ID0gdGhpcy5lc2YuZ3JpZC5vdXRsZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uVGV4dEZpbHRlcktleURvd24oZXZlbnRBcmdzOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudEFyZ3Mua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FTlRFUikge1xuICAgICAgICAgICAgdGhpcy5vblRleHRGaWx0ZXJDbGljayhldmVudEFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25UZXh0RmlsdGVyQ2xpY2soZXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZE9wZW5TdWJNZW51KSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJNZW51T3ZlcmxheVNldHRpbmdzLnRhcmdldCA9IGV2ZW50QXJncy5jdXJyZW50VGFyZ2V0O1xuXG4gICAgICAgICAgICBjb25zdCBncmlkUmVjdCA9IHRoaXMuZXNmLmdyaWQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duUmVjdCA9IHRoaXMuZXNmLm1haW5Ecm9wZG93bi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBsZXQgeCA9IGRyb3Bkb3duUmVjdC5sZWZ0ICsgZHJvcGRvd25SZWN0LndpZHRoO1xuICAgICAgICAgICAgbGV0IHgxID0gZ3JpZFJlY3QubGVmdCArIGdyaWRSZWN0LndpZHRoO1xuICAgICAgICAgICAgeCArPSB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgICAgICB4MSArPSB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoeCAtIHgxKSA8IDIwMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5ob3Jpem9udGFsRGlyZWN0aW9uID0gSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5ob3Jpem9udGFsU3RhcnRQb2ludCA9IEhvcml6b250YWxBbGlnbm1lbnQuTGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViTWVudU92ZXJsYXlTZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsQWxpZ25tZW50LlJpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MucG9zaXRpb25TdHJhdGVneS5zZXR0aW5ncy5ob3Jpem9udGFsU3RhcnRQb2ludCA9IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3ViTWVudS5vcGVuKHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICAgICAgdGhpcy5zaG91bGRPcGVuU3ViTWVudSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29uZGl0aW9uKHZhbHVlOiBzdHJpbmcpOiBJRmlsdGVyaW5nT3BlcmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNmLmNvbHVtbi5maWx0ZXJzLmNvbmRpdGlvbih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhbnNsYXRlQ29uZGl0aW9uKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3NbYGlneF9ncmlkX2ZpbHRlcl8ke3RoaXMuZ2V0Q29uZGl0aW9uKHZhbHVlKS5uYW1lfWBdIHx8IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU3ViTWVudVNlbGVjdGlvbihldmVudEFyZ3M6IElTZWxlY3Rpb25FdmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuZXNmLmV4cHJlc3Npb25zTGlzdCAmJiB0aGlzLmVzZi5leHByZXNzaW9uc0xpc3QubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLmVzZi5leHByZXNzaW9uc0xpc3RbMF0uZXhwcmVzc2lvbi5jb25kaXRpb24ubmFtZSAhPT0gJ2luJykge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cuZXhwcmVzc2lvbnNMaXN0ID0gdGhpcy5lc2YuZXhwcmVzc2lvbnNMaXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cuc2VsZWN0ZWRPcGVyYXRvciA9IGV2ZW50QXJncy5uZXdTZWxlY3Rpb24udmFsdWU7XG4gICAgICAgIGV2ZW50QXJncy5jYW5jZWwgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5lc2Yub3ZlcmxheUNvbXBvbmVudElkKSB7XG4gICAgICAgICAgICB0aGlzLmVzZi5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJNZW51LmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY3VzdG9tRGlhbG9nLm9wZW4odGhpcy5lc2YubWFpbkRyb3Bkb3duLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uU3ViTWVudUNsb3NlZCgpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvdWxkT3BlblN1Yk1lbnUgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93Q3VzdG9tRmlsdGVySXRlbSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXhwclRyZWUgPSB0aGlzLmVzZi5jb2x1bW4uZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICByZXR1cm4gZXhwclRyZWUgJiYgZXhwclRyZWUuZmlsdGVyaW5nT3BlcmFuZHMgJiYgZXhwclRyZWUuZmlsdGVyaW5nT3BlcmFuZHMubGVuZ3RoICYmXG4gICAgICAgICAgICAhKChleHByVHJlZS5maWx0ZXJpbmdPcGVyYW5kc1swXSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbikuY29uZGl0aW9uICYmXG4gICAgICAgICAgICAgICAgKGV4cHJUcmVlLmZpbHRlcmluZ09wZXJhbmRzWzBdIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uKS5jb25kaXRpb24ubmFtZSA9PT0gJ2luJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHN1Yk1lbnVUZXh0KCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZXNmLmNvbHVtbi5kYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfYm9vbGVhbl9maWx0ZXI7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5OdW1iZXI6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5QZXJjZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9udW1iZXJfZmlsdGVyO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfZGF0ZV9maWx0ZXI7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5DdXJyZW5jeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfY3VycmVuY3lfZmlsdGVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfdGV4dF9maWx0ZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29uZGl0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXNmLmNvbHVtbi5maWx0ZXJzLmNvbmRpdGlvbkxpc3QoKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZXNmLmNvbHVtblwiPlxuICAgIDxkaXYgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZXhjZWwtZmlsdGVyX19hY3Rpb25zLWZpbHRlclwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uVGV4dEZpbHRlcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJvblRleHRGaWx0ZXJDbGljaygkZXZlbnQpXCJcbiAgICAgICAgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwic3ViTWVudVwiXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCI+XG4gICAgICAgIDxzcGFuPnt7IHN1Yk1lbnVUZXh0IH19PC9zcGFuPlxuICAgICAgICA8aWd4LWljb24+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L2lneC1pY29uPlxuICAgIDwvZGl2PlxuXG4gICAgPGlneC1kcm9wLWRvd25cbiAgICAgICAgI3N1Yk1lbnVcbiAgICAgICAgW21heEhlaWdodF09XCInMzk3cHgnXCJcbiAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImVzZi5kaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2luZyk9XCJvblN1Yk1lbnVTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChjbG9zZWQpPVwib25TdWJNZW51Q2xvc2VkKClcIlxuICAgICAgICBbYWxsb3dJdGVtc0ZvY3VzXT1cInRydWVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxpZ3gtZHJvcC1kb3duLWl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb25kaXRpb24gb2YgY29uZGl0aW9uc1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwiY29uZGl0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19maWx0ZXJpbmctZHJvcGRvd24taXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uIGZhbWlseT1cImlteC1pY29uc1wiIFtuYW1lXT1cImdldENvbmRpdGlvbihjb25kaXRpb24pLmljb25OYW1lXCI+PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLXRleHRcIj57eyB0cmFuc2xhdGVDb25kaXRpb24oY29uZGl0aW9uKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAgICAgICAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdJZj1cInNob3dDdXN0b21GaWx0ZXJJdGVtKClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2ZpbHRlcmluZy1kcm9wZG93bi1pdGVtc1wiPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+ZmlsdGVyX2xpc3Q8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX19maWx0ZXJpbmctZHJvcGRvd24tdGV4dFwiPnt7IGVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9jdXN0b21fZmlsdGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvaWd4LWRyb3AtZG93bj5cblxuICAgIDxpZ3gtZXhjZWwtc3R5bGUtY3VzdG9tLWRpYWxvZ1xuICAgICAgICAjY3VzdG9tRGlhbG9nXG4gICAgICAgIFtjb2x1bW5dPVwiZXNmLmNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJpbmdTZXJ2aWNlXT1cImVzZi5ncmlkLmZpbHRlcmluZ1NlcnZpY2VcIlxuICAgICAgICBbb3ZlcmxheUNvbXBvbmVudElkXT1cImVzZi5vdmVybGF5Q29tcG9uZW50SWRcIlxuICAgICAgICBbZGlzcGxheURlbnNpdHldPVwiZXNmLmRpc3BsYXlEZW5zaXR5XCI+XG4gICAgPC9pZ3gtZXhjZWwtc3R5bGUtY3VzdG9tLWRpYWxvZz5cbjwvbmctY29udGFpbmVyPlxuIl19
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBR3hFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRzNGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxtQkFBbUIsRUFBbUIsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUs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QXdCLCtEQUFFLGtDQUFrQzs7MkZBRXRKLHVDQUF1QztrQkFObkQsU0FBUzsrQkFDSSxvQ0FBb0MsY0FFbEMsSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxrQ0FBa0MsQ0FBQzt3SUFPekosWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0NBQWtDLEVBQUU7Z0JBT2hFLE9BQU87c0JBRGIsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElGaWx0ZXJpbmdPcGVyYXRpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZUN1c3RvbURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZXhjZWwtc3R5bGUtY3VzdG9tLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBCYXNlRmlsdGVyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWZpbHRlcmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vdmVybGF5L3Bvc2l0aW9uL2F1dG8tcG9zaXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL292ZXJsYXkvc2Nyb2xsL2Fic29sdXRlLXNjcm9sbC1zdHJhdGVneSc7XG5pbXBvcnQgeyBIb3Jpem9udGFsQWxpZ25tZW50LCBPdmVybGF5U2V0dGluZ3MsIFZlcnRpY2FsQWxpZ25tZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuaW1wb3J0IHsgSWd4RHJvcERvd25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IElTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tICcuLi8uLi8uLi9kcm9wLWRvd24vZHJvcC1kb3duLmNvbW1vbic7XG5cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB1c2VkIGZvciBwcmVzZW50aW5nIEV4Y2VsIHN0eWxlIGNvbmRpdGlvbmFsIGZpbHRlciBVSS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXhjZWwtc3R5bGUtY29uZGl0aW9uYWwtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBJZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uRGlyZWN0aXZlLCBJZ3hJY29uQ29tcG9uZW50LCBJZ3hEcm9wRG93bkNvbXBvbmVudCwgTmdGb3IsIElneERyb3BEb3duSXRlbUNvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUN1c3RvbURpYWxvZ0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4RXhjZWxTdHlsZUNvbmRpdGlvbmFsRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2N1c3RvbURpYWxvZycsIHsgcmVhZDogSWd4RXhjZWxTdHlsZUN1c3RvbURpYWxvZ0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjdXN0b21EaWFsb2c6IElneEV4Y2VsU3R5bGVDdXN0b21EaWFsb2dDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3N1Yk1lbnUnLCB7IHJlYWQ6IElneERyb3BEb3duQ29tcG9uZW50IH0pXG4gICAgcHVibGljIHN1Yk1lbnU6IElneERyb3BEb3duQ29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSBzaG91bGRPcGVuU3ViTWVudSA9IHRydWU7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBwcml2YXRlIF9zdWJNZW51UG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgdmVydGljYWxTdGFydFBvaW50OiBWZXJ0aWNhbEFsaWdubWVudC5Ub3BcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfc3ViTWVudU92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IG5ldyBBdXRvUG9zaXRpb25TdHJhdGVneSh0aGlzLl9zdWJNZW51UG9zaXRpb25TZXR0aW5ncyksXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBuZXcgQWJzb2x1dGVTY3JvbGxTdHJhdGVneSgpXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlc2Y6IEJhc2VGaWx0ZXJpbmdDb21wb25lbnQsIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHRoaXMuZXNmLmNvbHVtbkNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVzZi5ncmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRPcGVuU3ViTWVudSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViTWVudU92ZXJsYXlTZXR0aW5ncy5vdXRsZXQgPSB0aGlzLmVzZi5ncmlkLm91dGxldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXNmLmdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3Mub3V0bGV0ID0gdGhpcy5lc2YuZ3JpZC5vdXRsZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uVGV4dEZpbHRlcktleURvd24oZXZlbnRBcmdzOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudEFyZ3Mua2V5ID09PSB0aGlzLnBsYXRmb3JtLktFWU1BUC5FTlRFUikge1xuICAgICAgICAgICAgdGhpcy5vblRleHRGaWx0ZXJDbGljayhldmVudEFyZ3MpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50QXJncy5rZXkgPT09IHRoaXMucGxhdGZvcm0uS0VZTUFQLlRBQikge1xuICAgICAgICAgICAgdGhpcy5zdWJNZW51LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblRleHRGaWx0ZXJDbGljayhldmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkT3BlblN1Yk1lbnUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MudGFyZ2V0ID0gZXZlbnRBcmdzLmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGdyaWRSZWN0ID0gdGhpcy5lc2YuZ3JpZC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25SZWN0ID0gdGhpcy5lc2YubWFpbkRyb3Bkb3duLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgIGxldCB4ID0gZHJvcGRvd25SZWN0LmxlZnQgKyBkcm9wZG93blJlY3Qud2lkdGg7XG4gICAgICAgICAgICBsZXQgeDEgPSBncmlkUmVjdC5sZWZ0ICsgZ3JpZFJlY3Qud2lkdGg7XG4gICAgICAgICAgICB4ICs9IHdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICAgICAgICAgIHgxICs9IHdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh4IC0geDEpIDwgMjAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViTWVudU92ZXJsYXlTZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmhvcml6b250YWxEaXJlY3Rpb24gPSBIb3Jpem9udGFsQWxpZ25tZW50LkxlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViTWVudU92ZXJsYXlTZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmhvcml6b250YWxTdGFydFBvaW50ID0gSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWJNZW51T3ZlcmxheVNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MuaG9yaXpvbnRhbERpcmVjdGlvbiA9IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViTWVudU92ZXJsYXlTZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5LnNldHRpbmdzLmhvcml6b250YWxTdGFydFBvaW50ID0gSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdWJNZW51Lm9wZW4odGhpcy5fc3ViTWVudU92ZXJsYXlTZXR0aW5ncyk7XG4gICAgICAgICAgICB0aGlzLnNob3VsZE9wZW5TdWJNZW51ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb25kaXRpb24odmFsdWU6IHN0cmluZyk6IElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lc2YuY29sdW1uLmZpbHRlcnMuY29uZGl0aW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyB0cmFuc2xhdGVDb25kaXRpb24odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5nc1tgaWd4X2dyaWRfZmlsdGVyXyR7dGhpcy5nZXRDb25kaXRpb24odmFsdWUpLm5hbWV9YF0gfHwgdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWJNZW51U2VsZWN0aW9uKGV2ZW50QXJnczogSVNlbGVjdGlvbkV2ZW50QXJncykge1xuICAgICAgICBpZiAodGhpcy5lc2YuZXhwcmVzc2lvbnNMaXN0ICYmIHRoaXMuZXNmLmV4cHJlc3Npb25zTGlzdC5sZW5ndGggJiZcbiAgICAgICAgICAgIHRoaXMuZXNmLmV4cHJlc3Npb25zTGlzdFswXS5leHByZXNzaW9uLmNvbmRpdGlvbi5uYW1lICE9PSAnaW4nKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5leHByZXNzaW9uc0xpc3QgPSB0aGlzLmVzZi5leHByZXNzaW9uc0xpc3Q7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1c3RvbURpYWxvZy5zZWxlY3RlZE9wZXJhdG9yID0gZXZlbnRBcmdzLm5ld1NlbGVjdGlvbi52YWx1ZTtcbiAgICAgICAgZXZlbnRBcmdzLmNhbmNlbCA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmVzZi5vdmVybGF5Q29tcG9uZW50SWQpIHtcbiAgICAgICAgICAgIHRoaXMuZXNmLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1Yk1lbnUuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jdXN0b21EaWFsb2cub3Blbih0aGlzLmVzZi5tYWluRHJvcGRvd24ubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWJNZW51Q2xvc2VkKCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG91bGRPcGVuU3ViTWVudSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNob3dDdXN0b21GaWx0ZXJJdGVtKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBleHByVHJlZSA9IHRoaXMuZXNmLmNvbHVtbi5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgIHJldHVybiBleHByVHJlZSAmJiBleHByVHJlZS5maWx0ZXJpbmdPcGVyYW5kcyAmJiBleHByVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGggJiZcbiAgICAgICAgICAgICEoKGV4cHJUcmVlLmZpbHRlcmluZ09wZXJhbmRzWzBdIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uKS5jb25kaXRpb24gJiZcbiAgICAgICAgICAgICAgICAoZXhwclRyZWUuZmlsdGVyaW5nT3BlcmFuZHNbMF0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb24pLmNvbmRpdGlvbi5uYW1lID09PSAnaW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc3ViTWVudVRleHQoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5lc2YuY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9ib29sZWFuX2ZpbHRlcjtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlBlcmNlbnQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXNmLmdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX2V4Y2VsX251bWJlcl9maWx0ZXI7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9kYXRlX2ZpbHRlcjtcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkN1cnJlbmN5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF9jdXJyZW5jeV9maWx0ZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVzZi5ncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9leGNlbF90ZXh0X2ZpbHRlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb25kaXRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lc2YuY29sdW1uLmZpbHRlcnMuY29uZGl0aW9uTGlzdCgpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJlc2YuY29sdW1uXCI+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIlxuICAgICAgICBjbGFzcz1cImlneC1leGNlbC1maWx0ZXJfX2FjdGlvbnMtZmlsdGVyXCJcbiAgICAgICAgKGtleWRvd24pPVwib25UZXh0RmlsdGVyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVGV4dEZpbHRlckNsaWNrKCRldmVudClcIlxuICAgICAgICBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJzdWJNZW51XCJcbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInRoaXMuc3ViTWVudS5saXN0SWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiIXRoaXMuc3ViTWVudS5jb2xsYXBzZWQgPyB0aGlzLnN1Yk1lbnUuZm9jdXNlZEl0ZW0/LmlkIDogbnVsbFwiPlxuICAgICAgICA8c3Bhbj57eyBzdWJNZW51VGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPGlneC1pY29uPmtleWJvYXJkX2Fycm93X3JpZ2h0PC9pZ3gtaWNvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxpZ3gtZHJvcC1kb3duXG4gICAgICAgICNzdWJNZW51XG4gICAgICAgIFttYXhIZWlnaHRdPVwiJzM5N3B4J1wiXG4gICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJlc2YuZGlzcGxheURlbnNpdHlcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdpbmcpPVwib25TdWJNZW51U2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAoY2xvc2VkKT1cIm9uU3ViTWVudUNsb3NlZCgpXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aWd4LWRyb3AtZG93bi1pdGVtXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnNcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImNvbmRpdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJpbXgtaWNvbnNcIiBbbmFtZV09XCJnZXRDb25kaXRpb24oY29uZGl0aW9uKS5pY29uTmFtZVwiPjwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX2ZpbHRlcmluZy1kcm9wZG93bi10ZXh0XCI+e3sgdHJhbnNsYXRlQ29uZGl0aW9uKGNvbmRpdGlvbikgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICAgICAgICAgIDxpZ3gtZHJvcC1kb3duLWl0ZW0gKm5nSWY9XCJzaG93Q3VzdG9tRmlsdGVySXRlbSgpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19maWx0ZXJpbmctZHJvcGRvd24taXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uPmZpbHRlcl9saXN0PC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fZmlsdGVyaW5nLWRyb3Bkb3duLXRleHRcIj57eyBlc2YuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZXhjZWxfY3VzdG9tX2ZpbHRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaWd4LWRyb3AtZG93bi1pdGVtPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2lneC1kcm9wLWRvd24+XG5cbiAgICA8aWd4LWV4Y2VsLXN0eWxlLWN1c3RvbS1kaWFsb2dcbiAgICAgICAgI2N1c3RvbURpYWxvZ1xuICAgICAgICBbY29sdW1uXT1cImVzZi5jb2x1bW5cIlxuICAgICAgICBbZmlsdGVyaW5nU2VydmljZV09XCJlc2YuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlXCJcbiAgICAgICAgW292ZXJsYXlDb21wb25lbnRJZF09XCJlc2Yub3ZlcmxheUNvbXBvbmVudElkXCJcbiAgICAgICAgW2Rpc3BsYXlEZW5zaXR5XT1cImVzZi5kaXNwbGF5RGVuc2l0eVwiPlxuICAgIDwvaWd4LWV4Y2VsLXN0eWxlLWN1c3RvbS1kaWFsb2c+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==