@recursyve/nestjs-data-filter 9.3.3 → 9.4.0-beta.1

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 (57) 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 +5 -3
  5. package/lib/data-filter.repository.js +19 -16
  6. package/lib/data-filter.service.d.ts +4 -4
  7. package/lib/data-filter.service.js +10 -9
  8. package/lib/filter/base-filter.d.ts +3 -0
  9. package/lib/filter/base-filter.js +19 -1
  10. package/lib/filter/controllers/dynamic-filter.controller.js +2 -2
  11. package/lib/filter/controllers/filter.controller.js +2 -2
  12. package/lib/filter/decorators/inject-filter.decorator.d.ts +1 -1
  13. package/lib/filter/filter.factory.d.ts +2 -1
  14. package/lib/filter/filter.factory.js +3 -3
  15. package/lib/filter/filter.provider.js +3 -2
  16. package/lib/filter/filter.service.d.ts +3 -1
  17. package/lib/filter/filter.service.js +20 -13
  18. package/lib/filter/filters/date-time.filter.js +12 -5
  19. package/lib/filter/filters/filter.d.ts +3 -0
  20. package/lib/filter/filters/filter.js +7 -4
  21. package/lib/filter/filters/geo-bounds.filter.js +2 -3
  22. package/lib/filter/filters/geo-localization.filter.js +2 -2
  23. package/lib/filter/filters/group.filter.d.ts +3 -0
  24. package/lib/filter/filters/group.filter.js +9 -2
  25. package/lib/filter/guards/filter-query.guard.js +3 -3
  26. package/lib/filter/interceptors/data-file-download.interceptor.js +3 -3
  27. package/lib/filter/operators.js +2 -2
  28. package/lib/filter/order-rules/enum.order-rule.js +2 -3
  29. package/lib/filter/order-rules/if.order-rule.js +2 -3
  30. package/lib/filter/order-rules/is-null.order-rule.js +2 -3
  31. package/lib/filter/order-rules/order-rule.d.ts +3 -0
  32. package/lib/filter/order-rules/order-rule.js +5 -2
  33. package/lib/filter/type.js +2 -2
  34. package/lib/index.js +6 -5
  35. package/lib/models/attributes.model.d.ts +8 -1
  36. package/lib/models/attributes.model.js +21 -11
  37. package/lib/models/count.model.d.ts +11 -4
  38. package/lib/models/count.model.js +25 -14
  39. package/lib/models/custom-attributes.model.d.ts +6 -2
  40. package/lib/models/custom-attributes.model.js +5 -1
  41. package/lib/models/data-filter.model.d.ts +9 -2
  42. package/lib/models/data-filter.model.js +40 -30
  43. package/lib/models/distance.model.d.ts +10 -3
  44. package/lib/models/distance.model.js +29 -18
  45. package/lib/models/export-types.model.js +2 -2
  46. package/lib/models/sum.model.d.ts +10 -3
  47. package/lib/models/sum.model.js +19 -8
  48. package/lib/scanners/data-filter.scanner.js +3 -3
  49. package/lib/scanners/sequelize-model.scanner.d.ts +4 -2
  50. package/lib/scanners/sequelize-model.scanner.js +20 -11
  51. package/lib/sequelize.utils.d.ts +0 -3
  52. package/lib/sequelize.utils.js +1 -18
  53. package/lib/services/data-filter-validation.service.js +3 -3
  54. package/lib/services/dialect-formatter.service.js +3 -3
  55. package/package.json +1 -1
  56. package/lib/filter/filters/options.filter.d.ts +0 -46
  57. package/lib/filter/filters/options.filter.js +0 -111
@@ -14,9 +14,9 @@ let DefaultAccessControlAdapter = class DefaultAccessControlAdapter extends acce
14
14
  return access_control_adapter_1.AccessControlResources.fromIds([]);
15
15
  }
16
16
  };
17
- exports.DefaultAccessControlAdapter = DefaultAccessControlAdapter;
18
- exports.DefaultAccessControlAdapter = DefaultAccessControlAdapter = __decorate([
17
+ DefaultAccessControlAdapter = __decorate([
19
18
  (0, common_1.Injectable)()
20
19
  ], DefaultAccessControlAdapter);
20
+ exports.DefaultAccessControlAdapter = DefaultAccessControlAdapter;
21
21
 
22
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWFjY2Vzcy1jb250cm9sLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsMkNBQTRDO0FBRTVDLHFFQUF3RjtBQUdqRixJQUFNLDJCQUEyQixHQUFqQyxNQUFNLDJCQUE0QixTQUFRLDZDQUFvQjtJQUMxRCxLQUFLLENBQUMsWUFBWSxDQUFRLEtBQWUsRUFBRSxJQUFXO1FBQ3pELE9BQU8sK0NBQXNCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDSixDQUFBO0FBSlksa0VBQTJCO3NDQUEzQiwyQkFBMkI7SUFEdkMsSUFBQSxtQkFBVSxHQUFFO0dBQ0EsMkJBQTJCLENBSXZDIiwiZmlsZSI6ImxpYi9hZGFwdGVycy9kZWZhdWx0LWFjY2Vzcy1jb250cm9sLmFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBNIH0gZnJvbSBcIi4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgQWNjZXNzQ29udHJvbEFkYXB0ZXIsIEFjY2Vzc0NvbnRyb2xSZXNvdXJjZXMgfSBmcm9tIFwiLi9hY2Nlc3MtY29udHJvbC5hZGFwdGVyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZWZhdWx0QWNjZXNzQ29udHJvbEFkYXB0ZXIgZXh0ZW5kcyBBY2Nlc3NDb250cm9sQWRhcHRlciB7XG4gICAgcHVibGljIGFzeW5jIGdldFJlc291cmNlczxVc2Vycz4obW9kZWw6IHR5cGVvZiBNLCB1c2VyOiBVc2Vycyk6IFByb21pc2U8QWNjZXNzQ29udHJvbFJlc291cmNlcz4ge1xuICAgICAgICByZXR1cm4gQWNjZXNzQ29udHJvbFJlc291cmNlcy5mcm9tSWRzKFtdKTtcbiAgICB9XG59XG4iXX0=
22
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWFjY2Vzcy1jb250cm9sLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsMkNBQTRDO0FBRTVDLHFFQUF3RjtBQUdqRixJQUFNLDJCQUEyQixHQUFqQyxNQUFNLDJCQUE0QixTQUFRLDZDQUFvQjtJQUMxRCxLQUFLLENBQUMsWUFBWSxDQUFRLEtBQWUsRUFBRSxJQUFXO1FBQ3pELE9BQU8sK0NBQXNCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDSixDQUFBO0FBSlksMkJBQTJCO0lBRHZDLElBQUEsbUJBQVUsR0FBRTtHQUNBLDJCQUEyQixDQUl2QztBQUpZLGtFQUEyQiIsImZpbGUiOiJsaWIvYWRhcHRlcnMvZGVmYXVsdC1hY2Nlc3MtY29udHJvbC5hZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgTSB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLCBBY2Nlc3NDb250cm9sUmVzb3VyY2VzIH0gZnJvbSBcIi4vYWNjZXNzLWNvbnRyb2wuYWRhcHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEFjY2Vzc0NvbnRyb2xBZGFwdGVyIGV4dGVuZHMgQWNjZXNzQ29udHJvbEFkYXB0ZXIge1xuICAgIHB1YmxpYyBhc3luYyBnZXRSZXNvdXJjZXM8VXNlcnM+KG1vZGVsOiB0eXBlb2YgTSwgdXNlcjogVXNlcnMpOiBQcm9taXNlPEFjY2Vzc0NvbnRyb2xSZXNvdXJjZXM+IHtcbiAgICAgICAgcmV0dXJuIEFjY2Vzc0NvbnRyb2xSZXNvdXJjZXMuZnJvbUlkcyhbXSk7XG4gICAgfVxufVxuIl19
@@ -20,9 +20,9 @@ let DefaultExportAdapter = class DefaultExportAdapter extends export_adapter_1.E
20
20
  throw new Error("DataFilter doesn't provide a default Zip export. To enable it, add a custom ExportAdapter");
21
21
  }
22
22
  };
23
- exports.DefaultExportAdapter = DefaultExportAdapter;
24
- exports.DefaultExportAdapter = DefaultExportAdapter = __decorate([
23
+ DefaultExportAdapter = __decorate([
25
24
  (0, common_1.Injectable)()
26
25
  ], DefaultExportAdapter);
26
+ exports.DefaultExportAdapter = DefaultExportAdapter;
27
27
 
28
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWV4cG9ydC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QyxxREFBNkQ7QUFHdEQsSUFBTSxvQkFBb0IsR0FBMUIsTUFBTSxvQkFBcUIsU0FBUSw4QkFBYTtJQUM1QyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pILENBQUM7Q0FDSixDQUFBO0FBWlksb0RBQW9COytCQUFwQixvQkFBb0I7SUFEaEMsSUFBQSxtQkFBVSxHQUFFO0dBQ0Esb0JBQW9CLENBWWhDIiwiZmlsZSI6ImxpYi9hZGFwdGVycy9kZWZhdWx0LWV4cG9ydC5hZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgRXhwb3J0QWRhcHRlciwgRXhwb3J0RGF0YSB9IGZyb20gXCIuL2V4cG9ydC5hZGFwdGVyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZWZhdWx0RXhwb3J0QWRhcHRlciBleHRlbmRzIEV4cG9ydEFkYXB0ZXIge1xuICAgIHB1YmxpYyBleHBvcnRBc0h0bWwobGFuZ3VhZ2U6IHN0cmluZywgZGF0YTogRXhwb3J0RGF0YSwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFGaWx0ZXIgZG9lc24ndCBwcm92aWRlIGEgZGVmYXVsdCBIVE1MIGV4cG9ydC4gVG8gZW5hYmxlIGl0LCBhZGQgYSBjdXN0b20gRXhwb3J0QWRhcHRlclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwb3J0QXNQZGYobGFuZ3VhZ2U6IHN0cmluZywgZGF0YTogRXhwb3J0RGF0YSwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGFGaWx0ZXIgZG9lc24ndCBwcm92aWRlIGEgZGVmYXVsdCBQREYgZXhwb3J0LiBUbyBlbmFibGUgaXQsIGFkZCBhIGN1c3RvbSBFeHBvcnRBZGFwdGVyXCIpO1xuICAgIH1cblxuICAgIGV4cG9ydEFzWmlwKGxhbmd1YWdlOiBzdHJpbmcsIGRhdGE6IEV4cG9ydERhdGEsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhRmlsdGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgWmlwIGV4cG9ydC4gVG8gZW5hYmxlIGl0LCBhZGQgYSBjdXN0b20gRXhwb3J0QWRhcHRlclwiKTtcbiAgICB9XG59XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWV4cG9ydC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QyxxREFBNkQ7QUFHdEQsSUFBTSxvQkFBb0IsR0FBMUIsTUFBTSxvQkFBcUIsU0FBUSw4QkFBYTtJQUM1QyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pILENBQUM7Q0FDSixDQUFBO0FBWlksb0JBQW9CO0lBRGhDLElBQUEsbUJBQVUsR0FBRTtHQUNBLG9CQUFvQixDQVloQztBQVpZLG9EQUFvQiIsImZpbGUiOiJsaWIvYWRhcHRlcnMvZGVmYXVsdC1leHBvcnQuYWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEV4cG9ydEFkYXB0ZXIsIEV4cG9ydERhdGEgfSBmcm9tIFwiLi9leHBvcnQuYWRhcHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEV4cG9ydEFkYXB0ZXIgZXh0ZW5kcyBFeHBvcnRBZGFwdGVyIHtcbiAgICBwdWJsaWMgZXhwb3J0QXNIdG1sKGxhbmd1YWdlOiBzdHJpbmcsIGRhdGE6IEV4cG9ydERhdGEsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhRmlsdGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgSFRNTCBleHBvcnQuIFRvIGVuYWJsZSBpdCwgYWRkIGEgY3VzdG9tIEV4cG9ydEFkYXB0ZXJcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydEFzUGRmKGxhbmd1YWdlOiBzdHJpbmcsIGRhdGE6IEV4cG9ydERhdGEsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhRmlsdGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgUERGIGV4cG9ydC4gVG8gZW5hYmxlIGl0LCBhZGQgYSBjdXN0b20gRXhwb3J0QWRhcHRlclwiKTtcbiAgICB9XG5cbiAgICBleHBvcnRBc1ppcChsYW5ndWFnZTogc3RyaW5nLCBkYXRhOiBFeHBvcnREYXRhLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YUZpbHRlciBkb2Vzbid0IHByb3ZpZGUgYSBkZWZhdWx0IFppcCBleHBvcnQuIFRvIGVuYWJsZSBpdCwgYWRkIGEgY3VzdG9tIEV4cG9ydEFkYXB0ZXJcIik7XG4gICAgfVxufVxuIl19
@@ -14,9 +14,9 @@ let DefaultTranslateAdapter = class DefaultTranslateAdapter extends translate_ad
14
14
  return key;
15
15
  }
16
16
  };
