@mediusinc/mng-commons 3.0.0-rc.1 → 3.0.0-rc.10

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 (136) hide show
  1. package/README.md +8 -7
  2. package/assets/i18n/en.json +5 -1
  3. package/assets/i18n/sl.json +5 -1
  4. package/dev-scripts/version-info.js +13 -6
  5. package/esm2022/index.mjs +3 -1
  6. package/esm2022/lib/api/utils/object-serializer.util.mjs +11 -4
  7. package/esm2022/lib/components/action/action.component.mjs +18 -6
  8. package/esm2022/lib/components/action/editor/action-editor.component.mjs +83 -18
  9. package/esm2022/lib/components/action/models/action-execution.model.mjs +14 -37
  10. package/esm2022/lib/components/action/route/action-route.component.mjs +9 -2
  11. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +18 -5
  12. package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +21 -8
  13. package/esm2022/lib/components/form/editor/form-editor.component.mjs +9 -8
  14. package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +22 -4
  15. package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +43 -15
  16. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +11 -4
  17. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +8 -6
  18. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +16 -7
  19. package/esm2022/lib/components/form/models/field-action-context.model.mjs +1 -1
  20. package/esm2022/lib/components/form/models/index.mjs +2 -1
  21. package/esm2022/lib/components/tableview/table/table.component.mjs +57 -55
  22. package/esm2022/lib/descriptors/action/action-button.descriptor.mjs +10 -2
  23. package/esm2022/lib/descriptors/action/action.descriptor.mjs +19 -8
  24. package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +3 -3
  25. package/esm2022/lib/descriptors/editor/field.descriptor.mjs +13 -4
  26. package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +7 -6
  27. package/esm2022/lib/descriptors/table/column.descriptor.mjs +3 -3
  28. package/esm2022/lib/descriptors/table/table.descriptor.mjs +35 -4
  29. package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +3 -3
  30. package/esm2022/lib/error/error.handler.mjs +20 -0
  31. package/esm2022/lib/error/index.mjs +2 -0
  32. package/esm2022/lib/guards/index.mjs +2 -0
  33. package/esm2022/lib/guards/unsaved-changes.guard.mjs +4 -0
  34. package/esm2022/lib/models/action-editor.model.mjs +2 -0
  35. package/esm2022/lib/models/can-component-deactivate.model.mjs +2 -0
  36. package/esm2022/lib/models/config.model.mjs +1 -1
  37. package/esm2022/lib/models/error.model.mjs +44 -2
  38. package/esm2022/lib/models/index.mjs +4 -2
  39. package/esm2022/lib/models/log.model.mjs +10 -0
  40. package/esm2022/lib/models/version.model.mjs +1 -1
  41. package/esm2022/lib/pipes/json-path.pipe.mjs +8 -4
  42. package/esm2022/lib/provide-commons.mjs +22 -16
  43. package/esm2022/lib/router/route-builder.mjs +4 -4
  44. package/esm2022/lib/router/routes-builder.mjs +3 -3
  45. package/esm2022/lib/router/tableview-route-builder.mjs +4 -1
  46. package/esm2022/lib/security/authorization.service.mjs +5 -4
  47. package/esm2022/lib/security/authorization.util.mjs +3 -3
  48. package/esm2022/lib/services/action-error-mapper.service.mjs +20 -0
  49. package/esm2022/lib/services/action-executor.service.mjs +97 -57
  50. package/esm2022/lib/services/commons.service.mjs +16 -25
  51. package/esm2022/lib/services/configuration.service.mjs +56 -32
  52. package/esm2022/lib/services/index.mjs +4 -2
  53. package/esm2022/lib/services/internal/commons-init.service.mjs +49 -23
  54. package/esm2022/lib/services/log-publisher-console.service.mjs +40 -0
  55. package/esm2022/lib/services/logger.service.mjs +130 -0
  56. package/esm2022/lib/services/providers/index.mjs +1 -2
  57. package/esm2022/lib/services/router.service.mjs +106 -25
  58. package/esm2022/lib/services/tokens/index.mjs +2 -1
  59. package/esm2022/lib/services/tokens/log-publisher.token.mjs +3 -0
  60. package/esm2022/lib/services/version.service.mjs +7 -2
  61. package/esm2022/lib/utils/action-data-provider.util.mjs +7 -7
  62. package/esm2022/lib/utils/editor-formly.util.mjs +2 -1
  63. package/esm2022/lib/utils/error.util.mjs +247 -0
  64. package/esm2022/lib/utils/i18n.util.mjs +7 -9
  65. package/esm2022/lib/utils/index.mjs +2 -1
  66. package/esm2022/lib/utils/notification.util.mjs +3 -2
  67. package/esm2022/lib/utils/object.util.mjs +32 -5
  68. package/esm2022/lib/utils/route.util.mjs +3 -3
  69. package/esm2022/lib/utils/string.util.mjs +33 -2
  70. package/esm2022/lib/utils/tableview.util.mjs +3 -3
  71. package/esm2022/lib/utils/type.util.mjs +5 -5
  72. package/fesm2022/mediusinc-mng-commons.mjs +4352 -3484
  73. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  74. package/index.d.ts +1 -0
  75. package/lib/api/utils/object-serializer.util.d.ts +1 -0
  76. package/lib/components/action/action.component.d.ts +1 -0
  77. package/lib/components/action/editor/action-editor.component.d.ts +17 -6
  78. package/lib/components/action/models/action-execution.model.d.ts +6 -4
  79. package/lib/components/action/route/action-route.component.d.ts +4 -1
  80. package/lib/components/form/autocomplete/autocomplete.component.d.ts +1 -0
  81. package/lib/components/form/dropdown/dropdown.component.d.ts +1 -0
  82. package/lib/components/form/editor/form-editor.component.d.ts +1 -0
  83. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +3 -0
  84. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +2 -0
  85. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +1 -0
  86. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +1 -0
  87. package/lib/components/form/models/field-action-context.model.d.ts +7 -0
  88. package/lib/components/form/models/index.d.ts +1 -0
  89. package/lib/components/tableview/table/table.component.d.ts +2 -0
  90. package/lib/descriptors/action/action-button.descriptor.d.ts +4 -1
  91. package/lib/descriptors/action/action.descriptor.d.ts +3 -0
  92. package/lib/descriptors/editor/field.descriptor.d.ts +10 -8
  93. package/lib/descriptors/table/column.descriptor.d.ts +1 -1
  94. package/lib/descriptors/table/table.descriptor.d.ts +26 -3
  95. package/lib/error/error.handler.d.ts +6 -0
  96. package/lib/error/index.d.ts +1 -0
  97. package/lib/guards/index.d.ts +1 -0
  98. package/lib/guards/unsaved-changes.guard.d.ts +3 -0
  99. package/lib/models/action-editor.model.d.ts +4 -0
  100. package/lib/models/can-component-deactivate.model.d.ts +4 -0
  101. package/lib/models/config.model.d.ts +2 -1
  102. package/lib/models/error.model.d.ts +44 -8
  103. package/lib/models/index.d.ts +3 -1
  104. package/lib/models/log.model.d.ts +40 -0
  105. package/lib/models/version.model.d.ts +1 -1
  106. package/lib/pipes/json-path.pipe.d.ts +1 -0
  107. package/lib/security/authorization.service.d.ts +1 -0
  108. package/lib/services/action-error-mapper.service.d.ts +18 -0
  109. package/lib/services/action-executor.service.d.ts +12 -6
  110. package/lib/services/commons.service.d.ts +9 -14
  111. package/lib/services/configuration.service.d.ts +13 -5
  112. package/lib/services/index.d.ts +3 -1
  113. package/lib/services/internal/commons-init.service.d.ts +8 -8
  114. package/lib/services/log-publisher-console.service.d.ts +4 -0
  115. package/lib/services/logger.service.d.ts +33 -0
  116. package/lib/services/providers/index.d.ts +0 -1
  117. package/lib/services/router.service.d.ts +17 -2
  118. package/lib/services/tokens/index.d.ts +1 -0
  119. package/lib/services/tokens/log-publisher.token.d.ts +3 -0
  120. package/lib/services/version.service.d.ts +1 -0
  121. package/lib/utils/error.util.d.ts +116 -0
  122. package/lib/utils/i18n.util.d.ts +3 -3
  123. package/lib/utils/index.d.ts +1 -0
  124. package/lib/utils/notification.util.d.ts +2 -2
  125. package/lib/utils/object.util.d.ts +6 -4
  126. package/lib/utils/string.util.d.ts +5 -0
  127. package/package.json +4 -1
  128. package/scss/common/theme/designer/_components.scss +1 -1
  129. package/scss/mng-overrides/_theme_dialog.scss +7 -0
  130. package/scss/mng-overrides/_theme_tableview.scss +15 -0
  131. package/esm2022/lib/models/error-internal.model.mjs +0 -27
  132. package/esm2022/lib/services/error-mapper.service.mjs +0 -14
  133. package/esm2022/lib/services/providers/config-service.provider.mjs +0 -31
  134. package/lib/models/error-internal.model.d.ts +0 -29
  135. package/lib/services/error-mapper.service.d.ts +0 -7
  136. package/lib/services/providers/config-service.provider.d.ts +0 -6
