@mediusinc/mng-commons 4.0.0-rc.2 → 4.0.0-rc.3

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 (148) hide show
  1. package/esm2022/index.mjs +5 -1
  2. package/esm2022/lib/api/utils/medius-rest.util.mjs +15 -7
  3. package/esm2022/lib/api/utils/object-serializer.util.mjs +8 -4
  4. package/esm2022/lib/components/action/action.component.mjs +16 -45
  5. package/esm2022/lib/components/action/editor/action-editor.component.mjs +60 -434
  6. package/esm2022/lib/components/action/editor/injector-context/action-editor-injector-context.component.mjs +394 -0
  7. package/esm2022/lib/components/action/localization/data-language-dropdown.component.mjs +6 -7
  8. package/esm2022/lib/components/action/models/action-component.model.mjs +1 -1
  9. package/esm2022/lib/components/action/models/action-execution.model.mjs +3 -6
  10. package/esm2022/lib/components/action/models/index.mjs +1 -2
  11. package/esm2022/lib/components/action/route/action-route.component.mjs +14 -30
  12. package/esm2022/lib/components/action/table/action-table.component.mjs +9 -19
  13. package/esm2022/lib/components/form/editor/form-editor.component.mjs +5 -11
  14. package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +1 -1
  15. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +4 -4
  16. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +5 -5
  17. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +4 -4
  18. package/esm2022/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +1 -1
  19. package/esm2022/lib/components/layout/main-layout.component.mjs +21 -25
  20. package/esm2022/lib/components/layout/topbar.component.mjs +8 -8
  21. package/esm2022/lib/components/layoutV2/main-layout.component.mjs +13 -10
  22. package/esm2022/lib/components/layoutV2/menu-item.component.mjs +48 -5
  23. package/esm2022/lib/components/layoutV2/menu.component.mjs +13 -4
  24. package/esm2022/lib/components/layoutV2/services/main-layout.component.service.mjs +11 -2
  25. package/esm2022/lib/components/layoutV2/sidebar.component.mjs +5 -5
  26. package/esm2022/lib/components/layoutV2/topbar.component.mjs +7 -7
  27. package/esm2022/lib/components/notification/notification-wrapper.component.mjs +50 -0
  28. package/esm2022/lib/components/table/column-value/column-value.component.mjs +2 -2
  29. package/esm2022/lib/components/table/table.component.mjs +17 -23
  30. package/esm2022/lib/components/tableview/route/tableview-route.abstract.component.mjs +5 -5
  31. package/esm2022/lib/components/tableview/route/tableview-route.component.mjs +3 -9
  32. package/esm2022/lib/components/tableview/tableview.component.mjs +17 -76
  33. package/esm2022/lib/descriptors/editor/field-lookup.descriptor.mjs +1 -2
  34. package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +20 -20
  35. package/esm2022/lib/directives/component.directive.mjs +8 -4
  36. package/esm2022/lib/helpers/coercion.mjs +8 -1
  37. package/esm2022/lib/models/action-editor.model.mjs +1 -1
  38. package/esm2022/lib/models/config.model.mjs +1 -1
  39. package/esm2022/lib/models/index.mjs +2 -2
  40. package/esm2022/lib/models/layout-config.model.mjs +2 -0
  41. package/esm2022/lib/models/view-container.model.mjs +1 -1
  42. package/esm2022/lib/provide-commons.mjs +7 -1
  43. package/esm2022/lib/registry/type.registry.mjs +2 -3
  44. package/esm2022/lib/router/route-builder.mjs +1 -1
  45. package/esm2022/lib/services/action/action-executor.service.mjs +725 -0
  46. package/esm2022/lib/services/action/component-action-executor.service.mjs +19 -0
  47. package/esm2022/lib/services/action/index.mjs +5 -0
  48. package/esm2022/lib/services/action/provide-action-executor.mjs +9 -0
  49. package/esm2022/lib/services/action/root-action-executor.service.mjs +18 -0
  50. package/esm2022/lib/services/commons.service.mjs +5 -5
  51. package/esm2022/lib/services/index.mjs +1 -3
  52. package/esm2022/lib/services/logger.service.mjs +2 -2
  53. package/esm2022/lib/services/view/index.mjs +3 -0
  54. package/esm2022/lib/services/view/provide-view-container.mjs +17 -0
  55. package/esm2022/lib/services/view/view-container.service.mjs +59 -0
  56. package/esm2022/lib/utils/date.util.mjs +33 -23
  57. package/esm2022/lib/utils/notification.util.mjs +9 -16
  58. package/esm2022/lib/utils/string.util.mjs +2 -2
  59. package/fesm2022/mediusinc-mng-commons.mjs +3199 -3156
  60. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  61. package/index.d.ts +4 -0
  62. package/lib/components/action/action.component.d.ts +11 -17
  63. package/lib/components/action/editor/action-editor.component.d.ts +20 -80
  64. package/lib/components/action/editor/injector-context/action-editor-injector-context.component.d.ts +80 -0
  65. package/lib/components/action/localization/data-language-dropdown.component.d.ts +2 -3
  66. package/lib/components/action/models/action-component.model.d.ts +0 -2
  67. package/lib/components/action/models/action-execution.model.d.ts +6 -6
  68. package/lib/components/action/models/index.d.ts +0 -1
  69. package/lib/components/action/route/action-route.component.d.ts +6 -12
  70. package/lib/components/action/table/action-table.component.d.ts +3 -8
  71. package/lib/components/form/editor/form-editor.component.d.ts +4 -7
  72. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +1 -3
  73. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +0 -2
  74. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -2
  75. package/lib/components/layout/main-layout.component.d.ts +4 -7
  76. package/lib/components/layoutV2/main-layout.component.d.ts +4 -3
  77. package/lib/components/layoutV2/menu-item.component.d.ts +7 -3
  78. package/lib/components/layoutV2/menu.component.d.ts +2 -0
  79. package/lib/components/layoutV2/services/main-layout.component.service.d.ts +3 -0
  80. package/lib/components/layoutV2/sidebar.component.d.ts +1 -1
  81. package/lib/components/layoutV2/topbar.component.d.ts +2 -2
  82. package/lib/components/notification/notification-wrapper.component.d.ts +12 -0
  83. package/lib/components/table/table.component.d.ts +4 -7
  84. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +2 -3
  85. package/lib/components/tableview/route/tableview-route.component.d.ts +0 -3
  86. package/lib/components/tableview/tableview.component.d.ts +3 -19
  87. package/lib/descriptors/filter/filter.descriptor.d.ts +7 -7
  88. package/lib/directives/component.directive.d.ts +3 -2
  89. package/lib/models/action-editor.model.d.ts +11 -0
  90. package/lib/models/config.model.d.ts +3 -13
  91. package/lib/models/index.d.ts +1 -1
  92. package/lib/models/layout-config.model.d.ts +33 -0
  93. package/lib/models/view-container.model.d.ts +0 -25
  94. package/lib/router/route-builder.d.ts +1 -1
  95. package/lib/services/{action-executor.service.d.ts → action/action-executor.service.d.ts} +32 -31
  96. package/lib/services/action/component-action-executor.service.d.ts +9 -0
  97. package/lib/services/action/index.d.ts +4 -0
  98. package/lib/services/action/provide-action-executor.d.ts +2 -0
  99. package/lib/services/action/root-action-executor.service.d.ts +9 -0
  100. package/lib/services/index.d.ts +0 -2
  101. package/lib/services/view/index.d.ts +2 -0
  102. package/lib/services/view/provide-view-container.d.ts +2 -0
  103. package/lib/services/view/view-container.service.d.ts +32 -0
  104. package/lib/utils/date.util.d.ts +12 -2
  105. package/lib/utils/notification.util.d.ts +6 -6
  106. package/openapi/angular/README.mustache +226 -0
  107. package/openapi/angular/api.module.mustache +39 -0
  108. package/openapi/angular/api.service.mustache +253 -0
  109. package/openapi/angular/apiInterface.mustache +47 -0
  110. package/openapi/angular/apis.mustache +12 -0
  111. package/openapi/angular/configuration.mustache +128 -0
  112. package/openapi/angular/custom/base-api.service.mustache +14 -0
  113. package/openapi/angular/custom/helpers.mustache +71 -0
  114. package/openapi/angular/custom/modelSchema.mustache +46 -0
  115. package/openapi/angular/custom/schema.mustache +18 -0
  116. package/openapi/angular/encoder.mustache +20 -0
  117. package/openapi/angular/git_push.sh.mustache +57 -0
  118. package/openapi/angular/index.mustache +0 -0
  119. package/openapi/angular/licenseInfo.mustache +11 -0
  120. package/openapi/angular/model.mustache +16 -0
  121. package/openapi/angular/modelAlias.mustache +1 -0
  122. package/openapi/angular/modelEnum.mustache +24 -0
  123. package/openapi/angular/modelGeneric.mustache +14 -0
  124. package/openapi/angular/modelGenericAdditionalProperties.mustache +5 -0
  125. package/openapi/angular/modelGenericEnums.mustache +30 -0
  126. package/openapi/angular/modelOneOf.mustache +14 -0
  127. package/openapi/angular/modelTaggedUnion.mustache +21 -0
  128. package/openapi/angular/models.mustache +5 -0
  129. package/openapi/angular/ng-package.mustache +6 -0
  130. package/openapi/angular/package.mustache +39 -0
  131. package/openapi/angular/param.mustache +69 -0
  132. package/openapi/angular/tsconfig.mustache +28 -0
  133. package/openapi/angular/variables.mustache +9 -0
  134. package/openapi/{templates → node}/model.mustache +3 -17
  135. package/package.json +2 -2
  136. package/scss/mng-commons-dark-v2.scss +1 -1
  137. package/scss/mng-commons-light-v2.scss +1 -1
  138. package/scss/v2/layout/layout.scss +2 -2
  139. package/scss/v2/layout/mng/_mng_layout_topbar.scss +2 -0
  140. package/scss/v2/layout/preloading.scss +8 -8
  141. package/esm2022/lib/components/action/models/action-confirmation-service.model.mjs +0 -2
  142. package/esm2022/lib/models/menu-config.model.mjs +0 -2
  143. package/esm2022/lib/services/action-executor.service.mjs +0 -747
  144. package/esm2022/lib/services/view-container.component.service.mjs +0 -65
  145. package/lib/components/action/models/action-confirmation-service.model.d.ts +0 -6
  146. package/lib/models/menu-config.model.d.ts +0 -15
  147. package/lib/services/view-container.component.service.d.ts +0 -36
  148. /package/openapi/{templates → node}/models.mustache +0 -0
package/esm2022/index.mjs CHANGED
@@ -7,6 +7,8 @@ export * from './lib/provide-commons';
7
7
  export * from './lib/api/services';
8
8
  export * from './lib/components/layout/services';
9
9
  export * from './lib/services';
10
+ export * from './lib/services/action';
11
+ export * from './lib/services/view';
10
12
  export * from './lib/services/providers';
11
13
  // injection tokens
12
14
  export * from './lib/services/tokens';
@@ -19,8 +21,10 @@ export * from './lib/components/form';
19
21
  export * from './lib/components/form/formly/fields';
20
22
  export * from './lib/components/form/formly/wrappers';
21
23
  export * from './lib/components/layout';
24
+ export * from './lib/components/layoutV2';
22
25
  export * from './lib/components/tableview';
23
26
  export * from './lib/components/pages';
27
+ export * from './lib/components/notification/notification-wrapper.component';
24
28
  // directives
25
29
  export * from './lib/directives';
26
30
  // pipes
@@ -70,4 +74,4 @@ export * from './lib/styles';
70
74
  export * from './lib/styles/models';
71
75
  // error
