@mediusinc/mng-commons 4.1.0 → 5.0.0-rc.0-c31d5206

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 (251) hide show
  1. package/assets/i18n/en.json +13 -66
  2. package/assets/i18n/sl.json +12 -67
  3. package/data-api/README.md +3 -0
  4. package/data-api/class-dto/README.md +3 -0
  5. package/data-api/class-dto/helpers/tableview-crud-create.d.ts +40 -0
  6. package/data-api/class-dto/index.d.ts +7 -0
  7. package/data-api/class-dto/models/query-result.model.d.ts +13 -0
  8. package/data-api/class-dto/obsolete/README.md +3 -0
  9. package/data-api/class-dto/obsolete/helpers/query-param-convert.d.ts +23 -0
  10. package/data-api/class-dto/obsolete/helpers/tableview-crud-create.d.ts +22 -0
  11. package/data-api/class-dto/obsolete/index.d.ts +14 -0
  12. package/data-api/class-dto/obsolete/models/builders/query-param.builder.d.ts +36 -0
  13. package/{lib/api → data-api/class-dto/obsolete}/models/filter-param.model.d.ts +1 -1
  14. package/{lib/api → data-api/class-dto/obsolete}/models/query-param.model.d.ts +1 -1
  15. package/{lib/api → data-api/class-dto/obsolete}/models/query-result.model.d.ts +1 -1
  16. package/data-api/class-dto/obsolete/provide.d.ts +9 -0
  17. package/data-api/class-dto/obsolete/services/api.abstract.service.d.ts +36 -0
  18. package/{lib/api → data-api/class-dto/obsolete}/services/crud-api.abstract.service.d.ts +20 -5
  19. package/data-api/class-dto/obsolete/services/get-all-api.abstract.service.d.ts +30 -0
  20. package/data-api/class-dto/obsolete/tableview/tableview-crud.data-provider.d.ts +28 -0
  21. package/data-api/class-dto/obsolete/utils/query-param-map.util.d.ts +22 -0
  22. package/{lib/api/utils/object-serializer.util.d.ts → data-api/class-dto/serder/object-serializer.d.ts} +1 -1
  23. package/{lib/api → data-api/class-dto}/services/api.abstract.service.d.ts +2 -4
  24. package/data-api/class-dto/services/crud-api.abstract.service.d.ts +25 -0
  25. package/data-api/class-dto/services/get-all-api.abstract.service.d.ts +14 -0
  26. package/data-api/class-dto/tableview/tableview-crud.data-provider.d.ts +17 -0
  27. package/data-api/helpers/get-all-params.d.ts +69 -0
  28. package/data-api/helpers/tableview-get-all-params-create.d.ts +14 -0
  29. package/data-api/index.d.ts +5 -0
  30. package/data-api/models/request-params.model.d.ts +61 -0
  31. package/data-api/rxjs/map-to-data-list.operator.d.ts +9 -0
  32. package/data-api/types/extract-get-all-params.type.d.ts +14 -0
  33. package/esm2022/data-api/class-dto/helpers/tableview-crud-create.mjs +40 -0
  34. package/esm2022/data-api/class-dto/index.mjs +13 -0
  35. package/esm2022/data-api/class-dto/mediusinc-mng-commons-data-api-class-dto.mjs +5 -0
  36. package/esm2022/data-api/class-dto/models/query-result.model.mjs +24 -0
  37. package/esm2022/data-api/class-dto/obsolete/helpers/query-param-convert.mjs +103 -0
  38. package/esm2022/data-api/class-dto/obsolete/helpers/tableview-crud-create.mjs +21 -0
  39. package/esm2022/data-api/class-dto/obsolete/index.mjs +21 -0
  40. package/esm2022/data-api/class-dto/obsolete/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs +5 -0
  41. package/esm2022/data-api/class-dto/obsolete/models/builders/query-param.builder.mjs +83 -0
  42. package/esm2022/data-api/class-dto/obsolete/models/filter-match-type.model.mjs +27 -0
  43. package/esm2022/data-api/class-dto/obsolete/models/filter-param.model.mjs +33 -0
  44. package/esm2022/data-api/class-dto/obsolete/models/query-mode.model.mjs +18 -0
  45. package/esm2022/data-api/class-dto/obsolete/models/query-param.model.mjs +68 -0
  46. package/esm2022/data-api/class-dto/obsolete/models/query-result.model.mjs +24 -0
  47. package/esm2022/data-api/class-dto/obsolete/provide.mjs +40 -0
  48. package/esm2022/data-api/class-dto/obsolete/services/api.abstract.service.mjs +70 -0
  49. package/esm2022/data-api/class-dto/obsolete/services/crud-api.abstract.service.mjs +83 -0
  50. package/esm2022/data-api/class-dto/obsolete/services/get-all-api.abstract.service.mjs +38 -0
  51. package/esm2022/data-api/class-dto/obsolete/tableview/tableview-crud.data-provider.mjs +51 -0
  52. package/esm2022/data-api/class-dto/obsolete/utils/query-param-map.util.mjs +57 -0
  53. package/esm2022/data-api/class-dto/serder/object-serializer.mjs +184 -0
  54. package/esm2022/data-api/class-dto/services/api.abstract.service.mjs +55 -0
  55. package/esm2022/data-api/class-dto/services/crud-api.abstract.service.mjs +82 -0
  56. package/esm2022/data-api/class-dto/services/get-all-api.abstract.service.mjs +49 -0
  57. package/esm2022/data-api/class-dto/tableview/tableview-crud.data-provider.mjs +49 -0
  58. package/esm2022/data-api/helpers/get-all-params.mjs +180 -0
  59. package/esm2022/data-api/helpers/tableview-get-all-params-create.mjs +18 -0
  60. package/esm2022/data-api/index.mjs +10 -0
  61. package/esm2022/data-api/mediusinc-mng-commons-data-api.mjs +5 -0
  62. package/esm2022/data-api/models/request-params.model.mjs +2 -0
  63. package/esm2022/data-api/rxjs/map-to-data-list.operator.mjs +19 -0
  64. package/esm2022/data-api/types/extract-get-all-params.type.mjs +2 -0
  65. package/esm2022/index.mjs +3 -6
  66. package/esm2022/lib/components/action/action.component.mjs +4 -5
  67. package/esm2022/lib/components/action/editor/injector-context/action-editor-injector-context.component.mjs +2 -2
  68. package/esm2022/lib/components/action/models/action-execution.model.mjs +5 -4
  69. package/esm2022/lib/components/action/route/action-route.component.mjs +1 -2
  70. package/esm2022/lib/components/action/table/action-table.component.mjs +4 -6
  71. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +29 -17
  72. package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +3 -7
  73. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +20 -18
  74. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +2 -2
  75. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +23 -12
  76. package/esm2022/lib/components/table/column-filter-full/column-filter-full.component.mjs +162 -33
  77. package/esm2022/lib/components/table/column-value/column-value.component.mjs +3 -3
  78. package/esm2022/lib/components/table/models/table.event.mjs +1 -1
  79. package/esm2022/lib/components/table/models/table.interface.mjs +1 -1
  80. package/esm2022/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.mjs +4 -4
  81. package/esm2022/lib/components/table/table.component.mjs +117 -191
  82. package/esm2022/lib/components/tableview/actions/tableview-default-actions.mjs +215 -0
  83. package/esm2022/lib/components/tableview/builders/tableview-builder.mjs +162 -0
  84. package/esm2022/lib/components/tableview/helpers/tableview-create.mjs +24 -0
  85. package/esm2022/lib/components/tableview/index.mjs +5 -2
  86. package/esm2022/lib/components/tableview/models/tableview.model.mjs +2 -0
  87. package/esm2022/lib/components/tableview/route/tableview-route.component.mjs +7 -39
  88. package/esm2022/lib/components/tableview/tableview.component.mjs +4 -4
  89. package/esm2022/lib/data-providers/editor.data-provider.mjs +13 -13
  90. package/esm2022/lib/data-providers/index.mjs +1 -2
  91. package/esm2022/lib/data-providers/lookup.data-provider.mjs +1 -1
  92. package/esm2022/lib/data-providers/table.data-provider.mjs +4 -5
  93. package/esm2022/lib/data-providers/tableview.data-provider.mjs +1 -1
  94. package/esm2022/lib/descriptors/action/action-confirmation.descriptor.mjs +1 -1
  95. package/esm2022/lib/descriptors/action/action-editor.descriptor.mjs +10 -6
  96. package/esm2022/lib/descriptors/action/action.descriptor.mjs +2 -3
  97. package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +13 -17
  98. package/esm2022/lib/descriptors/editor/field-lookup.descriptor.mjs +12 -17
  99. package/esm2022/lib/descriptors/editor/field.descriptor.mjs +5 -8
  100. package/esm2022/lib/descriptors/editor/internal/editor-fields.model.mjs +1 -1
  101. package/esm2022/lib/descriptors/filter/filter-lookup.descriptor.mjs +28 -52
  102. package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +40 -23
  103. package/esm2022/lib/descriptors/model/enum.descriptor.mjs +31 -0
  104. package/esm2022/lib/descriptors/model/index.mjs +3 -1
  105. package/esm2022/lib/descriptors/model/model.descriptor.mjs +10 -1
  106. package/esm2022/lib/descriptors/model/type.descriptor.mjs +11 -0
  107. package/esm2022/lib/descriptors/table/column.descriptor.mjs +12 -107
  108. package/esm2022/lib/descriptors/table/index.mjs +2 -1
  109. package/esm2022/lib/descriptors/table/internal/table-columns.model.mjs +1 -1
  110. package/esm2022/lib/descriptors/table/internal/table.model.mjs +1 -1
  111. package/esm2022/lib/descriptors/table/sort.descriptor.mjs +45 -0
  112. package/esm2022/lib/descriptors/table/table.descriptor.mjs +208 -57
  113. package/esm2022/lib/descriptors/tableview/internal/tableview.model.mjs +1 -1
  114. package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +114 -17
  115. package/esm2022/lib/descriptors/types/filter.type.mjs +1 -19
  116. package/esm2022/lib/descriptors/types/table.type.mjs +1 -5
  117. package/esm2022/lib/error/error.handler.mjs +1 -1
  118. package/esm2022/lib/helpers/data-provider-executors.mjs +80 -0
  119. package/esm2022/lib/models/data-list.model.mjs +2 -0
  120. package/esm2022/lib/models/filter-match.model.mjs +105 -0
  121. package/esm2022/lib/models/index.mjs +3 -1
  122. package/esm2022/lib/models/view-container.model.mjs +1 -1
  123. package/esm2022/lib/pipes/enum.pipe.mjs +6 -6
  124. package/esm2022/lib/provide.mjs +101 -0
  125. package/esm2022/lib/registry/type.registry.mjs +3 -10
  126. package/esm2022/lib/router/models/router.model.mjs +1 -1
  127. package/esm2022/lib/router/tableview-route-builder.mjs +1 -1
  128. package/esm2022/lib/services/action/action-executor.service.mjs +54 -32
  129. package/esm2022/lib/services/commons.service.mjs +1 -37
  130. package/esm2022/lib/services/data-provider-executor.service.mjs +52 -0
  131. package/esm2022/lib/services/index.mjs +2 -1
  132. package/esm2022/lib/services/view/view-container.service.mjs +1 -1
  133. package/esm2022/lib/types/action-descriptor.types.mjs +1 -1
  134. package/esm2022/lib/types/type.model.mjs +1 -1
  135. package/esm2022/lib/utils/data-list-params.util.mjs +416 -0
  136. package/esm2022/lib/utils/date.util.mjs +8 -2
  137. package/esm2022/lib/utils/enum.util.mjs +2 -1
  138. package/esm2022/lib/utils/error.util.mjs +3 -3
  139. package/esm2022/lib/utils/export.util.mjs +1 -1
  140. package/esm2022/lib/utils/index.mjs +2 -2
  141. package/esm2022/lib/utils/route.util.mjs +1 -2
  142. package/fesm2022/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs +698 -0
  143. package/fesm2022/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs.map +1 -0
  144. package/fesm2022/mediusinc-mng-commons-data-api-class-dto.mjs +480 -0
  145. package/fesm2022/mediusinc-mng-commons-data-api-class-dto.mjs.map +1 -0
  146. package/fesm2022/mediusinc-mng-commons-data-api.mjs +224 -0
  147. package/fesm2022/mediusinc-mng-commons-data-api.mjs.map +1 -0
  148. package/fesm2022/mediusinc-mng-commons.mjs +2634 -2549
  149. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  150. package/index.d.ts +2 -4
  151. package/lib/components/action/action.component.d.ts +13 -13
  152. package/lib/components/action/models/action-execution.model.d.ts +47 -46
  153. package/lib/components/action/table/action-table.component.d.ts +15 -16
  154. package/lib/components/form/autocomplete/autocomplete.component.d.ts +1 -1
  155. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +3 -5
  156. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +10 -10
  157. package/lib/components/table/column-filter-full/column-filter-full.component.d.ts +25 -9
  158. package/lib/components/table/models/table.event.d.ts +2 -2
  159. package/lib/components/table/models/table.interface.d.ts +4 -1
  160. package/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.d.ts +2 -2
  161. package/lib/components/table/table.component.d.ts +19 -18
  162. package/lib/components/tableview/actions/tableview-default-actions.d.ts +36 -0
  163. package/lib/components/tableview/builders/tableview-builder.d.ts +115 -0
  164. package/lib/components/tableview/helpers/tableview-create.d.ts +16 -0
  165. package/lib/components/tableview/index.d.ts +4 -1
  166. package/lib/components/tableview/models/tableview.model.d.ts +8 -0
  167. package/lib/components/tableview/route/tableview-route.component.d.ts +5 -14
  168. package/lib/components/tableview/tableview.component.d.ts +12 -12
  169. package/lib/data-providers/editor.data-provider.d.ts +12 -12
  170. package/lib/data-providers/index.d.ts +0 -1
  171. package/lib/data-providers/lookup.data-provider.d.ts +2 -2
  172. package/lib/data-providers/table.data-provider.d.ts +25 -25
  173. package/lib/data-providers/tableview.data-provider.d.ts +18 -18
  174. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +1 -1
  175. package/lib/descriptors/action/action-editor.descriptor.d.ts +20 -17
  176. package/lib/descriptors/editor/editor.descriptor.d.ts +8 -12
  177. package/lib/descriptors/editor/field-base.descriptor.d.ts +3 -3
  178. package/lib/descriptors/editor/field-lookup.descriptor.d.ts +11 -11
  179. package/lib/descriptors/editor/field-many.descriptor.d.ts +4 -4
  180. package/lib/descriptors/editor/field.descriptor.d.ts +2 -2
  181. package/lib/descriptors/editor/internal/editor-fields.model.d.ts +6 -5
  182. package/lib/descriptors/filter/filter-lookup.descriptor.d.ts +15 -14
  183. package/lib/descriptors/filter/filter.descriptor.d.ts +17 -18
  184. package/lib/descriptors/model/enum.descriptor.d.ts +14 -0
  185. package/lib/descriptors/model/index.d.ts +2 -0
  186. package/lib/descriptors/model/model.descriptor.d.ts +9 -0
  187. package/lib/descriptors/model/type.descriptor.d.ts +5 -0
  188. package/lib/descriptors/table/column.descriptor.d.ts +10 -24
  189. package/lib/descriptors/table/index.d.ts +1 -0
  190. package/lib/descriptors/table/internal/table-columns.model.d.ts +36 -5
  191. package/lib/descriptors/table/internal/table.model.d.ts +5 -2
  192. package/lib/descriptors/table/sort.descriptor.d.ts +17 -0
  193. package/lib/descriptors/table/table.descriptor.d.ts +57 -33
  194. package/lib/descriptors/tableview/internal/tableview.model.d.ts +3 -3
  195. package/lib/descriptors/tableview/tableview.descriptor.d.ts +49 -19
  196. package/lib/descriptors/types/filter.type.d.ts +0 -17
  197. package/lib/descriptors/types/table.type.d.ts +0 -3
  198. package/lib/error/error.handler.d.ts +1 -1
  199. package/lib/helpers/data-provider-executors.d.ts +19 -0
  200. package/lib/models/data-list.model.d.ts +27 -0
  201. package/lib/models/filter-match.model.d.ts +36 -0
  202. package/lib/models/index.d.ts +2 -0
  203. package/lib/models/view-container.model.d.ts +2 -2
  204. package/lib/pipes/enum.pipe.d.ts +2 -2
  205. package/lib/provide.d.ts +10 -0
  206. package/lib/router/models/router.model.d.ts +1 -1
  207. package/lib/router/tableview-route-builder.d.ts +1 -2
  208. package/lib/services/action/action-executor.service.d.ts +18 -16
  209. package/lib/services/data-provider-executor.service.d.ts +60 -0
  210. package/lib/services/index.d.ts +1 -0
  211. package/lib/services/view/view-container.service.d.ts +11 -11
  212. package/lib/types/action-descriptor.types.d.ts +2 -2
  213. package/lib/types/type.model.d.ts +1 -3
  214. package/lib/utils/data-list-params.util.d.ts +84 -0
  215. package/lib/utils/date.util.d.ts +3 -1
  216. package/lib/utils/enum.util.d.ts +4 -3
  217. package/lib/utils/export.util.d.ts +1 -1
  218. package/lib/utils/index.d.ts +1 -1
  219. package/openapi/angular/modelEnum.mustache +0 -3
  220. package/package.json +20 -2
  221. package/esm2022/lib/api/models/builders/query-param.builder.mjs +0 -59
  222. package/esm2022/lib/api/models/filter-match-type.model.mjs +0 -27
  223. package/esm2022/lib/api/models/filter-param.model.mjs +0 -33
  224. package/esm2022/lib/api/models/index.mjs +0 -7
  225. package/esm2022/lib/api/models/query-mode.model.mjs +0 -18
  226. package/esm2022/lib/api/models/query-param.model.mjs +0 -68
  227. package/esm2022/lib/api/models/query-result.model.mjs +0 -35
  228. package/esm2022/lib/api/services/api.abstract.service.mjs +0 -58
  229. package/esm2022/lib/api/services/crud-api.abstract.service.mjs +0 -75
  230. package/esm2022/lib/api/services/get-all-api.abstract.service.mjs +0 -30
  231. package/esm2022/lib/api/services/index.mjs +0 -4
  232. package/esm2022/lib/api/utils/index.mjs +0 -3
  233. package/esm2022/lib/api/utils/medius-rest.util.mjs +0 -293
  234. package/esm2022/lib/api/utils/object-serializer.util.mjs +0 -185
  235. package/esm2022/lib/components/tableview/route/tableview-route.abstract.component.mjs +0 -158
  236. package/esm2022/lib/data-providers/tableview-crud.data-provider.mjs +0 -32
  237. package/esm2022/lib/provide-commons.mjs +0 -88
  238. package/esm2022/lib/utils/action-data-provider.util.mjs +0 -171
  239. package/lib/api/models/builders/query-param.builder.d.ts +0 -13
  240. package/lib/api/models/index.d.ts +0 -6
  241. package/lib/api/services/get-all-api.abstract.service.d.ts +0 -14
  242. package/lib/api/services/index.d.ts +0 -3
  243. package/lib/api/utils/index.d.ts +0 -2
  244. package/lib/api/utils/medius-rest.util.d.ts +0 -32
  245. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +0 -35
  246. package/lib/data-providers/tableview-crud.data-provider.d.ts +0 -12
  247. package/lib/provide-commons.d.ts +0 -3
  248. package/lib/utils/action-data-provider.util.d.ts +0 -35
  249. package/templates/tableview-route.component.html +0 -5
  250. /package/{lib/api → data-api/class-dto/obsolete}/models/filter-match-type.model.d.ts +0 -0
  251. /package/{lib/api → data-api/class-dto/obsolete}/models/query-mode.model.d.ts +0 -0
@@ -10,7 +10,6 @@ import { MessagesModule } from 'primeng/messages';
10
10
  import { RippleModule } from 'primeng/ripple';
11
11
  import { ReplaySubject, distinctUntilChanged } from 'rxjs';
12
12
  import { startWith } from 'rxjs/operators';
13
- import { MediusQueryParamBuilder, MediusQueryResult } from '../../../../../api/models';
14
13
  import { MngDialogKeydownHandlerDirective } from '../../../../../directives';
15
14
  import { toObservable } from '../../../../../helpers/coercion';
16
15
  import { MngInternalError } from '../../../../../models';
@@ -35,8 +34,6 @@ export class MngFormlyFieldLookupDialogComponent extends FieldType {
35
34
  this.injector = injector;
36
35
  this.logger = inject(MngLoggerService).create('MngFormlyFieldLookupDialogComponent');
37
36
  this.fieldLabelFormControl = new FormControl();
38
- this.itemsSubject = new ReplaySubject(1);
39
- this.itemsAsync = this.itemsSubject.asObservable();
40
37
  this.addItemsSubject = new ReplaySubject(1);
41
38
  this.addItemsAsync = this.addItemsSubject.asObservable();
42
39
  this.dialogUseDataProvider = false;
@@ -73,7 +70,6 @@ export class MngFormlyFieldLookupDialogComponent extends FieldType {
73
70
  }
74
71
  })).subscribe(v => {
75
72
  this.setFieldLabelValue(v);
76
- this.itemsSubject.next(v);
77
73
  this.descriptor.nextEvent(MngFormFieldEventTypeEnum.ValueChange, MngFormlyFieldLookupDialogComponent, this, {
78
74
  value: v
79
75
  });
@@ -100,21 +96,27 @@ export class MngFormlyFieldLookupDialogComponent extends FieldType {
100
96
  openSelectDialog() {
101
97
  if (!this.dialogAreItemsLoaded && this.dialogUseDataProvider) {
102
98
  this.dialogIsLoadingSubject.next(true);
103
- const queryParamBuilder = MediusQueryParamBuilder.create(50);
104
- if (this.descriptor.dialogTableDescriptor.hasDefaultSort) {
105
- this.descriptor.dialogTableDescriptor.defaultSortProperty.forEach((p, idx) => queryParamBuilder.withSort(p, this.descriptor.dialogTableDescriptor.defaultSortAsc[idx]));
106
- }
107
- this.lookupDataProviderSubscription = toObservable(this.descriptor.dataProvider?.lookup(queryParamBuilder.build(), this.dialogDataProviderService)).subscribe({
99
+ const params = {
100
+ limit: 50,
101
+ sort: this.descriptor
102
+ .dialogTableDescriptor.sorts.filter(s => s.defaultIsEnabled)
103
+ .map(s => ({
104
+ property: s.property,
105
+ ascending: s.defaultIsAscending
106
+ }))
107
+ };
108
+ this.lookupDataProviderSubscription = toObservable(this.descriptor.dataProvider?.lookup(params, this.dialogDataProviderService)).subscribe({
108
109
  next: res => {
109
- const mqr = new MediusQueryResult();
110
- mqr.pageData = res ?? [];
111
- mqr.allDataCount = res?.length ?? 0;
112
- this.addItemsSubject.next(mqr);
110
+ const dataList = {
111
+ data: res ?? [],
112
+ totalCount: res?.length ?? 0
113
+ };
114
+ this.addItemsSubject.next(dataList);
113
115
  this.dialogAreItemsLoaded = true;
114
116
  this.dialogIsLoadingSubject.next(false);
115
117
  this.descriptor.nextEvent(MngFormFieldEventTypeEnum.DataProvider, MngFormlyFieldLookupDialogComponent, this, {
116
118
  eventSubtype: 'LookupNext',
117
- queryResult: mqr
119
+ queryResult: dataList
118
120
  });
119
121
  },
120
122
  error: err => {
@@ -124,7 +126,7 @@ export class MngFormlyFieldLookupDialogComponent extends FieldType {
124
126
  queryResult: err
125
127
  });
126
128
  const mngError = ErrorUtil.fromSubscribeError(err, 'MngFormlyFieldLookupDialogComponentError', {
127
- queryParam: queryParamBuilder.build()
129
+ params: params
128
130
  });
129
131
  this.logger.log(mngError, ErrorUtil.getErrorLogLevel(mngError));
130
132
  }
@@ -193,7 +195,7 @@ export class MngFormlyFieldLookupDialogComponent extends FieldType {
193
195
  }
194
196
  }
195
197
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: MngFormlyFieldLookupDialogComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
196
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: MngFormlyFieldLookupDialogComponent, isStandalone: true, selector: "mng-formly-field-lookup-dialog", providers: [provideViewContainer(false)], viewQueries: [{ propertyName: "mngTable", first: true, predicate: MngTableComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"'p-inputgroup mng-dropdown-dialog' + descriptor.inputClassName\" [class.p-inputtext-sm]=\"descriptor.isSizeSmall\" [class.p-inputtext-lg]=\"descriptor.isSizeLarge\">\n <input pInputText type=\"text\" [id]=\"$any(key)\" [readonly]=\"true\" [formlyAttributes]=\"field\" [formControl]=\"fieldLabelFormControl\" />\n @if (!props.required && formControl.value && !formControl.disabled) {\n <i class=\"mng-dropdown-clear-icon pi pi-times\" (click)=\"clear()\"></i>\n }\n <button\n pButton\n pRipple\n class=\"mng-dropdown-dialog-search-button\"\n type=\"button\"\n [label]=\"'general.search' | translate: {item: ''}\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openSelectDialog()\"></button>\n</div>\n\n<p-dialog\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.search' | translate: {item: props.label!}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-dialog mng-formly-field-lookup-dialog\">\n <ng-template pTemplate=\"content\" mngDialogKeydownHandler>\n <mng-table\n [descriptor]=\"descriptor.dialogTableDescriptor!\"\n [dataProvider]=\"descriptor.dialogTableDataProvider\"\n [queryResult]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [selectionMode]=\"'single'\"\n [loading]=\"dialogIsLoading$\"\n [captionComponent]=\"config.table?.captionComponent\"\n [columnCustomLastComponent]=\"config.table?.columnActionComponent\"\n (selectionChange)=\"onSelectionChange($event)\"\n (captionComponentInstance)=\"onCaptionCmpInst($event)\"\n (columnCustomLastComponentInstance)=\"onColumnActionCmpInst($event)\">\n </mng-table>\n <p-messages [value]=\"dialogMessages\"></p-messages>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.select' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-text\"\n (click)=\"addItem()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n loadingIcon=\"pi pi-spin pi-spinner\"\n [disabled]=\"form.disabled\"></button>\n </ng-template>\n</p-dialog>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i7.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "columnLastMinWidth", "captionComponent", "columnCustomLastComponent", "globalFilterFields"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnCustomLastComponentInstance"] }, { kind: "ngmodule", type: MessagesModule }, { kind: "component", type: i8.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i9.InputText, selector: "[pInputText]" }, { kind: "directive", type: MngDialogKeydownHandlerDirective, selector: "[mngDialogKeydownHandler]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
198
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: MngFormlyFieldLookupDialogComponent, isStandalone: true, selector: "mng-formly-field-lookup-dialog", providers: [provideViewContainer(false)], viewQueries: [{ propertyName: "mngTable", first: true, predicate: MngTableComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [class]=\"'p-inputgroup mng-dropdown-dialog' + descriptor.inputClassName\" [class.p-inputtext-sm]=\"descriptor.isSizeSmall\" [class.p-inputtext-lg]=\"descriptor.isSizeLarge\">\n <input pInputText type=\"text\" [id]=\"$any(key)\" [readonly]=\"true\" [formlyAttributes]=\"field\" [formControl]=\"fieldLabelFormControl\" />\n @if (!props.required && formControl.value && !formControl.disabled) {\n <i class=\"mng-dropdown-clear-icon pi pi-times\" (click)=\"clear()\"></i>\n }\n <button\n pButton\n pRipple\n class=\"mng-dropdown-dialog-search-button\"\n type=\"button\"\n [label]=\"'general.search' | translate: {item: ''}\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openSelectDialog()\"></button>\n</div>\n\n<p-dialog\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.search' | translate: {item: props.label!}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-dialog mng-formly-field-lookup-dialog\">\n <ng-template pTemplate=\"content\" mngDialogKeydownHandler>\n <mng-table\n [descriptor]=\"descriptor.dialogTableDescriptor!\"\n [dataProvider]=\"descriptor.dialogTableDataProvider\"\n [result]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [selectionMode]=\"'single'\"\n [loading]=\"dialogIsLoading$\"\n [captionComponent]=\"config.table?.captionComponent\"\n [columnCustomLastComponent]=\"config.table?.columnActionComponent\"\n (selectionChange)=\"onSelectionChange($event)\"\n (captionComponentInstance)=\"onCaptionCmpInst($event)\"\n (columnCustomLastComponentInstance)=\"onColumnActionCmpInst($event)\">\n </mng-table>\n <p-messages [value]=\"dialogMessages\"></p-messages>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.select' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-text\"\n (click)=\"addItem()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n loadingIcon=\"pi pi-spin pi-spinner\"\n [disabled]=\"form.disabled\"></button>\n </ng-template>\n</p-dialog>\n", dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i7.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "result", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "columnLastMinWidth", "captionComponent", "columnCustomLastComponent", "globalFilterFields"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnCustomLastComponentInstance"] }, { kind: "ngmodule", type: MessagesModule }, { kind: "component", type: i8.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i9.InputText, selector: "[pInputText]" }, { kind: "directive", type: MngDialogKeydownHandlerDirective, selector: "[mngDialogKeydownHandler]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
197
199
  }
198
200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: MngFormlyFieldLookupDialogComponent, decorators: [{
199
201
  type: Component,
@@ -209,9 +211,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
209
211
  MessagesModule,
210
212
  InputTextModule,
211
213
  MngDialogKeydownHandlerDirective
212
- ], providers: [provideViewContainer(false)], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'p-inputgroup mng-dropdown-dialog' + descriptor.inputClassName\" [class.p-inputtext-sm]=\"descriptor.isSizeSmall\" [class.p-inputtext-lg]=\"descriptor.isSizeLarge\">\n <input pInputText type=\"text\" [id]=\"$any(key)\" [readonly]=\"true\" [formlyAttributes]=\"field\" [formControl]=\"fieldLabelFormControl\" />\n @if (!props.required && formControl.value && !formControl.disabled) {\n <i class=\"mng-dropdown-clear-icon pi pi-times\" (click)=\"clear()\"></i>\n }\n <button\n pButton\n pRipple\n class=\"mng-dropdown-dialog-search-button\"\n type=\"button\"\n [label]=\"'general.search' | translate: {item: ''}\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openSelectDialog()\"></button>\n</div>\n\n<p-dialog\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.search' | translate: {item: props.label!}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-dialog mng-formly-field-lookup-dialog\">\n <ng-template pTemplate=\"content\" mngDialogKeydownHandler>\n <mng-table\n [descriptor]=\"descriptor.dialogTableDescriptor!\"\n [dataProvider]=\"descriptor.dialogTableDataProvider\"\n [queryResult]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [selectionMode]=\"'single'\"\n [loading]=\"dialogIsLoading$\"\n [captionComponent]=\"config.table?.captionComponent\"\n [columnCustomLastComponent]=\"config.table?.columnActionComponent\"\n (selectionChange)=\"onSelectionChange($event)\"\n (captionComponentInstance)=\"onCaptionCmpInst($event)\"\n (columnCustomLastComponentInstance)=\"onColumnActionCmpInst($event)\">\n </mng-table>\n <p-messages [value]=\"dialogMessages\"></p-messages>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.select' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-text\"\n (click)=\"addItem()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n loadingIcon=\"pi pi-spin pi-spinner\"\n [disabled]=\"form.disabled\"></button>\n </ng-template>\n</p-dialog>\n" }]
214
+ ], providers: [provideViewContainer(false)], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"'p-inputgroup mng-dropdown-dialog' + descriptor.inputClassName\" [class.p-inputtext-sm]=\"descriptor.isSizeSmall\" [class.p-inputtext-lg]=\"descriptor.isSizeLarge\">\n <input pInputText type=\"text\" [id]=\"$any(key)\" [readonly]=\"true\" [formlyAttributes]=\"field\" [formControl]=\"fieldLabelFormControl\" />\n @if (!props.required && formControl.value && !formControl.disabled) {\n <i class=\"mng-dropdown-clear-icon pi pi-times\" (click)=\"clear()\"></i>\n }\n <button\n pButton\n pRipple\n class=\"mng-dropdown-dialog-search-button\"\n type=\"button\"\n [label]=\"'general.search' | translate: {item: ''}\"\n [disabled]=\"formControl.disabled\"\n (click)=\"openSelectDialog()\"></button>\n</div>\n\n<p-dialog\n [(visible)]=\"isDialogVisible\"\n [draggable]=\"false\"\n [header]=\"'general.search' | translate: {item: props.label!}\"\n [modal]=\"true\"\n appendTo=\"body\"\n styleClass=\"p-fluid mng-dialog mng-formly-field-lookup-dialog\">\n <ng-template pTemplate=\"content\" mngDialogKeydownHandler>\n <mng-table\n [descriptor]=\"descriptor.dialogTableDescriptor!\"\n [dataProvider]=\"descriptor.dialogTableDataProvider\"\n [result]=\"addItemsAsync\"\n [selectionEnabled]=\"true\"\n [selectionMode]=\"'single'\"\n [loading]=\"dialogIsLoading$\"\n [captionComponent]=\"config.table?.captionComponent\"\n [columnCustomLastComponent]=\"config.table?.columnActionComponent\"\n (selectionChange)=\"onSelectionChange($event)\"\n (captionComponentInstance)=\"onCaptionCmpInst($event)\"\n (columnCustomLastComponentInstance)=\"onColumnActionCmpInst($event)\">\n </mng-table>\n <p-messages [value]=\"dialogMessages\"></p-messages>\n </ng-template>\n\n <ng-template pTemplate=\"footer\">\n <button pButton pRipple type=\"button\" [label]=\"'general.cancel' | translate\" icon=\"pi pi-times\" class=\"p-button-text\" (click)=\"hideDialog()\"></button>\n <button\n pButton\n pRipple\n type=\"button\"\n [label]=\"'general.select' | translate\"\n icon=\"pi pi-check\"\n class=\"p-button-text\"\n (click)=\"addItem()\"\n [loading]=\"(dialogIsLoading$ | async) ?? false\"\n loadingIcon=\"pi pi-spin pi-spinner\"\n [disabled]=\"form.disabled\"></button>\n </ng-template>\n</p-dialog>\n" }]
213
215
  }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { mngTable: [{
214
216
  type: ViewChild,
215
217
  args: [MngTableComponent]
216
218
  }] } });
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLWxvb2t1cC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5L2ZpZWxkcy9mb3JtbHktZmllbGQtbG9va3VwLWRpYWxvZy9mb3JtbHktZmllbGQtbG9va3VwLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzL2Zvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nL2Zvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQWdCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFhLGFBQWEsRUFBeUIsb0JBQW9CLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDNUYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBR3JGLE9BQU8sRUFBQyxnQ0FBZ0MsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLGlDQUFpQyxFQUFFLDhCQUE4QixFQUFFLHlCQUF5QixFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7O0FBdUI3SCxNQUFNLE9BQU8sbUNBQTJDLFNBQVEsU0FBK0I7SUEyQjNGLFlBQW9CLFFBQWtCO1FBQ2xDLEtBQUssRUFBRSxDQUFDO1FBRFEsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXhCckIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBSTFGLDBCQUFxQixHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRXZELGlCQUFZLEdBQWUsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsZUFBVSxHQUFrQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELG9CQUFlLEdBQWtDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLGtCQUFhLEdBQXFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdEYsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQzdCLDhCQUF5QixHQUFRLElBQUksQ0FBQztRQUN0QywyQkFBc0IsR0FBRyxJQUFJLGFBQWEsQ0FBVSxDQUFDLENBQUMsQ0FBQztRQUV4RCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4Qix5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsdUJBQWtCLEdBQVEsSUFBSSxDQUFDO1FBQy9CLG1CQUFjLEdBQWMsRUFBRSxDQUFDO1FBQy9CLHFCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUc3RCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFJM0MsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBMEMsQ0FBQztRQUN4RSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFakMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLGtCQUFrQixFQUFFLG1DQUFtQyxFQUFFLElBQUksRUFBRTtZQUMvRyxZQUFZLEVBQUUsaUNBQWlDLENBQUMsT0FBTztTQUMxRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBMkIsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUU7WUFDdkYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDckc7UUFFRCxjQUFjO1FBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVksQ0FBQyxLQUFLLENBQUMsRUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBc0IsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBc0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3BJLElBQUksV0FBVyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ3JFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsRDtpQkFBTTtnQkFDSCxPQUFPLElBQUksS0FBSyxJQUFJLENBQUM7YUFDeEI7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsSUFBSSxFQUFFO2dCQUN4RyxLQUFLLEVBQUUsQ0FBQzthQUNYLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQzlDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLGtCQUFrQixFQUFFLG1DQUFtQyxFQUFFLElBQUksRUFBRTtZQUMvRyxZQUFZLEVBQUUsaUNBQWlDLENBQUMsWUFBWTtTQUMvRCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNQLGtEQUFrRDtRQUVsRCxJQUFJLENBQUMsOEJBQThCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVqRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMseUJBQXlCLENBQUMsa0JBQWtCLEVBQUUsbUNBQW1DLEVBQUUsSUFBSSxFQUFFO1lBQ2hILFlBQVksRUFBRSxpQ0FBaUMsQ0FBQyxVQUFVO1NBQzdELENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMxRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBc0IsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXNCLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQzFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBc0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDNUYsQ0FBQzthQUNMO1lBQ0QsSUFBSSxDQUFDLDhCQUE4QixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzFKLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFpQixFQUFLLENBQUM7b0JBQ3ZDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDekIsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXhDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxtQ0FBbUMsRUFBRSxJQUFJLEVBQUU7d0JBQ3pHLFlBQVksRUFBRSxZQUFZO3dCQUMxQixXQUFXLEVBQUUsR0FBRztxQkFDbkIsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNULElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFlBQVksRUFBRSxtQ0FBbUMsRUFBRSxJQUFJLEVBQUU7d0JBQ3pHLFlBQVksRUFBRSxhQUFhO3dCQUMzQixXQUFXLEVBQUUsR0FBRztxQkFDbkIsQ0FBQyxDQUFDO29CQUVILE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsMENBQTBDLEVBQUU7d0JBQzNGLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7cUJBQ3hDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLENBQUM7YUFDSixDQUFDLENBQUM7U0FDTjtRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFFNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLEVBQUUsbUNBQW1DLEVBQUUsSUFBSSxFQUFFO1lBQzVHLFlBQVksRUFBRSw4QkFBOEIsQ0FBQyxVQUFVO1lBQ3ZELGFBQWEsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFTO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWE7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsZUFBZSxFQUFFLG1DQUFtQyxFQUFFLElBQUksRUFBRTtZQUM1RyxZQUFZLEVBQUUsOEJBQThCLENBQUMsZ0NBQWdDO1lBQzdFLHdCQUF3QixFQUFFLFFBQVE7U0FDckMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWE7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsZUFBZSxFQUFFLG1DQUFtQyxFQUFFLElBQUksRUFBRTtZQUM1RyxZQUFZLEVBQUUsOEJBQThCLENBQUMsdUNBQXVDO1lBQ3BGLHdCQUF3QixFQUFFLFFBQVE7U0FDckMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBRTdCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxtQ0FBbUMsRUFBRSxJQUFJLEVBQUU7WUFDNUcsWUFBWSxFQUFFLDhCQUE4QixDQUFDLFVBQVU7WUFDdkQsYUFBYSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBUTtRQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUN6SCxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNoQixNQUFNLElBQUksZ0JBQWdCLENBQUMscUNBQXFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsaUNBQWlDLEVBQUMsQ0FBQyxDQUFDO2FBQ2hIO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBNkIsQ0FBQyxDQUFDLENBQUM7U0FDN0U7YUFBTTtZQUNILElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDOzhHQXJNUSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyw2RUFIakMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxvRUFJN0IsaUJBQWlCLHVFQ2pEaEMsa2dGQXNEQSwyQ0RyQlEsZUFBZSwyRkFDZixZQUFZLHFKQUNaLG1CQUFtQix5a0JBQ25CLFlBQVksNlFBQ1osWUFBWSw2RkFDWixZQUFZLG11QkFDWixTQUFTLDhDQUNULGlCQUFpQiw2WUFDakIsY0FBYyxnUkFDZCxlQUFlLG9HQUNmLGdDQUFnQzs7MkZBSzNCLG1DQUFtQztrQkFwQi9DLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGdDQUFnQyxXQUVqQzt3QkFDTCxlQUFlO3dCQUNmLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixTQUFTO3dCQUNULGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGdDQUFnQztxQkFDbkMsYUFDVSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLG1CQUN2Qix1QkFBdUIsQ0FBQyxNQUFNOzZFQUdWLFFBQVE7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0FmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQ29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0ZpZWxkVHlwZSwgRm9ybWx5TW9kdWxlfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TWVzc2FnZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7RGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQge0lucHV0VGV4dE1vZHVsZX0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHtNZXNzYWdlc01vZHVsZX0gZnJvbSAncHJpbWVuZy9tZXNzYWdlcyc7XG5pbXBvcnQge1JpcHBsZU1vZHVsZX0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzJztcbmltcG9ydCB7c3RhcnRXaXRofSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIE1lZGl1c1F1ZXJ5UmVzdWx0fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7RmllbGRMb29rdXBEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy9lZGl0b3InO1xuaW1wb3J0IHtGaWVsZExvb2t1cENvbmZpZ30gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVzY3JpcHRvcnMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge01uZ0RpYWxvZ0tleWRvd25IYW5kbGVyRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7dG9PYnNlcnZhYmxlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9oZWxwZXJzL2NvZXJjaW9uJztcbmltcG9ydCB7TW5nSW50ZXJuYWxFcnJvcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nTG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtwcm92aWRlVmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvdmlldyc7XG5pbXBvcnQge0Vycm9yVXRpbH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdUYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vdGFibGUvdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7TW5nRm9ybUZpZWxkRXZlbnRDb21wb25lbnRTdWJ0eXBlLCBNbmdGb3JtRmllbGRFdmVudERpYWxvZ1N1YnR5cGUsIE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0Zvcm1seUZpZWxkQ29uZmlnfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2Zvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRm9ybWx5TW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBCdXR0b25Nb2R1bGUsXG4gICAgICAgIFJpcHBsZU1vZHVsZSxcbiAgICAgICAgRGlhbG9nTW9kdWxlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIE1uZ1RhYmxlQ29tcG9uZW50LFxuICAgICAgICBNZXNzYWdlc01vZHVsZSxcbiAgICAgICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgICAgICBNbmdEaWFsb2dLZXlkb3duSGFuZGxlckRpcmVjdGl2ZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbcHJvdmlkZVZpZXdDb250YWluZXIoZmFsc2UpXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudDxULCBFVD4gZXh0ZW5kcyBGaWVsZFR5cGU8TW5nRm9ybWx5RmllbGRDb25maWc+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoTW5nVGFibGVDb21wb25lbnQpIHB1YmxpYyBtbmdUYWJsZT86IE1uZ1RhYmxlQ29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTW5nTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudCcpO1xuXG4gICAgcHVibGljIGRlc2NyaXB0b3IhOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8VCwgRVQ+O1xuICAgIHB1YmxpYyBjb25maWchOiBGaWVsZExvb2t1cENvbmZpZztcbiAgICBwdWJsaWMgZmllbGRMYWJlbEZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGl0ZW1zU3ViamVjdDogU3ViamVjdDxUPiA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICAgIHB1YmxpYyBpdGVtc0FzeW5jOiBPYnNlcnZhYmxlPFQ+ID0gdGhpcy5pdGVtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGFkZEl0ZW1zU3ViamVjdDogU3ViamVjdDxNZWRpdXNRdWVyeVJlc3VsdDxUPj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgICBwdWJsaWMgYWRkSXRlbXNBc3luYzogT2JzZXJ2YWJsZTxNZWRpdXNRdWVyeVJlc3VsdDxUPj4gPSB0aGlzLmFkZEl0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHB1YmxpYyBkaWFsb2dVc2VEYXRhUHJvdmlkZXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIGRpYWxvZ0RhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgcHJpdmF0ZSBkaWFsb2dJc0xvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG5cbiAgICBwdWJsaWMgaXNEaWFsb2dWaXNpYmxlID0gZmFsc2U7XG4gICAgcHVibGljIGRpYWxvZ0FyZUl0ZW1zTG9hZGVkID0gZmFsc2U7XG4gICAgcHVibGljIGRpYWxvZ1NlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcbiAgICBwdWJsaWMgZGlhbG9nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICAgIHB1YmxpYyBkaWFsb2dJc0xvYWRpbmckID0gdGhpcy5kaWFsb2dJc0xvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHJpdmF0ZSBsb29rdXBEYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gdGhpcy5wcm9wcy5kZXNjcmlwdG9yIGFzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxULCBFVD47XG4gICAgICAgIHRoaXMucHJvcHMuZmllbGRDb21wb25lbnQgPSB0aGlzO1xuXG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9JTklUXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5kZXNjcmlwdG9yLmNvbmZpZyBhcyBGaWVsZExvb2t1cENvbmZpZztcbiAgICAgICAgaWYgKCF0aGlzLmRlc2NyaXB0b3IuZGlhbG9nVGFibGVEYXRhUHJvdmlkZXIgJiYgdGhpcy5kZXNjcmlwdG9yLmRhdGFQcm92aWRlcj8uc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nVXNlRGF0YVByb3ZpZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YVByb3ZpZGVyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PGFueT4odGhpcy5kZXNjcmlwdG9yLmRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbml0IHZhbHVlc1xuICAgICAgICB0aGlzLnNldEZpZWxkTGFiZWxWYWx1ZSh0aGlzLmZvcm1Db250cm9sIS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbnRyb2whLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUNvbnRyb2whLnZhbHVlKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVByb3AgPSB0aGlzLmRlc2NyaXB0b3IuZGlhbG9nVGFibGVEZXNjcmlwdG9yIS50cmFja1Byb3BlcnR5ID8/IHRoaXMuZGVzY3JpcHRvci5kaWFsb2dUYWJsZURlc2NyaXB0b3IhLm1vZGVsLmlkUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVQcm9wICYmIHR5cGVvZiBwcmV2ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3VyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZbY29tcGFyZVByb3BdID09PSBjdXJyW2NvbXBhcmVQcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldiA9PT0gY3VycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmllbGRMYWJlbFZhbHVlKHYpO1xuICAgICAgICAgICAgdGhpcy5pdGVtc1N1YmplY3QubmV4dCh2KTtcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5WYWx1ZUNoYW5nZSwgTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dDb21wb25lbnQsIHRoaXMsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdlxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzWydvblZhbHVlQ2hhbmdlJ10pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzWydvblZhbHVlQ2hhbmdlJ10odGhpcy5maWVsZCwgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yLm5leHRFdmVudChNbmdGb3JtRmllbGRFdmVudFR5cGVFbnVtLkNvbXBvbmVudExpZmVjeWNsZSwgTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dDb21wb25lbnQsIHRoaXMsIHtcbiAgICAgICAgICAgIGV2ZW50U3VidHlwZTogTW5nRm9ybUZpZWxkRXZlbnRDb21wb25lbnRTdWJ0eXBlLk9OX1ZJRVdfSU5JVFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gd2FybmluZzogZm9ybWx5IGNhbGxzIG9uIGRlc3Ryb3kgYmVmb3JlIG9uIGluaXRcblxuICAgICAgICB0aGlzLmxvb2t1cERhdGFQcm92aWRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcj8ubmV4dEV2ZW50KE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0uQ29tcG9uZW50TGlmZWN5Y2xlLCBNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudCwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBNbmdGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fREVTVFJPWVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuU2VsZWN0RGlhbG9nKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGlhbG9nQXJlSXRlbXNMb2FkZWQgJiYgdGhpcy5kaWFsb2dVc2VEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nSXNMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbUJ1aWxkZXIgPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUoNTApO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci5kaWFsb2dUYWJsZURlc2NyaXB0b3IhLmhhc0RlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLmRpYWxvZ1RhYmxlRGVzY3JpcHRvciEuZGVmYXVsdFNvcnRQcm9wZXJ0eS5mb3JFYWNoKChwLCBpZHgpID0+XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1CdWlsZGVyLndpdGhTb3J0KHAsIHRoaXMuZGVzY3JpcHRvci5kaWFsb2dUYWJsZURlc2NyaXB0b3IhLmRlZmF1bHRTb3J0QXNjW2lkeF0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9va3VwRGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uID0gdG9PYnNlcnZhYmxlKHRoaXMuZGVzY3JpcHRvci5kYXRhUHJvdmlkZXI/Lmxvb2t1cChxdWVyeVBhcmFtQnVpbGRlci5idWlsZCgpLCB0aGlzLmRpYWxvZ0RhdGFQcm92aWRlclNlcnZpY2UpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1xciA9IG5ldyBNZWRpdXNRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgICAgICAgICBtcXIucGFnZURhdGEgPSByZXMgPz8gW107XG4gICAgICAgICAgICAgICAgICAgIG1xci5hbGxEYXRhQ291bnQgPSByZXM/Lmxlbmd0aCA/PyAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW1zU3ViamVjdC5uZXh0KG1xcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nQXJlSXRlbXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0lzTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLm5leHRFdmVudChNbmdGb3JtRmllbGRFdmVudFR5cGVFbnVtLkRhdGFQcm92aWRlciwgTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dDb21wb25lbnQsIHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50U3VidHlwZTogJ0xvb2t1cE5leHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHQ6IG1xclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0lzTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5EYXRhUHJvdmlkZXIsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFN1YnR5cGU6ICdMb29rdXBFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdDogZXJyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1uZ0Vycm9yID0gRXJyb3JVdGlsLmZyb21TdWJzY3JpYmVFcnJvcihlcnIsICdNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudEVycm9yJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbTogcXVlcnlQYXJhbUJ1aWxkZXIuYnVpbGQoKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKG1uZ0Vycm9yLCBFcnJvclV0aWwuZ2V0RXJyb3JMb2dMZXZlbChtbmdFcnJvcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc0RpYWxvZ1Zpc2libGUgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5EaWFsb2dMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50RGlhbG9nU3VidHlwZS5WSVNJQklMSVRZLFxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGlvbkNoYW5nZShpdGVtOiBhbnkpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICAgIH1cblxuICAgIG9uQ2FwdGlvbkNtcEluc3QoaW5zdGFuY2U6IGFueSkge1xuICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0uRGlhbG9nTGlmZWN5Y2xlLCBNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudCwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBNbmdGb3JtRmllbGRFdmVudERpYWxvZ1N1YnR5cGUuVEFCTEVfQ0FQVElPTl9DT01QT05FTlRfSU5TVEFOQ0UsXG4gICAgICAgICAgICBjYXB0aW9uQ29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ29sdW1uQWN0aW9uQ21wSW5zdChpbnN0YW5jZTogYW55KSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5EaWFsb2dMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50RGlhbG9nU3VidHlwZS5UQUJMRV9DT0xVTU5fQUNUSU9OU19DT01QT05FTlRfSU5TVEFOQ0UsXG4gICAgICAgICAgICBjYXB0aW9uQ29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBoaWRlRGlhbG9nKCkge1xuICAgICAgICB0aGlzLmlzRGlhbG9nVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5EaWFsb2dMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50RGlhbG9nU3VidHlwZS5WSVNJQklMSVRZLFxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkSXRlbSgpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRpYWxvZ1NlbGVjdGVkSXRlbSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZpZWxkTGFiZWxWYWx1ZSh2YWx1ZTogVCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkTGFiZWxGb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsUHJvcGVydHkgPSB0aGlzLmRlc2NyaXB0b3Iub3B0aW9uc0xhYmVsUHJvcGVydHkgPz8gdGhpcy5kZXNjcmlwdG9yLmRpYWxvZ1RhYmxlRGVzY3JpcHRvcj8ubW9kZWwudGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmICghbGFiZWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGxhYmVsIHByb3BlcnR5LicsIHtuYW1lOiAnTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dFcnJvcid9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmllbGRMYWJlbEZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlW2xhYmVsUHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkTGFiZWxGb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IFtjbGFzc109XCIncC1pbnB1dGdyb3VwIG1uZy1kcm9wZG93bi1kaWFsb2cnICsgZGVzY3JpcHRvci5pbnB1dENsYXNzTmFtZVwiIFtjbGFzcy5wLWlucHV0dGV4dC1zbV09XCJkZXNjcmlwdG9yLmlzU2l6ZVNtYWxsXCIgW2NsYXNzLnAtaW5wdXR0ZXh0LWxnXT1cImRlc2NyaXB0b3IuaXNTaXplTGFyZ2VcIj5cbiAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIFtpZF09XCIkYW55KGtleSlcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCIgW2Zvcm1Db250cm9sXT1cImZpZWxkTGFiZWxGb3JtQ29udHJvbFwiIC8+XG4gICAgQGlmICghcHJvcHMucmVxdWlyZWQgJiYgZm9ybUNvbnRyb2wudmFsdWUgJiYgIWZvcm1Db250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgIDxpIGNsYXNzPVwibW5nLWRyb3Bkb3duLWNsZWFyLWljb24gcGkgcGktdGltZXNcIiAoY2xpY2spPVwiY2xlYXIoKVwiPjwvaT5cbiAgICB9XG4gICAgPGJ1dHRvblxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIHBSaXBwbGVcbiAgICAgICAgY2xhc3M9XCJtbmctZHJvcGRvd24tZGlhbG9nLXNlYXJjaC1idXR0b25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2xhYmVsXT1cIidnZW5lcmFsLnNlYXJjaCcgfCB0cmFuc2xhdGU6IHtpdGVtOiAnJ31cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwib3BlblNlbGVjdERpYWxvZygpXCI+PC9idXR0b24+XG48L2Rpdj5cblxuPHAtZGlhbG9nXG4gICAgWyh2aXNpYmxlKV09XCJpc0RpYWxvZ1Zpc2libGVcIlxuICAgIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICAgIFtoZWFkZXJdPVwiJ2dlbmVyYWwuc2VhcmNoJyB8IHRyYW5zbGF0ZToge2l0ZW06IHByb3BzLmxhYmVsIX1cIlxuICAgIFttb2RhbF09XCJ0cnVlXCJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgIHN0eWxlQ2xhc3M9XCJwLWZsdWlkIG1uZy1kaWFsb2cgbW5nLWZvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nXCI+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiBtbmdEaWFsb2dLZXlkb3duSGFuZGxlcj5cbiAgICAgICAgPG1uZy10YWJsZVxuICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci5kaWFsb2dUYWJsZURlc2NyaXB0b3IhXCJcbiAgICAgICAgICAgIFtkYXRhUHJvdmlkZXJdPVwiZGVzY3JpcHRvci5kaWFsb2dUYWJsZURhdGFQcm92aWRlclwiXG4gICAgICAgICAgICBbcXVlcnlSZXN1bHRdPVwiYWRkSXRlbXNBc3luY1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIidzaW5nbGUnXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImRpYWxvZ0lzTG9hZGluZyRcIlxuICAgICAgICAgICAgW2NhcHRpb25Db21wb25lbnRdPVwiY29uZmlnLnRhYmxlPy5jYXB0aW9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgIFtjb2x1bW5DdXN0b21MYXN0Q29tcG9uZW50XT1cImNvbmZpZy50YWJsZT8uY29sdW1uQWN0aW9uQ29tcG9uZW50XCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2FwdGlvbkNvbXBvbmVudEluc3RhbmNlKT1cIm9uQ2FwdGlvbkNtcEluc3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY29sdW1uQ3VzdG9tTGFzdENvbXBvbmVudEluc3RhbmNlKT1cIm9uQ29sdW1uQWN0aW9uQ21wSW5zdCgkZXZlbnQpXCI+XG4gICAgICAgIDwvbW5nLXRhYmxlPlxuICAgICAgICA8cC1tZXNzYWdlcyBbdmFsdWVdPVwiZGlhbG9nTWVzc2FnZXNcIj48L3AtbWVzc2FnZXM+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCInZ2VuZXJhbC5jYW5jZWwnIHwgdHJhbnNsYXRlXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgKGNsaWNrKT1cImhpZGVEaWFsb2coKVwiPjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInZ2VuZXJhbC5zZWxlY3QnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1jaGVja1wiXG4gICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEl0ZW0oKVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoZGlhbG9nSXNMb2FkaW5nJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICBsb2FkaW5nSWNvbj1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5kaXNhYmxlZFwiPjwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuIl19
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLWxvb2t1cC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5L2ZpZWxkcy9mb3JtbHktZmllbGQtbG9va3VwLWRpYWxvZy9mb3JtbHktZmllbGQtbG9va3VwLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzL2Zvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nL2Zvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQWdCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFhLGFBQWEsRUFBeUIsb0JB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S0FBSyxDQUFDLGFBQTZCLENBQUMsQ0FBQyxDQUFDO1NBQzdFO2FBQU07WUFDSCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQzs4R0F4TVEsbUNBQW1DO2tHQUFuQyxtQ0FBbUMsNkVBSGpDLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsb0VBSTdCLGlCQUFpQix1RUNoRGhDLDYvRUFzREEsMkNEdEJRLGVBQWUsMkZBQ2YsWUFBWSxxSkFDWixtQkFBbUIseWtCQUNuQixZQUFZLDZRQUNaLFlBQVksNkZBQ1osWUFBWSxtdUJBQ1osU0FBUyw4Q0FDVCxpQkFBaUIsd1lBQ2pCLGNBQWMsZ1JBQ2QsZUFBZSxvR0FDZixnQ0FBZ0M7OzJGQUszQixtQ0FBbUM7a0JBcEIvQyxTQUFTO2lDQUNNLElBQUksWUFDTixnQ0FBZ0MsV0FFakM7d0JBQ0wsZUFBZTt3QkFDZixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQ0FBZ0M7cUJBQ25DLGFBQ1UsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxtQkFDdkIsdUJBQXVCLENBQUMsTUFBTTs2RUFHVixRQUFRO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtGaWVsZFR5cGUsIEZvcm1seU1vZHVsZX0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge0RpYWxvZ01vZHVsZX0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHtJbnB1dFRleHRNb2R1bGV9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7TWVzc2FnZXNNb2R1bGV9IGZyb20gJ3ByaW1lbmcvbWVzc2FnZXMnO1xuaW1wb3J0IHtSaXBwbGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0ZpZWxkTG9va3VwRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVzY3JpcHRvcnMvZWRpdG9yJztcbmltcG9ydCB7RmllbGRMb29rdXBDb25maWd9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Rlc2NyaXB0b3JzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtNbmdEaWFsb2dLZXlkb3duSGFuZGxlckRpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge3RvT2JzZXJ2YWJsZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaGVscGVycy9jb2VyY2lvbic7XG5pbXBvcnQge0RhdGFMaXN0UGFyYW1zLCBEYXRhTGlzdFJlc3VsdCwgTW5nSW50ZXJuYWxFcnJvcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nTG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtwcm92aWRlVmlld0NvbnRhaW5lcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvdmlldyc7XG5pbXBvcnQge0Vycm9yVXRpbH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdUYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vdGFibGUvdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7TW5nRm9ybUZpZWxkRXZlbnRDb21wb25lbnRTdWJ0eXBlLCBNbmdGb3JtRmllbGRFdmVudERpYWxvZ1N1YnR5cGUsIE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0Zvcm1seUZpZWxkQ29uZmlnfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2Zvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRm9ybWx5TW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBCdXR0b25Nb2R1bGUsXG4gICAgICAgIFJpcHBsZU1vZHVsZSxcbiAgICAgICAgRGlhbG9nTW9kdWxlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIE1uZ1RhYmxlQ29tcG9uZW50LFxuICAgICAgICBNZXNzYWdlc01vZHVsZSxcbiAgICAgICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgICAgICBNbmdEaWFsb2dLZXlkb3duSGFuZGxlckRpcmVjdGl2ZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbcHJvdmlkZVZpZXdDb250YWluZXIoZmFsc2UpXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudDxULCBFVD4gZXh0ZW5kcyBGaWVsZFR5cGU8TW5nRm9ybWx5RmllbGRDb25maWc+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoTW5nVGFibGVDb21wb25lbnQpIHB1YmxpYyBtbmdUYWJsZT86IE1uZ1RhYmxlQ29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTW5nTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudCcpO1xuXG4gICAgcHVibGljIGRlc2NyaXB0b3IhOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8VCwgRVQ+O1xuICAgIHB1YmxpYyBjb25maWchOiBGaWVsZExvb2t1cENvbmZpZztcbiAgICBwdWJsaWMgZmllbGRMYWJlbEZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGFkZEl0ZW1zU3ViamVjdDogU3ViamVjdDxEYXRhTGlzdFJlc3VsdDxUPj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgICBwdWJsaWMgYWRkSXRlbXNBc3luYzogT2JzZXJ2YWJsZTxEYXRhTGlzdFJlc3VsdDxUPj4gPSB0aGlzLmFkZEl0ZW1zU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHB1YmxpYyBkaWFsb2dVc2VEYXRhUHJvdmlkZXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIGRpYWxvZ0RhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgcHJpdmF0ZSBkaWFsb2dJc0xvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG5cbiAgICBwdWJsaWMgaXNEaWFsb2dWaXNpYmxlID0gZmFsc2U7XG4gICAgcHVibGljIGRpYWxvZ0FyZUl0ZW1zTG9hZGVkID0gZmFsc2U7XG4gICAgcHVibGljIGRpYWxvZ1NlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcbiAgICBwdWJsaWMgZGlhbG9nTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICAgIHB1YmxpYyBkaWFsb2dJc0xvYWRpbmckID0gdGhpcy5kaWFsb2dJc0xvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHJpdmF0ZSBsb29rdXBEYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yID0gdGhpcy5wcm9wcy5kZXNjcmlwdG9yIGFzIEZpZWxkTG9va3VwRGVzY3JpcHRvcjxULCBFVD47XG4gICAgICAgIHRoaXMucHJvcHMuZmllbGRDb21wb25lbnQgPSB0aGlzO1xuXG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9JTklUXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5kZXNjcmlwdG9yLmNvbmZpZyBhcyBGaWVsZExvb2t1cENvbmZpZztcbiAgICAgICAgaWYgKCF0aGlzLmRlc2NyaXB0b3IuZGlhbG9nVGFibGVEYXRhUHJvdmlkZXIgJiYgdGhpcy5kZXNjcmlwdG9yLmRhdGFQcm92aWRlcj8uc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nVXNlRGF0YVByb3ZpZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nRGF0YVByb3ZpZGVyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PGFueT4odGhpcy5kZXNjcmlwdG9yLmRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbml0IHZhbHVlc1xuICAgICAgICB0aGlzLnNldEZpZWxkTGFiZWxWYWx1ZSh0aGlzLmZvcm1Db250cm9sIS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbnRyb2whLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUNvbnRyb2whLnZhbHVlKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVByb3AgPSB0aGlzLmRlc2NyaXB0b3IuZGlhbG9nVGFibGVEZXNjcmlwdG9yIS50cmFja1Byb3BlcnR5ID8/IHRoaXMuZGVzY3JpcHRvci5kaWFsb2dUYWJsZURlc2NyaXB0b3IhLm1vZGVsLmlkUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVQcm9wICYmIHR5cGVvZiBwcmV2ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgY3VyciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZbY29tcGFyZVByb3BdID09PSBjdXJyW2NvbXBhcmVQcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldiA9PT0gY3VycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmllbGRMYWJlbFZhbHVlKHYpO1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLm5leHRFdmVudChNbmdGb3JtRmllbGRFdmVudFR5cGVFbnVtLlZhbHVlQ2hhbmdlLCBNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudCwgdGhpcywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHNbJ29uVmFsdWVDaGFuZ2UnXSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHNbJ29uVmFsdWVDaGFuZ2UnXSh0aGlzLmZpZWxkLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0uQ29tcG9uZW50TGlmZWN5Y2xlLCBNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudCwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBNbmdGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fVklFV19JTklUXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyB3YXJuaW5nOiBmb3JtbHkgY2FsbHMgb24gZGVzdHJveSBiZWZvcmUgb24gaW5pdFxuXG4gICAgICAgIHRoaXMubG9va3VwRGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG5cbiAgICAgICAgLy8gZW1pdCBsaWZlY3ljbGUgZXZlbnRcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yPy5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9ERVNUUk9ZXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wZW5TZWxlY3REaWFsb2coKSB7XG4gICAgICAgIGlmICghdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCAmJiB0aGlzLmRpYWxvZ1VzZURhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dJc0xvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtczogRGF0YUxpc3RQYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgbGltaXQ6IDUwLFxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuZGVzY3JpcHRvclxuICAgICAgICAgICAgICAgICAgICAuZGlhbG9nVGFibGVEZXNjcmlwdG9yIS5zb3J0cy5maWx0ZXIocyA9PiBzLmRlZmF1bHRJc0VuYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAocyA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IHMucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc2NlbmRpbmc6IHMuZGVmYXVsdElzQXNjZW5kaW5nXG4gICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5sb29rdXBEYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24gPSB0b09ic2VydmFibGUodGhpcy5kZXNjcmlwdG9yLmRhdGFQcm92aWRlcj8ubG9va3VwKHBhcmFtcywgdGhpcy5kaWFsb2dEYXRhUHJvdmlkZXJTZXJ2aWNlKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhTGlzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlcyA/PyBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQ291bnQ6IHJlcz8ubGVuZ3RoID8/IDBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtc1N1YmplY3QubmV4dChkYXRhTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nQXJlSXRlbXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0lzTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLm5leHRFdmVudChNbmdGb3JtRmllbGRFdmVudFR5cGVFbnVtLkRhdGFQcm92aWRlciwgTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dDb21wb25lbnQsIHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50U3VidHlwZTogJ0xvb2t1cE5leHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHQ6IGRhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nSXNMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLm5leHRFdmVudChNbmdGb3JtRmllbGRFdmVudFR5cGVFbnVtLkRhdGFQcm92aWRlciwgTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dDb21wb25lbnQsIHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50U3VidHlwZTogJ0xvb2t1cEVycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0OiBlcnJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW5nRXJyb3IgPSBFcnJvclV0aWwuZnJvbVN1YnNjcmliZUVycm9yKGVyciwgJ01uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50RXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKG1uZ0Vycm9yLCBFcnJvclV0aWwuZ2V0RXJyb3JMb2dMZXZlbChtbmdFcnJvcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc0RpYWxvZ1Zpc2libGUgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5EaWFsb2dMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50RGlhbG9nU3VidHlwZS5WSVNJQklMSVRZLFxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGlvbkNoYW5nZShpdGVtOiBhbnkpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICAgIH1cblxuICAgIG9uQ2FwdGlvbkNtcEluc3QoaW5zdGFuY2U6IGFueSkge1xuICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0uRGlhbG9nTGlmZWN5Y2xlLCBNbmdGb3JtbHlGaWVsZExvb2t1cERpYWxvZ0NvbXBvbmVudCwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBNbmdGb3JtRmllbGRFdmVudERpYWxvZ1N1YnR5cGUuVEFCTEVfQ0FQVElPTl9DT01QT05FTlRfSU5TVEFOQ0UsXG4gICAgICAgICAgICBjYXB0aW9uQ29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQ29sdW1uQWN0aW9uQ21wSW5zdChpbnN0YW5jZTogYW55KSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5EaWFsb2dMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50RGlhbG9nU3VidHlwZS5UQUJMRV9DT0xVTU5fQUNUSU9OU19DT01QT05FTlRfSU5TVEFOQ0UsXG4gICAgICAgICAgICBjYXB0aW9uQ29tcG9uZW50SW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBoaWRlRGlhbG9nKCkge1xuICAgICAgICB0aGlzLmlzRGlhbG9nVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5EaWFsb2dMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkTG9va3VwRGlhbG9nQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50RGlhbG9nU3VidHlwZS5WSVNJQklMSVRZLFxuICAgICAgICAgICAgZGlhbG9nVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkSXRlbSgpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRpYWxvZ1NlbGVjdGVkSXRlbSk7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaWFsb2dBcmVJdGVtc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZpZWxkTGFiZWxWYWx1ZSh2YWx1ZTogVCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkTGFiZWxGb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsUHJvcGVydHkgPSB0aGlzLmRlc2NyaXB0b3Iub3B0aW9uc0xhYmVsUHJvcGVydHkgPz8gdGhpcy5kZXNjcmlwdG9yLmRpYWxvZ1RhYmxlRGVzY3JpcHRvcj8ubW9kZWwudGl0bGVQcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmICghbGFiZWxQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGxhYmVsIHByb3BlcnR5LicsIHtuYW1lOiAnTW5nRm9ybWx5RmllbGRMb29rdXBEaWFsb2dFcnJvcid9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmllbGRMYWJlbEZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlW2xhYmVsUHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkTGFiZWxGb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IFtjbGFzc109XCIncC1pbnB1dGdyb3VwIG1uZy1kcm9wZG93bi1kaWFsb2cnICsgZGVzY3JpcHRvci5pbnB1dENsYXNzTmFtZVwiIFtjbGFzcy5wLWlucHV0dGV4dC1zbV09XCJkZXNjcmlwdG9yLmlzU2l6ZVNtYWxsXCIgW2NsYXNzLnAtaW5wdXR0ZXh0LWxnXT1cImRlc2NyaXB0b3IuaXNTaXplTGFyZ2VcIj5cbiAgICA8aW5wdXQgcElucHV0VGV4dCB0eXBlPVwidGV4dFwiIFtpZF09XCIkYW55KGtleSlcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCIgW2Zvcm1Db250cm9sXT1cImZpZWxkTGFiZWxGb3JtQ29udHJvbFwiIC8+XG4gICAgQGlmICghcHJvcHMucmVxdWlyZWQgJiYgZm9ybUNvbnRyb2wudmFsdWUgJiYgIWZvcm1Db250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgIDxpIGNsYXNzPVwibW5nLWRyb3Bkb3duLWNsZWFyLWljb24gcGkgcGktdGltZXNcIiAoY2xpY2spPVwiY2xlYXIoKVwiPjwvaT5cbiAgICB9XG4gICAgPGJ1dHRvblxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIHBSaXBwbGVcbiAgICAgICAgY2xhc3M9XCJtbmctZHJvcGRvd24tZGlhbG9nLXNlYXJjaC1idXR0b25cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2xhYmVsXT1cIidnZW5lcmFsLnNlYXJjaCcgfCB0cmFuc2xhdGU6IHtpdGVtOiAnJ31cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwib3BlblNlbGVjdERpYWxvZygpXCI+PC9idXR0b24+XG48L2Rpdj5cblxuPHAtZGlhbG9nXG4gICAgWyh2aXNpYmxlKV09XCJpc0RpYWxvZ1Zpc2libGVcIlxuICAgIFtkcmFnZ2FibGVdPVwiZmFsc2VcIlxuICAgIFtoZWFkZXJdPVwiJ2dlbmVyYWwuc2VhcmNoJyB8IHRyYW5zbGF0ZToge2l0ZW06IHByb3BzLmxhYmVsIX1cIlxuICAgIFttb2RhbF09XCJ0cnVlXCJcbiAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgIHN0eWxlQ2xhc3M9XCJwLWZsdWlkIG1uZy1kaWFsb2cgbW5nLWZvcm1seS1maWVsZC1sb29rdXAtZGlhbG9nXCI+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIiBtbmdEaWFsb2dLZXlkb3duSGFuZGxlcj5cbiAgICAgICAgPG1uZy10YWJsZVxuICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci5kaWFsb2dUYWJsZURlc2NyaXB0b3IhXCJcbiAgICAgICAgICAgIFtkYXRhUHJvdmlkZXJdPVwiZGVzY3JpcHRvci5kaWFsb2dUYWJsZURhdGFQcm92aWRlclwiXG4gICAgICAgICAgICBbcmVzdWx0XT1cImFkZEl0ZW1zQXN5bmNcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbkVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCInc2luZ2xlJ1wiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJkaWFsb2dJc0xvYWRpbmckXCJcbiAgICAgICAgICAgIFtjYXB0aW9uQ29tcG9uZW50XT1cImNvbmZpZy50YWJsZT8uY2FwdGlvbkNvbXBvbmVudFwiXG4gICAgICAgICAgICBbY29sdW1uQ3VzdG9tTGFzdENvbXBvbmVudF09XCJjb25maWcudGFibGU/LmNvbHVtbkFjdGlvbkNvbXBvbmVudFwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKGNhcHRpb25Db21wb25lbnRJbnN0YW5jZSk9XCJvbkNhcHRpb25DbXBJbnN0KCRldmVudClcIlxuICAgICAgICAgICAgKGNvbHVtbkN1c3RvbUxhc3RDb21wb25lbnRJbnN0YW5jZSk9XCJvbkNvbHVtbkFjdGlvbkNtcEluc3QoJGV2ZW50KVwiPlxuICAgICAgICA8L21uZy10YWJsZT5cbiAgICAgICAgPHAtbWVzc2FnZXMgW3ZhbHVlXT1cImRpYWxvZ01lc3NhZ2VzXCI+PC9wLW1lc3NhZ2VzPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwiJ2dlbmVyYWwuY2FuY2VsJyB8IHRyYW5zbGF0ZVwiIGljb249XCJwaSBwaS10aW1lc1wiIGNsYXNzPVwicC1idXR0b24tdGV4dFwiIChjbGljayk9XCJoaWRlRGlhbG9nKClcIj48L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ2dlbmVyYWwuc2VsZWN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRJdGVtKClcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiKGRpYWxvZ0lzTG9hZGluZyQgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICAgICAgbG9hZGluZ0ljb249XCJwaSBwaS1zcGluIHBpLXNwaW5uZXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uZGlzYWJsZWRcIj48L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9wLWRpYWxvZz5cbiJdfQ==
@@ -212,10 +212,10 @@ export class MngFormlyFieldTableDialogFormComponent extends FieldType {
212
212
  return false;
213
213
  }
214
214
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: MngFormlyFieldTableDialogFormComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
215
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: MngFormlyFieldTableDialogFormComponent, isStandalone: true, selector: "mng-formly-table-dialog-form-field", providers: [provideViewContainer(false)], usesInheritance: true, ngImport: i0, template: "<mng-action-table [descriptor]=\"descriptor.tableDescriptor\" [items]=\"items$\" [actions]=\"actions\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-row justify-content-end align-items-center table-header\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\"\n >{{ props.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n @for (action of toolbarRightActions; track action) {\n <mng-action [action]=\"action\"></mng-action>\n }\n </div>\n </ng-template>\n</mng-action-table>\n", styles: [".submit-button{display:none!important;visibility:hidden}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "queryParam", "dataProvider", "hostComponent", "route", "disabled", "loading", "selectedItems"], outputs: ["finish"] }, { kind: "component", type: MngActionTableComponent, selector: "mng-action-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "globalFilterFields", "actions", "captionComponent", "columnActionComponent", "columnActionMinWidth"], outputs: ["tableLoad", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }, { kind: "directive", type: MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
215
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: MngFormlyFieldTableDialogFormComponent, isStandalone: true, selector: "mng-formly-table-dialog-form-field", providers: [provideViewContainer(false)], usesInheritance: true, ngImport: i0, template: "<mng-action-table [descriptor]=\"descriptor.tableDescriptor\" [items]=\"items$\" [actions]=\"actions\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-row justify-content-end align-items-center table-header\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\"\n >{{ props.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n @for (action of toolbarRightActions; track action) {\n <mng-action [action]=\"action\"></mng-action>\n }\n </div>\n </ng-template>\n</mng-action-table>\n", styles: [".submit-button{display:none!important;visibility:hidden}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "dataListParams", "dataProvider", "hostComponent", "route", "disabled", "loading", "selectedItems"], outputs: ["finish"] }, { kind: "component", type: MngActionTableComponent, selector: "mng-action-table", inputs: ["descriptor", "items", "result", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "globalFilterFields", "actions", "captionComponent", "columnActionComponent", "columnActionMinWidth"], outputs: ["tableLoad", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }, { kind: "directive", type: MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
216
216
  }
217
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: MngFormlyFieldTableDialogFormComponent, decorators: [{
218
218
  type: Component,
219
219
  args: [{ standalone: true, selector: 'mng-formly-table-dialog-form-field', imports: [TranslateModule, MngActionComponent, MngActionTableComponent, MngTemplateDirective], providers: [provideViewContainer(false)], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mng-action-table [descriptor]=\"descriptor.tableDescriptor\" [items]=\"items$\" [actions]=\"actions\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-row justify-content-end align-items-center table-header\">\n <label class=\"mng-datatable-form-label p-0 m-0\" [for]=\"key\"\n >{{ props.label! | translate }}\n @if (props.required && props['hideRequiredMarker'] !== true) {\n <span>*</span>\n }\n </label>\n @for (action of toolbarRightActions; track action) {\n <mng-action [action]=\"action\"></mng-action>\n }\n </div>\n </ng-template>\n</mng-action-table>\n", styles: [".submit-button{display:none!important;visibility:hidden}\n"] }]
220
220
  }], ctorParameters: () => [{ type: i0.Injector }] });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9maWVsZHMvZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUU3RyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxlQUFlLEVBQWMsYUFBYSxFQUF5QixvQkFBb0IsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdILE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLHNCQUFzQixFQUFFLGdCQUFnQixFQUF3QixzQkFBc0IsRUFBRSw0QkFBNEIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRXZLLE9BQU8sRUFBQywwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzNILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxnQkFB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QyxXQUdyQyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQyxhQUNsRixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLG1CQUN2Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0ZpZWxkVHlwZX0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgb2YsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0FjdGlvbkJ1dHRvbkRlc2NyaXB0b3IsIEFjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkRlc2NyaXB0b3JJbnN0LCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy9lZGl0b3InO1xuaW1wb3J0IHtBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSwgQWN0aW9uUG9zaXRpb25FbnVtLCBGaWVsZE1hbnlFZGl0b3JBY3Rpb25FbnVtfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7TW5nSW50ZXJuYWxFcnJvcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQ29tbW9uc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7cHJvdmlkZVZpZXdDb250YWluZXJ9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL3ZpZXcnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXJ9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3N0eWxlcyc7XG5pbXBvcnQge1N0eWxlTGV2ZWxFbnVtLCBTdHlsZVNpemVFbnVtfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zdHlsZXMvbW9kZWxzJztcbmltcG9ydCB7TW5nQWN0aW9uQ29tcG9uZW50LCBNbmdBY3Rpb25UYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vYWN0aW9uJztcbmltcG9ydCB7QWN0aW9uQ29udGV4dFZhbGlkYXRpb259IGZyb20gJy4uLy4uLy4uLy4uL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUsIE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0Zvcm1seUZpZWxkQ29uZmlnfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm1seS10YWJsZS1kaWFsb2ctZm9ybS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTW5nQWN0aW9uQ29tcG9uZW50LCBNbmdBY3Rpb25UYWJsZUNvbXBvbmVudCwgTW5nVGVtcGxhdGVEaXJlY3RpdmVdLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVWaWV3Q29udGFpbmVyKGZhbHNlKV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQ8VCA9IGFueSwgRVQgPSBhbnk+IGV4dGVuZHMgRmllbGRUeXBlPE1uZ0Zvcm1seUZpZWxkQ29uZmlnPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgZGVzY3JpcHRvciE6IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+O1xuXG4gICAgcHVibGljIGl0ZW1zU3ViamVjdDogU3ViamVjdDxBcnJheTxUPj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgICBwdWJsaWMgaXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFQ+PiA9IHRoaXMuaXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHVibGljIGFjdGlvbnM6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3JJbnN0PFQ+PiA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9ySW5zdDxUPj4gPSBbXTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBwcml2YXRlIGlzRGlzYWJsZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBpc0VuYWJsZWQkID0gdGhpcy5pc0Rpc2FibGVkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBtYXAoZSA9PiAhZSlcbiAgICApO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IHRoaXMucHJvcHMuZGVzY3JpcHRvciBhcyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPjtcbiAgICAgICAgdGhpcy5wcm9wcy5maWVsZENvbXBvbmVudCA9IHRoaXM7XG5cbiAgICAgICAgY29uc3QgaGFzVmlld0FjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5maWVsZEFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uVmlldyk7XG4gICAgICAgIGNvbnN0IGhhc0FkZEFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5maWVsZEFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uQWRkKTtcbiAgICAgICAgY29uc3QgaGFzRWRpdEFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5maWVsZEFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uRWRpdCk7XG4gICAgICAgIGNvbnN0IGhhc0RlbGV0ZUFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5maWVsZEFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uRGVsZXRlKTtcblxuICAgICAgICBpZiAoaGFzVmlld0FjdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0FjdGlvbiA9IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IuY3JlYXRlKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdEZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsICdkZXRhaWxzJywge1xuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IHRoaXMuZGVzY3JpcHRvci5lZGl0b3IubW9kZWwudHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQcm9wZXJ0eTogdGhpcy5kZXNjcmlwdG9yLnByb3BlcnR5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0NsaWNrKVxuICAgICAgICAgICAgICAgIC53aXRoRGlhbG9nU2l6ZShTdHlsZVNpemVFbnVtLlNtYWxsKVxuICAgICAgICAgICAgICAgIC53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGN0eC5wYXJhbWV0ZXJzLml0ZW0gfHwgKHt9IGFzIFQpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZpZXdBY3Rpb24ud2l0aEVkaXRvckFjdGlvbnMoW0FjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IuZm9yU2Vjb25kYXJ5KHZpZXdBY3Rpb24sIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLkNhbmNlbCldKTtcbiAgICAgICAgICAgIHZpZXdBY3Rpb24uYnV0dG9uLndpdGhMYWJlbChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKHZpZXdBY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0FkZEFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYWRkQWN0aW9uID0gQWN0aW9uRWRpdG9yRGVzY3JpcHRvci5jcmVhdGUodGhpcy5kZXNjcmlwdG9yLnRhYmxldmlld0Rlc2NyaXB0b3IuYWRkRWRpdG9yLCAnYWRkJywge1xuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IHRoaXMuZGVzY3JpcHRvci5lZGl0b3IubW9kZWwudHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQcm9wZXJ0eTogdGhpcy5kZXNjcmlwdG9yLnByb3BlcnR5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodClcbiAgICAgICAgICAgICAgICAud2l0aERpYWxvZ1NpemUoU3R5bGVTaXplRW51bS5TbWFsbClcbiAgICAgICAgICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IobmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKS53aXRoU3R5bGVDbGFzcyhuZXcgQnV0dG9uU3R5bGVCdWlsZGVyKCkud2l0aFNpemUoU3R5bGVTaXplRW51bS5FeHRyYVNtYWxsKSkpXG4gICAgICAgICAgICAgICAgLndpdGhGZXRjaEZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGN0eC5wYXJhbWV0ZXJzLml0ZW0gfHwgKHt9IGFzIFQpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoU3VibWl0RnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdHgucGFyYW1ldGVycy5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgTW5nSW50ZXJuYWxFcnJvcihgTm8gaXRlbSB3YXMgcHJvdmlkZWQgaW4gY29udGV4dCwgYWRkIGNhbm5vdCBiZSBkb25lLmAsIHtuYW1lOiAnRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnRFcnJvcid9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU3RhdGUuc3VibWl0dGVkT24gPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZSwgY3R4LnBhcmFtZXRlcnMuaXRlbV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUnVuTm90aWZpY2F0aW9uU3VjY2Vzcyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhSdW5Ob3RpZmljYXRpb25FcnJvcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhJc1Zpc2libGVGdW5jdGlvbigoKSA9PiBvZighdGhpcy5vcHRpb25zPy5mb3JtU3RhdGUuZGlzYWJsZWQpKVxuICAgICAgICAgICAgICAgIC53aXRoSXNFbmFibGVkRnVuY3Rpb24oKCkgPT4gdGhpcy5pc0VuYWJsZWQkKTtcbiAgICAgICAgICAgIGFkZEFjdGlvbi5idXR0b24ud2l0aExhYmVsKG51bGwpLndpdGhJY29uKCdwaSBwaS1wbHVzJyk7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbnMucHVzaChhZGRBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0QWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0QWN0aW9uID0gQWN0aW9uRWRpdG9yRGVzY3JpcHRvci5jcmVhdGUodGhpcy5kZXNjcmlwdG9yLnRhYmxldmlld0Rlc2NyaXB0b3IuZWRpdEVkaXRvciwgJ2VkaXQnLCB7XG4gICAgICAgICAgICAgICAgcGFyZW50VHlwZTogdGhpcy5kZXNjcmlwdG9yLmVkaXRvci5tb2RlbC50eXBlLFxuICAgICAgICAgICAgICAgIHBhcmVudFByb3BlcnR5OiB0aGlzLmRlc2NyaXB0b3IucHJvcGVydHlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lKVxuICAgICAgICAgICAgICAgIC53aXRoRGlhbG9nU2l6ZShTdHlsZVNpemVFbnVtLlNtYWxsKVxuICAgICAgICAgICAgICAgIC53aXRoQnV0dG9uRGVzY3JpcHRvcihuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpLndpdGhTdHlsZUNsYXNzKG5ldyBCdXR0b25TdHlsZUJ1aWxkZXIoKS53aXRoU2l6ZShTdHlsZVNpemVFbnVtLkV4dHJhU21hbGwpKSlcbiAgICAgICAgICAgICAgICAud2l0aEZldGNoRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtIHx8ICh7fSBhcyBUKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aFN1Ym1pdEZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3R4LnBhcmFtZXRlcnMuaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IE1uZ0ludGVybmFsRXJyb3IoYE5vIGl0ZW0gd2FzIHByb3ZpZGVkIGluIGNvbnRleHQsIGVkaXQgY2Fubm90IGJlIGRvbmUuYCwge25hbWU6ICdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nRm9ybUNvbXBvbmVudEVycm9yJ30pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1TdGF0ZS5zdWJtaXR0ZWRPbiA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1Db250cm9sVmFsdWUgPSBbLi4udGhpcy5mb3JtQ29udHJvbC52YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWVbY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YT8uWydpdGVtSW5kZXgnXV0gPSBjdHgucGFyYW1ldGVycy5pdGVtO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUnVuTm90aWZpY2F0aW9uU3VjY2Vzcyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhSdW5Ob3RpZmljYXRpb25FcnJvcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhJc1Zpc2libGVGdW5jdGlvbihjdHggPT4gKHRoaXMuaGlkZUFjdGlvbnNGb3JSb3dXaXRoRGVmYXVsdExvY2FsaXphdGlvbihjdHgpID8gb2YoZmFsc2UpIDogb2YoIXRoaXMuZm9ybUNvbnRyb2w/LmRpc2FibGVkKSkpXG4gICAgICAgICAgICAgICAgLndpdGhJc0VuYWJsZWRGdW5jdGlvbigoKSA9PiB0aGlzLmlzRW5hYmxlZCQpO1xuICAgICAgICAgICAgZWRpdEFjdGlvbi5idXR0b24ud2l0aExhYmVsKG51bGwpLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKGVkaXRBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNEZWxldGVBY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZUFjdGlvbiA9IEFjdGlvbkRlc2NyaXB0b3IuZnJvbU1vZGVsKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdEZXNjcmlwdG9yLm1vZGVsLCAnZGVsZXRlJywge1xuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IHRoaXMuZGVzY3JpcHRvci5lZGl0b3IubW9kZWwudHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQcm9wZXJ0eTogdGhpcy5kZXNjcmlwdG9yLnByb3BlcnR5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZSlcbiAgICAgICAgICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IobmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKS53aXRoU3R5bGVDbGFzcyhuZXcgQnV0dG9uU3R5bGVCdWlsZGVyKFN0eWxlTGV2ZWxFbnVtLkRhbmdlcikud2l0aFNpemUoU3R5bGVTaXplRW51bS5FeHRyYVNtYWxsKSkpXG4gICAgICAgICAgICAgICAgLndpdGhSdW5GdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN0eC5wYXJhbWV0ZXJzLml0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IG5ldyBNbmdJbnRlcm5hbEVycm9yKGBObyBpdGVtIHdhcyBwcm92aWRlZCBpbiBjb250ZXh0LCBkZWxldGUgY2Fubm90IGJlIGRvbmUuYCwge25hbWU6ICdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nRm9ybUNvbXBvbmVudEVycm9yJ30pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtQ29udHJvbFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSBhcyBBcnJheTxUPjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVByb3BlcnR5ID0gdGhpcy5kZXNjcmlwdG9yLnRhYmxlRGVzY3JpcHRvci50cmFja1Byb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3IudHJhY2tQcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRlc2NyaXB0b3IudGFibGVEZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eEl0ZW06IGFueSA9IGN0eC5wYXJhbWV0ZXJzLml0ZW07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUHJvcGVydHkgJiYgY3R4SXRlbT8uW2NvbXBhcmVQcm9wZXJ0eV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBmb3JtQ29udHJvbFZhbHVlLmZpbHRlcigoaTogYW55KSA9PiBpW2NvbXBhcmVQcm9wZXJ0eV0gIT09IGN0eEl0ZW1bY29tcGFyZVByb3BlcnR5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGE/LlsnaXRlbUluZGV4J10gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlLnNwbGljZShjdHgucGFyYW1ldGVycy5hY3Rpb25EYXRhWydpdGVtSW5kZXgnXSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoWy4uLmZvcm1Db250cm9sVmFsdWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBNbmdJbnRlcm5hbEVycm9yKCdDYW5ub3QgY29tcGFyZSBpdGVtcywgcGxlYXNlIHByb3ZpZGUgbWFpbiB0YWJsZSBkYXRhIGtleSBwcm9wZXJ0eSBvciBtb2RlbCBpZCBwcm9wZXJ0eS4nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnRFcnJvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY3R4SXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC53aXRoUnVuTm90aWZpY2F0aW9uRXJyb3IodW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC53aXRoSXNWaXNpYmxlRnVuY3Rpb24oY3R4ID0+ICh0aGlzLmhpZGVBY3Rpb25zRm9yUm93V2l0aERlZmF1bHRMb2NhbGl6YXRpb24oY3R4KSA/IG9mKGZhbHNlKSA6IG9mKCF0aGlzLm9wdGlvbnM/LmZvcm1TdGF0ZS5kaXNhYmxlZCkpKVxuICAgICAgICAgICAgICAgIC53aXRoSXNFbmFibGVkRnVuY3Rpb24oKCkgPT4gdGhpcy5pc0VuYWJsZWQkKTtcbiAgICAgICAgICAgIGRlbGV0ZUFjdGlvbi5idXR0b24ud2l0aExhYmVsKG51bGwpLndpdGhJY29uKCdwaSBwaS10cmFzaCcpO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2goZGVsZXRlQWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnRoaXMuZGVzY3JpcHRvci5hY3Rpb25zKTtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sYmFyUmlnaHRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbml0IHZhbHVlc1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbWl0IGxpZmVjeWNsZSBldmVudFxuICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0uQ29tcG9uZW50TGlmZWN5Y2xlLCBNbmdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nRm9ybUNvbXBvbmVudCwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBNbmdGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fSU5JVFxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkpLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNTdWJqZWN0Lm5leHQodik7XG5cbiAgICAgICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0uVmFsdWVDaGFuZ2UsIE1uZ0Zvcm1seUZpZWxkVGFibGVEaWFsb2dGb3JtQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wc1snb25WYWx1ZUNoYW5nZSddKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wc1snb25WYWx1ZUNoYW5nZSddKHRoaXMuZmllbGQsIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcblxuICAgICAgICB0aGlzLmlzRGlzYWJsZWRTdWJqZWN0Lm5leHQodGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZCk7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKCkuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnRElTQUJMRUQnICYmICF0aGlzLmlzRGlzYWJsZWRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09ICdESVNBQkxFRCcgJiYgdGhpcy5pc0Rpc2FibGVkU3ViamVjdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkVGFibGVEaWFsb2dGb3JtQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9WSUVXX0lOSVRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyB3YXJuaW5nOiBmb3JtbHkgY2FsbHMgb24gZGVzdHJveSBiZWZvcmUgb24gaW5pdFxuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICAvLyBlbWl0IGxpZmVjeWNsZSBldmVudFxuICAgICAgICB0aGlzLmRlc2NyaXB0b3I/Lm5leHRFdmVudChNbmdGb3JtRmllbGRFdmVudFR5cGVFbnVtLkNvbXBvbmVudExpZmVjeWNsZSwgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQsIHRoaXMsIHtcbiAgICAgICAgICAgIGV2ZW50U3VidHlwZTogTW5nRm9ybUZpZWxkRXZlbnRDb21wb25lbnRTdWJ0eXBlLk9OX0RFU1RST1lcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlQWN0aW9uc0ZvclJvd1dpdGhEZWZhdWx0TG9jYWxpemF0aW9uKGN0eDogQWN0aW9uQ29udGV4dFZhbGlkYXRpb248VD4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICgoY3R4LnBhcmFtZXRlcnMuaXRlbSBhcyBhbnkpW3RoaXMuZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3IubG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkhXSA9PT0gdGhpcy5pbmplY3Rvci5nZXQoTW5nQ29tbW9uc1NlcnZpY2UpLmRlZmF1bHREYXRhTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIiwiPG1uZy1hY3Rpb24tdGFibGUgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3JcIiBbaXRlbXNdPVwiaXRlbXMkXCIgW2FjdGlvbnNdPVwiYWN0aW9uc1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtbmctZGF0YXRhYmxlLWZvcm0tbGFiZWwgcC0wIG0tMFwiIFtmb3JdPVwia2V5XCJcbiAgICAgICAgICAgICAgICA+e3sgcHJvcHMubGFiZWwhIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgQGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwcm9wc1snaGlkZVJlcXVpcmVkTWFya2VyJ10gIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIHRvb2xiYXJSaWdodEFjdGlvbnM7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uIFthY3Rpb25dPVwiYWN0aW9uXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tbmctYWN0aW9uLXRhYmxlPlxuIl19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9maWVsZHMvZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS9mb3JtbHktZmllbGQtdGFibGUtZGlhbG9nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQix1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUU3RyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxlQUFlLEVBQWMsYUFBYSxFQUF5QixvQkFBb0IsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzdILE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLHNCQUFzQixFQUFFLGdCQUFnQixFQUF3QixzQkFBc0IsRUFBRSw0QkFBNEIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRXZLLE9BQU8sRUFBQywwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzNILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBQyxnQkFB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QyxXQUdyQyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQyxhQUNsRixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLG1CQUN2Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0ZpZWxkVHlwZX0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgb2YsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0FjdGlvbkJ1dHRvbkRlc2NyaXB0b3IsIEFjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkRlc2NyaXB0b3JJbnN0LCBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuaW1wb3J0IHtGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy9lZGl0b3InO1xuaW1wb3J0IHtBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bSwgQWN0aW9uUG9zaXRpb25FbnVtLCBGaWVsZE1hbnlFZGl0b3JBY3Rpb25FbnVtfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZXNjcmlwdG9ycy90eXBlcyc7XG5pbXBvcnQge01uZ1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7TW5nSW50ZXJuYWxFcnJvcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nQ29tbW9uc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7cHJvdmlkZVZpZXdDb250YWluZXJ9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL3ZpZXcnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXJ9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3N0eWxlcyc7XG5pbXBvcnQge1N0eWxlTGV2ZWxFbnVtLCBTdHlsZVNpemVFbnVtfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zdHlsZXMvbW9kZWxzJztcbmltcG9ydCB7TW5nQWN0aW9uQ29tcG9uZW50LCBNbmdBY3Rpb25UYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vYWN0aW9uJztcbmltcG9ydCB7QWN0aW9uQ29udGV4dFZhbGlkYXRpb259IGZyb20gJy4uLy4uLy4uLy4uL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUsIE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ0Zvcm1seUZpZWxkQ29uZmlnfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm1seS10YWJsZS1kaWFsb2ctZm9ybS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1maWVsZC10YWJsZS1kaWFsb2ctZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybWx5LWZpZWxkLXRhYmxlLWRpYWxvZy1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgTW5nQWN0aW9uQ29tcG9uZW50LCBNbmdBY3Rpb25UYWJsZUNvbXBvbmVudCwgTW5nVGVtcGxhdGVEaXJlY3RpdmVdLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVWaWV3Q29udGFpbmVyKGZhbHNlKV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQ8VCA9IGFueSwgRVQgPSBhbnk+IGV4dGVuZHMgRmllbGRUeXBlPE1uZ0Zvcm1seUZpZWxkQ29uZmlnPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgZGVzY3JpcHRvciE6IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8VCwgRVQ+O1xuXG4gICAgcHVibGljIGl0ZW1zU3ViamVjdDogU3ViamVjdDxBcnJheTxUPj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgICBwdWJsaWMgaXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFQ+PiA9IHRoaXMuaXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHVibGljIGFjdGlvbnM6IEFycmF5PEFjdGlvbkRlc2NyaXB0b3JJbnN0PFQ+PiA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9ySW5zdDxUPj4gPSBbXTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBwcml2YXRlIGlzRGlzYWJsZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBpc0VuYWJsZWQkID0gdGhpcy5pc0Rpc2FibGVkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBtYXAoZSA9PiAhZSlcbiAgICApO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvciA9IHRoaXMucHJvcHMuZGVzY3JpcHRvciBhcyBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPFQsIEVUPjtcbiAgICAgICAgdGhpcy5wcm9wcy5maWVsZENvbXBvbmVudCA9IHRoaXM7XG5cbiAgICAgICAgY29uc3QgaGFzVmlld0FjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5maWVsZEFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uVmlldyk7XG4gICAgICAgIGNvbnN0IGhhc0FkZEFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5maWVsZEFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uQWRkKTtcbiAgICAgICAgY29uc3QgaGFzRWRpdEFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5maWVsZEFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uRWRpdCk7XG4gICAgICAgIGNvbnN0IGhhc0RlbGV0ZUFjdGlvbiA9IHRoaXMuZGVzY3JpcHRvci5maWVsZEFjdGlvbnMuc29tZShhID0+IGEgPT09IEZpZWxkTWFueUVkaXRvckFjdGlvbkVudW0uRGVsZXRlKTtcblxuICAgICAgICBpZiAoaGFzVmlld0FjdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0FjdGlvbiA9IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IuY3JlYXRlKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdEZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsICdkZXRhaWxzJywge1xuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IHRoaXMuZGVzY3JpcHRvci5lZGl0b3IubW9kZWwudHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQcm9wZXJ0eTogdGhpcy5kZXNjcmlwdG9yLnByb3BlcnR5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0NsaWNrKVxuICAgICAgICAgICAgICAgIC53aXRoRGlhbG9nU2l6ZShTdHlsZVNpemVFbnVtLlNtYWxsKVxuICAgICAgICAgICAgICAgIC53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGN0eC5wYXJhbWV0ZXJzLml0ZW0gfHwgKHt9IGFzIFQpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZpZXdBY3Rpb24ud2l0aEVkaXRvckFjdGlvbnMoW0FjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IuZm9yU2Vjb25kYXJ5KHZpZXdBY3Rpb24sIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLkNhbmNlbCldKTtcbiAgICAgICAgICAgIHZpZXdBY3Rpb24uYnV0dG9uLndpdGhMYWJlbChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKHZpZXdBY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0FkZEFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgYWRkQWN0aW9uID0gQWN0aW9uRWRpdG9yRGVzY3JpcHRvci5jcmVhdGUodGhpcy5kZXNjcmlwdG9yLnRhYmxldmlld0Rlc2NyaXB0b3IuYWRkRWRpdG9yLCAnYWRkJywge1xuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IHRoaXMuZGVzY3JpcHRvci5lZGl0b3IubW9kZWwudHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQcm9wZXJ0eTogdGhpcy5kZXNjcmlwdG9yLnByb3BlcnR5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodClcbiAgICAgICAgICAgICAgICAud2l0aERpYWxvZ1NpemUoU3R5bGVTaXplRW51bS5TbWFsbClcbiAgICAgICAgICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IobmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKS53aXRoU3R5bGVDbGFzcyhuZXcgQnV0dG9uU3R5bGVCdWlsZGVyKCkud2l0aFNpemUoU3R5bGVTaXplRW51bS5FeHRyYVNtYWxsKSkpXG4gICAgICAgICAgICAgICAgLndpdGhGZXRjaEZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGN0eC5wYXJhbWV0ZXJzLml0ZW0gfHwgKHt9IGFzIFQpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoU3VibWl0RnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdHgucGFyYW1ldGVycy5pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgTW5nSW50ZXJuYWxFcnJvcihgTm8gaXRlbSB3YXMgcHJvdmlkZWQgaW4gY29udGV4dCwgYWRkIGNhbm5vdCBiZSBkb25lLmAsIHtuYW1lOiAnRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnRFcnJvcid9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU3RhdGUuc3VibWl0dGVkT24gPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZSwgY3R4LnBhcmFtZXRlcnMuaXRlbV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUnVuTm90aWZpY2F0aW9uU3VjY2Vzcyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhSdW5Ob3RpZmljYXRpb25FcnJvcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhJc1Zpc2libGVGdW5jdGlvbigoKSA9PiBvZighdGhpcy5vcHRpb25zPy5mb3JtU3RhdGUuZGlzYWJsZWQpKVxuICAgICAgICAgICAgICAgIC53aXRoSXNFbmFibGVkRnVuY3Rpb24oKCkgPT4gdGhpcy5pc0VuYWJsZWQkKTtcbiAgICAgICAgICAgIGFkZEFjdGlvbi5idXR0b24ud2l0aExhYmVsKG51bGwpLndpdGhJY29uKCdwaSBwaS1wbHVzJyk7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbnMucHVzaChhZGRBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0QWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0QWN0aW9uID0gQWN0aW9uRWRpdG9yRGVzY3JpcHRvci5jcmVhdGUodGhpcy5kZXNjcmlwdG9yLnRhYmxldmlld0Rlc2NyaXB0b3IuZWRpdEVkaXRvciwgJ2VkaXQnLCB7XG4gICAgICAgICAgICAgICAgcGFyZW50VHlwZTogdGhpcy5kZXNjcmlwdG9yLmVkaXRvci5tb2RlbC50eXBlLFxuICAgICAgICAgICAgICAgIHBhcmVudFByb3BlcnR5OiB0aGlzLmRlc2NyaXB0b3IucHJvcGVydHlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lKVxuICAgICAgICAgICAgICAgIC53aXRoRGlhbG9nU2l6ZShTdHlsZVNpemVFbnVtLlNtYWxsKVxuICAgICAgICAgICAgICAgIC53aXRoQnV0dG9uRGVzY3JpcHRvcihuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpLndpdGhTdHlsZUNsYXNzKG5ldyBCdXR0b25TdHlsZUJ1aWxkZXIoKS53aXRoU2l6ZShTdHlsZVNpemVFbnVtLkV4dHJhU21hbGwpKSlcbiAgICAgICAgICAgICAgICAud2l0aEZldGNoRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtIHx8ICh7fSBhcyBUKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aFN1Ym1pdEZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3R4LnBhcmFtZXRlcnMuaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IE1uZ0ludGVybmFsRXJyb3IoYE5vIGl0ZW0gd2FzIHByb3ZpZGVkIGluIGNvbnRleHQsIGVkaXQgY2Fubm90IGJlIGRvbmUuYCwge25hbWU6ICdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nRm9ybUNvbXBvbmVudEVycm9yJ30pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1TdGF0ZS5zdWJtaXR0ZWRPbiA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1Db250cm9sVmFsdWUgPSBbLi4udGhpcy5mb3JtQ29udHJvbC52YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWVbY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YT8uWydpdGVtSW5kZXgnXV0gPSBjdHgucGFyYW1ldGVycy5pdGVtO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUnVuTm90aWZpY2F0aW9uU3VjY2Vzcyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhSdW5Ob3RpZmljYXRpb25FcnJvcih1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UpXG4gICAgICAgICAgICAgICAgLndpdGhJc1Zpc2libGVGdW5jdGlvbihjdHggPT4gKHRoaXMuaGlkZUFjdGlvbnNGb3JSb3dXaXRoRGVmYXVsdExvY2FsaXphdGlvbihjdHgpID8gb2YoZmFsc2UpIDogb2YoIXRoaXMuZm9ybUNvbnRyb2w/LmRpc2FibGVkKSkpXG4gICAgICAgICAgICAgICAgLndpdGhJc0VuYWJsZWRGdW5jdGlvbigoKSA9PiB0aGlzLmlzRW5hYmxlZCQpO1xuICAgICAgICAgICAgZWRpdEFjdGlvbi5idXR0b24ud2l0aExhYmVsKG51bGwpLndpdGhJY29uKCdwaSBwaS1wZW5jaWwnKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKGVkaXRBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNEZWxldGVBY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZUFjdGlvbiA9IEFjdGlvbkRlc2NyaXB0b3IuZnJvbU1vZGVsKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdEZXNjcmlwdG9yLm1vZGVsLCAnZGVsZXRlJywge1xuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IHRoaXMuZGVzY3JpcHRvci5lZGl0b3IubW9kZWwudHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRQcm9wZXJ0eTogdGhpcy5kZXNjcmlwdG9yLnByb3BlcnR5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZSlcbiAgICAgICAgICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IobmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKS53aXRoU3R5bGVDbGFzcyhuZXcgQnV0dG9uU3R5bGVCdWlsZGVyKFN0eWxlTGV2ZWxFbnVtLkRhbmdlcikud2l0aFNpemUoU3R5bGVTaXplRW51bS5FeHRyYVNtYWxsKSkpXG4gICAgICAgICAgICAgICAgLndpdGhSdW5GdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWN0eC5wYXJhbWV0ZXJzLml0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IG5ldyBNbmdJbnRlcm5hbEVycm9yKGBObyBpdGVtIHdhcyBwcm92aWRlZCBpbiBjb250ZXh0LCBkZWxldGUgY2Fubm90IGJlIGRvbmUuYCwge25hbWU6ICdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nRm9ybUNvbXBvbmVudEVycm9yJ30pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBmb3JtQ29udHJvbFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSBhcyBBcnJheTxUPjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVByb3BlcnR5ID0gdGhpcy5kZXNjcmlwdG9yLnRhYmxlRGVzY3JpcHRvci50cmFja1Byb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3IudHJhY2tQcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRlc2NyaXB0b3IudGFibGVEZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eEl0ZW06IGFueSA9IGN0eC5wYXJhbWV0ZXJzLml0ZW07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUHJvcGVydHkgJiYgY3R4SXRlbT8uW2NvbXBhcmVQcm9wZXJ0eV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBmb3JtQ29udHJvbFZhbHVlLmZpbHRlcigoaTogYW55KSA9PiBpW2NvbXBhcmVQcm9wZXJ0eV0gIT09IGN0eEl0ZW1bY29tcGFyZVByb3BlcnR5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGE/LlsnaXRlbUluZGV4J10gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlLnNwbGljZShjdHgucGFyYW1ldGVycy5hY3Rpb25EYXRhWydpdGVtSW5kZXgnXSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoWy4uLmZvcm1Db250cm9sVmFsdWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBNbmdJbnRlcm5hbEVycm9yKCdDYW5ub3QgY29tcGFyZSBpdGVtcywgcGxlYXNlIHByb3ZpZGUgbWFpbiB0YWJsZSBkYXRhIGtleSBwcm9wZXJ0eSBvciBtb2RlbCBpZCBwcm9wZXJ0eS4nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnRFcnJvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY3R4SXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC53aXRoUnVuTm90aWZpY2F0aW9uRXJyb3IodW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgIC53aXRoSXNWaXNpYmxlRnVuY3Rpb24oY3R4ID0+ICh0aGlzLmhpZGVBY3Rpb25zRm9yUm93V2l0aERlZmF1bHRMb2NhbGl6YXRpb24oY3R4KSA/IG9mKGZhbHNlKSA6IG9mKCF0aGlzLm9wdGlvbnM/LmZvcm1TdGF0ZS5kaXNhYmxlZCkpKVxuICAgICAgICAgICAgICAgIC53aXRoSXNFbmFibGVkRnVuY3Rpb24oKCkgPT4gdGhpcy5pc0VuYWJsZWQkKTtcbiAgICAgICAgICAgIGRlbGV0ZUFjdGlvbi5idXR0b24ud2l0aExhYmVsKG51bGwpLndpdGhJY29uKCdwaSBwaS10cmFzaCcpO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2goZGVsZXRlQWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnRoaXMuZGVzY3JpcHRvci5hY3Rpb25zKTtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJSaWdodDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sYmFyUmlnaHRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbml0IHZhbHVlc1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShbXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlbWl0IGxpZmVjeWNsZSBldmVudFxuICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0uQ29tcG9uZW50TGlmZWN5Y2xlLCBNbmdGb3JtbHlGaWVsZFRhYmxlRGlhbG9nRm9ybUNvbXBvbmVudCwgdGhpcywge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBNbmdGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fSU5JVFxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgc3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkpLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNTdWJqZWN0Lm5leHQodik7XG5cbiAgICAgICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IubmV4dEV2ZW50KE1uZ0Zvcm1GaWVsZEV2ZW50VHlwZUVudW0uVmFsdWVDaGFuZ2UsIE1uZ0Zvcm1seUZpZWxkVGFibGVEaWFsb2dGb3JtQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wc1snb25WYWx1ZUNoYW5nZSddKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wc1snb25WYWx1ZUNoYW5nZSddKHRoaXMuZmllbGQsIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcblxuICAgICAgICB0aGlzLmlzRGlzYWJsZWRTdWJqZWN0Lm5leHQodGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZCk7XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKCkuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnRElTQUJMRUQnICYmICF0aGlzLmlzRGlzYWJsZWRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgIT09ICdESVNBQkxFRCcgJiYgdGhpcy5pc0Rpc2FibGVkU3ViamVjdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5uZXh0RXZlbnQoTW5nRm9ybUZpZWxkRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIE1uZ0Zvcm1seUZpZWxkVGFibGVEaWFsb2dGb3JtQ29tcG9uZW50LCB0aGlzLCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IE1uZ0Zvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9WSUVXX0lOSVRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvLyB3YXJuaW5nOiBmb3JtbHkgY2FsbHMgb24gZGVzdHJveSBiZWZvcmUgb24gaW5pdFxuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICAvLyBlbWl0IGxpZmVjeWNsZSBldmVudFxuICAgICAgICB0aGlzLmRlc2NyaXB0b3I/Lm5leHRFdmVudChNbmdGb3JtRmllbGRFdmVudFR5cGVFbnVtLkNvbXBvbmVudExpZmVjeWNsZSwgTW5nRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQsIHRoaXMsIHtcbiAgICAgICAgICAgIGV2ZW50U3VidHlwZTogTW5nRm9ybUZpZWxkRXZlbnRDb21wb25lbnRTdWJ0eXBlLk9OX0RFU1RST1lcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlQWN0aW9uc0ZvclJvd1dpdGhEZWZhdWx0TG9jYWxpemF0aW9uKGN0eDogQWN0aW9uQ29udGV4dFZhbGlkYXRpb248VD4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICgoY3R4LnBhcmFtZXRlcnMuaXRlbSBhcyBhbnkpW3RoaXMuZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3IubG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkhXSA9PT0gdGhpcy5pbmplY3Rvci5nZXQoTW5nQ29tbW9uc1NlcnZpY2UpLmRlZmF1bHREYXRhTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIiwiPG1uZy1hY3Rpb24tdGFibGUgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci50YWJsZURlc2NyaXB0b3JcIiBbaXRlbXNdPVwiaXRlbXMkXCIgW2FjdGlvbnNdPVwiYWN0aW9uc1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtbmctZGF0YXRhYmxlLWZvcm0tbGFiZWwgcC0wIG0tMFwiIFtmb3JdPVwia2V5XCJcbiAgICAgICAgICAgICAgICA+e3sgcHJvcHMubGFiZWwhIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgQGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwcm9wc1snaGlkZVJlcXVpcmVkTWFya2VyJ10gIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgQGZvciAoYWN0aW9uIG9mIHRvb2xiYXJSaWdodEFjdGlvbnM7IHRyYWNrIGFjdGlvbikge1xuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uIFthY3Rpb25dPVwiYWN0aW9uXCI+PC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tbmctYWN0aW9uLXRhYmxlPlxuIl19