package/README.md CHANGED
@@ -36,7 +36,7 @@ Primer konfiguracije za multi-module HTTP loader:
36
36
 
37
37
  - HTTP loader factory:
38
38
  ```ts
39
- export function i18nHttpLoaderFactory(http: HttpClient) {
39
+ export function i18nHttpLoaderFactory(http: HttpBackend ) {
40
40
  return new MultiTranslateHttpLoader(http, [
41
41
  {prefix: './assets/i18n/mng/', suffix: '.json'},
42
42
  {prefix: './assets/i18n/', suffix: '.json'}
@@ -44,14 +44,15 @@ export function i18nHttpLoaderFactory(http: HttpClient) {
44
44
  }
45
45
  ```
46
46
 
47
- - Konfiguracija v `AppModule`:
47
+ - Konfiguracija v `main.ts` (v primeru uporabe modulov: `AppModule`):
48
+
48
49
  ```ts
49
50
  TranslateModule.forRoot({
50
- loader: {
51
- provide: TranslateLoader,
52
- useFactory: i18nHttpLoaderFactory,
53
- deps: [HttpClient]
54
- }
51
+ loader: {
52
+ provide: TranslateLoader,
53
+ useFactory: i18nHttpLoaderFactory,
54
+ deps: [HttpBackend]
55
+ }
55
56
  })
56
57
  ```
57
58
 
@@ -83,7 +83,11 @@
83
83
  },
84
84
  "imageUrlPlaceholder": "Insert image URL ...",
85
85
  "imageUrlAdd": "Add image URL",
86
- "imageLoadError": "An error occurred while loading the image"
86
+ "imageLoadError": "An error occurred while loading the image",
87
+ "unsavedChangesConfirmation": {
88
+ "header": "Are you sure you want to exit?",
89
+ "message": "You have unsaved changes. Press No to go back and save these changes, or Yes to lose these changes."
90
+ }
87
91
  },
88
92
  "mngAutocomplete": {
89
93
  "noMatches": "No mathces"
@@ -82,7 +82,11 @@
82
82
  },
83
83
  "imageUrlPlaceholder": "Vnesi URL do slike ...",
84
84
  "imageUrlAdd": "Dodaj URL slike",
85
- "imageLoadError": "Prišlo je do napake med nalaganjem slike"
85
+ "imageLoadError": "Prišlo je do napake med nalaganjem slike",
86
+ "unsavedChangesConfirmation": {
87
+ "header": "Ali res želite zapreti okno?",
88
+ "message": "Imate neshranjene spremembe v formi. Če kliknite Ne, bo okno ostalo odprto, če Da, pa se bo okno zaprlo in spremembe bodo izbrisane."
89
+ }
86
90
  },
87
91
  "mngAutocomplete": {
88
92
  "noMatches": "Ni zadetkov"
@@ -12,7 +12,9 @@ const baseDir = [];
12
12
  const outputDir = [];
13
13
  let format = 'json';
14
14
  let name = 'version-info';
15
- let importFrom = '@mediusinc/mng-commons'
15
+ let importFrom = '@mediusinc/mng-commons';
16
+ let skipBuildTimestamp = false;
17
+
16
18
  for (let i = 0; i < args.length; i++) {
17
19
  if (args[i] === '-d' && i + 1 < args.length) { // directory with package.json
18
20
  baseDir.push(...args[i + 1].split('/'));
@@ -34,6 +36,14 @@ for (let i = 0; i < args.length; i++) {
34
36
  importFrom = args[i + 1];
35
37
  i++
36
38
  }
39
+ else if (args[i] === '--skip-build-timestamp') {
40
+ if (i + 1 < args.length && !args[i + 1].startsWith('-')) {
41
+ skipBuildTimestamp = args[i+1] === 'true';
42
+ i++
43
+ } else {
44
+ skipBuildTimestamp = true;
45
+ }
46
+ }
37
47
  }
38
48
 
39
49
  if (baseDir.length === 0) {
@@ -44,7 +54,6 @@ if (outputDir.length === 0) {
44
54
  }
45
55
 
46
56
  const baseDirPath = resolve(...baseDir);
47
- const distDirPath = resolve(...baseDir, 'dist');
48
57
 
49
58
  if (!existsSync(baseDirPath)) {
50
59
  console.warn(`Directory "${baseDirPath}" does not exist`);
@@ -53,9 +62,7 @@ if (!existsSync(baseDirPath)) {
53
62
  }
54
63
 
55
64
  let packageInfo = null;
56
- if (existsSync(resolve(distDirPath, 'package.json'))) {
57
- packageInfo = JSON.parse(readFileSync(resolve(distDirPath, 'package.json'), 'utf-8'))
58
- } else if (existsSync(resolve(baseDirPath, 'package.json'))) {
65
+ if (existsSync(resolve(baseDirPath, 'package.json'))) {
59
66
  packageInfo = JSON.parse(readFileSync(resolve(baseDirPath, 'package.json'), 'utf-8'))
60
67
  }
61
68
 
@@ -67,7 +74,7 @@ const versionInfo = {
67
74
  hash: gitInfo.hash?.substring(1) ?? null,
68
75
  dirty: gitInfo.dirty,
69
76
  semver: gitInfo.semverString,
70
- buildTimestamp: new Date().getTime()
77
+ buildTimestamp: skipBuildTimestamp ? null : new Date().getTime()
71
78
  };
72
79
 
73
80
  versionInfo.raw = versionInfo.tag ?? versionInfo.version ?? '';
package/esm2022/index.mjs CHANGED
@@ -59,4 +59,6 @@ export * from './lib/types';
59
59
  // styles
60
60
  export * from './lib/styles';
61
61
  export * from './lib/styles/models';
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxTQUFTO0FBQ1QsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFdBQVc7QUFDWCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDBCQUEwQixDQUFDO0FBRXpDLG1CQUFtQjtBQUNuQixjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFFBQVE7QUFDUixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGFBQWE7QUFDYixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLGFBQWE7QUFDYixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixhQUFhO0FBQ2IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxtQkFBbUI7QUFDbkIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsU0FBUztBQUNULGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxpQkFBaUI7QUFDakIsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxjQUFjO0FBQ2QsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGlCQUFpQjtBQUNqQixjQUFjLGNBQWMsQ0FBQztBQUU3QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxXQUFXO0FBQ1gsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBRXJDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbW5nLWNvbW1vbnNcbiAqL1xuXG4vLyBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL21uZy1jb21tb25zLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlLWNvbW1vbnMnO1xuXG4vLyBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGF5b3V0L3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Byb3ZpZGVycyc7XG5cbi8vIGluamVjdGlvbiB0b2tlbnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Rva2Vucyc7XG5cbi8vIHV0aWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGkvdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMnO1xuXG4vLyBjb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9maWVsZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS93cmFwcGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xheW91dCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxldmlldyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BhZ2VzJztcblxuLy8gZGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcyc7XG5cbi8vIHBpcGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcyc7XG5cbi8vIGFwaSBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaS9tb2RlbHMnO1xuXG4vLyBjb21wb25lbnQgbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxldmlldy9tb2RlbHMnO1xuXG4vLyBmb3JtbHlcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHknO1xuXG4vLyBkYXRhIHByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS1wcm92aWRlcnMnO1xuXG4vLyBkZXNjcmlwdG9yc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2VkaXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy90YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy90YWJsZXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvdHlwZXMnO1xuXG4vLyBnZW5lcmFsIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzJztcblxuLy8gcm91dGVyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcm91dGVyL21vZGVscyc7XG5cbi8vIHNlY3VyaXR5XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWN1cml0eSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWN1cml0eS9tb2RlbCc7XG5cbi8vIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5cbi8vIHN0eWxlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3R5bGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0eWxlcy9tb2RlbHMnO1xuIl19
62
+ // error
63
+ export * from './lib/error';
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxTQUFTO0FBQ1QsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFdBQVc7QUFDWCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDBCQUEwQixDQUFDO0FBRXpDLG1CQUFtQjtBQUNuQixjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFFBQVE7QUFDUixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGFBQWE7QUFDYixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHdCQUF3QixDQUFDO0FBRXZDLGFBQWE7QUFDYixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixhQUFhO0FBQ2IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxtQkFBbUI7QUFDbkIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsU0FBUztBQUNULGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxpQkFBaUI7QUFDakIsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxjQUFjO0FBQ2QsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGlCQUFpQjtBQUNqQixjQUFjLGNBQWMsQ0FBQztBQUU3QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxXQUFXO0FBQ1gsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBRXJDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxRQUFRO0FBQ1IsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG1uZy1jb21tb25zXG4gKi9cblxuLy8gbW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tbmctY29tbW9ucy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvdmlkZS1jb21tb25zJztcblxuLy8gc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaS9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xheW91dC9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wcm92aWRlcnMnO1xuXG4vLyBpbmplY3Rpb24gdG9rZW5zXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90b2tlbnMnO1xuXG4vLyB1dGlsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcblxuLy8gY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvd3JhcHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9sYXlvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wYWdlcyc7XG5cbi8vIGRpcmVjdGl2ZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMnO1xuXG4vLyBwaXBlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMnO1xuXG4vLyBhcGkgbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGkvbW9kZWxzJztcblxuLy8gY29tcG9uZW50IG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvbW9kZWxzJztcblxuLy8gZm9ybWx5XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5L21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5JztcblxuLy8gZGF0YSBwcm92aWRlcnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGEtcHJvdmlkZXJzJztcblxuLy8gZGVzY3JpcHRvcnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9lZGl0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvZmlsdGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvdGFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvdGFibGV2aWV3JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL3R5cGVzJztcblxuLy8gZ2VuZXJhbCBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5cbi8vIHJvdXRlclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcm91dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JvdXRlci9tb2RlbHMnO1xuXG4vLyBzZWN1cml0eVxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VjdXJpdHknO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VjdXJpdHkvbW9kZWwnO1xuXG4vLyB0eXBlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMnO1xuXG4vLyBzdHlsZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0eWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdHlsZXMvbW9kZWxzJztcblxuLy8gZXJyb3JcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Vycm9yJztcbiJdfQ==
@@ -1,7 +1,10 @@
1
+ import { LogLevelEnum } from '../../models';
2
+ import { MngLoggerService } from '../../services';
1
3
  import { DateUtil, TypeUtil } from '../../utils';
2
4
  import { enumsMapBase, typeMapBase } from '../models';
3
5
  export class ObjectSerializer {
4
6
  constructor() {
7
+ this._logCategory = 'ObjectSerializer';
5
8
  this._primitives = ['string', 'boolean', 'double', 'integer', 'long', 'float', 'number', 'any'];
6
9
  this._typeMap = {
7
10
  ...typeMapBase
@@ -9,6 +12,7 @@ export class ObjectSerializer {
9
12
  this._enumMap = {
10
13
  ...enumsMapBase
11
14
  };
15
+ // private readonly _logger = MngLoggerService.get().create('ObjectSerializer');
12
16
  this.dateTimeInUtc = true;
13
17
  this.dateTimeWithTimezone = true;
14
18
  this.dateTimeWithMillis = true;
@@ -92,11 +96,13 @@ export class ObjectSerializer {
92
96
  TypeUtil.defineReflectTypeName(type, typeName);
93
97
  }
94
98
  if (!typeName) {
95
- console.warn(`Registering type ${type} failed, because typeName could not be determined and optional name was not provided.`);
99
+ // this._logger.debug(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`);
100
+ MngLoggerService.get().log(`WARNING: registering type ${type} failed, because typeName could not be determined and optional name was not provided.`, LogLevelEnum.Debug, this._logCategory);
96
101
  return;
97
102
  }
98
103
  if (typeof this._typeMap[typeName] !== 'undefined') {
99
- console.warn(`Registering type ${type} under key ${typeName} skipped, because type already exists for this key.`);
104
+ // this._logger.debug(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`);
105
+ MngLoggerService.get().log(`WARNING: registering type ${type} under key ${typeName} skipped, because type already exists for this key.`, LogLevelEnum.Debug, this._logCategory);
100
106
  }
101
107
  else {
102
108
  this._typeMap[typeName] = type;
@@ -110,7 +116,8 @@ export class ObjectSerializer {
110
116
  registerEnum(enumType, enumName) {
111
117
  // try to find name from decorator
112
118
  if (typeof this._enumMap[enumName] !== 'undefined') {
113
- console.warn(`Registering enum ${enumName} skipped, because enum already exists.`);
119
+ // this._logger.debug(`Registering enum ${enumName} skipped, because enum already exists.`);
120
+ MngLoggerService.get().log(`Registering enum ${enumName} skipped, because enum already exists.`, LogLevelEnum.Debug, this._logCategory);
114
121
  }
115
122
  else {
116
123
  TypeUtil.defineReflectEnumName(enumType, enumName);
@@ -255,4 +262,4 @@ export class ObjectSerializer {
255
262
  }
256
263
  }
257
264
  }
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlcmlhbGl6ZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL29iamVjdC1zZXJpYWxpemVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFvQyxZQUFZLEVBQUUsV0FBVyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRXZGLE1BQU0sT0FBTyxnQkFBZ0I7SUFBN0I7UUFFcUIsZ0JBQVcsR0FBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRyxhQUFRLEdBQXdCO1lBQzdDLEdBQUcsV0FBVztTQUNqQixDQUFDO1FBQ2UsYUFBUSxHQUF3QjtZQUM3QyxHQUFHLFlBQVk7U0FDbEIsQ0FBQztRQUVNLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLHlCQUFvQixHQUFHLElBQUksQ0FBQztRQUM1Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7SUE2UHRDLENBQUM7YUF4UWtCLGNBQVMsR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxBQUEzQyxDQUE0QztJQWFwRSxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRztRQUNiLE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxrQ0FBa0MsQ0FBQyxJQUFvQixFQUFFLGFB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LE1BQU0sRUFBRTtZQUN4QixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDSCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLFVBQVU7Z0JBQ1YsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixxQkFBcUI7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUFtQixFQUF5QixDQUFDO1lBQ3hGLHlDQUF5QztZQUN6QyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckc7WUFDRCxPQUFPLFFBQVEsQ0FBQztTQUNuQjtJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7QXR0cmlidXRlRGVmLCBTZXJpYWxpemFibGVUeXBlTWFwLCBlbnVtc01hcEJhc2UsIHR5cGVNYXBCYXNlfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgT2JqZWN0U2VyaWFsaXplciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBPYmplY3RTZXJpYWxpemVyID0gbmV3IE9iamVjdFNlcmlhbGl6ZXIoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmltaXRpdmVzOiBzdHJpbmdbXSA9IFsnc3RyaW5nJywgJ2Jvb2xlYW4nLCAnZG91YmxlJywgJ2ludGVnZXInLCAnbG9uZycsICdmbG9hdCcsICdudW1iZXInLCAnYW55J107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHlwZU1hcDogU2VyaWFsaXphYmxlVHlwZU1hcCA9IHtcbiAgICAgICAgLi4udHlwZU1hcEJhc2VcbiAgICB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1NYXA6IFNlcmlhbGl6YWJsZVR5cGVNYXAgPSB7XG4gICAgICAgIC4uLmVudW1zTWFwQmFzZVxuICAgIH07XG5cbiAgICBwcml2YXRlIGRhdGVUaW1lSW5VdGMgPSB0cnVlO1xuICAgIHByaXZhdGUgZGF0ZVRpbWVXaXRoVGltZXpvbmUgPSB0cnVlO1xuICAgIHByaXZhdGUgZGF0ZVRpbWVXaXRoTWlsbGlzID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBnZXQgcHJpbWl0aXZlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW1pdGl2ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlTWFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVudW1NYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnVtTWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ubHkgdXNlIG9uZSBpbnN0YW5jZSBvZiBvYmplY3QgKG91dCBvZiBBbmd1bGFyIGNvbnRleHQpXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXQoKTogT2JqZWN0U2VyaWFsaXplciB7XG4gICAgICAgIHJldHVybiBPYmplY3RTZXJpYWxpemVyLl9pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZURlZmluaXRpb25CeUNsYXNzVHlwZSh0eXBlOiBDbGFzc1R5cGU8YW55PiwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogQXR0cmlidXRlRGVmIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRBdHRyaWJ1dGVEZWZpbml0aW9uKFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSwgYXR0cmlidXRlTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBdHRyaWJ1dGVEZWZpbml0aW9uKHR5cGVOYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IEF0dHJpYnV0ZURlZiB8IG51bGwge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVEZWZzID0gdGhpcy5maW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWUpO1xuICAgICAgICBpZiAoIWF0dHJpYnV0ZURlZnMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZURlZnMpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSA9PT0gYXR0cmlidXRlTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+KTogQXJyYXk8QXR0cmlidXRlRGVmPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kQXR0cmlidXRlc0RlZmluaXRpb24oVHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uKHR5cGVOYW1lOiBzdHJpbmcpOiBBcnJheTxBdHRyaWJ1dGVEZWY+IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHR5cGVEZWYgPSB0aGlzLmZpbmRUeXBlKHR5cGVOYW1lKTtcbiAgICAgICAgaWYgKCF0eXBlRGVmIHx8IHR5cGVvZiB0eXBlRGVmLmdldEF0dHJpYnV0ZVR5cGVNYXAgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlRGVmLmdldEF0dHJpYnV0ZVR5cGVNYXAoKSBhcyBBcnJheTxBdHRyaWJ1dGVEZWY+O1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQnlDbGFzc1R5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kVHlwZShUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kVHlwZSh0eXBlTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kRW51bShlbnVtTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1NYXBbZW51bU5hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmUoY29uZmlnOiB7ZGF0ZVRpbWVJblV0Yz86IGJvb2xlYW47IGRhdGVUaW1lV2l0aFRpbWV6b25lPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoTWlsbGlzPzogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZUluVXRjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJblV0YyA9IGNvbmZpZy5kYXRlVGltZUluVXRjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoVGltZXpvbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZSA9IGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcyA9IGNvbmZpZy5kYXRlVGltZVdpdGhNaWxsaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUeXBlcyh0eXBlczogU2VyaWFsaXphYmxlVHlwZU1hcCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0eXBlcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclR5cGUodHlwZXNba2V5XSwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclR5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4sIG9wdFR5cGVOYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIHRyeSB0byBmaW5kIG5hbWUgZnJvbSBtZXRhZGF0YVxuICAgICAgICBsZXQgdHlwZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKFR5cGVVdGlsLnR5cGVOYW1lRXhpc3RzKHR5cGUpKSB7XG4gICAgICAgICAgICAvLyBkZWZpbmVkIG5hbWUgZnJvbSBvcHRpb25hbCB0eXBlIG5hbWVcbiAgICAgICAgICAgIHR5cGVOYW1lID0gVHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdFR5cGVOYW1lKSB7XG4gICAgICAgICAgICB0eXBlTmFtZSA9IG9wdFR5cGVOYW1lO1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgbWV0YWRhdGFcbiAgICAgICAgICAgIFR5cGVVdGlsLmRlZmluZVJlZmxlY3RUeXBlTmFtZSh0eXBlLCB0eXBlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXR5cGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSBmYWlsZWQsIGJlY2F1c2UgdHlwZU5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQgYW5kIG9wdGlvbmFsIG5hbWUgd2FzIG5vdCBwcm92aWRlZC5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBSZWdpc3RlcmluZyB0eXBlICR7dHlwZX0gdW5kZXIga2V5ICR7dHlwZU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgdHlwZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBrZXkuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90eXBlTWFwW3R5cGVOYW1lXSA9IHR5cGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFbnVtcyhlbnVtczogU2VyaWFsaXphYmxlVHlwZU1hcCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBlbnVtcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckVudW0oZW51bXNba2V5XSwga2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlckVudW0oZW51bVR5cGU6IGFueSwgZW51bU5hbWU6IHN0cmluZykge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBuYW1lIGZyb20gZGVjb3JhdG9yXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fZW51bU1hcFtlbnVtTmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFJlZ2lzdGVyaW5nIGVudW0gJHtlbnVtTmFtZX0gc2tpcHBlZCwgYmVjYXVzZSBlbnVtIGFscmVhZHkgZXhpc3RzLmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVHlwZVV0aWwuZGVmaW5lUmVmbGVjdEVudW1OYW1lKGVudW1UeXBlLCBlbnVtTmFtZSk7XG4gICAgICAgICAgICB0aGlzLl9lbnVtTWFwW2VudW1OYW1lXSA9IGVudW1UeXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRDb3JyZWN0VHlwZShkYXRhOiBhbnksIGV4cGVjdGVkVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9wcmltaXRpdmVzLmluZGV4T2YoZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnVtTWFwW2V4cGVjdGVkVHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3R5cGVNYXBbZXhwZWN0ZWRUeXBlXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7IC8vIHcvZSB3ZSBkb24ndCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHRoZSBkaXNjcmltaW5hdG9yXG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yUHJvcGVydHkgPSB0aGlzLl90eXBlTWFwW2V4cGVjdGVkVHlwZV0uZGlzY3JpbWluYXRvcjtcbiAgICAgICAgICAgIGlmIChkaXNjcmltaW5hdG9yUHJvcGVydHkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7IC8vIHRoZSB0eXBlIGRvZXMgbm90IGhhdmUgYSBkaXNjcmltaW5hdG9yLiB1c2UgaXQuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhW2Rpc2NyaW1pbmF0b3JQcm9wZXJ0eV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclR5cGUgPSBkYXRhW2Rpc2NyaW1pbmF0b3JQcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90eXBlTWFwW2Rpc2NyaW1pbmF0b3JUeXBlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2NyaW1pbmF0b3JUeXBlOyAvLyB1c2UgdGhlIHR5cGUgZ2l2ZW4gaW4gdGhlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7IC8vIGRpc2NyaW1pbmF0b3IgZGlkIG5vdCBtYXAgdG8gYSB0eXBlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyBkaXNjcmltaW5hdG9yIHdhcyBub3QgcHJlc2VudCAob3IgYW4gZW1wdHkgc3RyaW5nKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemVDbGFzczxUPihkYXRhOiBULCB0eXBlOiBDbGFzc1R5cGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKGRhdGEsIFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlcmlhbGl6ZUNsYXNzQXJyYXk8VD4oZGF0YTogQXJyYXk8VD4sIHR5cGU6IENsYXNzVHlwZTxUPikge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoZGF0YSwgYEFycmF5PCR7VHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpfT5gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VyaWFsaXplKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCBzdWJ0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9wcmltaXRpdmVzLmluZGV4T2YodHlwZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUubGFzdEluZGV4T2YoJ0FycmF5PCcsIDApID09PSAwKSB7XG4gICAgICAgICAgICAvLyBzdHJpbmcuc3RhcnRzV2l0aCBwcmUgZXM2XG4gICAgICAgICAgICBsZXQgc3ViVHlwZTogc3RyaW5nID0gdHlwZS5yZXBsYWNlKCdBcnJheTwnLCAnJyk7IC8vIEFycmF5PFR5cGU+ID0+IFR5cGU+XG4gICAgICAgICAgICBzdWJUeXBlID0gc3ViVHlwZS5zdWJzdHJpbmcoMCwgc3ViVHlwZS5sZW5ndGggLSAxKTsgLy8gVHlwZT4gPT4gVHlwZVxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdHVtID0gZGF0YVtpbmRleF07XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWREYXRhLnB1c2godGhpcy5zZXJpYWxpemUoZGF0dW0sIHN1YlR5cGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlT25seSA9IHN1YnR5cGUgPT09ICdkYXRlJztcbiAgICAgICAgICAgIHJldHVybiBEYXRlVXRpbC50b0lzb1N0cmluZyhkYXRhLCB0aGlzLmRhdGVUaW1lSW5VdGMsIHRoaXMuZGF0ZVRpbWVXaXRoVGltZXpvbmUsIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzLCBkYXRlT25seSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW51bU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl90eXBlTWFwW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB3ZSBkb250IGtub3cgdGhlIHR5cGVcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgdHlwZSBvZiB0aGlzIG9iamVjdFxuICAgICAgICAgICAgdHlwZSA9IHRoaXMuZmluZENvcnJlY3RUeXBlKGRhdGEsIHR5cGUpO1xuXG4gICAgICAgICAgICAvLyBnZXQgdGhlIG1hcCBmb3IgdGhlIGNvcnJlY3QgdHlwZS5cbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGVzID0gdGhpcy5fdHlwZU1hcFt0eXBlXS5nZXRBdHRyaWJ1dGVUeXBlTWFwKCkgYXMgQXJyYXk8QXR0cmlidXRlRGVmPjtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlOiB7W2luZGV4OiBzdHJpbmddOiBhbnl9ID0ge307XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGF0dHJpYnV0ZVR5cGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGUgPSBhdHRyaWJ1dGVUeXBlc1tpbmRleF07XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbYXR0cmlidXRlVHlwZS5iYXNlTmFtZV0gPSB0aGlzLnNlcmlhbGl6ZShkYXRhW2F0dHJpYnV0ZVR5cGUubmFtZV0sIGF0dHJpYnV0ZVR5cGUudHlwZSwgYXR0cmlidXRlVHlwZS5zdWJ0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlcmlhbGl6ZUNsYXNzPFQ+KGRhdGE6IGFueSwgdHlwZTogQ2xhc3NUeXBlPFQ+KTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGRhdGEsIFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VyaWFsaXplQ2xhc3NBcnJheTxUPihkYXRhOiBhbnksIHR5cGU6IENsYXNzVHlwZTxUPik6IEFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzZXJpYWxpemUoZGF0YSwgYEFycmF5PCR7VHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpfT5gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemUoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gcG9seW1vcnBoaXNtIG1heSBjaGFuZ2UgdGhlIGFjdHVhbCB0eXBlLlxuICAgICAgICB0eXBlID0gdGhpcy5maW5kQ29ycmVjdFR5cGUoZGF0YSwgdHlwZSk7XG4gICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJpbWl0aXZlcy5pbmRleE9mKHR5cGUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IHR5cGUucmVwbGFjZSgnQXJyYXk8JywgJycpOyAvLyBBcnJheTxUeXBlPiA9PiBUeXBlPlxuICAgICAgICAgICAgc3ViVHlwZSA9IHN1YlR5cGUuc3Vic3RyaW5nKDAsIHN1YlR5cGUubGVuZ3RoIC0gMSk7IC8vIFR5cGU+ID0+IFR5cGVcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXR1bSA9IGRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkRGF0YS5wdXNoKHRoaXMuZGVzZXJpYWxpemUoZGF0dW0sIHN1YlR5cGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW51bU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIC8vIGlzIEVudW1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl90eXBlTWFwW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gZG9udCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB0aGlzLl90eXBlTWFwW3R5cGVdKCk7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlcyA9IHRoaXMuX3R5cGVNYXBbdHlwZV0uZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PEF0dHJpYnV0ZURlZj47XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGF0dHJpYnV0ZVR5cGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGUgPSBhdHRyaWJ1dGVUeXBlc1tpbmRleF07XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VbYXR0cmlidXRlVHlwZS5uYW1lXSA9IHRoaXMuZGVzZXJpYWxpemUoZGF0YVthdHRyaWJ1dGVUeXBlLmJhc2VOYW1lXSwgYXR0cmlidXRlVHlwZS50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlcmlhbGl6ZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL29iamVjdC1zZXJpYWxpemVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQW9DLFlBQVksRUFBRSxXQUFXLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFdkYsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUVxQixpQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLGdCQUFXLEdBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckcsYUFBUSxHQUF3QjtZQUM3QyxHQUFHLFdBQVc7U0FDakIsQ0FBQztRQUNlLGFBQVEsR0FBd0I7WUFDN0MsR0FBRyxZQUFZO1NBQ2xCLENBQUM7UUFDRixnRkFBZ0Y7UUFFeEUsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLElBQUksQ0FBQztJQXdRdEMsQ0FBQzthQXJSa0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixFQUFFLEFBQTNDLENBQTRDO0lBZXBFLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENB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QUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRztZQUNELE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9nTGV2ZWxFbnVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7QXR0cmlidXRlRGVmLCBTZXJpYWxpemFibGVUeXBlTWFwLCBlbnVtc01hcEJhc2UsIHR5cGVNYXBCYXNlfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgT2JqZWN0U2VyaWFsaXplciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBPYmplY3RTZXJpYWxpemVyID0gbmV3IE9iamVjdFNlcmlhbGl6ZXIoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2dDYXRlZ29yeSA9ICdPYmplY3RTZXJpYWxpemVyJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmltaXRpdmVzOiBzdHJpbmdbXSA9IFsnc3RyaW5nJywgJ2Jvb2xlYW4nLCAnZG91YmxlJywgJ2ludGVnZXInLCAnbG9uZycsICdmbG9hdCcsICdudW1iZXInLCAnYW55J107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdHlwZU1hcDogU2VyaWFsaXphYmxlVHlwZU1hcCA9IHtcbiAgICAgICAgLi4udHlwZU1hcEJhc2VcbiAgICB9O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VudW1NYXA6IFNlcmlhbGl6YWJsZVR5cGVNYXAgPSB7XG4gICAgICAgIC4uLmVudW1zTWFwQmFzZVxuICAgIH07XG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyID0gTW5nTG9nZ2VyU2VydmljZS5nZXQoKS5jcmVhdGUoJ09iamVjdFNlcmlhbGl6ZXInKTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVJblV0YyA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhUaW1lem9uZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhNaWxsaXMgPSB0cnVlO1xuXG4gICAgcHVibGljIGdldCBwcmltaXRpdmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbWl0aXZlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHR5cGVNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlTWFwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW51bU1hcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudW1NYXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT25seSB1c2Ugb25lIGluc3RhbmNlIG9mIG9iamVjdCAob3V0IG9mIEFuZ3VsYXIgY29udGV4dClcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldCgpOiBPYmplY3RTZXJpYWxpemVyIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdFNlcmlhbGl6ZXIuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQXR0cmlidXRlRGVmaW5pdGlvbkJ5Q2xhc3NUeXBlKHR5cGU6IENsYXNzVHlwZTxhbnk+LCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBBdHRyaWJ1dGVEZWYgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEF0dHJpYnV0ZURlZmluaXRpb24oVHlwZVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZURlZmluaXRpb24odHlwZU5hbWU6IHN0cmluZywgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogQXR0cmlidXRlRGVmIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZURlZnMgPSB0aGlzLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbih0eXBlTmFtZSk7XG4gICAgICAgIGlmICghYXR0cmlidXRlRGVmcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlRGVmcykge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5uYW1lID09PSBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZEF0dHJpYnV0ZXNEZWZpbml0aW9uQnlDbGFzc1R5cGUodHlwZTogQ2xhc3NUeXBlPGFueT4pOiBBcnJheTxBdHRyaWJ1dGVEZWY+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRBdHRyaWJ1dGVzRGVmaW5pdGlvbihUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQXR0cmlidXRlc0RlZmluaXRpb24odHlwZU5hbWU6IHN0cmluZyk6IEFycmF5PEF0dHJpYnV0ZURlZj4gfCBudWxsIHtcbiAgICAgICAgY29uc3QgdHlwZURlZiA9IHRoaXMuZmluZFR5cGUodHlwZU5hbWUpO1xuICAgICAgICBpZiAoIXR5cGVEZWYgfHwgdHlwZW9mIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVEZWYuZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PEF0dHJpYnV0ZURlZj47XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRCeUNsYXNzVHlwZSh0eXBlOiBDbGFzc1R5cGU8YW55Pik6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRUeXBlKFR5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRUeXBlKHR5cGVOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcFt0eXBlTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIGZpbmRFbnVtKGVudW1OYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW51bU1hcFtlbnVtTmFtZV07XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZShjb25maWc6IHtkYXRlVGltZUluVXRjPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoVGltZXpvbmU/OiBib29sZWFuOyBkYXRlVGltZVdpdGhNaWxsaXM/OiBib29sZWFufSk6IHZvaWQge1xuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lSW5VdGMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUluVXRjID0gY29uZmlnLmRhdGVUaW1lSW5VdGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lID0gY29uZmlnLmRhdGVUaW1lV2l0aFRpbWV6b25lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoTWlsbGlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzID0gY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclR5cGVzKHR5cGVzOiBTZXJpYWxpemFibGVUeXBlTWFwKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHR5cGVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZSh0eXBlc1trZXldLCBrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyVHlwZSh0eXBlOiBDbGFzc1R5cGU8YW55Piwgb3B0VHlwZU5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgbmFtZSBmcm9tIG1ldGFkYXRhXG4gICAgICAgIGxldCB0eXBlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoVHlwZVV0aWwudHlwZU5hbWVFeGlzdHModHlwZSkpIHtcbiAgICAgICAgICAgIC8vIGRlZmluZWQgbmFtZSBmcm9tIG9wdGlvbmFsIHR5cGUgbmFtZVxuICAgICAgICAgICAgdHlwZU5hbWUgPSBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0VHlwZU5hbWUpIHtcbiAgICAgICAgICAgIHR5cGVOYW1lID0gb3B0VHlwZU5hbWU7XG4gICAgICAgICAgICAvLyByZWdpc3RlciBtZXRhZGF0YVxuICAgICAgICAgICAgVHlwZVV0aWwuZGVmaW5lUmVmbGVjdFR5cGVOYW1lKHR5cGUsIHR5cGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZU5hbWUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuX2xvZ2dlci5kZWJ1ZyhgV0FSTklORzogcmVnaXN0ZXJpbmcgdHlwZSAke3R5cGV9IGZhaWxlZCwgYmVjYXVzZSB0eXBlTmFtZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCBhbmQgb3B0aW9uYWwgbmFtZSB3YXMgbm90IHByb3ZpZGVkLmApO1xuICAgICAgICAgICAgTW5nTG9nZ2VyU2VydmljZS5nZXQoKS5sb2coXG4gICAgICAgICAgICAgICAgYFdBUk5JTkc6IHJlZ2lzdGVyaW5nIHR5cGUgJHt0eXBlfSBmYWlsZWQsIGJlY2F1c2UgdHlwZU5hbWUgY291bGQgbm90IGJlIGRldGVybWluZWQgYW5kIG9wdGlvbmFsIG5hbWUgd2FzIG5vdCBwcm92aWRlZC5gLFxuICAgICAgICAgICAgICAgIExvZ0xldmVsRW51bS5EZWJ1ZyxcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dDYXRlZ29yeVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3R5cGVNYXBbdHlwZU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gdGhpcy5fbG9nZ2VyLmRlYnVnKGBXQVJOSU5HOiByZWdpc3RlcmluZyB0eXBlICR7dHlwZX0gdW5kZXIga2V5ICR7dHlwZU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgdHlwZSBhbHJlYWR5IGV4aXN0cyBmb3IgdGhpcyBrZXkuYCk7XG4gICAgICAgICAgICBNbmdMb2dnZXJTZXJ2aWNlLmdldCgpLmxvZyhcbiAgICAgICAgICAgICAgICBgV0FSTklORzogcmVnaXN0ZXJpbmcgdHlwZSAke3R5cGV9IHVuZGVyIGtleSAke3R5cGVOYW1lfSBza2lwcGVkLCBiZWNhdXNlIHR5cGUgYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMga2V5LmAsXG4gICAgICAgICAgICAgICAgTG9nTGV2ZWxFbnVtLkRlYnVnLFxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ0NhdGVnb3J5XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdHlwZU1hcFt0eXBlTmFtZV0gPSB0eXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyRW51bXMoZW51bXM6IFNlcmlhbGl6YWJsZVR5cGVNYXApIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZW51bXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFbnVtKGVudW1zW2tleV0sIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFbnVtKGVudW1UeXBlOiBhbnksIGVudW1OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgbmFtZSBmcm9tIGRlY29yYXRvclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX2VudW1NYXBbZW51bU5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gdGhpcy5fbG9nZ2VyLmRlYnVnKGBSZWdpc3RlcmluZyBlbnVtICR7ZW51bU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgZW51bSBhbHJlYWR5IGV4aXN0cy5gKTtcbiAgICAgICAgICAgIE1uZ0xvZ2dlclNlcnZpY2UuZ2V0KCkubG9nKGBSZWdpc3RlcmluZyBlbnVtICR7ZW51bU5hbWV9IHNraXBwZWQsIGJlY2F1c2UgZW51bSBhbHJlYWR5IGV4aXN0cy5gLCBMb2dMZXZlbEVudW0uRGVidWcsIHRoaXMuX2xvZ0NhdGVnb3J5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFR5cGVVdGlsLmRlZmluZVJlZmxlY3RFbnVtTmFtZShlbnVtVHlwZSwgZW51bU5hbWUpO1xuICAgICAgICAgICAgdGhpcy5fZW51bU1hcFtlbnVtTmFtZV0gPSBlbnVtVHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQ29ycmVjdFR5cGUoZGF0YTogYW55LCBleHBlY3RlZFR5cGU6IHN0cmluZykge1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJpbWl0aXZlcy5pbmRleE9mKGV4cGVjdGVkVHlwZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnRGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZW51bU1hcFtleHBlY3RlZFR5cGVdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl90eXBlTWFwW2V4cGVjdGVkVHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyB3L2Ugd2UgZG9uJ3Qga25vdyB0aGUgdHlwZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgZGlzY3JpbWluYXRvclxuICAgICAgICAgICAgY29uc3QgZGlzY3JpbWluYXRvclByb3BlcnR5ID0gdGhpcy5fdHlwZU1hcFtleHBlY3RlZFR5cGVdLmRpc2NyaW1pbmF0b3I7XG4gICAgICAgICAgICBpZiAoZGlzY3JpbWluYXRvclByb3BlcnR5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyB0aGUgdHlwZSBkb2VzIG5vdCBoYXZlIGEgZGlzY3JpbWluYXRvci4gdXNlIGl0LlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JUeXBlID0gZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHlwZU1hcFtkaXNjcmltaW5hdG9yVHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yVHlwZTsgLy8gdXNlIHRoZSB0eXBlIGdpdmVuIGluIHRoZSBkaXNjcmltaW5hdG9yXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlOyAvLyBkaXNjcmltaW5hdG9yIGRpZCBub3QgbWFwIHRvIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZTsgLy8gZGlzY3JpbWluYXRvciB3YXMgbm90IHByZXNlbnQgKG9yIGFuIGVtcHR5IHN0cmluZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VyaWFsaXplQ2xhc3M8VD4oZGF0YTogVCwgdHlwZTogQ2xhc3NUeXBlPFQ+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZShkYXRhLCBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemVDbGFzc0FycmF5PFQ+KGRhdGE6IEFycmF5PFQ+LCB0eXBlOiBDbGFzc1R5cGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKGRhdGEsIGBBcnJheTwke1R5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKX0+YCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlcmlhbGl6ZShkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgc3VidHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJpbWl0aXZlcy5pbmRleE9mKHR5cGUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IHR5cGUucmVwbGFjZSgnQXJyYXk8JywgJycpOyAvLyBBcnJheTxUeXBlPiA9PiBUeXBlPlxuICAgICAgICAgICAgc3ViVHlwZSA9IHN1YlR5cGUuc3Vic3RyaW5nKDAsIHN1YlR5cGUubGVuZ3RoIC0gMSk7IC8vIFR5cGU+ID0+IFR5cGVcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXR1bSA9IGRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkRGF0YS5wdXNoKHRoaXMuc2VyaWFsaXplKGRhdHVtLCBzdWJUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHkgPSBzdWJ0eXBlID09PSAnZGF0ZSc7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZVV0aWwudG9Jc29TdHJpbmcoZGF0YSwgdGhpcy5kYXRlVGltZUluVXRjLCB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lLCB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcywgZGF0ZU9ubHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VudW1NYXBbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fdHlwZU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugd2UgZG9udCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIHR5cGUgb2YgdGhpcyBvYmplY3RcbiAgICAgICAgICAgIHR5cGUgPSB0aGlzLmZpbmRDb3JyZWN0VHlwZShkYXRhLCB0eXBlKTtcblxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBtYXAgZm9yIHRoZSBjb3JyZWN0IHR5cGUuXG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlcyA9IHRoaXMuX3R5cGVNYXBbdHlwZV0uZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PEF0dHJpYnV0ZURlZj47XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZToge1tpbmRleDogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUuYmFzZU5hbWVdID0gdGhpcy5zZXJpYWxpemUoZGF0YVthdHRyaWJ1dGVUeXBlLm5hbWVdLCBhdHRyaWJ1dGVUeXBlLnR5cGUsIGF0dHJpYnV0ZVR5cGUuc3VidHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemVDbGFzczxUPihkYXRhOiBhbnksIHR5cGU6IENsYXNzVHlwZTxUPik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNlcmlhbGl6ZShkYXRhLCBUeXBlVXRpbC5maW5kVHlwZU5hbWUodHlwZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlcmlhbGl6ZUNsYXNzQXJyYXk8VD4oZGF0YTogYW55LCB0eXBlOiBDbGFzc1R5cGU8VD4pOiBBcnJheTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGRhdGEsIGBBcnJheTwke1R5cGVVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKX0+YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VyaWFsaXplKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIHBvbHltb3JwaGlzbSBtYXkgY2hhbmdlIHRoZSBhY3R1YWwgdHlwZS5cbiAgICAgICAgdHlwZSA9IHRoaXMuZmluZENvcnJlY3RUeXBlKGRhdGEsIHR5cGUpO1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZih0eXBlLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZS5sYXN0SW5kZXhPZignQXJyYXk8JywgMCkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIHN0cmluZy5zdGFydHNXaXRoIHByZSBlczZcbiAgICAgICAgICAgIGxldCBzdWJUeXBlOiBzdHJpbmcgPSB0eXBlLnJlcGxhY2UoJ0FycmF5PCcsICcnKTsgLy8gQXJyYXk8VHlwZT4gPT4gVHlwZT5cbiAgICAgICAgICAgIHN1YlR5cGUgPSBzdWJUeXBlLnN1YnN0cmluZygwLCBzdWJUeXBlLmxlbmd0aCAtIDEpOyAvLyBUeXBlPiA9PiBUeXBlXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGE6IGFueVtdID0gW107XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0dW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZERhdGEucHVzaCh0aGlzLmRlc2VyaWFsaXplKGRhdHVtLCBzdWJUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VudW1NYXBbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICAvLyBpcyBFbnVtXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdHlwZU1hcFt0eXBlXSkge1xuICAgICAgICAgICAgICAgIC8vIGRvbnQga25vdyB0aGUgdHlwZVxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgdGhpcy5fdHlwZU1hcFt0eXBlXSgpO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVHlwZXMgPSB0aGlzLl90eXBlTWFwW3R5cGVdLmdldEF0dHJpYnV0ZVR5cGVNYXAoKSBhcyBBcnJheTxBdHRyaWJ1dGVEZWY+O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUubmFtZV0gPSB0aGlzLmRlc2VyaWFsaXplKGRhdGFbYXR0cmlidXRlVHlwZS5iYXNlTmFtZV0sIGF0dHJpYnV0ZVR5cGUudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=