@recursyve/nestjs-data-filter 9.3.0 → 10.0.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 (92) hide show
  1. package/lib/adapters/default-access-control.adapter.js +3 -3
  2. package/lib/adapters/default-export.adapter.js +3 -3
  3. package/lib/adapters/default-translate.adapter.js +3 -3
  4. package/lib/data-filter.repository.d.ts +1 -1
  5. package/lib/data-filter.repository.js +14 -11
  6. package/lib/data-filter.service.js +3 -3
  7. package/lib/decorators/attributes.decorator.js +1 -1
  8. package/lib/decorators/count.decorator.js +1 -1
  9. package/lib/decorators/distance.decorator.js +2 -2
  10. package/lib/decorators/ignore-in-search.decorator.js +1 -1
  11. package/lib/decorators/include.decorator.js +1 -1
  12. package/lib/decorators/limit.decorator.js +1 -1
  13. package/lib/decorators/order.decorator.js +1 -1
  14. package/lib/decorators/paranoid.decorator.js +1 -1
  15. package/lib/decorators/path.decorator.js +1 -1
  16. package/lib/decorators/required.decorator.js +1 -1
  17. package/lib/decorators/seachable-attributes.decorator.js +1 -1
  18. package/lib/decorators/separate.decorator.js +1 -1
  19. package/lib/decorators/sum.decorator.js +1 -1
  20. package/lib/decorators/where.decorator.js +1 -1
  21. package/lib/filter/base-filter.js +1 -1
  22. package/lib/filter/controllers/dynamic-filter.controller.d.ts +1 -1
  23. package/lib/filter/controllers/dynamic-filter.controller.js +2 -2
  24. package/lib/filter/controllers/filter.controller.d.ts +1 -1
  25. package/lib/filter/controllers/filter.controller.js +2 -2
  26. package/lib/filter/decorators/inject-filter.decorator.d.ts +1 -1
  27. package/lib/filter/filter.config.d.ts +1 -1
  28. package/lib/filter/filter.config.js +1 -1
  29. package/lib/filter/filter.factory.js +1 -1
  30. package/lib/filter/filter.service.d.ts +4 -4
  31. package/lib/filter/filter.service.js +45 -26
  32. package/lib/filter/filter.utils.d.ts +1 -1
  33. package/lib/filter/filter.utils.js +1 -1
  34. package/lib/filter/filters/coordinate.filter.d.ts +4 -4
  35. package/lib/filter/filters/coordinate.filter.js +34 -24
  36. package/lib/filter/filters/date-time.filter.d.ts +1 -1
  37. package/lib/filter/filters/date-time.filter.js +4 -1
  38. package/lib/filter/filters/date.filter.d.ts +1 -1
  39. package/lib/filter/filters/date.filter.js +18 -13
  40. package/lib/filter/filters/default.filter.d.ts +4 -4
  41. package/lib/filter/filters/default.filter.js +1 -1
  42. package/lib/filter/filters/filter.d.ts +13 -12
  43. package/lib/filter/filters/filter.js +15 -11
  44. package/lib/filter/filters/geo-bounds.filter.js +1 -1
  45. package/lib/filter/filters/geo-localization.filter.d.ts +1 -1
  46. package/lib/filter/filters/geo-localization.filter.js +4 -1
  47. package/lib/filter/filters/group.filter.d.ts +9 -9
  48. package/lib/filter/filters/group.filter.js +20 -15
  49. package/lib/filter/filters/radio.filter.d.ts +3 -3
  50. package/lib/filter/filters/radio.filter.js +14 -7
  51. package/lib/filter/filters/select.filter.d.ts +2 -2
  52. package/lib/filter/filters/select.filter.js +2 -2
  53. package/lib/filter/filters/text.filter.d.ts +1 -1
  54. package/lib/filter/filters/text.filter.js +1 -1
  55. package/lib/filter/guards/filter-query.guard.js +8 -5
  56. package/lib/filter/interceptors/data-file-download.interceptor.js +3 -3
  57. package/lib/filter/models/filter-configuration.model.d.ts +2 -2
  58. package/lib/filter/models/filter-configuration.model.js +1 -1
  59. package/lib/filter/models/rule.model.d.ts +3 -0
  60. package/lib/filter/models/rule.model.js +1 -1
  61. package/lib/filter/operators.js +2 -2
  62. package/lib/filter/order-rules/default.order-rule.d.ts +4 -3
  63. package/lib/filter/order-rules/default.order-rule.js +1 -1
  64. package/lib/filter/order-rules/enum.order-rule.js +1 -1
  65. package/lib/filter/order-rules/order-rule.d.ts +4 -3
  66. package/lib/filter/order-rules/order-rule.js +1 -1
  67. package/lib/filter/type.js +2 -2
  68. package/lib/handlers/attributes.handler.d.ts +1 -1
  69. package/lib/handlers/attributes.handler.js +1 -1
  70. package/lib/index.js +25 -34
  71. package/lib/json.data.js +1 -1
  72. package/lib/models/attributes.model.d.ts +4 -4
  73. package/lib/models/attributes.model.js +11 -6
  74. package/lib/models/count.model.js +1 -1
  75. package/lib/models/custom-attributes.model.d.ts +1 -1
  76. package/lib/models/custom-attributes.model.js +1 -1
  77. package/lib/models/data-filter.model.d.ts +1 -1
  78. package/lib/models/data-filter.model.js +18 -10
  79. package/lib/models/distance.model.d.ts +3 -3
  80. package/lib/models/distance.model.js +2 -2
  81. package/lib/models/export-types.model.js +2 -2
  82. package/lib/models/include.model.js +1 -1
  83. package/lib/models/path.model.js +1 -1
  84. package/lib/models/sum.model.js +1 -1
  85. package/lib/scanners/data-filter.scanner.js +3 -3
  86. package/lib/scanners/sequelize-model.scanner.d.ts +2 -2
  87. package/lib/scanners/sequelize-model.scanner.js +8 -7
  88. package/lib/sequelize.utils.d.ts +4 -4
  89. package/lib/sequelize.utils.js +6 -6
  90. package/lib/services/data-filter-validation.service.js +3 -3
  91. package/lib/utils/xlsx.utils.js +1 -1
  92. package/package.json +19 -19
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CoordinateFilter = void 0;
4
- const type_1 = require("../type");
5
- const operators_1 = require("../operators");
6
- const filter_1 = require("./filter");
7
4
  const sequelize_1 = require("sequelize");
8
5
  const sequelize_utils_1 = require("../../sequelize.utils");
6
+ const operators_1 = require("../operators");
7
+ const type_1 = require("../type");
8
+ const filter_1 = require("./filter");
9
9
  class CoordinateFilter extends filter_1.Filter {
10
10
  constructor(definition) {
11
11
  super(definition);
@@ -22,34 +22,44 @@ class CoordinateFilter extends filter_1.Filter {
22
22
  }
23
23
  }
24
24
  async getEqualWhereOptions(rule, latitude, longitude) {
25
+ const first = await super.getWhereOptions({
26
+ operation: operators_1.FilterOperatorTypes.Equal,
27
+ value: latitude,
28
+ id: rule.id
29
+ }, sequelize_utils_1.SequelizeUtils.getAttributeFullName("latitude", [this.path, this.attribute].filter(x => x).join(".")));
30
+ const second = await super.getWhereOptions({
31
+ operation: operators_1.FilterOperatorTypes.Equal,
32
+ value: longitude,
33
+ id: rule.id
34
+ }, sequelize_utils_1.SequelizeUtils.getAttributeFullName("longitude", [this.path, this.attribute].filter(x => x).join(".")));
35
+ if (!first || !second) {
36
+ return;
37
+ }
25
38
  return {
26
39
  [sequelize_1.Op.and]: [
27
- await super.getWhereOptions({
28
- operation: operators_1.FilterOperatorTypes.Equal,
29
- value: latitude,
30
- id: rule.id
31
- }, sequelize_utils_1.SequelizeUtils.getAttributeFullName("latitude", [this.path, this.attribute].filter(x => x).join("."))),
32
- await super.getWhereOptions({
33
- operation: operators_1.FilterOperatorTypes.Equal,
34
- value: longitude,
35
- id: rule.id
36
- }, sequelize_utils_1.SequelizeUtils.getAttributeFullName("longitude", [this.path, this.attribute].filter(x => x).join("."))),
40
+ first,
41
+ second
37
42
  ]
38
43
  };
39
44
  }
40
45
  async getNotEqualWhereOptions(rule, latitude, longitude) {
46
+ const first = await super.getWhereOptions({
47
+ operation: operators_1.FilterOperatorTypes.NotEqual,
48
+ value: latitude,
49
+ id: rule.id
50
+ }, sequelize_utils_1.SequelizeUtils.getAttributeFullName("latitude", [this.path, this.attribute].filter(x => x).join(".")));
51
+ const second = await super.getWhereOptions({
52
+ operation: operators_1.FilterOperatorTypes.NotEqual,
53
+ value: longitude,
54
+ id: rule.id
55
+ }, sequelize_utils_1.SequelizeUtils.getAttributeFullName("longitude", [this.path, this.attribute].filter(x => x).join(".")));
56
+ if (!first || !second) {
57
+ return;
58
+ }
41
59
  return {
42
60
  [sequelize_1.Op.or]: [
43
- await super.getWhereOptions({
44
- operation: operators_1.FilterOperatorTypes.NotEqual,
45
- value: latitude,
46
- id: rule.id
47
- }, sequelize_utils_1.SequelizeUtils.getAttributeFullName("latitude", [this.path, this.attribute].filter(x => x).join("."))),
48
- await super.getWhereOptions({
49
- operation: operators_1.FilterOperatorTypes.NotEqual,
50
- value: longitude,
51
- id: rule.id
52
- }, sequelize_utils_1.SequelizeUtils.getAttributeFullName("longitude", [this.path, this.attribute].filter(x => x).join("."))),
61
+ first,
62
+ second
53
63
  ]
54
64
  };
55
65
  }
@@ -63,4 +73,4 @@ class CoordinateFilter extends filter_1.Filter {
63
73
  }
64
74
  exports.CoordinateFilter = CoordinateFilter;
65
75
 
66
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9jb29yZGluYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrQ0FBcUM7QUFDckMsNENBQW9FO0FBQ3BFLHFDQUF3RDtBQUV4RCx5Q0FBNkM7QUFDN0MsMkRBQXVEO0FBRXZELE1BQWEsZ0JBQWlCLFNBQVEsZUFBTTtJQUl4QyxZQUFZLFVBQWdDO1FBQ3hDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUpmLFNBQUksR0FBRyxpQkFBVSxDQUFDLFVBQVUsQ0FBQztRQUM3QixjQUFTLEdBQUcsQ0FBQyxHQUFHLDJCQUFlLENBQUMsQ0FBQztJQUl4QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFvQjtRQUM3QyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDcEIsS0FBSywrQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssK0JBQW1CLENBQUMsUUFBUTtnQkFDN0IsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RTtJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBb0IsRUFBRSxRQUFnQixFQUFFLFNBQWlCO1FBQ3hGLE9BQU87WUFDSCxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDTixNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSwrQkFBbUIsQ0FBQyxLQUFLO29CQUNwQyxLQUFLLEVBQUUsUUFBUTtvQkFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7aUJBQ2QsRUFBRSxnQ0FBYyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN6RyxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSwrQkFBbUIsQ0FBQyxLQUFLO29CQUNwQyxLQUFLLEVBQUUsU0FBUztvQkFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2lCQUNkLEVBQUUsZ0NBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM3RztTQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQW9CLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtRQUMzRixPQUFPO1lBQ0gsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ0wsTUFBTSxLQUFLLENBQUMsZUFBZSxDQUFDO29CQUN4QixTQUFTLEVBQUUsK0JBQW1CLENBQUMsUUFBUTtvQkFDdkMsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2lCQUNkLEVBQUUsZ0NBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekcsTUFBTSxLQUFLLENBQUMsZUFBZSxDQUFDO29CQUN4QixTQUFTLEVBQUUsK0JBQW1CLENBQUMsUUFBUTtvQkFDdkMsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtpQkFDZCxFQUFFLGdDQUFjLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDN0c7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVNLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBZTtRQUN4QyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUF5QixDQUFDO1FBQzdELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUMvRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pCO1FBRUQsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0o7QUE1REQsNENBNERDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9jb29yZGluYXRlLmZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbHRlclR5cGUgfSBmcm9tIFwiLi4vdHlwZVwiO1xuaW1wb3J0IHsgRmlsdGVyT3BlcmF0b3JUeXBlcywgU2VsZWN0T3BlcmF0b3JzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgQmFzZUZpbHRlckRlZmluaXRpb24sIEZpbHRlciB9IGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHsgUXVlcnlSdWxlTW9kZWwsIFJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IE9wLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi8uLi9zZXF1ZWxpemUudXRpbHNcIjtcblxuZXhwb3J0IGNsYXNzIENvb3JkaW5hdGVGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5Db29yZGluYXRlO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbLi4uU2VsZWN0T3BlcmF0b3JzXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCBbbGF0aXR1ZGUsIGxvbmdpdHVkZV0gPSBDb29yZGluYXRlRmlsdGVyLmdldENvb3JkaW5hdGVzKHJ1bGUpO1xuICAgICAgICBzd2l0Y2ggKHJ1bGUub3BlcmF0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuTm90RXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBsYXRpdHVkZTogbnVtYmVyLCBsb25naXR1ZGU6IG51bWJlcik6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgIGF3YWl0IHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxhdGl0dWRlLFxuICAgICAgICAgICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICAgICAgICAgIH0sIFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKFwibGF0aXR1ZGVcIiwgW3RoaXMucGF0aCwgdGhpcy5hdHRyaWJ1dGVdLmZpbHRlcih4ID0+IHgpLmpvaW4oXCIuXCIpKSksXG4gICAgICAgICAgICAgICAgYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbG9uZ2l0dWRlLFxuICAgICAgICAgICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICAgICAgICAgIH0sIFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKFwibG9uZ2l0dWRlXCIsIFt0aGlzLnBhdGgsIHRoaXMuYXR0cmlidXRlXS5maWx0ZXIoeCA9PiB4KS5qb2luKFwiLlwiKSkpLFxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGxhdGl0dWRlOiBudW1iZXIsIGxvbmdpdHVkZTogbnVtYmVyKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtPcC5vcl06IFtcbiAgICAgICAgICAgICAgICBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90RXF1YWwsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBsYXRpdHVkZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgICAgICAgICB9LCBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZShcImxhdGl0dWRlXCIsIFt0aGlzLnBhdGgsIHRoaXMuYXR0cmlidXRlXS5maWx0ZXIoeCA9PiB4KS5qb2luKFwiLlwiKSkpLFxuICAgICAgICAgICAgICAgIGF3YWl0IHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxvbmdpdHVkZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgICAgICAgICB9LCBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZShcImxvbmdpdHVkZVwiLCBbdGhpcy5wYXRoLCB0aGlzLmF0dHJpYnV0ZV0uZmlsdGVyKHggPT4geCkuam9pbihcIi5cIikpKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldENvb3JkaW5hdGVzKHJ1bGU6IFJ1bGVNb2RlbCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICBjb25zdCBbbGF0aXR1ZGUsIGxvbmdpdHVkZV0gPSBydWxlLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIGlmICh0eXBlb2YgbGF0aXR1ZGUgIT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGxvbmdpdHVkZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbGF0aXR1ZGUsIGxvbmdpdHVkZV07XG4gICAgfVxufVxuIl19
76
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9jb29yZGluYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkM7QUFDN0MsMkRBQXVEO0FBRXZELDRDQUFvRTtBQUNwRSxrQ0FBcUM7QUFDckMscUNBQXdEO0FBRXhELE1BQWEsZ0JBQWlCLFNBQVEsZUFBTTtJQUl4QyxZQUFZLFVBQWdDO1FBQ3hDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUpmLFNBQUksR0FBRyxpQkFBVSxDQUFDLFVBQVUsQ0FBQztRQUM3QixjQUFTLEdBQUcsQ0FBQyxHQUFHLDJCQUFlLENBQUMsQ0FBQztJQUl4QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFvQjtRQUM3QyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDcEIsS0FBSywrQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssK0JBQW1CLENBQUMsUUFBUTtnQkFDN0IsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RTtJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBb0IsRUFBRSxRQUFnQixFQUFFLFNBQWlCO1FBQ3hGLE1BQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUN0QyxTQUFTLEVBQUUsK0JBQW1CLENBQUMsS0FBSztZQUNwQyxLQUFLLEVBQUUsUUFBUTtZQUNmLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNkLEVBQUUsZ0NBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFHLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUN2QyxTQUFTLEVBQUUsK0JBQW1CLENBQUMsS0FBSztZQUNwQyxLQUFLLEVBQUUsU0FBUztZQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxFQUFFLGdDQUFjLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUVELE9BQU87WUFDSCxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDTixLQUFLO2dCQUNMLE1BQU07YUFDVDtTQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQW9CLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtRQUMzRixNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDdEMsU0FBUyxFQUFFLCtCQUFtQixDQUFDLFFBQVE7WUFDdkMsS0FBSyxFQUFFLFFBQVE7WUFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxFQUFFLGdDQUFjLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRyxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDdkMsU0FBUyxFQUFFLCtCQUFtQixDQUFDLFFBQVE7WUFDdkMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsRUFBRSxnQ0FBYyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0csSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNuQixPQUFPO1NBQ1Y7UUFFRCxPQUFPO1lBQ0gsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ0wsS0FBSztnQkFDTCxNQUFNO2FBQ1Q7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVNLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBZTtRQUN4QyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUF5QixDQUFDO1FBQzdELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUMvRCxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pCO1FBRUQsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0o7QUE1RUQsNENBNEVDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9jb29yZGluYXRlLmZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi8uLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IFF1ZXJ5UnVsZU1vZGVsLCBSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJPcGVyYXRvclR5cGVzLCBTZWxlY3RPcGVyYXRvcnMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXJEZWZpbml0aW9uLCBGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIENvb3JkaW5hdGVGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5Db29yZGluYXRlO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbLi4uU2VsZWN0T3BlcmF0b3JzXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBbbGF0aXR1ZGUsIGxvbmdpdHVkZV0gPSBDb29yZGluYXRlRmlsdGVyLmdldENvb3JkaW5hdGVzKHJ1bGUpO1xuICAgICAgICBzd2l0Y2ggKHJ1bGUub3BlcmF0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuTm90RXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgbGF0aXR1ZGUsIGxvbmdpdHVkZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBsYXRpdHVkZTogbnVtYmVyLCBsb25naXR1ZGU6IG51bWJlcik6IFByb21pc2U8V2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBsYXRpdHVkZSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0sIFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKFwibGF0aXR1ZGVcIiwgW3RoaXMucGF0aCwgdGhpcy5hdHRyaWJ1dGVdLmZpbHRlcih4ID0+IHgpLmpvaW4oXCIuXCIpKSk7XG5cbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBsb25naXR1ZGUsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9LCBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZShcImxvbmdpdHVkZVwiLCBbdGhpcy5wYXRoLCB0aGlzLmF0dHJpYnV0ZV0uZmlsdGVyKHggPT4geCkuam9pbihcIi5cIikpKTtcblxuICAgICAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgIGZpcnN0LFxuICAgICAgICAgICAgICAgIHNlY29uZFxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGxhdGl0dWRlOiBudW1iZXIsIGxvbmdpdHVkZTogbnVtYmVyKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IGxhdGl0dWRlLFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSwgU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoXCJsYXRpdHVkZVwiLCBbdGhpcy5wYXRoLCB0aGlzLmF0dHJpYnV0ZV0uZmlsdGVyKHggPT4geCkuam9pbihcIi5cIikpKTtcblxuICAgICAgICBjb25zdCBzZWNvbmQgPSBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IGxvbmdpdHVkZSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0sIFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKFwibG9uZ2l0dWRlXCIsIFt0aGlzLnBhdGgsIHRoaXMuYXR0cmlidXRlXS5maWx0ZXIoeCA9PiB4KS5qb2luKFwiLlwiKSkpO1xuXG4gICAgICAgIGlmICghZmlyc3QgfHwgIXNlY29uZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtPcC5vcl06IFtcbiAgICAgICAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICAgICAgICBzZWNvbmRcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldENvb3JkaW5hdGVzKHJ1bGU6IFJ1bGVNb2RlbCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgICAgICBjb25zdCBbbGF0aXR1ZGUsIGxvbmdpdHVkZV0gPSBydWxlLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIGlmICh0eXBlb2YgbGF0aXR1ZGUgIT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGxvbmdpdHVkZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFswLCAwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbGF0aXR1ZGUsIGxvbmdpdHVkZV07XG4gICAgfVxufVxuIl19
@@ -7,5 +7,5 @@ export declare class DateTimeFilter extends Filter {
7
7
  type: FilterType;
8
8
  operators: FilterOperatorTypes[];
9
9
  constructor(definition: BaseFilterDefinition);
10
- getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions>;
10
+ getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
11
11
  }
@@ -15,6 +15,9 @@ class DateTimeFilter extends filter_1.Filter {
15
15
  }
16
16
  async getWhereOptions(rule) {
17
17
  if (rule.operation === operators_1.FilterOperatorTypes.Between || rule.operation === operators_1.FilterOperatorTypes.NotBetween) {
18
+ if (!Array.isArray(rule.value)) {
19
+ return undefined;
20
+ }
18
21
  return super.getWhereOptions({
19
22
  ...rule,
20
23
  value: [
@@ -38,4 +41,4 @@ class DateTimeFilter extends filter_1.Filter {
38
41
  }
39
42
  exports.DateTimeFilter = DateTimeFilter;
40
43
 
41
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLXRpbWUuZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDRDQUFrRTtBQUNsRSxrQ0FBcUM7QUFDckMscUNBQXdEO0FBQ3hELGlDQUFpQztBQUVqQywyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLE1BQWEsY0FBZSxTQUFRLGVBQU07SUFJdEMsWUFBWSxVQUFnQztRQUN4QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFKZixTQUFJLEdBQUcsaUJBQVUsQ0FBQyxRQUFRLENBQUM7UUFDM0IsY0FBUyxHQUFHLENBQUMsR0FBRyx5QkFBYSxDQUFDLENBQUM7SUFJdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFVBQVUsRUFBRTtZQUNyRyxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQ3pCLEdBQUcsSUFBSTtnQkFDUCxLQUFLLEVBQUU7b0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2hCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7eUJBQ25CLE1BQU0sRUFBRTtvQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDaEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzt5QkFDbkIsTUFBTSxFQUFFO2lCQUNoQjthQUNKLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3BCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7aUJBQ25CLE1BQU0sRUFBRTtZQUNiLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNkLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQS9CRCx3Q0ErQkMiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2RhdGUtdGltZS5maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IERhdGVPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXJEZWZpbml0aW9uLCBGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJcIjtcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5cbi8vIEZpbHRlcnMgYSByb3cgYnkgZXhhY3QgZGF0ZSBhbmQgdGltZSBnaXZlbiBpbiB0aGUgcnVsZXMuXG4vLyBUT0RPOiBEbyBub3QgaGFyZCBjb2RlIHRpbWV6b25lIG9mZnNldFxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRmlsdGVyIGV4dGVuZHMgRmlsdGVyIHtcbiAgICBwdWJsaWMgdHlwZSA9IEZpbHRlclR5cGUuRGF0ZVRpbWU7XG4gICAgcHVibGljIG9wZXJhdG9ycyA9IFsuLi5EYXRlT3BlcmF0b3JzXTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQmV0d2VlbiB8fCBydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RCZXR3ZWVuKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAuLi5ydWxlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBbXG4gICAgICAgICAgICAgICAgICAgIG1vbWVudChydWxlLnZhbHVlWzBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoKSxcbiAgICAgICAgICAgICAgICAgICAgbW9tZW50KHJ1bGUudmFsdWVbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAudXRjT2Zmc2V0KC01LCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24sXG4gICAgICAgICAgICB2YWx1ZTogbW9tZW50KHJ1bGUudmFsdWUpXG4gICAgICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAuZm9ybWF0KCksXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
44
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLXRpbWUuZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDRDQUFrRTtBQUNsRSxrQ0FBcUM7QUFDckMscUNBQXdEO0FBQ3hELGlDQUFpQztBQUVqQywyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLE1BQWEsY0FBZSxTQUFRLGVBQU07SUFJdEMsWUFBWSxVQUFnQztRQUN4QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFKZixTQUFJLEdBQUcsaUJBQVUsQ0FBQyxRQUFRLENBQUM7UUFDM0IsY0FBUyxHQUFHLENBQUMsR0FBRyx5QkFBYSxDQUFDLENBQUM7SUFJdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFVBQVUsRUFBRTtZQUNyRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzVCLE9BQU8sU0FBUyxDQUFDO2FBQ3BCO1lBRUQsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO2dCQUN6QixHQUFHLElBQUk7Z0JBQ1AsS0FBSyxFQUFFO29CQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNoQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO3lCQUNuQixNQUFNLEVBQUU7b0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2hCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7eUJBQ25CLE1BQU0sRUFBRTtpQkFDaEI7YUFDSixDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBWSxDQUFDO2lCQUMzQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO2lCQUNuQixNQUFNLEVBQUU7WUFDYixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFuQ0Qsd0NBbUNDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9kYXRlLXRpbWUuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgUXVlcnlSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBEYXRlT3BlcmF0b3JzLCBGaWx0ZXJPcGVyYXRvclR5cGVzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuXG4vLyBGaWx0ZXJzIGEgcm93IGJ5IGV4YWN0IGRhdGUgYW5kIHRpbWUgZ2l2ZW4gaW4gdGhlIHJ1bGVzLlxuLy8gVE9ETzogRG8gbm90IGhhcmQgY29kZSB0aW1lem9uZSBvZmZzZXRcbmV4cG9ydCBjbGFzcyBEYXRlVGltZUZpbHRlciBleHRlbmRzIEZpbHRlciB7XG4gICAgcHVibGljIHR5cGUgPSBGaWx0ZXJUeXBlLkRhdGVUaW1lO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbLi4uRGF0ZU9wZXJhdG9yc107XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBCYXNlRmlsdGVyRGVmaW5pdGlvbikge1xuICAgICAgICBzdXBlcihkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLkJldHdlZW4gfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90QmV0d2Vlbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJ1bGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgLi4ucnVsZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICBtb21lbnQocnVsZS52YWx1ZVswXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC51dGNPZmZzZXQoLTUsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KCksXG4gICAgICAgICAgICAgICAgICAgIG1vbWVudChydWxlLnZhbHVlWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IHJ1bGUub3BlcmF0aW9uLFxuICAgICAgICAgICAgdmFsdWU6IG1vbWVudChydWxlLnZhbHVlIGFzIGFueSlcbiAgICAgICAgICAgICAgICAudXRjT2Zmc2V0KC01LCB0cnVlKVxuICAgICAgICAgICAgICAgIC5mb3JtYXQoKSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -13,7 +13,7 @@ export declare class DateFilter extends Filter implements DateFilterDefinition {
13
13
  readonly defaultTimezone: string;
14
14
  readonly skipTimezone: boolean;
15
15
  constructor(definition: BaseFilterDefinition & DateFilterDefinition);
16
- getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions>;
16
+ getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
17
17
  private getEqualWhereOptions;
18
18
  private getNotEqualWhereOptions;
19
19
  private getLessWhereOptions;
@@ -31,6 +31,9 @@ class DateFilter extends filter_1.Filter {
31
31
  // TODO: Check if the client sends us a timezone
32
32
  const offsetMilliseconds = (0, date_fns_tz_1.getTimezoneOffset)(this.defaultTimezone);
33
33
  if (rule.operation === operators_1.FilterOperatorTypes.Between || rule.operation === operators_1.FilterOperatorTypes.NotBetween) {
34
+ if (!Array.isArray(rule.value)) {
35
+ return;
36
+ }
34
37
  const values = this.skipTimezone
35
38
  ? rule.value
36
39
  :
@@ -71,19 +74,21 @@ class DateFilter extends filter_1.Filter {
71
74
  });
72
75
  }
73
76
  async getNotEqualWhereOptions(rule, start, end) {
77
+ const first = await super.getWhereOptions({
78
+ operation: operators_1.FilterOperatorTypes.Less,
79
+ value: start,
80
+ id: rule.id
81
+ });
82
+ const second = await super.getWhereOptions({
83
+ operation: operators_1.FilterOperatorTypes.Greater,
84
+ value: end,
85
+ id: rule.id
86
+ });
87
+ if (!first || !second) {
88
+ return;
89
+ }
74
90
  return {
75
- [sequelize_1.Op.or]: [
76
- await super.getWhereOptions({
77
- operation: operators_1.FilterOperatorTypes.Less,
78
- value: start,
79
- id: rule.id
80
- }),
81
- await super.getWhereOptions({
82
- operation: operators_1.FilterOperatorTypes.Greater,
83
- value: end,
84
- id: rule.id
85
- })
86
- ]
91
+ [sequelize_1.Op.or]: [first, second]
87
92
  };
88
93
  }
89
94
  async getLessWhereOptions(rule, start) {
@@ -117,4 +122,4 @@ class DateFilter extends filter_1.Filter {
117
122
  }
118
123
  exports.DateFilter = DateFilter;
119
124
 
120
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBNEU7QUFDNUUsNkNBQWdEO0FBQ2hELHlDQUE2QztBQUU3Qyw0Q0FBa0U7QUFDbEUsa0NBQXFDO0FBQ3JDLHFDQUF3RDtBQU94RCxtRkFBbUY7QUFDbkYsRUFBRTtBQUNGLHNIQUFzSDtBQUN0SCw0QkFBNEI7QUFDNUIsc0dBQXNHO0FBQ3RHLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0Ysd0hBQXdIO0FBQ3hILGdFQUFnRTtBQUNoRSxNQUFhLFVBQVcsU0FBUSxlQUFNO0lBT2xDLFlBQVksVUFBdUQ7O1FBQy9ELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVBmLFNBQUksR0FBRyxpQkFBVSxDQUFDLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQUcsQ0FBQyxHQUFHLHlCQUFhLENBQUMsQ0FBQztRQVFsQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsVUFBVSxDQUFDLGVBQWUsbUNBQUksa0JBQWtCLENBQUM7SUFDNUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFNBQVMsRUFBRTtZQUNuRyxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLCtCQUFpQixFQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVuRSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3JHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZO2dCQUM1QixD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QUFFLCtCQUFtQixDQUFDLGNBQWM7WUFDN0MsS0FBSyxFQUFFLEtBQUs7WUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFqSEQsZ0NBaUhDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZE1pbGxpc2Vjb25kcywgZW5kT2ZEYXksIHBhcnNlSlNPTiwgc3RhcnRPZkRheSB9IGZyb20gXCJkYXRlLWZuc1wiO1xuaW1wb3J0IHsgZ2V0VGltZXpvbmVPZmZzZXQgfSBmcm9tIFwiZGF0ZS1mbnMtdHpcIjtcbmltcG9ydCB7IE9wLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IERhdGVPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXJEZWZpbml0aW9uLCBGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRlRmlsdGVyRGVmaW5pdGlvbiB7XG4gICAgc2tpcFRpbWV6b25lPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0VGltZXpvbmU/OiBzdHJpbmc7XG59XG5cbi8vIEZpbHRlcnMgYSByb3cgYnkgZXhhY3QgZGF0ZSBnaXZlbiBpbiB0aGUgcnVsZXMuIFdlIHN0cmlwIHRoZSB0aW1lIGZyb20gdGhlIGRhdGUuXG4vL1xuLy8gRGVwZW5kaW5nIG9uIHRoZSBpbmNsdXNpdml0eSBvZiB5b3VyIHJlcXVlc3Qgd2UgdXNlIHRoZSBzdGFydCBvZiBkYXkgb3IgZW5kIG9mIGRheSwgZm9yIGV4YW1wbGUgaWYgdGhlIHJ1bGUncyB2YWx1ZVxuLy8gaXMgXCIyMDIwLTAzLTA2VDAwOjU1OjEyXCI7XG4vLyAgLSBBbmQgaXRzIG9wZXJhdG9yIGlzIExlc3NPckVxdWFsIHdlIHdpbGwgb3V0cHV0IFwiPCAyMDIwLTAzLTA2VDAwOjAwOjAwXCIgdG8gZXhjbHVkZSB0aGUgZ2l2ZW4gZGF5LlxuLy8gIC0gQW5kIGl0cyBvcGVyYXRvciBpcyBMZXNzLCB3ZSB3aWxsIG91dHB1dCBcIjwgMjAyMC0wMy0wNlQyMzo1OTo1OVwiIHRvIGluY2x1ZGUgdGhlIGdpdmVuIGRheS5cbi8vXG4vLyBGb3IgQmV0d2VlbiBhbmQgTm90QmV0d2VlbiBvcGVyYXRvcnMsIHdlIGFsd2F5cyBpbmNsdWRlIHRoZSBnaXZlbiBmaXJzdCBkYXkgYW5kIGxhc3QgZGF5LCBzbyBtYWtlIHN1cmUgdG8gc2hyaW5rIHlvdXJcbi8vIHRpbWVmcmFtZSBieSBvbmUgZGF5IGZvciBlYWNoIHNpZGUgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZS5cbmV4cG9ydCBjbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgRmlsdGVyIGltcGxlbWVudHMgRGF0ZUZpbHRlckRlZmluaXRpb24ge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5EYXRlO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbLi4uRGF0ZU9wZXJhdG9yc107XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFRpbWV6b25lOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IHNraXBUaW1lem9uZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uICYgRGF0ZUZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgICAgc3VwZXIoZGVmaW5pdGlvbik7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0VGltZXpvbmUgPSBkZWZpbml0aW9uLmRlZmF1bHRUaW1lem9uZSA/PyBcIkFtZXJpY2EvTW9udHJlYWxcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLklzTnVsbCB8fCBydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5Jc05vdE51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMocnVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBDaGVjayBpZiB0aGUgY2xpZW50IHNlbmRzIHVzIGEgdGltZXpvbmVcbiAgICAgICAgY29uc3Qgb2Zmc2V0TWlsbGlzZWNvbmRzID0gZ2V0VGltZXpvbmVPZmZzZXQodGhpcy5kZWZhdWx0VGltZXpvbmUpO1xuXG4gICAgICAgIGlmIChydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5CZXR3ZWVuIHx8IHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEJldHdlZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc2tpcFRpbWV6b25lXG4gICAgICAgICAgICAgICAgPyBydWxlLnZhbHVlXG4gICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgYWRkTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXkocGFyc2VKU09OKHJ1bGUudmFsdWVbMF0pKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICBhZGRNaWxsaXNlY29uZHMoZW5kT2ZEYXkocGFyc2VKU09OKHJ1bGUudmFsdWVbMV0pKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgICAgIC4uLnJ1bGUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSlNPTihydWxlLnZhbHVlIGFzIGFueSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5za2lwVGltZXpvbmUgPyBzdGFydE9mRGF5KHBhcnNlZFZhbHVlKS50b0lTT1N0cmluZygpIDogYWRkTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXkocGFyc2VkVmFsdWUpLCBvZmZzZXRNaWxsaXNlY29uZHMpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuc2tpcFRpbWV6b25lID8gZW5kT2ZEYXkocGFyc2VkVmFsdWUpLnRvSVNPU3RyaW5nKCkgOiBhZGRNaWxsaXNlY29uZHMoZW5kT2ZEYXkocGFyc2VkVmFsdWUpLCBvZmZzZXRNaWxsaXNlY29uZHMpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgICAgc3dpdGNoIChydWxlLm9wZXJhdGlvbikge1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVxdWFsV2hlcmVPcHRpb25zKHJ1bGUsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEVxdWFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5vdEVxdWFsV2hlcmVPcHRpb25zKHJ1bGUsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLkxlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGVzc1doZXJlT3B0aW9ucyhydWxlLCBzdGFydCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuTGVzc09yRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGVzc09yRXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5HcmVhdGVyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEdyZWF0ZXJXaGVyZU9wdGlvbnMocnVsZSwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5HcmVhdGVyT3JFcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHcmVhdGVyT3JFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMocnVsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkJldHdlZW4sXG4gICAgICAgICAgICB2YWx1ZTogW3N0YXJ0LCBlbmRdLFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXROb3RFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW09wLm9yXTogW1xuICAgICAgICAgICAgICAgIGF3YWl0IHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkdyZWF0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldExlc3NXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIHN0YXJ0OiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXJ0LFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRMZXNzT3JFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzT3JFcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEdyZWF0ZXJXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlcixcbiAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEdyZWF0ZXJPckVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBzdGFydDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlck9yRXF1YWwsXG4gICAgICAgICAgICB2YWx1ZTogc3RhcnQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBNEU7QUFDNUUsNkNBQWdEO0FBQ2hELHlDQUE2QztBQUU3Qyw0Q0FBa0U7QUFDbEUsa0NBQXFDO0FBQ3JDLHFDQUF3RDtBQU94RCxtRkFBbUY7QUFDbkYsRUFBRTtBQUNGLHNIQUFzSDtBQUN0SCw0QkFBNEI7QUFDNUIsc0dBQXNHO0FBQ3RHLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0Ysd0hBQXdIO0FBQ3hILGdFQUFnRTtBQUNoRSxNQUFhLFVBQVcsU0FBUSxlQUFNO0lBT2xDLFlBQVksVUFBdUQ7O1FBQy9ELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVBmLFNBQUksR0FBRyxpQkFBVSxDQUFDLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQUcsQ0FBQyxHQUFHLHlCQUFhLENBQUMsQ0FBQztRQVFsQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsVUFBVSxDQUFDLGVBQWUsbUNBQUksa0JBQWtCLENBQUM7SUFDNUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFNBQVMsRUFBRTtZQUNuRyxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLCtCQUFpQixFQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVuRSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssK0JBQW1CLENBQUMsVUFBVSxFQUFFO1lBQ3JHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FB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RUFBRSwrQkFBbUIsQ0FBQyxPQUFPO1lBQ3RDLEtBQUssRUFBRSxHQUFHO1lBQ1YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxJQUFvQixFQUFFLEtBQWE7UUFDM0UsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSwrQkFBbUIsQ0FBQyxjQUFjO1lBQzdDLEtBQUssRUFBRSxLQUFLO1lBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBeEhELGdDQXdIQyIsImZpbGUiOiJsaWIvZmlsdGVyL2ZpbHRlcnMvZGF0ZS5maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMsIGVuZE9mRGF5LCBwYXJzZUpTT04sIHN0YXJ0T2ZEYXkgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcbmltcG9ydCB7IGdldFRpbWV6b25lT2Zmc2V0IH0gZnJvbSBcImRhdGUtZm5zLXR6XCI7XG5pbXBvcnQgeyBPcCwgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgUXVlcnlSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBEYXRlT3BlcmF0b3JzLCBGaWx0ZXJPcGVyYXRvclR5cGVzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZUZpbHRlckRlZmluaXRpb24ge1xuICAgIHNraXBUaW1lem9uZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdFRpbWV6b25lPzogc3RyaW5nO1xufVxuXG4vLyBGaWx0ZXJzIGEgcm93IGJ5IGV4YWN0IGRhdGUgZ2l2ZW4gaW4gdGhlIHJ1bGVzLiBXZSBzdHJpcCB0aGUgdGltZSBmcm9tIHRoZSBkYXRlLlxuLy9cbi8vIERlcGVuZGluZyBvbiB0aGUgaW5jbHVzaXZpdHkgb2YgeW91ciByZXF1ZXN0IHdlIHVzZSB0aGUgc3RhcnQgb2YgZGF5IG9yIGVuZCBvZiBkYXksIGZvciBleGFtcGxlIGlmIHRoZSBydWxlJ3MgdmFsdWVcbi8vIGlzIFwiMjAyMC0wMy0wNlQwMDo1NToxMlwiO1xuLy8gIC0gQW5kIGl0cyBvcGVyYXRvciBpcyBMZXNzT3JFcXVhbCB3ZSB3aWxsIG91dHB1dCBcIjwgMjAyMC0wMy0wNlQwMDowMDowMFwiIHRvIGV4Y2x1ZGUgdGhlIGdpdmVuIGRheS5cbi8vICAtIEFuZCBpdHMgb3BlcmF0b3IgaXMgTGVzcywgd2Ugd2lsbCBvdXRwdXQgXCI8IDIwMjAtMDMtMDZUMjM6NTk6NTlcIiB0byBpbmNsdWRlIHRoZSBnaXZlbiBkYXkuXG4vL1xuLy8gRm9yIEJldHdlZW4gYW5kIE5vdEJldHdlZW4gb3BlcmF0b3JzLCB3ZSBhbHdheXMgaW5jbHVkZSB0aGUgZ2l2ZW4gZmlyc3QgZGF5IGFuZCBsYXN0IGRheSwgc28gbWFrZSBzdXJlIHRvIHNocmluayB5b3VyXG4vLyB0aW1lZnJhbWUgYnkgb25lIGRheSBmb3IgZWFjaCBzaWRlIHlvdSBkb24ndCB3YW50IHRvIGluY2x1ZGUuXG5leHBvcnQgY2xhc3MgRGF0ZUZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIERhdGVGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBwdWJsaWMgdHlwZSA9IEZpbHRlclR5cGUuRGF0ZTtcbiAgICBwdWJsaWMgb3BlcmF0b3JzID0gWy4uLkRhdGVPcGVyYXRvcnNdO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUaW1lem9uZTogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seSBza2lwVGltZXpvbmUhOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZGVmaW5pdGlvbjogQmFzZUZpbHRlckRlZmluaXRpb24gJiBEYXRlRmlsdGVyRGVmaW5pdGlvbikge1xuICAgICAgICBzdXBlcihkZWZpbml0aW9uKTtcblxuICAgICAgICB0aGlzLmRlZmF1bHRUaW1lem9uZSA9IGRlZmluaXRpb24uZGVmYXVsdFRpbWV6b25lID8/IFwiQW1lcmljYS9Nb250cmVhbFwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuSXNOdWxsIHx8IHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLklzTm90TnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyhydWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IENoZWNrIGlmIHRoZSBjbGllbnQgc2VuZHMgdXMgYSB0aW1lem9uZVxuICAgICAgICBjb25zdCBvZmZzZXRNaWxsaXNlY29uZHMgPSBnZXRUaW1lem9uZU9mZnNldCh0aGlzLmRlZmF1bHRUaW1lem9uZSk7XG5cbiAgICAgICAgaWYgKHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLkJldHdlZW4gfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90QmV0d2Vlbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJ1bGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNraXBUaW1lem9uZVxuICAgICAgICAgICAgICAgID8gcnVsZS52YWx1ZVxuICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIGFkZE1pbGxpc2Vjb25kcyhzdGFydE9mRGF5KHBhcnNlSlNPTihydWxlLnZhbHVlWzBdKSksIG9mZnNldE1pbGxpc2Vjb25kcykudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgYWRkTWlsbGlzZWNvbmRzKGVuZE9mRGF5KHBhcnNlSlNPTihydWxlLnZhbHVlWzFdKSksIG9mZnNldE1pbGxpc2Vjb25kcykudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAuLi5ydWxlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUpTT04ocnVsZS52YWx1ZSBhcyBhbnkpO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2tpcFRpbWV6b25lID8gc3RhcnRPZkRheShwYXJzZWRWYWx1ZSkudG9JU09TdHJpbmcoKSA6IGFkZE1pbGxpc2Vjb25kcyhzdGFydE9mRGF5KHBhcnNlZFZhbHVlKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpO1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnNraXBUaW1lem9uZSA/IGVuZE9mRGF5KHBhcnNlZFZhbHVlKS50b0lTT1N0cmluZygpIDogYWRkTWlsbGlzZWNvbmRzKGVuZE9mRGF5KHBhcnNlZFZhbHVlKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpO1xuXG4gICAgICAgIHN3aXRjaCAocnVsZS5vcGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROb3RFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExlc3NXaGVyZU9wdGlvbnMocnVsZSwgc3RhcnQpO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLkxlc3NPckVxdWFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExlc3NPckVxdWFsV2hlcmVPcHRpb25zKHJ1bGUsIGVuZCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHcmVhdGVyV2hlcmVPcHRpb25zKHJ1bGUsIGVuZCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlck9yRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R3JlYXRlck9yRXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgc3RhcnQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHJ1bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5CZXR3ZWVuLFxuICAgICAgICAgICAgdmFsdWU6IFtzdGFydCwgZW5kXSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkxlc3MsXG4gICAgICAgICAgICB2YWx1ZTogc3RhcnQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gYXdhaXQgc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5HcmVhdGVyLFxuICAgICAgICAgICAgdmFsdWU6IGVuZCxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWZpcnN0IHx8ICFzZWNvbmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbT3Aub3JdOiBbZmlyc3QsIHNlY29uZF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldExlc3NXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIHN0YXJ0OiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXJ0LFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRMZXNzT3JFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzT3JFcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEdyZWF0ZXJXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlcixcbiAgICAgICAgICAgIHZhbHVlOiBlbmQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEdyZWF0ZXJPckVxdWFsV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBzdGFydDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlck9yRXF1YWwsXG4gICAgICAgICAgICB2YWx1ZTogc3RhcnQsXG4gICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -1,12 +1,12 @@
1
- import { QueryModel, QueryRuleModel } from "../..";
1
+ import { IRule, QueryModel, QueryRuleModel } from "../..";
2
2
  export interface DefaultFilterDefinition {
3
3
  filter: QueryRuleModel | QueryModel;
4
4
  required: boolean;
5
5
  }
6
- export declare class DefaultFilter implements DefaultFilterDefinition {
6
+ export declare class DefaultFilter implements DefaultFilterDefinition, IRule {
7
7
  filter: QueryRuleModel | QueryModel;
8
8
  required: boolean;
9
- private _type;
9
+ readonly _type = "default_filter";
10
10
  constructor(filter: QueryRuleModel | QueryModel, required?: boolean);
11
- static validate(definition: DefaultFilterDefinition): boolean;
11
+ static validate(definition: IRule): boolean;
12
12
  }
@@ -13,4 +13,4 @@ class DefaultFilter {
13
13
  }
14
14
  exports.DefaultFilter = DefaultFilter;
15
15
 
16
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kZWZhdWx0LmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxNQUFhLGFBQWE7SUFHdEIsWUFBbUIsTUFBbUMsRUFBUyxXQUFXLElBQUk7UUFBM0QsV0FBTSxHQUFOLE1BQU0sQ0FBNkI7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFPO1FBRnRFLFVBQUssR0FBRyxnQkFBZ0IsQ0FBQztJQUVnRCxDQUFDO0lBRTNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBbUM7UUFDdEQsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssZ0JBQWdCLENBQUM7SUFDcEQsQ0FBQztDQUNKO0FBUkQsc0NBUUMiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2RlZmF1bHQuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVlcnlNb2RlbCwgUXVlcnlSdWxlTW9kZWwgfSBmcm9tIFwiLi4vLi5cIjtcblxuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0RmlsdGVyRGVmaW5pdGlvbiB7XG4gICAgZmlsdGVyOiBRdWVyeVJ1bGVNb2RlbCB8IFF1ZXJ5TW9kZWw7XG4gICAgcmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0RmlsdGVyIGltcGxlbWVudHMgRGVmYXVsdEZpbHRlckRlZmluaXRpb24ge1xuICAgIHByaXZhdGUgX3R5cGUgPSBcImRlZmF1bHRfZmlsdGVyXCI7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlsdGVyOiBRdWVyeVJ1bGVNb2RlbCB8IFF1ZXJ5TW9kZWwsIHB1YmxpYyByZXF1aXJlZCA9IHRydWUpIHt9XG5cbiAgICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlKGRlZmluaXRpb246IERlZmF1bHRGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uW1wiX3R5cGVcIl0gPT09IFwiZGVmYXVsdF9maWx0ZXJcIjtcbiAgICB9XG59XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kZWZhdWx0LmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxNQUFhLGFBQWE7SUFHdEIsWUFBbUIsTUFBbUMsRUFBUyxXQUFXLElBQUk7UUFBM0QsV0FBTSxHQUFOLE1BQU0sQ0FBNkI7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFPO1FBRjlELFVBQUssR0FBRyxnQkFBZ0IsQ0FBQztJQUV3QyxDQUFDO0lBRTNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBaUI7UUFDcEMsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssZ0JBQWdCLENBQUM7SUFDcEQsQ0FBQztDQUNKO0FBUkQsc0NBUUMiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2RlZmF1bHQuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJ1bGUsIFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uLy4uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVmYXVsdEZpbHRlckRlZmluaXRpb24ge1xuICAgIGZpbHRlcjogUXVlcnlSdWxlTW9kZWwgfCBRdWVyeU1vZGVsO1xuICAgIHJlcXVpcmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdEZpbHRlciBpbXBsZW1lbnRzIERlZmF1bHRGaWx0ZXJEZWZpbml0aW9uLCBJUnVsZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IF90eXBlID0gXCJkZWZhdWx0X2ZpbHRlclwiO1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGZpbHRlcjogUXVlcnlSdWxlTW9kZWwgfCBRdWVyeU1vZGVsLCBwdWJsaWMgcmVxdWlyZWQgPSB0cnVlKSB7fVxuXG4gICAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZShkZWZpbml0aW9uOiBJUnVsZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbltcIl90eXBlXCJdID09PSBcImRlZmF1bHRfZmlsdGVyXCI7XG4gICAgfVxufVxuIl19
@@ -5,6 +5,7 @@ import { PathModel } from "../../models/path.model";
5
5
  import { DataFilterUserModel } from "../../models/user.model";
6
6
  import { FilterBaseConfigurationModel } from "../models/filter-configuration.model";
7
7
  import { Condition, QueryModel, QueryRuleModel } from "../models/query.model";
8
+ import { IRule } from "../models/rule.model";
8
9
  import { CustomOperator, FilterOperators, FilterOperatorTypes } from "../operators";
9
10
  import { FilterType } from "../type";
10
11
  export interface FilterConditionRule {
@@ -45,17 +46,17 @@ export interface BaseFilterDefinition {
45
46
  */
46
47
  private?: boolean;
47
48
  }
48
- export interface FilterDefinition extends BaseFilterDefinition {
49
+ export interface FilterDefinition extends BaseFilterDefinition, IRule {
49
50
  type: FilterType;
50
51
  operators: (FilterOperatorTypes | CustomOperator)[];
51
- getConfig<Request>(key: string, req: Request, user?: DataFilterUserModel): Promise<FilterBaseConfigurationModel>;
52
+ getConfig<Request>(key: string, req: Request, user?: DataFilterUserModel): Promise<FilterBaseConfigurationModel | null>;
52
53
  getIncludePaths(rule: QueryRuleModel, data?: object): PathModel[];
53
- getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions>;
54
- getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions>;
54
+ getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
55
+ getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
55
56
  usePathCondition(query: QueryModel): boolean;
56
57
  }
57
58
  export declare abstract class Filter implements FilterDefinition {
58
- private _type;
59
+ readonly _type = "filter";
59
60
  protected _translateService: TranslateAdapter;
60
61
  set translateService(translateService: TranslateAdapter);
61
62
  type: FilterType;
@@ -70,20 +71,20 @@ export declare abstract class Filter implements FilterDefinition {
70
71
  private?: boolean;
71
72
  enabled?: ({ user, request }: EnabledConfig) => Promise<boolean>;
72
73
  paranoid: boolean;
73
- static validate(definition: FilterDefinition): boolean;
74
+ static validate(definition: IRule): boolean;
74
75
  protected constructor(definition?: BaseFilterDefinition);
75
76
  addOperators(...operator: (FilterOperatorTypes | CustomOperator)[]): Filter;
76
77
  removeOperators(...operator: (FilterOperatorTypes | CustomOperator)[]): Filter;
77
78
  setOperators(...operator: (FilterOperatorTypes | CustomOperator)[]): Filter;
78
- getConfig<Request = any>(key: string, request: Request, user?: DataFilterUserModel): Promise<FilterBaseConfigurationModel>;
79
+ getConfig<Request = any>(key: string, request: Request, user?: DataFilterUserModel): Promise<FilterBaseConfigurationModel | null>;
79
80
  getIncludePaths(rule: QueryRuleModel, data?: object): PathModel[];
80
- getWhereOptions(rule: QueryRuleModel, name?: string): Promise<WhereOptions>;
81
- getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions>;
81
+ getWhereOptions(rule: QueryRuleModel, name?: string): Promise<WhereOptions | undefined>;
82
+ getHavingOptions(rule: QueryRuleModel): Promise<WhereOptions | undefined>;
82
83
  usePathCondition(query: QueryModel): boolean;
83
- protected getConditionWhereOptions(where: WhereOptions, rule: QueryRuleModel): WhereOptions;
84
+ protected getConditionWhereOptions(where: WhereOptions | undefined, rule: QueryRuleModel): WhereOptions | undefined;
84
85
  protected generateRuleWhereOptions(filter: FilterCondition, options: WhereOptions[], parentRule: QueryRuleModel): void;
85
- protected getOperatorHavingOptions(operator: FilterOperators, where: WhereOptions): WhereOptions;
86
- protected getOperatorWhereOptions(operator: FilterOperators, where: WhereOptions, value: any): WhereOptions;
86
+ protected getOperatorHavingOptions(operator: FilterOperators, where?: WhereOptions): WhereOptions | undefined;
87
+ protected getOperatorWhereOptions(operator: FilterOperators, where: WhereOptions | undefined, value: any): WhereOptions | undefined;
87
88
  private getRuleFromKeys;
88
89
  private transformCondition;
89
90
  private transformForJsonArray;
@@ -32,6 +32,7 @@ class Filter {
32
32
  return this;
33
33
  }
34
34
  async getConfig(key, request, user) {
35
+ var _a;
35
36
  if (this.private) {
36
37
  return null;
37
38
  }
@@ -41,22 +42,23 @@ class Filter {
41
42
  const config = {
42
43
  type: this.type,
43
44
  operators: await Promise.all(this.operators.map(async (x) => {
45
+ var _a, _b;
44
46
  if (typeof x === "string") {
45
47
  return {
46
48
  id: x,
47
- name: await this._translateService.getTranslation(user === null || user === void 0 ? void 0 : user.language, filter_utils_1.FilterUtils.getOperatorTranslationKey(x))
49
+ name: await this._translateService.getTranslation((_a = user === null || user === void 0 ? void 0 : user.language) !== null && _a !== void 0 ? _a : "", filter_utils_1.FilterUtils.getOperatorTranslationKey(x))
48
50
  };
49
51
  }
50
52
  return {
51
53
  id: x.name,
52
- name: await this._translateService.getTranslation(user === null || user === void 0 ? void 0 : user.language, filter_utils_1.FilterUtils.getCustomOperatorTranslationKey(key, x.name))
54
+ name: await this._translateService.getTranslation((_b = user === null || user === void 0 ? void 0 : user.language) !== null && _b !== void 0 ? _b : "", filter_utils_1.FilterUtils.getCustomOperatorTranslationKey(key, x.name))
53
55
  };
54
56
  }))
55
57
  };
56
58
  if (this.group) {
57
59
  config.group = {
58
60
  key: this.group,
59
- name: await this._translateService.getTranslation(user === null || user === void 0 ? void 0 : user.language, filter_utils_1.FilterUtils.getGroupTranslationKey(this.group))
61
+ name: await this._translateService.getTranslation((_a = user === null || user === void 0 ? void 0 : user.language) !== null && _a !== void 0 ? _a : "", filter_utils_1.FilterUtils.getGroupTranslationKey(this.group))
60
62
  };
61
63
  }
62
64
  return config;
@@ -78,15 +80,15 @@ class Filter {
78
80
  rule.operation = op.operator;
79
81
  }
80
82
  const where = ((rule === null || rule === void 0 ? void 0 : rule.value) === undefined || this.having) ?
81
- this.getConditionWhereOptions(null, rule) :
83
+ this.getConditionWhereOptions(undefined, rule) :
82
84
  this.getConditionWhereOptions(this.transformCondition(rule, name), rule);
83
85
  return this.getOperatorWhereOptions(rule.operation, where, rule.value);
84
86
  }
85
87
  async getHavingOptions(rule) {
86
88
  if (!this.having) {
87
- return this.getOperatorHavingOptions(rule.operation, null);
89
+ return this.getOperatorHavingOptions(rule.operation);
88
90
  }
89
- let options;
91
+ let options = undefined;
90
92
  if (this.having.attribute) {
91
93
  options = this.having;
92
94
  }
@@ -170,7 +172,7 @@ class Filter {
170
172
  return where;
171
173
  }
172
174
  if (!op.where && !op.operator) {
173
- return null;
175
+ return;
174
176
  }
175
177
  if (!op.where) {
176
178
  return where;
@@ -206,6 +208,7 @@ class Filter {
206
208
  return this.transformForJsonObject(rule, name);
207
209
  }
208
210
  transformForJsonArray(rule, name) {
211
+ var _a;
209
212
  const colName = this.path ? sequelize_1.Sequelize.col(name) : sequelize_1.Sequelize.literal(name);
210
213
  if (rule.operation === operators_1.FilterOperatorTypes.Contains || rule.operation === operators_1.FilterOperatorTypes.NotContains) {
211
214
  /**
@@ -216,17 +219,18 @@ class Filter {
216
219
  value: true
217
220
  };
218
221
  const value = typeof rule.value === "string" ? `"${rule.value}"` : rule.value;
219
- if (this.json.path) {
222
+ if ((_a = this.json) === null || _a === void 0 ? void 0 : _a.path) {
220
223
  return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value, this.json.path), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
221
224
  }
222
225
  return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
223
226
  }
224
- return null;
227
+ return;
225
228
  }
226
229
  transformForJsonObject(rule, name) {
230
+ var _a;
227
231
  const colName = this.path ? sequelize_1.Sequelize.col(name) : sequelize_1.Sequelize.literal(name);
228
232
  const value = sequelize_utils_1.SequelizeUtils.generateWhereValue(rule);
229
- if (this.json.path) {
233
+ if ((_a = this.json) === null || _a === void 0 ? void 0 : _a.path) {
230
234
  return sequelize_1.Sequelize.where(sequelize_1.Sequelize.fn("JSON_EXTRACT", colName, this.json.path), value);
231
235
  }
232
236
  return sequelize_1.Sequelize.where(sequelize_1.Sequelize.fn("JSON_EXTRACT", colName), value);
@@ -234,4 +238,4 @@ class Filter {
234
238
  }
235
239
  exports.Filter = Filter;
236
240
 
237
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQThGO0FBSzlGLDJEQUF1RDtBQUN2RCxrREFBOEM7QUFJOUMsNENBQW9GO0FBNERwRixNQUFzQixNQUFNO0lBS3hCLElBQVcsZ0JBQWdCLENBQUMsZ0JBQWtDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM5QyxDQUFDO0lBZU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUE0QjtRQUMvQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQXNCLFVBQWlDO1FBekIvQyxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBbUJsQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBT25CLElBQUksVUFBVSxFQUFFO1lBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLEdBQUcsUUFBa0Q7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZSxDQUFDLEdBQUcsUUFBa0Q7UUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsR0FBRyxRQUFrRDtRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBZ0IsR0FBVyxFQUFFLE9BQWdCLEVBQUUsSUFBMEI7UUFDM0YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRTtZQUMxRCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixTQUFTLEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsRUFBRTtnQkFDdEQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7b0JBQ3ZCLE9BQU87d0JBQ0gsRUFBRSxFQUFFLENBQUM7d0JBQ0wsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FDN0MsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFFBQVEsRUFDZCwwQkFBVyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUMzQztxQkFDSixDQUFDO2lCQUNMO2dCQUVELE9BQU87b0JBQ0gsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJO29CQUNWLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQzdDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEVBQ2QsMEJBQVcsQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUMzRDtpQkFDSixDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7U0FDMEIsQ0FBQztRQUVsQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDWixNQUFNLENBQUMsS0FBSyxHQUFHO2dCQUNYLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDZixJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLEVBQUUsMEJBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEgsQ0FBQTtTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFvQixFQUFFLElBQWE7UUFDdEQsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFvQixFQUFFLElBQWE7UUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3RHO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDckMsQ0FBQyxDQUFtQixDQUFDO1FBQ3JCLElBQUksRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLFFBQVEsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztTQUNoQztRQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsS0FBSyxNQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0UsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBb0I7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzlEO1FBRUQsSUFBSSxPQUFxQixDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDdkIsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDekI7YUFBTTtZQUNILE1BQU0sS0FBSyxHQUFHLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFtQixDQUFDO1lBQ3hFLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUU7Z0JBQ2hELE9BQU8sR0FBRyxJQUFBLGlCQUFLLEVBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN2QztTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBaUI7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUNoRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzlCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFUyx3QkFBd0IsQ0FBQyxLQUFtQixFQUFFLElBQW9CO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3ZHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRVMsd0JBQXdCLENBQUMsTUFBdUIsRUFBRSxPQUF1QixFQUFFLFVBQTBCO1FBQzNHLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUM3QixNQUFNLENBQUMsR0FBRyxJQUF1QixDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtnQkFDYixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDekYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3pELFNBQVM7YUFDWjtZQUVELElBQUksQ0FBQyxHQUFHLElBQTJCLENBQUM7WUFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0NBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNqRixJQUFJLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7Z0JBQy9CLENBQUMsR0FBRztvQkFDQSxHQUFHLENBQUM7b0JBQ0osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztpQkFDbkMsQ0FBQTthQUNKO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDVCxDQUFDLElBQUksQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBYyxDQUFDO2FBQzVELENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVTLHdCQUF3QixDQUFDLFFBQXlCLEVBQUUsS0FBbUI7UUFDN0UsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztRQUMvQixDQUFDLENBQW1CLENBQUM7UUFDckIsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDWixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sS0FBSztZQUNSLENBQUMsQ0FBQztnQkFDSSxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO2FBQy9CO1lBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUVTLHVCQUF1QixDQUFDLFFBQXlCLEVBQUUsS0FBbUIsRUFBRSxLQUFVO1FBQ3hGLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9CLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7UUFDL0IsQ0FBQyxDQUFtQixDQUFDO1FBQ3JCLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUMzQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUU7WUFDWCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDNUUsT0FBTyxLQUFLO1lBQ1IsQ0FBQyxDQUFDO2dCQUNJLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQzthQUM3QjtZQUNILENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDbEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFpQixFQUFFLElBQWM7UUFDckQsTUFBTSxLQUFLLEdBQXFCLEVBQUUsQ0FBQztRQUNuQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDNUIsSUFBSyxJQUFtQixDQUFDLFNBQVMsRUFBRTtnQkFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ2pFO2lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLElBQXVCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMxRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQXNCLENBQUMsQ0FBQzthQUN0QztTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQW9CLEVBQUUsSUFBWTtRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNaLE9BQU87Z0JBQ0gsQ0FBQyxJQUFJLENBQUMsRUFBRSxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQzthQUNsRCxDQUFDO1NBQ0w7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDakQ7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQW9CLEVBQUUsSUFBWTtRQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFdBQVcsRUFBRTtZQUN2Rzs7ZUFFRztZQUNILE1BQU0sT0FBTyxHQUFHO2dCQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQywrQkFBbUIsQ0FBQyxRQUFRO2dCQUNySCxLQUFLLEVBQUUsSUFBSTthQUNkLENBQUE7WUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUM5RSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNoQixPQUFPLElBQUEsaUJBQUssRUFBQyxJQUFBLGNBQUUsRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7YUFDMUk7WUFDRCxPQUFPLElBQUEsaUJBQUssRUFBQyxJQUFBLGNBQUUsRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7U0FDMUg7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBb0IsRUFBRSxJQUFZO1FBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRSxNQUFNLEtBQUssR0FBRyxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDaEIsT0FBTyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxxQkFBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBa0IsQ0FBQyxDQUFDO1NBQ3JHO1FBRUQsT0FBTyxxQkFBUyxDQUFDLEtBQUssQ0FBQyxxQkFBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBa0IsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7Q0FDSjtBQWxTRCx3QkFrU0MiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2ZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZuLCBMb2dpY1R5cGUsIE9wLCBTZXF1ZWxpemUsIHdoZXJlLCBXaGVyZU9wZXJhdG9ycywgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuLi8uLi9hZGFwdGVycy90cmFuc2xhdGUuYWRhcHRlclwiO1xuaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi4vLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJVdGlscyB9IGZyb20gXCIuLi9maWx0ZXIudXRpbHNcIjtcbmltcG9ydCB7IEZpbHRlckJhc2VDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBDb25kaXRpb24sIFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9xdWVyeS5tb2RlbFwiO1xuaW1wb3J0IHsgUnVsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9ydWxlLm1vZGVsXCI7XG5pbXBvcnQgeyBDdXN0b21PcGVyYXRvciwgRmlsdGVyT3BlcmF0b3JzLCBGaWx0ZXJPcGVyYXRvclR5cGVzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5cbi8vIFRPRE86IERlcHJlY2F0ZSBrZXkgdG8gdXNlIGF0dHJpYnV0ZSBpbnN0ZWFkIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgQmFzZUZpbHRlckRlZmluaXRpb25cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ29uZGl0aW9uUnVsZSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9ycztcbiAgICB2YWx1ZT86ICh1bmtub3duIHwgdW5rbm93bltdKSB8ICgodmFsdWU6IHVua25vd24gfCB1bmtub3duW10pID0+IHVua25vd24gfCB1bmtub3duW10pO1xuICAgIHdoZXJlPzogSW5jbHVkZVdoZXJlTW9kZWw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ29uZGl0aW9uIHtcbiAgICBjb25kaXRpb246IENvbmRpdGlvbjtcbiAgICBydWxlczogKEZpbHRlckNvbmRpdGlvblJ1bGUgfCBGaWx0ZXJDb25kaXRpb24pW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkNvbmZpZyB7XG4gICAgdHlwZTogXCJhcnJheVwiIHwgXCJvYmplY3RcIjtcbiAgICBwYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQYXRoQ29uZGl0aW9uID0gYm9vbGVhbiB8IHtcbiAgICBbZmlsdGVyOiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlZENvbmZpZzxVc2VyID0gYW55LCBSZXF1ZXN0ID0gYW55PiB7XG4gICAgdXNlcj86IFVzZXI7XG4gICAgcmVxdWVzdD86IFJlcXVlc3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRmlsdGVyRGVmaW5pdGlvbiB7XG4gICAgYXR0cmlidXRlOiBzdHJpbmc7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICBoYXZpbmc/OiBhbnk7XG4gICAgcGFyYW5vaWQ/OiBib29sZWFuO1xuICAgIGNvbmRpdGlvbj86IEZpbHRlckNvbmRpdGlvbjtcbiAgICBncm91cD86IHN0cmluZztcbiAgICB3aGVyZT86IEluY2x1ZGVXaGVyZU1vZGVsO1xuICAgIHBhdGhDb25kaXRpb24/OiBQYXRoQ29uZGl0aW9uO1xuICAgIGpzb24/OiBKc29uQ29uZmlnO1xuICAgIGVuYWJsZWQ/OiAoeyB1c2VyLCByZXF1ZXN0IH06IEVuYWJsZWRDb25maWcpID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiBQcml2YXRlIG1lYW5zIHRoYXQgdGhlIGNvbmZpZyB3aWxsIG5vdCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwcml2YXRlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJEZWZpbml0aW9uIGV4dGVuZHMgQmFzZUZpbHRlckRlZmluaXRpb24ge1xuICAgIHR5cGU6IEZpbHRlclR5cGU7XG4gICAgb3BlcmF0b3JzOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdO1xuXG4gICAgZ2V0Q29uZmlnPFJlcXVlc3Q+KGtleTogc3RyaW5nLCByZXE6IFJlcXVlc3QsIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsPjtcbiAgICBnZXRJbmNsdWRlUGF0aHMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQYXRoTW9kZWxbXTtcbiAgICBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz47XG4gICAgZ2V0SGF2aW5nT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPjtcbiAgICB1c2VQYXRoQ29uZGl0aW9uKHF1ZXJ5OiBRdWVyeU1vZGVsKTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpbHRlciBpbXBsZW1lbnRzIEZpbHRlckRlZmluaXRpb24ge1xuICAgIHByaXZhdGUgX3R5cGUgPSBcImZpbHRlclwiO1xuXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyO1xuXG4gICAgcHVibGljIHNldCB0cmFuc2xhdGVTZXJ2aWNlKHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZUFkYXB0ZXIpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgcHVibGljIHR5cGU6IEZpbHRlclR5cGU7XG4gICAgcHVibGljIG9wZXJhdG9yczogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXTtcbiAgICBwdWJsaWMgZ3JvdXA6IHN0cmluZztcbiAgICBwdWJsaWMgYXR0cmlidXRlOiBzdHJpbmc7XG4gICAgcHVibGljIGhhdmluZz86IGFueTtcbiAgICBwdWJsaWMgcGF0aD86IHN0cmluZztcbiAgICBwdWJsaWMgY29uZGl0aW9uPzogRmlsdGVyQ29uZGl0aW9uO1xuICAgIHB1YmxpYyBwYXRoQ29uZGl0aW9uPzogUGF0aENvbmRpdGlvbjtcbiAgICBwdWJsaWMganNvbj86IEpzb25Db25maWc7XG4gICAgcHVibGljIHByaXZhdGU/OiBib29sZWFuO1xuICAgIHB1YmxpYyBlbmFibGVkPzogKHsgdXNlciwgcmVxdWVzdCB9OiBFbmFibGVkQ29uZmlnKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyBwYXJhbm9pZCA9IHRydWU7XG5cbiAgICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlKGRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25bXCJfdHlwZVwiXSA9PT0gXCJmaWx0ZXJcIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGVmaW5pdGlvbj86IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE9wZXJhdG9ycyguLi5vcGVyYXRvcjogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXSk6IEZpbHRlciB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2goLi4ub3BlcmF0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlT3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycy5maWx0ZXIoeCA9PiAhb3BlcmF0b3Iuc29tZShvcCA9PiBvcCA9PT0geCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbLi4ub3BlcmF0b3JdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnPFJlcXVlc3QgPSBhbnk+KGtleTogc3RyaW5nLCByZXF1ZXN0OiBSZXF1ZXN0LCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8RmlsdGVyQmFzZUNvbmZpZ3VyYXRpb25Nb2RlbD4ge1xuICAgICAgICBpZiAodGhpcy5wcml2YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZWQgJiYgIShhd2FpdCB0aGlzLmVuYWJsZWQoeyB1c2VyLCByZXF1ZXN0IH0pKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBvcGVyYXRvcnM6IGF3YWl0IFByb21pc2UuYWxsKHRoaXMub3BlcmF0b3JzLm1hcChhc3luYyB4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyPy5sYW5ndWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRPcGVyYXRvclRyYW5zbGF0aW9uS2V5KHgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/Lmxhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyVXRpbHMuZ2V0Q3VzdG9tT3BlcmF0b3JUcmFuc2xhdGlvbktleShrZXksIHgubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfSBhcyBGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsO1xuXG4gICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgICAgICBjb25maWcuZ3JvdXAgPSB7XG4gICAgICAgICAgICAgICAga2V5OiB0aGlzLmdyb3VwLFxuICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24odXNlcj8ubGFuZ3VhZ2UsIEZpbHRlclV0aWxzLmdldEdyb3VwVHJhbnNsYXRpb25LZXkodGhpcy5ncm91cCkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5jbHVkZVBhdGhzKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBkYXRhPzogb2JqZWN0KTogUGF0aE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgbmFtZT86IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgbmFtZSA9IHRoaXMucGF0aCA/IFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKHRoaXMuYXR0cmlidXRlLCB0aGlzLnBhdGgpIDogdGhpcy5hdHRyaWJ1dGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcCA9IHRoaXMub3BlcmF0b3JzLmZpbmQoeCA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4Lm5hbWUgPT09IHJ1bGUub3BlcmF0aW9uO1xuICAgICAgICB9KSBhcyBDdXN0b21PcGVyYXRvcjtcbiAgICAgICAgaWYgKG9wPy5vcGVyYXRvcikge1xuICAgICAgICAgICAgcnVsZS5vcGVyYXRpb24gPSBvcC5vcGVyYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0gKHJ1bGU/LnZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy5oYXZpbmcpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKG51bGwsIHJ1bGUpIDpcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHRoaXMudHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGUsIG5hbWUpLCBydWxlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvcldoZXJlT3B0aW9ucyhydWxlLm9wZXJhdGlvbiwgd2hlcmUsIHJ1bGUudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRIYXZpbmdPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgaWYgKCF0aGlzLmhhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25zOiBXaGVyZU9wdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLmhhdmluZy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhdmluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpIGFzIFdoZXJlT3BlcmF0b3JzO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB3aGVyZSh0aGlzLmhhdmluZywgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucGF0aENvbmRpdGlvbiB8fCB0eXBlb2YgdGhpcy5wYXRoQ29uZGl0aW9uID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucGF0aENvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlRnJvbUtleXMocXVlcnksIGtleXMpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IHJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzLmV2ZXJ5KHggPT4gdGhpcy5wYXRoQ29uZGl0aW9uW3guaWRdID09PSB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHdoZXJlOiBXaGVyZU9wdGlvbnMsIHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogV2hlcmVPcHRpb25zIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHdoZXJlID8gW3doZXJlXSA6IFtdO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNvbmRpdGlvbi5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBjb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnModGhpcy5jb25kaXRpb24sIGNvbmRpdGlvbnMsIHJ1bGUpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnMoZmlsdGVyOiBGaWx0ZXJDb25kaXRpb24sIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdLCBwYXJlbnRSdWxlOiBRdWVyeVJ1bGVNb2RlbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZmlsdGVyLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGMuY29uZGl0aW9uID09PSBcImFuZFwiID8geyBbT3AuYW5kXTogY29uZGl0aW9ucyB9IDogeyBbT3Aub3JdOiBjb25kaXRpb25zIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSdWxlV2hlcmVPcHRpb25zKGMsIGNvbmRpdGlvbnMsIHBhcmVudFJ1bGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgciA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uUnVsZTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSByLnBhdGggPyBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZShyLmtleSwgci5wYXRoKSA6IHIua2V5O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByLnZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5yLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogci52YWx1ZShwYXJlbnRSdWxlLnZhbHVlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgW25hbWVdOiBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUociBhcyBSdWxlTW9kZWwpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRPcGVyYXRvckhhdmluZ09wdGlvbnMob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9ycywgd2hlcmU6IFdoZXJlT3B0aW9ucyk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IG9wID0gdGhpcy5vcGVyYXRvcnMuZmluZCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHgubmFtZSA9PT0gb3BlcmF0b3I7XG4gICAgICAgIH0pIGFzIEN1c3RvbU9wZXJhdG9yO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wLmhhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbd2hlcmUsIG9wLmhhdmluZ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBvcC5oYXZpbmc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE9wZXJhdG9yV2hlcmVPcHRpb25zKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcnMsIHdoZXJlOiBXaGVyZU9wdGlvbnMsIHZhbHVlOiBhbnkpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBjb25zdCBvcCA9IHRoaXMub3BlcmF0b3JzLmZpbmQoeCA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB4Lm5hbWUgPT09IG9wZXJhdG9yO1xuICAgICAgICB9KSBhcyBDdXN0b21PcGVyYXRvcjtcbiAgICAgICAgaWYgKCFvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcC53aGVyZSAmJiAhb3Aub3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcC53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3BXaGVyZSA9IHR5cGVvZiBvcC53aGVyZSA9PT0gXCJmdW5jdGlvblwiID8gb3Aud2hlcmUodmFsdWUpIDogb3Aud2hlcmU7XG4gICAgICAgIHJldHVybiB3aGVyZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBbT3AuYW5kXTogW3doZXJlLCBvcFdoZXJlXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wV2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlRnJvbUtleXMocXVlcnk6IFF1ZXJ5TW9kZWwsIGtleXM6IHN0cmluZ1tdKTogUXVlcnlSdWxlTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBRdWVyeVJ1bGVNb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgaWYgKChydWxlIGFzIFF1ZXJ5TW9kZWwpLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4udGhpcy5nZXRSdWxlRnJvbUtleXMocnVsZSBhcyBRdWVyeU1vZGVsLCBrZXlzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleXMuc29tZSh4ID0+IChydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsKS5pZCA9PT0geCkpIHtcbiAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBpZiAoIXRoaXMuanNvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbbmFtZV06IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShydWxlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmpzb24udHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uQXJyYXkocnVsZSwgbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uT2JqZWN0KHJ1bGUsIG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRm9ySnNvbkFycmF5KHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplLmNvbChuYW1lKSA6IFNlcXVlbGl6ZS5saXRlcmFsKG5hbWUpO1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90Q29udGFpbnMpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2Ugb3ZlcnJpZGUgdGhlIHJ1bGUgdG8gdXNlIGFuIGVxdWFsIG9yIG5vdCBlcXVhbCB3aXRoIGEgSlNPTl9DT05UQUlOUyBmdW5jdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBuZXdSdWxlID0ge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgPyBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsIDogRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBydWxlLnZhbHVlID09PSBcInN0cmluZ1wiID8gYFwiJHtydWxlLnZhbHVlfVwiYCA6IHJ1bGUudmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5qc29uLnBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2hlcmUoZm4oXCJKU09OX0NPTlRBSU5TXCIsIGNvbE5hbWUsIHZhbHVlLCB0aGlzLmpzb24ucGF0aCksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2xOYW1lLCB2YWx1ZSksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1Gb3JKc29uT2JqZWN0KHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplLmNvbChuYW1lKSA6IFNlcXVlbGl6ZS5saXRlcmFsKG5hbWUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShydWxlKTtcbiAgICAgICAgaWYgKHRoaXMuanNvbi5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lLCB0aGlzLmpzb24ucGF0aCksIHZhbHVlIGFzIExvZ2ljVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lKSwgdmFsdWUgYXMgTG9naWNUeXBlKTtcbiAgICB9XG59XG4iXX0=
241
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQThGO0FBSzlGLDJEQUF1RDtBQUN2RCxrREFBOEM7QUFJOUMsNENBQW9GO0FBNERwRixNQUFzQixNQUFNO0lBS3hCLElBQVcsZ0JBQWdCLENBQUMsZ0JBQWtDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM5QyxDQUFDO0lBZU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFpQjtRQUNwQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQXNCLFVBQWlDO1FBekJ2QyxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBbUIxQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBT25CLElBQUksVUFBVSxFQUFFO1lBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLEdBQUcsUUFBa0Q7UUFDckUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZSxDQUFDLEdBQUcsUUFBa0Q7UUFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsR0FBRyxRQUFrRDtRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FB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LGVBQWUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFvQixDQUFjLENBQUMsQ0FBQTtTQUMxSDtRQUVELE9BQU87SUFDWCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBb0IsRUFBRSxJQUFZOztRQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsTUFBTSxLQUFLLEdBQUcsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLE1BQUEsSUFBSSxDQUFDLElBQUksMENBQUUsSUFBSSxFQUFFO1lBQ2pCLE9BQU8scUJBQVMsQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQWtCLENBQUMsQ0FBQztTQUNyRztRQUVELE9BQU8scUJBQVMsQ0FBQyxLQUFLLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEtBQWtCLENBQUMsQ0FBQztJQUN0RixDQUFDO0NBQ0o7QUFsU0Qsd0JBa1NDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbiwgTG9naWNUeXBlLCBPcCwgU2VxdWVsaXplLCB3aGVyZSwgV2hlcmVPcGVyYXRvcnMsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi4vLi4vYWRhcHRlcnMvdHJhbnNsYXRlLmFkYXB0ZXJcIjtcbmltcG9ydCB7IEluY2x1ZGVXaGVyZU1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9pbmNsdWRlLm1vZGVsXCI7XG5pbXBvcnQgeyBQYXRoTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3BhdGgubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9maWx0ZXItY29uZmlndXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uLCBRdWVyeU1vZGVsLCBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvcXVlcnkubW9kZWxcIjtcbmltcG9ydCB7IElSdWxlLCBSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3J1bGUubW9kZWxcIjtcbmltcG9ydCB7IEN1c3RvbU9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcblxuLy8gVE9ETzogRGVwcmVjYXRlIGtleSB0byB1c2UgYXR0cmlidXRlIGluc3RlYWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBCYXNlRmlsdGVyRGVmaW5pdGlvblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb25SdWxlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JzO1xuICAgIHZhbHVlPzogKHVua25vd24gfCB1bmtub3duW10pIHwgKCh2YWx1ZTogdW5rbm93biB8IHVua25vd25bXSkgPT4gdW5rbm93biB8IHVua25vd25bXSk7XG4gICAgd2hlcmU/OiBJbmNsdWRlV2hlcmVNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb24ge1xuICAgIGNvbmRpdGlvbjogQ29uZGl0aW9uO1xuICAgIHJ1bGVzOiAoRmlsdGVyQ29uZGl0aW9uUnVsZSB8IEZpbHRlckNvbmRpdGlvbilbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc29uQ29uZmlnIHtcbiAgICB0eXBlOiBcImFycmF5XCIgfCBcIm9iamVjdFwiO1xuICAgIHBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFBhdGhDb25kaXRpb24gPSBib29sZWFuIHwge1xuICAgIFtmaWx0ZXI6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmFibGVkQ29uZmlnPFVzZXIgPSBhbnksIFJlcXVlc3QgPSBhbnk+IHtcbiAgICB1c2VyPzogVXNlcjtcbiAgICByZXF1ZXN0PzogUmVxdWVzdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIGhhdmluZz86IGFueTtcbiAgICBwYXJhbm9pZD86IGJvb2xlYW47XG4gICAgY29uZGl0aW9uPzogRmlsdGVyQ29uZGl0aW9uO1xuICAgIGdyb3VwPzogc3RyaW5nO1xuICAgIHdoZXJlPzogSW5jbHVkZVdoZXJlTW9kZWw7XG4gICAgcGF0aENvbmRpdGlvbj86IFBhdGhDb25kaXRpb247XG4gICAganNvbj86IEpzb25Db25maWc7XG4gICAgZW5hYmxlZD86ICh7IHVzZXIsIHJlcXVlc3QgfTogRW5hYmxlZENvbmZpZykgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuICAgIC8qKlxuICAgICAqIFByaXZhdGUgbWVhbnMgdGhhdCB0aGUgY29uZmlnIHdpbGwgbm90IGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHByaXZhdGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckRlZmluaXRpb24gZXh0ZW5kcyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgSVJ1bGUge1xuICAgIHR5cGU6IEZpbHRlclR5cGU7XG4gICAgb3BlcmF0b3JzOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdO1xuXG4gICAgZ2V0Q29uZmlnPFJlcXVlc3Q+KGtleTogc3RyaW5nLCByZXE6IFJlcXVlc3QsIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJCYXNlQ29uZmlndXJhdGlvbk1vZGVsIHwgbnVsbD47XG4gICAgZ2V0SW5jbHVkZVBhdGhzKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBkYXRhPzogb2JqZWN0KTogUGF0aE1vZGVsW107XG4gICAgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+O1xuICAgIGdldEhhdmluZ09wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD47XG4gICAgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWx0ZXIgaW1wbGVtZW50cyBGaWx0ZXJEZWZpbml0aW9uIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgX3R5cGUgPSBcImZpbHRlclwiO1xuXG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlITogVHJhbnNsYXRlQWRhcHRlcjtcblxuICAgIHB1YmxpYyBzZXQgdHJhbnNsYXRlU2VydmljZSh0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0eXBlITogRmlsdGVyVHlwZTtcbiAgICBwdWJsaWMgb3BlcmF0b3JzITogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXTtcbiAgICBwdWJsaWMgZ3JvdXAhOiBzdHJpbmc7XG4gICAgcHVibGljIGF0dHJpYnV0ZSE6IHN0cmluZztcbiAgICBwdWJsaWMgaGF2aW5nPzogYW55O1xuICAgIHB1YmxpYyBwYXRoPzogc3RyaW5nO1xuICAgIHB1YmxpYyBjb25kaXRpb24/OiBGaWx0ZXJDb25kaXRpb247XG4gICAgcHVibGljIHBhdGhDb25kaXRpb24/OiBQYXRoQ29uZGl0aW9uO1xuICAgIHB1YmxpYyBqc29uPzogSnNvbkNvbmZpZztcbiAgICBwdWJsaWMgcHJpdmF0ZT86IGJvb2xlYW47XG4gICAgcHVibGljIGVuYWJsZWQ/OiAoeyB1c2VyLCByZXF1ZXN0IH06IEVuYWJsZWRDb25maWcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgcHVibGljIHBhcmFub2lkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGUoZGVmaW5pdGlvbjogSVJ1bGUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25bXCJfdHlwZVwiXSA9PT0gXCJmaWx0ZXJcIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZGVmaW5pdGlvbj86IEJhc2VGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZmluaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE9wZXJhdG9ycyguLi5vcGVyYXRvcjogKEZpbHRlck9wZXJhdG9yVHlwZXMgfCBDdXN0b21PcGVyYXRvcilbXSk6IEZpbHRlciB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2goLi4ub3BlcmF0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlT3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycy5maWx0ZXIoeCA9PiAhb3BlcmF0b3Iuc29tZShvcCA9PiBvcCA9PT0geCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T3BlcmF0b3JzKC4uLm9wZXJhdG9yOiAoRmlsdGVyT3BlcmF0b3JUeXBlcyB8IEN1c3RvbU9wZXJhdG9yKVtdKTogRmlsdGVyIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbLi4ub3BlcmF0b3JdO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnPFJlcXVlc3QgPSBhbnk+KGtleTogc3RyaW5nLCByZXF1ZXN0OiBSZXF1ZXN0LCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8RmlsdGVyQmFzZUNvbmZpZ3VyYXRpb25Nb2RlbCB8IG51bGw+IHtcbiAgICAgICAgaWYgKHRoaXMucHJpdmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5lbmFibGVkICYmICEoYXdhaXQgdGhpcy5lbmFibGVkKHsgdXNlciwgcmVxdWVzdCB9KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgb3BlcmF0b3JzOiBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLm9wZXJhdG9ycy5tYXAoYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj8ubGFuZ3VhZ2UgPz8gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRPcGVyYXRvclRyYW5zbGF0aW9uS2V5KHgpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI/Lmxhbmd1YWdlID8/IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJVdGlscy5nZXRDdXN0b21PcGVyYXRvclRyYW5zbGF0aW9uS2V5KGtleSwgeC5uYW1lKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9IGFzIEZpbHRlckJhc2VDb25maWd1cmF0aW9uTW9kZWw7XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgICAgICAgIGNvbmZpZy5ncm91cCA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuZ3JvdXAsXG4gICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbih1c2VyPy5sYW5ndWFnZSA/PyBcIlwiLCBGaWx0ZXJVdGlscy5nZXRHcm91cFRyYW5zbGF0aW9uS2V5KHRoaXMuZ3JvdXApKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluY2x1ZGVQYXRocyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgZGF0YT86IG9iamVjdCk6IFBhdGhNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIG5hbWUgPSB0aGlzLnBhdGggPyBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZSh0aGlzLmF0dHJpYnV0ZSwgdGhpcy5wYXRoKSA6IHRoaXMuYXR0cmlidXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3AgPSB0aGlzLm9wZXJhdG9ycy5maW5kKHggPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBydWxlLm9wZXJhdGlvbjtcbiAgICAgICAgfSkgYXMgQ3VzdG9tT3BlcmF0b3I7XG4gICAgICAgIGlmIChvcD8ub3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHJ1bGUub3BlcmF0aW9uID0gb3Aub3BlcmF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IChydWxlPy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaGF2aW5nKSA/XG4gICAgICAgICAgICB0aGlzLmdldENvbmRpdGlvbldoZXJlT3B0aW9ucyh1bmRlZmluZWQsIHJ1bGUpIDpcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHRoaXMudHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGUsIG5hbWUpLCBydWxlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvcldoZXJlT3B0aW9ucyhydWxlLm9wZXJhdGlvbiwgd2hlcmUsIHJ1bGUudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRIYXZpbmdPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmhhdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25zOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmhhdmluZy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhdmluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpIGFzIFdoZXJlT3BlcmF0b3JzO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB3aGVyZSh0aGlzLmhhdmluZywgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKHJ1bGUub3BlcmF0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXNlUGF0aENvbmRpdGlvbihxdWVyeTogUXVlcnlNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMucGF0aENvbmRpdGlvbiB8fCB0eXBlb2YgdGhpcy5wYXRoQ29uZGl0aW9uID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucGF0aENvbmRpdGlvbik7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlRnJvbUtleXMocXVlcnksIGtleXMpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IHJ1bGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzLmV2ZXJ5KHggPT4gKHRoaXMucGF0aENvbmRpdGlvbiBhcyBhbnkpW3guaWRdID09PSB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q29uZGl0aW9uV2hlcmVPcHRpb25zKHdoZXJlOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQsIHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHdoZXJlID8gW3doZXJlXSA6IFtdO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNvbmRpdGlvbi5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBjb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnModGhpcy5jb25kaXRpb24sIGNvbmRpdGlvbnMsIHJ1bGUpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZVJ1bGVXaGVyZU9wdGlvbnMoZmlsdGVyOiBGaWx0ZXJDb25kaXRpb24sIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdLCBwYXJlbnRSdWxlOiBRdWVyeVJ1bGVNb2RlbCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZmlsdGVyLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChjLmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IGNvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogY29uZGl0aW9ucyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZVdoZXJlT3B0aW9ucyhjLCBjb25kaXRpb25zLCBwYXJlbnRSdWxlKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHIgPSBydWxlIGFzIEZpbHRlckNvbmRpdGlvblJ1bGU7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gci5wYXRoID8gU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoci5rZXksIHIucGF0aCkgOiByLmtleTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygci52YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgciA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHIudmFsdWUocGFyZW50UnVsZS52YWx1ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIFtuYW1lXTogU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHIgYXMgUnVsZU1vZGVsKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0T3BlcmF0b3JIYXZpbmdPcHRpb25zKG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcnMsIHdoZXJlPzogV2hlcmVPcHRpb25zKTogV2hlcmVPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3Qgb3AgPSB0aGlzLm9wZXJhdG9ycy5maW5kKHggPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geC5uYW1lID09PSBvcGVyYXRvcjtcbiAgICAgICAgfSkgYXMgQ3VzdG9tT3BlcmF0b3I7XG4gICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgIHJldHVybiB3aGVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3AuaGF2aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgW09wLmFuZF06IFt3aGVyZSwgb3AuaGF2aW5nXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wLmhhdmluZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0T3BlcmF0b3JXaGVyZU9wdGlvbnMob3BlcmF0b3I6IEZpbHRlck9wZXJhdG9ycywgd2hlcmU6IFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZCwgdmFsdWU6IGFueSk6IFdoZXJlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IG9wID0gdGhpcy5vcGVyYXRvcnMuZmluZCh4ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHgubmFtZSA9PT0gb3BlcmF0b3I7XG4gICAgICAgIH0pIGFzIEN1c3RvbU9wZXJhdG9yO1xuICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wLndoZXJlICYmICFvcC5vcGVyYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcC53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3BXaGVyZSA9IHR5cGVvZiBvcC53aGVyZSA9PT0gXCJmdW5jdGlvblwiID8gb3Aud2hlcmUodmFsdWUpIDogb3Aud2hlcmU7XG4gICAgICAgIHJldHVybiB3aGVyZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBbT3AuYW5kXTogW3doZXJlLCBvcFdoZXJlXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG9wV2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdWxlRnJvbUtleXMocXVlcnk6IFF1ZXJ5TW9kZWwsIGtleXM6IHN0cmluZ1tdKTogUXVlcnlSdWxlTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IHJ1bGVzOiBRdWVyeVJ1bGVNb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgaWYgKChydWxlIGFzIFF1ZXJ5TW9kZWwpLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2goLi4udGhpcy5nZXRSdWxlRnJvbUtleXMocnVsZSBhcyBRdWVyeU1vZGVsLCBrZXlzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleXMuc29tZSh4ID0+IChydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsKS5pZCA9PT0geCkpIHtcbiAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtQ29uZGl0aW9uKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIXRoaXMuanNvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbbmFtZV06IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShydWxlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmpzb24udHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uQXJyYXkocnVsZSwgbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1Gb3JKc29uT2JqZWN0KHJ1bGUsIG5hbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRm9ySnNvbkFycmF5KHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lOiBzdHJpbmcpOiBXaGVyZU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplLmNvbChuYW1lKSA6IFNlcXVlbGl6ZS5saXRlcmFsKG5hbWUpO1xuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgfHwgcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuTm90Q29udGFpbnMpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2Ugb3ZlcnJpZGUgdGhlIHJ1bGUgdG8gdXNlIGFuIGVxdWFsIG9yIG5vdCBlcXVhbCB3aXRoIGEgSlNPTl9DT05UQUlOUyBmdW5jdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBuZXdSdWxlID0ge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgPyBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsIDogRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBydWxlLnZhbHVlID09PSBcInN0cmluZ1wiID8gYFwiJHtydWxlLnZhbHVlfVwiYCA6IHJ1bGUudmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5qc29uPy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2xOYW1lLCB2YWx1ZSwgdGhpcy5qc29uLnBhdGgpLCBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUobmV3UnVsZSBhcyBSdWxlTW9kZWwpIGFzIExvZ2ljVHlwZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3aGVyZShmbihcIkpTT05fQ09OVEFJTlNcIiwgY29sTmFtZSwgdmFsdWUpLCBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUobmV3UnVsZSBhcyBSdWxlTW9kZWwpIGFzIExvZ2ljVHlwZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybUZvckpzb25PYmplY3QocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU6IHN0cmluZyk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLnBhdGggPyBTZXF1ZWxpemUuY29sKG5hbWUpIDogU2VxdWVsaXplLmxpdGVyYWwobmFtZSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKHJ1bGUpO1xuICAgICAgICBpZiAodGhpcy5qc29uPy5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lLCB0aGlzLmpzb24ucGF0aCksIHZhbHVlIGFzIExvZ2ljVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU2VxdWVsaXplLndoZXJlKFNlcXVlbGl6ZS5mbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lKSwgdmFsdWUgYXMgTG9naWNUeXBlKTtcbiAgICB9XG59XG4iXX0=