72
76
  export * from './lib/error';
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxTQUFTO0FBQ1QsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxXQUFXO0FBQ1gsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYywwQkFBMEIsQ0FBQztBQUV6QyxtQkFBbUI7QUFDbkIsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxRQUFRO0FBQ1IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUU1QixhQUFhO0FBQ2IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxhQUFhO0FBQ2IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxRQUFRO0FBQ1IsY0FBYyxhQUFhLENBQUM7QUFFNUIsV0FBVztBQUNYLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsYUFBYTtBQUNiLGNBQWMsa0JBQWtCLENBQUM7QUFFakMsbUJBQW1CO0FBQ25CLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLFFBQVE7QUFDUixjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLHdFQUF3RSxDQUFDO0FBQ3ZGLGNBQWMsNERBQTRELENBQUM7QUFFM0UsU0FBUztBQUNULGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxpQkFBaUI7QUFDakIsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxjQUFjO0FBQ2QsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGlCQUFpQjtBQUNqQixjQUFjLGNBQWMsQ0FBQztBQUU3QixTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxXQUFXO0FBQ1gsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDO0FBRXJDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixVQUFVO0FBQ1YsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxTQUFTO0FBQ1QsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUVwQyxRQUFRO0FBQ1IsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG1uZy1jb21tb25zXG4gKi9cblxuLy8gbW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlLWNvbW1vbnMnO1xuXG4vLyBzZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGF5b3V0L3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Byb3ZpZGVycyc7XG5cbi8vIGluamVjdGlvbiB0b2tlbnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Rva2Vucyc7XG5cbi8vIHV0aWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGkvdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMnO1xuXG4vLyBjb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9maWVsZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS93cmFwcGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xheW91dCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxldmlldyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BhZ2VzJztcblxuLy8gZGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcyc7XG5cbi8vIHBpcGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcyc7XG5cbi8vIHJlZ2lzdHJ5XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZWdpc3RyeS90eXBlLnJlZ2lzdHJ5JztcblxuLy8gYXBpIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpL21vZGVscyc7XG5cbi8vIGNvbXBvbmVudCBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGV2aWV3JztcblxuLy8gdGFibGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGUvbW9kZWxzL3RhYmxlLmV2ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGUvbW9kZWxzL3RhYmxlLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxlL2NvbHVtbi1maWx0ZXItZnVsbC9jb2x1bW4tZmlsdGVyLWZ1bGwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGUvY29sdW1uLXZhbHVlL2NvbHVtbi12YWx1ZS5jb21wb25lbnQnO1xuXG4vLyBmb3JtbHlcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHknO1xuXG4vLyBkYXRhIHByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS1wcm92aWRlcnMnO1xuXG4vLyBkZXNjcmlwdG9yc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvbW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2VkaXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy90YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy90YWJsZXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvdHlwZXMnO1xuXG4vLyBnZW5lcmFsIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzJztcblxuLy8gcm91dGVyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcm91dGVyL21vZGVscyc7XG5cbi8vIHNlY3VyaXR5XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWN1cml0eSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWN1cml0eS9tb2RlbCc7XG5cbi8vIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5cbi8vIGhlbHBlcnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlbHBlcnMvY29lcmNpb24nO1xuXG4vLyBzdHlsZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0eWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdHlsZXMvbW9kZWxzJztcblxuLy8gZXJyb3JcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Vycm9yJztcbiJdfQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxTQUFTO0FBQ1QsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxXQUFXO0FBQ1gsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsbUJBQW1CO0FBQ25CLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsUUFBUTtBQUNSLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxhQUFhLENBQUM7QUFFNUIsYUFBYTtBQUNiLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDhEQUE4RCxDQUFDO0FBRTdFLGFBQWE7QUFDYixjQUFjLGtCQUFrQixDQUFDO0FBRWpDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQztBQUU1QixXQUFXO0FBQ1gsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxhQUFhO0FBQ2IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxtQkFBbUI7QUFDbkIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsUUFBUTtBQUNSLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsd0VBQXdFLENBQUM7QUFDdkYsY0FBYyw0REFBNEQsQ0FBQztBQUUzRSxTQUFTO0FBQ1QsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLGlCQUFpQjtBQUNqQixjQUFjLHNCQUFzQixDQUFDO0FBRXJDLGNBQWM7QUFDZCxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsaUJBQWlCO0FBQ2pCLGNBQWMsY0FBYyxDQUFDO0FBRTdCLFNBQVM7QUFDVCxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDO0FBRXBDLFdBQVc7QUFDWCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsc0JBQXNCLENBQUM7QUFFckMsUUFBUTtBQUNSLGNBQWMsYUFBYSxDQUFDO0FBRTVCLFVBQVU7QUFDVixjQUFjLHdCQUF3QixDQUFDO0FBRXZDLFNBQVM7QUFDVCxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDO0FBRXBDLFFBQVE7QUFDUixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbW5nLWNvbW1vbnNcbiAqL1xuXG4vLyBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb3ZpZGUtY29tbW9ucyc7XG5cbi8vIHNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGkvc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9sYXlvdXQvc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3ZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcHJvdmlkZXJzJztcblxuLy8gaW5qZWN0aW9uIHRva2Vuc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvdG9rZW5zJztcblxuLy8gdXRpbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaS91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG5cbi8vIGNvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5L2ZpZWxkcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5L3dyYXBwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGF5b3V0JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGF5b3V0VjInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZXZpZXcnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24td3JhcHBlci5jb21wb25lbnQnO1xuXG4vLyBkaXJlY3RpdmVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzJztcblxuLy8gcGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzJztcblxuLy8gcmVnaXN0cnlcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlZ2lzdHJ5L3R5cGUucmVnaXN0cnknO1xuXG4vLyBhcGkgbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGkvbW9kZWxzJztcblxuLy8gY29tcG9uZW50IG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZXZpZXcnO1xuXG4vLyB0YWJsZVxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZS9tb2RlbHMvdGFibGUuZXZlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZS9tb2RlbHMvdGFibGUuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGUvY29sdW1uLWZpbHRlci1mdWxsL2NvbHVtbi1maWx0ZXItZnVsbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZS9jb2x1bW4tdmFsdWUvY29sdW1uLXZhbHVlLmNvbXBvbmVudCc7XG5cbi8vIGZvcm1seVxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seSc7XG5cbi8vIGRhdGEgcHJvdmlkZXJzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLXByb3ZpZGVycyc7XG5cbi8vIGRlc2NyaXB0b3JzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvZWRpdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2ZpbHRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL3RhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL3RhYmxldmlldyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy90eXBlcyc7XG5cbi8vIGdlbmVyYWwgbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuXG4vLyByb3V0ZXJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JvdXRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZXIvbW9kZWxzJztcblxuLy8gc2VjdXJpdHlcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlY3VyaXR5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlY3VyaXR5L21vZGVsJztcblxuLy8gdHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVscGVycy9jb2VyY2lvbic7XG5cbi8vIHN0eWxlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3R5bGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0eWxlcy9tb2RlbHMnO1xuXG4vLyBlcnJvclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZXJyb3InO1xuIl19
@@ -23,7 +23,7 @@ export class MediusRestUtil {
23
23
  [FilterMatchMode.IS, 'ex', MediusFilterMatchType.Exists, null],
24
24
  [FilterMatchMode.IS_NOT, 'dne', MediusFilterMatchType.DoesNotExist, null]
25
25
  ];
26
- this.dateTimeInUtc = true;
26
+ this.dateTimeInUtc = false;
27
27
  this.dateTimeWithTimezone = true;
28
28
  this.dateTimeWithMillis = true;
29
29
  this.dateOnlyDisabled = false;
@@ -81,6 +81,9 @@ export class MediusRestUtil {
81
81
  // null
82
82
  return null;
83
83
  }