17
- exports.DefaultTranslateAdapter = DefaultTranslateAdapter;
18
- exports.DefaultTranslateAdapter = DefaultTranslateAdapter = __decorate([
17
+ DefaultTranslateAdapter = __decorate([
19
18
  (0, common_1.Injectable)()
20
19
  ], DefaultTranslateAdapter);
20
+ exports.DefaultTranslateAdapter = DefaultTranslateAdapter;
21
21
 
22
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LXRyYW5zbGF0ZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QywyREFBdUQ7QUFHaEQsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBd0IsU0FBUSxvQ0FBZ0I7SUFDbEQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFnQixFQUFFLEdBQVc7UUFDckQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQTtBQUpZLDBEQUF1QjtrQ0FBdkIsdUJBQXVCO0lBRG5DLElBQUEsbUJBQVUsR0FBRTtHQUNBLHVCQUF1QixDQUluQyIsImZpbGUiOiJsaWIvYWRhcHRlcnMvZGVmYXVsdC10cmFuc2xhdGUuYWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi90cmFuc2xhdGUuYWRhcHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdFRyYW5zbGF0ZUFkYXB0ZXIgZXh0ZW5kcyBUcmFuc2xhdGVBZGFwdGVyIHtcbiAgICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNsYXRpb24obGFuZ3VhZ2U6IHN0cmluZywga2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LXRyYW5zbGF0ZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QywyREFBdUQ7QUFHaEQsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBd0IsU0FBUSxvQ0FBZ0I7SUFDbEQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFnQixFQUFFLEdBQVc7UUFDckQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0osQ0FBQTtBQUpZLHVCQUF1QjtJQURuQyxJQUFBLG1CQUFVLEdBQUU7R0FDQSx1QkFBdUIsQ0FJbkM7QUFKWSwwREFBdUIiLCJmaWxlIjoibGliL2FkYXB0ZXJzL2RlZmF1bHQtdHJhbnNsYXRlLmFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4vdHJhbnNsYXRlLmFkYXB0ZXJcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERlZmF1bHRUcmFuc2xhdGVBZGFwdGVyIGV4dGVuZHMgVHJhbnNsYXRlQWRhcHRlciB7XG4gICAgcHVibGljIGFzeW5jIGdldFRyYW5zbGF0aW9uKGxhbmd1YWdlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG59XG4iXX0=
@@ -10,6 +10,7 @@ import { DataFilterUserModel } from "./models/user.model";
10
10
  import { DataFilterScanner } from "./scanners/data-filter.scanner";
11
11
  import { SequelizeModelScanner } from "./scanners/sequelize-model.scanner";
12
12
  import { M } from "./sequelize.utils";
13
+ import { DialectFormatterService } from "./services/dialect-formatter.service";
13
14
  export declare class DataFilterRepository<Data> {
14
15
  private dataDef;
15
16
  private dataFilterScanner;
@@ -17,10 +18,11 @@ export declare class DataFilterRepository<Data> {
17
18
  private accessControlAdapter;
18
19
  private translateService;
19
20
  private exportAdapter;
21
+ private dialectFormatterService;
20
22
  private _config;
21
23
  private _definitions;
22
24
  get model(): typeof M;
23
- constructor(dataDef: any, dataFilterScanner: DataFilterScanner, sequelizeModelScanner: SequelizeModelScanner, accessControlAdapter: AccessControlAdapter, translateService: TranslateAdapter, exportAdapter: ExportAdapter);
25
+ constructor(dataDef: any, dataFilterScanner: DataFilterScanner, sequelizeModelScanner: SequelizeModelScanner, accessControlAdapter: AccessControlAdapter, translateService: TranslateAdapter, exportAdapter: ExportAdapter, dialectFormatterService: DialectFormatterService);
24
26
  findByPk(identifier: Identifier, options?: FindOptions, conditions?: object): Promise<Data | null>;
25
27
  findByPkFromUser(user: DataFilterUserModel, identifier: Identifier, conditions?: object): Promise<Data | null>;
26
28
  findOne(options?: FindOptions, conditions?: object): Promise<Data | null>;
@@ -32,7 +34,7 @@ export declare class DataFilterRepository<Data> {
32
34
  searchFromUser(user: DataFilterUserModel, search: string, options?: FindOptions, conditions?: object): Promise<Data[]>;
33
35
  generateFindOptions(options?: FindOptions, conditions?: object): FindOptions;
34
36
  generateOrderInclude(order: OrderModel, conditions?: object): IncludeOptions[];
35
- generateSearchInclude(conditions?: object): Includeable[];
37
+ generateSearchInclude(conditions?: object, ignoreAttributes?: boolean): Includeable[];
36
38
  reduceObject(result: any): Data;
37
39
  getSearchAttributes(): SearchAttributesModel[];
38
40
  hasCustomAttribute(name: string): boolean;
@@ -46,7 +48,7 @@ export declare class DataFilterRepository<Data> {
46
48
  downloadPdf(headers: string[], data: any[], lang: string, options?: any): Promise<Buffer>;
47
49
  downloadZip(headers: string[], data: any[], lang: string, options?: any): Promise<Buffer>;
48
50
  private init;
49
- addSearchCondition(search: string, options: FindOptions): void;
51
+ addSearchCondition(search: string, options: FindOptions, ignoreAttributes?: boolean): void;
50
52
  private getExportsHeader;
51
53
  private getExportData;
52
54
  private getExportValue;
@@ -17,19 +17,21 @@ const export_types_model_1 = require("./models/export-types.model");
17
17
  const data_filter_scanner_1 = require("./scanners/data-filter.scanner");
18
18
  const sequelize_model_scanner_1 = require("./scanners/sequelize-model.scanner");
19
19
  const sequelize_utils_1 = require("./sequelize.utils");
20
+ const dialect_formatter_service_1 = require("./services/dialect-formatter.service");
20
21
  const csv_utils_1 = require("./utils/csv.utils");
21
22
  const xlsx_utils_1 = require("./utils/xlsx.utils");
22
23
  let DataFilterRepository = class DataFilterRepository {
23
24
  get model() {
24
25
  return this._config.model;
25
26
  }
26
- constructor(dataDef, dataFilterScanner, sequelizeModelScanner, accessControlAdapter, translateService, exportAdapter) {
27
+ constructor(dataDef, dataFilterScanner, sequelizeModelScanner, accessControlAdapter, translateService, exportAdapter, dialectFormatterService) {
27
28
  this.dataDef = dataDef;
28
29
  this.dataFilterScanner = dataFilterScanner;
29
30
  this.sequelizeModelScanner = sequelizeModelScanner;
30
31
  this.accessControlAdapter = accessControlAdapter;
31
32
  this.translateService = translateService;
32
33
  this.exportAdapter = exportAdapter;
34
+ this.dialectFormatterService = dialectFormatterService;
33
35
  this.init();
34
36
  }
35
37
  async findByPk(identifier, options, conditions) {
@@ -119,8 +121,8 @@ let DataFilterRepository = class DataFilterRepository {
119
121
  return [];
120
122
  }
121
123
  const path = x.path.transformPathConfig(conditions);
122
- const attributes = x.transformAttributesConfig(conditions);
123
- const additionalIncludes = x.transformIncludesConfig(conditions);
124
+ const attributes = x.withContext(this.dialectFormatterService).transformAttributesConfig(conditions);
125
+ const additionalIncludes = x.withContext(this.dialectFormatterService).transformIncludesConfig(conditions);
124
126
  return this.sequelizeModelScanner.getIncludes(this.model, path, additionalIncludes, attributes);
125
127
  }),
126
128
  ...this._config.getCustomAttributesIncludes().map(x => this.sequelizeModelScanner.getIncludes(this.model, {
@@ -134,7 +136,7 @@ let DataFilterRepository = class DataFilterRepository {
134
136
  nestedIncludes.push(options.include);
135
137
  }
136
138
  options.include = sequelize_utils_1.SequelizeUtils.reduceIncludes(nestedIncludes);
137
- const generatedAttributes = this._config.transformAttributesConfig(conditions);
139
+ const generatedAttributes = this._config.withContext(this.dialectFormatterService).transformAttributesConfig(conditions);
138
140
  if (generatedAttributes) {
139
141
  if (options.attributes) {
140
142
  options.attributes = sequelize_utils_1.SequelizeUtils.mergeAttributes(options.attributes, generatedAttributes);
@@ -161,16 +163,16 @@ let DataFilterRepository = class DataFilterRepository {
161
163
  }
162
164
  return this.sequelizeModelScanner.getOrderIncludes(this.model, order);
163
165
  }
164
- generateSearchInclude(conditions) {
166
+ generateSearchInclude(conditions, ignoreAttributes = false) {
165
167
  const nestedIncludes = [
166
168
  ...this._definitions.map(x => {
167
169
  if (!x.path || x.path.separate || x.ignoreInSearch) {
168
170
  return [];
169
171
  }
170
172
  const path = x.path.transformPathConfig(conditions);
171
- const attributes = x.transformAttributesConfig(conditions);
172
- const additionalIncludes = x.transformIncludesConfig(conditions);
173
- return this.sequelizeModelScanner.getIncludes(this.model, path, additionalIncludes, attributes);
173
+ const attributes = x.withContext(this.dialectFormatterService).transformAttributesConfig(conditions);
174
+ const additionalIncludes = x.withContext(this.dialectFormatterService).transformIncludesConfig(conditions);
175
+ return this.sequelizeModelScanner.getIncludes(this.model, path, additionalIncludes, attributes, ignoreAttributes);
174
176
  }),
175
177
  ...this._config.getCustomAttributesIncludes().map(x => {
176
178
  if (!x.path || x.separate || x.ignoreInSearch) {
@@ -181,7 +183,7 @@ let DataFilterRepository = class DataFilterRepository {
181
183
  paranoid: x.paranoid,
182
184
  subQuery: x.subQuery,
183
185
  where: x.where ? sequelize_utils_1.SequelizeUtils.generateWhereConditions(x.where, conditions) : undefined
184
- }, [], x.attributes);
186
+ }, [], x.attributes, ignoreAttributes);
185
187
  })
186
188
  ];
187
189
  return sequelize_utils_1.SequelizeUtils.reduceIncludes(nestedIncludes);
@@ -221,7 +223,7 @@ let DataFilterRepository = class DataFilterRepository {
221
223
  continue;
222
224
  }
223
225
  const attr = definition.ignoreInSearch ? [] : (_a = definition.searchableAttributes) !== null && _a !== void 0 ? _a : definition.attributes;
224
- const additionalIncludes = definition.transformIncludesConfig({});
226
+ const additionalIncludes = definition.withContext(this.dialectFormatterService).transformIncludesConfig({});
225
227
  attributes.push(...this.sequelizeModelScanner.getAttributes(this.model, definition.path, additionalIncludes, attr));
226
228
  }
227
229
  return attributes;
@@ -303,11 +305,11 @@ let DataFilterRepository = class DataFilterRepository {
303
305
  this._config = this.dataFilterScanner.getDataFilter(this.dataDef);
304
306
  this._definitions = this.dataFilterScanner.getAttributes(this.dataDef);
305
307
  }
306
- addSearchCondition(search, options) {
308
+ addSearchCondition(search, options, ignoreAttributes = false) {
307
309
  if (!search) {
308
310
  return;
309
311
  }
310
- const searchInclude = this.generateSearchInclude({});
312
+ const searchInclude = this.generateSearchInclude({}, ignoreAttributes);
311
313
  options.include = sequelize_utils_1.SequelizeUtils.mergeIncludes(options.include, searchInclude);
312
314
  if (!options.where) {
313
315
  options.where = { [sequelize_1.Op.and]: [] };
@@ -386,14 +388,15 @@ let DataFilterRepository = class DataFilterRepository {
386
388
  return where;
387
389
  }
388
390
  };
389
- exports.DataFilterRepository = DataFilterRepository;
390
- exports.DataFilterRepository = DataFilterRepository = __decorate([
391
+ DataFilterRepository = __decorate([
391
392
  (0, common_1.Injectable)(),
392
393
  __metadata("design:paramtypes", [Object, data_filter_scanner_1.DataFilterScanner,
393
394
  sequelize_model_scanner_1.SequelizeModelScanner,
394
395
  adapters_1.AccessControlAdapter,
395
396
  adapters_1.TranslateAdapter,
396
- adapters_1.ExportAdapter])
397
+ adapters_1.ExportAdapter,
398
+ dialect_formatter_service_1.DialectFormatterService])
397
399
  ], DataFilterRepository);
400
+ exports.DataFilterRepository = DataFilterRepository;
398
401
 
399
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBaUg7QUFHakgseUNBQW1GO0FBSW5GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxpREFBNkM7QUFDN0MsbURBQStDO0FBR3hDLElBQU0sb0JBQW9CLEdBQTFCLE1BQU0sb0JBQW9CO0lBSTdCLElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFpQixDQUFDO0lBQzFDLENBQUM7SUFFRCxZQUNZLE9BQVksRUFDWixpQkFBb0MsRUFDcEMscUJBQTRDLEVBQzVDLG9CQUEwQyxFQUMxQyxnQkFBa0MsRUFDbEMsYUFBNEI7UUFMNUIsWUFBTyxHQUFQLE9BQU8sQ0FBSztRQUNaLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFFcEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjtRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLEtB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OzZDQVdzQix1Q0FBaUI7UUFDYiwrQ0FBcUI7UUFDdEIsK0JBQW9CO1FBQ3hCLDJCQUFnQjtRQUNuQix3QkFBYTtHQWQvQixvQkFBb0IsQ0FxY2hDIiwiZmlsZSI6ImxpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgRmluZE9wdGlvbnMsIElkZW50aWZpZXIsIEluY2x1ZGVhYmxlLCBJbmNsdWRlT3B0aW9ucywgTW9kZWwsIE9wLCBVdGlscywgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb24gfSBmcm9tIFwic2VxdWVsaXplL3R5cGVzL21vZGVsXCI7XG5pbXBvcnQgeyBDb2wsIEZuIH0gZnJvbSBcInNlcXVlbGl6ZS90eXBlcy91dGlsc1wiO1xuaW1wb3J0IHsgQWNjZXNzQ29udHJvbEFkYXB0ZXIsIEV4cG9ydEFkYXB0ZXIsIFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyc1wiO1xuaW1wb3J0IHsgQXR0cmlidXRlc0NvbmZpZyB9IGZyb20gXCIuL21vZGVscy9hdHRyaWJ1dGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBDdXN0b21BdHRyaWJ1dGVzQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2N1c3RvbS1hdHRyaWJ1dGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2RhdGEtZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcyB9IGZyb20gXCIuL21vZGVscy9leHBvcnQtdHlwZXMubW9kZWxcIjtcbmltcG9ydCB7IE9yZGVyTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBQYXRoTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuaW1wb3J0IHsgU2VhcmNoQXR0cmlidXRlc01vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3NlYXJjaC1hdHRyaWJ1dGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyVXNlck1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJTY2FubmVyIH0gZnJvbSBcIi4vc2Nhbm5lcnMvZGF0YS1maWx0ZXIuc2Nhbm5lclwiO1xuaW1wb3J0IHsgU2VxdWVsaXplTW9kZWxTY2FubmVyIH0gZnJvbSBcIi4vc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXJcIjtcbmltcG9ydCB7IE0sIFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBDc3ZVdGlscyB9IGZyb20gXCIuL3V0aWxzL2Nzdi51dGlsc1wiO1xuaW1wb3J0IHsgWGxzeFV0aWxzIH0gZnJvbSBcIi4vdXRpbHMveGxzeC51dGlsc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4ge1xuICAgIHByaXZhdGUgX2NvbmZpZzogRGF0YUZpbHRlckNvbmZpZztcbiAgICBwcml2YXRlIF9kZWZpbml0aW9uczogQXR0cmlidXRlc0NvbmZpZ1tdO1xuXG4gICAgcHVibGljIGdldCBtb2RlbCgpOiB0eXBlb2YgTSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcubW9kZWwgYXMgdHlwZW9mIE07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGF0YURlZjogYW55LFxuICAgICAgICBwcml2YXRlIGRhdGFGaWx0ZXJTY2FubmVyOiBEYXRhRmlsdGVyU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBzZXF1ZWxpemVNb2RlbFNjYW5uZXI6IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBhY2Nlc3NDb250cm9sQWRhcHRlcjogQWNjZXNzQ29udHJvbEFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSBleHBvcnRBZGFwdGVyOiBFeHBvcnRBZGFwdGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQnlQayhpZGVudGlmaWVyOiBJZGVudGlmaWVyLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGEgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEJ5UGsoaWRlbnRpZmllciwgdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnMsIGNvbmRpdGlvbnMpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQnlQa0Zyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIGlkZW50aWZpZXI6IElkZW50aWZpZXIsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGEgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMuX2NvbmZpZy5tb2RlbCBhcyBhbnksIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcz8uaW5jbHVkZXMoaWRlbnRpZmllciBhcyBudW1iZXIpIHx8IHJlc291cmNlcy5hbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRCeVBrKGlkZW50aWZpZXIsIHt9LCBjb25kaXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRPbmUoe1xuICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5fY29uZmlnLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVdOiBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy53aGVyZSA/PyB7fVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY29uZGl0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRPbmUob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRPbmUodGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnMsIGNvbmRpdGlvbnMpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kT25lRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMgPSB7fSwgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZE9uZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBhd2FpdCB0aGlzLm1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbihvcHRpb25zLndoZXJlID8/IHt9LCB1c2VyKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbChvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwodGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnMsIGNvbmRpdGlvbnMpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQWxsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgd2hlcmU6IGF3YWl0IHRoaXMubWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUgPz8ge30sIHVzZXIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZGl0aW9uc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh3aGVyZT86IFdoZXJlT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoeyB3aGVyZSB9LCBjb25kaXRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuY291bnQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaChzZWFyY2g6IHN0cmluZywgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgZmluZE9wdGlvbnMgPSB0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMob3B0aW9ucywgY29uZGl0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhvcHRpb25zLCBjb25kaXRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLCBmaW5kT3B0aW9ucyk7XG5cbiAgICAgICAgZmluZE9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLm1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbihmaW5kT3B0aW9ucy53aGVyZSwgdXNlcik7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlRmluZE9wdGlvbnMob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogRmluZE9wdGlvbnMge1xuICAgICAgICBvcHRpb25zID8/PSB7fTtcblxuICAgICAgICBjb25zdCBuZXN0ZWRJbmNsdWRlczogQXJyYXk8SW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdPiA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZmluaXRpb25zLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXgucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB4LnBhdGgudHJhbnNmb3JtUGF0aENvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0geC50cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxJbmNsdWRlcyA9IHgudHJhbnNmb3JtSW5jbHVkZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHBhdGgsIGFkZGl0aW9uYWxJbmNsdWRlcywgYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZy5nZXRDdXN0b21BdHRyaWJ1dGVzSW5jbHVkZXMoKS5tYXAoeCA9PiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogeC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmFub2lkOiB4LnBhcmFub2lkLFxuICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiB4LnN1YlF1ZXJ5LFxuICAgICAgICAgICAgICAgIHdoZXJlOiB4LndoZXJlID8gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoeC53aGVyZSwgY29uZGl0aW9ucykgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0sIFtdLCB4LmF0dHJpYnV0ZXMpKVxuICAgICAgICBdO1xuICAgICAgICBpZiAob3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICAgICAgICBuZXN0ZWRJbmNsdWRlcy5wdXNoKG9wdGlvbnMuaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9ucyB8IEluY2x1ZGVPcHRpb25zW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMobmVzdGVkSW5jbHVkZXMpO1xuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZEF0dHJpYnV0ZXMgPSB0aGlzLl9jb25maWcudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgaWYgKGdlbmVyYXRlZEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBTZXF1ZWxpemVVdGlscy5tZXJnZUF0dHJpYnV0ZXMob3B0aW9ucy5hdHRyaWJ1dGVzLCBnZW5lcmF0ZWRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5hdHRyaWJ1dGVzID0gZ2VuZXJhdGVkQXR0cmlidXRlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZU9yZGVySW5jbHVkZShvcmRlcjogT3JkZXJNb2RlbCwgY29uZGl0aW9ucz86IG9iamVjdCk6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIW9yZGVyIHx8ICFvcmRlci5jb2x1bW4gfHwgb3JkZXIuZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXN0b21BdHRyID0gdGhpcy5nZXRDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKTtcbiAgICAgICAgaWYgKGN1c3RvbUF0dHIpIHtcbiAgICAgICAgICAgIGlmICghY3VzdG9tQXR0ci5jb25maWcucGF0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiBjdXN0b21BdHRyLmNvbmZpZy5wYXRoLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBjdXN0b21BdHRyLmNvbmZpZy53aGVyZSA/IFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVDb25kaXRpb25zKGN1c3RvbUF0dHIuY29uZmlnLndoZXJlLCBjb25kaXRpb25zKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVySW5jbHVkZXModGhpcy5tb2RlbCwgb3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZVNlYXJjaEluY2x1ZGUoY29uZGl0aW9ucz86IG9iamVjdCk6IEluY2x1ZGVhYmxlW10ge1xuICAgICAgICBjb25zdCBuZXN0ZWRJbmNsdWRlczogQXJyYXk8SW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdPiA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZmluaXRpb25zLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXgucGF0aCB8fCB4LnBhdGguc2VwYXJhdGUgfHwgeC5pZ25vcmVJblNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB4LnBhdGgudHJhbnNmb3JtUGF0aENvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0geC50cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxJbmNsdWRlcyA9IHgudHJhbnNmb3JtSW5jbHVkZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHBhdGgsIGFkZGl0aW9uYWxJbmNsdWRlcywgYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZy5nZXRDdXN0b21BdHRyaWJ1dGVzSW5jbHVkZXMoKS5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF4LnBhdGggfHwgeC5zZXBhcmF0ZSB8fCB4Lmlnbm9yZUluU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiB4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFub2lkOiB4LnBhcmFub2lkLFxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVyeTogeC5zdWJRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgd2hlcmU6IHgud2hlcmUgPyBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyh4LndoZXJlLCBjb25kaXRpb25zKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0sIFtdLCB4LmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMobmVzdGVkSW5jbHVkZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWR1Y2VPYmplY3QocmVzdWx0OiBhbnkpOiBEYXRhIHtcbiAgICAgICAgY29uc3QgciA9IHJlc3VsdCBpbnN0YW5jZW9mIE1vZGVsID8gcmVzdWx0LnRvSlNPTigpIDogcmVzdWx0O1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YURlZi5wcm90b3R5cGUuY29uc3RydWN0b3Ioe30sIHsgaXNOZXdSZWNvcmQ6IGZhbHNlIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGEsIHIpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICAgICAgICAoZGF0YSBhcyBhbnkpLmRhdGFWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIHRoaXMuX2RlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gU2VxdWVsaXplVXRpbHMucmVkdWNlTW9kZWxGcm9tUGF0aChyZXN1bHQsIGRlZi5wYXRoLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXREYXRhVmFsdWUoZGVmLmtleSBhcyBhbnksIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZU1vZGVsRnJvbVBhdGgocmVzdWx0LCBkZWYucGF0aC5wYXRoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gcmVzdWx0W2RlZi5rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlYXJjaEF0dHJpYnV0ZXMoKTogU2VhcmNoQXR0cmlidXRlc01vZGVsW10ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBtb2RlbEF0dHIgPSB0aGlzLl9jb25maWcuZ2V0U2VhcmNoYWJsZUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgLi4ubW9kZWxBdHRyLm1hcChhID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogYSxcbiAgICAgICAgICAgICAgICBrZXk6IGEsXG4gICAgICAgICAgICAgICAgaXNKc29uOiBTZXF1ZWxpemVVdGlscy5pc0NvbHVtbkpzb24odGhpcy5tb2RlbCwgYSlcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiB0aGlzLl9kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYXR0ciA9IGRlZmluaXRpb24uaWdub3JlSW5TZWFyY2ggPyBbXSA6IGRlZmluaXRpb24uc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPz8gZGVmaW5pdGlvbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0gZGVmaW5pdGlvbi50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyh7fSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0QXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi5wYXRoIGFzIFBhdGhNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEluY2x1ZGVzLFxuICAgICAgICAgICAgICAgICAgICBhdHRyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2NvbmZpZy5jdXN0b21BdHRyaWJ1dGVzLmZpbmQoKHgpID0+IHguY29uZmlnLm5hbWUgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQ3VzdG9tQXR0cmlidXRlc0NvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuY3VzdG9tQXR0cmlidXRlcy5maW5kKCh4KSA9PiB4LmNvbmZpZy5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tQXR0cmlidXRlR3JvdXBCeSgpOiAoc3RyaW5nIHwgRm4gfCBDb2wpW10ge1xuICAgICAgICBjb25zdCBncm91cDogR3JvdXBPcHRpb24gPSBbXTtcblxuICAgICAgICBjb25zdCBzaG91bGRHcm91cEJ5ID0gdGhpcy5fY29uZmlnLmN1c3RvbUF0dHJpYnV0ZXMuc29tZSgoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUuc2hvdWxkR3JvdXBCeSgpKTtcbiAgICAgICAgaWYgKHNob3VsZEdyb3VwQnkpIHtcbiAgICAgICAgICAgIGdyb3VwLnB1c2goXCJpZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKGRhdGE6IERhdGFbXSwgdHlwZTogRXhwb3J0VHlwZXMsIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPjtcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgdHlwZTogRXhwb3J0VHlwZXMsIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPjtcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKFxuICAgICAgICBkYXRhT3JIZWFkZXJzOiBEYXRhW10gfCBzdHJpbmdbXSxcbiAgICAgICAgdHlwZU9yRGF0YTogRXhwb3J0VHlwZXMgfCBhbnlbXSxcbiAgICAgICAgbGFuZ09yVHlwZTogc3RyaW5nIHwgRXhwb3J0VHlwZXMsXG4gICAgICAgIG9wdGlvbnNPckxhbmc/OiBhbnkgfCBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM/OiBhbnlcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBsZXQgdHlwZTogRXhwb3J0VHlwZXM7XG4gICAgICAgIGxldCBoZWFkZXJzOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IGRhdGE6IGFueVtdO1xuICAgICAgICBsZXQgbGFuZzogc3RyaW5nO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZU9yRGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdHlwZSA9IHR5cGVPckRhdGE7XG4gICAgICAgICAgICBsYW5nID0gbGFuZ09yVHlwZTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydHNIZWFkZXIobGFuZywgdGhpcy5fY29uZmlnLmV4cG9ydENvbHVtbnMgPz8gW10pO1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0RGF0YShkYXRhT3JIZWFkZXJzIGFzIERhdGFbXSk7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yTGFuZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhbmcgPSBvcHRpb25zT3JMYW5nIGFzIHN0cmluZztcbiAgICAgICAgICAgIGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydHNIZWFkZXIobGFuZywgZGF0YU9ySGVhZGVycyBhcyBzdHJpbmdbXSk7XG4gICAgICAgICAgICBkYXRhID0gdHlwZU9yRGF0YTtcbiAgICAgICAgICAgIHR5cGUgPSBsYW5nT3JUeXBlIGFzIEV4cG9ydFR5cGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlhMU1g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRYbHN4KGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5IVE1MOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkSHRtbChoZWFkZXJzLCBkYXRhLCBsYW5nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuQ1NWOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkQ3N2KGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5QREY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRQZGYoaGVhZGVycywgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlpJUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFppcChoZWFkZXJzLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFhsc3goaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIFhsc3hVdGlscy5hcnJheVRvWGxzeEJ1ZmZlcihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZEh0bWwoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzSHRtbChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZENzdihoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgQ3N2VXRpbHMuYXJyYXlUb0NzdkJ1ZmZlcihkYXRhLCBoZWFkZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRQZGYoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzUGRmKGxhbmcsIHtcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgY29sdW1uczogaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkWmlwKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc1ppcChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYXRhRmlsdGVyU2Nhbm5lci5nZXREYXRhRmlsdGVyKHRoaXMuZGF0YURlZik7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb25zID0gdGhpcy5kYXRhRmlsdGVyU2Nhbm5lci5nZXRBdHRyaWJ1dGVzKHRoaXMuZGF0YURlZik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2g6IHN0cmluZywgb3B0aW9uczogRmluZE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlYXJjaEluY2x1ZGUgPSB0aGlzLmdlbmVyYXRlU2VhcmNoSW5jbHVkZSh7fSk7XG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdLFxuICAgICAgICAgICAgc2VhcmNoSW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLndoZXJlKSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW10gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSB7IFtPcC5hbmRdOiBbb3B0aW9ucy53aGVyZV0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0gb3B0aW9ucy53aGVyZTtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVGaWVsZHNPYmplY3QgPSBzZWFyY2hWYWx1ZSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRTZWFyY2hBdHRyaWJ1dGVzKClcbiAgICAgICAgICAgICAgICAubWFwKGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5pc0pzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYS5saXRlcmFsS2V5ID8/IGBcXGAke3RoaXMubW9kZWwubmFtZX1cXGAuXFxgJHthLmtleX1cXGBgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGxpdGVyYWwgZnVuY3Rpb24gaXMgbm90IHdvcmtpbmcgb2Ygc29tZSByZWFzb24uLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vZGVsLnNlcXVlbGl6ZS5lc2NhcGUoYCUke3NlYXJjaFZhbHVlLnRvVXBwZXJDYXNlKCl9JWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdGlscy5MaXRlcmFsKGBVUFBFUihKU09OX0VYVFJBQ1QoJHtmaWVsZH0sICckJykpIExJS0UgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Eua2V5XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPcC5saWtlXTogYCUke3NlYXJjaFZhbHVlfSVgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSkuZmlsdGVyKHggPT4gISF4KTtcblxuICAgICAgICBjb25zdCB0b2tlbnMgPSBzZWFyY2guc3BsaXQoXCIgXCIpO1xuICAgICAgICB3aGVyZVtPcC5hbmRdLnB1c2goXG4gICAgICAgICAgICB0b2tlbnMubWFwKHQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtPcC5vcl06IGdlbmVyYXRlRmllbGRzT2JqZWN0KHQpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRzSGVhZGVyKGxhbmc6IHN0cmluZywgaGVhZGVyczogc3RyaW5nW10sIHRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChoZWFkZXJzLm1hcCh4ID0+IHRyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24obGFuZywgYGV4cG9ydHMuJHt4fWApKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnREYXRhKGRhdGE6IERhdGFbXSk6IG9iamVjdFtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLl9jb25maWcuZXhwb3J0Q29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZSwgcHJvcF0gPSB0aGlzLmdldEV4cG9ydFZhbHVlKHgsIGtleSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Ake2krK306JHtwcm9wfWBdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydFZhbHVlKGRhdGE6IERhdGEsIHBhdGg6IHN0cmluZyk6IFt1bmtub3duLCBzdHJpbmddIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gW2RhdGFba2V5XSwga2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBrZXk6IHN0cmluZztcbiAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2RhdGEsIGtleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMuX2NvbmZpZy5tb2RlbCBhcyBhbnksIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcykge1xuICAgICAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoeyBpZDogcmVzb3VyY2VzLmlkcyB9LCB3aGVyZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VzLndoZXJlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cbn1cbiJdfQ==
402
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBaUg7QUFHakgseUNBQW1GO0FBSW5GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxvRkFBK0U7QUFDL0UsaURBQTZDO0FBQzdDLG1EQUErQztBQUd4QyxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFvQjtJQUk3QixJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBaUIsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFDWSxPQUFZLEVBQ1osaUJBQW9DLEVBQ3BDLHFCQUE0QyxFQUM1QyxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLHVCQUFnRDtRQU5oRCxZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBRXhELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFzQixFQUFFLE9BQXFCLEVBQUUsVUFBbUI7UUFDcEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBeUIsRUFBRSxVQUFzQixFQUFFLFVBQW1COztRQUNoRyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFBLE1BQUEsU0FBUyxDQUFDLEdBQUcsMENBQUUsUUFBUSxDQUFDLFVBQW9CLENBQUMsS0FBSSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hFLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDMUQ7UUFFRCxJQUFJLE1BQUEsU0FBUyxDQUFDLEdBQUcsMENBQUUsTUFBTSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QixLQUFLLEVBQUU7Z0JBQ0gsQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ047d0JBQ0ksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLFVBQVU7cUJBQ3ZEO29CQUNELE1BQUEsU0FBUyxDQUFDLEtBQUssbUNBQUksRUFBRTtpQkFDeEI7YUFDSjtTQUNKLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBcUIsRUFBRSxVQUFtQjtRQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUF5QixFQUFFLFVBQXVCLEVBQUUsRUFBRSxVQUFtQjs7UUFDbEcsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUNmO1lBQ0ksR0FBRyxPQUFPO1lBQ1YsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQUEsT0FBTyxDQUFDLEtBQUssbUNBQUksRUFBRSxFQUFFLElBQUksQ0FBQztTQUMzRSxFQUNELFVBQVUsQ0FDYixDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBcUIsRUFBRSxVQUFtQjtRQUMzRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDakIsT0FBTyxNQUEyQixDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQXlCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjs7UUFDOUYsT0FBTyxHQUFHLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztRQUN4QixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FDckI7WUFDSSxHQUFHLE9BQU87WUFDVixLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBQSxPQUFPLENBQUMsS0FBSyxtQ0FBSSxFQUFFLEVBQUUsSUFBSSxDQUFDO1NBQzNFLEVBQ0QsVUFBVSxDQUNiLENBQUM7SUFDTixDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFvQixFQUFFLFVBQW1CO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLE9BQXFCLEVBQUUsVUFBbUI7UUFDMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQSxFQUFFO1lBQ2pCLE9BQU8sTUFBMkIsQ0FBQztTQUN0QztRQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUF5QixFQUFFLE1BQWMsRUFBRSxPQUFxQixFQUFFLFVBQW1CO1FBQzdHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU3QyxXQUFXLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDakIsT0FBTyxNQUEyQixDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxPQUFxQixFQUFFLFVBQW1CO1FBQ2pFLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxJQUFQLE9BQU8sR0FBSyxFQUFFLEVBQUM7UUFFZixNQUFNLGNBQWMsR0FBNkM7WUFDN0QsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekIsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ1QsT0FBTyxFQUFFLENBQUM7aUJBQ2I7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDckcsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMzRyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDcEcsQ0FBQyxDQUFDO1lBQ0YsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUN0RyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ1osUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO2dCQUNwQixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7Z0JBQ3BCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxnQ0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDM0YsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hCLENBQUM7UUFDRixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDakIsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBNEMsQ0FBQyxDQUFDO1NBQzdFO1FBRUQsT0FBTyxDQUFDLE9BQU8sR0FBRyxnQ0FBYyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVoRSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pILElBQUksbUJBQW1CLEVBQUU7WUFDckIsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUNwQixPQUFPLENBQUMsVUFBVSxHQUFHLGdDQUFjLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzthQUNoRztpQkFBTTtnQkFDSCxPQUFPLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDO2FBQzVDO1NBQ0o7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBaUIsRUFBRSxVQUFtQjtRQUM5RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUNuRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxJQUFJLFVBQVUsRUFBRTtZQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtnQkFDekIsT0FBTyxFQUFFLENBQUM7YUFDYjtZQUVELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUN0RCxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUM1QixLQUFLLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdDQUFjLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDM0gsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNWO1FBRUQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU0scUJBQXFCLENBQUMsVUFBbUIsRUFBRSxnQkFBZ0IsR0FBRyxLQUFLO1FBQ3RFLE1BQU0sY0FBYyxHQUE2QztZQUM3RCxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFO29CQUNoRCxPQUFPLEVBQUUsQ0FBQztpQkFDYjtnQkFDRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNyRyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNHLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUN0SCxDQUFDLENBQUM7WUFDRixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRTtvQkFDM0MsT0FBTyxFQUFFLENBQUM7aUJBQ2I7Z0JBRUQsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ3RELElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDWixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7b0JBQ3BCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtvQkFDcEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdDQUFjLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDM0YsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQztTQUNMLENBQUM7UUFFRixPQUFPLGdDQUFjLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxZQUFZLENBQUMsTUFBVztRQUMzQixNQUFNLENBQUMsR0FBRyxNQUFNLFlBQVksaUJBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkIsSUFBSSxJQUFJLFlBQVksaUJBQUssRUFBRTtZQUN0QixJQUFZLENBQUMsVUFBVSxHQUFHO2dCQUN2QixHQUFHLENBQUM7YUFDUCxDQUFDO1NBQ0w7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0NBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxJQUFJLFlBQVksaUJBQUssRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBVSxFQUFFLGdDQUFjLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDaEc7Z0JBQ0QsU0FBUzthQUNaO1lBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLG1CQUFtQjs7UUFDdEIsTUFBTSxVQUFVLEdBQTRCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDekQsVUFBVSxDQUFDLElBQUksQ0FDWCxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7WUFDTixNQUFNLEVBQUUsZ0NBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDckQsQ0FBQyxDQUFDLENBQ04sQ0FBQztRQUVGLEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDbEIsU0FBUzthQUNaO1lBRUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFBLFVBQVUsQ0FBQyxvQkFBb0IsbUNBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUN2RyxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUcsVUFBVSxDQUFDLElBQUksQ0FDWCxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQ1YsVUFBVSxDQUFDLElBQWlCLEVBQzVCLGtCQUFrQixFQUNsQixJQUFJLENBQ1AsQ0FDSixDQUFDO1NBQ0w7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRU0sa0JBQWtCLENBQUMsSUFBWTtRQUNsQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVNLGtCQUFrQixDQUFDLElBQVk7UUFDbEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVNLHlCQUF5QjtRQUM1QixNQUFNLEtBQUssR0FBZ0IsRUFBRSxDQUFDO1FBRTlCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNuRyxJQUFJLGFBQWEsRUFBRTtZQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEI7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBSU0sS0FBSyxDQUFDLFlBQVksQ0FDckIsYUFBZ0MsRUFDaEMsVUFBK0IsRUFDL0IsVUFBZ0MsRUFDaEMsYUFBNEIsRUFDNUIsT0FBYTs7UUFFYixJQUFJLElBQWlCLENBQUM7UUFDdEIsSUFBSSxPQUFpQixDQUFDO1FBQ3RCLElBQUksSUFBVyxDQUFDO1FBQ2hCLElBQUksSUFBWSxDQUFDO1FBRWpCLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFO1lBQ2hDLElBQUksR0FBRyxVQUFVLENBQUM7WUFDbEIsSUFBSSxHQUFHLFVBQVUsQ0FBQztZQUNsQixPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBdUIsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sR0FBRyxhQUFhLENBQUM7U0FDM0I7YUFBTTtZQUNILElBQUksR0FBRyxhQUF1QixDQUFDO1lBQy9CLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsYUFBeUIsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksR0FBRyxVQUFVLENBQUM7WUFDbEIsSUFBSSxHQUFHLFVBQXlCLENBQUM7U0FDcEM7UUFFRCxRQUFRLElBQUksRUFBRTtZQUNWLEtBQUssZ0NBQVcsQ0FBQyxJQUFJO2dCQUNqQixPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsS0FBSyxnQ0FBVyxDQUFDLElBQUk7Z0JBQ2pCLE9BQU8sTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pFLEtBQUssZ0NBQVcsQ0FBQyxHQUFHO2dCQUNoQixPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakQsS0FBSyxnQ0FBVyxDQUFDLEdBQUc7Z0JBQ2hCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDMUQsS0FBSyxnQ0FBVyxDQUFDLEdBQUc7Z0JBQ2hCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDN0Q7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFpQixFQUFFLElBQVc7UUFDcEQsT0FBTyxzQkFBUyxDQUFDLGlCQUFpQixDQUM5QixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFZLEVBQzNDLE9BQU8sQ0FDVixDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBaUIsRUFBRSxJQUFXLEVBQUUsSUFBWSxFQUFFLE9BQWE7UUFDakYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7WUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBWTtZQUNsRCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSTtTQUNiLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBaUIsRUFBRSxJQUFXO1FBQ25ELE9BQU8sTUFBTSxvQkFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFpQixFQUFFLElBQVcsRUFBRSxJQUFZLEVBQUUsT0FBYTtRQUNoRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFZO1lBQ2xELE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxJQUFJO1NBQ2IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFpQixFQUFFLElBQVcsRUFBRSxJQUFZLEVBQUUsT0FBYTtRQUNoRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFZO1lBQ2xELE9BQU8sRUFBRSxPQUFPO1lBQ2hCLElBQUksRUFBRSxJQUFJO1NBQ2IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU8sSUFBSTtRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU0sa0JBQWtCLENBQUMsTUFBYyxFQUFFLE9BQW9CLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSztRQUNwRixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sQ0FBQyxPQUFPLEdBQUcsZ0NBQWMsQ0FBQyxhQUFhLENBQzFDLE9BQU8sQ0FBQyxPQUE0QyxFQUNwRCxhQUFpQyxDQUNwQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3BDO2FBQU07WUFDSCxPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUNqRDtRQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDNUIsTUFBTSxvQkFBb0IsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUN2QyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7YUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFOztZQUNMLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDVixNQUFNLEtBQUssR0FBRyxNQUFBLENBQUMsQ0FBQyxVQUFVLG1DQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUVwRTs7O21CQUdHO2dCQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzVFLE9BQU8sSUFBSSxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsS0FBSyxnQkFBZ0IsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNoRjtZQUNELE9BQU87Z0JBQ0gsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ0wsQ0FBQyxjQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxXQUFXLEdBQUc7aUJBQ2hDO2FBQ0osQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDWCxPQUFPO2dCQUNILENBQUMsY0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQzthQUNuQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsT0FBaUIsRUFBRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1FBQzlGLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQzFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ3BDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVUsRUFBRSxJQUFZO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUVELElBQUksR0FBVyxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksSUFBSSxFQUFFO2dCQUNOLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEI7U0FDSjtRQUVELE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVPLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxLQUFtQixFQUFFLElBQXlCO1FBQ3BGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixPQUFPLGdDQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNsRTthQUFNLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtZQUN4QixPQUFPO2dCQUNILENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNOLEtBQUs7b0JBQ0wsU0FBUyxDQUFDLEtBQUs7aUJBQ2xCO2FBQ0osQ0FBQztTQUNMO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKLENBQUE7QUF0Y1ksb0JBQW9CO0lBRGhDLElBQUEsbUJBQVUsR0FBRTs2Q0FXc0IsdUNBQWlCO1FBQ2IsK0NBQXFCO1FBQ3RCLCtCQUFvQjtRQUN4QiwyQkFBZ0I7UUFDbkIsd0JBQWE7UUFDSCxtREFBdUI7R0FmbkQsb0JBQW9CLENBc2NoQztBQXRjWSxvREFBb0IiLCJmaWxlIjoibGliL2RhdGEtZmlsdGVyLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBGaW5kT3B0aW9ucywgSWRlbnRpZmllciwgSW5jbHVkZWFibGUsIEluY2x1ZGVPcHRpb25zLCBNb2RlbCwgT3AsIFV0aWxzLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiB9IGZyb20gXCJzZXF1ZWxpemUvdHlwZXMvbW9kZWxcIjtcbmltcG9ydCB7IENvbCwgRm4gfSBmcm9tIFwic2VxdWVsaXplL3R5cGVzL3V0aWxzXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciwgRXhwb3J0QWRhcHRlciwgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVzQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2F0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IEN1c3RvbUF0dHJpYnV0ZXNDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvY3VzdG9tLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvZGF0YS1maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzIH0gZnJvbSBcIi4vbW9kZWxzL2V4cG9ydC10eXBlcy5tb2RlbFwiO1xuaW1wb3J0IHsgT3JkZXJNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuL21vZGVscy9wYXRoLm1vZGVsXCI7XG5pbXBvcnQgeyBTZWFyY2hBdHRyaWJ1dGVzTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2VhcmNoLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9kYXRhLWZpbHRlci5zY2FubmVyXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgQ3N2VXRpbHMgfSBmcm9tIFwiLi91dGlscy9jc3YudXRpbHNcIjtcbmltcG9ydCB7IFhsc3hVdGlscyB9IGZyb20gXCIuL3V0aWxzL3hsc3gudXRpbHNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+IHtcbiAgICBwcml2YXRlIF9jb25maWc6IERhdGFGaWx0ZXJDb25maWc7XG4gICAgcHJpdmF0ZSBfZGVmaW5pdGlvbnM6IEF0dHJpYnV0ZXNDb25maWdbXTtcblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKTogdHlwZW9mIE0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLm1vZGVsIGFzIHR5cGVvZiBNO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRhdGFEZWY6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBkYXRhRmlsdGVyU2Nhbm5lcjogRGF0YUZpbHRlclNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgc2VxdWVsaXplTW9kZWxTY2FubmVyOiBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgYWNjZXNzQ29udHJvbEFkYXB0ZXI6IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgZXhwb3J0QWRhcHRlcjogRXhwb3J0QWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRCeVBrKGlkZW50aWZpZXI6IElkZW50aWZpZXIsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YSB8IG51bGw+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQnlQayhpZGVudGlmaWVyLCB0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMob3B0aW9ucywgY29uZGl0aW9ucykpO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlT2JqZWN0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRCeVBrRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgaWRlbnRpZmllcjogSWRlbnRpZmllciwgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YSB8IG51bGw+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5fY29uZmlnLm1vZGVsIGFzIGFueSwgdXNlcik7XG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzPy5pbmNsdWRlcyhpZGVudGlmaWVyIGFzIG51bWJlcikgfHwgcmVzb3VyY2VzLmFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZEJ5UGsoaWRlbnRpZmllciwge30sIGNvbmRpdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZE9uZSh7XG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzLl9jb25maWcubW9kZWwucHJpbWFyeUtleUF0dHJpYnV0ZV06IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLndoZXJlID8/IHt9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjb25kaXRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZE9uZShvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGEgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZE9uZSh0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMob3B0aW9ucywgY29uZGl0aW9ucykpO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlT2JqZWN0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRPbmVGcm9tVXNlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyA9IHt9LCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kT25lKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgd2hlcmU6IGF3YWl0IHRoaXMubWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUgPz8ge30sIHVzZXIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZGl0aW9uc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQWxsKG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbCh0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMob3B0aW9ucywgY29uZGl0aW9ucykpO1xuICAgICAgICBpZiAoIXJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YVtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4gdGhpcy5yZWR1Y2VPYmplY3QoeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQWxsRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRBbGwoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB3aGVyZTogYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24ob3B0aW9ucy53aGVyZSA/PyB7fSwgdXNlcilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25kaXRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvdW50KHdoZXJlPzogV2hlcmVPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyh7IHdoZXJlIH0sIGNvbmRpdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5jb3VudChvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhvcHRpb25zLCBjb25kaXRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLCBmaW5kT3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQWxsKGZpbmRPcHRpb25zKTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmRPcHRpb25zID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKG9wdGlvbnMsIGNvbmRpdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2gsIGZpbmRPcHRpb25zKTtcblxuICAgICAgICBmaW5kT3B0aW9ucy53aGVyZSA9IGF3YWl0IHRoaXMubWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKGZpbmRPcHRpb25zLndoZXJlLCB1c2VyKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQWxsKGZpbmRPcHRpb25zKTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVGaW5kT3B0aW9ucyhvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBGaW5kT3B0aW9ucyB7XG4gICAgICAgIG9wdGlvbnMgPz89IHt9O1xuXG4gICAgICAgIGNvbnN0IG5lc3RlZEluY2x1ZGVzOiBBcnJheTxJbmNsdWRlT3B0aW9ucyB8IEluY2x1ZGVPcHRpb25zW10+ID0gW1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmaW5pdGlvbnMubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIGlmICgheC5wYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHgucGF0aC50cmFuc2Zvcm1QYXRoQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB4LndpdGhDb250ZXh0KHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpLnRyYW5zZm9ybUF0dHJpYnV0ZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0geC53aXRoQ29udGV4dCh0aGlzLmRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlKS50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwgcGF0aCwgYWRkaXRpb25hbEluY2x1ZGVzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4udGhpcy5fY29uZmlnLmdldEN1c3RvbUF0dHJpYnV0ZXNJbmNsdWRlcygpLm1hcCh4ID0+IHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiB4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyYW5vaWQ6IHgucGFyYW5vaWQsXG4gICAgICAgICAgICAgICAgc3ViUXVlcnk6IHguc3ViUXVlcnksXG4gICAgICAgICAgICAgICAgd2hlcmU6IHgud2hlcmUgPyBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyh4LndoZXJlLCBjb25kaXRpb25zKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSwgW10sIHguYXR0cmlidXRlcykpXG4gICAgICAgIF07XG4gICAgICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgICAgICAgIG5lc3RlZEluY2x1ZGVzLnB1c2gob3B0aW9ucy5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLmluY2x1ZGUgPSBTZXF1ZWxpemVVdGlscy5yZWR1Y2VJbmNsdWRlcyhuZXN0ZWRJbmNsdWRlcyk7XG5cbiAgICAgICAgY29uc3QgZ2VuZXJhdGVkQXR0cmlidXRlcyA9IHRoaXMuX2NvbmZpZy53aXRoQ29udGV4dCh0aGlzLmRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlKS50cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICBpZiAoZ2VuZXJhdGVkQXR0cmlidXRlcykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlQXR0cmlidXRlcyhvcHRpb25zLmF0dHJpYnV0ZXMsIGdlbmVyYXRlZEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmF0dHJpYnV0ZXMgPSBnZW5lcmF0ZWRBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlT3JkZXJJbmNsdWRlKG9yZGVyOiBPcmRlck1vZGVsLCBjb25kaXRpb25zPzogb2JqZWN0KTogSW5jbHVkZU9wdGlvbnNbXSB7XG4gICAgICAgIGlmICghb3JkZXIgfHwgIW9yZGVyLmNvbHVtbiB8fCBvcmRlci5kaXJlY3Rpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1c3RvbUF0dHIgPSB0aGlzLmdldEN1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pO1xuICAgICAgICBpZiAoY3VzdG9tQXR0cikge1xuICAgICAgICAgICAgaWYgKCFjdXN0b21BdHRyLmNvbmZpZy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IGN1c3RvbUF0dHIuY29uZmlnLnBhdGgsXG4gICAgICAgICAgICAgICAgd2hlcmU6IGN1c3RvbUF0dHIuY29uZmlnLndoZXJlID8gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoY3VzdG9tQXR0ci5jb25maWcud2hlcmUsIGNvbmRpdGlvbnMpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0T3JkZXJJbmNsdWRlcyh0aGlzLm1vZGVsLCBvcmRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlU2VhcmNoSW5jbHVkZShjb25kaXRpb25zPzogb2JqZWN0LCBpZ25vcmVBdHRyaWJ1dGVzID0gZmFsc2UpOiBJbmNsdWRlYWJsZVtdIHtcbiAgICAgICAgY29uc3QgbmVzdGVkSW5jbHVkZXM6IEFycmF5PEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXT4gPSBbXG4gICAgICAgICAgICAuLi50aGlzLl9kZWZpbml0aW9ucy5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF4LnBhdGggfHwgeC5wYXRoLnNlcGFyYXRlIHx8IHguaWdub3JlSW5TZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0geC5wYXRoLnRyYW5zZm9ybVBhdGhDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHgud2l0aENvbnRleHQodGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZSkudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSB4LndpdGhDb250ZXh0KHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpLnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCBwYXRoLCBhZGRpdGlvbmFsSW5jbHVkZXMsIGF0dHJpYnV0ZXMsIGlnbm9yZUF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLl9jb25maWcuZ2V0Q3VzdG9tQXR0cmlidXRlc0luY2x1ZGVzKCkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIGlmICgheC5wYXRoIHx8IHguc2VwYXJhdGUgfHwgeC5pZ25vcmVJblNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogeC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbm9pZDogeC5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlcnk6IHguc3ViUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlOiB4LndoZXJlID8gU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoeC53aGVyZSwgY29uZGl0aW9ucykgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9LCBbXSwgeC5hdHRyaWJ1dGVzLCBpZ25vcmVBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKG5lc3RlZEluY2x1ZGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVkdWNlT2JqZWN0KHJlc3VsdDogYW55KTogRGF0YSB7XG4gICAgICAgIGNvbnN0IHIgPSByZXN1bHQgaW5zdGFuY2VvZiBNb2RlbCA/IHJlc3VsdC50b0pTT04oKSA6IHJlc3VsdDtcbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyB0aGlzLmRhdGFEZWYucHJvdG90eXBlLmNvbnN0cnVjdG9yKHt9LCB7IGlzTmV3UmVjb3JkOiBmYWxzZSB9KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCByKTtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgICAgICAgKGRhdGEgYXMgYW55KS5kYXRhVmFsdWVzID0ge1xuICAgICAgICAgICAgICAgIC4uLnJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGRlZiBvZiB0aGlzLl9kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKGRlZi5wYXRoKSB7XG4gICAgICAgICAgICAgICAgZGF0YVtkZWYua2V5XSA9IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZU1vZGVsRnJvbVBhdGgocmVzdWx0LCBkZWYucGF0aC5wYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuc2V0RGF0YVZhbHVlKGRlZi5rZXkgYXMgYW55LCBTZXF1ZWxpemVVdGlscy5yZWR1Y2VNb2RlbEZyb21QYXRoKHJlc3VsdCwgZGVmLnBhdGgucGF0aCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YVtkZWYua2V5XSA9IHJlc3VsdFtkZWYua2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWFyY2hBdHRyaWJ1dGVzKCk6IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbFtdIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlczogU2VhcmNoQXR0cmlidXRlc01vZGVsW10gPSBbXTtcbiAgICAgICAgY29uc3QgbW9kZWxBdHRyID0gdGhpcy5fY29uZmlnLmdldFNlYXJjaGFibGVBdHRyaWJ1dGVzKCk7XG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICAgIC4uLm1vZGVsQXR0ci5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGEsXG4gICAgICAgICAgICAgICAga2V5OiBhLFxuICAgICAgICAgICAgICAgIGlzSnNvbjogU2VxdWVsaXplVXRpbHMuaXNDb2x1bW5Kc29uKHRoaXMubW9kZWwsIGEpXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgdGhpcy5fZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghZGVmaW5pdGlvbi5wYXRoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBkZWZpbml0aW9uLmlnbm9yZUluU2VhcmNoID8gW10gOiBkZWZpbml0aW9uLnNlYXJjaGFibGVBdHRyaWJ1dGVzID8/IGRlZmluaXRpb24uYXR0cmlidXRlcztcbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxJbmNsdWRlcyA9IGRlZmluaXRpb24ud2l0aENvbnRleHQodGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZSkudHJhbnNmb3JtSW5jbHVkZXNDb25maWcoe30pO1xuICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb24ucGF0aCBhcyBQYXRoTW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxJbmNsdWRlcyxcbiAgICAgICAgICAgICAgICAgICAgYXR0clxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzQ3VzdG9tQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9jb25maWcuY3VzdG9tQXR0cmlidXRlcy5maW5kKCh4KSA9PiB4LmNvbmZpZy5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IEN1c3RvbUF0dHJpYnV0ZXNDb25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmN1c3RvbUF0dHJpYnV0ZXMuZmluZCgoeCkgPT4geC5jb25maWcubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1c3RvbUF0dHJpYnV0ZUdyb3VwQnkoKTogKHN0cmluZyB8IEZuIHwgQ29sKVtdIHtcbiAgICAgICAgY29uc3QgZ3JvdXA6IEdyb3VwT3B0aW9uID0gW107XG5cbiAgICAgICAgY29uc3Qgc2hvdWxkR3JvdXBCeSA9IHRoaXMuX2NvbmZpZy5jdXN0b21BdHRyaWJ1dGVzLnNvbWUoKGF0dHJpYnV0ZSkgPT4gYXR0cmlidXRlLnNob3VsZEdyb3VwQnkoKSk7XG4gICAgICAgIGlmIChzaG91bGRHcm91cEJ5KSB7XG4gICAgICAgICAgICBncm91cC5wdXNoKFwiaWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShkYXRhOiBEYXRhW10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz47XG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz47XG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgZGF0YU9ySGVhZGVyczogRGF0YVtdIHwgc3RyaW5nW10sXG4gICAgICAgIHR5cGVPckRhdGE6IEV4cG9ydFR5cGVzIHwgYW55W10sXG4gICAgICAgIGxhbmdPclR5cGU6IHN0cmluZyB8IEV4cG9ydFR5cGVzLFxuICAgICAgICBvcHRpb25zT3JMYW5nPzogYW55IHwgc3RyaW5nLFxuICAgICAgICBvcHRpb25zPzogYW55XG4gICAgKTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+IHtcbiAgICAgICAgbGV0IHR5cGU6IEV4cG9ydFR5cGVzO1xuICAgICAgICBsZXQgaGVhZGVyczogc3RyaW5nW107XG4gICAgICAgIGxldCBkYXRhOiBhbnlbXTtcbiAgICAgICAgbGV0IGxhbmc6IHN0cmluZztcblxuICAgICAgICBpZiAodHlwZW9mIHR5cGVPckRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlT3JEYXRhO1xuICAgICAgICAgICAgbGFuZyA9IGxhbmdPclR5cGU7XG4gICAgICAgICAgICBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRzSGVhZGVyKGxhbmcsIHRoaXMuX2NvbmZpZy5leHBvcnRDb2x1bW5zID8/IFtdKTtcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmdldEV4cG9ydERhdGEoZGF0YU9ySGVhZGVycyBhcyBEYXRhW10pO1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNPckxhbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYW5nID0gb3B0aW9uc09yTGFuZyBhcyBzdHJpbmc7XG4gICAgICAgICAgICBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRzSGVhZGVyKGxhbmcsIGRhdGFPckhlYWRlcnMgYXMgc3RyaW5nW10pO1xuICAgICAgICAgICAgZGF0YSA9IHR5cGVPckRhdGE7XG4gICAgICAgICAgICB0eXBlID0gbGFuZ09yVHlwZSBhcyBFeHBvcnRUeXBlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5YTFNYOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkWGxzeChoZWFkZXJzLCBkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuSFRNTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZEh0bWwoaGVhZGVycywgZGF0YSwgbGFuZywgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLkNTVjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZENzdihoZWFkZXJzLCBkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuUERGOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkUGRmKGhlYWRlcnMsIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5aSVA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRaaXAoaGVhZGVycywgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRYbHN4KGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiBYbHN4VXRpbHMuYXJyYXlUb1hsc3hCdWZmZXIoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGhlYWRlcnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRIdG1sKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc0h0bWwobGFuZywge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2NvbmZpZy5tb2RlbC5nZXRUYWJsZU5hbWUoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBjb2x1bW5zOiBoZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRDc3YoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IENzdlV0aWxzLmFycmF5VG9Dc3ZCdWZmZXIoZGF0YSwgaGVhZGVycyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkUGRmKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc1BkZihsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFppcChoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10sIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydEFkYXB0ZXIuZXhwb3J0QXNaaXAobGFuZywge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2NvbmZpZy5tb2RlbC5nZXRUYWJsZU5hbWUoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBjb2x1bW5zOiBoZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGF0YUZpbHRlclNjYW5uZXIuZ2V0RGF0YUZpbHRlcih0aGlzLmRhdGFEZWYpO1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9ucyA9IHRoaXMuZGF0YUZpbHRlclNjYW5uZXIuZ2V0QXR0cmlidXRlcyh0aGlzLmRhdGFEZWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM6IEZpbmRPcHRpb25zLCBpZ25vcmVBdHRyaWJ1dGVzID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlYXJjaEluY2x1ZGUgPSB0aGlzLmdlbmVyYXRlU2VhcmNoSW5jbHVkZSh7fSwgaWdub3JlQXR0cmlidXRlcyk7XG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdLFxuICAgICAgICAgICAgc2VhcmNoSW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLndoZXJlKSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW10gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSB7IFtPcC5hbmRdOiBbb3B0aW9ucy53aGVyZV0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0gb3B0aW9ucy53aGVyZTtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVGaWVsZHNPYmplY3QgPSBzZWFyY2hWYWx1ZSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRTZWFyY2hBdHRyaWJ1dGVzKClcbiAgICAgICAgICAgICAgICAubWFwKGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5pc0pzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYS5saXRlcmFsS2V5ID8/IGBcXGAke3RoaXMubW9kZWwubmFtZX1cXGAuXFxgJHthLmtleX1cXGBgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGxpdGVyYWwgZnVuY3Rpb24gaXMgbm90IHdvcmtpbmcgb2Ygc29tZSByZWFzb24uLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vZGVsLnNlcXVlbGl6ZS5lc2NhcGUoYCUke3NlYXJjaFZhbHVlLnRvVXBwZXJDYXNlKCl9JWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdGlscy5MaXRlcmFsKGBVUFBFUihKU09OX0VYVFJBQ1QoJHtmaWVsZH0sICckJykpIExJS0UgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Eua2V5XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPcC5saWtlXTogYCUke3NlYXJjaFZhbHVlfSVgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSkuZmlsdGVyKHggPT4gISF4KTtcblxuICAgICAgICBjb25zdCB0b2tlbnMgPSBzZWFyY2guc3BsaXQoXCIgXCIpO1xuICAgICAgICB3aGVyZVtPcC5hbmRdLnB1c2goXG4gICAgICAgICAgICB0b2tlbnMubWFwKHQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtPcC5vcl06IGdlbmVyYXRlRmllbGRzT2JqZWN0KHQpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRzSGVhZGVyKGxhbmc6IHN0cmluZywgaGVhZGVyczogc3RyaW5nW10sIHRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChoZWFkZXJzLm1hcCh4ID0+IHRyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24obGFuZywgYGV4cG9ydHMuJHt4fWApKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnREYXRhKGRhdGE6IERhdGFbXSk6IG9iamVjdFtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLl9jb25maWcuZXhwb3J0Q29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZSwgcHJvcF0gPSB0aGlzLmdldEV4cG9ydFZhbHVlKHgsIGtleSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Ake2krK306JHtwcm9wfWBdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydFZhbHVlKGRhdGE6IERhdGEsIHBhdGg6IHN0cmluZyk6IFt1bmtub3duLCBzdHJpbmddIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gW2RhdGFba2V5XSwga2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBrZXk6IHN0cmluZztcbiAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2RhdGEsIGtleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMuX2NvbmZpZy5tb2RlbCBhcyBhbnksIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcykge1xuICAgICAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoeyBpZDogcmVzb3VyY2VzLmlkcyB9LCB3aGVyZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VzLndoZXJlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,16 +1,16 @@
1
1
  import { Type } from "@nestjs/common";
2
- import { AccessControlAdapter } from "./adapters";
3
- import { ExportAdapter } from "./adapters";
4
- import { TranslateAdapter } from "./adapters";
2
+ import { AccessControlAdapter, ExportAdapter, TranslateAdapter } from "./adapters";
5
3
  import { DataFilterRepository } from "./data-filter.repository";
6
4
  import { DataFilterScanner } from "./scanners/data-filter.scanner";
7
5
  import { SequelizeModelScanner } from "./scanners/sequelize-model.scanner";
6
+ import { DialectFormatterService } from "./services/dialect-formatter.service";
8
7
  export declare class DataFilterService {
9
8
  private dataFilterScanner;
10
9
  private sequelizeModelScanner;
11
10
  private accessControlAdapter;
12
11
  private translateAdapter;
13
12
  private exportAdapter;
14
- constructor(dataFilterScanner: DataFilterScanner, sequelizeModelScanner: SequelizeModelScanner, accessControlAdapter: AccessControlAdapter, translateAdapter: TranslateAdapter, exportAdapter: ExportAdapter);
13
+ private dialectFormatterService;
14
+ constructor(dataFilterScanner: DataFilterScanner, sequelizeModelScanner: SequelizeModelScanner, accessControlAdapter: AccessControlAdapter, translateAdapter: TranslateAdapter, exportAdapter: ExportAdapter, dialectFormatterService: DialectFormatterService);
15
15
  for<T>(data: Type<T>): DataFilterRepository<T>;
16
16
  }
@@ -12,31 +12,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.DataFilterService = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const adapters_1 = require("./adapters");
15
- const adapters_2 = require("./adapters");
16
- const adapters_3 = require("./adapters");
17
15
  const data_filter_repository_1 = require("./data-filter.repository");
18
16
  const data_filter_scanner_1 = require("./scanners/data-filter.scanner");
19
17
  const sequelize_model_scanner_1 = require("./scanners/sequelize-model.scanner");
18
+ const dialect_formatter_service_1 = require("./services/dialect-formatter.service");
20
19
  let DataFilterService = class DataFilterService {
21
- constructor(dataFilterScanner, sequelizeModelScanner, accessControlAdapter, translateAdapter, exportAdapter) {
20
+ constructor(dataFilterScanner, sequelizeModelScanner, accessControlAdapter, translateAdapter, exportAdapter, dialectFormatterService) {
22
21
  this.dataFilterScanner = dataFilterScanner;
23
22
  this.sequelizeModelScanner = sequelizeModelScanner;
24
23
  this.accessControlAdapter = accessControlAdapter;
25
24
  this.translateAdapter = translateAdapter;
26
25
  this.exportAdapter = exportAdapter;
26
+ this.dialectFormatterService = dialectFormatterService;
27
27
  }
28
28
  for(data) {
29
- return new data_filter_repository_1.DataFilterRepository(data, this.dataFilterScanner, this.sequelizeModelScanner, this.accessControlAdapter, this.translateAdapter, this.exportAdapter);
29
+ return new data_filter_repository_1.DataFilterRepository(data, this.dataFilterScanner, this.sequelizeModelScanner, this.accessControlAdapter, this.translateAdapter, this.exportAdapter, this.dialectFormatterService);
30
30
  }
31
31
  };
32
- exports.DataFilterService = DataFilterService;
33
- exports.DataFilterService = DataFilterService = __decorate([
32
+ DataFilterService = __decorate([
34
33
  (0, common_1.Injectable)(),
35
34
  __metadata("design:paramtypes", [data_filter_scanner_1.DataFilterScanner,
36
35
  sequelize_model_scanner_1.SequelizeModelScanner,
37
36
  adapters_1.AccessControlAdapter,
38
- adapters_3.TranslateAdapter,
39
- adapters_2.ExportAdapter])
37
+ adapters_1.TranslateAdapter,
38
+ adapters_1.ExportAdapter,
39
+ dialect_formatter_service_1.DialectFormatterService])
40
40
  ], DataFilterService);
41
+ exports.DataFilterService = DataFilterService;
41
42
 
42
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FBa0Q7QUFDbEQseUNBQTJDO0FBQzNDLHlDQUE4QztBQUM5QyxxRUFBZ0U7QUFDaEUsd0VBQW1FO0FBQ25FLGdGQUEyRTtBQUdwRSxJQUFNLGlCQUFpQixHQUF2QixNQUFNLGlCQUFpQjtJQUMxQixZQUNZLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUo1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ3JDLENBQUM7SUFFRyxHQUFHLENBQUksSUFBYTtRQUN2QixPQUFPLElBQUksNkNBQW9CLENBQzNCLElBQUksRUFDSixJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxhQUFhLENBQ3JCLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQTtBQW5CWSw4Q0FBaUI7NEJBQWpCLGlCQUFpQjtJQUQ3QixJQUFBLG1CQUFVLEdBQUU7cUNBR3NCLHVDQUFpQjtRQUNiLCtDQUFxQjtRQUN0QiwrQkFBb0I7UUFDeEIsMkJBQWdCO1FBQ25CLHdCQUFhO0dBTi9CLGlCQUFpQixDQW1CN0IiLCJmaWxlIjoibGliL2RhdGEtZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBFeHBvcnRBZGFwdGVyIH0gZnJvbSBcIi4vYWRhcHRlcnNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyc1wiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclJlcG9zaXRvcnkgfSBmcm9tIFwiLi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL2RhdGEtZmlsdGVyLnNjYW5uZXJcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhRmlsdGVyU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlclNjYW5uZXI6IERhdGFGaWx0ZXJTY2FubmVyLFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVBZGFwdGVyOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIGV4cG9ydEFkYXB0ZXI6IEV4cG9ydEFkYXB0ZXJcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgZm9yPFQ+KGRhdGE6IFR5cGU8VD4pOiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YUZpbHRlclJlcG9zaXRvcnk8VD4oXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdGhpcy5kYXRhRmlsdGVyU2Nhbm5lcixcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICAgICAgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0QWRhcHRlclxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FBbUY7QUFDbkYscUVBQWdFO0FBQ2hFLHdFQUFtRTtBQUNuRSxnRkFBMkU7QUFDM0Usb0ZBQStFO0FBR3hFLElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWlCO0lBQzFCLFlBQ1ksaUJBQW9DLEVBQ3BDLHFCQUE0QyxFQUM1QyxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLHVCQUFnRDtRQUxoRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7SUFDekQsQ0FBQztJQUVHLEdBQUcsQ0FBSSxJQUFhO1FBQ3ZCLE9BQU8sSUFBSSw2Q0FBb0IsQ0FDM0IsSUFBSSxFQUNKLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUMxQixJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLHVCQUF1QixDQUMvQixDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUE7QUFyQlksaUJBQWlCO0lBRDdCLElBQUEsbUJBQVUsR0FBRTtxQ0FHc0IsdUNBQWlCO1FBQ2IsK0NBQXFCO1FBQ3RCLCtCQUFvQjtRQUN4QiwyQkFBZ0I7UUFDbkIsd0JBQWE7UUFDSCxtREFBdUI7R0FQbkQsaUJBQWlCLENBcUI3QjtBQXJCWSw4Q0FBaUIiLCJmaWxlIjoibGliL2RhdGEtZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciwgRXhwb3J0QWRhcHRlciwgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyUmVwb3NpdG9yeSB9IGZyb20gXCIuL2RhdGEtZmlsdGVyLnJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJTY2FubmVyIH0gZnJvbSBcIi4vc2Nhbm5lcnMvZGF0YS1maWx0ZXIuc2Nhbm5lclwiO1xuaW1wb3J0IHsgU2VxdWVsaXplTW9kZWxTY2FubmVyIH0gZnJvbSBcIi4vc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXJcIjtcbmltcG9ydCB7IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGF0YUZpbHRlclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRhdGFGaWx0ZXJTY2FubmVyOiBEYXRhRmlsdGVyU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBzZXF1ZWxpemVNb2RlbFNjYW5uZXI6IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBhY2Nlc3NDb250cm9sQWRhcHRlcjogQWNjZXNzQ29udHJvbEFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlQWRhcHRlcjogVHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSBleHBvcnRBZGFwdGVyOiBFeHBvcnRBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIGRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlOiBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZVxuICAgICkge31cblxuICAgIHB1YmxpYyBmb3I8VD4oZGF0YTogVHlwZTxUPik6IERhdGFGaWx0ZXJSZXBvc2l0b3J5PFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRmlsdGVyUmVwb3NpdG9yeTxUPihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLmRhdGFGaWx0ZXJTY2FubmVyLFxuICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICAgICAgdGhpcy5leHBvcnRBZGFwdGVyLFxuICAgICAgICAgICAgdGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,17 +1,20 @@
1
1
  import { Type } from "@nestjs/common";
2
2
  import { TranslateAdapter } from "../adapters/translate.adapter";
3
+ import { DialectFormatterService } from "../services/dialect-formatter.service";
3
4
  import { DefaultFilterDefinition } from "./filters/default.filter";
4
5
  import { FilterConfig, FilterModel } from "./models";
5
6
  import { ExportTypes } from "../models/export-types.model";
6
7
  import { DefaultOrderRule } from "./order-rules/default.order-rule";
7
8
  export declare abstract class BaseFilter<T> implements FilterModel<T> {
8
9
  private _translateService;
10
+ private _dialectFormatterService;
9
11
  [name: string]: FilterConfig | unknown;
10
12
  abstract dataDefinition: Type<T>;
11
13
  exportDataDefinition?: Type<T>;
12
14
  defaultFilter?: DefaultFilterDefinition;
13
15
  defaultOrderRule?: DefaultOrderRule;
14
16
  set translateService(translateService: TranslateAdapter);
17
+ set dialectFormatterService(dialectFormatterService: DialectFormatterService);
15
18
  get translateService(): TranslateAdapter;
16
19
  getExportedFieldsKeys(type?: ExportTypes): Promise<string[]>;
17
20
  getExportedFields(value: T, lang?: string, type?: ExportTypes): Promise<any[]>;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BaseFilter = void 0;
4
4
  const filters_1 = require("./filters");
5
+ const order_rule_1 = require("./order-rules/order-rule");
5
6
  class BaseFilter {
6
7
  set translateService(translateService) {
7
8
  this._translateService = translateService;
@@ -17,6 +18,23 @@ class BaseFilter {
17
18
  }
18
19
  }
19
20
  }
21
+ set dialectFormatterService(dialectFormatterService) {
22
+ this._dialectFormatterService = dialectFormatterService;
23
+ for (const key in this) {
24
+ if (!this.hasOwnProperty(key) || key === "dataDefinition") {
25
+ continue;
26
+ }
27
+ if (filters_1.Filter.validate(this[key])) {
28
+ this[key].dialectFormatterService = dialectFormatterService;
29
+ }
30
+ if (filters_1.GroupFilter.validate(this[key])) {
31
+ this[key].dialectFormatterService = dialectFormatterService;
32
+ }
33
+ if (order_rule_1.OrderRule.validate(this[key])) {
34
+ this[key].dialectFormatterService = dialectFormatterService;
35
+ }
36
+ }
37
+ }
20
38
  get translateService() {
21
39
  return this._translateService;
22
40
  }
@@ -29,4 +47,4 @@ class BaseFilter {
29
47
  }
30
48
  exports.BaseFilter = BaseFilter;
31
49
 
32
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvYmFzZS1maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdUNBQXlGO0FBTXpGLE1BQXNCLFVBQVU7SUFTNUIsSUFBVyxnQkFBZ0IsQ0FBQyxnQkFBa0M7UUFDMUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBRTFDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxnQkFBZ0IsRUFBRTtnQkFDdkQsU0FBUzthQUNaO1lBRUQsSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQixDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxHQUFHLENBQVksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQzthQUM3RDtZQUNELElBQUkscUJBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBMEIsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFpQixDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO2FBQ2xFO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFrQjtRQUNqRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBUSxFQUFFLElBQWEsRUFBRSxJQUFrQjtRQUN0RSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDSjtBQXBDRCxnQ0FvQ0MiLCJmaWxlIjoibGliL2ZpbHRlci9iYXNlLWZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlcnMvdHJhbnNsYXRlLmFkYXB0ZXJcIjtcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyRGVmaW5pdGlvbiwgR3JvdXBGaWx0ZXIsIEdyb3VwRmlsdGVyRGVmaW5pdGlvbiB9IGZyb20gXCIuL2ZpbHRlcnNcIjtcbmltcG9ydCB7IERlZmF1bHRGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcIi4vZmlsdGVycy9kZWZhdWx0LmZpbHRlclwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlnLCBGaWx0ZXJNb2RlbCB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZXMgfSBmcm9tIFwiLi4vbW9kZWxzL2V4cG9ydC10eXBlcy5tb2RlbFwiO1xuaW1wb3J0IHsgRGVmYXVsdE9yZGVyUnVsZSB9IGZyb20gXCIuL29yZGVyLXJ1bGVzL2RlZmF1bHQub3JkZXItcnVsZVwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZpbHRlcjxUPiBpbXBsZW1lbnRzIEZpbHRlck1vZGVsPFQ+IHtcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyO1xuXG4gICAgW25hbWU6IHN0cmluZ106IEZpbHRlckNvbmZpZyB8IHVua25vd247XG4gICAgcHVibGljIGFic3RyYWN0IGRhdGFEZWZpbml0aW9uOiBUeXBlPFQ+O1xuICAgIHB1YmxpYyBleHBvcnREYXRhRGVmaW5pdGlvbj86IFR5cGU8VD47XG4gICAgcHVibGljIGRlZmF1bHRGaWx0ZXI/OiBEZWZhdWx0RmlsdGVyRGVmaW5pdGlvbjtcbiAgICBwdWJsaWMgZGVmYXVsdE9yZGVyUnVsZT86IERlZmF1bHRPcmRlclJ1bGU7XG5cbiAgICBwdWJsaWMgc2V0IHRyYW5zbGF0ZVNlcnZpY2UodHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlQWRhcHRlcikge1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBrZXkgPT09IFwiZGF0YURlZmluaXRpb25cIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoRmlsdGVyLnZhbGlkYXRlKHRoaXNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgRmlsdGVyKS50cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChHcm91cEZpbHRlci52YWxpZGF0ZSh0aGlzW2tleV0gYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgR3JvdXBGaWx0ZXIpLnRyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdHJhbnNsYXRlU2VydmljZSgpOiBUcmFuc2xhdGVBZGFwdGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEV4cG9ydGVkRmllbGRzS2V5cyh0eXBlPzogRXhwb3J0VHlwZXMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwb3J0ZWRGaWVsZHModmFsdWU6IFQsIGxhbmc/OiBzdHJpbmcsIHR5cGU/OiBFeHBvcnRUeXBlcyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvYmFzZS1maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsdUNBQXlGO0FBS3pGLHlEQUEwRTtBQUUxRSxNQUFzQixVQUFVO0lBVTVCLElBQVcsZ0JBQWdCLENBQUMsZ0JBQWtDO1FBQzFELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUUxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ3ZELFNBQVM7YUFDWjtZQUVELElBQUksZ0JBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFZLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7YUFDN0Q7WUFDRCxJQUFJLHFCQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLENBQUMsRUFBRTtnQkFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQzthQUNsRTtTQUNKO0lBQ0wsQ0FBQztJQUVELElBQVcsdUJBQXVCLENBQUMsdUJBQWdEO1FBQy9FLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx1QkFBdUIsQ0FBQztRQUV4RCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ3ZELFNBQVM7YUFDWjtZQUVELElBQUksZ0JBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsQ0FBQyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFZLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7YUFDM0U7WUFDRCxJQUFJLHFCQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLENBQUMsRUFBRTtnQkFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBaUIsQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQzthQUNoRjtZQUNELElBQUksc0JBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBd0IsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFlLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7YUFDOUU7U0FDSjtJQUNMLENBQUM7SUFDRCxJQUFXLGdCQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQWtCO1FBQ2pELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFRLEVBQUUsSUFBYSxFQUFFLElBQWtCO1FBQ3RFLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztDQUNKO0FBekRELGdDQXlEQyIsImZpbGUiOiJsaWIvZmlsdGVyL2Jhc2UtZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy90cmFuc2xhdGUuYWRhcHRlclwiO1xuaW1wb3J0IHsgRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJEZWZpbml0aW9uLCBHcm91cEZpbHRlciwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuaW1wb3J0IHsgRGVmYXVsdEZpbHRlckRlZmluaXRpb24gfSBmcm9tIFwiLi9maWx0ZXJzL2RlZmF1bHQuZmlsdGVyXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWcsIEZpbHRlck1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcyB9IGZyb20gXCIuLi9tb2RlbHMvZXhwb3J0LXR5cGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBEZWZhdWx0T3JkZXJSdWxlIH0gZnJvbSBcIi4vb3JkZXItcnVsZXMvZGVmYXVsdC5vcmRlci1ydWxlXCI7XG5pbXBvcnQgeyBPcmRlclJ1bGUsIE9yZGVyUnVsZURlZmluaXRpb24gfSBmcm9tIFwiLi9vcmRlci1ydWxlcy9vcmRlci1ydWxlXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRmlsdGVyPFQ+IGltcGxlbWVudHMgRmlsdGVyTW9kZWw8VD4ge1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZUFkYXB0ZXI7XG4gICAgcHJpdmF0ZSBfZGlhbGVjdEZvcm1hdHRlclNlcnZpY2U6IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlO1xuXG4gICAgW25hbWU6IHN0cmluZ106IEZpbHRlckNvbmZpZyB8IHVua25vd247XG4gICAgcHVibGljIGFic3RyYWN0IGRhdGFEZWZpbml0aW9uOiBUeXBlPFQ+O1xuICAgIHB1YmxpYyBleHBvcnREYXRhRGVmaW5pdGlvbj86IFR5cGU8VD47XG4gICAgcHVibGljIGRlZmF1bHRGaWx0ZXI/OiBEZWZhdWx0RmlsdGVyRGVmaW5pdGlvbjtcbiAgICBwdWJsaWMgZGVmYXVsdE9yZGVyUnVsZT86IERlZmF1bHRPcmRlclJ1bGU7XG5cbiAgICBwdWJsaWMgc2V0IHRyYW5zbGF0ZVNlcnZpY2UodHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlQWRhcHRlcikge1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBrZXkgPT09IFwiZGF0YURlZmluaXRpb25cIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoRmlsdGVyLnZhbGlkYXRlKHRoaXNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgRmlsdGVyKS50cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChHcm91cEZpbHRlci52YWxpZGF0ZSh0aGlzW2tleV0gYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgR3JvdXBGaWx0ZXIpLnRyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZShkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgPSBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBrZXkgPT09IFwiZGF0YURlZmluaXRpb25cIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoRmlsdGVyLnZhbGlkYXRlKHRoaXNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgRmlsdGVyKS5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZSA9IGRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEdyb3VwRmlsdGVyLnZhbGlkYXRlKHRoaXNba2V5XSBhcyBHcm91cEZpbHRlckRlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgKHRoaXNba2V5XSBhcyBHcm91cEZpbHRlcikuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgPSBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChPcmRlclJ1bGUudmFsaWRhdGUodGhpc1trZXldIGFzIE9yZGVyUnVsZURlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgKHRoaXNba2V5XSBhcyBPcmRlclJ1bGUpLmRpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlID0gZGlhbGVjdEZvcm1hdHRlclNlcnZpY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGdldCB0cmFuc2xhdGVTZXJ2aWNlKCk6IFRyYW5zbGF0ZUFkYXB0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwb3J0ZWRGaWVsZHNLZXlzKHR5cGU/OiBFeHBvcnRUeXBlcyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFeHBvcnRlZEZpZWxkcyh2YWx1ZTogVCwgbGFuZz86IHN0cmluZywgdHlwZT86IEV4cG9ydFR5cGVzKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuIl19