@mediusinc/mng-commons 5.5.0-rc.4 → 6.0.0-rc.2

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 (267) hide show
  1. package/core/action/action-parameters.model.d.ts +4 -4
  2. package/core/data-providers/base.data-provider.d.ts +4 -7
  3. package/core/data-providers/lookup.data-provider.d.ts +2 -2
  4. package/core/descriptors/model.descriptor.d.ts +1 -7
  5. package/core/descriptors/tableview.descriptor.d.ts +5 -5
  6. package/core/helpers/route.d.ts +0 -1
  7. package/core/helpers/type-helpers.d.ts +8 -0
  8. package/core/index.d.ts +0 -3
  9. package/core/models/menu.model.d.ts +0 -4
  10. package/core/services/commons.service.d.ts +0 -32
  11. package/core/services/tokens/module-config.token.d.ts +0 -28
  12. package/esm2022/core/action/action-parameters.model.mjs +1 -1
  13. package/esm2022/core/data-providers/base.data-provider.mjs +2 -4
  14. package/esm2022/core/data-providers/lookup.data-provider.mjs +1 -1
  15. package/esm2022/core/descriptors/model.descriptor.mjs +1 -1
  16. package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
  17. package/esm2022/core/helpers/type-helpers.mjs +1 -1
  18. package/esm2022/core/index.mjs +1 -4
  19. package/esm2022/core/models/menu.model.mjs +1 -1
  20. package/esm2022/core/services/commons.service.mjs +1 -34
  21. package/esm2022/core/services/tokens/module-config.token.mjs +1 -1
  22. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +5 -86
  23. package/esm2022/filter/descriptors/filter.descriptor.mjs +7 -29
  24. package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +14 -41
  25. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +3 -3
  26. package/esm2022/model/class/data-providers/base-from-class-data-provider.factory.mjs +5 -0
  27. package/esm2022/model/class/descriptors/model-class.descriptor.mjs +28 -0
  28. package/esm2022/model/class/descriptors/type-class.descriptor.mjs +6 -0
  29. package/esm2022/model/class/helpers/model.mjs +53 -0
  30. package/esm2022/model/class/index.mjs +8 -0
  31. package/esm2022/model/class/mediusinc-mng-commons-model-class.mjs +5 -0
  32. package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +11 -6
  33. package/esm2022/model/descriptors/model.descriptor.mjs +11 -54
  34. package/esm2022/model/descriptors/type.descriptor.mjs +2 -10
  35. package/esm2022/model/index.mjs +1 -2
  36. package/esm2022/table/api/class/class-table-attribute-converter.mjs +80 -0
  37. package/esm2022/table/api/class/class-table-attribute.model.mjs +2 -0
  38. package/esm2022/table/api/class/class-table-data-provider.factory.mjs +5 -0
  39. package/esm2022/table/api/class/class-table-descriptor-helpers.mjs +99 -0
  40. package/esm2022/table/api/class/class-table-descriptor.factory.mjs +21 -0
  41. package/esm2022/table/api/class/index.mjs +6 -0
  42. package/esm2022/table/api/class/mediusinc-mng-commons-table-api-class.mjs +5 -0
  43. package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +14 -41
  44. package/esm2022/table/api/data-providers/table.data-provider.mjs +3 -9
  45. package/esm2022/table/api/descriptors/column.descriptor.mjs +8 -3
  46. package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +10 -77
  47. package/esm2022/table/api/descriptors/table.descriptor.mjs +3 -3
  48. package/esm2022/table/api/helpers/column-converter.mjs +25 -0
  49. package/esm2022/table/api/helpers/table-data-provider-descriptor-convert.mjs +4 -4
  50. package/esm2022/table/api/index.mjs +2 -4
  51. package/esm2022/table/api/models/table-columns.model.mjs +1 -1
  52. package/esm2022/table/components/column-value/column-value.component.mjs +4 -3
  53. package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +3 -3
  54. package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +5 -5
  55. package/esm2022/table/components/table/table.component.mjs +6 -8
  56. package/esm2022/tableview/action/components/action/action.component.mjs +1 -1
  57. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +10 -6
  58. package/esm2022/tableview/action/helpers/action-execution.mjs +1 -1
  59. package/esm2022/tableview/action/models/execution/action-context.model.mjs +1 -1
  60. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
  61. package/esm2022/tableview/action/services/action-executor.service.mjs +11 -11
  62. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +18 -3
  63. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +1 -1
  64. package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +13 -104
  65. package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +15 -62
  66. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +3 -63
  67. package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +17 -30
  68. package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +1 -1
  69. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +6 -29
  70. package/esm2022/tableview/api/action/descriptors/editor-action-descriptor.factory.mjs +21 -0
  71. package/esm2022/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.mjs +21 -0
  72. package/esm2022/tableview/api/action/descriptors/table-action-descriptor.factory.mjs +37 -0
  73. package/esm2022/tableview/api/action/descriptors/table-action-editor-descriptor.factory.mjs +40 -0
  74. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +25 -5
  75. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +1 -1
  76. package/esm2022/tableview/api/action/models/action-error.model.mjs +1 -1
  77. package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +1 -1
  78. package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +1 -1
  79. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
  80. package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +6 -6
  81. package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +3 -3
  82. package/esm2022/tableview/api/class/editor/class-editor-attribute-converter.mjs +85 -0
  83. package/esm2022/tableview/api/class/editor/class-editor-attribute.model.mjs +2 -0
  84. package/esm2022/tableview/api/class/editor/class-editor-data-provider.factory.mjs +5 -0
  85. package/esm2022/tableview/api/class/editor/class-editor-descriptor-helpers.mjs +95 -0
  86. package/esm2022/tableview/api/class/editor/class-editor-descriptor.factory.mjs +21 -0
  87. package/esm2022/tableview/api/class/index.mjs +13 -0
  88. package/esm2022/tableview/api/class/mediusinc-mng-commons-tableview-api-class.mjs +5 -0
  89. package/esm2022/tableview/api/class/tableview/class-tableview-attribute-converter.mjs +35 -0
  90. package/esm2022/tableview/api/class/tableview/class-tableview-attribute.model.mjs +2 -0
  91. package/esm2022/tableview/api/class/tableview/class-tableview-data-provider.factory.mjs +5 -0
  92. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor-helpers.mjs +111 -0
  93. package/esm2022/tableview/api/class/tableview/class-tableview-descriptor.factory.mjs +26 -0
  94. package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +14 -32
  95. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +40 -7
  96. package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +7 -73
  97. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +49 -134
  98. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +11 -2
  99. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +3 -5
  100. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +2 -18
  101. package/esm2022/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.mjs +51 -0
  102. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  103. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
  104. package/esm2022/tableview/api/index.mjs +8 -8
  105. package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +13 -51
  106. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +19 -11
  107. package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +19 -96
  108. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +29 -182
  109. package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +8 -6
  110. package/esm2022/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.mjs +4 -4
  111. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +117 -99
  112. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +164 -7
  113. package/esm2022/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.mjs +2 -0
  114. package/esm2022/tableview/api/tableview/models/tableview-descriptor-helper.type.mjs +2 -0
  115. package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +1 -1
  116. package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +1 -1
  117. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +6 -6
  118. package/esm2022/tableview/editor/helpers/editor-field.mjs +3 -3
  119. package/esm2022/tableview/editor/helpers/editor-formly.mjs +4 -4
  120. package/esm2022/tableview/editor/helpers/field-create.mjs +21 -0
  121. package/esm2022/tableview/index.mjs +3 -2
  122. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +1 -1
  123. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +3 -1
  124. package/fesm2022/mediusinc-mng-commons-core.mjs +687 -781
  125. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  126. package/fesm2022/mediusinc-mng-commons-filter.mjs +10 -113
  127. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  128. package/fesm2022/mediusinc-mng-commons-form-api.mjs +15 -42
  129. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  130. package/fesm2022/mediusinc-mng-commons-model-class.mjs +97 -0
  131. package/fesm2022/mediusinc-mng-commons-model-class.mjs.map +1 -0
  132. package/fesm2022/mediusinc-mng-commons-model.mjs +23 -137
  133. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  134. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs +204 -0
  135. package/fesm2022/mediusinc-mng-commons-table-api-class.mjs.map +1 -0
  136. package/fesm2022/mediusinc-mng-commons-table-api.mjs +55 -319
  137. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  138. package/fesm2022/mediusinc-mng-commons-table.mjs +14 -15
  139. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  140. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs +367 -0
  141. package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs.map +1 -0
  142. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +715 -1298
  143. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  144. package/fesm2022/mediusinc-mng-commons-tableview.mjs +67 -27
  145. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  146. package/filter/descriptors/filter-lookup.descriptor.d.ts +1 -26
  147. package/filter/descriptors/filter.descriptor.d.ts +5 -12
  148. package/form/api/data-providers/lookup-data-provider.factory.d.ts +17 -20
  149. package/form/api/data-providers/lookup.data-provider.d.ts +3 -3
  150. package/model/class/README.md +8 -0
  151. package/model/class/data-providers/base-from-class-data-provider.factory.d.ts +3 -0
  152. package/model/class/descriptors/model-class.descriptor.d.ts +12 -0
  153. package/model/class/descriptors/type-class.descriptor.d.ts +3 -0
  154. package/model/{helpers → class/helpers}/model.d.ts +1 -2
  155. package/model/class/index.d.ts +4 -0
  156. package/model/data-providers/base-from-type-data-provider.factory.d.ts +13 -6
  157. package/model/descriptors/model.descriptor.d.ts +12 -27
  158. package/model/descriptors/type.descriptor.d.ts +0 -5
  159. package/model/index.d.ts +0 -1
  160. package/package.json +25 -7
  161. package/table/api/class/README.md +10 -0
  162. package/table/api/{helpers/class-attribute-converter.d.ts → class/class-table-attribute-converter.d.ts} +2 -9
  163. package/table/api/{models → class}/class-table-attribute.model.d.ts +1 -1
  164. package/table/api/class/class-table-data-provider.factory.d.ts +4 -0
  165. package/table/api/{helpers/table-descriptor-helpers.d.ts → class/class-table-descriptor-helpers.d.ts} +2 -4
  166. package/table/api/class/class-table-descriptor.factory.d.ts +11 -0
  167. package/table/api/class/index.d.ts +5 -0
  168. package/table/api/data-providers/table-data-provider.factory.d.ts +17 -20
  169. package/table/api/data-providers/table.data-provider.d.ts +4 -12
  170. package/table/api/descriptors/column.descriptor.d.ts +5 -2
  171. package/table/api/descriptors/table-descriptor.factory.d.ts +3 -39
  172. package/table/api/descriptors/table.descriptor.d.ts +3 -3
  173. package/table/api/helpers/column-converter.d.ts +7 -0
  174. package/table/api/helpers/table-data-provider-descriptor-convert.d.ts +3 -3
  175. package/table/api/index.d.ts +1 -3
  176. package/table/api/models/table-columns.model.d.ts +2 -2
  177. package/table/components/column-value/column-value.component.d.ts +1 -0
  178. package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +1 -1
  179. package/table/components/filter/filter-form/filter-form.component.d.ts +1 -1
  180. package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +1 -1
  181. package/table/components/table/table.component.d.ts +0 -9
  182. package/tableview/action/components/action/action.component.d.ts +2 -2
  183. package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
  184. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +6 -5
  185. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +3 -3
  186. package/tableview/action/components/table/action-table.component.d.ts +3 -3
  187. package/tableview/action/helpers/action-execution.d.ts +1 -1
  188. package/tableview/action/models/execution/action-context.model.d.ts +3 -3
  189. package/tableview/action/models/execution/action-instance.model.d.ts +5 -5
  190. package/tableview/action/services/action-executor.service.d.ts +7 -7
  191. package/tableview/action/services/data-provider-executor.service.d.ts +16 -16
  192. package/tableview/action/services/view-container.service.d.ts +1 -1
  193. package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +1 -1
  194. package/tableview/api/action/descriptors/action-descriptor.factory.d.ts +20 -31
  195. package/tableview/api/action/descriptors/action-editor-descriptor.factory.d.ts +18 -25
  196. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +22 -40
  197. package/tableview/api/action/descriptors/action-link-descriptor.factory.d.ts +21 -13
  198. package/tableview/api/action/descriptors/action-link.descriptor.d.ts +3 -3
  199. package/tableview/api/action/descriptors/action.descriptor.d.ts +31 -33
  200. package/tableview/api/action/descriptors/editor-action-descriptor.factory.d.ts +21 -0
  201. package/tableview/api/action/descriptors/editor-action-editor-descriptor.factory.d.ts +21 -0
  202. package/tableview/api/action/descriptors/table-action-descriptor.factory.d.ts +36 -0
  203. package/tableview/api/action/descriptors/table-action-editor-descriptor.factory.d.ts +40 -0
  204. package/tableview/api/action/helpers/data-provider-executors.d.ts +13 -8
  205. package/tableview/api/action/models/action-descriptor.types.d.ts +2 -2
  206. package/tableview/api/action/models/action-error.model.d.ts +1 -1
  207. package/tableview/api/action/models/execution/action-context-validation.model.d.ts +2 -2
  208. package/tableview/api/action/models/execution/action-context.model.d.ts +2 -2
  209. package/tableview/api/action/models/execution/action-instance.model.d.ts +1 -1
  210. package/tableview/api/action/models/tableview-action-default-categories.model.d.ts +5 -5
  211. package/tableview/api/action/services/data-provider-executor.service.d.ts +26 -25
  212. package/tableview/api/class/README.md +13 -0
  213. package/tableview/api/{editor/helpers/class-attribute-converter.d.ts → class/editor/class-editor-attribute-converter.d.ts} +2 -2
  214. package/tableview/api/{editor/models/class-tableview-attribute.model.d.ts → class/editor/class-editor-attribute.model.d.ts} +1 -1
  215. package/tableview/api/class/editor/class-editor-data-provider.factory.d.ts +4 -0
  216. package/tableview/api/{editor/helpers/editor-descriptor-helpers.d.ts → class/editor/class-editor-descriptor-helpers.d.ts} +2 -5
  217. package/tableview/api/class/editor/class-editor-descriptor.factory.d.ts +11 -0
  218. package/tableview/api/class/index.d.ts +10 -0
  219. package/tableview/api/{tableview/helpers/class-attribute-converter.d.ts → class/tableview/class-tableview-attribute-converter.d.ts} +1 -1
  220. package/tableview/api/{tableview/models → class/tableview}/class-tableview-attribute.model.d.ts +2 -2
  221. package/tableview/api/class/tableview/class-tableview-data-provider.factory.d.ts +4 -0
  222. package/tableview/api/{tableview/helpers/tableview-descriptor-helpers.d.ts → class/tableview/class-tableview-descriptor-helpers.d.ts} +1 -2
  223. package/tableview/api/class/tableview/class-tableview-descriptor.factory.d.ts +12 -0
  224. package/tableview/api/editor/data-providers/editor-data-provider.factory.d.ts +17 -16
  225. package/tableview/api/editor/data-providers/editor.data-provider.d.ts +64 -29
  226. package/tableview/api/editor/descriptors/editor-descriptor.factory.d.ts +5 -38
  227. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +48 -112
  228. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +8 -1
  229. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +2 -3
  230. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +3 -11
  231. package/tableview/api/editor/descriptors/wrappers/editor-descriptor-nested-object-wrapper.d.ts +25 -0
  232. package/tableview/api/editor/models/editor-fields.model.d.ts +25 -21
  233. package/tableview/api/editor/models/form-editor.event.d.ts +0 -4
  234. package/tableview/api/index.d.ts +7 -6
  235. package/tableview/api/tableview/data-providers/tableview-data-provider.factory.d.ts +20 -25
  236. package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +22 -22
  237. package/tableview/api/tableview/descriptors/tableview-descriptor.factory.d.ts +20 -50
  238. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +69 -163
  239. package/tableview/api/tableview/helpers/tableview-create.d.ts +18 -5
  240. package/tableview/api/tableview/helpers/tableview-data-provider-descriptor-convert.d.ts +2 -2
  241. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +73 -20
  242. package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +87 -9
  243. package/tableview/api/tableview/models/tableview-descriptor-fields-manage-helper.type.d.ts +9 -0
  244. package/tableview/api/tableview/models/tableview-descriptor-helper.type.d.ts +2 -0
  245. package/tableview/api/tableview/models/tableview-input.model.d.ts +1 -1
  246. package/tableview/api/tableview/models/tableview-route.model.d.ts +1 -1
  247. package/tableview/editor/helpers/field-create.d.ts +9 -0
  248. package/tableview/index.d.ts +2 -1
  249. package/tableview/tableview/components/route/tableview-route.component.d.ts +1 -1
  250. package/tableview/tableview/components/tableview/tableview.component.d.ts +6 -6
  251. package/version-info.json +5 -5
  252. package/core/components/pages/error/error.page.component.d.ts +0 -11
  253. package/core/components/pages/not-found/not-found.page.component.d.ts +0 -11
  254. package/core/data-providers/base-data-provider.factory.d.ts +0 -13
  255. package/esm2022/core/components/pages/error/error.page.component.mjs +0 -24
  256. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +0 -24
  257. package/esm2022/core/data-providers/base-data-provider.factory.mjs +0 -28
  258. package/esm2022/model/helpers/model.mjs +0 -71
  259. package/esm2022/table/api/helpers/class-attribute-converter.mjs +0 -104
  260. package/esm2022/table/api/helpers/table-descriptor-helpers.mjs +0 -98
  261. package/esm2022/table/api/models/class-table-attribute.model.mjs +0 -2
  262. package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +0 -85
  263. package/esm2022/tableview/api/editor/helpers/editor-descriptor-helpers.mjs +0 -95
  264. package/esm2022/tableview/api/editor/models/class-tableview-attribute.model.mjs +0 -2
  265. package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +0 -34
  266. package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +0 -110
  267. package/esm2022/tableview/api/tableview/models/class-tableview-attribute.model.mjs +0 -2
@@ -1,6 +1,6 @@
1
1
  import { CommonsInternalError, flattenObjectKeys } from '@mediusinc/mng-commons/core';
2
2
  import { FilterDescriptor, FilterGenericDescriptor, FilterLookupDescriptor, FilterLookupEnumDescriptor, FilterTypeEnum } from '@mediusinc/mng-commons/filter';
3
- import { columnToDateNumberOrBoolean } from '../helpers/class-attribute-converter';
3
+ import { columnToDateNumberOrBoolean } from '../helpers/column-converter';
4
4
  import { ColumnTypeEnum } from '../models/column.model';
5
5
  import { TableDynamicColumnsModeEnum, TableSizeEnum } from '../models/table.model';
6
6
  import { ColumnDescriptor, ColumnDynamicDescriptor } from './column.descriptor';
@@ -1032,7 +1032,7 @@ export class TableDynamicDescriptorInst extends TableDescriptorInst {
1032
1032
  */
1033
1033
  withColumnTitle(property, title) {
1034
1034
  const column = this._columns.find(col => property === col.property) ?? this.addColumn(property);
1035
- column.withTitle(title, true);
1035
+ column.withTitle(title);
1036
1036
  return this;
1037
1037
  }
1038
1038
  /**
@@ -1113,4 +1113,4 @@ export class TableDynamicDescriptorInst extends TableDescriptorInst {
1113
1113
  return descriptor;
1114
1114
  }
1115
1115
  }
1116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsb0JBQW9CLEVBQTJFLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0osT0FBTyxFQUNILGdCQUFnQixFQUVoQix1QkFBdUIsRUFFdkIsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixjQUFjLEVBQ2pCLE1BQU0sK0JBQStCLENBQUM7QUFJdkMsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUF3QixjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUc3RSxPQUFPLEVBQUMsMkJBQTJCLEVBQTJCLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sbUJBQW1CO0lBeUQ1QixZQUFtQixLQUFrQyxFQUFFLGFBQWEsR0FBRyxLQUFLO1FBOUNsRSxhQUFRLEdBQTZDLEVBQUUsQ0FBQztRQUUxRCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixpQkFBWSxHQUFrQixlQUFlLENBQUM7UUFFdEQsUUFBUTtRQUNBLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBT3JDLFVBQVU7UUFDRixVQUFLLEdBQWtCLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDM0MsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUt4QixnQkFBZ0I7UUFDUixhQUFRLEdBQXdDLEVBQUUsQ0FB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QUM7UUFDdEQsVUFBVSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN6RCxVQUFVLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckQsVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDdEQsVUFBVSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxtQkFBbUIsQ0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBEYXRhTGlzdFJlc3VsdCwgRW51bUNvbnN0YW50VHlwZSwgSUxvb2t1cERhdGFQcm92aWRlciwgSVRhYmxlRGVzY3JpcHRvciwgZmxhdHRlbk9iamVjdEtleXN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIEZpbHRlckRlc2NyaXB0b3IsXG4gICAgRmlsdGVyRGlzcGxheVR5cGVFbnVtLFxuICAgIEZpbHRlckdlbmVyaWNEZXNjcmlwdG9yLFxuICAgIEZpbHRlckdlbmVyaWNQcm9wZXJ0eSxcbiAgICBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLFxuICAgIEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yLFxuICAgIEZpbHRlclR5cGVFbnVtXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtL2FwaSc7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBNb2RlbERlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge2NvbHVtblRvRGF0ZU51bWJlck9yQm9vbGVhbn0gZnJvbSAnLi4vaGVscGVycy9jbGFzcy1hdHRyaWJ1dGUtY29udmVydGVyJztcbmltcG9ydCB7Q29sdW1uRGlzcGxheVR5cGVFbnVtLCBDb2x1bW5UeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5pbXBvcnQge0lSb3dFeHBhbmRhYmxlQ29tcG9uZW50fSBmcm9tICcuLi9tb2RlbHMvcm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7SUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2V9IGZyb20gJy4uL21vZGVscy90YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7VGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLCBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSwgVGFibGVTaXplRW51bX0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvciwgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3J9IGZyb20gJy4vY29sdW1uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtTb3J0RGVzY3JpcHRvcn0gZnJvbSAnLi9zb3J0LmRlc2NyaXB0b3InO1xuXG5leHBvcnQgY2xhc3MgVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cyA9IGtleW9mIFRhYmxlTW9kZWwsIEZpbHRlcnMgPSBrZXlvZiBUYWJsZU1vZGVsPlxuICAgIGltcGxlbWVudHMgSVRhYmxlRGVzY3JpcHRvcjxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4sIElDb2x1bW5zTWFuYWdlSW50ZXJmYWNlPFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPlxue1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VGFibGVNb2RlbD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hdXRvR2VuZXJhdGVkO1xuXG4gICAgcHJpdmF0ZSBfaWRlbnRpZmllcj86IHN0cmluZztcbiAgICBwcml2YXRlIF90cmFja1Byb3BlcnR5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3BhZ2luYXRpb25Nb2RlPzogVGFibGVQYWdpbmF0aW9uTW9kZUVudW07XG4gICAgcHJpdmF0ZSBfcm93c1BlclBhZ2VPcHRpb25zPzogbnVtYmVyW107XG4gICAgcHJpdmF0ZSBfZGVmYXVsdE51bVJvd3M/OiBudW1iZXI7XG4gICAgcHJvdGVjdGVkIF9jb2x1bW5zOiBBcnJheTxDb2x1bW5EZXNjcmlwdG9yPGFueSwgVGFibGVNb2RlbD4+ID0gW107XG4gICAgcHJpdmF0ZSBfdGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaGlkZUhlYWRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvYWRpbmdUZXh0Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgX2xvYWRpbmdJY29uOiBzdHJpbmcgfCBudWxsID0gJ3BpIHBpLXNwaW5uZXInO1xuXG4gICAgLy8gZXh0cmFcbiAgICBwcml2YXRlIF9oYXNIb3ZlciA9IHRydWU7XG4gICAgcHJpdmF0ZSBfaGFzR3JpZGxpbmVzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfaGFzUmVzaXphYmxlQ29sdW1ucyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2NvbHVtblJlc2l6ZU1vZGU/OiAnZml0JyB8ICdleHBhbmQnO1xuXG4gICAgLy8gc3BlY2lhbCBjb2x1bW5zXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uQ29sdW1uRnJvemVuPzogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9hY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuO1xuXG4gICAgLy8gc3R5bGluZ1xuICAgIHByaXZhdGUgX3NpemU6IFRhYmxlU2l6ZUVudW0gPSBUYWJsZVNpemVFbnVtLkxhcmdlO1xuICAgIHByaXZhdGUgX2NsYXNzTmFtZSA9ICcnO1xuICAgIHByaXZhdGUgX2hlYWRlckNsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9yb3dDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcm93Q2xhc3NOYW1lTWFwRm4/OiAoY2xhc3NOYW1lPzogc3RyaW5nLCBpdGVtPzogVGFibGVNb2RlbCkgPT4gc3RyaW5nO1xuXG4gICAgLy8gZmlsdGVycyZzb3J0c1xuICAgIHByaXZhdGUgX2ZpbHRlcnM6IEZpbHRlckRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPltdID0gW107XG4gICAgcHJpdmF0ZSBfZ2VuZXJpY0ZpbHRlcj86IEZpbHRlckdlbmVyaWNEZXNjcmlwdG9yO1xuICAgIHByaXZhdGUgX3NvcnRzOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPltdID0gW107XG5cbiAgICAvLyBsb2NhbGl6YXRpb25cbiAgICBwcml2YXRlIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5Pzogc3RyaW5nO1xuXG4gICAgLy8gcm93IGV4cGFuZFxuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9yb3dFeHBhbmRhYmxlQ29sU3BhbiA9IDEwMDtcbiAgICBwcml2YXRlIF9yb3dFeHBhbmRhYmxlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfaXNSb3dFeHBhbmRlZD86IHN0cmluZyB8ICgoaXRlbTogVGFibGVNb2RlbCkgPT4gYm9vbGVhbik7XG4gICAgcHJpdmF0ZSBfcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGU/OiBUeXBlPElSb3dFeHBhbmRhYmxlQ29tcG9uZW50PFRhYmxlTW9kZWw+PjtcblxuICAgIC8vIHJvdyByZW9yZGVyXG4gICAgcHJpdmF0ZSBfcm93UmVvcmRlcmFibGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3NlYXJjaD86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfc2VhcmNoTGltaXRNYXhXb3Jkcz86IG51bWJlciB8IG51bGw7XG4gICAgcHJpdmF0ZSBfc2VhcmNoRmllbGRzPzogc3RyaW5nW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZU1vZGVsPiwgYXV0b0dlbmVyYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX3RyYWNrUHJvcGVydHkgPSB0aGlzLl9tb2RlbC5pZFByb3BlcnR5O1xuICAgICAgICB0aGlzLl9hdXRvR2VuZXJhdGVkID0gYXV0b0dlbmVyYXRlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZGVudGlmaWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHJhY2tQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYWNrUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYWdpbmF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRpb25Nb2RlO1xuICAgIH1cblxuICAgIGdldCByb3dzUGVyUGFnZU9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHROdW1Sb3dzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE51bVJvd3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRlSGVhZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1RleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkaW5nSWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdJY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBnZW5lcmljRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2VuZXJpY0ZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNvcnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc29ydHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VhcmNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VhcmNoTGltaXRNYXhXb3JkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaExpbWl0TWF4V29yZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hGaWVsZHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0hvdmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzSG92ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNHcmlkbGluZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNHcmlkbGluZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNSZXNpemFibGVDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzUmVzaXphYmxlQ29sdW1ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtblJlc2l6ZU1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5SZXNpemVNb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93Q2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93Q2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93Q2xhc3NOYW1lTWFwRm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc05hbWVNYXBGbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGlvbkNvbHVtbkZyb3plbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNvbHVtbkZyb3plbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGlvbkNvbHVtbkZyb3plbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbkNvbHVtbkZyb3plbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhlYWRlckNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlckNsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93UmVvcmRlcmFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dSZW9yZGVyYWJsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0V4cGFuZGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFeHBhbmRhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZUNvbFNwYW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFeHBhbmRhYmxlQ29sU3BhbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRhYmxlIG1vZGVsIHByb3BlcnR5IHRlbGxzIHVzIGlmIHRoZSBzcGVjaWZpYyByb3cgc2hvdWxkIGJlIGV4cGFuZGFibGUgb3Igbm90IGJhc2VkIG9uIHJvdyBpdGVtIHZhbHVlXG4gICAgICovXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFeHBhbmRhYmxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyB0YWJsZSBtb2RlbCBwcm9wZXJ0eSB0ZWxscyB1cyB3aGVuIHRoZSB0YWJsZSByb3cgc2hvdWxkIGJlIGV4cGFuZGVkIGJ5IGRlZmF1bHQsIHdpdGhvdXQgY2xpY2tpbmcgb24gdGhlIHRvZ2dsZSBidXR0b24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1Jvd0V4cGFuZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSb3dFeHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBjdXN0b20gY29tcG9uZW50IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZXhwYW5kZWQgcm93LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZGVudGlmaWVyIGlzIHVzZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbWJpbmVkIHNhdmluZyB1c2VyIHByZWZlcmVuY2VzIGluIGxvY2Fsc3RvcmFnZSBpZiAyIHRhYmxlcyBoYXZlIHRoZSBzYW1lIHRyYWNrIHByb3BlcnRpZXMgdGhleSB3aWxsIHNoYXJlIHRoZSBzYW1lIGxvY2Fsc3RvcmFnZSBlbnRyeS5cbiAgICAgKiBTaW1pbGFybHksIHRoaXMgcHJvcGVydHkgY2FuIGFsc28gYmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHR3byB0YWJsZXMgb2YgdGhlIHNhbWUgbW9kZWwgb24gdGhlIHNhbWUgdXJsIChzbyB0aGF0IHRoZXkgaGF2ZSBzZXBhcmF0ZSBlbnRyaWVzIGluIGxvY2Fsc3RvcmFnZSkuXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aElkZW50aWZpZXIoaWRlbnRpZmllcjogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0cmFjayBwcm9wZXJ0eSAoaWRlbnRpZmllciBvZiB0YWJsZSByb3cpIGZvciB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2tleW9mIFRhYmxlTW9kZWx9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHRyYWNrIHRoZSByb3cgaXRlbXMgYnkuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhUcmFja1Byb3BlcnR5KHByb3BlcnR5Pzoga2V5b2YgVGFibGVNb2RlbCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoVHJhY2tQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRyYWNrIHByb3BlcnR5IChpZGVudGlmaWVyIG9mIHRhYmxlIHJvdykgZm9yIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHNldCAnX3RyYWNrUHJvcGVydHknIHRvLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoVHJhY2tQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90cmFja1Byb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgY29sdW1uIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7a2V5b2YgVGFibGVNb2RlbH0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgZm9yIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbHVtbjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwsIENvbHVtbk1vZGVsID0gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eV0+LCBDb2x1bW5WYWx1ZSA9IFRhYmxlTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5XG4gICAgKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWU+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbHVtblVuc2FmZTxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb2x1bW4gZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2tleW9mIFRhYmxlTW9kZWx9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGZvciBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gVGhlIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb2x1bW5VbnNhZmU8Q29sdW1uTW9kZWwgPSBhbnksIENvbHVtblZhbHVlID0gQ29sdW1uTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBjb2x1bW4gZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtrZXlvZiBUYWJsZU1vZGVsfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBmb3IgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUNvbHVtbihwcm9wZXJ0eToga2V5b2YgVGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbHVtbiBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7a2V5b2YgVGFibGVNb2RlbH0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgZm9yIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVDb2x1bW5VbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5JZHggPSB0aGlzLl9jb2x1bW5zLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5zcGxpY2UoY29sdW1uSWR4LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGNvbHVtbiBkZXNjcmlwdG9yIHRvIHRhYmxlIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPn0gY29sdW1uIC0gVGhlIHByb3BlcnR5IGZvciBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbjxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4oY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eUtleX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBjb2x1bW4gaW4gdGhlIHRhYmxlIG1vZGVsLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIG5ld2x5IGFkZGVkIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRDb2x1bW48UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsPihwcm9wZXJ0eTogUHJvcGVydHlLZXkpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+LCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbHVtbiB3aXRoIGVudW0gZGlzcGxheSB0byB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5S2V5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIHRhYmxlIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7RW51bURlc2NyaXB0b3I8RW51bT59IGVudW1EZXNjIC0gVGhlIGVudW0gZGVzY3JpcHRvciBmb3IgY29sdW1uIGRpc3BsYXkuXG4gICAgICogQHJldHVybiB7Q29sdW1uRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT59IC0gVGhlIGFkZGVkIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRDb2x1bW5FbnVtPFByb3BlcnR5S2V5IGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCwgRW51bSBleHRlbmRzIE5vbk51bGxhYmxlPFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPj4ocHJvcGVydHk6IFByb3BlcnR5S2V5LCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4pIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8RW51bSwgVGFibGVNb2RlbCwgVGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+KHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgICAgIGNvbHVtbi5hc0VudW1VbnNhZmUoZW51bURlc2MpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY29sdW1uIHRvIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgY29sdW1uIGluIHRoZSB0YWJsZSBtb2RlbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXdseSBhZGRlZCBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQ29sdW1uVW5zYWZlPENvbHVtbk1vZGVsID0gdW5rbm93bj4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWw+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBvbmUgb3IgbW9yZSBjb2x1bW5zIHRvIHRoZSB0YWJsZSBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgdG8gYWRkIGFzIGNvbHVtbnMuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zKC4uLnByb3BlcnRpZXM6IChrZXlvZiBUYWJsZU1vZGVsKVtdKTogdGhpcyB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChwID0+IHRoaXMuYWRkQ29sdW1uKHApKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBwYWdpbmF0aW9uIG1vZGUgZm9yIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7VGFibGVQYWdpbmF0aW9uTW9kZUVudW19IHBhZ2luYXRpb25Nb2RlIC0gVGhlIHBhZ2luYXRpb24gbW9kZSB0byBzZXQuIE11c3QgYmUgb25lIG9mIHRoZSB2YWx1ZXMgZnJvbSB0aGUgVGFibGVQYWdpbmF0aW9uTW9kZUVudW0uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQYWdpbmF0aW9uTW9kZShwYWdpbmF0aW9uTW9kZTogVGFibGVQYWdpbmF0aW9uTW9kZUVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbk1vZGUgPSBwYWdpbmF0aW9uTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UgZm9yIGEgcGFnaW5hdGVkIGRpc3BsYXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAtIFRoZSBkZWZhdWx0IG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgcGVyIHBhZ2UuXG4gICAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9uc10gLSBSb3dzIHBlciBwYWdlIG9wdGlvbnMgdG8gYmUgYXZhaWxhYmxlIGluIHRhYmxlIHBhZ2luYXRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFJvd3NQZXJQYWdlKHJvd3M6IG51bWJlciwgb3B0aW9ucz86IEFycmF5PG51bWJlcj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdE51bVJvd3MgPSByb3dzO1xuICAgICAgICB0aGlzLl9yb3dzUGVyUGFnZU9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0aXRsZSBmb3IgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0aXRsZV0gLSBUaGUgdGl0bGUgdmFsdWUgdG8gYmUgc2V0LiBJdCB1bmRlZmluZWQsIG5vIHRpdGxlIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoVGl0bGUodGl0bGU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cy9oaWRlcyB0aGUgaGVhZGVyIHJvdyB3aXRoIGNvbHVtbiB0aXRsZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhpZGVIZWFkZXIgLSBBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGhpZGUgdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEhpZGVIZWFkZXIoaGlkZUhlYWRlciA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5faGlkZUhlYWRlciA9IGhpZGVIZWFkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdHMgbG9hZGluZyBkaXNwbGF5IHdpdGggY3VzdG9tIHRleHQgYW5kL29yIGljb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RleHRdIC0gVGV4dCB0byBiZSBkaXNwbGF5ZWQgd2hlbiBsb2FkaW5nIGluZGljYXRvciBpcyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IFtpY29uXSAtIEljb24gdG8gYmUgdXNlZCB3aGVuIGxvYWRpbmcgaW5kaWNhdG9yIGlzIHNob3duLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTG9hZGluZyh0ZXh0Pzogc3RyaW5nLCBpY29uPzogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb2FkaW5nVGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJY29uID0gaWNvbiA9PT0gdW5kZWZpbmVkID8gJ3BpIHBpLXNwaW5uZXInIDogaWNvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBzb3J0IGRlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NvcnRzfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZSB0aGUgc29ydCBmb3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPiB8IG51bGx9IFRoZSBzb3J0IGRlc2NyaXB0b3Igb3IgbnVsbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U29ydChwcm9wZXJ0eTogU29ydHMpOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBzb3J0IGRlc2NyaXB0b3IgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U29ydHN9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIHRoZSBzb3J0IGZvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1NvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHwgbnVsbH0gVGhlIHNvcnQgZGVzY3JpcHRvciBvciBudWxsLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fc29ydHMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHNvcnQgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NvcnRzfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byByZW1vdmUgdGhlIHNvcnQgZm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVTb3J0KHByb3BlcnR5OiBTb3J0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc29ydCBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHtTb3J0c30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gcmVtb3ZlIHRoZSBzb3J0IGZvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvcnRJZHggPSB0aGlzLl9zb3J0cy5maW5kSW5kZXgoYyA9PiBjLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX3NvcnRzLnNwbGljZShzb3J0SWR4LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHNvcnQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBhZGQgdGhlIHNvcnQgZm9yLlxuICAgICAqIEBwYXJhbSBpc0RlZmF1bHQgSWYgZGVmYXVsdCBzb3J0aW5nIGlzIGVuYWJsZWQuXG4gICAgICogQHBhcmFtIGFzY2VuZGluZyBJZiBkZWZhdWx0IHNvcnQgc2hvdWxkIGJlIGFzY2VuZGluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBzb3J0IGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZFNvcnQocHJvcGVydHk6IFNvcnRzLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbik6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGlzRGVmYXVsdCwgYXNjZW5kaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHNvcnQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IHRvIGFkZCB0aGUgc29ydCBmb3IuXG4gICAgICogQHBhcmFtIGlzRGVmYXVsdCBJZiBkZWZhdWx0IHNvcnRpbmcgaXMgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gYXNjZW5kaW5nIElmIGRlZmF1bHQgc29ydCBzaG91bGQgYmUgYXNjZW5kaW5nLlxuXG4gICAgICogQHJldHVybiBDcmVhdGVkIHNvcnQgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBpc0RlZmF1bHQgPSBmYWxzZSwgYXNjZW5kaW5nPzogYm9vbGVhbik6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHtcbiAgICAgICAgY29uc3Qgc29ydCA9IG5ldyBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPihwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcmRlck1heCA9IHRoaXMuX3NvcnRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihzID0+IHMuZGVmYXVsdElzRW5hYmxlZClcbiAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIHMpID0+IChzLmRlZmF1bHRPcmRlciAhPT0gdW5kZWZpbmVkICYmIHMuZGVmYXVsdE9yZGVyID4gYWNjID8gcy5kZWZhdWx0T3JkZXIgOiBhY2MpLCAtMSk7XG4gICAgICAgICAgICBzb3J0LndpdGhEZWZhdWx0U29ydCh0cnVlLCBhc2NlbmRpbmcsIGRlZmF1bHRPcmRlck1heCArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvcnRzLnB1c2goc29ydCk7XG4gICAgICAgIHJldHVybiBzb3J0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgc29ydCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IHRvIGFkZCB0aGUgc29ydCBmb3IuXG4gICAgICogQHBhcmFtIGlzRGVmYXVsdCBJZiBkZWZhdWx0IHNvcnRpbmcgaXMgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gYXNjZW5kaW5nIElmIGRlZmF1bHQgc29ydCBzaG91bGQgYmUgYXNjZW5kaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoU29ydChwcm9wZXJ0eTogU29ydHMsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgc29ydCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgdG8gYWRkIHRoZSBzb3J0IGZvci5cbiAgICAgKiBAcGFyYW0gaXNEZWZhdWx0IElmIGRlZmF1bHQgc29ydGluZyBpcyBlbmFibGVkLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgSWYgZGVmYXVsdCBzb3J0IHNob3VsZCBiZSBhc2NlbmRpbmcuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuYWRkU29ydFVuc2FmZShwcm9wZXJ0eSwgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHNvcnRpbmcgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byBzZXQgZGVmYXVsdCBzb3J0IGZvci5cbiAgICAgKiBAcGFyYW0gYXNjZW5kaW5nIC0gSWYgdGhlIHNvcnRpbmcgc2hvdWxkIGJlIGFzY2VuZGluZyAoZGVmYXVsdDogdHJ1ZSkuXG4gICAgICogQHBhcmFtIGVuYWJsZWQgLSBFbmFibGVzL2Rpc2FibGVkIHRoZSBkZWZhdWx0IHNvcnQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEZWZhdWx0U29ydChwcm9wZXJ0eTogU29ydHMsIGFzY2VuZGluZz86IGJvb2xlYW4sIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhEZWZhdWx0U29ydFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGFzY2VuZGluZywgZW5hYmxlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGVmYXVsdCBzb3J0aW5nIGZvciB0aGUgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byBzZXQgZGVmYXVsdCBzb3J0IGZvci5cbiAgICAgKiBAcGFyYW0gYXNjZW5kaW5nIC0gSWYgdGhlIHNvcnRpbmcgc2hvdWxkIGJlIGFzY2VuZGluZyAoZGVmYXVsdDogdHJ1ZSkuXG4gICAgICogQHBhcmFtIGVuYWJsZWQgLSBFbmFibGVzL2Rpc2FibGVkIHRoZSBkZWZhdWx0IHNvcnQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEZWZhdWx0U29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBhc2NlbmRpbmc/OiBib29sZWFuLCBlbmFibGVkPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICBsZXQgc29ydCA9IHRoaXMuX3NvcnRzLmZpbmQocyA9PiBzLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmICghc29ydCkge1xuICAgICAgICAgICAgc29ydCA9IG5ldyBTb3J0RGVzY3JpcHRvcihwcm9wZXJ0eSk7XG4gICAgICAgICAgICB0aGlzLl9zb3J0cy5wdXNoKHNvcnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5fc29ydHMuZmlsdGVyKHMgPT4gcy5kZWZhdWx0SXNFbmFibGVkKS5yZWR1Y2UoKGFjYywgcykgPT4gKHMuZGVmYXVsdE9yZGVyID09IG51bGwgfHwgcy5kZWZhdWx0T3JkZXIgPCBhY2MgPyBhY2MgOiBzLmRlZmF1bHRPcmRlciArIDEpLCAwKTtcbiAgICAgICAgc29ydC53aXRoRGVmYXVsdFNvcnQoZW5hYmxlZCA/PyB0cnVlLCBhc2NlbmRpbmcsIG9yZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGVmYXVsdCBzb3J0aW5nIGZvciBwcm92aWRlZCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBUaGUgcHJvcGVydGllcyB0byBzZXQgZGVmYXVsdCBzb3J0IGZvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0cyguLi5wcm9wZXJ0aWVzOiBTb3J0c1tdKTogdGhpcyB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChwID0+IHRoaXMud2l0aERlZmF1bHRTb3J0VW5zYWZlKHAgYXMgc3RyaW5nKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVuc2V0cyBhbGwgZGVmYXVsdCBzb3J0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aG91dERlZmF1bHRTb3J0cygpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc29ydHMuZm9yRWFjaChzID0+IHMud2l0aERlZmF1bHRTb3J0KGZhbHNlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgc29ydHMgZm9yIG1vcmUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMgdG8gYWRkIHRoZSBzb3J0cyBmb3IuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTb3J0cyguLi5wcm9wZXJ0aWVzOiBTb3J0c1tdKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTb3J0c1Vuc2FmZSguLi4ocHJvcGVydGllcyBhcyBzdHJpbmdbXSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBzb3J0cyBmb3IgbW9yZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBQcm9wZXJ0aWVzIHRvIGFkZCB0aGUgc29ydHMgZm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoU29ydHNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc29ydHMucHVzaChuZXcgU29ydERlc2NyaXB0b3IocCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEZpbHRlciBkZXNjcmlwdG9yIGZvciBwcm9wZXJ0eSBvciBudWxsIGlmIG5vdCBleGlzdHMuXG4gICAgICovXG4gICAgcHVibGljIGdldEZpbHRlcjxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsID8gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtGaWx0ZXJzXT4gOiBhbnk+KHByb3BlcnR5OiBGaWx0ZXJzKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgZmlsdGVyIGRlc2NyaXB0b3IgZm9yIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEZpbHRlciBkZXNjcmlwdG9yIGZvciBwcm9wZXJ0eSBvciBudWxsIGlmIG5vdCBleGlzdHMuXG4gICAgICovXG4gICAgcHVibGljIGdldEZpbHRlclVuc2FmZTxGaWx0ZXJNb2RlbCA9IGFueT4ocHJvcGVydHk6IHN0cmluZyk6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJzLmZpbmQocyA9PiBzLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGZpbHRlciBkZXNjcmlwdG9yIGZvciBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmlsdGVyKHByb3BlcnR5OiBGaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUZpbHRlclVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZmlsdGVyIGRlc2NyaXB0b3IgZm9yIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpbHRlclVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcklkeCA9IHRoaXMuX2ZpbHRlcnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnNwbGljZShmaWx0ZXJJZHgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpbHRlcjxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsID8gVGFibGVNb2RlbFtGaWx0ZXJzXSA6IG5ldmVyPihwcm9wZXJ0eTogRmlsdGVycyk6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihwcm9wZXJ0eTogc3RyaW5nKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZpbHRlciBsb29rdXAgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gcHJvdmlkZXIgTG9va3VwIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zVmFsdWVQcm9wZXJ0eSBQcm9wZXJ0eSBvbiBsb29rdXAgcHJvdmlkZXIncyBpdGVtIChGaWx0ZXJNb2RlbCkgdGhhdCB3aWxsIGJlIHVzZWQgYXMgZmlsdGVyIHZhbHVlLlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIGZpbHRlciBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW0ZpbHRlcnNdPiA6IG5ldmVyLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgcHJvcGVydHk6IEZpbHRlcnMsXG4gICAgICAgIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzoga2V5b2YgRmlsdGVyTW9kZWxcbiAgICApOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCBvcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGxvb2t1cCBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIHByb3ZpZGVyIExvb2t1cCBwcm92aWRlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1ZhbHVlUHJvcGVydHkgUHJvcGVydHkgb24gbG9va3VwIHByb3ZpZGVyJ3MgaXRlbSAoRmlsdGVyTW9kZWwpIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlciB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cFVuc2FmZTxGaWx0ZXJNb2RlbCwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nXG4gICAgKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZT4ocHJvcGVydHksIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlcjogcHJvdmlkZXIsXG4gICAgICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eTogb3B0aW9uc1ZhbHVlUHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGxvb2t1cCBlbnVtIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGVudW1EZXNjIERlc2NyaXB0b3IgZm9yIGVudW0uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgb3B0aW9ucyBvZiBlbnVtIHZhbHVlcyB0byBiZSBhdmFpbGFibGUgdG8gZmlsdGVyIGJ5LlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIGZpbHRlciBsb29rdXAgZW51bSBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJMb29rdXBFbnVtPEVudW0+KHByb3BlcnR5OiBGaWx0ZXJzLCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sIG9wdGlvbnM/OiBBcnJheTxFbnVtPikge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWx0ZXJMb29rdXBFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5IGFzIHN0cmluZywgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGxvb2t1cCBlbnVtIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gZW51bURlc2MgRGVzY3JpcHRvciBmb3IgZW51bS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBvcHRpb25zIG9mIGVudW0gdmFsdWVzIHRvIGJlIGF2YWlsYWJsZSB0byBmaWx0ZXIgYnkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGxvb2t1cCBlbnVtIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cEVudW1VbnNhZmU8RW51bSA9IEVudW1Db25zdGFudFR5cGU+KHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcihwcm9wZXJ0eSwgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZpbHRlciBkZXNjcmlwdG9yIGZyb20gY29sdW1uLiBUaGUgY29sdW1uIG11c3QgZXhpc3Qgb24gdGFibGUgZGVzY3JpcHRvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBDb2x1bW4gcHJvcGVydHkgdG8gYWRkIGZpbHRlciBmb3IuXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIE9wdGlvbmFsIGRpc3BsYXkgdHlwZSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSBmb3JjZVNpbXBsZSBGb3JjZXMgc2ltcGxlIGNyZWF0aW9uIG9mIGZpbHRlciAobm8gbG9va3VwIG9yIGxvb2t1cCBlbnVtIGZpbHRlcnMpLlxuICAgICAqXG4gICAgICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIGNvbHVtbiBmb3IgcHJvcGVydHkgZG9lc24ndCBleGlzdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJGcm9tQ29sdW1uPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCwgRmlsdGVyTW9kZWwgPSBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogRXh0cmFjdDxGaWx0ZXJzLCBQcm9wZXJ0eT4sXG4gICAgICAgIGRpc3BsYXlUeXBlPzogRmlsdGVyRGlzcGxheVR5cGVFbnVtLFxuICAgICAgICBmb3JjZVNpbXBsZSA9IGZhbHNlXG4gICAgKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgZGlzcGxheVR5cGUsIGZvcmNlU2ltcGxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkR2VuZXJpY0ZpbHRlcihwcm9wZXJ0eUxvb2t1cERhdGFQcm92aWRlcjogTG9va3VwRGF0YVByb3ZpZGVySW5zdDxGaWx0ZXJHZW5lcmljUHJvcGVydHk+KTogRmlsdGVyR2VuZXJpY0Rlc2NyaXB0b3Ige1xuICAgICAgICB0aGlzLl9nZW5lcmljRmlsdGVyID0gbmV3IEZpbHRlckdlbmVyaWNEZXNjcmlwdG9yKHByb3BlcnR5TG9va3VwRGF0YVByb3ZpZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dlbmVyaWNGaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhHZW5lcmljRmlsdGVyKFxuICAgICAgICBwcm9wZXJ0eUxvb2t1cERhdGFQcm92aWRlcjogTG9va3VwRGF0YVByb3ZpZGVySW5zdDxGaWx0ZXJHZW5lcmljUHJvcGVydHk+LFxuICAgICAgICB2YWx1ZUxvb2t1cERhdGFQcm92aWRlcj86IExvb2t1cERhdGFQcm92aWRlckluc3Q8c3RyaW5nLCBhbnksIGFueSwgJ2ZpZWxkJz5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZ2VuZXJpY0ZpbHRlciA9IHRoaXMuYWRkR2VuZXJpY0ZpbHRlcihwcm9wZXJ0eUxvb2t1cERhdGFQcm92aWRlcik7XG5cbiAgICAgICAgaWYgKHZhbHVlTG9va3VwRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9nZW5lcmljRmlsdGVyLndpdGhWYWx1ZUxvb2t1cCh2YWx1ZUxvb2t1cERhdGFQcm92aWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvcnMgZnJvbSBjb2x1bW5zLiBUaGUgY29sdW1ucyBtdXN0IGV4aXN0IG9uIHRhYmxlIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBDb2x1bW4gcHJvcGVydGllcyB0byBhZGQgZmlsdGVycyBmb3IuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gSWYgY29sdW1uIGZvciBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmlsdGVyc0Zyb21Db2x1bW5zKC4uLnByb3BlcnRpZXM6IEV4dHJhY3Q8RmlsdGVycywga2V5b2YgVGFibGVNb2RlbD5bXSk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyc0Zyb21Db2x1bW5zVW5zYWZlKC4uLihwcm9wZXJ0aWVzIGFzIHN0cmluZ1tdKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvcnMgZnJvbSBjb2x1bW5zLiBUaGUgY29sdW1ucyBtdXN0IGV4aXN0IG9uIHRhYmxlIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIENvbHVtbiBwcm9wZXJ0aWVzIHRvIGFkZCBmaWx0ZXJzIGZvci5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBjb2x1bW4gZm9yIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWx0ZXJzRnJvbUNvbHVtbnNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlKHApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvciBmcm9tIGNvbHVtbi4gVGhlIGNvbHVtbiBtdXN0IGV4aXN0IG9uIHRhYmxlIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBDb2x1bW4gcHJvcGVydHkgdG8gYWRkIGZpbHRlciBmb3IuXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIE9wdGlvbmFsIGRpc3BsYXkgdHlwZSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSBmb3JjZVNpbXBsZSBGb3JjZXMgc2ltcGxlIGNyZWF0aW9uIG9mIGZpbHRlciAobm8gbG9va3VwIG9yIGxvb2t1cCBlbnVtIGZpbHRlcnMpLlxuICAgICAqXG4gICAgICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIGNvbHVtbiBmb3IgcHJvcGVydHkgZG9lc24ndCBleGlzdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlPEZpbHRlck1vZGVsID0gYW55Pihwcm9wZXJ0eTogc3RyaW5nLCBkaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSwgZm9yY2VTaW1wbGUgPSBmYWxzZSk6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5VbnNhZmU8RmlsdGVyTW9kZWwsIGFueT4ocHJvcGVydHkpO1xuICAgICAgICBpZiAoIWNvbHVtbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBObyBjb2x1bW4gZm91bmQgZm9yIGZpbHRlciBwcm9wZXJ0eSBcIiR7cHJvcGVydHl9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmFkZEZpbHRlckZyb21Db2x1bW5EZXNjcmlwdG9yVW5zYWZlPEZpbHRlck1vZGVsPihjb2x1bW4sIGZvcmNlU2ltcGxlKTtcbiAgICAgICAgaWYgKGRpc3BsYXlUeXBlICE9IG51bGwpIGZpbHRlci53aXRoRGlzcGxheVR5cGUoZGlzcGxheVR5cGUpO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3IgZnJvbSBwcm92aWRlZCBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZm9yY2VTaW1wbGUgRm9yY2VzIHNpbXBsZSBjcmVhdGlvbiBvZiBmaWx0ZXIgKG5vIGxvb2t1cCBvciBsb29rdXAgZW51bSBmaWx0ZXJzKS5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBjb2x1bW4gZm9yIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmU8RmlsdGVyTW9kZWw+KFxuICAgICAgICBjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIGFueT4sXG4gICAgICAgIGZvcmNlU2ltcGxlID0gZmFsc2VcbiAgICApOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGxldCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgIGxldCBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlRW51bTtcblxuICAgICAgICBzd2l0Y2ggKGNvbHVtbi5jb2x1bW5UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5EYXRlOlxuICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5EYXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5FbnVtOlxuICAgICAgICAgICAgICAgIGlmICghZm9yY2VTaW1wbGUgJiYgY29sdW1uLmVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcihjb2x1bW4ucHJvcGVydHksIGNvbHVtbi5lbnVtKSBhcyBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPjtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLkxvb2t1cEVudW07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLlN0cmluZzpcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQ3VzdG9tOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uU3RyaW5nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5hc0ZpbHRlclR5cGUoZmlsdGVyVHlwZSk7XG4gICAgICAgIGlmICgoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTnVtYmVyIHx8IGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUpICYmIGNvbHVtbi5kaXNwbGF5Rm9ybWF0KSB7XG4gICAgICAgICAgICBmaWx0ZXJEZXNjcmlwdG9yLndpdGhEaXNwbGF5Rm9ybWF0KGNvbHVtbi5kaXNwbGF5Rm9ybWF0LCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXJEZXNjcmlwdG9yKTtcblxuICAgICAgICByZXR1cm4gZmlsdGVyRGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGZpbHRlciBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBmaWx0ZXIgRGVzY3JpcHRvciBmb3IgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWx0ZXI8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBGaWx0ZXJzLCBmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIGlmIChmaWx0ZXIucHJvcGVydHkgIT09IHByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBwcm9wZXJ0eSBcIiR7cHJvcGVydHl9XCIgYW5kIEZpbHRlciBkZXNjcmlwdG9yIHByb3BlcnR5IFwiJHtmaWx0ZXIucHJvcGVydHl9XCIgZG8gbm90IG1hdGNoLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KGZpbHRlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsdGVyIERlc2NyaXB0b3IgZm9yIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBnbG9iYWwgc2VhcmNoIG9wdGlvbiBmb3IgdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWFyY2ggLSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZ2xvYmFsIHNlYXJjaCBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gb3B0cyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3Igc2VhcmNoLiBsaW1pdE1heFdvcmRzIGNhbiBsaW1pdCBtYXggd29yZHMgYXMgc2VhcmNoIGlucHV0IGFuZCBmaWVsZHMgY2FuIGxpbWl0XG4gICAgICogdGhlIGZpbHRlcmluZyBmaWVsZHMgaW5jbHVkZWQgaW4gc2VhcmNoIHdoZW4gbGF6eSBsb2FkIGlzIG5vdCBiZWluZyB1c2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoU2VhcmNoKHNlYXJjaCA9IHRydWUsIG9wdHM/OiB7bGltaXRNYXhXb3Jkcz86IG51bWJlciB8IG51bGw7IGZpZWxkcz86IChrZXlvZiBUYWJsZU1vZGVsKVtdfSk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU2VhcmNoVW5zYWZlKHNlYXJjaCwge1xuICAgICAgICAgICAgZmllbGRzOiBvcHRzPy5maWVsZHMgYXMgc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgICAgICAgICBsaW1pdE1heFdvcmRzOiBvcHRzPy5saW1pdE1heFdvcmRzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGdsb2JhbCBzZWFyY2ggb3B0aW9uIGZvciB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlYXJjaCAtIEluZGljYXRlcyB3aGV0aGVyIHRoZSBnbG9iYWwgc2VhcmNoIHNob3VsZCBiZSBlbmFibGVkLlxuICAgICAqIEBwYXJhbSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zIGZvciBzZWFyY2guIGxpbWl0TWF4V29yZHMgY2FuIGxpbWl0IG1heCB3b3JkcyBhcyBzZWFyY2ggaW5wdXQgYW5kIGZpZWxkcyBjYW4gbGltaXRcbiAgICAgKiB0aGUgZmlsdGVyaW5nIGZpZWxkcyBpbmNsdWRlZCBpbiBzZWFyY2ggd2hlbiBsYXp5IGxvYWQgaXMgbm90IGJlaW5nIHVzZWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTZWFyY2hVbnNhZmUoc2VhcmNoID0gdHJ1ZSwgb3B0cz86IHtsaW1pdE1heFdvcmRzPzogbnVtYmVyIHwgbnVsbDsgZmllbGRzPzogc3RyaW5nW119KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NlYXJjaCA9IHNlYXJjaDtcbiAgICAgICAgdGhpcy5fc2VhcmNoTGltaXRNYXhXb3JkcyA9IG9wdHM/LmxpbWl0TWF4V29yZHM7XG4gICAgICAgIHRoaXMuX3NlYXJjaEZpZWxkcyA9IG9wdHM/LmZpZWxkcyBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjbGFzc2VzIGZvciB0YWJsZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2xhc3NOYW1lIENsYXNzIG5hbWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0YWJsZSBzaXppbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2l6ZSBUYWJsZSBzaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoU2l6ZShzaXplOiBUYWJsZVNpemVFbnVtID0gVGFibGVTaXplRW51bS5Ob3JtYWwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgaG92ZXIgZWZmZWN0IG9uIHRhYmxlIHJvd3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaG92ZXIgRW5hYmxlcy9kaXNhYmxlcyB0aGUgaG92ZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhIb3Zlcihob3ZlciA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzSG92ZXIgPSBob3ZlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBncmlkbGluZXMgb24gdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JpZGxpbmVzIEVuYWJsZXMvZGlzYWJsZXMgdGhlIGdyaWRsaW5lcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEdyaWRsaW5lcyhncmlkbGluZXMgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0dyaWRsaW5lcyA9IGdyaWRsaW5lcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcy9kaXNhYmxlcyByZW9yZGVyYWJsZSBwcm9wZXJ0eSBvbiBhbGwgY29sdW1ucyBjdXJyZW50bHkgaW4gdGhlIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2x1bW5zUmVvcmRlcmFibGVdIC0gQm9vbGVhbiBmbGFnIHRvIHNldCByZW9yZGVyaW5nIG9uIGNvbHVtbnMgdG8uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDdXJyZW50Q29sdW1uc1Jlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2wud2l0aFJlb3JkZXJhYmxlKGNvbHVtbnNSZW9yZGVyYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcy9kaXNhYmxlcyB0b2dnbGVhYmxlIHByb3BlcnR5IG9uIGFsbCBjb2x1bW5zIGN1cnJlbnRseSBpbiB0aGUgZGVzY3JpcHRvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbHVtbnNUb2dnbGVhYmxlXSAtIEJvb2xlYW4gZmxhZyB0byBzZXQgdG9nZ2xlYWJsZSBvbiBjb2x1bW5zIHRvLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ3VycmVudENvbHVtbnNUb2dnbGVhYmxlKGNvbHVtbnNUb2dnbGVhYmxlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbC53aXRoVG9nZ2xlYWJsZShjb2x1bW5zVG9nZ2xlYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcy9kaXNhYmxlZCBjb2x1bW4gcmVzaXplIGZlYXR1cmUgd2l0aCBjb2x1bW5SZXNpemVNb2RlIG9uIGFsbCBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc2l6YWJsZUNvbHVtbnMgVHJ1ZSBpZiBlbmFibGVkXG4gICAgICogQHBhcmFtIGNvbHVtblJlc2l6ZU1vZGUgJ2ZpdCcgb3IgJ2V4cGFuZCcgbW9kZVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc1Jlc2l6YWJsZShyZXNpemFibGVDb2x1bW5zID0gdHJ1ZSwgY29sdW1uUmVzaXplTW9kZTogJ2ZpdCcgfCAnZXhwYW5kJyA9ICdmaXQnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1Jlc2l6YWJsZUNvbHVtbnMgPSByZXNpemFibGVDb2x1bW5zO1xuICAgICAgICB0aGlzLl9jb2x1bW5SZXNpemVNb2RlID0gY29sdW1uUmVzaXplTW9kZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBjb2x1bW4gdG8gKHVuKWZyb3plbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWxlY3Rpb25Db2x1bW5Gcm96ZW4gVHJ1ZSB0byBmcmVlemUgc2VsZWN0aW9uIGNvbHVtbiwgZmFsc2UgdG8gdW5mcmVlemUgaXQuXG4gICAgICogQHBhcmFtIGFjdGlvbkNvbHVtbkZyb3plbiBUcnVlIHRvIGZyZWV6ZSBhY3Rpb24gY29sdW1uLCBmYWxzZSB0byB1bmZyZWV6ZSBpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbkZyb3plbihzZWxlY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuLCBhY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbHVtbkZyb3plbiA9IHNlbGVjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuID0gYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjbGFzcyBuYW1lIGZvciByb3dzIGluIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByb3dDbGFzc05hbWUgLSBUaGUgQ1NTIGNsYXNzIG5hbWUgdG8gYmUgYXBwbGllZCB0byBlYWNoIHJvdy5cbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBbY2xhc3NOYW1lTWFwRm5dIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gbWFwIHRoZSBjbGFzcyBuYW1lIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHJvdydzIGl0ZW0gYW5kIGN1cnJlbnQgY2xhc3MgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFJvd0NsYXNzTmFtZShyb3dDbGFzc05hbWU/OiBzdHJpbmcsIGNsYXNzTmFtZU1hcEZuPzogKGNsYXNzTmFtZT86IHN0cmluZywgaXRlbT86IFRhYmxlTW9kZWwpID0+IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yb3dDbGFzc05hbWUgPSByb3dDbGFzc05hbWU7XG4gICAgICAgIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuID0gY2xhc3NOYW1lTWFwRm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgaGVhZGVyIHJvdyBjbGFzcyBuYW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhlYWRlckNsYXNzTmFtZSBDbGFzcyBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoSGVhZGVyQ2xhc3NOYW1lKGhlYWRlckNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hlYWRlckNsYXNzTmFtZSA9IGhlYWRlckNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBsb2NhbGl6YXRpb24gb2YgdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTG9jYWxpemVkKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbG9jYWxlIHByb3BlcnR5IGZvciBsb2NhbGl6YXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTG9jYWxlIHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhMb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eShwcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyByb3cgZXhwYW5kaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IHRvIGNoZWNrIGlmIHJvdyBjYW4gYmUgZXhwYW5kZWQuXG4gICAgICogQHBhcmFtIGNvbFNwYW4gc2V0IGN1c3RvbSByb3cgc3BhbiBmb3IgZXhwYW5kZWQgcm93LlxuICAgICAqIEBwYXJhbSBjb21wb25lbnRUeXBlIENvbXBvbmVudCB0byBiZSBkaXNwbGF5ZWQgb24gcm93IGV4cGFuZC5cbiAgICAgKiBAcGFyYW0gaXNSb3dFeHBhbmRlZCBQcm9wZXJ0eSBvciBmdW5jdGlvbiB0aGF0IHRlbGxzIHRoZSB0YWJsZSB0byBleHBhbmQgdGhlIHJvdyBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoUm93RXhwYW5kYWJsZShcbiAgICAgICAgcHJvcGVydHk/OiBrZXlvZiBUYWJsZU1vZGVsLFxuICAgICAgICBjb2xTcGFuPzogbnVtYmVyLFxuICAgICAgICBjb21wb25lbnRUeXBlPzogVHlwZTxJUm93RXhwYW5kYWJsZUNvbXBvbmVudDxUYWJsZU1vZGVsPj4sXG4gICAgICAgIGlzUm93RXhwYW5kZWQ/OiBzdHJpbmcgfCAoKGl0ZW06IFRhYmxlTW9kZWwpID0+IGJvb2xlYW4pXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGUgPSB0cnVlO1xuICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eSA9IHByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sU3Bhbikge1xuICAgICAgICAgICAgdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW4gPSBjb2xTcGFuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNSb3dFeHBhbmRlZCA9IGlzUm93RXhwYW5kZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgcm93IHJlb3JkZXJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVvcmRhYmxlIEVuYWJsZXMvZGlzYWJsZXMgZmVhdHVyZS5cbiAgICAgKi9cbiAgICB3aXRoUm93UmVvcmRlcmFibGUocmVvcmRhYmxlID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9yb3dSZW9yZGVyYWJsZSA9IHJlb3JkYWJsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IFRhYmxlRGVzY3JpcHRvckluc3Q8YW55LCBhbnksIGFueT4pIHtcbiAgICAgICAgb2JqLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICBvYmouX2hpZGVIZWFkZXIgPSB0aGlzLl9oaWRlSGVhZGVyO1xuICAgICAgICBvYmouX3RyYWNrUHJvcGVydHkgPSB0aGlzLl90cmFja1Byb3BlcnR5O1xuICAgICAgICBvYmouX2ZpbHRlcnMgPSB0aGlzLl9maWx0ZXJzLm1hcChmID0+IGYuY29weSgpKTtcbiAgICAgICAgb2JqLl9zb3J0cyA9IHRoaXMuX3NvcnRzLm1hcChzID0+IHMuY29weSgpKTtcbiAgICAgICAgb2JqLl9zZWFyY2ggPSB0aGlzLl9zZWFyY2g7XG4gICAgICAgIG9iai5fc2VhcmNoTGltaXRNYXhXb3JkcyA9IHRoaXMuX3NlYXJjaExpbWl0TWF4V29yZHM7XG4gICAgICAgIG9iai5fc2VhcmNoRmllbGRzID0gdGhpcy5fc2VhcmNoRmllbGRzID8gWy4uLnRoaXMuX3NlYXJjaEZpZWxkc10gOiB1bmRlZmluZWQ7XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX3NpemUgPSB0aGlzLl9zaXplO1xuICAgICAgICBvYmouX2hhc0hvdmVyID0gdGhpcy5faGFzSG92ZXI7XG4gICAgICAgIG9iai5faGFzR3JpZGxpbmVzID0gdGhpcy5faGFzR3JpZGxpbmVzO1xuICAgICAgICBvYmouX2hhc1Jlc2l6YWJsZUNvbHVtbnMgPSB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgICAgICBvYmouX2NvbHVtblJlc2l6ZU1vZGUgPSB0aGlzLl9jb2x1bW5SZXNpemVNb2RlO1xuICAgICAgICBvYmouX2FjdGlvbkNvbHVtbkZyb3plbiA9IHRoaXMuX2FjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgb2JqLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW4gPSB0aGlzLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIG9iai5faXNMb2NhbGl6ZWQgPSB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICAgICAgb2JqLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgICAgICBvYmouX3BhZ2luYXRpb25Nb2RlID0gdGhpcy5fcGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIG9iai5fcm93c1BlclBhZ2VPcHRpb25zID0gdGhpcy5fcm93c1BlclBhZ2VPcHRpb25zO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGUgPSB0aGlzLl9yb3dFeHBhbmRhYmxlO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGVDb2xTcGFuID0gdGhpcy5fcm93RXhwYW5kYWJsZUNvbFNwYW47XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZVByb3BlcnR5ID0gdGhpcy5fcm93RXhwYW5kYWJsZVByb3BlcnR5O1xuICAgICAgICBvYmouX2lzUm93RXhwYW5kZWQgPSB0aGlzLmlzUm93RXhwYW5kZWQ7XG4gICAgICAgIG9iai5fcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUgPSB0aGlzLl9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZTtcbiAgICAgICAgb2JqLl9yb3dSZW9yZGVyYWJsZSA9IHRoaXMuX3Jvd1Jlb3JkZXJhYmxlO1xuICAgICAgICBvYmouX2dlbmVyaWNGaWx0ZXIgPSB0aGlzLl9nZW5lcmljRmlsdGVyPy5jb3B5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIGN1cnJlbnQgZGVzY3JpcHRvciB0byBhIG5ldyBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29weSgpOiBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4odGhpcy5tb2RlbC5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoYyA9PiBjLmNvcHkoKSk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0IGV4dGVuZHMgVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcml2YXRlIF9leGNsdWRlZENvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIF9maWx0ZXJDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfc29ydENvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcml2YXRlIF9zb3J0Q29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFO1xuICAgIHByaXZhdGUgX2ZpbHRlckNvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERTtcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfY29sdW1uczogQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3JbXSA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICBzdXBlcihtb2RlbCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBtb2RlbC50aXRsZVByb3BlcnR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy53aXRoVGl0bGUobW9kZWwudGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgZXhjbHVkZWQgY29sdW1ucyB3aGVuIGdlbmVyYXRpbmcgZGVzY3JpcHRvclxuICAgICAqIEBwYXJhbSBleGNsdWRlZENvbHVtbiBuYW1lcyBvZiBleGNsdWRlZCBjb2x1bW5zXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zRXhjbHVkZWQoZXhjbHVkZWRDb2x1bW46IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2V4Y2x1ZGVkQ29sdW1ucyA9IGV4Y2x1ZGVkQ29sdW1uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGNvbHVtbiBwcm9wZXJ0aWVzIG9uIHdoaWNoIHNvcnQgaXMgZGVmaW5lZCBvciBub3QgZGVwZW5kaW5nIG9uIHNvcnRDb2x1bW5Nb2RlXG4gICAgICogQHBhcmFtIHNvcnRPbkNvbHVtbnMgY29sdW1uIG5hbWVzXG4gICAgICogQHBhcmFtIHNvcnRDb2x1bW5Nb2RlIElOQ0xVREVfT05MWSAoZGVmYXVsdCkgb25seSBnaXZlbiBjb2x1bW5zIHdpbGwgaGF2ZSBzb3J0LCBFWENMVURFIGdpdmVuIGNvbHVtbnMgd2lsbCBOT1QgaGF2ZSBzb3J0XG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zU29ydChzb3J0T25Db2x1bW5zOiBzdHJpbmdbXSwgc29ydENvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NvcnRDb2x1bW5Nb2RlID0gc29ydENvbHVtbk1vZGU7XG4gICAgICAgIHRoaXMuX3NvcnRDb2x1bW5zID0gc29ydE9uQ29sdW1ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBjb2x1bW4gcHJvcGVydGllcyBvbiB3aGljaCBmaWx0ZXIgaXMgZGVmaW5lZCBvciBub3QgZGVwZW5kaW5nIG9uIGZpbHRlckNvbHVtbk1vZGVcbiAgICAgKiBAcGFyYW0gZmlsdGVyT25Db2x1bW4gY29sdW1uIG5hbWVzXG4gICAgICogQHBhcmFtIGZpbHRlckNvbHVtbk1vZGUgSU5DTFVERV9PTkxZIChkZWZhdWx0KSBvbmx5IGdpdmVuIGNvbHVtbnMgd2lsbCBoYXZlIGZpbHRlciwgRVhDTFVERSBnaXZlbiBjb2x1bW5zIHdpbGwgTk9UIGhhdmUgZmlsdGVyXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5zRmlsdGVyKGZpbHRlck9uQ29sdW1uOiBzdHJpbmdbXSwgZmlsdGVyQ29sdW1uTW9kZSA9IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1uTW9kZSA9IGZpbHRlckNvbHVtbk1vZGU7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbnMgPSBmaWx0ZXJPbkNvbHVtbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyBnaXZlbiB0eXBlIHRvIGNvbHVtbiB3aXRoIGdpdmVuIHByb3BlcnR5IGFuZCByZXR1cm5zIHRoaXMgdGFibGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgY29sdW1uJ3MgcHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdHlwZSBjdXN0b20gdHlwZSBmb3IgY29sdW1uXG4gICAgICogQHBhcmFtIGRpc3BsYXlUeXBlIGN1c3RvbSBjb2x1bW4gdmFsdWUgZGlzcGxheSB0eXBlXG4gICAgICogQHBhcmFtIGFyZ3MgYWRkaXRpb24gYXJndW1lbnRzIGZvciBjb2x1bW5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtblByZXNldFR5cGUocHJvcGVydHk6IHN0cmluZywgdHlwZTogQ29sdW1uVHlwZUVudW0sIGRpc3BsYXlUeXBlPzogQ29sdW1uRGlzcGxheVR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLl9jb2x1bW5zLmZpbmQoY29sID0+IHByb3BlcnR5ID09PSBjb2wucHJvcGVydHkpID8/IHRoaXMuYWRkQ29sdW1uKHByb3BlcnR5KS53aXRoVGl0bGUocHJvcGVydHkpO1xuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb2x1bW4uYXNUeXBlKHR5cGUsIGRpc3BsYXlUeXBlLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHRpdGxlIHRvIGNvbHVtbiB3aXRoIGdpdmVuIHByb3BlcnR5IGFuZCByZXR1cm5zIHRoaXMgdGFibGVcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgY29sdW1uJ3MgcHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGUgY29sdW1uJ3MgdGl0bGVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtblRpdGxlKHByb3BlcnR5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBwcm9wZXJ0eSA9PT0gY29sLnByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi53aXRoVGl0bGUodGl0bGUsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZXMgY29sdW1ucyBkZWZpbmVkIG9uIHRhYmxlIGJhc2VkIG9uIGRhdGEgZmV0Y2hlZCBmcm9tIGFwaVxuICAgICAqIEBwYXJhbSBkYXRhIGRhdGEgZnJvbSBhcGlcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9UYWJsZURlc2NyaXB0b3JGcm9tRGF0YShkYXRhOiBEYXRhTGlzdFJlc3VsdCk6IFRhYmxlRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlRGVzY3JpcHRvciA9IHRoaXMudG9UYWJsZURlc2NyaXB0b3IoKTtcblxuICAgICAgICBpZiAoZGF0YS5kYXRhID09IG51bGwgfHwgZGF0YS5kYXRhLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVEZXNjcmlwdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2JqZWN0TW9kZWwgPSBkYXRhLmRhdGFbMF07XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBmbGF0dGVuT2JqZWN0S2V5cyhvYmplY3RNb2RlbClcbiAgICAgICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhdGhpcy5fZXhjbHVkZWRDb2x1bW5zLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+ICFBcnJheS5pc0FycmF5KHZhbHVlKSk7IC8vZXhjbHVkZSBhcnJheXMgYW5kIHNldHNcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRhQ29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IGtleSk7XG4gICAgICAgICAgICBsZXQgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgYW55PjtcbiAgICAgICAgICAgIGlmIChtZXRhQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhQ29sdW1uLnZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbHVtbiA9IG1ldGFDb2x1bW4udG9Db2x1bW5EZXNjcmlwdG9yKCk7XG4gICAgICAgICAgICAgICAgdGFibGVEZXNjcmlwdG9yLndpdGhDb2x1bW4oY29sdW1uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gdGFibGVEZXNjcmlwdG9yLmFkZENvbHVtbihrZXkpLndpdGhUaXRsZShrZXkpO1xuICAgICAgICAgICAgICAgIGNvbHVtblRvRGF0ZU51bWJlck9yQm9vbGVhbihjb2x1bW4sIHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuaTE4bkJhc2VLZXkgJiYgIWNvbHVtbi5wcm9wZXJ0eS5pbmNsdWRlcygncmV2JykpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKFt0aGlzLm1vZGVsLmkxOG5CYXNlS2V5LCAncHJvcGVydGllcycsIGNvbHVtbi5wcm9wZXJ0eV0uam9pbignLicpLnJlcGxhY2UoJ3N0YXRlLicsICcnKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPZlNvcnRDb2x1bW5zID0gdGhpcy5fc29ydENvbHVtbnMuaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAodGhpcy5fc29ydENvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFICYmICFlbGVtZW50T2ZTb3J0Q29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5fc29ydENvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkgJiYgZWxlbWVudE9mU29ydENvbHVtbnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0YWJsZURlc2NyaXB0b3Iud2l0aFNvcnRVbnNhZmUoY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudE9mRmlsdGVyQ29sdW1ucyA9IHRoaXMuX2ZpbHRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uLnByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAoKHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5FWENMVURFICYmICFlbGVtZW50T2ZGaWx0ZXJDb2x1bW5zKSB8fFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5fZmlsdGVyQ29sdW1uTW9kZSA9PT0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSAmJiBlbGVtZW50T2ZGaWx0ZXJDb2x1bW5zKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRhYmxlRGVzY3JpcHRvci5hZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZShjb2x1bW4sIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZURlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkcyBDb2x1bW5EeW5hbWljRGVzY3JpcHRvciB0byB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFkZENvbHVtbihwcm9wZXJ0eToga2V5b2YgYW55KTogQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3Ige1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5fY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNvbHVtbihwcm9wZXJ0eToga2V5b2YgYW55KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSk7XG4gICAgICAgIGNvbHVtbi53aXRoVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNyZWF0ZXMgZGVlcCBjb3B5IG9mIHRhYmxlIGR5bmFtaWMgZGVzY3JpcHRvclxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjb3B5KCk6IFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCh0aGlzLm1vZGVsLmNvcHkoKSk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICBkZXNjcmlwdG9yLl9jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjID0+IGMuY29weSgpKTtcbiAgICAgICAgZGVzY3JpcHRvci5fZXhjbHVkZWRDb2x1bW5zID0gWy4uLnRoaXMuX2V4Y2x1ZGVkQ29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckNvbHVtbnMgPSBbLi4udGhpcy5fZmlsdGVyQ29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX3NvcnRDb2x1bW5zID0gWy4uLnRoaXMuX3NvcnRDb2x1bW5zXTtcbiAgICAgICAgZGVzY3JpcHRvci5fZmlsdGVyQ29sdW1uTW9kZSA9IHRoaXMuX2ZpbHRlckNvbHVtbk1vZGU7XG4gICAgICAgIGRlc2NyaXB0b3IuX3NvcnRDb2x1bW5Nb2RlID0gdGhpcy5fc29ydENvbHVtbk1vZGU7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1RhYmxlRGVzY3JpcHRvcigpOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvckluc3Q8YW55Pih0aGlzLm1vZGVsKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cbiJdfQ==
1116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsb0JBQW9CLEVBQTJFLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDN0osT0FBTyxFQUNILGdCQUFnQixFQUVoQix1QkFBdUIsRUFFdkIsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixjQUFjLEVBQ2pCLE1BQU0sK0JBQStCLENBQUM7QUFJdkMsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUF3QixjQUFjLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUc3RSxPQUFPLEVBQUMsMkJBQTJCLEVBQTJCLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxNQUFNLE9BQU8sbUJBQW1CO0lBeUQ1QixZQUFtQixLQUFrQyxFQUFFLGFBQWEsR0FBRyxLQUFLO1FBOUNsRSxhQUFRLEdBQTZDLEVBQUUsQ0FBQztRQUUxRCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixpQkFBWSxHQUFrQixlQUFlLENBQUM7UUFFdEQsUUFBUTtRQUNBLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBT3JDLFVBQVU7UUFDRixVQUFLLEdBQWtCLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDM0MsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUt4QixnQkFBZ0I7UUFDUixhQUFRLEdBQXdDLEVBQUUsQ0FB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QUFVLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELFVBQVUsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRCxVQUFVLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsVUFBVSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUN0RCxVQUFVLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDbEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFtQixDQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3IsIERhdGFMaXN0UmVzdWx0LCBFbnVtQ29uc3RhbnRUeXBlLCBJTG9va3VwRGF0YVByb3ZpZGVyLCBJVGFibGVEZXNjcmlwdG9yLCBmbGF0dGVuT2JqZWN0S2V5c30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7XG4gICAgRmlsdGVyRGVzY3JpcHRvcixcbiAgICBGaWx0ZXJEaXNwbGF5VHlwZUVudW0sXG4gICAgRmlsdGVyR2VuZXJpY0Rlc2NyaXB0b3IsXG4gICAgRmlsdGVyR2VuZXJpY1Byb3BlcnR5LFxuICAgIEZpbHRlckxvb2t1cERlc2NyaXB0b3IsXG4gICAgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmlsdGVyVHlwZUVudW1cbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtMb29rdXBEYXRhUHJvdmlkZXJJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcbmltcG9ydCB7RW51bURlc2NyaXB0b3IsIE1vZGVsRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7Y29sdW1uVG9EYXRlTnVtYmVyT3JCb29sZWFufSBmcm9tICcuLi9oZWxwZXJzL2NvbHVtbi1jb252ZXJ0ZXInO1xuaW1wb3J0IHtDb2x1bW5EaXNwbGF5VHlwZUVudW0sIENvbHVtblR5cGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcbmltcG9ydCB7SVJvd0V4cGFuZGFibGVDb21wb25lbnR9IGZyb20gJy4uL21vZGVscy9yb3ctZXhwYW5kYWJsZS1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHtJQ29sdW1uc01hbmFnZUludGVyZmFjZX0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHtUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0sIFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtLCBUYWJsZVNpemVFbnVtfSBmcm9tICcuLi9tb2RlbHMvdGFibGUubW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBDb2x1bW5EeW5hbWljRGVzY3JpcHRvcn0gZnJvbSAnLi9jb2x1bW4uZGVzY3JpcHRvcic7XG5pbXBvcnQge1NvcnREZXNjcmlwdG9yfSBmcm9tICcuL3NvcnQuZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZURlc2NyaXB0b3JJbnN0PFRhYmxlTW9kZWwsIFNvcnRzID0ga2V5b2YgVGFibGVNb2RlbCwgRmlsdGVycyA9IGtleW9mIFRhYmxlTW9kZWw+XG4gICAgaW1wbGVtZW50cyBJVGFibGVEZXNjcmlwdG9yPFRhYmxlTW9kZWwsIFNvcnRzLCBGaWx0ZXJzPiwgSUNvbHVtbnNNYW5hZ2VJbnRlcmZhY2U8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+XG57XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUYWJsZU1vZGVsPjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2F1dG9HZW5lcmF0ZWQ7XG5cbiAgICBwcml2YXRlIF9pZGVudGlmaWVyPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3RyYWNrUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcGFnaW5hdGlvbk1vZGU/OiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bTtcbiAgICBwcml2YXRlIF9yb3dzUGVyUGFnZU9wdGlvbnM/OiBudW1iZXJbXTtcbiAgICBwcml2YXRlIF9kZWZhdWx0TnVtUm93cz86IG51bWJlcjtcbiAgICBwcm90ZWN0ZWQgX2NvbHVtbnM6IEFycmF5PENvbHVtbkRlc2NyaXB0b3I8YW55LCBUYWJsZU1vZGVsPj4gPSBbXTtcbiAgICBwcml2YXRlIF90aXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9oaWRlSGVhZGVyID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9hZGluZ1RleHQ/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbG9hZGluZ0ljb246IHN0cmluZyB8IG51bGwgPSAncGkgcGktc3Bpbm5lcic7XG5cbiAgICAvLyBleHRyYVxuICAgIHByaXZhdGUgX2hhc0hvdmVyID0gdHJ1ZTtcbiAgICBwcml2YXRlIF9oYXNHcmlkbGluZXMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9oYXNSZXNpemFibGVDb2x1bW5zID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfY29sdW1uUmVzaXplTW9kZT86ICdmaXQnIHwgJ2V4cGFuZCc7XG5cbiAgICAvLyBzcGVjaWFsIGNvbHVtbnNcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25Db2x1bW5Gcm96ZW4/OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2FjdGlvbkNvbHVtbkZyb3plbj86IGJvb2xlYW47XG5cbiAgICAvLyBzdHlsaW5nXG4gICAgcHJpdmF0ZSBfc2l6ZTogVGFibGVTaXplRW51bSA9IFRhYmxlU2l6ZUVudW0uTGFyZ2U7XG4gICAgcHJpdmF0ZSBfY2xhc3NOYW1lID0gJyc7XG4gICAgcHJpdmF0ZSBfaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3Jvd0NsYXNzTmFtZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9yb3dDbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUYWJsZU1vZGVsKSA9PiBzdHJpbmc7XG5cbiAgICAvLyBmaWx0ZXJzJnNvcnRzXG4gICAgcHJpdmF0ZSBfZmlsdGVyczogRmlsdGVyRGVzY3JpcHRvcjxhbnksIFRhYmxlTW9kZWw+W10gPSBbXTtcbiAgICBwcml2YXRlIF9nZW5lcmljRmlsdGVyPzogRmlsdGVyR2VuZXJpY0Rlc2NyaXB0b3I7XG4gICAgcHJpdmF0ZSBfc29ydHM6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+W10gPSBbXTtcblxuICAgIC8vIGxvY2FsaXphdGlvblxuICAgIHByaXZhdGUgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvLyByb3cgZXhwYW5kXG4gICAgcHJpdmF0ZSBfcm93RXhwYW5kYWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGVDb2xTcGFuID0gMTAwO1xuICAgIHByaXZhdGUgX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcml2YXRlIF9pc1Jvd0V4cGFuZGVkPzogc3RyaW5nIHwgKChpdGVtOiBUYWJsZU1vZGVsKSA9PiBib29sZWFuKTtcbiAgICBwcml2YXRlIF9yb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZT86IFR5cGU8SVJvd0V4cGFuZGFibGVDb21wb25lbnQ8VGFibGVNb2RlbD4+O1xuXG4gICAgLy8gcm93IHJlb3JkZXJcbiAgICBwcml2YXRlIF9yb3dSZW9yZGVyYWJsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfc2VhcmNoPzogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9zZWFyY2hMaW1pdE1heFdvcmRzPzogbnVtYmVyIHwgbnVsbDtcbiAgICBwcml2YXRlIF9zZWFyY2hGaWVsZHM/OiBzdHJpbmdbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFRhYmxlTW9kZWw+LCBhdXRvR2VuZXJhdGVkID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICAgICAgdGhpcy5fdHJhY2tQcm9wZXJ0eSA9IHRoaXMuX21vZGVsLmlkUHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2F1dG9HZW5lcmF0ZWQgPSBhdXRvR2VuZXJhdGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWRlbnRpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0cmFja1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2tQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhZ2luYXRpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgZ2V0IHJvd3NQZXJQYWdlT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdE51bVJvd3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0TnVtUm93cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGVIZWFkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlSGVhZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZGluZ1RleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nVGV4dDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdJY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ0ljb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVycztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGdlbmVyaWNGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmljRmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc29ydHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2g7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZWFyY2hMaW1pdE1heFdvcmRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoTGltaXRNYXhXb3JkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzSG92ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNIb3ZlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0dyaWRsaW5lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0dyaWRsaW5lcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1Jlc2l6YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY29sdW1uUmVzaXplTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtblJlc2l6ZU1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dDbGFzc05hbWVNYXBGbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0NsYXNzTmFtZU1hcEZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uQ29sdW1uRnJvemVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aW9uQ29sdW1uRnJvemVuO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGVhZGVyQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNMb2NhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2FsaXplZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dSZW9yZGVyYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1Jlb3JkZXJhYmxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcm93RXhwYW5kYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlQ29sU3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgdGFibGUgbW9kZWwgcHJvcGVydHkgdGVsbHMgdXMgaWYgdGhlIHNwZWNpZmljIHJvdyBzaG91bGQgYmUgZXhwYW5kYWJsZSBvciBub3QgYmFzZWQgb24gcm93IGl0ZW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0V4cGFuZGFibGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHRhYmxlIG1vZGVsIHByb3BlcnR5IHRlbGxzIHVzIHdoZW4gdGhlIHRhYmxlIHJvdyBzaG91bGQgYmUgZXhwYW5kZWQgYnkgZGVmYXVsdCwgd2l0aG91dCBjbGlja2luZyBvbiB0aGUgdG9nZ2xlIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzUm93RXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Jvd0V4cGFuZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdGhlIGN1c3RvbSBjb21wb25lbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBleHBhbmRlZCByb3cuXG4gICAgICovXG4gICAgcHVibGljIGdldCByb3dFeHBhbmRhYmxlQ29tcG9uZW50VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0V4cGFuZGFibGVDb21wb25lbnRUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElkZW50aWZpZXIgaXMgdXNlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgY29tYmluZWQgc2F2aW5nIHVzZXIgcHJlZmVyZW5jZXMgaW4gbG9jYWxzdG9yYWdlIGlmIDIgdGFibGVzIGhhdmUgdGhlIHNhbWUgdHJhY2sgcHJvcGVydGllcyB0aGV5IHdpbGwgc2hhcmUgdGhlIHNhbWUgbG9jYWxzdG9yYWdlIGVudHJ5LlxuICAgICAqIFNpbWlsYXJseSwgdGhpcyBwcm9wZXJ0eSBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdHdvIHRhYmxlcyBvZiB0aGUgc2FtZSBtb2RlbCBvbiB0aGUgc2FtZSB1cmwgKHNvIHRoYXQgdGhleSBoYXZlIHNlcGFyYXRlIGVudHJpZXMgaW4gbG9jYWxzdG9yYWdlKS5cbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllclxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoSWRlbnRpZmllcihpZGVudGlmaWVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faWRlbnRpZmllciA9IGlkZW50aWZpZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRyYWNrIHByb3BlcnR5IChpZGVudGlmaWVyIG9mIHRhYmxlIHJvdykgZm9yIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7a2V5b2YgVGFibGVNb2RlbH0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gdHJhY2sgdGhlIHJvdyBpdGVtcyBieS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRyYWNrUHJvcGVydHkocHJvcGVydHk/OiBrZXlvZiBUYWJsZU1vZGVsKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhUcmFja1Byb3BlcnR5VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdHJhY2sgcHJvcGVydHkgKGlkZW50aWZpZXIgb2YgdGFibGUgcm93KSBmb3IgdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gc2V0ICdfdHJhY2tQcm9wZXJ0eScgdG8uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhUcmFja1Byb3BlcnR5VW5zYWZlKHByb3BlcnR5Pzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RyYWNrUHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb2x1bW4gZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtrZXlvZiBUYWJsZU1vZGVsfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBmb3IgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29sdW1uPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCwgQ29sdW1uTW9kZWwgPSBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5XT4sIENvbHVtblZhbHVlID0gVGFibGVNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHlcbiAgICApOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29sdW1uVW5zYWZlPENvbHVtbk1vZGVsLCBDb2x1bW5WYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGNvbHVtbiBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7a2V5b2YgVGFibGVNb2RlbH0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgZm9yIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbHVtblVuc2FmZTxDb2x1bW5Nb2RlbCA9IGFueSwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGNvbHVtbiBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2tleW9mIFRhYmxlTW9kZWx9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGZvciBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlQ29sdW1uKHByb3BlcnR5OiBrZXlvZiBUYWJsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgY29sdW1uIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHtrZXlvZiBUYWJsZU1vZGVsfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBmb3IgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUNvbHVtblVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbklkeCA9IHRoaXMuX2NvbHVtbnMuZmluZEluZGV4KGMgPT4gYy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnNwbGljZShjb2x1bW5JZHgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgY29sdW1uIGRlc2NyaXB0b3IgdG8gdGFibGUgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWU+fSBjb2x1bW4gLSBUaGUgcHJvcGVydHkgZm9yIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uPENvbHVtbk1vZGVsLCBDb2x1bW5WYWx1ZSA9IENvbHVtbk1vZGVsPihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbHVtbiB0byB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5S2V5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGNvbHVtbiBpbiB0aGUgdGFibGUgbW9kZWwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3bHkgYWRkZWQgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZENvbHVtbjxQcm9wZXJ0eUtleSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWw+KHByb3BlcnR5OiBQcm9wZXJ0eUtleSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPihwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY29sdW1uIHdpdGggZW51bSBkaXNwbGF5IHRvIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHlLZXl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgdGFibGUgbW9kZWwuXG4gICAgICogQHBhcmFtIHtFbnVtRGVzY3JpcHRvcjxFbnVtPn0gZW51bURlc2MgLSBUaGUgZW51bSBkZXNjcmlwdG9yIGZvciBjb2x1bW4gZGlzcGxheS5cbiAgICAgKiBAcmV0dXJuIHtDb2x1bW5EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPn0gLSBUaGUgYWRkZWQgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZENvbHVtbkVudW08UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+Pihwcm9wZXJ0eTogUHJvcGVydHlLZXksIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPikge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsLCBUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgY29sdW1uLmFzRW51bVVuc2FmZShlbnVtRGVzYyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBjb2x1bW4gaW4gdGhlIHRhYmxlIG1vZGVsLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIG5ld2x5IGFkZGVkIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRDb2x1bW5VbnNhZmU8Q29sdW1uTW9kZWwgPSB1bmtub3duPihwcm9wZXJ0eTogc3RyaW5nKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBuZXcgQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbD4ocHJvcGVydHkpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG9uZSBvciBtb3JlIGNvbHVtbnMgdG8gdGhlIHRhYmxlIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBBbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB0byBhZGQgYXMgY29sdW1ucy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxlTW9kZWwpW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy5hZGRDb2x1bW4ocCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHBhZ2luYXRpb24gbW9kZSBmb3IgdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtUYWJsZVBhZ2luYXRpb25Nb2RlRW51bX0gcGFnaW5hdGlvbk1vZGUgLSBUaGUgcGFnaW5hdGlvbiBtb2RlIHRvIHNldC4gTXVzdCBiZSBvbmUgb2YgdGhlIHZhbHVlcyBmcm9tIHRoZSBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFBhZ2luYXRpb25Nb2RlKHBhZ2luYXRpb25Nb2RlOiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uTW9kZSA9IHBhZ2luYXRpb25Nb2RlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZSBmb3IgYSBwYWdpbmF0ZWQgZGlzcGxheS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3dzIC0gVGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSBwZXIgcGFnZS5cbiAgICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zXSAtIFJvd3MgcGVyIHBhZ2Ugb3B0aW9ucyB0byBiZSBhdmFpbGFibGUgaW4gdGFibGUgcGFnaW5hdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoUm93c1BlclBhZ2Uocm93czogbnVtYmVyLCBvcHRpb25zPzogQXJyYXk8bnVtYmVyPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kZWZhdWx0TnVtUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRpdGxlIGZvciBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RpdGxlXSAtIFRoZSB0aXRsZSB2YWx1ZSB0byBiZSBzZXQuIEl0IHVuZGVmaW5lZCwgbm8gdGl0bGUgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZT86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzL2hpZGVzIHRoZSBoZWFkZXIgcm93IHdpdGggY29sdW1uIHRpdGxlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGlkZUhlYWRlciAtIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gaGlkZSB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoSGlkZUhlYWRlcihoaWRlSGVhZGVyID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9oaWRlSGVhZGVyID0gaGlkZUhlYWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRqdXN0cyBsb2FkaW5nIGRpc3BsYXkgd2l0aCBjdXN0b20gdGV4dCBhbmQvb3IgaWNvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBUZXh0IHRvIGJlIGRpc3BsYXllZCB3aGVuIGxvYWRpbmcgaW5kaWNhdG9yIGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gW2ljb25dIC0gSWNvbiB0byBiZSB1c2VkIHdoZW4gbG9hZGluZyBpbmRpY2F0b3IgaXMgc2hvd24uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhMb2FkaW5nKHRleHQ/OiBzdHJpbmcsIGljb24/OiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdUZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0ljb24gPSBpY29uID09PSB1bmRlZmluZWQgPyAncGkgcGktc3Bpbm5lcicgOiBpY29uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHNvcnQgZGVzY3JpcHRvciBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U29ydHN9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIHRoZSBzb3J0IGZvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1NvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHwgbnVsbH0gVGhlIHNvcnQgZGVzY3JpcHRvciBvciBudWxsLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTb3J0KHByb3BlcnR5OiBTb3J0cyk6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHNvcnQgZGVzY3JpcHRvciBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHtTb3J0c30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gcmV0cmlldmUgdGhlIHNvcnQgZm9yLlxuICAgICAqXG4gICAgICogQHJldHVybiB7U29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4gfCBudWxsfSBUaGUgc29ydCBkZXNjcmlwdG9yIG9yIG51bGwuXG4gICAgICovXG4gICAgcHVibGljIGdldFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0cy5maW5kKHMgPT4gcy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc29ydCBmb3IgYSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U29ydHN9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHJlbW92ZSB0aGUgc29ydCBmb3IuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZVNvcnQocHJvcGVydHk6IFNvcnRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzb3J0IGZvciBhIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NvcnRzfSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byByZW1vdmUgdGhlIHNvcnQgZm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydElkeCA9IHRoaXMuX3NvcnRzLmZpbmRJbmRleChjID0+IGMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgdGhpcy5fc29ydHMuc3BsaWNlKHNvcnRJZHgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgc29ydCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IHRvIGFkZCB0aGUgc29ydCBmb3IuXG4gICAgICogQHBhcmFtIGlzRGVmYXVsdCBJZiBkZWZhdWx0IHNvcnRpbmcgaXMgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gYXNjZW5kaW5nIElmIGRlZmF1bHQgc29ydCBzaG91bGQgYmUgYXNjZW5kaW5nLlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIHNvcnQgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU29ydChwcm9wZXJ0eTogU29ydHMsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgaXNEZWZhdWx0LCBhc2NlbmRpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgc29ydCBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgdG8gYWRkIHRoZSBzb3J0IGZvci5cbiAgICAgKiBAcGFyYW0gaXNEZWZhdWx0IElmIGRlZmF1bHQgc29ydGluZyBpcyBlbmFibGVkLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgSWYgZGVmYXVsdCBzb3J0IHNob3VsZCBiZSBhc2NlbmRpbmcuXG5cbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgc29ydCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdCA9IGZhbHNlLCBhc2NlbmRpbmc/OiBib29sZWFuKTogU29ydERlc2NyaXB0b3I8VGFibGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+KHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGlzRGVmYXVsdCkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9yZGVyTWF4ID0gdGhpcy5fc29ydHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5kZWZhdWx0SXNFbmFibGVkKVxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgcykgPT4gKHMuZGVmYXVsdE9yZGVyICE9PSB1bmRlZmluZWQgJiYgcy5kZWZhdWx0T3JkZXIgPiBhY2MgPyBzLmRlZmF1bHRPcmRlciA6IGFjYyksIC0xKTtcbiAgICAgICAgICAgIHNvcnQud2l0aERlZmF1bHRTb3J0KHRydWUsIGFzY2VuZGluZywgZGVmYXVsdE9yZGVyTWF4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc29ydHMucHVzaChzb3J0KTtcbiAgICAgICAgcmV0dXJuIHNvcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBzb3J0IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgdG8gYWRkIHRoZSBzb3J0IGZvci5cbiAgICAgKiBAcGFyYW0gaXNEZWZhdWx0IElmIGRlZmF1bHQgc29ydGluZyBpcyBlbmFibGVkLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgSWYgZGVmYXVsdCBzb3J0IHNob3VsZCBiZSBhc2NlbmRpbmcuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNvcnRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBzb3J0IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBhZGQgdGhlIHNvcnQgZm9yLlxuICAgICAqIEBwYXJhbSBpc0RlZmF1bHQgSWYgZGVmYXVsdCBzb3J0aW5nIGlzIGVuYWJsZWQuXG4gICAgICogQHBhcmFtIGFzY2VuZGluZyBJZiBkZWZhdWx0IHNvcnQgc2hvdWxkIGJlIGFzY2VuZGluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNvcnRVbnNhZmUocHJvcGVydHk6IHN0cmluZywgaXNEZWZhdWx0ID0gZmFsc2UsIGFzY2VuZGluZz86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hZGRTb3J0VW5zYWZlKHByb3BlcnR5LCBpc0RlZmF1bHQsIGFzY2VuZGluZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRlZmF1bHQgc29ydGluZyBmb3IgdGhlIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHNldCBkZWZhdWx0IHNvcnQgZm9yLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgLSBJZiB0aGUgc29ydGluZyBzaG91bGQgYmUgYXNjZW5kaW5nIChkZWZhdWx0OiB0cnVlKS5cbiAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZXMvZGlzYWJsZWQgdGhlIGRlZmF1bHQgc29ydC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0KHByb3BlcnR5OiBTb3J0cywgYXNjZW5kaW5nPzogYm9vbGVhbiwgZW5hYmxlZD86IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aERlZmF1bHRTb3J0VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgYXNjZW5kaW5nLCBlbmFibGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHNvcnRpbmcgZm9yIHRoZSBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIHNldCBkZWZhdWx0IHNvcnQgZm9yLlxuICAgICAqIEBwYXJhbSBhc2NlbmRpbmcgLSBJZiB0aGUgc29ydGluZyBzaG91bGQgYmUgYXNjZW5kaW5nIChkZWZhdWx0OiB0cnVlKS5cbiAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZXMvZGlzYWJsZWQgdGhlIGRlZmF1bHQgc29ydC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGFzY2VuZGluZz86IGJvb2xlYW4sIGVuYWJsZWQ/OiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIGxldCBzb3J0ID0gdGhpcy5fc29ydHMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFzb3J0KSB7XG4gICAgICAgICAgICBzb3J0ID0gbmV3IFNvcnREZXNjcmlwdG9yKHByb3BlcnR5KTtcbiAgICAgICAgICAgIHRoaXMuX3NvcnRzLnB1c2goc29ydCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLl9zb3J0cy5maWx0ZXIocyA9PiBzLmRlZmF1bHRJc0VuYWJsZWQpLnJlZHVjZSgoYWNjLCBzKSA9PiAocy5kZWZhdWx0T3JkZXIgPT0gbnVsbCB8fCBzLmRlZmF1bHRPcmRlciA8IGFjYyA/IGFjYyA6IHMuZGVmYXVsdE9yZGVyICsgMSksIDApO1xuICAgICAgICBzb3J0LndpdGhEZWZhdWx0U29ydChlbmFibGVkID8/IHRydWUsIGFzY2VuZGluZywgb3JkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHNvcnRpbmcgZm9yIHByb3ZpZGVkIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyAtIFRoZSBwcm9wZXJ0aWVzIHRvIHNldCBkZWZhdWx0IHNvcnQgZm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGVmYXVsdFNvcnRzKC4uLnByb3BlcnRpZXM6IFNvcnRzW10pOiB0aGlzIHtcbiAgICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4gdGhpcy53aXRoRGVmYXVsdFNvcnRVbnNhZmUocCBhcyBzdHJpbmcpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZXRzIGFsbCBkZWZhdWx0IHNvcnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRob3V0RGVmYXVsdFNvcnRzKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zb3J0cy5mb3JFYWNoKHMgPT4gcy53aXRoRGVmYXVsdFNvcnQoZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBzb3J0cyBmb3IgbW9yZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgUHJvcGVydGllcyB0byBhZGQgdGhlIHNvcnRzIGZvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNvcnRzKC4uLnByb3BlcnRpZXM6IFNvcnRzW10pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNvcnRzVW5zYWZlKC4uLihwcm9wZXJ0aWVzIGFzIHN0cmluZ1tdKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHNvcnRzIGZvciBtb3JlIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMgdG8gYWRkIHRoZSBzb3J0cyBmb3IuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhTb3J0c1Vuc2FmZSguLi5wcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zb3J0cy5wdXNoKG5ldyBTb3J0RGVzY3JpcHRvcihwKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGZpbHRlciBkZXNjcmlwdG9yIGZvciBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEByZXR1cm4gRmlsdGVyIGRlc2NyaXB0b3IgZm9yIHByb3BlcnR5IG9yIG51bGwgaWYgbm90IGV4aXN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmlsdGVyPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW0ZpbHRlcnNdPiA6IGFueT4ocHJvcGVydHk6IEZpbHRlcnMpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHlcbiAgICAgKlxuICAgICAqIEByZXR1cm4gRmlsdGVyIGRlc2NyaXB0b3IgZm9yIHByb3BlcnR5IG9yIG51bGwgaWYgbm90IGV4aXN0cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsID0gYW55Pihwcm9wZXJ0eTogc3RyaW5nKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMuZmluZChzID0+IHMucHJvcGVydHkgPT09IHByb3BlcnR5KSA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZmlsdGVyIGRlc2NyaXB0b3IgZm9yIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVGaWx0ZXIocHJvcGVydHk6IEZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVySWR4ID0gdGhpcy5fZmlsdGVycy5maW5kSW5kZXgoYyA9PiBjLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMuc3BsaWNlKGZpbHRlcklkeCwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBUYWJsZU1vZGVsW0ZpbHRlcnNdIDogbmV2ZXI+KHByb3BlcnR5OiBGaWx0ZXJzKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIGZpbHRlciBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPihwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuX2ZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGxvb2t1cCBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBwcm92aWRlciBMb29rdXAgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIG9wdGlvbnNWYWx1ZVByb3BlcnR5IFByb3BlcnR5IG9uIGxvb2t1cCBwcm92aWRlcidzIGl0ZW0gKEZpbHRlck1vZGVsKSB0aGF0IHdpbGwgYmUgdXNlZCBhcyBmaWx0ZXIgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJMb29rdXA8RmlsdGVyTW9kZWwgPSBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCA/IE5vbk51bGxhYmxlPFRhYmxlTW9kZWxbRmlsdGVyc10+IDogbmV2ZXIsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBwcm9wZXJ0eTogRmlsdGVycyxcbiAgICAgICAgcHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlck1vZGVsLCBTZXJ2aWNlLCBhbnksIGFueT4sXG4gICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzoga2V5b2YgRmlsdGVyTW9kZWxcbiAgICApOiBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBTZXJ2aWNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpbHRlckxvb2t1cFVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCBvcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGxvb2t1cCBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIHByb3ZpZGVyIExvb2t1cCBwcm92aWRlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9uc1ZhbHVlUHJvcGVydHkgUHJvcGVydHkgb24gbG9va3VwIHByb3ZpZGVyJ3MgaXRlbSAoRmlsdGVyTW9kZWwpIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGZpbHRlciB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpbHRlckxvb2t1cFVuc2FmZTxGaWx0ZXJNb2RlbCwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyPzogSUxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJNb2RlbCwgU2VydmljZSwgYW55LCBhbnk+LFxuICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT86IHN0cmluZ1xuICAgICk6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+KHByb3BlcnR5LCB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXI6IHByb3ZpZGVyLFxuICAgICAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IG9wdGlvbnNWYWx1ZVByb3BlcnR5XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZpbHRlciBsb29rdXAgZW51bSBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgRmlsdGVyIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBlbnVtRGVzYyBEZXNjcmlwdG9yIGZvciBlbnVtLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnMgb2YgZW51bSB2YWx1ZXMgdG8gYmUgYXZhaWxhYmxlIHRvIGZpbHRlciBieS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQ3JlYXRlZCBmaWx0ZXIgbG9va3VwIGVudW0gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyTG9va3VwRW51bTxFbnVtPihwcm9wZXJ0eTogRmlsdGVycywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyTG9va3VwRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSBhcyBzdHJpbmcsIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZpbHRlciBsb29rdXAgZW51bSBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBGaWx0ZXIgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGVudW1EZXNjIERlc2NyaXB0b3IgZm9yIGVudW0uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgb3B0aW9ucyBvZiBlbnVtIHZhbHVlcyB0byBiZSBhdmFpbGFibGUgdG8gZmlsdGVyIGJ5LlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIGZpbHRlciBsb29rdXAgZW51bSBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWx0ZXJMb29rdXBFbnVtVW5zYWZlPEVudW0gPSBFbnVtQ29uc3RhbnRUeXBlPihwcm9wZXJ0eTogc3RyaW5nLCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sIG9wdGlvbnM/OiBBcnJheTxFbnVtPikge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IocHJvcGVydHksIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBmaWx0ZXIgZGVzY3JpcHRvciBmcm9tIGNvbHVtbi4gVGhlIGNvbHVtbiBtdXN0IGV4aXN0IG9uIHRhYmxlIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgQ29sdW1uIHByb3BlcnR5IHRvIGFkZCBmaWx0ZXIgZm9yLlxuICAgICAqIEBwYXJhbSBkaXNwbGF5VHlwZSBPcHRpb25hbCBkaXNwbGF5IHR5cGUgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0gZm9yY2VTaW1wbGUgRm9yY2VzIHNpbXBsZSBjcmVhdGlvbiBvZiBmaWx0ZXIgKG5vIGxvb2t1cCBvciBsb29rdXAgZW51bSBmaWx0ZXJzKS5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBjb2x1bW4gZm9yIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtbjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwsIEZpbHRlck1vZGVsID0gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IEV4dHJhY3Q8RmlsdGVycywgUHJvcGVydHk+LFxuICAgICAgICBkaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSxcbiAgICAgICAgZm9yY2VTaW1wbGUgPSBmYWxzZVxuICAgICk6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGRpc3BsYXlUeXBlLCBmb3JjZVNpbXBsZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEdlbmVyaWNGaWx0ZXIocHJvcGVydHlMb29rdXBEYXRhUHJvdmlkZXI6IExvb2t1cERhdGFQcm92aWRlckluc3Q8RmlsdGVyR2VuZXJpY1Byb3BlcnR5Pik6IEZpbHRlckdlbmVyaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgdGhpcy5fZ2VuZXJpY0ZpbHRlciA9IG5ldyBGaWx0ZXJHZW5lcmljRGVzY3JpcHRvcihwcm9wZXJ0eUxvb2t1cERhdGFQcm92aWRlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZW5lcmljRmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoR2VuZXJpY0ZpbHRlcihcbiAgICAgICAgcHJvcGVydHlMb29rdXBEYXRhUHJvdmlkZXI6IExvb2t1cERhdGFQcm92aWRlckluc3Q8RmlsdGVyR2VuZXJpY1Byb3BlcnR5PixcbiAgICAgICAgdmFsdWVMb29rdXBEYXRhUHJvdmlkZXI/OiBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgYW55LCBhbnksICdmaWVsZCc+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2dlbmVyaWNGaWx0ZXIgPSB0aGlzLmFkZEdlbmVyaWNGaWx0ZXIocHJvcGVydHlMb29rdXBEYXRhUHJvdmlkZXIpO1xuXG4gICAgICAgIGlmICh2YWx1ZUxvb2t1cERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy5fZ2VuZXJpY0ZpbHRlci53aXRoVmFsdWVMb29rdXAodmFsdWVMb29rdXBEYXRhUHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3JzIGZyb20gY29sdW1ucy4gVGhlIGNvbHVtbnMgbXVzdCBleGlzdCBvbiB0YWJsZSBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQ29sdW1uIHByb3BlcnRpZXMgdG8gYWRkIGZpbHRlcnMgZm9yLlxuICAgICAqXG4gICAgICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IElmIGNvbHVtbiBmb3IgcHJvcGVydHkgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpbHRlcnNGcm9tQ29sdW1ucyguLi5wcm9wZXJ0aWVzOiBFeHRyYWN0PEZpbHRlcnMsIGtleW9mIFRhYmxlTW9kZWw+W10pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpbHRlcnNGcm9tQ29sdW1uc1Vuc2FmZSguLi4ocHJvcGVydGllcyBhcyBzdHJpbmdbXSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3JzIGZyb20gY29sdW1ucy4gVGhlIGNvbHVtbnMgbXVzdCBleGlzdCBvbiB0YWJsZSBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBDb2x1bW4gcHJvcGVydGllcyB0byBhZGQgZmlsdGVycyBmb3IuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gSWYgY29sdW1uIGZvciBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmlsdGVyc0Zyb21Db2x1bW5zVW5zYWZlKC4uLnByb3BlcnRpZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZShwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZmlsdGVyIGRlc2NyaXB0b3IgZnJvbSBjb2x1bW4uIFRoZSBjb2x1bW4gbXVzdCBleGlzdCBvbiB0YWJsZSBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBVTlNBRkUhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgQ29sdW1uIHByb3BlcnR5IHRvIGFkZCBmaWx0ZXIgZm9yLlxuICAgICAqIEBwYXJhbSBkaXNwbGF5VHlwZSBPcHRpb25hbCBkaXNwbGF5IHR5cGUgc2V0dGluZy5cbiAgICAgKiBAcGFyYW0gZm9yY2VTaW1wbGUgRm9yY2VzIHNpbXBsZSBjcmVhdGlvbiBvZiBmaWx0ZXIgKG5vIGxvb2t1cCBvciBsb29rdXAgZW51bSBmaWx0ZXJzKS5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSBJZiBjb2x1bW4gZm9yIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIENyZWF0ZWQgZmlsdGVyIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZTxGaWx0ZXJNb2RlbCA9IGFueT4ocHJvcGVydHk6IHN0cmluZywgZGlzcGxheVR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0sIGZvcmNlU2ltcGxlID0gZmFsc2UpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uVW5zYWZlPEZpbHRlck1vZGVsLCBhbnk+KHByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgTm8gY29sdW1uIGZvdW5kIGZvciBmaWx0ZXIgcHJvcGVydHkgXCIke3Byb3BlcnR5fVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5hZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZTxGaWx0ZXJNb2RlbD4oY29sdW1uLCBmb3JjZVNpbXBsZSk7XG4gICAgICAgIGlmIChkaXNwbGF5VHlwZSAhPSBudWxsKSBmaWx0ZXIud2l0aERpc3BsYXlUeXBlKGRpc3BsYXlUeXBlKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZpbHRlciBkZXNjcmlwdG9yIGZyb20gcHJvdmlkZWQgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIFVOU0FGRSFcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGZvcmNlU2ltcGxlIEZvcmNlcyBzaW1wbGUgY3JlYXRpb24gb2YgZmlsdGVyIChubyBsb29rdXAgb3IgbG9va3VwIGVudW0gZmlsdGVycykuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gSWYgY29sdW1uIGZvciBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0LlxuICAgICAqXG4gICAgICogQHJldHVybiBDcmVhdGVkIGZpbHRlciBkZXNjcmlwdG9yXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpbHRlckZyb21Db2x1bW5EZXNjcmlwdG9yVW5zYWZlPEZpbHRlck1vZGVsPihcbiAgICAgICAgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsLCBhbnk+LFxuICAgICAgICBmb3JjZVNpbXBsZSA9IGZhbHNlXG4gICAgKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4ge1xuICAgICAgICBsZXQgZmlsdGVyRGVzY3JpcHRvciA9IG5ldyBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPihjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICBsZXQgZmlsdGVyVHlwZTogRmlsdGVyVHlwZUVudW07XG5cbiAgICAgICAgc3dpdGNoIChjb2x1bW4uY29sdW1uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5OdW1iZXI6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLk51bWJlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZUVudW0uRW51bTpcbiAgICAgICAgICAgICAgICBpZiAoIWZvcmNlU2ltcGxlICYmIGNvbHVtbi5lbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IgPSBuZXcgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3IoY29sdW1uLnByb3BlcnR5LCBjb2x1bW4uZW51bSkgYXMgRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD47XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlRW51bS5TdHJpbmc6XG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGVFbnVtLkN1c3RvbTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckRlc2NyaXB0b3IuYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGUpO1xuICAgICAgICBpZiAoKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlciB8fCBmaWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5EYXRlKSAmJiBjb2x1bW4uZGlzcGxheUZvcm1hdCkge1xuICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci53aXRoRGlzcGxheUZvcm1hdChjb2x1bW4uZGlzcGxheUZvcm1hdCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyRGVzY3JpcHRvcik7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBmaWx0ZXIgZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IEZpbHRlciBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gZmlsdGVyIERlc2NyaXB0b3IgZm9yIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmlsdGVyPEZpbHRlck1vZGVsPihwcm9wZXJ0eTogRmlsdGVycywgZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPik6IHRoaXMge1xuICAgICAgICBpZiAoZmlsdGVyLnByb3BlcnR5ICE9PSBwcm9wZXJ0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBGaWx0ZXIgcHJvcGVydHkgXCIke3Byb3BlcnR5fVwiIGFuZCBGaWx0ZXIgZGVzY3JpcHRvciBwcm9wZXJ0eSBcIiR7ZmlsdGVyLnByb3BlcnR5fVwiIGRvIG5vdCBtYXRjaC5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihmaWx0ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZmlsdGVyIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgVU5TQUZFIVxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbHRlciBEZXNjcmlwdG9yIGZvciBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpbHRlclVuc2FmZTxGaWx0ZXJNb2RlbD4oZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZ2xvYmFsIHNlYXJjaCBvcHRpb24gZm9yIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VhcmNoIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGdsb2JhbCBzZWFyY2ggc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAgICogQHBhcmFtIG9wdHMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHNlYXJjaC4gbGltaXRNYXhXb3JkcyBjYW4gbGltaXQgbWF4IHdvcmRzIGFzIHNlYXJjaCBpbnB1dCBhbmQgZmllbGRzIGNhbiBsaW1pdFxuICAgICAqIHRoZSBmaWx0ZXJpbmcgZmllbGRzIGluY2x1ZGVkIGluIHNlYXJjaCB3aGVuIGxhenkgbG9hZCBpcyBub3QgYmVpbmcgdXNlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNlYXJjaChzZWFyY2ggPSB0cnVlLCBvcHRzPzoge2xpbWl0TWF4V29yZHM/OiBudW1iZXIgfCBudWxsOyBmaWVsZHM/OiAoa2V5b2YgVGFibGVNb2RlbClbXX0pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlYXJjaFVuc2FmZShzZWFyY2gsIHtcbiAgICAgICAgICAgIGZpZWxkczogb3B0cz8uZmllbGRzIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgbGltaXRNYXhXb3Jkczogb3B0cz8ubGltaXRNYXhXb3Jkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBnbG9iYWwgc2VhcmNoIG9wdGlvbiBmb3IgdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWFyY2ggLSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZ2xvYmFsIHNlYXJjaCBzaG91bGQgYmUgZW5hYmxlZC5cbiAgICAgKiBAcGFyYW0gb3B0cyAtIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3Igc2VhcmNoLiBsaW1pdE1heFdvcmRzIGNhbiBsaW1pdCBtYXggd29yZHMgYXMgc2VhcmNoIGlucHV0IGFuZCBmaWVsZHMgY2FuIGxpbWl0XG4gICAgICogdGhlIGZpbHRlcmluZyBmaWVsZHMgaW5jbHVkZWQgaW4gc2VhcmNoIHdoZW4gbGF6eSBsb2FkIGlzIG5vdCBiZWluZyB1c2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoU2VhcmNoVW5zYWZlKHNlYXJjaCA9IHRydWUsIG9wdHM/OiB7bGltaXRNYXhXb3Jkcz86IG51bWJlciB8IG51bGw7IGZpZWxkcz86IHN0cmluZ1tdfSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zZWFyY2ggPSBzZWFyY2g7XG4gICAgICAgIHRoaXMuX3NlYXJjaExpbWl0TWF4V29yZHMgPSBvcHRzPy5saW1pdE1heFdvcmRzO1xuICAgICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBvcHRzPy5maWVsZHMgYXMgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY2xhc3NlcyBmb3IgdGFibGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNsYXNzTmFtZSBDbGFzcyBuYW1lcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGFibGUgc2l6aW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNpemUgVGFibGUgc2l6ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFNpemUoc2l6ZTogVGFibGVTaXplRW51bSA9IFRhYmxlU2l6ZUVudW0uTm9ybWFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NpemUgPSBzaXplO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGhvdmVyIGVmZmVjdCBvbiB0YWJsZSByb3dzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGhvdmVyIEVuYWJsZXMvZGlzYWJsZXMgdGhlIGhvdmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoSG92ZXIoaG92ZXIgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0hvdmVyID0gaG92ZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZ3JpZGxpbmVzIG9uIHRhYmxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGdyaWRsaW5lcyBFbmFibGVzL2Rpc2FibGVzIHRoZSBncmlkbGluZXMuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhHcmlkbGluZXMoZ3JpZGxpbmVzID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNHcmlkbGluZXMgPSBncmlkbGluZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgcmVvcmRlcmFibGUgcHJvcGVydHkgb24gYWxsIGNvbHVtbnMgY3VycmVudGx5IGluIHRoZSBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY29sdW1uc1Jlb3JkZXJhYmxlXSAtIEJvb2xlYW4gZmxhZyB0byBzZXQgcmVvcmRlcmluZyBvbiBjb2x1bW5zIHRvLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ3VycmVudENvbHVtbnNSZW9yZGVyYWJsZShjb2x1bW5zUmVvcmRlcmFibGUgPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgY29sLndpdGhSZW9yZGVyYWJsZShjb2x1bW5zUmVvcmRlcmFibGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgdG9nZ2xlYWJsZSBwcm9wZXJ0eSBvbiBhbGwgY29sdW1ucyBjdXJyZW50bHkgaW4gdGhlIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb2x1bW5zVG9nZ2xlYWJsZV0gLSBCb29sZWFuIGZsYWcgdG8gc2V0IHRvZ2dsZWFibGUgb24gY29sdW1ucyB0by5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEN1cnJlbnRDb2x1bW5zVG9nZ2xlYWJsZShjb2x1bW5zVG9nZ2xlYWJsZSA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBjb2wud2l0aFRvZ2dsZWFibGUoY29sdW1uc1RvZ2dsZWFibGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMvZGlzYWJsZWQgY29sdW1uIHJlc2l6ZSBmZWF0dXJlIHdpdGggY29sdW1uUmVzaXplTW9kZSBvbiBhbGwgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXNpemFibGVDb2x1bW5zIFRydWUgaWYgZW5hYmxlZFxuICAgICAqIEBwYXJhbSBjb2x1bW5SZXNpemVNb2RlICdmaXQnIG9yICdleHBhbmQnIG1vZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aENvbHVtbnNSZXNpemFibGUocmVzaXphYmxlQ29sdW1ucyA9IHRydWUsIGNvbHVtblJlc2l6ZU1vZGU6ICdmaXQnIHwgJ2V4cGFuZCcgPSAnZml0Jyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNSZXNpemFibGVDb2x1bW5zID0gcmVzaXphYmxlQ29sdW1ucztcbiAgICAgICAgdGhpcy5fY29sdW1uUmVzaXplTW9kZSA9IGNvbHVtblJlc2l6ZU1vZGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgY29sdW1uIHRvICh1bilmcm96ZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2VsZWN0aW9uQ29sdW1uRnJvemVuIFRydWUgdG8gZnJlZXplIHNlbGVjdGlvbiBjb2x1bW4sIGZhbHNlIHRvIHVuZnJlZXplIGl0LlxuICAgICAqIEBwYXJhbSBhY3Rpb25Db2x1bW5Gcm96ZW4gVHJ1ZSB0byBmcmVlemUgYWN0aW9uIGNvbHVtbiwgZmFsc2UgdG8gdW5mcmVlemUgaXQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5Gcm96ZW4oc2VsZWN0aW9uQ29sdW1uRnJvemVuPzogYm9vbGVhbiwgYWN0aW9uQ29sdW1uRnJvemVuPzogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Db2x1bW5Gcm96ZW4gPSBzZWxlY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIHRoaXMuX2FjdGlvbkNvbHVtbkZyb3plbiA9IGFjdGlvbkNvbHVtbkZyb3plbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2xhc3MgbmFtZSBmb3Igcm93cyBpbiB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcm93Q2xhc3NOYW1lIC0gVGhlIENTUyBjbGFzcyBuYW1lIHRvIGJlIGFwcGxpZWQgdG8gZWFjaCByb3cuXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gW2NsYXNzTmFtZU1hcEZuXSAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIG1hcCB0aGUgY2xhc3MgbmFtZSBkeW5hbWljYWxseSBiYXNlZCBvbiByb3cncyBpdGVtIGFuZCBjdXJyZW50IGNsYXNzIG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSb3dDbGFzc05hbWUocm93Q2xhc3NOYW1lPzogc3RyaW5nLCBjbGFzc05hbWVNYXBGbj86IChjbGFzc05hbWU/OiBzdHJpbmcsIGl0ZW0/OiBUYWJsZU1vZGVsKSA9PiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcm93Q2xhc3NOYW1lID0gcm93Q2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9yb3dDbGFzc05hbWVNYXBGbiA9IGNsYXNzTmFtZU1hcEZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGhlYWRlciByb3cgY2xhc3MgbmFtZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoZWFkZXJDbGFzc05hbWUgQ2xhc3MgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEhlYWRlckNsYXNzTmFtZShoZWFkZXJDbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oZWFkZXJDbGFzc05hbWUgPSBoZWFkZXJDbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgbG9jYWxpemF0aW9uIG9mIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aExvY2FsaXplZCgpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGxvY2FsZSBwcm9wZXJ0eSBmb3IgbG9jYWxpemF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb3BlcnR5IExvY2FsZSBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkocHJvcGVydHk6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgcm93IGV4cGFuZGluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSB0byBjaGVjayBpZiByb3cgY2FuIGJlIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSBjb2xTcGFuIHNldCBjdXN0b20gcm93IHNwYW4gZm9yIGV4cGFuZGVkIHJvdy5cbiAgICAgKiBAcGFyYW0gY29tcG9uZW50VHlwZSBDb21wb25lbnQgdG8gYmUgZGlzcGxheWVkIG9uIHJvdyBleHBhbmQuXG4gICAgICogQHBhcmFtIGlzUm93RXhwYW5kZWQgUHJvcGVydHkgb3IgZnVuY3Rpb24gdGhhdCB0ZWxscyB0aGUgdGFibGUgdG8gZXhwYW5kIHRoZSByb3cgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFJvd0V4cGFuZGFibGUoXG4gICAgICAgIHByb3BlcnR5Pzoga2V5b2YgVGFibGVNb2RlbCxcbiAgICAgICAgY29sU3Bhbj86IG51bWJlcixcbiAgICAgICAgY29tcG9uZW50VHlwZT86IFR5cGU8SVJvd0V4cGFuZGFibGVDb21wb25lbnQ8VGFibGVNb2RlbD4+LFxuICAgICAgICBpc1Jvd0V4cGFuZGVkPzogc3RyaW5nIHwgKChpdGVtOiBUYWJsZU1vZGVsKSA9PiBib29sZWFuKVxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yb3dFeHBhbmRhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dFeHBhbmRhYmxlUHJvcGVydHkgPSBwcm9wZXJ0eSBhcyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbFNwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuID0gY29sU3BhbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50VHlwZSkge1xuICAgICAgICAgICAgdGhpcy5fcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzUm93RXhwYW5kZWQgPSBpc1Jvd0V4cGFuZGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHJvdyByZW9yZGVyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlb3JkYWJsZSBFbmFibGVzL2Rpc2FibGVzIGZlYXR1cmUuXG4gICAgICovXG4gICAgd2l0aFJvd1Jlb3JkZXJhYmxlKHJlb3JkYWJsZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fcm93UmVvcmRlcmFibGUgPSByZW9yZGFibGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjb3B5RmllbGRzVG8ob2JqOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueSwgYW55LCBhbnk+KSB7XG4gICAgICAgIG9iai5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgb2JqLl9oaWRlSGVhZGVyID0gdGhpcy5faGlkZUhlYWRlcjtcbiAgICAgICAgb2JqLl90cmFja1Byb3BlcnR5ID0gdGhpcy5fdHJhY2tQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9maWx0ZXJzID0gdGhpcy5fZmlsdGVycy5tYXAoZiA9PiBmLmNvcHkoKSk7XG4gICAgICAgIG9iai5fc29ydHMgPSB0aGlzLl9zb3J0cy5tYXAocyA9PiBzLmNvcHkoKSk7XG4gICAgICAgIG9iai5fc2VhcmNoID0gdGhpcy5fc2VhcmNoO1xuICAgICAgICBvYmouX3NlYXJjaExpbWl0TWF4V29yZHMgPSB0aGlzLl9zZWFyY2hMaW1pdE1heFdvcmRzO1xuICAgICAgICBvYmouX3NlYXJjaEZpZWxkcyA9IHRoaXMuX3NlYXJjaEZpZWxkcyA/IFsuLi50aGlzLl9zZWFyY2hGaWVsZHNdIDogdW5kZWZpbmVkO1xuICAgICAgICBvYmouX2NsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcbiAgICAgICAgb2JqLl9zaXplID0gdGhpcy5fc2l6ZTtcbiAgICAgICAgb2JqLl9oYXNIb3ZlciA9IHRoaXMuX2hhc0hvdmVyO1xuICAgICAgICBvYmouX2hhc0dyaWRsaW5lcyA9IHRoaXMuX2hhc0dyaWRsaW5lcztcbiAgICAgICAgb2JqLl9oYXNSZXNpemFibGVDb2x1bW5zID0gdGhpcy5faGFzUmVzaXphYmxlQ29sdW1ucztcbiAgICAgICAgb2JqLl9jb2x1bW5SZXNpemVNb2RlID0gdGhpcy5fY29sdW1uUmVzaXplTW9kZTtcbiAgICAgICAgb2JqLl9hY3Rpb25Db2x1bW5Gcm96ZW4gPSB0aGlzLl9hY3Rpb25Db2x1bW5Gcm96ZW47XG4gICAgICAgIG9iai5fc2VsZWN0aW9uQ29sdW1uRnJvemVuID0gdGhpcy5fc2VsZWN0aW9uQ29sdW1uRnJvemVuO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9wYWdpbmF0aW9uTW9kZSA9IHRoaXMuX3BhZ2luYXRpb25Nb2RlO1xuICAgICAgICBvYmouX3Jvd3NQZXJQYWdlT3B0aW9ucyA9IHRoaXMuX3Jvd3NQZXJQYWdlT3B0aW9ucztcbiAgICAgICAgb2JqLl9yb3dFeHBhbmRhYmxlID0gdGhpcy5fcm93RXhwYW5kYWJsZTtcbiAgICAgICAgb2JqLl9yb3dFeHBhbmRhYmxlQ29sU3BhbiA9IHRoaXMuX3Jvd0V4cGFuZGFibGVDb2xTcGFuO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eSA9IHRoaXMuX3Jvd0V4cGFuZGFibGVQcm9wZXJ0eTtcbiAgICAgICAgb2JqLl9pc1Jvd0V4cGFuZGVkID0gdGhpcy5pc1Jvd0V4cGFuZGVkO1xuICAgICAgICBvYmouX3Jvd0V4cGFuZGFibGVDb21wb25lbnRUeXBlID0gdGhpcy5fcm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGU7XG4gICAgICAgIG9iai5fcm93UmVvcmRlcmFibGUgPSB0aGlzLl9yb3dSZW9yZGVyYWJsZTtcbiAgICAgICAgb2JqLl9nZW5lcmljRmlsdGVyID0gdGhpcy5fZ2VuZXJpY0ZpbHRlcj8uY29weSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyBjdXJyZW50IGRlc2NyaXB0b3IgdG8gYSBuZXcgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGNvcHkoKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IFRhYmxlRGVzY3JpcHRvckluc3Q8VGFibGVNb2RlbCwgU29ydHMsIEZpbHRlcnM+KHRoaXMubW9kZWwuY29weSgpKTtcbiAgICAgICAgdGhpcy5jb3B5RmllbGRzVG8oZGVzY3JpcHRvcik7XG4gICAgICAgIGRlc2NyaXB0b3IuX2NvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGMgPT4gYy5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCBleHRlbmRzIFRhYmxlRGVzY3JpcHRvckluc3Q8YW55PiB7XG4gICAgcHJpdmF0ZSBfZXhjbHVkZWRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfZmlsdGVyQ29sdW1uczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByaXZhdGUgX3NvcnRDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgcHJpdmF0ZSBfc29ydENvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERTtcbiAgICBwcml2YXRlIF9maWx0ZXJDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLkVYQ0xVREU7XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2NvbHVtbnM6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwudGl0bGVQcm9wZXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFRpdGxlKG1vZGVsLnRpdGxlUHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIGV4Y2x1ZGVkIGNvbHVtbnMgd2hlbiBnZW5lcmF0aW5nIGRlc2NyaXB0b3JcbiAgICAgKiBAcGFyYW0gZXhjbHVkZWRDb2x1bW4gbmFtZXMgb2YgZXhjbHVkZWQgY29sdW1uc1xuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc0V4Y2x1ZGVkKGV4Y2x1ZGVkQ29sdW1uOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9leGNsdWRlZENvbHVtbnMgPSBleGNsdWRlZENvbHVtbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyBjb2x1bW4gcHJvcGVydGllcyBvbiB3aGljaCBzb3J0IGlzIGRlZmluZWQgb3Igbm90IGRlcGVuZGluZyBvbiBzb3J0Q29sdW1uTW9kZVxuICAgICAqIEBwYXJhbSBzb3J0T25Db2x1bW5zIGNvbHVtbiBuYW1lc1xuICAgICAqIEBwYXJhbSBzb3J0Q29sdW1uTW9kZSBJTkNMVURFX09OTFkgKGRlZmF1bHQpIG9ubHkgZ2l2ZW4gY29sdW1ucyB3aWxsIGhhdmUgc29ydCwgRVhDTFVERSBnaXZlbiBjb2x1bW5zIHdpbGwgTk9UIGhhdmUgc29ydFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc1NvcnQoc29ydE9uQ29sdW1uczogc3RyaW5nW10sIHNvcnRDb2x1bW5Nb2RlID0gVGFibGVEeW5hbWljQ29sdW1uc01vZGVFbnVtLklOQ0xVREVfT05MWSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zb3J0Q29sdW1uTW9kZSA9IHNvcnRDb2x1bW5Nb2RlO1xuICAgICAgICB0aGlzLl9zb3J0Q29sdW1ucyA9IHNvcnRPbkNvbHVtbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlZmluZXMgY29sdW1uIHByb3BlcnRpZXMgb24gd2hpY2ggZmlsdGVyIGlzIGRlZmluZWQgb3Igbm90IGRlcGVuZGluZyBvbiBmaWx0ZXJDb2x1bW5Nb2RlXG4gICAgICogQHBhcmFtIGZpbHRlck9uQ29sdW1uIGNvbHVtbiBuYW1lc1xuICAgICAqIEBwYXJhbSBmaWx0ZXJDb2x1bW5Nb2RlIElOQ0xVREVfT05MWSAoZGVmYXVsdCkgb25seSBnaXZlbiBjb2x1bW5zIHdpbGwgaGF2ZSBmaWx0ZXIsIEVYQ0xVREUgZ2l2ZW4gY29sdW1ucyB3aWxsIE5PVCBoYXZlIGZpbHRlclxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29sdW1uc0ZpbHRlcihmaWx0ZXJPbkNvbHVtbjogc3RyaW5nW10sIGZpbHRlckNvbHVtbk1vZGUgPSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPSBmaWx0ZXJDb2x1bW5Nb2RlO1xuICAgICAgICB0aGlzLl9maWx0ZXJDb2x1bW5zID0gZmlsdGVyT25Db2x1bW47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldHMgZ2l2ZW4gdHlwZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGUgY3VzdG9tIHR5cGUgZm9yIGNvbHVtblxuICAgICAqIEBwYXJhbSBkaXNwbGF5VHlwZSBjdXN0b20gY29sdW1uIHZhbHVlIGRpc3BsYXkgdHlwZVxuICAgICAqIEBwYXJhbSBhcmdzIGFkZGl0aW9uIGFyZ3VtZW50cyBmb3IgY29sdW1uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5QcmVzZXRUeXBlKHByb3BlcnR5OiBzdHJpbmcsIHR5cGU6IENvbHVtblR5cGVFbnVtLCBkaXNwbGF5VHlwZT86IENvbHVtbkRpc3BsYXlUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKGNvbCA9PiBwcm9wZXJ0eSA9PT0gY29sLnByb3BlcnR5KSA/PyB0aGlzLmFkZENvbHVtbihwcm9wZXJ0eSkud2l0aFRpdGxlKHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29sdW1uLmFzVHlwZSh0eXBlLCBkaXNwbGF5VHlwZSwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogc2V0cyB0aXRsZSB0byBjb2x1bW4gd2l0aCBnaXZlbiBwcm9wZXJ0eSBhbmQgcmV0dXJucyB0aGlzIHRhYmxlXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGNvbHVtbidzIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHRpdGxlIGNvbHVtbidzIHRpdGxlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhDb2x1bW5UaXRsZShwcm9wZXJ0eTogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gcHJvcGVydHkgPT09IGNvbC5wcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVzIGNvbHVtbnMgZGVmaW5lZCBvbiB0YWJsZSBiYXNlZCBvbiBkYXRhIGZldGNoZWQgZnJvbSBhcGlcbiAgICAgKiBAcGFyYW0gZGF0YSBkYXRhIGZyb20gYXBpXG4gICAgICovXG4gICAgcHVibGljIHRvVGFibGVEZXNjcmlwdG9yRnJvbURhdGEoZGF0YTogRGF0YUxpc3RSZXN1bHQpOiBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgICAgICBjb25zdCB0YWJsZURlc2NyaXB0b3IgPSB0aGlzLnRvVGFibGVEZXNjcmlwdG9yKCk7XG5cbiAgICAgICAgaWYgKGRhdGEuZGF0YSA9PSBudWxsIHx8IGRhdGEuZGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGVzY3JpcHRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9iamVjdE1vZGVsID0gZGF0YS5kYXRhWzBdO1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gZmxhdHRlbk9iamVjdEtleXMob2JqZWN0TW9kZWwpXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXRoaXMuX2V4Y2x1ZGVkQ29sdW1ucy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpOyAvL2V4Y2x1ZGUgYXJyYXlzIGFuZCBzZXRzXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgICAgICAgY29uc3QgbWV0YUNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBrZXkpO1xuICAgICAgICAgICAgbGV0IGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT47XG4gICAgICAgICAgICBpZiAobWV0YUNvbHVtbikge1xuICAgICAgICAgICAgICAgIGlmICghbWV0YUNvbHVtbi52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBtZXRhQ29sdW1uLnRvQ29sdW1uRGVzY3JpcHRvcigpO1xuICAgICAgICAgICAgICAgIHRhYmxlRGVzY3JpcHRvci53aXRoQ29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRhYmxlRGVzY3JpcHRvci5hZGRDb2x1bW4oa2V5KS53aXRoVGl0bGUoa2V5KTtcbiAgICAgICAgICAgICAgICBjb2x1bW5Ub0RhdGVOdW1iZXJPckJvb2xlYW4oY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmkxOG5CYXNlS2V5ICYmICFjb2x1bW4ucHJvcGVydHkuaW5jbHVkZXMoJ3JldicpKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLndpdGhUaXRsZShbdGhpcy5tb2RlbC5pMThuQmFzZUtleSwgJ3Byb3BlcnRpZXMnLCBjb2x1bW4ucHJvcGVydHldLmpvaW4oJy4nKS5yZXBsYWNlKCdzdGF0ZS4nLCAnJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T2ZTb3J0Q29sdW1ucyA9IHRoaXMuX3NvcnRDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHRoaXMuX3NvcnRDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERSAmJiAhZWxlbWVudE9mU29ydENvbHVtbnMpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuX3NvcnRDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uSU5DTFVERV9PTkxZICYmIGVsZW1lbnRPZlNvcnRDb2x1bW5zKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGFibGVEZXNjcmlwdG9yLndpdGhTb3J0VW5zYWZlKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPZkZpbHRlckNvbHVtbnMgPSB0aGlzLl9maWx0ZXJDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyQ29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgKCh0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlID09PSBUYWJsZUR5bmFtaWNDb2x1bW5zTW9kZUVudW0uRVhDTFVERSAmJiAhZWxlbWVudE9mRmlsdGVyQ29sdW1ucykgfHxcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2ZpbHRlckNvbHVtbk1vZGUgPT09IFRhYmxlRHluYW1pY0NvbHVtbnNNb2RlRW51bS5JTkNMVURFX09OTFkgJiYgZWxlbWVudE9mRmlsdGVyQ29sdW1ucykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0YWJsZURlc2NyaXB0b3IuYWRkRmlsdGVyRnJvbUNvbHVtbkRlc2NyaXB0b3JVbnNhZmUoY29sdW1uLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFibGVEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgQ29sdW1uRHluYW1pY0Rlc2NyaXB0b3IgdG8gdGhpcyB0YWJsZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBjb2x1bW4ncyBwcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRDb2x1bW4ocHJvcGVydHk6IGtleW9mIGFueSk6IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gbmV3IENvbHVtbkR5bmFtaWNEZXNjcmlwdG9yKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSByZW1vdmVDb2x1bW4ocHJvcGVydHk6IGtleW9mIGFueSk6IHRoaXMge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gdGhpcy5hZGRDb2x1bW4ocHJvcGVydHkpO1xuICAgICAgICBjb2x1bW4ud2l0aFZpc2liaWxpdHkoZmFsc2UpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVzIGRlZXAgY29weSBvZiB0YWJsZSBkeW5hbWljIGRlc2NyaXB0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29weSgpOiBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBuZXcgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QodGhpcy5tb2RlbC5jb3B5KCkpO1xuICAgICAgICB0aGlzLmNvcHlGaWVsZHNUbyhkZXNjcmlwdG9yKTtcbiAgICAgICAgZGVzY3JpcHRvci5fY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoYyA9PiBjLmNvcHkoKSk7XG4gICAgICAgIGRlc2NyaXB0b3IuX2V4Y2x1ZGVkQ29sdW1ucyA9IFsuLi50aGlzLl9leGNsdWRlZENvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9maWx0ZXJDb2x1bW5zID0gWy4uLnRoaXMuX2ZpbHRlckNvbHVtbnNdO1xuICAgICAgICBkZXNjcmlwdG9yLl9zb3J0Q29sdW1ucyA9IFsuLi50aGlzLl9zb3J0Q29sdW1uc107XG4gICAgICAgIGRlc2NyaXB0b3IuX2ZpbHRlckNvbHVtbk1vZGUgPSB0aGlzLl9maWx0ZXJDb2x1bW5Nb2RlO1xuICAgICAgICBkZXNjcmlwdG9yLl9zb3J0Q29sdW1uTW9kZSA9IHRoaXMuX3NvcnRDb2x1bW5Nb2RlO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9UYWJsZURlc2NyaXB0b3IoKTogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBUYWJsZURlc2NyaXB0b3JJbnN0PGFueT4odGhpcy5tb2RlbCk7XG4gICAgICAgIHRoaXMuY29weUZpZWxkc1RvKGRlc2NyaXB0b3IpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ const dateRegex = /\d{4}-[01]\d-[0-3]\d/;
2
+ const dateTimeRegex = /\d{4}-[01]\d-[0-3]\dT([0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z?)|([0-2]\d:[0-5]\d:[0-5]\d\+[0-2]\d:[0-5]\d))/;
3
+ /**
4
+ * converts column to number or date on value based
5
+ * @param column column to be transformed
6
+ * @param value value to check if applicable
7
+ */
8
+ export function columnToDateNumberOrBoolean(column, value) {
9
+ if (typeof value === 'boolean') {
10
+ return column.asBoolean();
11
+ }
12
+ else if (!isNaN(value) && typeof value === 'number') {
13
+ return column.asNumber();
14
+ }
15
+ else if (dateRegex.test(value)) {
16
+ if (dateTimeRegex.test(value)) {
17
+ return column.asDate('dd. MMM yyyy HH:mm');
18
+ }
19
+ return column.asDate('dd. MMM yyyy');
20
+ }
21
+ else {
22
+ return column;
23
+ }
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvaGVscGVycy9jb2x1bW4tY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO0FBQ3pDLE1BQU0sYUFBYSxHQUFHLHdIQUF3SCxDQUFDO0FBRS9JOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsTUFBa0MsRUFBRSxLQUFVO0lBQ3RGLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDOUIsQ0FBQztTQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEQsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztTQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9CLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekMsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29sdW1uRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuXG5jb25zdCBkYXRlUmVnZXggPSAvXFxkezR9LVswMV1cXGQtWzAtM11cXGQvO1xuY29uc3QgZGF0ZVRpbWVSZWdleCA9IC9cXGR7NH0tWzAxXVxcZC1bMC0zXVxcZFQoWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGRcXC5cXGQrKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaPyl8KFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkXFwrWzAtMl1cXGQ6WzAtNV1cXGQpKS87XG5cbi8qKlxuICogY29udmVydHMgY29sdW1uIHRvIG51bWJlciBvciBkYXRlIG9uIHZhbHVlIGJhc2VkXG4gKiBAcGFyYW0gY29sdW1uIGNvbHVtbiB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGNoZWNrIGlmIGFwcGxpY2FibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtblRvRGF0ZU51bWJlck9yQm9vbGVhbihjb2x1bW46IENvbHVtbkRlc2NyaXB0b3I8YW55LCBhbnk+LCB2YWx1ZTogYW55KTogQ29sdW1uRGVzY3JpcHRvcjxhbnksIGFueT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gY29sdW1uLmFzQm9vbGVhbigpO1xuICAgIH0gZWxzZSBpZiAoIWlzTmFOKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXNOdW1iZXIoKTtcbiAgICB9IGVsc2UgaWYgKGRhdGVSZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICBpZiAoZGF0ZVRpbWVSZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5hc0RhdGUoJ2RkLiBNTU0geXl5eSBISDptbScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXNEYXRlKCdkZC4gTU1NIHl5eXknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { TableDataProviderInst } from '../data-providers/table.data-provider';
2
- export function tableToDataProvider(descriptor, serviceType) {
2
+ export function tableDataProviderFromDescriptor(descriptor, serviceType) {
3
3
  return typeof serviceType !== 'undefined'
4
- ? new TableDataProviderInst(undefined, serviceType)
5
- : new TableDataProviderInst(undefined, undefined);
4
+ ? new TableDataProviderInst(serviceType)
5
+ : new TableDataProviderInst(undefined);
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS1wcm92aWRlci1kZXNjcmlwdG9yLWNvbnZlcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2hlbHBlcnMvdGFibGUtZGF0YS1wcm92aWRlci1kZXNjcmlwdG9yLWNvbnZlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUF5QjVFLE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsVUFBc0QsRUFDdEQsV0FBMEI7SUFFMUIsT0FBTyxPQUFPLFdBQVcsS0FBSyxXQUFXO1FBQ3JDLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUF1RSxTQUFTLEVBQUUsV0FBd0MsQ0FBQztRQUN0SixDQUFDLENBQUMsSUFBSSxxQkFBcUIsQ0FBeUQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlcnZpY2VDbGFzc1R5cGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7VGFibGVEYXRhUHJvdmlkZXJJbnN0fSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycy90YWJsZS5kYXRhLXByb3ZpZGVyJztcbmltcG9ydCB7VGFibGVEZXNjcmlwdG9ySW5zdH0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvcic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRhdGEgcHJvdmlkZXIgZm9yIGZyb20gZGVzY3JpcHRvci4gRE8gTk9UIHVzZSBpZiB0aGUgbW9kZWwgaXMgY2xhc3MsIGJlY2F1c2UgdGhlIHR5cGUgKGZyb20gbW9kZWwgZGVzY3JpcHRvcikgd2lsbCBub3QgYmUgc2V0IGluIGRhdGEgcHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHtUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz59IGRlc2NyaXB0b3IgLSBUaGUgdGFibGUgZGVzY3JpcHRvci5cbiAqXG4gKiBAcmV0dXJuIHtUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIHVuZGVmaW5lZCwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPn0gLSBUaGUgZGF0YSBwcm92aWRlciBmb3IgdGhlIHRhYmxlIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlVG9EYXRhUHJvdmlkZXI8TW9kZWwsIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbD4oXG4gICAgZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnM+XG4pOiBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIHVuZGVmaW5lZCwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkPjtcbi8qKlxuICogQ3JlYXRlcyBhIGRhdGEgcHJvdmlkZXIgZm9yIGZyb20gZGVzY3JpcHRvci4gRE8gTk9UIHVzZSBpZiB0aGUgbW9kZWwgaXMgY2xhc3MsIGJlY2F1c2UgdGhlIHR5cGUgKGZyb20gbW9kZWwgZGVzY3JpcHRvcikgd2lsbCBub3QgYmUgc2V0IGluIGRhdGEgcHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHtUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz59IGRlc2NyaXB0b3IgLSBUaGUgdGFibGUgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7U2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPn0gc2VydmljZUNsYXNzIC0gVGhlIHNlcnZpY2UgY2xhc3MgdHlwZS5cbiAqXG4gKiBAcmV0dXJuIHtUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+fSAtIFRoZSBkYXRhIHByb3ZpZGVyIGZvciB0aGUgdGFibGUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFibGVUb0RhdGFQcm92aWRlcjxNb2RlbCwgU2VydmljZSA9IGFueSwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz4sXG4gICAgc2VydmljZUNsYXNzOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4pOiBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+O1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlVG9EYXRhUHJvdmlkZXI8TW9kZWwsIFNlcnZpY2UgPSBhbnksIFNvcnRzID0ga2V5b2YgTW9kZWwsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBrZXlvZiBNb2RlbCwgU2VydmljZUNsYXNzID0gU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4oXG4gICAgZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnM+LFxuICAgIHNlcnZpY2VUeXBlPzogU2VydmljZUNsYXNzXG4pIHtcbiAgICByZXR1cm4gdHlwZW9mIHNlcnZpY2VUeXBlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IG5ldyBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KHVuZGVmaW5lZCwgc2VydmljZVR5cGUgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPilcbiAgICAgICAgOiBuZXcgVGFibGVEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZD4odW5kZWZpbmVkLCB1bmRlZmluZWQpO1xufVxuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS1wcm92aWRlci1kZXNjcmlwdG9yLWNvbnZlcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2hlbHBlcnMvdGFibGUtZGF0YS1wcm92aWRlci1kZXNjcmlwdG9yLWNvbnZlcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUF5QjVFLE1BQU0sVUFBVSwrQkFBK0IsQ0FDM0MsVUFBc0QsRUFDdEQsV0FBMEI7SUFFMUIsT0FBTyxPQUFPLFdBQVcsS0FBSyxXQUFXO1FBQ3JDLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUE0RCxXQUF3QyxDQUFDO1FBQ2hJLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUE4QyxTQUFTLENBQUMsQ0FBQztBQUM1RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2aWNlQ2xhc3NUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge1RhYmxlRGF0YVByb3ZpZGVySW5zdH0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMvdGFibGUuZGF0YS1wcm92aWRlcic7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvckluc3R9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL3RhYmxlLmRlc2NyaXB0b3InO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBkYXRhIHByb3ZpZGVyIGZvciBmcm9tIGRlc2NyaXB0b3IuIERPIE5PVCB1c2UgaWYgdGhlIG1vZGVsIGlzIGNsYXNzLCBiZWNhdXNlIHRoZSB0eXBlIChmcm9tIG1vZGVsIGRlc2NyaXB0b3IpIHdpbGwgbm90IGJlIHNldCBpbiBkYXRhIHByb3ZpZGVyLlxuICpcbiAqIEBwYXJhbSB7VGFibGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnM+fSBkZXNjcmlwdG9yIC0gVGhlIHRhYmxlIGRlc2NyaXB0b3IuXG4gKlxuICogQHJldHVybiB7VGFibGVEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQ+fSAtIFRoZSBkYXRhIHByb3ZpZGVyIGZvciB0aGUgdGFibGUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFibGVEYXRhUHJvdmlkZXJGcm9tRGVzY3JpcHRvcjxNb2RlbCwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz5cbik6IFRhYmxlRGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgdW5kZWZpbmVkLCBTb3J0cywgRmlsdGVycywgdW5kZWZpbmVkPjtcbi8qKlxuICogQ3JlYXRlcyBhIGRhdGEgcHJvdmlkZXIgZm9yIGZyb20gZGVzY3JpcHRvci4gRE8gTk9UIHVzZSBpZiB0aGUgbW9kZWwgaXMgY2xhc3MsIGJlY2F1c2UgdGhlIHR5cGUgKGZyb20gbW9kZWwgZGVzY3JpcHRvcikgd2lsbCBub3QgYmUgc2V0IGluIGRhdGEgcHJvdmlkZXIuXG4gKlxuICogQHBhcmFtIHtUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz59IGRlc2NyaXB0b3IgLSBUaGUgdGFibGUgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7U2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPn0gc2VydmljZUNsYXNzIC0gVGhlIHNlcnZpY2UgY2xhc3MgdHlwZS5cbiAqXG4gKiBAcmV0dXJuIHtUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+fSAtIFRoZSBkYXRhIHByb3ZpZGVyIGZvciB0aGUgdGFibGUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFibGVEYXRhUHJvdmlkZXJGcm9tRGVzY3JpcHRvcjxNb2RlbCwgU2VydmljZSA9IGFueSwgU29ydHMgPSBrZXlvZiBNb2RlbCwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGtleW9mIE1vZGVsPihcbiAgICBkZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycz4sXG4gICAgc2VydmljZUNsYXNzOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+XG4pOiBUYWJsZURhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+PjtcbmV4cG9ydCBmdW5jdGlvbiB0YWJsZURhdGFQcm92aWRlckZyb21EZXNjcmlwdG9yPE1vZGVsLCBTZXJ2aWNlID0gYW55LCBTb3J0cyA9IGtleW9mIE1vZGVsLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0ga2V5b2YgTW9kZWwsIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4+KFxuICAgIGRlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzPixcbiAgICBzZXJ2aWNlVHlwZT86IFNlcnZpY2VDbGFzc1xuKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzZXJ2aWNlVHlwZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyBuZXcgVGFibGVEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPj4oc2VydmljZVR5cGUgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPilcbiAgICAgICAgOiBuZXcgVGFibGVEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCB1bmRlZmluZWQsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG59XG4iXX0=
@@ -7,15 +7,13 @@ export * from './descriptors/sort.descriptor';
7
7
  export * from './descriptors/table.descriptor';
8
8
  export * from './descriptors/table-descriptor.factory';
9
9
  // helpers
10
- export * from './helpers/class-attribute-converter';
10
+ export * from './helpers/column-converter';
11
11
  export * from './helpers/table-data-provider-descriptor-convert';
12
- export * from './helpers/table-descriptor-helpers';
13
12
  // models
14
- export * from './models/class-table-attribute.model';
15
13
  export * from './models/column.model';
16
14
  export * from './models/column-value.model';
17
15
  export * from './models/table.model';
18
16
  export * from './models/table-columns.model';
19
17
  export * from './models/table-event.model';
20
18
  export * from './models/row-expandable-component.model';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFFN0QsY0FBYztBQUNkLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0NBQXdDLENBQUM7QUFFdkQsVUFBVTtBQUNWLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELFNBQVM7QUFDVCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlDQUF5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZGF0YSBwcm92aWRlcnNcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1wcm92aWRlcnMvdGFibGUuZGF0YS1wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2RhdGEtcHJvdmlkZXJzL3RhYmxlLWRhdGEtcHJvdmlkZXIuZmFjdG9yeSc7XG5cbi8vIGRlc2NyaXB0b3JzXG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL2NvbHVtbi5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvc29ydC5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvdGFibGUuZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2Rlc2NyaXB0b3JzL3RhYmxlLWRlc2NyaXB0b3IuZmFjdG9yeSc7XG5cbi8vIGhlbHBlcnNcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy9jbGFzcy1hdHRyaWJ1dGUtY29udmVydGVyJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycy90YWJsZS1kYXRhLXByb3ZpZGVyLWRlc2NyaXB0b3ItY29udmVydCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvdGFibGUtZGVzY3JpcHRvci1oZWxwZXJzJztcblxuLy8gbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jbGFzcy10YWJsZS1hdHRyaWJ1dGUubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2NvbHVtbi12YWx1ZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90YWJsZS5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscy90YWJsZS1jb2x1bW5zLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3RhYmxlLWV2ZW50Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3Jvdy1leHBhbmRhYmxlLWNvbXBvbmVudC5tb2RlbCc7XG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9hcGkvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjtBQUNqQixjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsOENBQThDLENBQUM7QUFFN0QsY0FBYztBQUNkLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsd0NBQXdDLENBQUM7QUFFdkQsVUFBVTtBQUNWLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxrREFBa0QsQ0FBQztBQUVqRSxTQUFTO0FBQ1QsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBkYXRhIHByb3ZpZGVyc1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhLXByb3ZpZGVycy90YWJsZS5kYXRhLXByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1wcm92aWRlcnMvdGFibGUtZGF0YS1wcm92aWRlci5mYWN0b3J5JztcblxuLy8gZGVzY3JpcHRvcnNcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy9zb3J0LmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9ycy90YWJsZS5kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcnMvdGFibGUtZGVzY3JpcHRvci5mYWN0b3J5JztcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL2NvbHVtbi1jb252ZXJ0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL3RhYmxlLWRhdGEtcHJvdmlkZXItZGVzY3JpcHRvci1jb252ZXJ0JztcblxuLy8gbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jb2x1bW4ubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvY29sdW1uLXZhbHVlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3RhYmxlLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbHVtbnMubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvdGFibGUtZXZlbnQubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvcm93LWV4cGFuZGFibGUtY29tcG9uZW50Lm1vZGVsJztcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1ucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvbW9kZWxzL3RhYmxlLWNvbHVtbnMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW51bUNvbnN0YW50VHlwZSwgSUxvb2t1cERhdGFQcm92aWRlcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyRGlzcGxheVR5cGVFbnVtLCBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtTb3J0RGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvc29ydC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uc01hbmFnZUludGVyZmFjZTxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4ge1xuICAgIGdldENvbHVtbjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwsIENvbHVtbk1vZGVsID0gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eV0+LCBDb2x1bW5WYWx1ZSA9IFRhYmxlTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5XG4gICAgKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWU+IHwgbnVsbDtcblxuICAgIGdldENvbHVtblVuc2FmZTxDb2x1bW5Nb2RlbCA9IGFueSwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPiB8IG51bGw7XG5cbiAgICByZW1vdmVDb2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxlTW9kZWwpOiB2b2lkO1xuXG4gICAgcmVtb3ZlQ29sdW1uVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgd2l0aENvbHVtbjxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4oY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4pOiB0aGlzO1xuXG4gICAgYWRkQ29sdW1uPFByb3BlcnR5S2V5IGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbD4ocHJvcGVydHk6IFByb3BlcnR5S2V5KTogQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPjtcblxuICAgIGFkZENvbHVtbkVudW08UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+PihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5S2V5LFxuICAgICAgICBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT5cbiAgICApOiBDb2x1bW5EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPjtcblxuICAgIGFkZENvbHVtblVuc2FmZTxDb2x1bW5Nb2RlbCA9IGFueT4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWw+O1xuXG4gICAgd2l0aENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxlTW9kZWwpW10pOiB0aGlzO1xuXG4gICAgZ2V0U29ydChwcm9wZXJ0eTogU29ydHMpOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPiB8IG51bGw7XG5cbiAgICBnZXRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPiB8IG51bGw7XG5cbiAgICByZW1vdmVTb3J0KHByb3BlcnR5OiBTb3J0cyk6IHZvaWQ7XG5cbiAgICByZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgYWRkU29ydChwcm9wZXJ0eTogU29ydHMsIGlzRGVmYXVsdDogYm9vbGVhbiwgYXNjZW5kaW5nPzogYm9vbGVhbik6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+O1xuXG4gICAgYWRkU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBpc0RlZmF1bHQ6IGJvb2xlYW4sIGFzY2VuZGluZz86IGJvb2xlYW4pOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPjtcblxuICAgIHdpdGhTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0OiBib29sZWFuLCBhc2NlbmRpbmc/OiBib29sZWFuKTogdGhpcztcblxuICAgIHdpdGhTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdDogYm9vbGVhbiwgYXNjZW5kaW5nPzogYm9vbGVhbik6IHRoaXM7XG5cbiAgICB3aXRoU29ydHMoLi4ucHJvcGVydGllczogU29ydHNbXSk6IHRoaXM7XG5cbiAgICB3aXRoU29ydHNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzO1xuXG4gICAgZ2V0RmlsdGVyPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW0ZpbHRlcnNdPiA6IGFueT4ocHJvcGVydHk6IEZpbHRlcnMpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB8IG51bGw7XG5cbiAgICBnZXRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWwgPSBhbnk+KHByb3BlcnR5OiBzdHJpbmcpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB8IG51bGw7XG5cbiAgICByZW1vdmVGaWx0ZXIocHJvcGVydHk6IEZpbHRlcnMpOiB2b2lkO1xuXG4gICAgcmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgYWRkRmlsdGVyPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBUYWJsZU1vZGVsW0ZpbHRlcnNdIDogbmV2ZXI+KHByb3BlcnR5OiBGaWx0ZXJzKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD47XG5cbiAgICBhZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPjtcblxuICAgIGFkZEZpbHRlckxvb2t1cDxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsID8gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtGaWx0ZXJzXT4gOiBuZXZlciwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIHByb3BlcnR5OiBGaWx0ZXJzLFxuICAgICAgICBwcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT86IGtleW9mIEZpbHRlck1vZGVsXG4gICAgKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZT47XG5cbiAgICBhZGRGaWx0ZXJMb29rdXBVbnNhZmU8RmlsdGVyTW9kZWwsIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT86IHN0cmluZ1xuICAgICk6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+O1xuXG4gICAgYWRkRmlsdGVyTG9va3VwRW51bTxFbnVtPihwcm9wZXJ0eTogRmlsdGVycywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPGFueT4sIG9wdGlvbnM/OiBBcnJheTxFbnVtPik6IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWw+O1xuXG4gICAgYWRkRmlsdGVyTG9va3VwRW51bVVuc2FmZTxFbnVtID0gRW51bUNvbnN0YW50VHlwZT4ocHJvcGVydHk6IHN0cmluZywgZW51bURlc2M6IEVudW1EZXNjcmlwdG9yPEVudW0+LCBvcHRpb25zPzogQXJyYXk8RW51bT4pOiBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcjxFbnVtLCBUYWJsZU1vZGVsPjtcblxuICAgIGFkZEZpbHRlckZyb21Db2x1bW48UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsLCBGaWx0ZXJNb2RlbCA9IE5vbk51bGxhYmxlPFRhYmxlTW9kZWxbUHJvcGVydHldPj4oXG4gICAgICAgIHByb3BlcnR5OiBFeHRyYWN0PEZpbHRlcnMsIFByb3BlcnR5PixcbiAgICAgICAgZGlzcGxheVR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0sXG4gICAgICAgIGZvcmNlU2ltcGxlPzogYm9vbGVhblxuICAgICk6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+O1xuXG4gICAgYWRkRmlsdGVyRnJvbUNvbHVtblVuc2FmZTxGaWx0ZXJNb2RlbCA9IGFueT4ocHJvcGVydHk6IHN0cmluZywgZGlzcGxheVR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0sIGZvcmNlU2ltcGxlPzogYm9vbGVhbik6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+O1xuXG4gICAgd2l0aEZpbHRlcnNGcm9tQ29sdW1ucyguLi5wcm9wZXJ0aWVzOiBFeHRyYWN0PEZpbHRlcnMsIGtleW9mIFRhYmxlTW9kZWw+W10pOiB0aGlzO1xuXG4gICAgd2l0aEZpbHRlcnNGcm9tQ29sdW1uc1Vuc2FmZSguLi5wcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHRoaXM7XG5cbiAgICB3aXRoRmlsdGVyPEZpbHRlck1vZGVsPihwcm9wZXJ0eTogRmlsdGVycywgZmlsdGVyOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPik6IHRoaXM7XG5cbiAgICB3aXRoRmlsdGVyVW5zYWZlPEZpbHRlck1vZGVsPihmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KTogdGhpcztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1ucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL2FwaS9zcmMvbW9kZWxzL3RhYmxlLWNvbHVtbnMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW51bUNvbnN0YW50VHlwZSwgSUxvb2t1cERhdGFQcm92aWRlcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyRGlzcGxheVR5cGVFbnVtLCBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBFbnVtRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5cbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvY29sdW1uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtTb3J0RGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvc29ydC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uc01hbmFnZUludGVyZmFjZTxUYWJsZU1vZGVsLCBTb3J0cywgRmlsdGVycz4ge1xuICAgIGdldENvbHVtbjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwsIENvbHVtbk1vZGVsID0gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eV0+LCBDb2x1bW5WYWx1ZSA9IFRhYmxlTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5XG4gICAgKTogQ29sdW1uRGVzY3JpcHRvcjxDb2x1bW5Nb2RlbCwgVGFibGVNb2RlbCwgQ29sdW1uVmFsdWU+IHwgbnVsbDtcblxuICAgIGdldENvbHVtblVuc2FmZTxDb2x1bW5Nb2RlbCA9IGFueSwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWwsIENvbHVtblZhbHVlPiB8IG51bGw7XG5cbiAgICByZW1vdmVDb2x1bW4ocHJvcGVydHk6IGtleW9mIFRhYmxlTW9kZWwpOiB2b2lkO1xuXG4gICAgcmVtb3ZlQ29sdW1uVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgd2l0aENvbHVtbjxDb2x1bW5Nb2RlbCwgQ29sdW1uVmFsdWUgPSBDb2x1bW5Nb2RlbD4oY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPENvbHVtbk1vZGVsLCBUYWJsZU1vZGVsLCBDb2x1bW5WYWx1ZT4pOiB0aGlzO1xuXG4gICAgYWRkQ29sdW1uPFByb3BlcnR5S2V5IGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbD4ocHJvcGVydHk6IFByb3BlcnR5S2V5KTogQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxUYWJsZU1vZGVsW1Byb3BlcnR5S2V5XT4sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPjtcblxuICAgIGFkZENvbHVtbkVudW08UHJvcGVydHlLZXkgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eUtleV0+PihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5S2V5LFxuICAgICAgICBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT5cbiAgICApOiBDb2x1bW5EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWwsIFRhYmxlTW9kZWxbUHJvcGVydHlLZXldPjtcblxuICAgIGFkZENvbHVtblVuc2FmZTxDb2x1bW5Nb2RlbCA9IGFueT4ocHJvcGVydHk6IHN0cmluZyk6IENvbHVtbkRlc2NyaXB0b3I8Q29sdW1uTW9kZWwsIFRhYmxlTW9kZWw+O1xuXG4gICAgd2l0aENvbHVtbnMoLi4ucHJvcGVydGllczogKGtleW9mIFRhYmxlTW9kZWwpW10pOiB0aGlzO1xuXG4gICAgZ2V0U29ydChwcm9wZXJ0eTogU29ydHMpOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPiB8IG51bGw7XG5cbiAgICBnZXRTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPiB8IG51bGw7XG5cbiAgICByZW1vdmVTb3J0KHByb3BlcnR5OiBTb3J0cyk6IHZvaWQ7XG5cbiAgICByZW1vdmVTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgYWRkU29ydChwcm9wZXJ0eTogU29ydHMsIGlzRGVmYXVsdDogYm9vbGVhbiwgYXNjZW5kaW5nPzogYm9vbGVhbik6IFNvcnREZXNjcmlwdG9yPFRhYmxlTW9kZWw+O1xuXG4gICAgYWRkU29ydFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nLCBpc0RlZmF1bHQ6IGJvb2xlYW4sIGFzY2VuZGluZz86IGJvb2xlYW4pOiBTb3J0RGVzY3JpcHRvcjxUYWJsZU1vZGVsPjtcblxuICAgIHdpdGhTb3J0KHByb3BlcnR5OiBTb3J0cywgaXNEZWZhdWx0OiBib29sZWFuLCBhc2NlbmRpbmc/OiBib29sZWFuKTogdGhpcztcblxuICAgIHdpdGhTb3J0VW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGlzRGVmYXVsdDogYm9vbGVhbiwgYXNjZW5kaW5nPzogYm9vbGVhbik6IHRoaXM7XG5cbiAgICB3aXRoU29ydHMoLi4ucHJvcGVydGllczogU29ydHNbXSk6IHRoaXM7XG5cbiAgICB3aXRoU29ydHNVbnNhZmUoLi4ucHJvcGVydGllczogc3RyaW5nW10pOiB0aGlzO1xuXG4gICAgZ2V0RmlsdGVyPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBOb25OdWxsYWJsZTxUYWJsZU1vZGVsW0ZpbHRlcnNdPiA6IGFueT4ocHJvcGVydHk6IEZpbHRlcnMpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB8IG51bGw7XG5cbiAgICBnZXRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWwgPSBhbnk+KHByb3BlcnR5OiBzdHJpbmcpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPiB8IG51bGw7XG5cbiAgICByZW1vdmVGaWx0ZXIocHJvcGVydHk6IEZpbHRlcnMpOiB2b2lkO1xuXG4gICAgcmVtb3ZlRmlsdGVyVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgYWRkRmlsdGVyPEZpbHRlck1vZGVsID0gRmlsdGVycyBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwgPyBUYWJsZU1vZGVsW0ZpbHRlcnNdIDogbmV2ZXI+KHByb3BlcnR5OiBGaWx0ZXJzKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD47XG5cbiAgICBhZGRGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcpOiBGaWx0ZXJEZXNjcmlwdG9yPEZpbHRlck1vZGVsLCBUYWJsZU1vZGVsPjtcblxuICAgIGFkZEZpbHRlckxvb2t1cDxGaWx0ZXJNb2RlbCA9IEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBUYWJsZU1vZGVsID8gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtGaWx0ZXJzXT4gOiBuZXZlciwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIHByb3BlcnR5OiBGaWx0ZXJzLFxuICAgICAgICBwcm92aWRlcj86IElMb29rdXBEYXRhUHJvdmlkZXI8RmlsdGVyTW9kZWwsIFNlcnZpY2UsIGFueSwgYW55PixcbiAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk/OiBrZXlvZiBGaWx0ZXJNb2RlbFxuICAgICk6IEZpbHRlckxvb2t1cERlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWwsIFNlcnZpY2U+O1xuXG4gICAgYWRkRmlsdGVyTG9va3VwVW5zYWZlPEZpbHRlck1vZGVsLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgcHJvdmlkZXI/OiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlck1vZGVsLCBTZXJ2aWNlLCBhbnksIGFueT4sXG4gICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5Pzogc3RyaW5nXG4gICAgKTogRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbCwgU2VydmljZT47XG5cbiAgICBhZGRGaWx0ZXJMb29rdXBFbnVtPEVudW0+KHByb3BlcnR5OiBGaWx0ZXJzLCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8YW55Piwgb3B0aW9ucz86IEFycmF5PEVudW0+KTogRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3I8RW51bSwgVGFibGVNb2RlbD47XG5cbiAgICBhZGRGaWx0ZXJMb29rdXBFbnVtVW5zYWZlPEVudW0gPSBFbnVtQ29uc3RhbnRUeXBlPihwcm9wZXJ0eTogc3RyaW5nLCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sIG9wdGlvbnM/OiBBcnJheTxFbnVtPik6IEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIFRhYmxlTW9kZWw+O1xuXG4gICAgYWRkRmlsdGVyRnJvbUNvbHVtbjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIFRhYmxlTW9kZWwsIEZpbHRlck1vZGVsID0gTm9uTnVsbGFibGU8VGFibGVNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IEV4dHJhY3Q8RmlsdGVycywgUHJvcGVydHk+LFxuICAgICAgICBkaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSxcbiAgICAgICAgZm9yY2VTaW1wbGU/OiBib29sZWFuXG4gICAgKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD47XG5cbiAgICBhZGRGaWx0ZXJGcm9tQ29sdW1uVW5zYWZlPEZpbHRlck1vZGVsID0gYW55Pihwcm9wZXJ0eTogc3RyaW5nLCBkaXNwbGF5VHlwZT86IEZpbHRlckRpc3BsYXlUeXBlRW51bSwgZm9yY2VTaW1wbGU/OiBib29sZWFuKTogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD47XG5cbiAgICB3aXRoRmlsdGVyc0Zyb21Db2x1bW5zKC4uLnByb3BlcnRpZXM6IEV4dHJhY3Q8RmlsdGVycywga2V5b2YgVGFibGVNb2RlbD5bXSk6IHRoaXM7XG5cbiAgICB3aXRoRmlsdGVyc0Zyb21Db2x1bW5zVW5zYWZlKC4uLnByb3BlcnRpZXM6IHN0cmluZ1tdKTogdGhpcztcblxuICAgIHdpdGhGaWx0ZXI8RmlsdGVyTW9kZWw+KHByb3BlcnR5OiBGaWx0ZXJzLCBmaWx0ZXI6IEZpbHRlckRlc2NyaXB0b3I8RmlsdGVyTW9kZWwsIFRhYmxlTW9kZWw+KTogdGhpcztcblxuICAgIHdpdGhGaWx0ZXJVbnNhZmU8RmlsdGVyTW9kZWw+KGZpbHRlcjogRmlsdGVyRGVzY3JpcHRvcjxGaWx0ZXJNb2RlbCwgVGFibGVNb2RlbD4pOiB0aGlzO1xufVxuIl19