84
+ else if (/\d{4}-\d{1,2}-\d{1,2}/.test(v) || /\d{4}-\d{1,2}-\d{1,2}T\d{1,2}:*/.test(v)) {
85
+ return new Date(v);
86
+ }
84
87
  else {
85
88
  // number
86
89
  return parseFloat(v);
@@ -198,6 +201,12 @@ export class MediusRestUtil {
198
201
  const filterDescriptor = filterDescriptors.find(f => f.property === filterParam.property);
199
202
  filterParam.property = filterDescriptor?.filterProperty ?? filterParam.property;
200
203
  if (filterDescriptor?.filterType === FilterTypeEnum.Date) {
204
+ const convertDateType = filterDescriptor.datePickerValueNoTime || (!this.dateOnlyDisabled && !filterDescriptor.datePickerShowTime) ? 'date' : 'date-time';
205
+ const convertDateTimeOpts = {
206
+ utc: filterDescriptor.datePickerValueUtc ?? this.dateTimeInUtc,
207
+ noMillis: !this.dateTimeWithMillis,
208
+ noTimezone: filterDescriptor.datePickerValueNoTimezone ?? !this.dateTimeWithTimezone
209
+ };
201
210
  if (filterParam.filterMatchType === MediusFilterMatchType.Equals) {
202
211
  // convert date equals filter to date range
203
212
  const filterDate = filterParam.filterValue;
@@ -219,19 +228,18 @@ export class MediusRestUtil {
219
228
  // transform dates to correct iso string
220
229
  if (typeof filterParam.filterValue !== 'undefined') {
221
230
  if (Array.isArray(filterParam.filterValue)) {
222
- filterParam.filterValue = filterParam.filterValue.map(v => DateUtil.toIsoString(v, filterDescriptor.datePickerValueInUtc ?? this.dateTimeInUtc, filterDescriptor.datePickerValueWithTimezone ?? this.dateTimeWithTimezone, this.dateTimeWithMillis, filterDescriptor.datePickerValueDateOnly ?? (this.dateOnlyDisabled ? false : !filterDescriptor.datePickerShowTime)));
231
+ filterParam.filterValue = filterParam.filterValue.map(v => DateUtil.toIsoString(v, convertDateType, convertDateTimeOpts));
223
232
  }
224
233
  else {
225
- filterDescriptor.datePickerValueInUtc;
226
- filterParam.filterValue = DateUtil.toIsoString(filterParam.filterValue, filterDescriptor.datePickerValueInUtc ?? this.dateTimeInUtc, filterDescriptor.datePickerValueWithTimezone ?? this.dateTimeWithTimezone, this.dateTimeWithMillis, filterDescriptor.datePickerValueDateOnly ?? (this.dateOnlyDisabled ? false : !filterDescriptor.datePickerShowTime));
234
+ filterParam.filterValue = DateUtil.toIsoString(filterParam.filterValue, convertDateType, convertDateTimeOpts);
227
235
  }
228
236
  }
229
237
  if (typeof filterParam.filterValueTo !== 'undefined') {
230
238
  if (Array.isArray(filterParam.filterValueTo)) {
231
- filterParam.filterValueTo = filterParam.filterValueTo.map(v => DateUtil.toIsoString(v, filterDescriptor.datePickerValueInUtc ?? this.dateTimeInUtc, filterDescriptor.datePickerValueWithTimezone ?? this.dateTimeWithTimezone, this.dateTimeWithMillis, filterDescriptor.datePickerValueDateOnly ?? (this.dateOnlyDisabled ? false : !filterDescriptor.datePickerShowTime)));
239
+ filterParam.filterValueTo = filterParam.filterValueTo.map(v => DateUtil.toIsoString(v, convertDateType, convertDateTimeOpts));
232
240
  }
233
241
  else {
234
- filterParam.filterValueTo = DateUtil.toIsoString(filterParam.filterValueTo, filterDescriptor.datePickerValueInUtc ?? this.dateTimeInUtc, filterDescriptor.datePickerValueWithTimezone ?? this.dateTimeWithTimezone, this.dateTimeWithMillis, filterDescriptor.datePickerValueDateOnly ?? (this.dateOnlyDisabled ? false : !filterDescriptor.datePickerShowTime));
242
+ filterParam.filterValueTo = DateUtil.toIsoString(filterParam.filterValueTo, convertDateType, convertDateTimeOpts);
235
243
  }
236
244
  }
237
245
  }
@@ -282,4 +290,4 @@ export class MediusRestUtil {
282
290
  }
283
291
  }
284
292
  }
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzLXJlc3QudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL21lZGl1cy1yZXN0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGVBQWUsRUFBaUIsTUFBTSxhQUFhLENBQUM7QUFLNUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFDLHFCQUFxQixFQUFvQix1QkFBdUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUUzRixNQUFNLE9BQU8sY0FBYzthQUNSLGNBQVMsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQUFBdkMsQ0FBd0M7SUF5QmhFO1FBeEJBLGlFQUFpRTtRQUNoRCxxQkFBZ0IsR0FBNEI7WUFDekQsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1lBQ3JFLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztZQUN2RSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDbEUsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO1lBQzdFLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztZQUMxRSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7WUFDM0UsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDO1lBQzFELENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUscUJBQXFCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztZQUMxRSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ2xGLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUscUJBQXFCLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDcEYsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQztZQUMzRixDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQzFGLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUscUJBQXFCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDMUYsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQzlELENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUscUJBQXFCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQztTQUM1RSxDQUFDO1FBRU0sa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUMxQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFHN0IsUUFBUTtJQUNaLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBRztRQUNiLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQTJIO1FBQ3hJLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUM7U0FDM0Q7UUFDRCxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLEVBQUU7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztTQUN2RDtRQUNELElBQUksTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUN2QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUVNLHlDQUF5QyxDQUM1QyxNQUFjLEVBQ2QsaUJBQStDLEVBQy9DLG1CQUFtQixHQUFHLEVBQUUsRUFDeEIsYUFBYSxHQUFHLENBQUM7UUFFakIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUMzRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7UUFFckYsTUFBTSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWpGLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNyRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzVDO1NBQ0o7UUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELEtBQUssTUFBTSxXQUFXLElBQUksV0FBVyxFQUFFO2dCQUNuQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUUxRSxnQkFBZ0I7Z0JBQ2hCLElBQUksS0FBSyxHQUFRLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEYsSUFBSSxPQUFPLEdBQVEsU0FBUyxDQUFDO2dCQUU3QixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUU7b0JBQ25DLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNuQixTQUFTO3dCQUNULE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDdkM7eUJBQU0sSUFBSSxNQUFNLEtBQUssTUFBTSxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7d0JBQ2hELFVBQVU7d0JBQ1YsT0FBTyxNQUFNLEtBQUssTUFBTSxDQUFDO3FCQUM1Qjt5QkFBTSxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7d0JBQzFCLE9BQU87d0JBQ1AsT0FBTyxJQUFJLENBQUM7cUJBQ2Y7eUJBQU07d0JBQ0gsU0FBUzt3QkFDVCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDeEI7Z0JBQ0wsQ0FBQyxDQUFDO2dCQUVGLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM5QyxRQUFRO29CQUNSLEtBQUssR0FBRyxLQUFLO3lCQUNSLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7eUJBQzlCLEtBQUssQ0FBQyxHQUFHLENBQUM7eUJBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoRDtxQkFBTTtvQkFDSCxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25DO2dCQUVELElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtvQkFDbkIsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkIsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDcEI7cUJBQU0sSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUU7b0JBQ2hELEtBQUssR0FBRyxJQUFJLENBQUM7aUJBQ2hCO2dCQUVELE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDM0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDL0IsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1STthQUNKO1NBQ0o7UUFFRCxPQUFPLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSwwQ0FBMEMsQ0FBQyxLQUF5QjtRQUN2RSxNQUFNLE1BQU0sR0FBVztZQUNuQixLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFFRixJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDakM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDL0I7UUFFRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6RztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNmLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQy9CLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksT0FBTyxZQUFZLEtBQUssV0FBVyxFQUFFO29CQUNyQyxTQUFTO2lCQUNaO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUM5QixZQUFZLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDakM7Z0JBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUU7b0JBQ3BDLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7b0JBQzVDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7b0JBQzlCLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ2pHLElBQUksZUFBZSxFQUFFO3dCQUNqQixJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFOzRCQUNoRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7NEJBRXhCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBVSxFQUFrQixFQUFFO2dDQUNsRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQ0FDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7aUNBQzNCO3FDQUFNLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVMsRUFBRTtvQ0FDeEQsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQ0FDcEI7cUNBQU0sSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFO29DQUMxQixPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2lDQUNsQztxQ0FBTTtvQ0FDSCxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lDQUN4Qjs0QkFDTCxDQUFDLENBQUM7NEJBRUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dDQUN0QixLQUFLLEdBQUcsSUFBSSxLQUFLO3FDQUNaLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQ0FDM0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FDQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUNBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0NBQ2xCLFdBQVcsR0FBRyxJQUFJLENBQUM7NkJBQ3RCO2lDQUFNO2dDQUNILENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs2QkFDaEQ7NEJBRUQsSUFBSSxXQUFXLEVBQUU7Z0NBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQzs2QkFDM0Q7eUJBQ0o7NkJBQU0sSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUsscUJBQXFCLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUU7NEJBQ3pILE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDbEQ7cUJBQ0o7aUJBQ0o7YUFDSjtZQUNELElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hDO1NBQ0o7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sb0JBQW9CLENBQUMsaUJBQW1DLEVBQUUsaUJBQWdFO1FBQzdILElBQUksaUJBQWlCLENBQUMsWUFBWSxJQUFJLGlCQUFpQixFQUFFO1lBQ3JELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3RFLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxFQUFFLFlBQVksSUFBSSxZQUFZLENBQUM7YUFDaEk7U0FDSjtJQUNMLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxpQkFBbUMsRUFBRSxpQkFBK0M7UUFDOUcsS0FBSyxNQUFNLFdBQVcsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLElBQUksRUFBRSxFQUFFO1lBQzVELE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUYsV0FBVyxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRSxjQUFjLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNoRixJQUFJLGdCQUFnQixFQUFFLFVBQVUsS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFO2dCQUN0RCxJQUFJLFdBQVcsQ0FBQyxlQUFlLEtBQUsscUJBQXFCLENBQUMsTUFBTSxFQUFFO29CQUM5RCwyQ0FBMkM7b0JBQzNDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxXQUFtQixDQUFDO29CQUVuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBRXBDLElBQUksZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUU7d0JBQ3JDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUN4RTt5QkFBTTt3QkFDSCxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDMUM7b0JBRUQsV0FBVyxDQUFDLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7b0JBQzNELFdBQVcsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO29CQUNwQyxXQUFXLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztpQkFDdkM7Z0JBRUQsd0NBQXdDO2dCQUN4QyxJQUFJLE9BQU8sV0FBVyxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7b0JBQ2hELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUU7d0JBQ3hDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdEQsUUFBUSxDQUFDLFdBQVcsQ0FDaEIsQ0FBQyxFQUNELGdCQUFnQixDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQzNELGdCQUFnQixDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFDekUsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixnQkFBZ0IsQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQ3JILENBQ0osQ0FBQztxQkFDTDt5QkFBTTt3QkFDSCxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDdEMsV0FBVyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUMxQyxXQUFXLENBQUMsV0FBVyxFQUN2QixnQkFBZ0IsQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUMzRCxnQkFBZ0IsQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQ3pFLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsZ0JBQWdCLENBQUMsdUJBQXVCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUNySCxDQUFDO3FCQUNMO2lCQUNKO2dCQUNELElBQUksT0FBTyxXQUFXLENBQUMsYUFBYSxLQUFLLFdBQVcsRUFBRTtvQkFDbEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDMUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUMxRCxRQUFRLENBQUMsV0FBVyxDQUNoQixDQUFDLEVBQ0QsZ0JBQWdCLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFDM0QsZ0JBQWdCLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUN6RSxJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLGdCQUFnQixDQUFDLHVCQUF1QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FDckgsQ0FDSixDQUFDO3FCQUNMO3lCQUFNO3dCQUNILFdBQVcsQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FDNUMsV0FBVyxDQUFDLGFBQWEsRUFDekIsZ0JBQWdCLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFDM0QsZ0JBQWdCLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUN6RSxJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLGdCQUFnQixDQUFDLHVCQUF1QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FDckgsQ0FBQztxQkFDTDtpQkFDSjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU0seUNBQXlDLENBQUMsS0FBeUI7UUFDdEUsTUFBTSxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9GLGdCQUFnQjtRQUNoQixJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDckIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUY7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2YsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUMzQixXQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUg7cUJBQU0sSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ3BGO2FBQ0o7U0FDSjtRQUVELE9BQU8saUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLHNDQUFzQyxDQUFDLGlCQUEwQyxFQUFFLFFBQWdCLEVBQUUsY0FBOEI7UUFDdEksTUFBTSxTQUFTLEdBQTBCLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxjQUFjLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQy9ILElBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLHFCQUFxQixDQUFDLE1BQU07WUFDN0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLHFCQUFxQixDQUFDLFlBQVk7WUFDbkQsQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLGNBQWMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLEVBQ2hGO1lBQ0UsT0FBTztTQUNWO1FBQ0QsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU0sMENBQTBDLENBQUMsU0FBaUIsRUFBRSxRQUF5QjtRQUMxRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDO0lBQ3JGLENBQUM7SUFFTSxVQUFVLENBQUMsU0FBaUIsRUFBRSxRQUF5QixFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEgsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQztTQUNmO2FBQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM5QixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QjthQUFNO1lBQ0gsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEU7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7RmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNZXRhZGF0YX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtUYWJsZUxhenlMb2FkRXZlbnR9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuXG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL2ZpbHRlcic7XG5pbXBvcnQge0NvbHVtbkRlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL3RhYmxlJztcbmltcG9ydCB7RmlsdGVyVHlwZUVudW19IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TWF0Y2hNb2RlTWFwVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNZWRpdXNGaWx0ZXJNYXRjaFR5cGUsIE1lZGl1c1F1ZXJ5UGFyYW0sIE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgTWVkaXVzUmVzdFV0aWwge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTWVkaXVzUmVzdFV0aWwgPSBuZXcgTWVkaXVzUmVzdFV0aWwoKTtcbiAgICAvLyBmaXJzdCB2YWx1ZSBpcyBmcm9tIHByaW1lTkcsIHNlY29uZCBpcyBmb3IgdXNlIGluIHF1ZXJ5IHBhcmFtc1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0Y2hNb2RlTWFwcGluZzogQXJyYXk8TWF0Y2hNb2RlTWFwVHlwZT4gPSBbXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuQ09OVEFJTlMsICdjJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkNvbnRhaW5zLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5FTkRTX1dJVEgsICdldycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FbmRzV2l0aCwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuRVFVQUxTLCAnZXEnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5HUkVBVEVSX1RIQU4sICdndCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbiwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuTEVTU19USEFOLCAnbHQnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU21hbGxlclRoYW4sIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLlNUQVJUU19XSVRILCAnc3cnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU3RhcnRzV2l0aCwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuSU4sICdpbicsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5JbiwgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuTk9UX0VRVUFMUywgJ25lcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHMsIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkJFVFdFRU4sICdmdCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Gcm9tVG8sIEZpbHRlclR5cGVFbnVtLkRhdGVdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkRBVEVfSVMsICdkdGVxJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscywgRmlsdGVyVHlwZUVudW0uRGF0ZV0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuREFURV9CRUZPUkUsICdsdCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5TbWFsbGVyVGhhbiwgRmlsdGVyVHlwZUVudW0uRGF0ZV0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuREFURV9BRlRFUiwgJ2d0JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkdyZWF0ZXJUaGFuLCBGaWx0ZXJUeXBlRW51bS5EYXRlXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5EQVRFX0lTX05PVCwgJ25lcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Ob3RFcXVhbHMsIEZpbHRlclR5cGVFbnVtLkRhdGVdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLklTLCAnZXgnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXhpc3RzLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5JU19OT1QsICdkbmUnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRG9lc05vdEV4aXN0LCBudWxsXVxuICAgIF07XG5cbiAgICBwcml2YXRlIGRhdGVUaW1lSW5VdGMgPSB0cnVlO1xuICAgIHByaXZhdGUgZGF0ZVRpbWVXaXRoVGltZXpvbmUgPSB0cnVlO1xuICAgIHByaXZhdGUgZGF0ZVRpbWVXaXRoTWlsbGlzID0gdHJ1ZTtcbiAgICBwcml2YXRlIGRhdGVPbmx5RGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIGVtcHR5XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQoKTogTWVkaXVzUmVzdFV0aWwge1xuICAgICAgICByZXR1cm4gTWVkaXVzUmVzdFV0aWwuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmUoY29uZmlnOiB7ZGF0ZVRpbWVJblV0Yz86IGJvb2xlYW47IGRhdGVUaW1lV2l0aFRpbWV6b25lPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoTWlsbGlzPzogYm9vbGVhbjsgZGF0ZU9ubHlEaXNhYmxlZD86IGJvb2xlYW59KTogdm9pZCB7XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVJblV0YyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5VdGMgPSBjb25maWcuZGF0ZVRpbWVJblV0YztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lV2l0aFRpbWV6b25lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoVGltZXpvbmUgPSBjb25maWcuZGF0ZVRpbWVXaXRoVGltZXpvbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZVdpdGhNaWxsaXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZVdpdGhNaWxsaXMgPSBjb25maWcuZGF0ZVRpbWVXaXRoTWlsbGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZU9ubHlEaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVPbmx5RGlzYWJsZWQgPSBjb25maWcuZGF0ZU9ubHlEaXNhYmxlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmcm9tQW5ndWxhclF1ZXJ5UGFyYW1zVG9NZWRpdXNRdWVyeVBhcmFtcyhcbiAgICAgICAgcGFyYW1zOiBQYXJhbXMsXG4gICAgICAgIGZpbHRlckRlc2NyaXB0b3JzOiBBcnJheTxGaWx0ZXJEZXNjcmlwdG9yPGFueT4+LFxuICAgICAgICBkZWZhdWx0SXRlbXNQZXJQYWdlID0gMTAsXG4gICAgICAgIGRlZmF1bHRPZmZzZXQgPSAwXG4gICAgKTogTWVkaXVzUXVlcnlQYXJhbSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhcmFtc1snZmlyc3QnXSA/IHBhcnNlSW50KHBhcmFtc1snZmlyc3QnXSkgOiBkZWZhdWx0T2Zmc2V0O1xuICAgICAgICBjb25zdCBpdGVtc1BlclBhZ2UgPSBwYXJhbXNbJ3Jvd3MnXSA/IHBhcnNlSW50KHBhcmFtc1sncm93cyddKSA6IGRlZmF1bHRJdGVtc1BlclBhZ2U7XG5cbiAgICAgICAgY29uc3QgbWVkaXVzUGFyYW1zQnVpbGRlciA9IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZShpdGVtc1BlclBhZ2UsIG9mZnNldCk7XG5cbiAgICAgICAgaWYgKHBhcmFtc1snc29ydCddKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNvcnQgb2YgcGFyYW1zWydzb3J0J10uc3BsaXQoJywnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHFwU29ydFNwbGl0ID0gc29ydC5zcGxpdCgnOicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gcXBTb3J0U3BsaXRbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgYXNjID0gcXBTb3J0U3BsaXQubGVuZ3RoID4gMSA/IHFwU29ydFNwbGl0WzFdID09PSAnYXNjJyA6IHRydWU7XG4gICAgICAgICAgICAgICAgbWVkaXVzUGFyYW1zQnVpbGRlci53aXRoU29ydChmaWVsZCwgYXNjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyYW1zWydmaWx0ZXInXSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyU3BsaXQgPSBwYXJhbXNbJ2ZpbHRlciddLnNwbGl0KCc7Jyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlckZpZWxkIG9mIGZpbHRlclNwbGl0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRmllbGRTcGxpdCA9IGZpbHRlckZpZWxkLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBmaWx0ZXJGaWVsZFNwbGl0WzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yID0gZmlsdGVyRmllbGRTcGxpdC5sZW5ndGggPiAxID8gZmlsdGVyRmllbGRTcGxpdFsxXSA6ICdlcSc7XG5cbiAgICAgICAgICAgICAgICAvLyBwcmVwYXJlIHZhbHVlXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBmaWx0ZXJGaWVsZFNwbGl0Lmxlbmd0aCA+IDIgPyBmaWx0ZXJGaWVsZFNwbGl0LnNsaWNlKDIpLmpvaW4oJzonKSA6ICcnO1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVRvOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVRyYW5zZm9ybWVyID0gKHY6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2TG93ZXIgPSB2LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2LnN0YXJ0c1dpdGgoXCInXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2LnN1YnN0cmluZygxLCB2Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZMb3dlciA9PT0gJ3RydWUnIHx8IHZMb3dlciA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9vbGVhblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZMb3dlciA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZMb3dlciA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFycmF5XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKCh2OiBzdHJpbmcpID0+IHZhbHVlVHJhbnNmb3JtZXIodikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVUcmFuc2Zvcm1lcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVG8gPSB2YWx1ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSAnZXgnIHx8IG9wZXJhdG9yID09PSAnZG5lJykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGVzY3JpcHRvciA9IGZpbHRlckRlc2NyaXB0b3JzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBmaWVsZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hNb2RlID0gdGhpcy5nZXRNYXBwaW5nKG9wZXJhdG9yLCBmaWx0ZXJEZXNjcmlwdG9yPy5maWx0ZXJUeXBlLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hNb2RlICYmIGZpbHRlckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVkaXVzUGFyYW1zQnVpbGRlci53aXRoRmlsdGVyKGZpbHRlckRlc2NyaXB0b3IucHJvcGVydHksIHZhbHVlLCB2YWx1ZVRvLCB0aGlzLmdldE1lZGl1c0ZpbHRlck1hdGNoVHlwZUZyb21QcmltZU1hdGNoTW9kZShtYXRjaE1vZGVbMF0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVkaXVzUGFyYW1zQnVpbGRlci5idWlsZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9Bbmd1bGFyUXVlcnlQYXJhbXMoZXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCk6IFBhcmFtcyB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogUGFyYW1zID0ge1xuICAgICAgICAgICAgZmlyc3Q6IG51bGwsXG4gICAgICAgICAgICByb3dzOiBudWxsLFxuICAgICAgICAgICAgc29ydDogbnVsbCxcbiAgICAgICAgICAgIGZpbHRlcjogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChldmVudC5maXJzdCAmJiBldmVudC5maXJzdCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtc1snZmlyc3QnXSA9IGV2ZW50LmZpcnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5yb3dzICYmIGV2ZW50LnJvd3MgPiAwKSB7XG4gICAgICAgICAgICBwYXJhbXNbJ3Jvd3MnXSA9IGV2ZW50LnJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQubXVsdGlTb3J0TWV0YT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbXNbJ3NvcnQnXSA9IGV2ZW50Lm11bHRpU29ydE1ldGE/Lm1hcChzID0+IGAke3MuZmllbGR9JHtzLm9yZGVyID09PSAxID8gJycgOiAnOmRlc2MnfWApLmpvaW4oJywnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5maWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIGluIGV2ZW50LmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGRGaWx0ZXJzID0gZXZlbnQuZmlsdGVyc1tmaWVsZF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWVsZEZpbHRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRGaWx0ZXJzKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEZpbHRlcnMgPSBbZmllbGRGaWx0ZXJzXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkRmlsdGVyIG9mIGZpZWxkRmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmltZU9wZXJhdG9yID0gZmllbGRGaWx0ZXIubWF0Y2hNb2RlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmaWVsZEZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JNYXBwaW5nID0gcHJpbWVPcGVyYXRvciA/IHRoaXMuZ2V0TWFwcGluZyhwcmltZU9wZXJhdG9yLCB1bmRlZmluZWQsIDApIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3JNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb0FkZEZpbHRlciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtVmFsdWUgPSAodjogdW5rbm93bik6IFthbnksIGJvb2xlYW5dID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbYCcke3Z9J2AsIHRydWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3YsIHRydWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3YudG9JU09TdHJpbmcoKSwgdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW251bGwsIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBgWyR7dmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAodiA9PiB0cmFuc2Zvcm1WYWx1ZSh2KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2WzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IHZbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignLCcpfV1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0FkZEZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlLCBkb0FkZEZpbHRlcl0gPSB0cmFuc2Zvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvQWRkRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChgJHtmaWVsZH06JHtvcGVyYXRvck1hcHBpbmdbMV19OiR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvck1hcHBpbmdbMl0gPT09IE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FeGlzdHMgfHwgb3BlcmF0b3JNYXBwaW5nWzJdID09PSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRG9lc05vdEV4aXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKGAke2ZpZWxkfToke29wZXJhdG9yTWFwcGluZ1sxXX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNbJ2ZpbHRlciddID0gZmlsdGVycy5qb2luKCc7Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBtb2RpZnlTb3J0UHJvcGVydGllcyhtZWRpdXNRdWVyeVBhcmFtczogTWVkaXVzUXVlcnlQYXJhbSwgY29sdW1uRGVzY3JpcHRvcnM6IEFycmF5PENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+PiB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAobWVkaXVzUXVlcnlQYXJhbXMuc29ydFByb3BlcnR5ICYmIGNvbHVtbkRlc2NyaXB0b3JzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBzb3J0UHJvcGVydHldIG9mIG1lZGl1c1F1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICBtZWRpdXNRdWVyeVBhcmFtcy5zb3J0UHJvcGVydHlbaV0gPSBjb2x1bW5EZXNjcmlwdG9ycy5maW5kKGVsID0+IGVsLnByb3BlcnR5ID09PSBzb3J0UHJvcGVydHkpPy5zb3J0UHJvcGVydHkgPz8gc29ydFByb3BlcnR5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG1vZGlmeUZpbHRlclByb3BlcnRpZXMobWVkaXVzUXVlcnlQYXJhbXM6IE1lZGl1c1F1ZXJ5UGFyYW0sIGZpbHRlckRlc2NyaXB0b3JzOiBBcnJheTxGaWx0ZXJEZXNjcmlwdG9yPGFueT4+KSB7XG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyUGFyYW0gb2YgbWVkaXVzUXVlcnlQYXJhbXMuZmlsdGVyUGFyYW1zID8/IFtdKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gZmlsdGVyRGVzY3JpcHRvcnMuZmluZChmID0+IGYucHJvcGVydHkgPT09IGZpbHRlclBhcmFtLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGZpbHRlclBhcmFtLnByb3BlcnR5ID0gZmlsdGVyRGVzY3JpcHRvcj8uZmlsdGVyUHJvcGVydHkgPz8gZmlsdGVyUGFyYW0ucHJvcGVydHk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyRGVzY3JpcHRvcj8uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJQYXJhbS5maWx0ZXJNYXRjaFR5cGUgPT09IE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FcXVhbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCBkYXRlIGVxdWFscyBmaWx0ZXIgdG8gZGF0ZSByYW5nZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEYXRlID0gZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUgYXMgRGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShmaWx0ZXJEYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0SG91cnMoc3RhcnREYXRlLmdldEhvdXJzKCksIHN0YXJ0RGF0ZS5nZXRNaW51dGVzKCksIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZS5zZXRIb3VycyhlbmREYXRlLmdldEhvdXJzKCksIGVuZERhdGUuZ2V0TWludXRlcygpICsgMSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZS5zZXREYXRlKGVuZERhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJNYXRjaFR5cGUgPSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRnJvbVRvO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSA9IHN0YXJ0RGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbyA9IGVuZERhdGU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIGRhdGVzIHRvIGNvcnJlY3QgaXNvIHN0cmluZ1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlclBhcmFtLmZpbHRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUgPSBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZS5tYXAodiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVVdGlsLnRvSXNvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZUluVXRjID8/IHRoaXMuZGF0ZVRpbWVJblV0YyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVXaXRoVGltZXpvbmUgPz8gdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZVdpdGhNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclZhbHVlRGF0ZU9ubHkgPz8gKHRoaXMuZGF0ZU9ubHlEaXNhYmxlZCA/IGZhbHNlIDogIWZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZUluVXRjO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUgPSBEYXRlVXRpbC50b0lzb1N0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZUluVXRjID8/IHRoaXMuZGF0ZVRpbWVJblV0YyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZVdpdGhUaW1lem9uZSA/PyB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclZhbHVlRGF0ZU9ubHkgPz8gKHRoaXMuZGF0ZU9ubHlEaXNhYmxlZCA/IGZhbHNlIDogIWZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZVRvID0gZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUby5tYXAodiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGVVdGlsLnRvSXNvU3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZUluVXRjID8/IHRoaXMuZGF0ZVRpbWVJblV0YyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyVmFsdWVXaXRoVGltZXpvbmUgPz8gdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZVdpdGhNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclZhbHVlRGF0ZU9ubHkgPz8gKHRoaXMuZGF0ZU9ubHlEaXNhYmxlZCA/IGZhbHNlIDogIWZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZVRvID0gRGF0ZVV0aWwudG9Jc29TdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZUluVXRjID8/IHRoaXMuZGF0ZVRpbWVJblV0YyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZVdpdGhUaW1lem9uZSA/PyB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclZhbHVlRGF0ZU9ubHkgPz8gKHRoaXMuZGF0ZU9ubHlEaXNhYmxlZCA/IGZhbHNlIDogIWZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9NZWRpdXNRdWVyeVBhcmFtcyhldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KTogTWVkaXVzUXVlcnlQYXJhbSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1CdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKGV2ZW50LnJvd3MgPz8gdW5kZWZpbmVkLCBldmVudC5maXJzdCk7XG5cbiAgICAgICAgLy8gYXBwbHkgc29ydGluZ1xuICAgICAgICBpZiAoZXZlbnQubXVsdGlTb3J0TWV0YSkge1xuICAgICAgICAgICAgZXZlbnQubXVsdGlTb3J0TWV0YS5mb3JFYWNoKG1zbSA9PiBxdWVyeVBhcmFtQnVpbGRlci53aXRoU29ydChtc20uZmllbGQsIG1zbS5vcmRlciA9PT0gMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyaW5nXG4gICAgICAgIGlmIChldmVudC5maWx0ZXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhldmVudC5maWx0ZXJzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckV2ZW50ID0gZXZlbnQuZmlsdGVyc1trZXldO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlckV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAoZmlsdGVyRXZlbnQgYXMgRmlsdGVyTWV0YWRhdGFbXSkuZm9yRWFjaChlID0+IHRoaXMuYWRkTWVkaXVzRmlsdGVyRnJvbVByaW1lRmlsdGVyTWV0YWRhdGEocXVlcnlQYXJhbUJ1aWxkZXIsIGtleSwgZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlckV2ZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE1lZGl1c0ZpbHRlckZyb21QcmltZUZpbHRlck1ldGFkYXRhKHF1ZXJ5UGFyYW1CdWlsZGVyLCBrZXksIGZpbHRlckV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcXVlcnlQYXJhbUJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTWVkaXVzRmlsdGVyRnJvbVByaW1lRmlsdGVyTWV0YWRhdGEocXVlcnlQYXJhbUJ1aWxkZXI6IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLCBwcm9wZXJ0eTogc3RyaW5nLCBmaWx0ZXJNZXRhZGF0YTogRmlsdGVyTWV0YWRhdGEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hUeXBlOiBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUgPSB0aGlzLmdldE1lZGl1c0ZpbHRlck1hdGNoVHlwZUZyb21QcmltZU1hdGNoTW9kZShmaWx0ZXJNZXRhZGF0YS5tYXRjaE1vZGUgPz8gJ2VxdWFscycpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtYXRjaFR5cGVbMl0gIT09IE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FeGlzdHMgJiZcbiAgICAgICAgICAgIG1hdGNoVHlwZVsyXSAhPT0gTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkRvZXNOb3RFeGlzdCAmJlxuICAgICAgICAgICAgKGZpbHRlck1ldGFkYXRhLnZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBmaWx0ZXJNZXRhZGF0YS52YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhGaWx0ZXIocHJvcGVydHksIGZpbHRlck1ldGFkYXRhLnZhbHVlLCB1bmRlZmluZWQsIG1hdGNoVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1lZGl1c0ZpbHRlck1hdGNoVHlwZUZyb21QcmltZU1hdGNoTW9kZShtYXRjaE1vZGU6IHN0cmluZywgZGF0YVR5cGU/OiBGaWx0ZXJUeXBlRW51bSk6IE1lZGl1c0ZpbHRlck1hdGNoVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1hcHBpbmcobWF0Y2hNb2RlLCBkYXRhVHlwZSk/LlsyXSA/PyBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNYXBwaW5nKG1hdGNoTW9kZTogc3RyaW5nLCBkYXRhVHlwZT86IEZpbHRlclR5cGVFbnVtLCBpZHggPSAwKTogTWF0Y2hNb2RlTWFwVHlwZSB8IG51bGwge1xuICAgICAgICBjb25zdCBtYXBwaW5ncyA9IHRoaXMubWF0Y2hNb2RlTWFwcGluZy5maWx0ZXIobSA9PiBtW2lkeF0gPT09IG1hdGNoTW9kZSAmJiAoIWRhdGFUeXBlIHx8ICFtWzNdIHx8IGRhdGFUeXBlID09PSBtWzNdKSk7XG4gICAgICAgIGlmIChtYXBwaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcHBpbmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmdzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmdzLnNvcnQoKG0xLCBtMikgPT4gKG0yWzNdID8/IC0xKSAtIChtMVszXSA/PyAtMSkpWzBdO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzLXJlc3QudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL21lZGl1cy1yZXN0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGVBQWUsRUFBaUIsTUFBTSxhQUFhLENBQUM7QUFLNUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFDLHFCQUFxQixFQUFvQix1QkFBdUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUUzRixNQUFNLE9BQU8sY0FBYzthQUNSLGNBQVMsR0FBbUIsSUFBSSxjQUFjLEVBQUUsQUFBdkMsQ0FBd0M7SUF5QmhFO1FBeEJBLGlFQUFpRTtRQUNoRCxxQkFBZ0IsR0FBNEI7WUFDekQsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1lBQ3JFLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztZQUN2RSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDbEUsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO1lBQzdFLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUscUJBQXFCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztZQUMxRSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7WUFDM0UsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFF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LEdBQUcsQ0FBQztRQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RILElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEI7YUFBTTtZQUNILE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGFyYW1zfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZSwgRmlsdGVyTWV0YWRhdGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7VGFibGVMYXp5TG9hZEV2ZW50fSBmcm9tICdwcmltZW5nL3RhYmxlJztcblxuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycy9maWx0ZXInO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycy90YWJsZSc7XG5pbXBvcnQge0ZpbHRlclR5cGVFbnVtfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01hdGNoTW9kZU1hcFR5cGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7RGF0ZVV0aWx9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7TWVkaXVzRmlsdGVyTWF0Y2hUeXBlLCBNZWRpdXNRdWVyeVBhcmFtLCBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlcn0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNsYXNzIE1lZGl1c1Jlc3RVdGlsIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IE1lZGl1c1Jlc3RVdGlsID0gbmV3IE1lZGl1c1Jlc3RVdGlsKCk7XG4gICAgLy8gZmlyc3QgdmFsdWUgaXMgZnJvbSBwcmltZU5HLCBzZWNvbmQgaXMgZm9yIHVzZSBpbiBxdWVyeSBwYXJhbXNcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hdGNoTW9kZU1hcHBpbmc6IEFycmF5PE1hdGNoTW9kZU1hcFR5cGU+ID0gW1xuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkNPTlRBSU5TLCAnYycsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Db250YWlucywgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuRU5EU19XSVRILCAnZXcnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRW5kc1dpdGgsIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUywgJ2VxJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscywgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuR1JFQVRFUl9USEFOLCAnZ3QnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuR3JlYXRlclRoYW4sIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkxFU1NfVEhBTiwgJ2x0JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlNtYWxsZXJUaGFuLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5TVEFSVFNfV0lUSCwgJ3N3JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLlN0YXJ0c1dpdGgsIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLklOLCAnaW4nLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuSW4sIG51bGxdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLk5PVF9FUVVBTFMsICduZXEnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90RXF1YWxzLCBudWxsXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5CRVRXRUVOLCAnZnQnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRnJvbVRvLCBGaWx0ZXJUeXBlRW51bS5EYXRlXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5EQVRFX0lTLCAnZHRlcScsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5FcXVhbHMsIEZpbHRlclR5cGVFbnVtLkRhdGVdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQkVGT1JFLCAnbHQnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuU21hbGxlclRoYW4sIEZpbHRlclR5cGVFbnVtLkRhdGVdLFxuICAgICAgICBbRmlsdGVyTWF0Y2hNb2RlLkRBVEVfQUZURVIsICdndCcsIE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5HcmVhdGVyVGhhbiwgRmlsdGVyVHlwZUVudW0uRGF0ZV0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuREFURV9JU19OT1QsICduZXEnLCBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuTm90RXF1YWxzLCBGaWx0ZXJUeXBlRW51bS5EYXRlXSxcbiAgICAgICAgW0ZpbHRlck1hdGNoTW9kZS5JUywgJ2V4JywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkV4aXN0cywgbnVsbF0sXG4gICAgICAgIFtGaWx0ZXJNYXRjaE1vZGUuSVNfTk9ULCAnZG5lJywgTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkRvZXNOb3RFeGlzdCwgbnVsbF1cbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBkYXRlVGltZUluVXRjID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhUaW1lem9uZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhNaWxsaXMgPSB0cnVlO1xuICAgIHByaXZhdGUgZGF0ZU9ubHlEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gZW1wdHlcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCgpOiBNZWRpdXNSZXN0VXRpbCB7XG4gICAgICAgIHJldHVybiBNZWRpdXNSZXN0VXRpbC5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZShjb25maWc6IHtkYXRlVGltZUluVXRjPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoVGltZXpvbmU/OiBib29sZWFuOyBkYXRlVGltZVdpdGhNaWxsaXM/OiBib29sZWFuOyBkYXRlT25seURpc2FibGVkPzogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZUluVXRjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJblV0YyA9IGNvbmZpZy5kYXRlVGltZUluVXRjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoVGltZXpvbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZSA9IGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcyA9IGNvbmZpZy5kYXRlVGltZVdpdGhNaWxsaXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlT25seURpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZU9ubHlEaXNhYmxlZCA9IGNvbmZpZy5kYXRlT25seURpc2FibGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZyb21Bbmd1bGFyUXVlcnlQYXJhbXNUb01lZGl1c1F1ZXJ5UGFyYW1zKFxuICAgICAgICBwYXJhbXM6IFBhcmFtcyxcbiAgICAgICAgZmlsdGVyRGVzY3JpcHRvcnM6IEFycmF5PEZpbHRlckRlc2NyaXB0b3I8YW55Pj4sXG4gICAgICAgIGRlZmF1bHRJdGVtc1BlclBhZ2UgPSAxMCxcbiAgICAgICAgZGVmYXVsdE9mZnNldCA9IDBcbiAgICApOiBNZWRpdXNRdWVyeVBhcmFtIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyYW1zWydmaXJzdCddID8gcGFyc2VJbnQocGFyYW1zWydmaXJzdCddKSA6IGRlZmF1bHRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSA9IHBhcmFtc1sncm93cyddID8gcGFyc2VJbnQocGFyYW1zWydyb3dzJ10pIDogZGVmYXVsdEl0ZW1zUGVyUGFnZTtcblxuICAgICAgICBjb25zdCBtZWRpdXNQYXJhbXNCdWlsZGVyID0gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKGl0ZW1zUGVyUGFnZSwgb2Zmc2V0KTtcblxuICAgICAgICBpZiAocGFyYW1zWydzb3J0J10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc29ydCBvZiBwYXJhbXNbJ3NvcnQnXS5zcGxpdCgnLCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcXBTb3J0U3BsaXQgPSBzb3J0LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBxcFNvcnRTcGxpdFswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc2MgPSBxcFNvcnRTcGxpdC5sZW5ndGggPiAxID8gcXBTb3J0U3BsaXRbMV0gPT09ICdhc2MnIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICBtZWRpdXNQYXJhbXNCdWlsZGVyLndpdGhTb3J0KGZpZWxkLCBhc2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXNbJ2ZpbHRlciddKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJTcGxpdCA9IHBhcmFtc1snZmlsdGVyJ10uc3BsaXQoJzsnKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyRmllbGQgb2YgZmlsdGVyU3BsaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZFNwbGl0ID0gZmlsdGVyRmllbGQuc3BsaXQoJzonKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGZpbHRlckZpZWxkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXJGaWVsZFNwbGl0Lmxlbmd0aCA+IDEgPyBmaWx0ZXJGaWVsZFNwbGl0WzFdIDogJ2VxJztcblxuICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWU6IGFueSA9IGZpbHRlckZpZWxkU3BsaXQubGVuZ3RoID4gMiA/IGZpbHRlckZpZWxkU3BsaXQuc2xpY2UoMikuam9pbignOicpIDogJyc7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVG86IGFueSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlVHJhbnNmb3JtZXIgPSAodjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZMb3dlciA9IHYudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYuc3RhcnRzV2l0aChcIidcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYuc3Vic3RyaW5nKDEsIHYubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodkxvd2VyID09PSAndHJ1ZScgfHwgdkxvd2VyID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBib29sZWFuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdkxvd2VyID09PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodkxvd2VyID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9cXGR7NH0tXFxkezEsMn0tXFxkezEsMn0vLnRlc3QodikgfHwgL1xcZHs0fS1cXGR7MSwyfS1cXGR7MSwyfVRcXGR7MSwyfToqLy50ZXN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdbJykgJiYgdmFsdWUuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBhcnJheVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgodjogc3RyaW5nKSA9PiB2YWx1ZVRyYW5zZm9ybWVyKHYpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlVHJhbnNmb3JtZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJ2Z0Jykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvID0gdmFsdWVbMV07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJ2V4JyB8fCBvcGVyYXRvciA9PT0gJ2RuZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckRlc2NyaXB0b3IgPSBmaWx0ZXJEZXNjcmlwdG9ycy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gZmllbGQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IHRoaXMuZ2V0TWFwcGluZyhvcGVyYXRvciwgZmlsdGVyRGVzY3JpcHRvcj8uZmlsdGVyVHlwZSwgMSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoTW9kZSAmJiBmaWx0ZXJEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lZGl1c1BhcmFtc0J1aWxkZXIud2l0aEZpbHRlcihmaWx0ZXJEZXNjcmlwdG9yLnByb3BlcnR5LCB2YWx1ZSwgdmFsdWVUbywgdGhpcy5nZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUobWF0Y2hNb2RlWzBdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lZGl1c1BhcmFtc0J1aWxkZXIuYnVpbGQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZnJvbVByaW1lTGF6eUxvYWRFdmVudFRvQW5ndWxhclF1ZXJ5UGFyYW1zKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpOiBQYXJhbXMge1xuICAgICAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHtcbiAgICAgICAgICAgIGZpcnN0OiBudWxsLFxuICAgICAgICAgICAgcm93czogbnVsbCxcbiAgICAgICAgICAgIHNvcnQ6IG51bGwsXG4gICAgICAgICAgICBmaWx0ZXI6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZXZlbnQuZmlyc3QgJiYgZXZlbnQuZmlyc3QgPiAwKSB7XG4gICAgICAgICAgICBwYXJhbXNbJ2ZpcnN0J10gPSBldmVudC5maXJzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucm93cyAmJiBldmVudC5yb3dzID4gMCkge1xuICAgICAgICAgICAgcGFyYW1zWydyb3dzJ10gPSBldmVudC5yb3dzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50Lm11bHRpU29ydE1ldGE/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyYW1zWydzb3J0J10gPSBldmVudC5tdWx0aVNvcnRNZXRhPy5tYXAocyA9PiBgJHtzLmZpZWxkfSR7cy5vcmRlciA9PT0gMSA/ICcnIDogJzpkZXNjJ31gKS5qb2luKCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBpbiBldmVudC5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkRmlsdGVycyA9IGV2ZW50LmZpbHRlcnNbZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGRGaWx0ZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZpZWxkRmlsdGVycykpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRGaWx0ZXJzID0gW2ZpZWxkRmlsdGVyc107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZEZpbHRlciBvZiBmaWVsZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpbWVPcGVyYXRvciA9IGZpZWxkRmlsdGVyLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZmllbGRGaWx0ZXIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yTWFwcGluZyA9IHByaW1lT3BlcmF0b3IgPyB0aGlzLmdldE1hcHBpbmcocHJpbWVPcGVyYXRvciwgdW5kZWZpbmVkLCAwKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yTWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG9BZGRGaWx0ZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybVZhbHVlID0gKHY6IHVua25vd24pOiBbYW55LCBib29sZWFuXSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2AnJHt2fSdgLCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt2LCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt2LnRvSVNPU3RyaW5nKCksIHRydWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBmYWxzZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYFske3ZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKHYgPT4gdHJhbnNmb3JtVmFsdWUodikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHYgPT4gdlsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAodiA9PiB2WzBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywnKX1dYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9BZGRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZSwgZG9BZGRGaWx0ZXJdID0gdHJhbnNmb3JtVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb0FkZEZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goYCR7ZmllbGR9OiR7b3BlcmF0b3JNYXBwaW5nWzFdfToke3ZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3JNYXBwaW5nWzJdID09PSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXhpc3RzIHx8IG9wZXJhdG9yTWFwcGluZ1syXSA9PT0gTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkRvZXNOb3RFeGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChgJHtmaWVsZH06JHtvcGVyYXRvck1hcHBpbmdbMV19YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zWydmaWx0ZXInXSA9IGZpbHRlcnMuam9pbignOycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgbW9kaWZ5U29ydFByb3BlcnRpZXMobWVkaXVzUXVlcnlQYXJhbXM6IE1lZGl1c1F1ZXJ5UGFyYW0sIGNvbHVtbkRlc2NyaXB0b3JzOiBBcnJheTxDb2x1bW5EZXNjcmlwdG9yPGFueSwgYW55Pj4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG1lZGl1c1F1ZXJ5UGFyYW1zLnNvcnRQcm9wZXJ0eSAmJiBjb2x1bW5EZXNjcmlwdG9ycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgc29ydFByb3BlcnR5XSBvZiBtZWRpdXNRdWVyeVBhcmFtcy5zb3J0UHJvcGVydHkuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgbWVkaXVzUXVlcnlQYXJhbXMuc29ydFByb3BlcnR5W2ldID0gY29sdW1uRGVzY3JpcHRvcnMuZmluZChlbCA9PiBlbC5wcm9wZXJ0eSA9PT0gc29ydFByb3BlcnR5KT8uc29ydFByb3BlcnR5ID8/IHNvcnRQcm9wZXJ0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBtb2RpZnlGaWx0ZXJQcm9wZXJ0aWVzKG1lZGl1c1F1ZXJ5UGFyYW1zOiBNZWRpdXNRdWVyeVBhcmFtLCBmaWx0ZXJEZXNjcmlwdG9yczogQXJyYXk8RmlsdGVyRGVzY3JpcHRvcjxhbnk+Pikge1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlclBhcmFtIG9mIG1lZGl1c1F1ZXJ5UGFyYW1zLmZpbHRlclBhcmFtcyA/PyBbXSkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRGVzY3JpcHRvciA9IGZpbHRlckRlc2NyaXB0b3JzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBmaWx0ZXJQYXJhbS5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBmaWx0ZXJQYXJhbS5wcm9wZXJ0eSA9IGZpbHRlckRlc2NyaXB0b3I/LmZpbHRlclByb3BlcnR5ID8/IGZpbHRlclBhcmFtLnByb3BlcnR5O1xuICAgICAgICAgICAgaWYgKGZpbHRlckRlc2NyaXB0b3I/LmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0RGF0ZVR5cGUgPSBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZU5vVGltZSB8fCAoIXRoaXMuZGF0ZU9ubHlEaXNhYmxlZCAmJiAhZmlsdGVyRGVzY3JpcHRvci5kYXRlUGlja2VyU2hvd1RpbWUpID8gJ2RhdGUnIDogJ2RhdGUtdGltZSc7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udmVydERhdGVUaW1lT3B0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdXRjOiBmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJWYWx1ZVV0YyA/PyB0aGlzLmRhdGVUaW1lSW5VdGMsXG4gICAgICAgICAgICAgICAgICAgIG5vTWlsbGlzOiAhdGhpcy5kYXRlVGltZVdpdGhNaWxsaXMsXG4gICAgICAgICAgICAgICAgICAgIG5vVGltZXpvbmU6IGZpbHRlckRlc2NyaXB0b3IuZGF0ZVBpY2tlclZhbHVlTm9UaW1lem9uZSA/PyAhdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyUGFyYW0uZmlsdGVyTWF0Y2hUeXBlID09PSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXF1YWxzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZGF0ZSBlcXVhbHMgZmlsdGVyIHRvIGRhdGUgcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0ZSA9IGZpbHRlclBhcmFtLmZpbHRlclZhbHVlIGFzIERhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZmlsdGVyRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEZXNjcmlwdG9yLmRhdGVQaWNrZXJTaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKHN0YXJ0RGF0ZS5nZXRIb3VycygpLCBzdGFydERhdGUuZ2V0TWludXRlcygpLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERhdGUuc2V0SG91cnMoZW5kRGF0ZS5nZXRIb3VycygpLCBlbmREYXRlLmdldE1pbnV0ZXMoKSArIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERhdGUuc2V0RGF0ZShlbmREYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyTWF0Y2hUeXBlID0gTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkZyb21UbztcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUgPSBzdGFydERhdGU7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8gPSBlbmREYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBkYXRlcyB0byBjb3JyZWN0IGlzbyBzdHJpbmdcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlID0gZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWUubWFwKHYgPT4gRGF0ZVV0aWwudG9Jc29TdHJpbmcodiwgY29udmVydERhdGVUeXBlLCBjb252ZXJ0RGF0ZVRpbWVPcHRzKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZSA9IERhdGVVdGlsLnRvSXNvU3RyaW5nKGZpbHRlclBhcmFtLmZpbHRlclZhbHVlLCBjb252ZXJ0RGF0ZVR5cGUsIGNvbnZlcnREYXRlVGltZU9wdHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8gPSBmaWx0ZXJQYXJhbS5maWx0ZXJWYWx1ZVRvLm1hcCh2ID0+IERhdGVVdGlsLnRvSXNvU3RyaW5nKHYsIGNvbnZlcnREYXRlVHlwZSwgY29udmVydERhdGVUaW1lT3B0cykpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW0uZmlsdGVyVmFsdWVUbyA9IERhdGVVdGlsLnRvSXNvU3RyaW5nKGZpbHRlclBhcmFtLmZpbHRlclZhbHVlVG8sIGNvbnZlcnREYXRlVHlwZSwgY29udmVydERhdGVUaW1lT3B0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZnJvbVByaW1lTGF6eUxvYWRFdmVudFRvTWVkaXVzUXVlcnlQYXJhbXMoZXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCk6IE1lZGl1c1F1ZXJ5UGFyYW0ge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtQnVpbGRlciA9IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZShldmVudC5yb3dzID8/IHVuZGVmaW5lZCwgZXZlbnQuZmlyc3QpO1xuXG4gICAgICAgIC8vIGFwcGx5IHNvcnRpbmdcbiAgICAgICAgaWYgKGV2ZW50Lm11bHRpU29ydE1ldGEpIHtcbiAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGEuZm9yRWFjaChtc20gPT4gcXVlcnlQYXJhbUJ1aWxkZXIud2l0aFNvcnQobXNtLmZpZWxkLCBtc20ub3JkZXIgPT09IDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IGZpbHRlcmluZ1xuICAgICAgICBpZiAoZXZlbnQuZmlsdGVycykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZXZlbnQuZmlsdGVycykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJFdmVudCA9IGV2ZW50LmZpbHRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgKGZpbHRlckV2ZW50IGFzIEZpbHRlck1ldGFkYXRhW10pLmZvckVhY2goZSA9PiB0aGlzLmFkZE1lZGl1c0ZpbHRlckZyb21QcmltZUZpbHRlck1ldGFkYXRhKHF1ZXJ5UGFyYW1CdWlsZGVyLCBrZXksIGUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXJFdmVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRNZWRpdXNGaWx0ZXJGcm9tUHJpbWVGaWx0ZXJNZXRhZGF0YShxdWVyeVBhcmFtQnVpbGRlciwga2V5LCBmaWx0ZXJFdmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1CdWlsZGVyLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE1lZGl1c0ZpbHRlckZyb21QcmltZUZpbHRlck1ldGFkYXRhKHF1ZXJ5UGFyYW1CdWlsZGVyOiBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlciwgcHJvcGVydHk6IHN0cmluZywgZmlsdGVyTWV0YWRhdGE6IEZpbHRlck1ldGFkYXRhKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoVHlwZTogTWVkaXVzRmlsdGVyTWF0Y2hUeXBlID0gdGhpcy5nZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUoZmlsdGVyTWV0YWRhdGEubWF0Y2hNb2RlID8/ICdlcXVhbHMnKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbWF0Y2hUeXBlWzJdICE9PSBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUuRXhpc3RzICYmXG4gICAgICAgICAgICBtYXRjaFR5cGVbMl0gIT09IE1lZGl1c0ZpbHRlck1hdGNoVHlwZS5Eb2VzTm90RXhpc3QgJiZcbiAgICAgICAgICAgIChmaWx0ZXJNZXRhZGF0YS52YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgZmlsdGVyTWV0YWRhdGEudmFsdWUgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBxdWVyeVBhcmFtQnVpbGRlci53aXRoRmlsdGVyKHByb3BlcnR5LCBmaWx0ZXJNZXRhZGF0YS52YWx1ZSwgdW5kZWZpbmVkLCBtYXRjaFR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNZWRpdXNGaWx0ZXJNYXRjaFR5cGVGcm9tUHJpbWVNYXRjaE1vZGUobWF0Y2hNb2RlOiBzdHJpbmcsIGRhdGFUeXBlPzogRmlsdGVyVHlwZUVudW0pOiBNZWRpdXNGaWx0ZXJNYXRjaFR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXBwaW5nKG1hdGNoTW9kZSwgZGF0YVR5cGUpPy5bMl0gPz8gTWVkaXVzRmlsdGVyTWF0Y2hUeXBlLkVxdWFscztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWFwcGluZyhtYXRjaE1vZGU6IHN0cmluZywgZGF0YVR5cGU/OiBGaWx0ZXJUeXBlRW51bSwgaWR4ID0gMCk6IE1hdGNoTW9kZU1hcFR5cGUgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbWFwcGluZ3MgPSB0aGlzLm1hdGNoTW9kZU1hcHBpbmcuZmlsdGVyKG0gPT4gbVtpZHhdID09PSBtYXRjaE1vZGUgJiYgKCFkYXRhVHlwZSB8fCAhbVszXSB8fCBkYXRhVHlwZSA9PT0gbVszXSkpO1xuICAgICAgICBpZiAobWFwcGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChtYXBwaW5ncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBwaW5nc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBwaW5ncy5zb3J0KChtMSwgbTIpID0+IChtMlszXSA/PyAtMSkgLSAobTFbM10gPz8gLTEpKVswXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -4,7 +4,7 @@ export class ObjectSerializer {
4
4
  constructor() {
5
5
  this._logCategory = 'ObjectSerializer';
6
6
  this._primitives = ['string', 'boolean', 'double', 'integer', 'long', 'float', 'number', 'any'];
7
- this.dateTimeInUtc = true;
7
+ this.dateTimeInUtc = false;
8
8
  this.dateTimeWithTimezone = true;
9
9
  this.dateTimeWithMillis = true;
10
10
  }
@@ -96,8 +96,12 @@ export class ObjectSerializer {
96
96
  return transformedData;
97
97
  }
98
98
  else if (typeName === 'Date') {
99
- const dateOnly = subtype === 'date';
100
- return DateUtil.toIsoString(data, this.dateTimeInUtc, this.dateTimeWithTimezone, this.dateTimeWithMillis, dateOnly);
99
+ const dateOnly = subtype?.toLowerCase() === 'date';
100
+ return DateUtil.toIsoString(data, dateOnly ? 'date' : 'date-time', {
101
+ utc: this.dateTimeInUtc,
102
+ noTimezone: !this.dateTimeWithTimezone,
103
+ noMillis: !this.dateTimeWithMillis
104
+ });
101
105
  }
102
106
  else if (typeName) {
103
107
  const enumType = TypeRegistry.get().findEnum(typeName);
@@ -178,4 +182,4 @@ export class ObjectSerializer {
178
182
  }
179
183
  }
180
184
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlcmlhbGl6ZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL29iamVjdC1zZXJpYWxpemVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRTFELE9BQU8sRUFBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUVxQixpQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLGdCQUFXLEdBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUcsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLElBQUksQ0FBQztJQTZLdEMsQ0FBQzthQW5Ma0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixFQUFFLEFBQTNDLENBQTRDO0lBUXBFLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEdBQUc7UUFDYixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQStGO1FBQzVHLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUM7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QUNoRSxJQUFJLFFBQVEsRUFBRTtnQkFDVixVQUFVO2dCQUNWLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDaEIscUJBQXFCO2dCQUNyQixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsbUJBQW1CLEVBQThCLENBQUM7WUFDdkYseUNBQXlDO1lBQ3pDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4RCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRztZQUNELE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1R5cGVSZWdpc3RyeX0gZnJvbSAnLi4vLi4vcmVnaXN0cnkvdHlwZS5yZWdpc3RyeSc7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbCwgRGVjb3JhdG9yTWV0YWRhdGFVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RTZXJpYWxpemVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IE9iamVjdFNlcmlhbGl6ZXIgPSBuZXcgT2JqZWN0U2VyaWFsaXplcigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvZ0NhdGVnb3J5ID0gJ09iamVjdFNlcmlhbGl6ZXInO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByaW1pdGl2ZXM6IHN0cmluZ1tdID0gWydzdHJpbmcnLCAnYm9vbGVhbicsICdkb3VibGUnLCAnaW50ZWdlcicsICdsb25nJywgJ2Zsb2F0JywgJ251bWJlcicsICdhbnknXTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVJblV0YyA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhUaW1lem9uZSA9IHRydWU7XG4gICAgcHJpdmF0ZSBkYXRlVGltZVdpdGhNaWxsaXMgPSB0cnVlO1xuXG4gICAgcHVibGljIGdldCBwcmltaXRpdmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbWl0aXZlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IHVzZSBvbmUgaW5zdGFuY2Ugb2Ygb2JqZWN0IChvdXQgb2YgQW5ndWxhciBjb250ZXh0KVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0KCk6IE9iamVjdFNlcmlhbGl6ZXIge1xuICAgICAgICByZXR1cm4gT2JqZWN0U2VyaWFsaXplci5faW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZShjb25maWc6IHtkYXRlVGltZUluVXRjPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoVGltZXpvbmU/OiBib29sZWFuOyBkYXRlVGltZVdpdGhNaWxsaXM/OiBib29sZWFufSk6IHZvaWQge1xuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lSW5VdGMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUluVXRjID0gY29uZmlnLmRhdGVUaW1lSW5VdGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lID0gY29uZmlnLmRhdGVUaW1lV2l0aFRpbWV6b25lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoTWlsbGlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzID0gY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kQ29ycmVjdFR5cGUoZGF0YTogYW55LCBleHBlY3RlZFR5cGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZihleHBlY3RlZFR5cGVOYW1lLnRvTG93ZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlTmFtZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlTmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKGV4cGVjdGVkVHlwZU5hbWUpO1xuICAgICAgICAgICAgaWYgKGVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZU5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBUeXBlUmVnaXN0cnkuZ2V0KCkuZmluZFR5cGUoZXhwZWN0ZWRUeXBlTmFtZSk7XG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlTmFtZTsgLy8gdy9lIHdlIGRvbid0IGtub3cgdGhlIHR5cGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JQcm9wZXJ0eSA9IHR5cGUuZGlzY3JpbWluYXRvcjtcbiAgICAgICAgICAgIGlmIChkaXNjcmltaW5hdG9yUHJvcGVydHkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lOyAvLyB0aGUgdHlwZSBkb2VzIG5vdCBoYXZlIGEgZGlzY3JpbWluYXRvci4gdXNlIGl0LlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JUeXBlID0gZGF0YVtkaXNjcmltaW5hdG9yUHJvcGVydHldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRUeXBlKGV4cGVjdGVkVHlwZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2NyaW1pbmF0b3JUeXBlOyAvLyB1c2UgdGhlIHR5cGUgZ2l2ZW4gaW4gdGhlIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lOyAvLyBkaXNjcmltaW5hdG9yIGRpZCBub3QgbWFwIHRvIGEgdHlwZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZU5hbWU7IC8vIGRpc2NyaW1pbmF0b3Igd2FzIG5vdCBwcmVzZW50IChvciBhbiBlbXB0eSBzdHJpbmcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlcmlhbGl6ZUNsYXNzPFQ+KGRhdGE6IFQsIHR5cGU6IENsYXNzVHlwZTxUPikge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoZGF0YSwgRGVjb3JhdG9yTWV0YWRhdGFVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKSA/PyB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemVDbGFzc0FycmF5PFQ+KGRhdGE6IEFycmF5PFQ+LCB0eXBlOiBDbGFzc1R5cGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKGRhdGEsIGBBcnJheTwke0RlY29yYXRvck1ldGFkYXRhVXRpbC5maW5kVHlwZU5hbWUodHlwZSl9PmApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemUoZGF0YTogYW55LCB0eXBlTmFtZT86IHN0cmluZywgc3VidHlwZT86IHN0cmluZykge1xuICAgICAgICBpZiAoZGF0YSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVOYW1lICYmIHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZih0eXBlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVOYW1lICYmIHR5cGVOYW1lLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IHR5cGVOYW1lLnJlcGxhY2UoJ0FycmF5PCcsICcnKTsgLy8gQXJyYXk8VHlwZT4gPT4gVHlwZT5cbiAgICAgICAgICAgIHN1YlR5cGUgPSBzdWJUeXBlLnN1YnN0cmluZygwLCBzdWJUeXBlLmxlbmd0aCAtIDEpOyAvLyBUeXBlPiA9PiBUeXBlXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGE6IGFueVtdID0gW107XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0dW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZERhdGEucHVzaCh0aGlzLnNlcmlhbGl6ZShkYXR1bSwgc3ViVHlwZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlTmFtZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlT25seSA9IHN1YnR5cGUgPT09ICdkYXRlJztcbiAgICAgICAgICAgIHJldHVybiBEYXRlVXRpbC50b0lzb1N0cmluZyhkYXRhLCB0aGlzLmRhdGVUaW1lSW5VdGMsIHRoaXMuZGF0ZVRpbWVXaXRoVGltZXpvbmUsIHRoaXMuZGF0ZVRpbWVXaXRoTWlsbGlzLCBkYXRlT25seSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIGlmIChlbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRUeXBlKHR5cGVOYW1lKTtcbiAgICAgICAgICAgIGlmICghdHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugd2UgZG9udCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIHR5cGUgb2YgdGhpcyBvYmplY3RcbiAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RlZFR5cGVOYW1lID0gdGhpcy5maW5kQ29ycmVjdFR5cGUoZGF0YSwgdHlwZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY29ycmVjdGVkVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShjb3JyZWN0ZWRUeXBlTmFtZSk7XG5cbiAgICAgICAgICAgIC8vIGdldCB0aGUgbWFwIGZvciB0aGUgY29ycmVjdCB0eXBlLlxuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVHlwZXMgPSBjb3JyZWN0ZWRUeXBlLmdldEF0dHJpYnV0ZVR5cGVNYXAoKSBhcyBBcnJheTxDbGFzc0F0dHJpYnV0ZURlZj47XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZToge1tpbmRleDogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUuYmFzZU5hbWVdID0gdGhpcy5zZXJpYWxpemUoZGF0YVthdHRyaWJ1dGVUeXBlLm5hbWVdLCBhdHRyaWJ1dGVUeXBlLnR5cGUsIGF0dHJpYnV0ZVR5cGUuc3VidHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlcmlhbGl6ZUNsYXNzPFQ+KGRhdGE6IGFueSwgdHlwZTogQ2xhc3NUeXBlPFQ+KTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGRhdGEsIERlY29yYXRvck1ldGFkYXRhVXRpbC5maW5kVHlwZU5hbWUodHlwZSkgPz8gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemVDbGFzc0FycmF5PFQ+KGRhdGE6IGFueSwgdHlwZTogQ2xhc3NUeXBlPFQ+KTogQXJyYXk8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNlcmlhbGl6ZShkYXRhLCBgQXJyYXk8JHtEZWNvcmF0b3JNZXRhZGF0YVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpfT5gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemUoZGF0YTogYW55LCB0eXBlPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIHBvbHltb3JwaGlzbSBtYXkgY2hhbmdlIHRoZSBhY3R1YWwgdHlwZS5cbiAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkIHx8ICF0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvcnJlY3RlZFR5cGVOYW1lID0gdGhpcy5maW5kQ29ycmVjdFR5cGUoZGF0YSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ByaW1pdGl2ZXMuaW5kZXhPZihjb3JyZWN0ZWRUeXBlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKGNvcnJlY3RlZFR5cGVOYW1lLmxhc3RJbmRleE9mKCdBcnJheTwnLCAwKSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gc3RyaW5nLnN0YXJ0c1dpdGggcHJlIGVzNlxuICAgICAgICAgICAgbGV0IHN1YlR5cGU6IHN0cmluZyA9IGNvcnJlY3RlZFR5cGVOYW1lLnJlcGxhY2UoJ0FycmF5PCcsICcnKTsgLy8gQXJyYXk8VHlwZT4gPT4gVHlwZT5cbiAgICAgICAgICAgIHN1YlR5cGUgPSBzdWJUeXBlLnN1YnN0cmluZygwLCBzdWJUeXBlLmxlbmd0aCAtIDEpOyAvLyBUeXBlPiA9PiBUeXBlXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGE6IGFueVtdID0gW107XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0dW0gPSBkYXRhW2luZGV4XTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZERhdGEucHVzaCh0aGlzLmRlc2VyaWFsaXplKGRhdHVtLCBzdWJUeXBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICB9IGVsc2UgaWYgKGNvcnJlY3RlZFR5cGVOYW1lID09PSAnRGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKGNvcnJlY3RlZFR5cGVOYW1lKTtcbiAgICAgICAgICAgIGlmIChlbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgIC8vIGlzIEVudW1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29ycmVjdGVkVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShjb3JyZWN0ZWRUeXBlTmFtZSk7XG4gICAgICAgICAgICBpZiAoIWNvcnJlY3RlZFR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBkb250IGtub3cgdGhlIHR5cGVcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGNvcnJlY3RlZFR5cGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGVzID0gY29ycmVjdGVkVHlwZS5nZXRBdHRyaWJ1dGVUeXBlTWFwKCkgYXMgQXJyYXk8Q2xhc3NBdHRyaWJ1dGVEZWY+O1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhdHRyaWJ1dGVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlID0gYXR0cmlidXRlVHlwZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2F0dHJpYnV0ZVR5cGUubmFtZV0gPSB0aGlzLmRlc2VyaWFsaXplKGRhdGFbYXR0cmlidXRlVHlwZS5iYXNlTmFtZV0sIGF0dHJpYnV0ZVR5cGUudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXNlcmlhbGl6ZXIudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXBpL3V0aWxzL29iamVjdC1zZXJpYWxpemVyLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRTFELE9BQU8sRUFBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUVxQixpQkFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLGdCQUFXLEdBQWEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFOUcsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLHVCQUFrQixHQUFHLElBQUksQ0FBQztJQWlMdEMsQ0FBQzthQXZMa0IsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixFQUFFLEFBQTNDLENBQTRDO0lBUXBFLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEdBQUc7UUFDYixPQUFPLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sU0FBUyxDQUFDLE1BQStGO1FBQzVHLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEtBQUssU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUM7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SSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekI7YUFBTTtZQUNILE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNoRSxJQUFJLFFBQVEsRUFBRTtnQkFDVixVQUFVO2dCQUNWLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDaEIscUJBQXFCO2dCQUNyQixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsbUJBQW1CLEVBQThCLENBQUM7WUFDdkYseUNBQXlDO1lBQ3pDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4RCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyRztZQUNELE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2xhc3NBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1R5cGVSZWdpc3RyeX0gZnJvbSAnLi4vLi4vcmVnaXN0cnkvdHlwZS5yZWdpc3RyeSc7XG5pbXBvcnQge0NsYXNzVHlwZX0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtEYXRlVXRpbCwgRGVjb3JhdG9yTWV0YWRhdGFVdGlsfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RTZXJpYWxpemVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IE9iamVjdFNlcmlhbGl6ZXIgPSBuZXcgT2JqZWN0U2VyaWFsaXplcigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2xvZ0NhdGVnb3J5ID0gJ09iamVjdFNlcmlhbGl6ZXInO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByaW1pdGl2ZXM6IHN0cmluZ1tdID0gWydzdHJpbmcnLCAnYm9vbGVhbicsICdkb3VibGUnLCAnaW50ZWdlcicsICdsb25nJywgJ2Zsb2F0JywgJ251bWJlcicsICdhbnknXTtcblxuICAgIHByaXZhdGUgZGF0ZVRpbWVJblV0YyA9IGZhbHNlO1xuICAgIHByaXZhdGUgZGF0ZVRpbWVXaXRoVGltZXpvbmUgPSB0cnVlO1xuICAgIHByaXZhdGUgZGF0ZVRpbWVXaXRoTWlsbGlzID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBnZXQgcHJpbWl0aXZlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW1pdGl2ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT25seSB1c2Ugb25lIGluc3RhbmNlIG9mIG9iamVjdCAob3V0IG9mIEFuZ3VsYXIgY29udGV4dClcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldCgpOiBPYmplY3RTZXJpYWxpemVyIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdFNlcmlhbGl6ZXIuX2luc3RhbmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmUoY29uZmlnOiB7ZGF0ZVRpbWVJblV0Yz86IGJvb2xlYW47IGRhdGVUaW1lV2l0aFRpbWV6b25lPzogYm9vbGVhbjsgZGF0ZVRpbWVXaXRoTWlsbGlzPzogYm9vbGVhbn0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbmZpZy5kYXRlVGltZUluVXRjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJblV0YyA9IGNvbmZpZy5kYXRlVGltZUluVXRjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuZGF0ZVRpbWVXaXRoVGltZXpvbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZVdpdGhUaW1lem9uZSA9IGNvbmZpZy5kYXRlVGltZVdpdGhUaW1lem9uZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmRhdGVUaW1lV2l0aE1pbGxpcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lV2l0aE1pbGxpcyA9IGNvbmZpZy5kYXRlVGltZVdpdGhNaWxsaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZENvcnJlY3RUeXBlKGRhdGE6IGFueSwgZXhwZWN0ZWRUeXBlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlTmFtZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9wcmltaXRpdmVzLmluZGV4T2YoZXhwZWN0ZWRUeXBlTmFtZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZU5hbWUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZU5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnVtVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kRW51bShleHBlY3RlZFR5cGVOYW1lKTtcbiAgICAgICAgICAgIGlmIChlbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRUeXBlKGV4cGVjdGVkVHlwZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkVHlwZU5hbWU7IC8vIHcvZSB3ZSBkb24ndCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHRoZSBkaXNjcmltaW5hdG9yXG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yUHJvcGVydHkgPSB0eXBlLmRpc2NyaW1pbmF0b3I7XG4gICAgICAgICAgICBpZiAoZGlzY3JpbWluYXRvclByb3BlcnR5ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlTmFtZTsgLy8gdGhlIHR5cGUgZG9lcyBub3QgaGF2ZSBhIGRpc2NyaW1pbmF0b3IuIHVzZSBpdC5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFbZGlzY3JpbWluYXRvclByb3BlcnR5XSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVHlwZSA9IGRhdGFbZGlzY3JpbWluYXRvclByb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZShleHBlY3RlZFR5cGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXNjcmltaW5hdG9yVHlwZTsgLy8gdXNlIHRoZSB0eXBlIGdpdmVuIGluIHRoZSBkaXNjcmltaW5hdG9yXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWRUeXBlTmFtZTsgLy8gZGlzY3JpbWluYXRvciBkaWQgbm90IG1hcCB0byBhIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZFR5cGVOYW1lOyAvLyBkaXNjcmltaW5hdG9yIHdhcyBub3QgcHJlc2VudCAob3IgYW4gZW1wdHkgc3RyaW5nKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXJpYWxpemVDbGFzczxUPihkYXRhOiBULCB0eXBlOiBDbGFzc1R5cGU8VD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKGRhdGEsIERlY29yYXRvck1ldGFkYXRhVXRpbC5maW5kVHlwZU5hbWUodHlwZSkgPz8gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VyaWFsaXplQ2xhc3NBcnJheTxUPihkYXRhOiBBcnJheTxUPiwgdHlwZTogQ2xhc3NUeXBlPFQ+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZShkYXRhLCBgQXJyYXk8JHtEZWNvcmF0b3JNZXRhZGF0YVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpfT5gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VyaWFsaXplKGRhdGE6IGFueSwgdHlwZU5hbWU/OiBzdHJpbmcsIHN1YnR5cGU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlTmFtZSAmJiB0aGlzLl9wcmltaXRpdmVzLmluZGV4T2YodHlwZU5hbWUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlTmFtZSAmJiB0eXBlTmFtZS5sYXN0SW5kZXhPZignQXJyYXk8JywgMCkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIHN0cmluZy5zdGFydHNXaXRoIHByZSBlczZcbiAgICAgICAgICAgIGxldCBzdWJUeXBlOiBzdHJpbmcgPSB0eXBlTmFtZS5yZXBsYWNlKCdBcnJheTwnLCAnJyk7IC8vIEFycmF5PFR5cGU+ID0+IFR5cGU+XG4gICAgICAgICAgICBzdWJUeXBlID0gc3ViVHlwZS5zdWJzdHJpbmcoMCwgc3ViVHlwZS5sZW5ndGggLSAxKTsgLy8gVHlwZT4gPT4gVHlwZVxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdHVtID0gZGF0YVtpbmRleF07XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWREYXRhLnB1c2godGhpcy5zZXJpYWxpemUoZGF0dW0sIHN1YlR5cGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZU5hbWUgPT09ICdEYXRlJykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHkgPSBzdWJ0eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnZGF0ZSc7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZVV0aWwudG9Jc29TdHJpbmcoZGF0YSwgZGF0ZU9ubHkgPyAnZGF0ZScgOiAnZGF0ZS10aW1lJywge1xuICAgICAgICAgICAgICAgIHV0YzogdGhpcy5kYXRlVGltZUluVXRjLFxuICAgICAgICAgICAgICAgIG5vVGltZXpvbmU6ICF0aGlzLmRhdGVUaW1lV2l0aFRpbWV6b25lLFxuICAgICAgICAgICAgICAgIG5vTWlsbGlzOiAhdGhpcy5kYXRlVGltZVdpdGhNaWxsaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBlbnVtVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kRW51bSh0eXBlTmFtZSk7XG4gICAgICAgICAgICBpZiAoZW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kVHlwZSh0eXBlTmFtZSk7XG4gICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHdlIGRvbnQga25vdyB0aGUgdHlwZVxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCB0eXBlIG9mIHRoaXMgb2JqZWN0XG4gICAgICAgICAgICBjb25zdCBjb3JyZWN0ZWRUeXBlTmFtZSA9IHRoaXMuZmluZENvcnJlY3RUeXBlKGRhdGEsIHR5cGVOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RlZFR5cGUgPSBUeXBlUmVnaXN0cnkuZ2V0KCkuZmluZFR5cGUoY29ycmVjdGVkVHlwZU5hbWUpO1xuXG4gICAgICAgICAgICAvLyBnZXQgdGhlIG1hcCBmb3IgdGhlIGNvcnJlY3QgdHlwZS5cbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVR5cGVzID0gY29ycmVjdGVkVHlwZS5nZXRBdHRyaWJ1dGVUeXBlTWFwKCkgYXMgQXJyYXk8Q2xhc3NBdHRyaWJ1dGVEZWY+O1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2U6IHtbaW5kZXg6IHN0cmluZ106IGFueX0gPSB7fTtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXR0cmlidXRlVHlwZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVHlwZSA9IGF0dHJpYnV0ZVR5cGVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVthdHRyaWJ1dGVUeXBlLmJhc2VOYW1lXSA9IHRoaXMuc2VyaWFsaXplKGRhdGFbYXR0cmlidXRlVHlwZS5uYW1lXSwgYXR0cmlidXRlVHlwZS50eXBlLCBhdHRyaWJ1dGVUeXBlLnN1YnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZXJpYWxpemVDbGFzczxUPihkYXRhOiBhbnksIHR5cGU6IENsYXNzVHlwZTxUPik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNlcmlhbGl6ZShkYXRhLCBEZWNvcmF0b3JNZXRhZGF0YVV0aWwuZmluZFR5cGVOYW1lKHR5cGUpID8/IHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VyaWFsaXplQ2xhc3NBcnJheTxUPihkYXRhOiBhbnksIHR5cGU6IENsYXNzVHlwZTxUPik6IEFycmF5PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzZXJpYWxpemUoZGF0YSwgYEFycmF5PCR7RGVjb3JhdG9yTWV0YWRhdGFVdGlsLmZpbmRUeXBlTmFtZSh0eXBlKX0+YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VyaWFsaXplKGRhdGE6IGFueSwgdHlwZT86IHN0cmluZykge1xuICAgICAgICAvLyBwb2x5bW9ycGhpc20gbWF5IGNoYW5nZSB0aGUgYWN0dWFsIHR5cGUuXG4gICAgICAgIGlmIChkYXRhID09IHVuZGVmaW5lZCB8fCAhdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3JyZWN0ZWRUeXBlTmFtZSA9IHRoaXMuZmluZENvcnJlY3RUeXBlKGRhdGEsIHR5cGUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9wcmltaXRpdmVzLmluZGV4T2YoY29ycmVjdGVkVHlwZU5hbWUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBlbHNlIGlmIChjb3JyZWN0ZWRUeXBlTmFtZS5sYXN0SW5kZXhPZignQXJyYXk8JywgMCkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIHN0cmluZy5zdGFydHNXaXRoIHByZSBlczZcbiAgICAgICAgICAgIGxldCBzdWJUeXBlOiBzdHJpbmcgPSBjb3JyZWN0ZWRUeXBlTmFtZS5yZXBsYWNlKCdBcnJheTwnLCAnJyk7IC8vIEFycmF5PFR5cGU+ID0+IFR5cGU+XG4gICAgICAgICAgICBzdWJUeXBlID0gc3ViVHlwZS5zdWJzdHJpbmcoMCwgc3ViVHlwZS5sZW5ndGggLSAxKTsgLy8gVHlwZT4gPT4gVHlwZVxuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdHVtID0gZGF0YVtpbmRleF07XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWREYXRhLnB1c2godGhpcy5kZXNlcmlhbGl6ZShkYXR1bSwgc3ViVHlwZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YTtcbiAgICAgICAgfSBlbHNlIGlmIChjb3JyZWN0ZWRUeXBlTmFtZSA9PT0gJ0RhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnVtVHlwZSA9IFR5cGVSZWdpc3RyeS5nZXQoKS5maW5kRW51bShjb3JyZWN0ZWRUeXBlTmFtZSk7XG4gICAgICAgICAgICBpZiAoZW51bVR5cGUpIHtcbiAgICAgICAgICAgICAgICAvLyBpcyBFbnVtXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RlZFR5cGUgPSBUeXBlUmVnaXN0cnkuZ2V0KCkuZmluZFR5cGUoY29ycmVjdGVkVHlwZU5hbWUpO1xuICAgICAgICAgICAgaWYgKCFjb3JyZWN0ZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gZG9udCBrbm93IHRoZSB0eXBlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBjb3JyZWN0ZWRUeXBlKCk7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVUeXBlcyA9IGNvcnJlY3RlZFR5cGUuZ2V0QXR0cmlidXRlVHlwZU1hcCgpIGFzIEFycmF5PENsYXNzQXR0cmlidXRlRGVmPjtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXR0cmlidXRlVHlwZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVHlwZSA9IGF0dHJpYnV0ZVR5cGVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVthdHRyaWJ1dGVUeXBlLm5hbWVdID0gdGhpcy5kZXNlcmlhbGl6ZShkYXRhW2F0dHJpYnV0ZVR5cGUuYmFzZU5hbWVdLCBhdHRyaWJ1dGVUeXBlLnR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19