ax-common-ui-lib 1.0.0-beta.0

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 (1016) hide show
  1. package/README.md +24 -0
  2. package/ax-common-ui-lib.d.ts +5 -0
  3. package/esm2020/ax-common-ui-lib.mjs +5 -0
  4. package/esm2020/lib/app-list/app-list-dto.mjs +29 -0
  5. package/esm2020/lib/app-list/app-list.component.mjs +421 -0
  6. package/esm2020/lib/app-list/my-app-list.service.mjs +142 -0
  7. package/esm2020/lib/app-list/organization-list-dto.mjs +29 -0
  8. package/esm2020/lib/ax-common-ui-lib.component.mjs +26 -0
  9. package/esm2020/lib/ax-common-ui-lib.module.mjs +147 -0
  10. package/esm2020/lib/ax-common-ui-lib.service.mjs +14 -0
  11. package/esm2020/lib/axo-filters/axo-filters.component.mjs +422 -0
  12. package/esm2020/lib/axo-filters/axo-filters.module.mjs +59 -0
  13. package/esm2020/lib/axo-filters/axo-filters.service.mjs +85 -0
  14. package/esm2020/lib/axo-map/axo-map.component.mjs +40 -0
  15. package/esm2020/lib/axo-map/axo-map.mjs +37 -0
  16. package/esm2020/lib/axo-map/axo-map.module.mjs +41 -0
  17. package/esm2020/lib/axo-map/public-api.mjs +7 -0
  18. package/esm2020/lib/axo-search-bar/axo-search-bar.component.mjs +84 -0
  19. package/esm2020/lib/axo-search-bar/axo-search-bar.module.mjs +38 -0
  20. package/esm2020/lib/axo-search-bar/public.api.mjs +3 -0
  21. package/esm2020/lib/axo-snack-bar/axo-snack-bar.component.mjs +155 -0
  22. package/esm2020/lib/axo-snack-bar/axo-snack-bar.module.mjs +34 -0
  23. package/esm2020/lib/axo-snack-bar/axo-snack-bar.service.mjs +29 -0
  24. package/esm2020/lib/axo-snack-bar/public-api.mjs +3 -0
  25. package/esm2020/lib/axo-state-manager/axo-state-manager.module.mjs +27 -0
  26. package/esm2020/lib/axo-state-manager/axo-state-manager.service.mjs +37 -0
  27. package/esm2020/lib/axo-state-manager/public-api.mjs +3 -0
  28. package/esm2020/lib/axo-utils/axo-utils.mjs +149 -0
  29. package/esm2020/lib/axo-utils/axo-utils.module.mjs +25 -0
  30. package/esm2020/lib/axo-utils/constants.mjs +3 -0
  31. package/esm2020/lib/axo-utils/data-source-types.mjs +12 -0
  32. package/esm2020/lib/axo-utils/field-list-search-pipe.mjs +32 -0
  33. package/esm2020/lib/axo-utils/filter-search-pipe.mjs +16 -0
  34. package/esm2020/lib/axo-utils/public-api.mjs +2 -0
  35. package/esm2020/lib/axo-utils/search-pipe/choice-search.pipe.mjs +33 -0
  36. package/esm2020/lib/axo-utils/search-pipe.mjs +36 -0
  37. package/esm2020/lib/bread-crumbs/bread-crumbs.component.mjs +196 -0
  38. package/esm2020/lib/bread-crumbs/bread-crumbs.module.mjs +29 -0
  39. package/esm2020/lib/bread-crumbs/bread-crumbs.service.mjs +122 -0
  40. package/esm2020/lib/code-editor/code-editor-modes.mjs +11 -0
  41. package/esm2020/lib/code-editor/code-editor-themes.mjs +8 -0
  42. package/esm2020/lib/code-editor/code-editor.component.mjs +60 -0
  43. package/esm2020/lib/code-editor/code-editor.module.mjs +36 -0
  44. package/esm2020/lib/code-editor/icode-editor-options.mjs +2 -0
  45. package/esm2020/lib/code-editor/public-api.mjs +3 -0
  46. package/esm2020/lib/common-dto/attributes-dto.mjs +39 -0
  47. package/esm2020/lib/common-dto/dashboard-dto.mjs +12 -0
  48. package/esm2020/lib/common-dto/dataListFilter-dto.mjs +13 -0
  49. package/esm2020/lib/common-dto/elements-dto.mjs +61 -0
  50. package/esm2020/lib/common-dto/form-dto.mjs +48 -0
  51. package/esm2020/lib/common-lib-configuration.service.mjs +21 -0
  52. package/esm2020/lib/common-property-panel/properties/properties.service.mjs +30 -0
  53. package/esm2020/lib/common-utils/entity-base.mjs +12 -0
  54. package/esm2020/lib/common-utils/iFlatten.mjs +2 -0
  55. package/esm2020/lib/common-utils/report.mjs +45 -0
  56. package/esm2020/lib/common.service.mjs +78 -0
  57. package/esm2020/lib/converters/convert-to-new-service.mjs +11 -0
  58. package/esm2020/lib/converters/convert-to-old-service.mjs +168 -0
  59. package/esm2020/lib/core/auth/auth.service.mjs +146 -0
  60. package/esm2020/lib/core/core.module.mjs +37 -0
  61. package/esm2020/lib/core/icons/icons.module.mjs +255 -0
  62. package/esm2020/lib/core/transloco/transloco.http-loader.mjs +32 -0
  63. package/esm2020/lib/core/transloco/transloco.module.mjs +94 -0
  64. package/esm2020/lib/core/user/axo-user.mjs +46 -0
  65. package/esm2020/lib/core/user/user-data.service.mjs +46 -0
  66. package/esm2020/lib/core/user/user.service.mjs +87 -0
  67. package/esm2020/lib/core/user/user.types.mjs +2 -0
  68. package/esm2020/lib/dashboard-lib/dashboard-builder.service.mjs +56 -0
  69. package/esm2020/lib/dashboard-lib/dashboard-control.service.mjs +92 -0
  70. package/esm2020/lib/dashboard-lib/dashboard-element/dashboard-element.mjs +11 -0
  71. package/esm2020/lib/dashboard-lib/dashboard-element-property/dashboard-property/dashboard-element-property.mjs +9 -0
  72. package/esm2020/lib/dashboard-lib/dashboard-filter/dashboard-filter.component.mjs +107 -0
  73. package/esm2020/lib/dashboard-lib/dashboard-lib.module.mjs +111 -0
  74. package/esm2020/lib/dashboard-lib/dashboard-list.service.mjs +73 -0
  75. package/esm2020/lib/dashboard-lib/dashboard.mjs +15 -0
  76. package/esm2020/lib/dashboard-lib/send-to-dashboard.service.mjs +96 -0
  77. package/esm2020/lib/dashboard-lib/show-dashboards/show-dashboards.component.mjs +241 -0
  78. package/esm2020/lib/dashboard-lib/show-dashboards/show-dashboards.service.mjs +32 -0
  79. package/esm2020/lib/data-view-lib/data-view/axo-card.mjs +26 -0
  80. package/esm2020/lib/data-view-lib/data-view/axo-tag.mjs +48 -0
  81. package/esm2020/lib/data-view-lib/data-view/board-column.mjs +24 -0
  82. package/esm2020/lib/data-view-lib/data-view/board-view.mjs +45 -0
  83. package/esm2020/lib/data-view-lib/data-view/cardConfig.mjs +26 -0
  84. package/esm2020/lib/data-view-lib/data-view/conditional-formatting.mjs +25 -0
  85. package/esm2020/lib/data-view-lib/data-view/coordinate.mjs +21 -0
  86. package/esm2020/lib/data-view-lib/data-view/data-view-enums.mjs +68 -0
  87. package/esm2020/lib/data-view-lib/data-view/data-view-filter.mjs +47 -0
  88. package/esm2020/lib/data-view-lib/data-view/data-view.mjs +66 -0
  89. package/esm2020/lib/data-view-lib/data-view/idata-view.mjs +2 -0
  90. package/esm2020/lib/data-view-lib/data-view/image-style.mjs +21 -0
  91. package/esm2020/lib/data-view-lib/data-view/info-window.mjs +23 -0
  92. package/esm2020/lib/data-view-lib/data-view/location.mjs +21 -0
  93. package/esm2020/lib/data-view-lib/data-view/map-view.mjs +41 -0
  94. package/esm2020/lib/data-view-lib/data-view/prefix-style.mjs +28 -0
  95. package/esm2020/lib/data-view-lib/data-view/tag-style.mjs +28 -0
  96. package/esm2020/lib/data-view-lib/data-view/tagConfig.mjs +63 -0
  97. package/esm2020/lib/data-view-lib/data-view/task-asset-form-object-dto.mjs +72 -0
  98. package/esm2020/lib/data-view-lib/data-view/task-column-value.mjs +43 -0
  99. package/esm2020/lib/data-view-lib/data-view/task-view.mjs +31 -0
  100. package/esm2020/lib/data-view-lib/data-view/task.mjs +199 -0
  101. package/esm2020/lib/data-view-lib/data-view/value-style.mjs +25 -0
  102. package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.component.mjs +661 -0
  103. package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.service.mjs +102 -0
  104. package/esm2020/lib/data-view-lib/data-view-header/data-view-header.component.mjs +536 -0
  105. package/esm2020/lib/data-view-lib/data-view-lib.module.mjs +88 -0
  106. package/esm2020/lib/data-view-lib/data-view.service.mjs +211 -0
  107. package/esm2020/lib/data-view-lib/public-api.mjs +28 -0
  108. package/esm2020/lib/directive/adjust-font-size.mjs +49 -0
  109. package/esm2020/lib/drill-through/drill-through.component.mjs +153 -0
  110. package/esm2020/lib/drill-through/drill-through.module.mjs +33 -0
  111. package/esm2020/lib/drill-through/drill-through.resolver.mjs +80 -0
  112. package/esm2020/lib/drill-through/drill-through.service.mjs +218 -0
  113. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-column.mjs +37 -0
  114. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-list.mjs +37 -0
  115. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-range-value.mjs +37 -0
  116. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-range.mjs +34 -0
  117. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-list.mjs +36 -0
  118. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-range-value.mjs +37 -0
  119. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-range.mjs +34 -0
  120. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time.mjs +36 -0
  121. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-value.mjs +36 -0
  122. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-list.mjs +36 -0
  123. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-range-value.mjs +37 -0
  124. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-value.mjs +36 -0
  125. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-text-list.mjs +36 -0
  126. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-text.mjs +36 -0
  127. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-list.mjs +36 -0
  128. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-range-value.mjs +37 -0
  129. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-range.mjs +38 -0
  130. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time.mjs +36 -0
  131. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-toggle.mjs +36 -0
  132. package/esm2020/lib/enlighten-lib/ax-expression/ax-expression-value.mjs +32 -0
  133. package/esm2020/lib/enlighten-lib/ax-expression/ax-expression.mjs +415 -0
  134. package/esm2020/lib/enlighten-lib/ax-expression/ax-number-range.mjs +34 -0
  135. package/esm2020/lib/enlighten-lib/ax-expression/exp-sub-type.mjs +29 -0
  136. package/esm2020/lib/enlighten-lib/ax-expression/public-api.mjs +24 -0
  137. package/esm2020/lib/enlighten-lib/data-model/attribute.mjs +247 -0
  138. package/esm2020/lib/enlighten-lib/data-model/data-model.mjs +52 -0
  139. package/esm2020/lib/enlighten-lib/data-model/dependee.mjs +24 -0
  140. package/esm2020/lib/enlighten-lib/data-model/dependent.mjs +24 -0
  141. package/esm2020/lib/enlighten-lib/data-model/entity.mjs +71 -0
  142. package/esm2020/lib/enlighten-lib/data-model-tree/attributes-dragdrop-layout/attributes-dragdrop-layout.component.mjs +100 -0
  143. package/esm2020/lib/enlighten-lib/data-model-tree/attributes-selection-layout/attributes-selection-layout.component.mjs +100 -0
  144. package/esm2020/lib/enlighten-lib/data-model-tree/categories-tree/categories-tree.component.mjs +113 -0
  145. package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree-enums.mjs +6 -0
  146. package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree.component.mjs +301 -0
  147. package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree.module.mjs +67 -0
  148. package/esm2020/lib/enlighten-lib/elements/Property.mjs +3 -0
  149. package/esm2020/lib/enlighten-lib/elements/ax-element.mjs +55 -0
  150. package/esm2020/lib/enlighten-lib/elements/element-factory.mjs +38 -0
  151. package/esm2020/lib/enlighten-lib/enlighten-lib.module.mjs +308 -0
  152. package/esm2020/lib/enlighten-lib/enums/bread-crumbs-style.mjs +6 -0
  153. package/esm2020/lib/enlighten-lib/enums/operator-text-enum.mjs +11 -0
  154. package/esm2020/lib/enlighten-lib/fields/attribute-data.mjs +167 -0
  155. package/esm2020/lib/enlighten-lib/fields/entity.mjs +16 -0
  156. package/esm2020/lib/enlighten-lib/fields/types/ax-audio.mjs +6 -0
  157. package/esm2020/lib/enlighten-lib/fields/types/ax-barcode.mjs +6 -0
  158. package/esm2020/lib/enlighten-lib/fields/types/ax-childrecord.mjs +6 -0
  159. package/esm2020/lib/enlighten-lib/fields/types/ax-counter.mjs +6 -0
  160. package/esm2020/lib/enlighten-lib/fields/types/ax-date.mjs +6 -0
  161. package/esm2020/lib/enlighten-lib/fields/types/ax-decimal.mjs +6 -0
  162. package/esm2020/lib/enlighten-lib/fields/types/ax-document.mjs +6 -0
  163. package/esm2020/lib/enlighten-lib/fields/types/ax-file.mjs +6 -0
  164. package/esm2020/lib/enlighten-lib/fields/types/ax-image.mjs +6 -0
  165. package/esm2020/lib/enlighten-lib/fields/types/ax-location.mjs +6 -0
  166. package/esm2020/lib/enlighten-lib/fields/types/ax-number.mjs +6 -0
  167. package/esm2020/lib/enlighten-lib/fields/types/ax-qrcode.mjs +6 -0
  168. package/esm2020/lib/enlighten-lib/fields/types/ax-signature.mjs +6 -0
  169. package/esm2020/lib/enlighten-lib/fields/types/ax-staticmedia.mjs +6 -0
  170. package/esm2020/lib/enlighten-lib/fields/types/ax-text.mjs +6 -0
  171. package/esm2020/lib/enlighten-lib/fields/types/ax-time.mjs +6 -0
  172. package/esm2020/lib/enlighten-lib/fields/types/ax-uniqueid.mjs +6 -0
  173. package/esm2020/lib/enlighten-lib/fields/types/axo-timestamp.mjs +6 -0
  174. package/esm2020/lib/enlighten-lib/fields/types/choicelist.mjs +6 -0
  175. package/esm2020/lib/enlighten-lib/fields/types/datetime.mjs +6 -0
  176. package/esm2020/lib/enlighten-lib/fields/types/hyperlink.mjs +6 -0
  177. package/esm2020/lib/enlighten-lib/fields/types/ienlighten-type.mjs +2 -0
  178. package/esm2020/lib/enlighten-lib/fields/types/toggle.mjs +6 -0
  179. package/esm2020/lib/enlighten-lib/fields/types/video.mjs +6 -0
  180. package/esm2020/lib/enlighten-lib/filters/ax-filter.mjs +74 -0
  181. package/esm2020/lib/enlighten-lib/filters/ax-operator.mjs +88 -0
  182. package/esm2020/lib/enlighten-lib/filters/chart-filter-type.mjs +7 -0
  183. package/esm2020/lib/enlighten-lib/filters/condition-type.mjs +49 -0
  184. package/esm2020/lib/enlighten-lib/filters/dataList-searchNode.mjs +48 -0
  185. package/esm2020/lib/enlighten-lib/filters/dataListFilterExpression.mjs +32 -0
  186. package/esm2020/lib/enlighten-lib/filters/dataListFilterOperator.mjs +43 -0
  187. package/esm2020/lib/enlighten-lib/filters/dataListSeachQueryTree.mjs +25 -0
  188. package/esm2020/lib/enlighten-lib/filters/filter-category.mjs +78 -0
  189. package/esm2020/lib/enlighten-lib/filters/general-filter-type.mjs +13 -0
  190. package/esm2020/lib/enlighten-lib/filters/gridster-properties.mjs +31 -0
  191. package/esm2020/lib/enlighten-lib/filters/iax-filter.mjs +2 -0
  192. package/esm2020/lib/enlighten-lib/filters/search-node.mjs +50 -0
  193. package/esm2020/lib/enlighten-lib/filters/static-widget.mjs +24 -0
  194. package/esm2020/lib/enlighten-lib/property/element-property.mjs +11 -0
  195. package/esm2020/lib/enlighten-lib/property/filter-category-property.mjs +9 -0
  196. package/esm2020/lib/enlighten-lib/property/filter-property.mjs +9 -0
  197. package/esm2020/lib/enlighten-lib/report/chart-filter/chart-filter.component.mjs +393 -0
  198. package/esm2020/lib/enlighten-lib/report/element.service.mjs +115 -0
  199. package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.mjs +1002 -0
  200. package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.mjs +144 -0
  201. package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.service.mjs +15 -0
  202. package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.mjs +576 -0
  203. package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.mjs +66 -0
  204. package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.service.mjs +15 -0
  205. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/border.mjs +18 -0
  206. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-factory.mjs +80 -0
  207. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-property.mjs +4 -0
  208. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-type.mjs +15 -0
  209. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart.mjs +123 -0
  210. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/common-chart.service.mjs +32 -0
  211. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/conditional-formatting.mjs +8 -0
  212. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/dimension.mjs +8 -0
  213. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/font.mjs +32 -0
  214. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/fontStyle.mjs +28 -0
  215. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/label.mjs +6 -0
  216. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/legend.mjs +28 -0
  217. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/matrix.mjs +26 -0
  218. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/shadow.mjs +7 -0
  219. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/style.mjs +14 -0
  220. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/text-style.mjs +34 -0
  221. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/title.mjs +12 -0
  222. package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.component.mjs +357 -0
  223. package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.directive.mjs +16 -0
  224. package/esm2020/lib/enlighten-lib/report/graphical-report/ichart-component.mjs +2 -0
  225. package/esm2020/lib/enlighten-lib/report/graphical-report/igraphical-report.component.mjs +2 -0
  226. package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.mjs +856 -0
  227. package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.mjs +97 -0
  228. package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.service.mjs +15 -0
  229. package/esm2020/lib/enlighten-lib/report/graphical-report/page/page.mjs +48 -0
  230. package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.mjs +934 -0
  231. package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.mjs +103 -0
  232. package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.service.mjs +15 -0
  233. package/esm2020/lib/enlighten-lib/report/graphical-report/text/text-chart.mjs +56 -0
  234. package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.component.mjs +302 -0
  235. package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.service.mjs +15 -0
  236. package/esm2020/lib/enlighten-lib/report/iproperty.component.mjs +8 -0
  237. package/esm2020/lib/enlighten-lib/report/ireport.mjs +14 -0
  238. package/esm2020/lib/enlighten-lib/report/report-builder-master.service.mjs +83 -0
  239. package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.component.mjs +313 -0
  240. package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.module.mjs +71 -0
  241. package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.service.mjs +246 -0
  242. package/esm2020/lib/enlighten-lib/report/tabular-report/aggregate.mjs +10 -0
  243. package/esm2020/lib/enlighten-lib/report/tabular-report/axo-percentage.pipe.mjs +26 -0
  244. package/esm2020/lib/enlighten-lib/report/tabular-report/column-style.mjs +7 -0
  245. package/esm2020/lib/enlighten-lib/report/tabular-report/itabular-report.component.mjs +2 -0
  246. package/esm2020/lib/enlighten-lib/report/tabular-report/orderby-type.mjs +7 -0
  247. package/esm2020/lib/enlighten-lib/report/tabular-report/row-style.mjs +7 -0
  248. package/esm2020/lib/enlighten-lib/report/tabular-report/table-style.mjs +47 -0
  249. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/column-group-view/column-group-view.component.mjs +4464 -0
  250. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.mjs +1583 -0
  251. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/resize-column-directive.mjs +70 -0
  252. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/row-group-view/row-group-view.component.mjs +1837 -0
  253. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.mjs +756 -0
  254. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.component.mjs +156 -0
  255. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.mjs +245 -0
  256. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.service.mjs +960 -0
  257. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular.mjs +196 -0
  258. package/esm2020/lib/enlighten-lib/report/tabular-report/value-formatting.mjs +9 -0
  259. package/esm2020/lib/enlighten-lib/report-control.service.mjs +41 -0
  260. package/esm2020/lib/enlighten-lib/utils/utils.mjs +26 -0
  261. package/esm2020/lib/field-list-lib/fields-list.service.mjs +299 -0
  262. package/esm2020/lib/filters/calender-filter/calender-filter.component.mjs +351 -0
  263. package/esm2020/lib/filters/category-filter/category-filter.component.mjs +207 -0
  264. package/esm2020/lib/filters/category-filter/category-filter.service.mjs +31 -0
  265. package/esm2020/lib/filters/category-filter/category.service.mjs +45 -0
  266. package/esm2020/lib/filters/choice-list-filter/choice-list-filter.component.mjs +178 -0
  267. package/esm2020/lib/filters/choice-list-filter/choice-list-filter.service.mjs +53 -0
  268. package/esm2020/lib/filters/common-filter/common-filter.component.mjs +310 -0
  269. package/esm2020/lib/filters/common-filter/common-filter.service.mjs +106 -0
  270. package/esm2020/lib/filters/custom-scroll-directives.mjs +45 -0
  271. package/esm2020/lib/filters/date-time-filter/date-time-filter.component.mjs +345 -0
  272. package/esm2020/lib/filters/filter-footer/filter-footer.component.mjs +62 -0
  273. package/esm2020/lib/filters/filters.component.mjs +688 -0
  274. package/esm2020/lib/filters/filters.module.mjs +196 -0
  275. package/esm2020/lib/filters/filters.service.mjs +147 -0
  276. package/esm2020/lib/filters/meta-column-filter-builder/meta-column-filter-builder.service.mjs +202 -0
  277. package/esm2020/lib/filters/metaColumnTypes.mjs +36 -0
  278. package/esm2020/lib/filters/multi-select-filter/multi-select-filter.component.mjs +211 -0
  279. package/esm2020/lib/filters/multi-select-filter/multi-select-filter.service.mjs +214 -0
  280. package/esm2020/lib/filters/number-filter/number-filter.component.mjs +321 -0
  281. package/esm2020/lib/filters/public-api.mjs +15 -0
  282. package/esm2020/lib/filters/reference-list-filter/reference-list-filter.component.mjs +180 -0
  283. package/esm2020/lib/filters/reference-list-filter/reference-list-filter.service.mjs +151 -0
  284. package/esm2020/lib/filters/single-select-filter/single-select-filter.component.mjs +177 -0
  285. package/esm2020/lib/filters/time-filter/time-filter.component.mjs +301 -0
  286. package/esm2020/lib/filters/user-filter/user-filter.component.mjs +178 -0
  287. package/esm2020/lib/filters/user-filter/user-filter.service.mjs +62 -0
  288. package/esm2020/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.component.mjs +346 -0
  289. package/esm2020/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.service.mjs +105 -0
  290. package/esm2020/lib/form-object/form-object-list/form-object-list-header/form-object-list-header.component.mjs +41 -0
  291. package/esm2020/lib/form-object/form-object-list/form-object-list-header/widget-header-type-handler.mjs +10 -0
  292. package/esm2020/lib/form-object/form-object-list/form-object-list-header/widgets/text-box-header/text-box-header.component.mjs +21 -0
  293. package/esm2020/lib/form-object/form-object-list/form-object-list-header/widgets-header.directive.mjs +16 -0
  294. package/esm2020/lib/form-object/form-object-list/form-object-list.component.mjs +823 -0
  295. package/esm2020/lib/form-object/form-object-list/form-object-list.mjs +211 -0
  296. package/esm2020/lib/form-object/form-object-list/form-object-list.module.mjs +224 -0
  297. package/esm2020/lib/form-object/form-object-list/form-object-list.service.mjs +171 -0
  298. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value-handler.mjs +94 -0
  299. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value.directive.mjs +16 -0
  300. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-widget-value.component.mjs +60 -0
  301. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-apply-geo-fence-value/formobject-apply-geo-fence-value.component.mjs +33 -0
  302. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-audio-value/formobject-audio-value.component.mjs +40 -0
  303. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-auto-number-value/formobject-auto-number-value.component.mjs +31 -0
  304. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-bar-code-value/formobject-bar-code-value.component.mjs +98 -0
  305. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-child-records-value/formobject-child-records-value.component.mjs +86 -0
  306. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-choicelist-value/formobject-choicelist-value.component.mjs +180 -0
  307. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-counter-value/formobject-counter-value.component.mjs +45 -0
  308. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-date-time-value/formobject-date-time-value.component.mjs +54 -0
  309. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-document-value/formobject-document-value.component.mjs +163 -0
  310. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-formula-value/formobject-formula-value.component.mjs +45 -0
  311. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-geo-fence-value/formobject-geo-fence-value.component.mjs +61 -0
  312. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-gps-value/formobject-gps-value.component.mjs +64 -0
  313. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-group-header-value/formobject-group-header-value.component.mjs +21 -0
  314. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-image-value/formobject-image-value.component.mjs +119 -0
  315. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-languages-value/formobject-languages-value.component.mjs +37 -0
  316. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-payment-value/formobject-payment-value.component.mjs +21 -0
  317. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-qr-code-value/formobject-qr-code-value.component.mjs +98 -0
  318. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-signature-value/formobject-signature-value.component.mjs +60 -0
  319. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-static-media-value/formobject-static-media-value.component.mjs +62 -0
  320. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-stop-watch-value/formobject-stop-watch-value.component.mjs +24 -0
  321. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-sub-form-value/formobject-sub-form-value.component.mjs +19 -0
  322. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-textbox-value/formobject-textbox-value.component.mjs +49 -0
  323. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-time-stamp-value/formobject-time-stamp-value.component.mjs +50 -0
  324. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-toggle-value/formobject-toggle-value.component.mjs +25 -0
  325. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-unique-id-value/formobject-unique-id-value.component.mjs +33 -0
  326. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-verification-value/formobject-verification-value.component.mjs +60 -0
  327. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-video-value/formobject-video-value.component.mjs +65 -0
  328. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-web-link-value/formobject-web-link-value.component.mjs +28 -0
  329. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-widget-mat-dialog/formobject-widget-mat-dialog.component.mjs +89 -0
  330. package/esm2020/lib/form-object/form-object-view/data-detail-view-dto.mjs +55 -0
  331. package/esm2020/lib/form-object/form-object-view/dynamic-view/dynamic-view.component.mjs +85 -0
  332. package/esm2020/lib/form-object/form-object-view/dynamic-view/dynamic-view.directive.mjs +16 -0
  333. package/esm2020/lib/form-object/form-object-view/form-object-view.component.mjs +209 -0
  334. package/esm2020/lib/form-object/form-object-view/form-object-view.module.mjs +273 -0
  335. package/esm2020/lib/form-object/form-object-view/form-object-view.service.mjs +268 -0
  336. package/esm2020/lib/form-object/form-object-view/form-object-widgets/apply-geo-fence-widget-view/apply-geo-fence-widget-view.component.mjs +83 -0
  337. package/esm2020/lib/form-object/form-object-view/form-object-widgets/audio-widget-view/audio-widget-view.component.mjs +92 -0
  338. package/esm2020/lib/form-object/form-object-view/form-object-widgets/auto-number-widget-view/auto-number-widget-view.component.mjs +68 -0
  339. package/esm2020/lib/form-object/form-object-view/form-object-widgets/bar-code-widget-view/bar-code-widget-view.component.mjs +155 -0
  340. package/esm2020/lib/form-object/form-object-view/form-object-widgets/child-records-widget-view/child-records-widget-view.component.mjs +158 -0
  341. package/esm2020/lib/form-object/form-object-view/form-object-widgets/choice-list-widget-view/choice-list-widget-view.component.mjs +248 -0
  342. package/esm2020/lib/form-object/form-object-view/form-object-widgets/counter-widget-view/counter-widget-view.component.mjs +93 -0
  343. package/esm2020/lib/form-object/form-object-view/form-object-widgets/date-time-widget-view/date-time-widget-view.component.mjs +179 -0
  344. package/esm2020/lib/form-object/form-object-view/form-object-widgets/document-widget-view/document-widget-view.component.mjs +210 -0
  345. package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widget-type-handler.mjs +93 -0
  346. package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.component.mjs +58 -0
  347. package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.directive.mjs +16 -0
  348. package/esm2020/lib/form-object/form-object-view/form-object-widgets/formula-widget-view/formula-widget-view.component.mjs +76 -0
  349. package/esm2020/lib/form-object/form-object-view/form-object-widgets/geo-fence-widget-view/geo-fence-widget-view.component.mjs +89 -0
  350. package/esm2020/lib/form-object/form-object-view/form-object-widgets/gps-widget-view/gps-widget-view.component.mjs +263 -0
  351. package/esm2020/lib/form-object/form-object-view/form-object-widgets/group-header-widget-view/group-header-widget-view.component.mjs +17 -0
  352. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-annotation-data-dto.mjs +335 -0
  353. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.mjs +270 -0
  354. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-lightbox-view/image-widget-lightbox-view.component.mjs +498 -0
  355. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-view.component.mjs +203 -0
  356. package/esm2020/lib/form-object/form-object-view/form-object-widgets/language-widget-view/language-widget-view.component.mjs +70 -0
  357. package/esm2020/lib/form-object/form-object-view/form-object-widgets/payment-widget-view/payment-widget-view.component.mjs +21 -0
  358. package/esm2020/lib/form-object/form-object-view/form-object-widgets/qr-code-widget-view/qr-code-widget-view.component.mjs +146 -0
  359. package/esm2020/lib/form-object/form-object-view/form-object-widgets/signature-widget-view/signature-widget-view.component.mjs +92 -0
  360. package/esm2020/lib/form-object/form-object-view/form-object-widgets/static-media-widget-view/static-media-widget-view.component.mjs +84 -0
  361. package/esm2020/lib/form-object/form-object-view/form-object-widgets/stop-watch-widget-view/stop-watch-widget-view.component.mjs +82 -0
  362. package/esm2020/lib/form-object/form-object-view/form-object-widgets/sub-form-widget-view/sub-form-widget-view.component.mjs +93 -0
  363. package/esm2020/lib/form-object/form-object-view/form-object-widgets/text-box-widget-view/text-box-widget-view.component.mjs +144 -0
  364. package/esm2020/lib/form-object/form-object-view/form-object-widgets/time-stamp-widget-view/time-stamp-widget-view.component.mjs +95 -0
  365. package/esm2020/lib/form-object/form-object-view/form-object-widgets/toggle-widget-view/toggle-widget-view.component.mjs +83 -0
  366. package/esm2020/lib/form-object/form-object-view/form-object-widgets/unique-id-widget-view/unique-id-widget-view.component.mjs +82 -0
  367. package/esm2020/lib/form-object/form-object-view/form-object-widgets/verification-widget-view/verification-widget-view.component.mjs +79 -0
  368. package/esm2020/lib/form-object/form-object-view/form-object-widgets/video-widget-view/video-widget-view.component.mjs +113 -0
  369. package/esm2020/lib/form-object/form-object-view/form-object-widgets/web-link-widget-view/web-link-widget-view.component.mjs +89 -0
  370. package/esm2020/lib/form-object/form-object-view/meta-section/meta-section.component.mjs +157 -0
  371. package/esm2020/lib/form-object/form-object-view/section/section.component.mjs +75 -0
  372. package/esm2020/lib/form-object/form-object-view/section-field/section-field.component.mjs +30 -0
  373. package/esm2020/lib/form-object/form-object-view/section-view/section-view.component.mjs +110 -0
  374. package/esm2020/lib/form-object/public-api.mjs +3 -0
  375. package/esm2020/lib/form-permission.service.mjs +106 -0
  376. package/esm2020/lib/forms/ax-form.mjs +212 -0
  377. package/esm2020/lib/forms/iform.mjs +2 -0
  378. package/esm2020/lib/forms/page/common/axo-response-status.mjs +6 -0
  379. package/esm2020/lib/forms/page/common/constants.mjs +399 -0
  380. package/esm2020/lib/forms/page/common/detail-view-enums.mjs +8 -0
  381. package/esm2020/lib/forms/page/common/flatten-status-enum.mjs +10 -0
  382. package/esm2020/lib/forms/page/common/form.constant.mjs +87 -0
  383. package/esm2020/lib/forms/page/common/property-panel-field.mjs +5 -0
  384. package/esm2020/lib/forms/page/common/widget-enums.mjs +269 -0
  385. package/esm2020/lib/forms/page/common/widget-value-handler.mjs +321 -0
  386. package/esm2020/lib/forms/page/data-detail-view/ax-section.mjs +51 -0
  387. package/esm2020/lib/forms/page/data-detail-view/collection-view.mjs +30 -0
  388. package/esm2020/lib/forms/page/data-detail-view/data-details.mjs +60 -0
  389. package/esm2020/lib/forms/page/data-detail-view/section-field.mjs +32 -0
  390. package/esm2020/lib/forms/page/data-detail-view/section.mjs +33 -0
  391. package/esm2020/lib/forms/page/data-list/data-list-column.mjs +45 -0
  392. package/esm2020/lib/forms/page/data-list/data-list.mjs +64 -0
  393. package/esm2020/lib/forms/page/form-object.mjs +17 -0
  394. package/esm2020/lib/forms/page/form-page.mjs +28 -0
  395. package/esm2020/lib/forms/page/value-converters/displayMode-to-bool.mjs +16 -0
  396. package/esm2020/lib/forms/page/value-converters/form-type-converter.mjs +23 -0
  397. package/esm2020/lib/forms/page/value-converters/geo-fence-value-converter.mjs +24 -0
  398. package/esm2020/lib/forms/page/value-converters/image-annotation-value-converter.mjs +20 -0
  399. package/esm2020/lib/forms/page/value-converters/language-source-value-converter.mjs +24 -0
  400. package/esm2020/lib/forms/page/value-converters/list-view-title-converter.mjs +20 -0
  401. package/esm2020/lib/forms/page/value-converters/parse-float-converter.mjs +15 -0
  402. package/esm2020/lib/forms/page/value-converters/parse-int-converter.mjs +20 -0
  403. package/esm2020/lib/forms/page/value-converters/parse-string-converter.mjs +20 -0
  404. package/esm2020/lib/forms/page/value-converters/publicUrls-string-to-array.mjs +20 -0
  405. package/esm2020/lib/forms/page/value-converters/record-limit-type-converter.mjs +23 -0
  406. package/esm2020/lib/forms/page/value-converters/restriction-mode-converter.mjs +23 -0
  407. package/esm2020/lib/forms/page/value-converters/string-to-bool-converter.mjs +16 -0
  408. package/esm2020/lib/forms/page/value-converters/string-to-bool-value-converter.mjs +16 -0
  409. package/esm2020/lib/forms/page/value-converters/string-to-date-time-converter.mjs +19 -0
  410. package/esm2020/lib/forms/page/value-converters/string-to-number -converter.mjs +20 -0
  411. package/esm2020/lib/forms/page/value-converters/textBox-mask-converter.mjs +16 -0
  412. package/esm2020/lib/forms/page/value-converters/validate-converter.mjs +20 -0
  413. package/esm2020/lib/forms/page/value-converters/value-without-mask-converter.mjs +20 -0
  414. package/esm2020/lib/forms/page/value-converters/widget-concrete-class-converter.mjs +22 -0
  415. package/esm2020/lib/forms/page/value-converters/widget-deserializer.mjs +149 -0
  416. package/esm2020/lib/forms/page/widgets/apply-geofences.mjs +65 -0
  417. package/esm2020/lib/forms/page/widgets/auto-number.mjs +87 -0
  418. package/esm2020/lib/forms/page/widgets/ax-audio.mjs +154 -0
  419. package/esm2020/lib/forms/page/widgets/ax-document.mjs +149 -0
  420. package/esm2020/lib/forms/page/widgets/ax-image.mjs +183 -0
  421. package/esm2020/lib/forms/page/widgets/bar-code.mjs +212 -0
  422. package/esm2020/lib/forms/page/widgets/child-record.mjs +193 -0
  423. package/esm2020/lib/forms/page/widgets/choicelist.mjs +375 -0
  424. package/esm2020/lib/forms/page/widgets/counter.mjs +69 -0
  425. package/esm2020/lib/forms/page/widgets/datetime.mjs +247 -0
  426. package/esm2020/lib/forms/page/widgets/formula.mjs +106 -0
  427. package/esm2020/lib/forms/page/widgets/geofence.mjs +127 -0
  428. package/esm2020/lib/forms/page/widgets/gps.mjs +192 -0
  429. package/esm2020/lib/forms/page/widgets/group-header.mjs +200 -0
  430. package/esm2020/lib/forms/page/widgets/languages.mjs +129 -0
  431. package/esm2020/lib/forms/page/widgets/link.mjs +107 -0
  432. package/esm2020/lib/forms/page/widgets/payment.mjs +104 -0
  433. package/esm2020/lib/forms/page/widgets/qr-code.mjs +129 -0
  434. package/esm2020/lib/forms/page/widgets/script-condition.mjs +115 -0
  435. package/esm2020/lib/forms/page/widgets/signature.mjs +81 -0
  436. package/esm2020/lib/forms/page/widgets/static-media.mjs +130 -0
  437. package/esm2020/lib/forms/page/widgets/stopwatch.mjs +117 -0
  438. package/esm2020/lib/forms/page/widgets/sub-form.mjs +114 -0
  439. package/esm2020/lib/forms/page/widgets/textbox.mjs +338 -0
  440. package/esm2020/lib/forms/page/widgets/timestamp.mjs +155 -0
  441. package/esm2020/lib/forms/page/widgets/toggle.mjs +115 -0
  442. package/esm2020/lib/forms/page/widgets/unique-id.mjs +75 -0
  443. package/esm2020/lib/forms/page/widgets/verification.mjs +207 -0
  444. package/esm2020/lib/forms/page/widgets/video.mjs +151 -0
  445. package/esm2020/lib/forms/page/widgets/widget-value/apply-geo-fence-widget-value.mjs +74 -0
  446. package/esm2020/lib/forms/page/widgets/widget-value/audio-video-widget-value.mjs +36 -0
  447. package/esm2020/lib/forms/page/widgets/widget-value/child-record-value.mjs +114 -0
  448. package/esm2020/lib/forms/page/widgets/widget-value/choice-list-options.mjs +84 -0
  449. package/esm2020/lib/forms/page/widgets/widget-value/choices-ml.mjs +107 -0
  450. package/esm2020/lib/forms/page/widgets/widget-value/dateRangeValue.mjs +38 -0
  451. package/esm2020/lib/forms/page/widgets/widget-value/deviceProfileParams.mjs +9 -0
  452. package/esm2020/lib/forms/page/widgets/widget-value/deviceProfilesTemp.mjs +72 -0
  453. package/esm2020/lib/forms/page/widgets/widget-value/document-widget-value.mjs +56 -0
  454. package/esm2020/lib/forms/page/widgets/widget-value/geo-fence-location-value.mjs +54 -0
  455. package/esm2020/lib/forms/page/widgets/widget-value/geo-fence-widget-value.mjs +50 -0
  456. package/esm2020/lib/forms/page/widgets/widget-value/gps-widget-value.mjs +58 -0
  457. package/esm2020/lib/forms/page/widgets/widget-value/image-widget-value.mjs +99 -0
  458. package/esm2020/lib/forms/page/widgets/widget-value/language-widget-value.mjs +43 -0
  459. package/esm2020/lib/forms/page/widgets/widget-value/location-object-value.mjs +44 -0
  460. package/esm2020/lib/forms/page/widgets/widget-value/multiple-languages.mjs +106 -0
  461. package/esm2020/lib/forms/page/widgets/widget-value/reference-list-object-value.mjs +72 -0
  462. package/esm2020/lib/forms/page/widgets/widget-value/verification-widget-value.mjs +126 -0
  463. package/esm2020/lib/forms/page/widgets/widget.mjs +429 -0
  464. package/esm2020/lib/ghost-loader/ghost-loader.component.mjs +708 -0
  465. package/esm2020/lib/ghost-loader/ghost-loader.module.mjs +27 -0
  466. package/esm2020/lib/ghost-loader/public-api.mjs +3 -0
  467. package/esm2020/lib/map-dialog/map-dialog.component.mjs +46 -0
  468. package/esm2020/lib/map-dialog/map-dialog.module.mjs +39 -0
  469. package/esm2020/lib/map-dialog/public-api.mjs +6 -0
  470. package/esm2020/lib/reports-container/public-api.mjs +8 -0
  471. package/esm2020/lib/reports-container/report-group/report-group.component.mjs +77 -0
  472. package/esm2020/lib/reports-container/reports-container-models/report-group.mjs +42 -0
  473. package/esm2020/lib/reports-container/reports-container-models/report-property.mjs +30 -0
  474. package/esm2020/lib/reports-container/reports-container-models/reports-container-enums.mjs +16 -0
  475. package/esm2020/lib/reports-container/reports-container-models/reports-container.mjs +29 -0
  476. package/esm2020/lib/reports-container/reports-container.component.mjs +60 -0
  477. package/esm2020/lib/reports-container/reports-container.module.mjs +52 -0
  478. package/esm2020/lib/reports-container/reports-container.service.mjs +29 -0
  479. package/esm2020/lib/scrollbar/index.mjs +3 -0
  480. package/esm2020/lib/scrollbar/public-api.mjs +3 -0
  481. package/esm2020/lib/scrollbar/scrollbar.directive.mjs +351 -0
  482. package/esm2020/lib/scrollbar/scrollbar.module.mjs +21 -0
  483. package/esm2020/lib/scrollbar/scrollbar.types.mjs +15 -0
  484. package/esm2020/lib/sculptor-lib/widgets/audio/audio.component.mjs +115 -0
  485. package/esm2020/lib/sculptor-lib/widgets/barcode/barcode.component.mjs +118 -0
  486. package/esm2020/lib/sculptor-lib/widgets/child-record/child-record.component.mjs +115 -0
  487. package/esm2020/lib/sculptor-lib/widgets/choice-list/choice-list.component.mjs +105 -0
  488. package/esm2020/lib/sculptor-lib/widgets/date-time/date-time.component.mjs +136 -0
  489. package/esm2020/lib/sculptor-lib/widgets/document/document.component.mjs +118 -0
  490. package/esm2020/lib/sculptor-lib/widgets/geofence/geofence.component.mjs +115 -0
  491. package/esm2020/lib/sculptor-lib/widgets/gps/gps.component.mjs +115 -0
  492. package/esm2020/lib/sculptor-lib/widgets/group-header/group-header.component.mjs +109 -0
  493. package/esm2020/lib/sculptor-lib/widgets/image/image.component.mjs +131 -0
  494. package/esm2020/lib/sculptor-lib/widgets/language/language.component.mjs +105 -0
  495. package/esm2020/lib/sculptor-lib/widgets/link/link.component.mjs +115 -0
  496. package/esm2020/lib/sculptor-lib/widgets/qr-code/qr-code.component.mjs +118 -0
  497. package/esm2020/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.mjs +105 -0
  498. package/esm2020/lib/sculptor-lib/widgets/subform/subform.component.mjs +109 -0
  499. package/esm2020/lib/sculptor-lib/widgets/textbox/textbox.component.mjs +177 -0
  500. package/esm2020/lib/sculptor-lib/widgets/timestamp/timestamp.component.mjs +115 -0
  501. package/esm2020/lib/sculptor-lib/widgets/toggle/toggle.component.mjs +112 -0
  502. package/esm2020/lib/sculptor-lib/widgets/video/video.component.mjs +118 -0
  503. package/esm2020/lib/sculptor-lib/widgets/widgets.service.mjs +58 -0
  504. package/esm2020/lib/shared/comfirmation-modal/confirmation-modal.component.mjs +63 -0
  505. package/esm2020/lib/shared/conditional-formatting/conditional-formatting/conditional-formatting.component.mjs +83 -0
  506. package/esm2020/lib/shared/shared.module.mjs +51 -0
  507. package/esm2020/public-api.mjs +138 -0
  508. package/fesm2015/ax-common-ui-lib.mjs +56598 -0
  509. package/fesm2015/ax-common-ui-lib.mjs.map +1 -0
  510. package/fesm2020/ax-common-ui-lib.mjs +52373 -0
  511. package/fesm2020/ax-common-ui-lib.mjs.map +1 -0
  512. package/lib/app-list/app-list-dto.d.ts +15 -0
  513. package/lib/app-list/app-list.component.d.ts +62 -0
  514. package/lib/app-list/my-app-list.service.d.ts +69 -0
  515. package/lib/app-list/organization-list-dto.d.ts +15 -0
  516. package/lib/ax-common-ui-lib.component.d.ts +8 -0
  517. package/lib/ax-common-ui-lib.module.d.ts +24 -0
  518. package/lib/ax-common-ui-lib.service.d.ts +6 -0
  519. package/lib/axo-filters/axo-filters.component.d.ts +86 -0
  520. package/lib/axo-filters/axo-filters.module.d.ts +16 -0
  521. package/lib/axo-filters/axo-filters.service.d.ts +36 -0
  522. package/lib/axo-map/axo-map.component.d.ts +9 -0
  523. package/lib/axo-map/axo-map.d.ts +14 -0
  524. package/lib/axo-map/axo-map.module.d.ts +10 -0
  525. package/lib/axo-map/public-api.d.ts +6 -0
  526. package/lib/axo-search-bar/axo-search-bar.component.d.ts +21 -0
  527. package/lib/axo-search-bar/axo-search-bar.module.d.ts +10 -0
  528. package/lib/axo-search-bar/public.api.d.ts +2 -0
  529. package/lib/axo-snack-bar/axo-snack-bar.component.d.ts +20 -0
  530. package/lib/axo-snack-bar/axo-snack-bar.module.d.ts +9 -0
  531. package/lib/axo-snack-bar/axo-snack-bar.service.d.ts +16 -0
  532. package/lib/axo-snack-bar/public-api.d.ts +2 -0
  533. package/lib/axo-state-manager/axo-state-manager.module.d.ts +7 -0
  534. package/lib/axo-state-manager/axo-state-manager.service.d.ts +15 -0
  535. package/lib/axo-state-manager/public-api.d.ts +2 -0
  536. package/lib/axo-utils/axo-utils.d.ts +72 -0
  537. package/lib/axo-utils/axo-utils.module.d.ts +10 -0
  538. package/lib/axo-utils/constants.d.ts +2 -0
  539. package/lib/axo-utils/data-source-types.d.ts +10 -0
  540. package/lib/axo-utils/field-list-search-pipe.d.ts +7 -0
  541. package/lib/axo-utils/filter-search-pipe.d.ts +7 -0
  542. package/lib/axo-utils/public-api.d.ts +1 -0
  543. package/lib/axo-utils/search-pipe/choice-search.pipe.d.ts +7 -0
  544. package/lib/axo-utils/search-pipe.d.ts +7 -0
  545. package/lib/bread-crumbs/bread-crumbs.component.d.ts +48 -0
  546. package/lib/bread-crumbs/bread-crumbs.module.d.ts +9 -0
  547. package/lib/bread-crumbs/bread-crumbs.service.d.ts +76 -0
  548. package/lib/code-editor/code-editor-modes.d.ts +9 -0
  549. package/lib/code-editor/code-editor-themes.d.ts +6 -0
  550. package/lib/code-editor/code-editor.component.d.ts +20 -0
  551. package/lib/code-editor/code-editor.module.d.ts +10 -0
  552. package/lib/code-editor/icode-editor-options.d.ts +51 -0
  553. package/lib/code-editor/public-api.d.ts +2 -0
  554. package/lib/common-dto/attributes-dto.d.ts +24 -0
  555. package/lib/common-dto/dashboard-dto.d.ts +10 -0
  556. package/lib/common-dto/dataListFilter-dto.d.ts +10 -0
  557. package/lib/common-dto/elements-dto.d.ts +51 -0
  558. package/lib/common-dto/form-dto.d.ts +17 -0
  559. package/lib/common-lib-configuration.service.d.ts +13 -0
  560. package/lib/common-property-panel/properties/properties.service.d.ts +18 -0
  561. package/lib/common-utils/entity-base.d.ts +10 -0
  562. package/lib/common-utils/iFlatten.d.ts +13 -0
  563. package/lib/common-utils/report.d.ts +26 -0
  564. package/lib/common.service.d.ts +50 -0
  565. package/lib/converters/convert-to-new-service.d.ts +6 -0
  566. package/lib/converters/convert-to-old-service.d.ts +26 -0
  567. package/lib/core/auth/auth.service.d.ts +75 -0
  568. package/lib/core/core.module.d.ts +12 -0
  569. package/lib/core/icons/icons.module.d.ts +14 -0
  570. package/lib/core/transloco/transloco.http-loader.d.ts +19 -0
  571. package/lib/core/transloco/transloco.module.d.ts +7 -0
  572. package/lib/core/user/axo-user.d.ts +9 -0
  573. package/lib/core/user/user-data.service.d.ts +25 -0
  574. package/lib/core/user/user.service.d.ts +45 -0
  575. package/lib/core/user/user.types.d.ts +9 -0
  576. package/lib/dashboard-lib/dashboard-builder.service.d.ts +27 -0
  577. package/lib/dashboard-lib/dashboard-control.service.d.ts +31 -0
  578. package/lib/dashboard-lib/dashboard-element/dashboard-element.d.ts +9 -0
  579. package/lib/dashboard-lib/dashboard-element-property/dashboard-property/dashboard-element-property.d.ts +7 -0
  580. package/lib/dashboard-lib/dashboard-filter/dashboard-filter.component.d.ts +37 -0
  581. package/lib/dashboard-lib/dashboard-lib.module.d.ts +26 -0
  582. package/lib/dashboard-lib/dashboard-list.service.d.ts +24 -0
  583. package/lib/dashboard-lib/dashboard.d.ts +14 -0
  584. package/lib/dashboard-lib/send-to-dashboard.service.d.ts +39 -0
  585. package/lib/dashboard-lib/show-dashboards/show-dashboards.component.d.ts +53 -0
  586. package/lib/dashboard-lib/show-dashboards/show-dashboards.service.d.ts +11 -0
  587. package/lib/data-view-lib/data-view/axo-card.d.ts +11 -0
  588. package/lib/data-view-lib/data-view/axo-tag.d.ts +26 -0
  589. package/lib/data-view-lib/data-view/board-column.d.ts +12 -0
  590. package/lib/data-view-lib/data-view/board-view.d.ts +23 -0
  591. package/lib/data-view-lib/data-view/cardConfig.d.ts +11 -0
  592. package/lib/data-view-lib/data-view/conditional-formatting.d.ts +11 -0
  593. package/lib/data-view-lib/data-view/coordinate.d.ts +8 -0
  594. package/lib/data-view-lib/data-view/data-view-enums.d.ts +58 -0
  595. package/lib/data-view-lib/data-view/data-view-filter.d.ts +25 -0
  596. package/lib/data-view-lib/data-view/data-view.d.ts +33 -0
  597. package/lib/data-view-lib/data-view/idata-view.d.ts +7 -0
  598. package/lib/data-view-lib/data-view/image-style.d.ts +8 -0
  599. package/lib/data-view-lib/data-view/info-window.d.ts +10 -0
  600. package/lib/data-view-lib/data-view/location.d.ts +8 -0
  601. package/lib/data-view-lib/data-view/map-view.d.ts +21 -0
  602. package/lib/data-view-lib/data-view/prefix-style.d.ts +12 -0
  603. package/lib/data-view-lib/data-view/tag-style.d.ts +12 -0
  604. package/lib/data-view-lib/data-view/tagConfig.d.ts +34 -0
  605. package/lib/data-view-lib/data-view/task-asset-form-object-dto.d.ts +19 -0
  606. package/lib/data-view-lib/data-view/task-column-value.d.ts +48 -0
  607. package/lib/data-view-lib/data-view/task-view.d.ts +15 -0
  608. package/lib/data-view-lib/data-view/task.d.ts +57 -0
  609. package/lib/data-view-lib/data-view/value-style.d.ts +10 -0
  610. package/lib/data-view-lib/data-view-filters/data-view-filters.component.d.ts +142 -0
  611. package/lib/data-view-lib/data-view-filters/data-view-filters.service.d.ts +28 -0
  612. package/lib/data-view-lib/data-view-header/data-view-header.component.d.ts +85 -0
  613. package/lib/data-view-lib/data-view-lib.module.d.ts +19 -0
  614. package/lib/data-view-lib/data-view.service.d.ts +94 -0
  615. package/lib/data-view-lib/public-api.d.ts +27 -0
  616. package/lib/directive/adjust-font-size.d.ts +13 -0
  617. package/lib/drill-through/drill-through.component.d.ts +53 -0
  618. package/lib/drill-through/drill-through.module.d.ts +10 -0
  619. package/lib/drill-through/drill-through.resolver.d.ts +30 -0
  620. package/lib/drill-through/drill-through.service.d.ts +100 -0
  621. package/lib/enlighten-lib/ax-expression/ax-exp-column.d.ts +17 -0
  622. package/lib/enlighten-lib/ax-expression/ax-exp-date-list.d.ts +16 -0
  623. package/lib/enlighten-lib/ax-expression/ax-exp-date-range-value.d.ts +17 -0
  624. package/lib/enlighten-lib/ax-expression/ax-exp-date-range.d.ts +16 -0
  625. package/lib/enlighten-lib/ax-expression/ax-exp-date-time-list.d.ts +16 -0
  626. package/lib/enlighten-lib/ax-expression/ax-exp-date-time-range-value.d.ts +17 -0
  627. package/lib/enlighten-lib/ax-expression/ax-exp-date-time-range.d.ts +16 -0
  628. package/lib/enlighten-lib/ax-expression/ax-exp-date-time.d.ts +16 -0
  629. package/lib/enlighten-lib/ax-expression/ax-exp-date-value.d.ts +16 -0
  630. package/lib/enlighten-lib/ax-expression/ax-exp-number-list.d.ts +16 -0
  631. package/lib/enlighten-lib/ax-expression/ax-exp-number-range-value.d.ts +17 -0
  632. package/lib/enlighten-lib/ax-expression/ax-exp-number-value.d.ts +16 -0
  633. package/lib/enlighten-lib/ax-expression/ax-exp-text-list.d.ts +16 -0
  634. package/lib/enlighten-lib/ax-expression/ax-exp-text.d.ts +16 -0
  635. package/lib/enlighten-lib/ax-expression/ax-exp-time-list.d.ts +16 -0
  636. package/lib/enlighten-lib/ax-expression/ax-exp-time-range-value.d.ts +17 -0
  637. package/lib/enlighten-lib/ax-expression/ax-exp-time-range.d.ts +17 -0
  638. package/lib/enlighten-lib/ax-expression/ax-exp-time.d.ts +16 -0
  639. package/lib/enlighten-lib/ax-expression/ax-exp-toggle.d.ts +16 -0
  640. package/lib/enlighten-lib/ax-expression/ax-expression-value.d.ts +19 -0
  641. package/lib/enlighten-lib/ax-expression/ax-expression.d.ts +66 -0
  642. package/lib/enlighten-lib/ax-expression/ax-number-range.d.ts +16 -0
  643. package/lib/enlighten-lib/ax-expression/exp-sub-type.d.ts +26 -0
  644. package/lib/enlighten-lib/ax-expression/public-api.d.ts +23 -0
  645. package/lib/enlighten-lib/data-model/attribute.d.ts +60 -0
  646. package/lib/enlighten-lib/data-model/data-model.d.ts +32 -0
  647. package/lib/enlighten-lib/data-model/dependee.d.ts +11 -0
  648. package/lib/enlighten-lib/data-model/dependent.d.ts +11 -0
  649. package/lib/enlighten-lib/data-model/entity.d.ts +31 -0
  650. package/lib/enlighten-lib/data-model-tree/attributes-dragdrop-layout/attributes-dragdrop-layout.component.d.ts +23 -0
  651. package/lib/enlighten-lib/data-model-tree/attributes-selection-layout/attributes-selection-layout.component.d.ts +24 -0
  652. package/lib/enlighten-lib/data-model-tree/categories-tree/categories-tree.component.d.ts +25 -0
  653. package/lib/enlighten-lib/data-model-tree/data-model-tree-enums.d.ts +4 -0
  654. package/lib/enlighten-lib/data-model-tree/data-model-tree.component.d.ts +67 -0
  655. package/lib/enlighten-lib/data-model-tree/data-model-tree.module.d.ts +18 -0
  656. package/lib/enlighten-lib/elements/Property.d.ts +3 -0
  657. package/lib/enlighten-lib/elements/ax-element.d.ts +31 -0
  658. package/lib/enlighten-lib/elements/element-factory.d.ts +13 -0
  659. package/lib/enlighten-lib/enlighten-lib.module.d.ts +53 -0
  660. package/lib/enlighten-lib/enums/bread-crumbs-style.d.ts +4 -0
  661. package/lib/enlighten-lib/enums/operator-text-enum.d.ts +9 -0
  662. package/lib/enlighten-lib/fields/attribute-data.d.ts +55 -0
  663. package/lib/enlighten-lib/fields/entity.d.ts +15 -0
  664. package/lib/enlighten-lib/fields/types/ax-audio.d.ts +4 -0
  665. package/lib/enlighten-lib/fields/types/ax-barcode.d.ts +4 -0
  666. package/lib/enlighten-lib/fields/types/ax-childrecord.d.ts +4 -0
  667. package/lib/enlighten-lib/fields/types/ax-counter.d.ts +4 -0
  668. package/lib/enlighten-lib/fields/types/ax-date.d.ts +4 -0
  669. package/lib/enlighten-lib/fields/types/ax-decimal.d.ts +4 -0
  670. package/lib/enlighten-lib/fields/types/ax-document.d.ts +4 -0
  671. package/lib/enlighten-lib/fields/types/ax-file.d.ts +4 -0
  672. package/lib/enlighten-lib/fields/types/ax-image.d.ts +4 -0
  673. package/lib/enlighten-lib/fields/types/ax-location.d.ts +4 -0
  674. package/lib/enlighten-lib/fields/types/ax-number.d.ts +4 -0
  675. package/lib/enlighten-lib/fields/types/ax-qrcode.d.ts +4 -0
  676. package/lib/enlighten-lib/fields/types/ax-signature.d.ts +4 -0
  677. package/lib/enlighten-lib/fields/types/ax-staticmedia.d.ts +4 -0
  678. package/lib/enlighten-lib/fields/types/ax-text.d.ts +4 -0
  679. package/lib/enlighten-lib/fields/types/ax-time.d.ts +4 -0
  680. package/lib/enlighten-lib/fields/types/ax-uniqueid.d.ts +4 -0
  681. package/lib/enlighten-lib/fields/types/axo-timestamp.d.ts +4 -0
  682. package/lib/enlighten-lib/fields/types/choicelist.d.ts +4 -0
  683. package/lib/enlighten-lib/fields/types/datetime.d.ts +4 -0
  684. package/lib/enlighten-lib/fields/types/hyperlink.d.ts +4 -0
  685. package/lib/enlighten-lib/fields/types/ienlighten-type.d.ts +3 -0
  686. package/lib/enlighten-lib/fields/types/toggle.d.ts +4 -0
  687. package/lib/enlighten-lib/fields/types/video.d.ts +4 -0
  688. package/lib/enlighten-lib/filters/ax-filter.d.ts +38 -0
  689. package/lib/enlighten-lib/filters/ax-operator.d.ts +40 -0
  690. package/lib/enlighten-lib/filters/chart-filter-type.d.ts +5 -0
  691. package/lib/enlighten-lib/filters/condition-type.d.ts +43 -0
  692. package/lib/enlighten-lib/filters/dataList-searchNode.d.ts +27 -0
  693. package/lib/enlighten-lib/filters/dataListFilterExpression.d.ts +20 -0
  694. package/lib/enlighten-lib/filters/dataListFilterOperator.d.ts +29 -0
  695. package/lib/enlighten-lib/filters/dataListSeachQueryTree.d.ts +15 -0
  696. package/lib/enlighten-lib/filters/filter-category.d.ts +43 -0
  697. package/lib/enlighten-lib/filters/general-filter-type.d.ts +10 -0
  698. package/lib/enlighten-lib/filters/gridster-properties.d.ts +17 -0
  699. package/lib/enlighten-lib/filters/iax-filter.d.ts +7 -0
  700. package/lib/enlighten-lib/filters/search-node.d.ts +27 -0
  701. package/lib/enlighten-lib/filters/static-widget.d.ts +2 -0
  702. package/lib/enlighten-lib/property/element-property.d.ts +8 -0
  703. package/lib/enlighten-lib/property/filter-category-property.d.ts +6 -0
  704. package/lib/enlighten-lib/property/filter-property.d.ts +6 -0
  705. package/lib/enlighten-lib/report/chart-filter/chart-filter.component.d.ts +78 -0
  706. package/lib/enlighten-lib/report/element.service.d.ts +61 -0
  707. package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.d.ts +259 -0
  708. package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.d.ts +52 -0
  709. package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.service.d.ts +9 -0
  710. package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.d.ts +177 -0
  711. package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.d.ts +29 -0
  712. package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.service.d.ts +9 -0
  713. package/lib/enlighten-lib/report/graphical-report/chart/border.d.ts +13 -0
  714. package/lib/enlighten-lib/report/graphical-report/chart/chart-factory.d.ts +7 -0
  715. package/lib/enlighten-lib/report/graphical-report/chart/chart-property.d.ts +5 -0
  716. package/lib/enlighten-lib/report/graphical-report/chart/chart-type.d.ts +16 -0
  717. package/lib/enlighten-lib/report/graphical-report/chart/chart.d.ts +41 -0
  718. package/lib/enlighten-lib/report/graphical-report/chart/common-chart.service.d.ts +13 -0
  719. package/lib/enlighten-lib/report/graphical-report/chart/conditional-formatting.d.ts +6 -0
  720. package/lib/enlighten-lib/report/graphical-report/chart/dimension.d.ts +6 -0
  721. package/lib/enlighten-lib/report/graphical-report/chart/font.d.ts +13 -0
  722. package/lib/enlighten-lib/report/graphical-report/chart/fontStyle.d.ts +13 -0
  723. package/lib/enlighten-lib/report/graphical-report/chart/label.d.ts +6 -0
  724. package/lib/enlighten-lib/report/graphical-report/chart/legend.d.ts +13 -0
  725. package/lib/enlighten-lib/report/graphical-report/chart/matrix.d.ts +11 -0
  726. package/lib/enlighten-lib/report/graphical-report/chart/shadow.d.ts +5 -0
  727. package/lib/enlighten-lib/report/graphical-report/chart/style.d.ts +12 -0
  728. package/lib/enlighten-lib/report/graphical-report/chart/text-style.d.ts +17 -0
  729. package/lib/enlighten-lib/report/graphical-report/chart/title.d.ts +11 -0
  730. package/lib/enlighten-lib/report/graphical-report/graphical-report.component.d.ts +130 -0
  731. package/lib/enlighten-lib/report/graphical-report/graphical-report.directive.d.ts +8 -0
  732. package/lib/enlighten-lib/report/graphical-report/ichart-component.d.ts +6 -0
  733. package/lib/enlighten-lib/report/graphical-report/igraphical-report.component.d.ts +21 -0
  734. package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.d.ts +215 -0
  735. package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.d.ts +34 -0
  736. package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.service.d.ts +9 -0
  737. package/lib/enlighten-lib/report/graphical-report/page/page.d.ts +25 -0
  738. package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.d.ts +220 -0
  739. package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.d.ts +38 -0
  740. package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.service.d.ts +9 -0
  741. package/lib/enlighten-lib/report/graphical-report/text/text-chart.d.ts +19 -0
  742. package/lib/enlighten-lib/report/graphical-report/text/text.component.d.ts +72 -0
  743. package/lib/enlighten-lib/report/graphical-report/text/text.service.d.ts +9 -0
  744. package/lib/enlighten-lib/report/iproperty.component.d.ts +14 -0
  745. package/lib/enlighten-lib/report/ireport.d.ts +14 -0
  746. package/lib/enlighten-lib/report/report-builder-master.service.d.ts +42 -0
  747. package/lib/enlighten-lib/report/report-filter/report-filter.component.d.ts +117 -0
  748. package/lib/enlighten-lib/report/report-filter/report-filter.module.d.ts +19 -0
  749. package/lib/enlighten-lib/report/report-filter/report-filter.service.d.ts +102 -0
  750. package/lib/enlighten-lib/report/tabular-report/aggregate.d.ts +8 -0
  751. package/lib/enlighten-lib/report/tabular-report/axo-percentage.pipe.d.ts +7 -0
  752. package/lib/enlighten-lib/report/tabular-report/column-style.d.ts +5 -0
  753. package/lib/enlighten-lib/report/tabular-report/itabular-report.component.d.ts +16 -0
  754. package/lib/enlighten-lib/report/tabular-report/orderby-type.d.ts +5 -0
  755. package/lib/enlighten-lib/report/tabular-report/row-style.d.ts +5 -0
  756. package/lib/enlighten-lib/report/tabular-report/table-style.d.ts +21 -0
  757. package/lib/enlighten-lib/report/tabular-report/tabular/column-group-view/column-group-view.component.d.ts +124 -0
  758. package/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.d.ts +242 -0
  759. package/lib/enlighten-lib/report/tabular-report/tabular/resize-column-directive.d.ts +21 -0
  760. package/lib/enlighten-lib/report/tabular-report/tabular/row-group-view/row-group-view.component.d.ts +190 -0
  761. package/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.d.ts +177 -0
  762. package/lib/enlighten-lib/report/tabular-report/tabular-report.component.d.ts +53 -0
  763. package/lib/enlighten-lib/report/tabular-report/tabular-report.d.ts +102 -0
  764. package/lib/enlighten-lib/report/tabular-report/tabular-report.service.d.ts +173 -0
  765. package/lib/enlighten-lib/report/tabular-report/tabular.d.ts +92 -0
  766. package/lib/enlighten-lib/report/tabular-report/value-formatting.d.ts +7 -0
  767. package/lib/enlighten-lib/report-control.service.d.ts +15 -0
  768. package/lib/enlighten-lib/utils/utils.d.ts +16 -0
  769. package/lib/field-list-lib/fields-list.service.d.ts +71 -0
  770. package/lib/filters/calender-filter/calender-filter.component.d.ts +70 -0
  771. package/lib/filters/category-filter/category-filter.component.d.ts +65 -0
  772. package/lib/filters/category-filter/category-filter.service.d.ts +16 -0
  773. package/lib/filters/category-filter/category.service.d.ts +23 -0
  774. package/lib/filters/choice-list-filter/choice-list-filter.component.d.ts +64 -0
  775. package/lib/filters/choice-list-filter/choice-list-filter.service.d.ts +36 -0
  776. package/lib/filters/common-filter/common-filter.component.d.ts +135 -0
  777. package/lib/filters/common-filter/common-filter.service.d.ts +42 -0
  778. package/lib/filters/custom-scroll-directives.d.ts +14 -0
  779. package/lib/filters/date-time-filter/date-time-filter.component.d.ts +83 -0
  780. package/lib/filters/filter-footer/filter-footer.component.d.ts +12 -0
  781. package/lib/filters/filters.component.d.ts +139 -0
  782. package/lib/filters/filters.module.d.ts +43 -0
  783. package/lib/filters/filters.service.d.ts +83 -0
  784. package/lib/filters/meta-column-filter-builder/meta-column-filter-builder.service.d.ts +70 -0
  785. package/lib/filters/metaColumnTypes.d.ts +18 -0
  786. package/lib/filters/multi-select-filter/multi-select-filter.component.d.ts +68 -0
  787. package/lib/filters/multi-select-filter/multi-select-filter.service.d.ts +77 -0
  788. package/lib/filters/number-filter/number-filter.component.d.ts +70 -0
  789. package/lib/filters/public-api.d.ts +14 -0
  790. package/lib/filters/reference-list-filter/reference-list-filter.component.d.ts +59 -0
  791. package/lib/filters/reference-list-filter/reference-list-filter.service.d.ts +62 -0
  792. package/lib/filters/single-select-filter/single-select-filter.component.d.ts +59 -0
  793. package/lib/filters/time-filter/time-filter.component.d.ts +62 -0
  794. package/lib/filters/user-filter/user-filter.component.d.ts +61 -0
  795. package/lib/filters/user-filter/user-filter.service.d.ts +26 -0
  796. package/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.component.d.ts +87 -0
  797. package/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.service.d.ts +33 -0
  798. package/lib/form-object/form-object-list/form-object-list-header/form-object-list-header.component.d.ts +13 -0
  799. package/lib/form-object/form-object-list/form-object-list-header/widget-header-type-handler.d.ts +3 -0
  800. package/lib/form-object/form-object-list/form-object-list-header/widgets/text-box-header/text-box-header.component.d.ts +10 -0
  801. package/lib/form-object/form-object-list/form-object-list-header/widgets-header.directive.d.ts +8 -0
  802. package/lib/form-object/form-object-list/form-object-list.component.d.ts +200 -0
  803. package/lib/form-object/form-object-list/form-object-list.d.ts +42 -0
  804. package/lib/form-object/form-object-list/form-object-list.module.d.ts +59 -0
  805. package/lib/form-object/form-object-list/form-object-list.service.d.ts +69 -0
  806. package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value-handler.d.ts +3 -0
  807. package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value.directive.d.ts +8 -0
  808. package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-widget-value.component.d.ts +22 -0
  809. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-apply-geo-fence-value/formobject-apply-geo-fence-value.component.d.ts +10 -0
  810. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-audio-value/formobject-audio-value.component.d.ts +12 -0
  811. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-auto-number-value/formobject-auto-number-value.component.d.ts +10 -0
  812. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-bar-code-value/formobject-bar-code-value.component.d.ts +27 -0
  813. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-child-records-value/formobject-child-records-value.component.d.ts +13 -0
  814. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-choicelist-value/formobject-choicelist-value.component.d.ts +20 -0
  815. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-counter-value/formobject-counter-value.component.d.ts +10 -0
  816. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-date-time-value/formobject-date-time-value.component.d.ts +13 -0
  817. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-document-value/formobject-document-value.component.d.ts +15 -0
  818. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-formula-value/formobject-formula-value.component.d.ts +11 -0
  819. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-geo-fence-value/formobject-geo-fence-value.component.d.ts +21 -0
  820. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-gps-value/formobject-gps-value.component.d.ts +23 -0
  821. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-group-header-value/formobject-group-header-value.component.d.ts +10 -0
  822. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-image-value/formobject-image-value.component.d.ts +34 -0
  823. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-languages-value/formobject-languages-value.component.d.ts +12 -0
  824. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-payment-value/formobject-payment-value.component.d.ts +10 -0
  825. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-qr-code-value/formobject-qr-code-value.component.d.ts +27 -0
  826. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-signature-value/formobject-signature-value.component.d.ts +17 -0
  827. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-static-media-value/formobject-static-media-value.component.d.ts +15 -0
  828. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-stop-watch-value/formobject-stop-watch-value.component.d.ts +10 -0
  829. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-sub-form-value/formobject-sub-form-value.component.d.ts +10 -0
  830. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-textbox-value/formobject-textbox-value.component.d.ts +12 -0
  831. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-time-stamp-value/formobject-time-stamp-value.component.d.ts +16 -0
  832. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-toggle-value/formobject-toggle-value.component.d.ts +11 -0
  833. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-unique-id-value/formobject-unique-id-value.component.d.ts +10 -0
  834. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-verification-value/formobject-verification-value.component.d.ts +14 -0
  835. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-video-value/formobject-video-value.component.d.ts +16 -0
  836. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-web-link-value/formobject-web-link-value.component.d.ts +10 -0
  837. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-widget-mat-dialog/formobject-widget-mat-dialog.component.d.ts +13 -0
  838. package/lib/form-object/form-object-view/data-detail-view-dto.d.ts +16 -0
  839. package/lib/form-object/form-object-view/dynamic-view/dynamic-view.component.d.ts +32 -0
  840. package/lib/form-object/form-object-view/dynamic-view/dynamic-view.directive.d.ts +8 -0
  841. package/lib/form-object/form-object-view/form-object-view.component.d.ts +45 -0
  842. package/lib/form-object/form-object-view/form-object-view.module.d.ts +70 -0
  843. package/lib/form-object/form-object-view/form-object-view.service.d.ts +49 -0
  844. package/lib/form-object/form-object-view/form-object-widgets/apply-geo-fence-widget-view/apply-geo-fence-widget-view.component.d.ts +10 -0
  845. package/lib/form-object/form-object-view/form-object-widgets/audio-widget-view/audio-widget-view.component.d.ts +12 -0
  846. package/lib/form-object/form-object-view/form-object-widgets/auto-number-widget-view/auto-number-widget-view.component.d.ts +10 -0
  847. package/lib/form-object/form-object-view/form-object-widgets/bar-code-widget-view/bar-code-widget-view.component.d.ts +31 -0
  848. package/lib/form-object/form-object-view/form-object-widgets/child-records-widget-view/child-records-widget-view.component.d.ts +22 -0
  849. package/lib/form-object/form-object-view/form-object-widgets/choice-list-widget-view/choice-list-widget-view.component.d.ts +25 -0
  850. package/lib/form-object/form-object-view/form-object-widgets/counter-widget-view/counter-widget-view.component.d.ts +10 -0
  851. package/lib/form-object/form-object-view/form-object-widgets/date-time-widget-view/date-time-widget-view.component.d.ts +12 -0
  852. package/lib/form-object/form-object-view/form-object-widgets/document-widget-view/document-widget-view.component.d.ts +15 -0
  853. package/lib/form-object/form-object-view/form-object-widgets/form-object-widget-type-handler.d.ts +3 -0
  854. package/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.component.d.ts +25 -0
  855. package/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.directive.d.ts +8 -0
  856. package/lib/form-object/form-object-view/form-object-widgets/formula-widget-view/formula-widget-view.component.d.ts +10 -0
  857. package/lib/form-object/form-object-view/form-object-widgets/geo-fence-widget-view/geo-fence-widget-view.component.d.ts +14 -0
  858. package/lib/form-object/form-object-view/form-object-widgets/gps-widget-view/gps-widget-view.component.d.ts +37 -0
  859. package/lib/form-object/form-object-view/form-object-widgets/group-header-widget-view/group-header-widget-view.component.d.ts +10 -0
  860. package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-annotation-data-dto.d.ts +91 -0
  861. package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.d.ts +32 -0
  862. package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-lightbox-view/image-widget-lightbox-view.component.d.ts +71 -0
  863. package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-view.component.d.ts +40 -0
  864. package/lib/form-object/form-object-view/form-object-widgets/language-widget-view/language-widget-view.component.d.ts +12 -0
  865. package/lib/form-object/form-object-view/form-object-widgets/payment-widget-view/payment-widget-view.component.d.ts +10 -0
  866. package/lib/form-object/form-object-view/form-object-widgets/qr-code-widget-view/qr-code-widget-view.component.d.ts +26 -0
  867. package/lib/form-object/form-object-view/form-object-widgets/signature-widget-view/signature-widget-view.component.d.ts +13 -0
  868. package/lib/form-object/form-object-view/form-object-widgets/static-media-widget-view/static-media-widget-view.component.d.ts +13 -0
  869. package/lib/form-object/form-object-view/form-object-widgets/stop-watch-widget-view/stop-watch-widget-view.component.d.ts +10 -0
  870. package/lib/form-object/form-object-view/form-object-widgets/sub-form-widget-view/sub-form-widget-view.component.d.ts +16 -0
  871. package/lib/form-object/form-object-view/form-object-widgets/text-box-widget-view/text-box-widget-view.component.d.ts +14 -0
  872. package/lib/form-object/form-object-view/form-object-widgets/time-stamp-widget-view/time-stamp-widget-view.component.d.ts +15 -0
  873. package/lib/form-object/form-object-view/form-object-widgets/toggle-widget-view/toggle-widget-view.component.d.ts +11 -0
  874. package/lib/form-object/form-object-view/form-object-widgets/unique-id-widget-view/unique-id-widget-view.component.d.ts +10 -0
  875. package/lib/form-object/form-object-view/form-object-widgets/verification-widget-view/verification-widget-view.component.d.ts +14 -0
  876. package/lib/form-object/form-object-view/form-object-widgets/video-widget-view/video-widget-view.component.d.ts +16 -0
  877. package/lib/form-object/form-object-view/form-object-widgets/web-link-widget-view/web-link-widget-view.component.d.ts +10 -0
  878. package/lib/form-object/form-object-view/meta-section/meta-section.component.d.ts +31 -0
  879. package/lib/form-object/form-object-view/section/section.component.d.ts +16 -0
  880. package/lib/form-object/form-object-view/section-field/section-field.component.d.ts +13 -0
  881. package/lib/form-object/form-object-view/section-view/section-view.component.d.ts +16 -0
  882. package/lib/form-object/public-api.d.ts +2 -0
  883. package/lib/form-permission.service.d.ts +51 -0
  884. package/lib/forms/ax-form.d.ts +47 -0
  885. package/lib/forms/iform.d.ts +18 -0
  886. package/lib/forms/page/common/axo-response-status.d.ts +4 -0
  887. package/lib/forms/page/common/constants.d.ts +371 -0
  888. package/lib/forms/page/common/detail-view-enums.d.ts +5 -0
  889. package/lib/forms/page/common/flatten-status-enum.d.ts +7 -0
  890. package/lib/forms/page/common/form.constant.d.ts +85 -0
  891. package/lib/forms/page/common/property-panel-field.d.ts +21 -0
  892. package/lib/forms/page/common/widget-enums.d.ts +236 -0
  893. package/lib/forms/page/common/widget-value-handler.d.ts +4 -0
  894. package/lib/forms/page/data-detail-view/ax-section.d.ts +22 -0
  895. package/lib/forms/page/data-detail-view/collection-view.d.ts +11 -0
  896. package/lib/forms/page/data-detail-view/data-details.d.ts +17 -0
  897. package/lib/forms/page/data-detail-view/section-field.d.ts +13 -0
  898. package/lib/forms/page/data-detail-view/section.d.ts +13 -0
  899. package/lib/forms/page/data-list/data-list-column.d.ts +24 -0
  900. package/lib/forms/page/data-list/data-list.d.ts +24 -0
  901. package/lib/forms/page/form-object.d.ts +6 -0
  902. package/lib/forms/page/form-page.d.ts +19 -0
  903. package/lib/forms/page/value-converters/displayMode-to-bool.d.ts +5 -0
  904. package/lib/forms/page/value-converters/form-type-converter.d.ts +5 -0
  905. package/lib/forms/page/value-converters/geo-fence-value-converter.d.ts +5 -0
  906. package/lib/forms/page/value-converters/image-annotation-value-converter.d.ts +5 -0
  907. package/lib/forms/page/value-converters/language-source-value-converter.d.ts +6 -0
  908. package/lib/forms/page/value-converters/list-view-title-converter.d.ts +5 -0
  909. package/lib/forms/page/value-converters/parse-float-converter.d.ts +5 -0
  910. package/lib/forms/page/value-converters/parse-int-converter.d.ts +5 -0
  911. package/lib/forms/page/value-converters/parse-string-converter.d.ts +5 -0
  912. package/lib/forms/page/value-converters/publicUrls-string-to-array.d.ts +5 -0
  913. package/lib/forms/page/value-converters/record-limit-type-converter.d.ts +5 -0
  914. package/lib/forms/page/value-converters/restriction-mode-converter.d.ts +5 -0
  915. package/lib/forms/page/value-converters/string-to-bool-converter.d.ts +5 -0
  916. package/lib/forms/page/value-converters/string-to-bool-value-converter.d.ts +5 -0
  917. package/lib/forms/page/value-converters/string-to-date-time-converter.d.ts +5 -0
  918. package/lib/forms/page/value-converters/string-to-number -converter.d.ts +5 -0
  919. package/lib/forms/page/value-converters/textBox-mask-converter.d.ts +5 -0
  920. package/lib/forms/page/value-converters/validate-converter.d.ts +5 -0
  921. package/lib/forms/page/value-converters/value-without-mask-converter.d.ts +5 -0
  922. package/lib/forms/page/value-converters/widget-concrete-class-converter.d.ts +6 -0
  923. package/lib/forms/page/value-converters/widget-deserializer.d.ts +3 -0
  924. package/lib/forms/page/widgets/apply-geofences.d.ts +25 -0
  925. package/lib/forms/page/widgets/auto-number.d.ts +28 -0
  926. package/lib/forms/page/widgets/ax-audio.d.ts +43 -0
  927. package/lib/forms/page/widgets/ax-document.d.ts +44 -0
  928. package/lib/forms/page/widgets/ax-image.d.ts +46 -0
  929. package/lib/forms/page/widgets/bar-code.d.ts +52 -0
  930. package/lib/forms/page/widgets/child-record.d.ts +50 -0
  931. package/lib/forms/page/widgets/choicelist.d.ts +70 -0
  932. package/lib/forms/page/widgets/counter.d.ts +36 -0
  933. package/lib/forms/page/widgets/datetime.d.ts +53 -0
  934. package/lib/forms/page/widgets/formula.d.ts +38 -0
  935. package/lib/forms/page/widgets/geofence.d.ts +41 -0
  936. package/lib/forms/page/widgets/gps.d.ts +49 -0
  937. package/lib/forms/page/widgets/group-header.d.ts +51 -0
  938. package/lib/forms/page/widgets/languages.d.ts +41 -0
  939. package/lib/forms/page/widgets/link.d.ts +36 -0
  940. package/lib/forms/page/widgets/payment.d.ts +37 -0
  941. package/lib/forms/page/widgets/qr-code.d.ts +39 -0
  942. package/lib/forms/page/widgets/script-condition.d.ts +33 -0
  943. package/lib/forms/page/widgets/signature.d.ts +34 -0
  944. package/lib/forms/page/widgets/static-media.d.ts +40 -0
  945. package/lib/forms/page/widgets/stopwatch.d.ts +37 -0
  946. package/lib/forms/page/widgets/sub-form.d.ts +39 -0
  947. package/lib/forms/page/widgets/textbox.d.ts +63 -0
  948. package/lib/forms/page/widgets/timestamp.d.ts +42 -0
  949. package/lib/forms/page/widgets/toggle.d.ts +36 -0
  950. package/lib/forms/page/widgets/unique-id.d.ts +33 -0
  951. package/lib/forms/page/widgets/verification.d.ts +55 -0
  952. package/lib/forms/page/widgets/video.d.ts +44 -0
  953. package/lib/forms/page/widgets/widget-value/apply-geo-fence-widget-value.d.ts +18 -0
  954. package/lib/forms/page/widgets/widget-value/audio-video-widget-value.d.ts +11 -0
  955. package/lib/forms/page/widgets/widget-value/child-record-value.d.ts +26 -0
  956. package/lib/forms/page/widgets/widget-value/choice-list-options.d.ts +27 -0
  957. package/lib/forms/page/widgets/widget-value/choices-ml.d.ts +22 -0
  958. package/lib/forms/page/widgets/widget-value/dateRangeValue.d.ts +12 -0
  959. package/lib/forms/page/widgets/widget-value/deviceProfileParams.d.ts +4 -0
  960. package/lib/forms/page/widgets/widget-value/deviceProfilesTemp.d.ts +19 -0
  961. package/lib/forms/page/widgets/widget-value/document-widget-value.d.ts +15 -0
  962. package/lib/forms/page/widgets/widget-value/geo-fence-location-value.d.ts +14 -0
  963. package/lib/forms/page/widgets/widget-value/geo-fence-widget-value.d.ts +14 -0
  964. package/lib/forms/page/widgets/widget-value/gps-widget-value.d.ts +21 -0
  965. package/lib/forms/page/widgets/widget-value/image-widget-value.d.ts +19 -0
  966. package/lib/forms/page/widgets/widget-value/language-widget-value.d.ts +12 -0
  967. package/lib/forms/page/widgets/widget-value/location-object-value.d.ts +12 -0
  968. package/lib/forms/page/widgets/widget-value/multiple-languages.d.ts +21 -0
  969. package/lib/forms/page/widgets/widget-value/reference-list-object-value.d.ts +17 -0
  970. package/lib/forms/page/widgets/widget-value/verification-widget-value.d.ts +31 -0
  971. package/lib/forms/page/widgets/widget.d.ts +75 -0
  972. package/lib/ghost-loader/ghost-loader.component.d.ts +41 -0
  973. package/lib/ghost-loader/ghost-loader.module.d.ts +8 -0
  974. package/lib/ghost-loader/public-api.d.ts +2 -0
  975. package/lib/map-dialog/map-dialog.component.d.ts +16 -0
  976. package/lib/map-dialog/map-dialog.module.d.ts +11 -0
  977. package/lib/map-dialog/public-api.d.ts +5 -0
  978. package/lib/reports-container/public-api.d.ts +7 -0
  979. package/lib/reports-container/report-group/report-group.component.d.ts +17 -0
  980. package/lib/reports-container/reports-container-models/report-group.d.ts +20 -0
  981. package/lib/reports-container/reports-container-models/report-property.d.ts +19 -0
  982. package/lib/reports-container/reports-container-models/reports-container-enums.d.ts +13 -0
  983. package/lib/reports-container/reports-container-models/reports-container.d.ts +16 -0
  984. package/lib/reports-container/reports-container.component.d.ts +16 -0
  985. package/lib/reports-container/reports-container.module.d.ts +13 -0
  986. package/lib/reports-container/reports-container.service.d.ts +18 -0
  987. package/lib/scrollbar/index.d.ts +2 -0
  988. package/lib/scrollbar/public-api.d.ts +2 -0
  989. package/lib/scrollbar/scrollbar.directive.d.ts +153 -0
  990. package/lib/scrollbar/scrollbar.module.d.ts +7 -0
  991. package/lib/scrollbar/scrollbar.types.d.ts +12 -0
  992. package/lib/sculptor-lib/widgets/audio/audio.component.d.ts +32 -0
  993. package/lib/sculptor-lib/widgets/barcode/barcode.component.d.ts +32 -0
  994. package/lib/sculptor-lib/widgets/child-record/child-record.component.d.ts +32 -0
  995. package/lib/sculptor-lib/widgets/choice-list/choice-list.component.d.ts +32 -0
  996. package/lib/sculptor-lib/widgets/date-time/date-time.component.d.ts +32 -0
  997. package/lib/sculptor-lib/widgets/document/document.component.d.ts +32 -0
  998. package/lib/sculptor-lib/widgets/geofence/geofence.component.d.ts +32 -0
  999. package/lib/sculptor-lib/widgets/gps/gps.component.d.ts +32 -0
  1000. package/lib/sculptor-lib/widgets/group-header/group-header.component.d.ts +32 -0
  1001. package/lib/sculptor-lib/widgets/image/image.component.d.ts +32 -0
  1002. package/lib/sculptor-lib/widgets/language/language.component.d.ts +32 -0
  1003. package/lib/sculptor-lib/widgets/link/link.component.d.ts +32 -0
  1004. package/lib/sculptor-lib/widgets/qr-code/qr-code.component.d.ts +32 -0
  1005. package/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.d.ts +32 -0
  1006. package/lib/sculptor-lib/widgets/subform/subform.component.d.ts +32 -0
  1007. package/lib/sculptor-lib/widgets/textbox/textbox.component.d.ts +32 -0
  1008. package/lib/sculptor-lib/widgets/timestamp/timestamp.component.d.ts +32 -0
  1009. package/lib/sculptor-lib/widgets/toggle/toggle.component.d.ts +32 -0
  1010. package/lib/sculptor-lib/widgets/video/video.component.d.ts +32 -0
  1011. package/lib/sculptor-lib/widgets/widgets.service.d.ts +30 -0
  1012. package/lib/shared/comfirmation-modal/confirmation-modal.component.d.ts +18 -0
  1013. package/lib/shared/conditional-formatting/conditional-formatting/conditional-formatting.component.d.ts +29 -0
  1014. package/lib/shared/shared.module.d.ts +13 -0
  1015. package/package.json +64 -0
  1016. package/public-api.d.ts +130 -0
@@ -0,0 +1,960 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { EventEmitter, Injectable } from '@angular/core';
3
+ import { ElementProperty } from '../../property/element-property';
4
+ import { TabularReport } from './tabular-report';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ export class TabularReportService {
8
+ constructor(_httpClient) {
9
+ this._httpClient = _httpClient;
10
+ this.dataRender = new EventEmitter();
11
+ this._tableClickEvent = new EventEmitter();
12
+ this.cloneIntegerCount = Array();
13
+ }
14
+ /**to count data count in a series
15
+ *
16
+ * @param TabularReport
17
+ *
18
+ */
19
+ groupData(tabularReport) {
20
+ tabularReport.matrix.attributes.forEach((attribute, index) => {
21
+ // when row span is true and index is 0
22
+ attribute.groupData = new Array();
23
+ if (index === 0 || attribute.colSpan) {
24
+ this.getFirstRowGrouping(attribute);
25
+ }
26
+ else {
27
+ // when index is greater than 0
28
+ let startIndex = 0;
29
+ const cloneSeries = [];
30
+ let gdIndex = 0;
31
+ while (startIndex <= (tabularReport.matrix.attributes[index - 1].groupData.length - 1)) {
32
+ const dataSeries = [];
33
+ gdIndex = tabularReport.matrix.attributes[index - 1].groupData[startIndex];
34
+ const subSeries = attribute.series.slice(startIndex, startIndex + gdIndex);
35
+ subSeries.forEach((data) => {
36
+ attribute.groupData.push(this.getRowSpanCount(subSeries, data));
37
+ // to replace repeated data
38
+ if (dataSeries.includes(data)) {
39
+ dataSeries.push('repeated');
40
+ cloneSeries.push('repeated');
41
+ }
42
+ else {
43
+ dataSeries.push(data);
44
+ cloneSeries.push(data);
45
+ }
46
+ });
47
+ attribute.cloneGroupData = attribute.groupData.slice(0);
48
+ startIndex = startIndex + gdIndex;
49
+ }
50
+ attribute.cloneSeries = cloneSeries;
51
+ }
52
+ });
53
+ if (tabularReport.subTotal && tabularReport.colGrouping.length === 0) {
54
+ tabularReport = tabularReport.subTotalToggle(tabularReport);
55
+ }
56
+ return tabularReport;
57
+ }
58
+ /** to count data count in a series
59
+ *
60
+ * @param string
61
+ * @param any
62
+ *
63
+ */
64
+ getRowSpanCount(series, key) {
65
+ return series.filter(str => str === key).length;
66
+ }
67
+ /** to count first row grouping data count
68
+ *
69
+ * @param AttributeData
70
+ *
71
+ */
72
+ getFirstRowGrouping(attribute) {
73
+ const series = [];
74
+ const uniqueSeries = [];
75
+ attribute.series.forEach((element) => {
76
+ if (series.includes(element)) {
77
+ series.push('repeated');
78
+ }
79
+ else {
80
+ series.push(element);
81
+ uniqueSeries.push(element);
82
+ }
83
+ });
84
+ attribute.cloneSeries = series;
85
+ attribute.uniqueSeries = uniqueSeries;
86
+ attribute.series.forEach((data) => {
87
+ attribute.groupData.push(this.getRowSpanCount(attribute.series, data));
88
+ });
89
+ attribute.cloneGroupData = attribute.groupData.slice(0);
90
+ return attribute;
91
+ }
92
+ sendEmail(emailDto) {
93
+ return new Promise((resolve, reject) => {
94
+ this._httpClient.post('reports/export', emailDto).subscribe((response) => {
95
+ resolve(response);
96
+ }, reject);
97
+ });
98
+ }
99
+ /**to count data count and set clone data while column grouping is applied
100
+ *
101
+ * @param TabularReport
102
+ *
103
+ */
104
+ columnData(tabularReport) {
105
+ tabularReport = this.rowSpan(tabularReport);
106
+ tabularReport.colGrouping.forEach((attr) => {
107
+ if (!attr.uniqueSeries) {
108
+ if (!attr.uniqueSeries) {
109
+ const series = [];
110
+ const uniqueSeries = [];
111
+ attr.series.forEach((_element) => {
112
+ if (series.includes(_element)) {
113
+ series.push('repeated');
114
+ }
115
+ else {
116
+ series.push(_element);
117
+ uniqueSeries.push(_element);
118
+ }
119
+ });
120
+ uniqueSeries.sort();
121
+ attr.uniqueSeries = uniqueSeries;
122
+ }
123
+ }
124
+ });
125
+ tabularReport.matrix.attributes.forEach((attr) => {
126
+ if (!attr.uniqueSeries) {
127
+ if (!attr.uniqueSeries) {
128
+ const series = [];
129
+ const uniqueSeries = [];
130
+ attr.series.forEach((seriesData) => {
131
+ if (series.includes(seriesData)) {
132
+ series.push('repeated');
133
+ }
134
+ else {
135
+ series.push(seriesData);
136
+ uniqueSeries.push(seriesData);
137
+ }
138
+ });
139
+ uniqueSeries.sort();
140
+ attr.uniqueSeries = uniqueSeries;
141
+ }
142
+ }
143
+ });
144
+ return tabularReport;
145
+ }
146
+ /**to count rows group data when column grouping is applied
147
+ *
148
+ * @param TabularReport
149
+ *
150
+ */
151
+ rowSpan(tabularReport) {
152
+ tabularReport.integerArray = [];
153
+ tabularReport.integerIndex = [];
154
+ tabularReport = this.getIntegerArray(tabularReport);
155
+ if (tabularReport.integerArray.length === 0) {
156
+ tabularReport.rowCount = true;
157
+ }
158
+ tabularReport.matrix.attributes.forEach((attribute, index) => {
159
+ if (index === 0 && attribute.rowSpan) {
160
+ const series = [];
161
+ const uniqueSeries = [];
162
+ attribute.series.forEach((data) => {
163
+ if (series.includes(data)) {
164
+ series.push('repeated');
165
+ }
166
+ else {
167
+ series.push(data);
168
+ uniqueSeries.push(data);
169
+ }
170
+ });
171
+ attribute.cloneSeries = series;
172
+ attribute.uniqueSeries = uniqueSeries;
173
+ attribute.series.forEach((data) => {
174
+ attribute.groupData.push(this.getRowSpanCount(attribute.series, data));
175
+ });
176
+ attribute.cloneGroupData = attribute.groupData;
177
+ }
178
+ if (index === 1 && attribute.rowSpan) {
179
+ attribute = this.getCloneData(tabularReport, index, attribute);
180
+ }
181
+ });
182
+ return tabularReport;
183
+ }
184
+ /**to set headers section of column grouping
185
+ *
186
+ * @param TabularReport
187
+ * @param AttributeData
188
+ *
189
+ */
190
+ newData(tabularReport, attr) {
191
+ const count = (tabularReport.colGrouping.indexOf(attr));
192
+ tabularReport.secondColData = new Map();
193
+ tabularReport.secondColSeries = new Array();
194
+ tabularReport.firstColSeries = new Array();
195
+ const _index = tabularReport.rowGrouping.length + (count);
196
+ if (count === 1) {
197
+ tabularReport = this.getSecondColData(tabularReport, _index);
198
+ }
199
+ if (tabularReport.colGrouping.length === 1) {
200
+ tabularReport.colGrouping[0].uniqueSeries.forEach((series) => {
201
+ tabularReport.colData.set(series, tabularReport.integerArray.length);
202
+ });
203
+ let m = 0;
204
+ tabularReport.cloneDataCount = [];
205
+ tabularReport.cloneIntegerArray = [];
206
+ while (m < (tabularReport.colGrouping[0].uniqueSeries.length)) {
207
+ tabularReport.integerArray.forEach((element) => {
208
+ tabularReport.cloneIntegerArray.push(element);
209
+ });
210
+ tabularReport.cloneDataCount.push(m);
211
+ m++;
212
+ }
213
+ }
214
+ if (tabularReport.colGrouping.length > 1 && count === 1) {
215
+ let _count = 0;
216
+ tabularReport.colGrouping[1].uniqueSeries.forEach((series) => {
217
+ tabularReport.colData.set(series, tabularReport.integerArray.length);
218
+ });
219
+ tabularReport.colGrouping[0].uniqueSeries.forEach((series) => {
220
+ tabularReport.colData.set(series, tabularReport.integerArray.length * (tabularReport.secondColData.get(series).length));
221
+ _count += (tabularReport.secondColData.get(series).length);
222
+ });
223
+ tabularReport.cloneDataCount = [];
224
+ let cloneDataIndex = 0;
225
+ const data123 = [];
226
+ while (cloneDataIndex < _count) {
227
+ tabularReport.cloneDataCount.push(cloneDataIndex);
228
+ tabularReport.integerIndex.forEach((element) => {
229
+ data123.push(element);
230
+ });
231
+ cloneDataIndex++;
232
+ }
233
+ }
234
+ return tabularReport;
235
+ }
236
+ /**to get data render value when single column grouping is applied
237
+ *
238
+ * @param TabularReport
239
+ *
240
+ */
241
+ dataFactory(tabularReport) {
242
+ const rCount = tabularReport.rowGrouping.length - 1;
243
+ const cCount = tabularReport.colGrouping.length;
244
+ let count = 0;
245
+ tabularReport.countsData = new Map();
246
+ let i = 0;
247
+ tabularReport.matrix.attributes[rCount + cCount].groupData = [];
248
+ const sideTotal1 = Array(tabularReport.integerArray.length).fill(0);
249
+ if (tabularReport.colGrouping.length === 1) {
250
+ while (i < tabularReport.matrix.attributes[0].series.length) {
251
+ const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
252
+ const subSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
253
+ subSeries.forEach((_data) => {
254
+ tabularReport.matrix.attributes[rCount + cCount].groupData.push(this.getRowSpanCount(subSeries, _data));
255
+ });
256
+ i = i + groupData;
257
+ }
258
+ i = 0;
259
+ const __Data = new Map();
260
+ const __Data1 = new Map();
261
+ let firstColumnIndex = 0;
262
+ const grandTotal = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
263
+ const countsGrandTotal = Array(tabularReport.matrix.attributes[rCount + cCount].uniqueSeries.length).fill(0);
264
+ let countTotal = 0;
265
+ while (i < tabularReport.matrix.attributes[0].series.length) {
266
+ let dataSeries = [];
267
+ let countDataSeries = [];
268
+ const countArray = Array(tabularReport.matrix.attributes[rCount + cCount].uniqueSeries.length).fill(0);
269
+ const iarr = [];
270
+ const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
271
+ const subSeries = tabularReport.matrix.attributes[rCount + cCount].groupData.slice(i, i + groupData);
272
+ const dataSubSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
273
+ const uniqueSeries = [...new Set(tabularReport.matrix.attributes[rCount + cCount].series)];
274
+ const countGroupData = tabularReport.matrix.attributes[rCount].groupData[i];
275
+ let countDataIndex = i;
276
+ const end = i + countGroupData;
277
+ uniqueSeries.sort();
278
+ while (countDataIndex < end) {
279
+ uniqueSeries.forEach((element, dIndex) => {
280
+ if (element === tabularReport.matrix.attributes[rCount + cCount].series[countDataIndex]) {
281
+ countArray.splice(dIndex, 1, tabularReport.matrix.attributes[rCount + cCount].groupData[countDataIndex]);
282
+ }
283
+ });
284
+ countDataIndex = countDataIndex + tabularReport.matrix.attributes[rCount + cCount].groupData[countDataIndex];
285
+ }
286
+ dataSeries = [];
287
+ const rowCount = [];
288
+ tabularReport.rowsData = [];
289
+ let subSeriesIndex = 0;
290
+ if (tabularReport.colGrouping.length === 1) {
291
+ const dataSeriesValues = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
292
+ while (subSeriesIndex < subSeries.length) {
293
+ rowCount.push(subSeries[subSeriesIndex]);
294
+ tabularReport.rowsData.push(dataSubSeries[subSeriesIndex]);
295
+ iarr.push(firstColumnIndex);
296
+ tabularReport.integerIndex.forEach((int) => {
297
+ this.getfirstColIntegerData(tabularReport, int, firstColumnIndex, subSeriesIndex, subSeries, dataSeries);
298
+ });
299
+ firstColumnIndex = firstColumnIndex + subSeries[subSeriesIndex];
300
+ subSeriesIndex = subSeriesIndex + subSeries[subSeriesIndex];
301
+ }
302
+ let index = 0;
303
+ iarr.forEach((int) => {
304
+ const data = tabularReport.matrix.attributes[rCount + cCount].series[int];
305
+ let dataIndex = tabularReport.colGrouping[0].uniqueSeries.indexOf(data);
306
+ dataIndex = dataIndex * tabularReport.integerArray.length;
307
+ const arr = dataSeries.slice(index, tabularReport.integerArray.length + index);
308
+ let value = dataIndex;
309
+ arr.forEach((element) => {
310
+ dataSeriesValues.splice(value, 1, element);
311
+ value++;
312
+ });
313
+ index = index + tabularReport.integerArray.length;
314
+ });
315
+ const sideTotal = this.getSideTotal(dataSeries, tabularReport.integerArray);
316
+ dataSeries = dataSeriesValues;
317
+ countDataSeries = dataSeriesValues.slice(0);
318
+ const min = Array();
319
+ const max = Array();
320
+ dataSeriesValues.forEach((element, ind) => {
321
+ if (tabularReport.cloneIntegerArray[ind].includes('Min')) {
322
+ min.push(element);
323
+ if (element < grandTotal[ind]) {
324
+ grandTotal[ind] = element;
325
+ }
326
+ }
327
+ else if (tabularReport.cloneIntegerArray[ind].includes('Max')) {
328
+ max.push(element);
329
+ if (element > grandTotal[ind]) {
330
+ grandTotal[ind] = element;
331
+ }
332
+ }
333
+ else {
334
+ grandTotal[ind] = (grandTotal[ind] + element);
335
+ }
336
+ });
337
+ sideTotal.forEach((element, index1) => {
338
+ if (tabularReport.integerArray[index1].includes('Avg')) {
339
+ sideTotal[index1] = this.countGrandTotalAvg(element, dataSeriesValues.length / tabularReport.integerArray.length);
340
+ sideTotal1[index1] = (sideTotal1[index1] + element);
341
+ }
342
+ else if (tabularReport.integerArray[index1].includes('Min')) {
343
+ sideTotal[index1] = this.countMin(min);
344
+ if (sideTotal[index1] < sideTotal1[index1]) {
345
+ sideTotal1[index1] = sideTotal[index1];
346
+ }
347
+ }
348
+ else if (tabularReport.integerArray[index1].includes('Max')) {
349
+ sideTotal[index1] = this.countMax(max);
350
+ if (sideTotal[index1] > sideTotal1[index1]) {
351
+ sideTotal1[index1] = sideTotal[index1];
352
+ }
353
+ }
354
+ else {
355
+ sideTotal1[index1] = (sideTotal1[index1] + element);
356
+ }
357
+ });
358
+ // countsGrandTotal
359
+ countArray.forEach((countData, countIndex) => {
360
+ countsGrandTotal[countIndex] = (countsGrandTotal[countIndex] + countData);
361
+ });
362
+ tabularReport.grandTotal = grandTotal;
363
+ countTotal = countTotal + rowCount.reduce((a2, b2) => a2 + b2, 0);
364
+ if (tabularReport.rowGrouping.length > 1) {
365
+ __Data.set(i, dataSeries);
366
+ tabularReport.totalRowCount.set(i, rowCount.reduce((a1, b1) => a1 + b1, 0));
367
+ tabularReport.sideTotal.set(i, sideTotal);
368
+ __Data1.set(i, countDataSeries);
369
+ tabularReport.rowCountIndex.set(i, rowCount);
370
+ tabularReport.countsData.set(i, countArray);
371
+ tabularReport.dataIndexSTotal.set(count, i);
372
+ }
373
+ else {
374
+ __Data.set(count, dataSeries);
375
+ __Data1.set(count, countDataSeries);
376
+ tabularReport.totalRowCount.set(count, rowCount.reduce((a2, b2) => a2 + b2, 0));
377
+ tabularReport.sideTotal.set(count, sideTotal);
378
+ tabularReport.rowCountIndex.set(count, rowCount);
379
+ tabularReport.countsData.set(count, countArray);
380
+ }
381
+ }
382
+ count++;
383
+ i = i + groupData;
384
+ }
385
+ if (tabularReport.matrix.attributes[0].series.length > 0) {
386
+ tabularReport.grandTotal.forEach((element, index) => {
387
+ if (tabularReport.cloneIntegerArray[index].includes('Avg')) {
388
+ tabularReport.grandTotal[index] = this.countGrandTotalAvg(element, count);
389
+ }
390
+ });
391
+ }
392
+ sideTotal1.forEach((element, indexD) => {
393
+ if (tabularReport.integerArray[indexD].includes('Avg')) {
394
+ sideTotal1[indexD] = this.countGrandTotalAvg(element, count);
395
+ }
396
+ });
397
+ tabularReport.seriesData = __Data;
398
+ this.dataRender.emit(__Data);
399
+ const integerArrayValues = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
400
+ tabularReport = this.getIntegerIndex(integerArrayValues, tabularReport);
401
+ tabularReport.dataRender = __Data1;
402
+ tabularReport.grandTotal = tabularReport.grandTotal.concat(sideTotal1);
403
+ tabularReport.sideGrandTotal = sideTotal1.concat(countTotal);
404
+ tabularReport.countsTotal = new Array();
405
+ tabularReport.countsTotal = countsGrandTotal.concat(countTotal);
406
+ }
407
+ if (tabularReport.colGrouping.length === 2) {
408
+ tabularReport = this.getSecondColumn(tabularReport);
409
+ }
410
+ if (tabularReport.subTotal) {
411
+ tabularReport = tabularReport.subTotalToggle(tabularReport);
412
+ }
413
+ if (tabularReport.subTotal && !tabularReport.rowCount) {
414
+ tabularReport = tabularReport.subTotalToggle(tabularReport);
415
+ }
416
+ return tabularReport;
417
+ }
418
+ countGrandTotalAvg(data, count) {
419
+ return (parseFloat((data / count).toFixed(2)));
420
+ }
421
+ // countGrandTotalMin(series:)
422
+ /** returns sum of integer columns subSeries for column grouping
423
+ *
424
+ * @param Array
425
+ *
426
+ */
427
+ countSum(series) {
428
+ let total = 0;
429
+ for (const data of series) {
430
+ total += Number(data);
431
+ }
432
+ return total;
433
+ }
434
+ /** returns Average of integer columns subSeries for column grouping
435
+ *
436
+ * @param Array
437
+ *
438
+ */
439
+ countAvg(series) {
440
+ let total = 0;
441
+ for (const data of series) {
442
+ total += Number(data);
443
+ }
444
+ return (parseFloat((total / series.length).toFixed(2)));
445
+ }
446
+ /** returns Max of integer columns subSeries for column grouping
447
+ *
448
+ * @param Array
449
+ *
450
+ */
451
+ countMax(series) {
452
+ return Math.max(...series);
453
+ }
454
+ /** returns min of integer columns subSeries for column grouping
455
+ *
456
+ * @param Array
457
+ *
458
+ */
459
+ countMin(series) {
460
+ return Math.min(...series);
461
+ }
462
+ /** returns count of unique data for integer columns subSeries in column grouping
463
+ *
464
+ * @param Array
465
+ *
466
+ */
467
+ getUnique(series) {
468
+ return [...new Set(series)].length;
469
+ }
470
+ /** to add integer column in IntegerArray
471
+ *
472
+ * @param TabularReport
473
+ *
474
+ */
475
+ getIntegerArray(tabularReport) {
476
+ const data = [];
477
+ tabularReport.matrix.attributes.forEach((attribute, index) => {
478
+ if (!attribute.rowSpan && !attribute.colSpan) {
479
+ if (attribute.aggregate.showUniqueCount) {
480
+ tabularReport.integerArray.push('unique ' + attribute.label);
481
+ tabularReport.integerIndex.push(tabularReport.matrix.attributes.indexOf(attribute));
482
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
483
+ }
484
+ }
485
+ if (attribute.type === 'int' && !attribute.rowSpan && !attribute.colSpan) {
486
+ tabularReport.integerIndex.push(tabularReport.matrix.attributes.indexOf(attribute));
487
+ if (attribute.aggregate.showSum) {
488
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
489
+ tabularReport.integerArray.push('Sum ' + attribute.label);
490
+ }
491
+ if (attribute.aggregate.showAvg) {
492
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
493
+ tabularReport.integerArray.push('Avg ' + attribute.label);
494
+ }
495
+ if (attribute.aggregate.showMax) {
496
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
497
+ tabularReport.integerArray.push('Max ' + attribute.label);
498
+ }
499
+ if (attribute.aggregate.showMin) {
500
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
501
+ tabularReport.integerArray.push('Min ' + attribute.label);
502
+ }
503
+ }
504
+ });
505
+ tabularReport.integerData = data;
506
+ return tabularReport;
507
+ }
508
+ /** to count clone data for single column grouping
509
+ *
510
+ * @param tabularReport
511
+ * @param number
512
+ * @param attributeData
513
+ *
514
+ */
515
+ getCloneData(tabularReport, index, attribute) {
516
+ let startIndex = 0;
517
+ const cloneSeries = [];
518
+ let gdIndex = 0;
519
+ while (startIndex <= (tabularReport.matrix.attributes[index - 1].groupData.length - 1)) {
520
+ const dataSeries = [];
521
+ gdIndex = tabularReport.matrix.attributes[index - 1].groupData[startIndex];
522
+ const subSeries = attribute.series.slice(startIndex, startIndex + gdIndex);
523
+ subSeries.forEach((subSeriesData) => {
524
+ attribute.groupData.push(this.getRowSpanCount(subSeries, subSeriesData));
525
+ // to replace repeated subSeriesData
526
+ if (dataSeries.includes(subSeriesData)) {
527
+ dataSeries.push('repeated');
528
+ cloneSeries.push('repeated');
529
+ }
530
+ else {
531
+ dataSeries.push(subSeriesData);
532
+ cloneSeries.push(subSeriesData);
533
+ }
534
+ });
535
+ attribute.cloneGroupData = attribute.groupData.slice(0);
536
+ startIndex = startIndex + gdIndex;
537
+ }
538
+ attribute.cloneSeries = cloneSeries;
539
+ return attribute;
540
+ }
541
+ /** to count clone data for double column grouping
542
+ *
543
+ * @param tabularReport
544
+ * @param number
545
+ *
546
+ */
547
+ getSecondColData(tabularReport, _index) {
548
+ tabularReport.matrix.attributes[_index - 1].uniqueSeries.forEach((unique) => {
549
+ const data = [];
550
+ tabularReport.matrix.attributes[_index - 1].series.forEach((series, index) => {
551
+ if (unique === series) {
552
+ if (!data.includes(tabularReport.matrix.attributes[_index].series[index])) {
553
+ data.push(tabularReport.matrix.attributes[_index].series[index]);
554
+ tabularReport.secondColSeries.push(tabularReport.matrix.attributes[_index].series[index]);
555
+ }
556
+ }
557
+ });
558
+ // tabularReport.secondSeries=
559
+ tabularReport.secondColData.set(unique, data);
560
+ data.forEach(() => {
561
+ tabularReport.firstColSeries.push(unique);
562
+ });
563
+ });
564
+ tabularReport.colGrouping[0].uniqueSeries = [...new Set(tabularReport.firstColSeries)];
565
+ return tabularReport;
566
+ }
567
+ /** create series with row count
568
+ *
569
+ * @param tabularReport
570
+ * @param Array
571
+ * @param Array
572
+ *
573
+ */
574
+ getSeriesWithCount(swap1, integerArray, rowCount, tabularReport) {
575
+ let integerArrayIndex = integerArray.length - 1;
576
+ let dataIndex = 0;
577
+ this.cloneIntegerCount = Array(swap1.length).fill(0);
578
+ const countIndex = Array(swap1.length).fill(0);
579
+ while (integerArrayIndex < swap1.length) {
580
+ if (swap1[integerArrayIndex] > 0) {
581
+ countIndex.splice(integerArrayIndex + 1, 0, null);
582
+ }
583
+ else {
584
+ countIndex.splice(integerArrayIndex + 1, 0, null);
585
+ }
586
+ swap1.splice(integerArrayIndex + 1, 0, rowCount[dataIndex]);
587
+ this.cloneIntegerCount.splice(integerArrayIndex + 1, 0, 'count');
588
+ if (integerArrayIndex < tabularReport.cloneIntegerArray.length) {
589
+ this.cloneIntegerCount.splice(integerArrayIndex + 1, 1, 'count');
590
+ }
591
+ integerArrayIndex = integerArrayIndex + integerArray.length + 1;
592
+ dataIndex++;
593
+ }
594
+ return swap1;
595
+ }
596
+ /** count Integer columns subSeries Data for single column grouping
597
+ *
598
+ * @param tabularReport
599
+ * @param number
600
+ * @param number
601
+ * @param number
602
+ * @param Array
603
+ * @param Array
604
+ *
605
+ */
606
+ getfirstColIntegerData(tabularReport, int, firstColumnIndex, j, subSeries, swap) {
607
+ if (tabularReport.matrix.attributes[int].aggregate.showUniqueCount) {
608
+ swap.push(this.getUnique(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
609
+ }
610
+ if (tabularReport.matrix.attributes[int].aggregate.showSum) {
611
+ swap.push(this.countSum(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
612
+ }
613
+ if (tabularReport.matrix.attributes[int].aggregate.showAvg) {
614
+ swap.push(this.countAvg(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
615
+ }
616
+ if (tabularReport.matrix.attributes[int].aggregate.showMax) {
617
+ swap.push(this.countMax(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
618
+ }
619
+ if (tabularReport.matrix.attributes[int].aggregate.showMin) {
620
+ swap.push(this.countMin(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
621
+ }
622
+ return swap;
623
+ }
624
+ /** count Integer columns subSeries Data for double column grouping
625
+ *
626
+ * @param tabularReport
627
+ * @param number
628
+ * @param number
629
+ * @param number
630
+ * @param Array
631
+ * @param Array
632
+ *
633
+ */
634
+ getSecondColIntegerData(tabularReport, int, secondColumnIndex, n, swap, xyz) {
635
+ if (tabularReport.matrix.attributes[int].aggregate.showUniqueCount) {
636
+ swap.push(this.getUnique(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
637
+ }
638
+ if (tabularReport.matrix.attributes[int].aggregate.showSum) {
639
+ swap.push(this.countSum(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
640
+ }
641
+ if (tabularReport.matrix.attributes[int].aggregate.showAvg) {
642
+ swap.push(this.countAvg(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
643
+ }
644
+ if (tabularReport.matrix.attributes[int].aggregate.showMax) {
645
+ swap.push(this.countMax(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
646
+ }
647
+ if (tabularReport.matrix.attributes[int].aggregate.showMin) {
648
+ swap.push(this.countMin(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
649
+ }
650
+ return swap;
651
+ }
652
+ /** count horizontal grand Total
653
+ *
654
+ * @param Array
655
+ * @param Array
656
+ *
657
+ */
658
+ getSideTotal(swap, integerArray) {
659
+ let totalIndex = 0;
660
+ let integerArrayIndex = 0;
661
+ const sideTotal = Array(integerArray.length).fill(0);
662
+ while (totalIndex < integerArray.length) {
663
+ integerArrayIndex = totalIndex;
664
+ sideTotal[totalIndex] = swap[integerArrayIndex];
665
+ while (integerArrayIndex + integerArray.length < swap.length) {
666
+ sideTotal[totalIndex] = sideTotal[totalIndex] + swap[integerArrayIndex + integerArray.length];
667
+ integerArrayIndex = integerArrayIndex + integerArray.length;
668
+ }
669
+ totalIndex++;
670
+ }
671
+ return sideTotal;
672
+ }
673
+ /** get Second column series grouping data
674
+ *
675
+ * @param Array
676
+ * @param TabularReport
677
+ * @param number
678
+ * @param Array
679
+ * @param Array
680
+ *
681
+ */
682
+ getSeriesData(iarr, tabularReport, rCount, cCount, swap, a) {
683
+ let index = 0;
684
+ iarr.forEach((element) => {
685
+ let iArrayIndex = tabularReport.firstColSeries.indexOf(tabularReport.matrix.attributes[rCount + 1].series[element]);
686
+ const max = iArrayIndex + tabularReport.secondColData.get(tabularReport.matrix.attributes[rCount + 1].series[element]).length;
687
+ while (iArrayIndex < max) {
688
+ if (tabularReport.secondColSeries[iArrayIndex] === tabularReport.matrix.attributes[rCount + cCount].series[element]) {
689
+ const arr = swap.slice(index, tabularReport.integerArray.length + index);
690
+ let value = iArrayIndex * tabularReport.integerArray.length;
691
+ a.splice(value, 1, swap[index]);
692
+ arr.forEach((data) => {
693
+ a.splice(value, 1, data);
694
+ value++;
695
+ });
696
+ index = index + tabularReport.integerArray.length;
697
+ }
698
+ iArrayIndex++;
699
+ }
700
+ });
701
+ return a;
702
+ }
703
+ /** get Second column data
704
+ *
705
+ * @param TabularReport
706
+ *
707
+ */
708
+ getSecondColumn(tabularReport) {
709
+ const rCount = tabularReport.rowGrouping.length - 1;
710
+ const cCount = tabularReport.colGrouping.length;
711
+ let count = 0;
712
+ let i = 0;
713
+ tabularReport.matrix.attributes[rCount + cCount].groupData = [];
714
+ const sideTotal1 = Array(tabularReport.integerArray.length).fill(0);
715
+ while (i < tabularReport.matrix.attributes[0].series.length) {
716
+ const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
717
+ const subSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
718
+ subSeries.forEach((_data) => {
719
+ tabularReport.matrix.attributes[rCount + cCount].groupData.push(this.getRowSpanCount(subSeries, _data));
720
+ });
721
+ i = i + groupData;
722
+ }
723
+ i = 0;
724
+ const __Data = new Map();
725
+ const __Data1 = new Map();
726
+ let subSeriesIndex = 0;
727
+ let secondColumnIndex = 0;
728
+ const grandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
729
+ const countGrandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length + tabularReport.cloneDataCount.length).fill(0);
730
+ let countTotal = 0;
731
+ const countsGrandTotal = Array(tabularReport.secondColSeries.length).fill(0);
732
+ while (i < tabularReport.matrix.attributes[0].series.length) {
733
+ const subSeriesDataCount = [];
734
+ let seriesData = [];
735
+ let countSeriesData = [];
736
+ const iarr = [];
737
+ const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
738
+ seriesData = [];
739
+ const rowCount = [];
740
+ const dataSeriesValues = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
741
+ const groupDataSeries = tabularReport.matrix.attributes[rCount].groupData[i];
742
+ const countArray = Array(tabularReport.secondColSeries.length).fill(0);
743
+ const subSeries = tabularReport.matrix.attributes[rCount + 1].series.slice(i, i + groupDataSeries);
744
+ const subSeriesGroupData = [];
745
+ subSeries.forEach((data) => {
746
+ subSeriesGroupData.push(this.getRowSpanCount(subSeries, data));
747
+ });
748
+ let sSeriesGDIndex = 0;
749
+ while (sSeriesGDIndex < subSeriesGroupData.length) {
750
+ const sSeries = (tabularReport.matrix.attributes[rCount + cCount].series.slice(subSeriesIndex, subSeriesIndex + subSeriesGroupData[sSeriesGDIndex]));
751
+ sSeries.forEach((data1) => {
752
+ subSeriesDataCount.push(this.getRowSpanCount(sSeries, data1));
753
+ });
754
+ subSeriesIndex = subSeriesIndex + subSeriesGroupData[sSeriesGDIndex];
755
+ sSeriesGDIndex = sSeriesGDIndex + subSeriesGroupData[sSeriesGDIndex];
756
+ }
757
+ let sSeriesGDCIndex = 0;
758
+ while (sSeriesGDCIndex < subSeriesDataCount.length) {
759
+ const data = tabularReport.matrix.attributes[rCount + cCount].series[i + sSeriesGDCIndex];
760
+ let series = [];
761
+ series = tabularReport.secondColData.get(subSeries[sSeriesGDCIndex]);
762
+ const x = tabularReport.firstColSeries.indexOf(tabularReport.matrix.attributes[rCount + 1].series[i + sSeriesGDCIndex]);
763
+ const m = (series.indexOf(data));
764
+ countArray.splice(m + x, 1, subSeriesDataCount[sSeriesGDCIndex]);
765
+ rowCount.push(subSeriesDataCount[sSeriesGDCIndex]);
766
+ iarr.push(secondColumnIndex);
767
+ tabularReport.integerIndex.forEach((int) => {
768
+ this.getSecondColIntegerData(tabularReport, int, secondColumnIndex, sSeriesGDCIndex, seriesData, subSeriesDataCount);
769
+ });
770
+ secondColumnIndex = secondColumnIndex + subSeriesDataCount[sSeriesGDCIndex];
771
+ sSeriesGDCIndex = sSeriesGDCIndex + subSeriesDataCount[sSeriesGDCIndex];
772
+ }
773
+ const sideTotal = this.getSideTotal(seriesData, tabularReport.integerArray);
774
+ if (tabularReport.integerArray.length !== 0) {
775
+ seriesData = this.getSeriesData(iarr, tabularReport, rCount, cCount, seriesData, dataSeriesValues);
776
+ }
777
+ countSeriesData = dataSeriesValues.slice(0);
778
+ countArray.forEach((countData, countIndex) => {
779
+ countsGrandTotal[countIndex] = (countsGrandTotal[countIndex] + countData);
780
+ });
781
+ tabularReport.cloneIntegerArray = [];
782
+ tabularReport.secondColSeries.forEach((element) => {
783
+ tabularReport.integerArray.forEach((element1) => {
784
+ tabularReport.cloneIntegerArray.push(element1);
785
+ });
786
+ });
787
+ const min = Array();
788
+ const max = Array();
789
+ dataSeriesValues.forEach((element, index) => {
790
+ if (tabularReport.cloneIntegerArray[index].includes('Min')) {
791
+ min.push(element);
792
+ if (element < grandTotal[index]) {
793
+ grandTotal[index] = element;
794
+ }
795
+ }
796
+ else if (tabularReport.cloneIntegerArray[index].includes('Max')) {
797
+ max.push(element);
798
+ if (element > grandTotal[index]) {
799
+ grandTotal[index] = element;
800
+ }
801
+ }
802
+ else {
803
+ grandTotal[index] = (grandTotal[index] + element);
804
+ }
805
+ });
806
+ tabularReport.grandTotal = grandTotal;
807
+ sideTotal.forEach((element, index1) => {
808
+ if (tabularReport.integerArray[index1].includes('Avg')) {
809
+ sideTotal[index1] = this.countGrandTotalAvg(element, dataSeriesValues.length / tabularReport.integerArray.length);
810
+ sideTotal1[index1] = (sideTotal1[index1] + element);
811
+ }
812
+ else if (tabularReport.integerArray[index1].includes('Min')) {
813
+ sideTotal[index1] = this.countMin(min);
814
+ if (sideTotal[index1] < sideTotal1[index1]) {
815
+ sideTotal1[index1] = sideTotal[index1];
816
+ }
817
+ }
818
+ else if (tabularReport.integerArray[index1].includes('Max')) {
819
+ sideTotal[index1] = this.countMax(max);
820
+ if (sideTotal[index1] > sideTotal1[index1]) {
821
+ sideTotal1[index1] = sideTotal[index1];
822
+ }
823
+ }
824
+ else {
825
+ sideTotal1[index1] = (sideTotal1[index1] + element);
826
+ }
827
+ });
828
+ countTotal = countTotal + rowCount.reduce((a2, b2) => a2 + b2, 0);
829
+ if (tabularReport.rowGrouping.length > 1) {
830
+ __Data.set(i, seriesData);
831
+ __Data1.set(i, countSeriesData);
832
+ tabularReport.totalRowCount.set(i, rowCount.reduce((a1, b1) => a1 + b1, 0));
833
+ tabularReport.sideTotal.set(i, sideTotal);
834
+ tabularReport.rowCountIndex.set(i, rowCount);
835
+ tabularReport.countsData.set(i, countArray);
836
+ tabularReport.dataIndexSTotal.set(count, i);
837
+ }
838
+ else {
839
+ __Data.set(count, seriesData);
840
+ __Data1.set(count, countSeriesData);
841
+ tabularReport.totalRowCount.set(count, rowCount.reduce((a1, b1) => a1 + b1, 0));
842
+ tabularReport.sideTotal.set(count, sideTotal);
843
+ tabularReport.rowCountIndex.set(count, rowCount);
844
+ tabularReport.countsData.set(count, countArray);
845
+ }
846
+ count++;
847
+ i = i + groupData;
848
+ }
849
+ tabularReport.grandTotal.forEach((element, indexData) => {
850
+ if (tabularReport.cloneIntegerArray[indexData].includes('Avg')) {
851
+ tabularReport.grandTotal[indexData] = this.countGrandTotalAvg(element, count);
852
+ }
853
+ });
854
+ sideTotal1.forEach((_elementData, indexD) => {
855
+ if (tabularReport.integerArray[indexD].includes('Avg')) {
856
+ sideTotal1[indexD] = this.countGrandTotalAvg(_elementData, count);
857
+ }
858
+ });
859
+ this.dataRender.emit(__Data);
860
+ tabularReport.seriesData = __Data;
861
+ tabularReport.dataRender = __Data1;
862
+ const integerArrayValues = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
863
+ this.getIntegerIndex(integerArrayValues, tabularReport);
864
+ tabularReport.grandTotal = grandTotal;
865
+ tabularReport.grandTotal = tabularReport.grandTotal.concat(sideTotal1);
866
+ tabularReport.sideGrandTotal = sideTotal1.concat(countTotal);
867
+ tabularReport.countsTotal = new Array();
868
+ tabularReport.countsTotal = countsGrandTotal.concat(countTotal);
869
+ return tabularReport;
870
+ }
871
+ /** to get series data with row count
872
+ *
873
+ * @param TabularReport
874
+ *
875
+ */
876
+ rowCountData(tabularReport) {
877
+ const countGrandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length + tabularReport.cloneDataCount.length).fill(0);
878
+ const total = tabularReport.colGrouping.length > 1 ? Array(tabularReport.secondColSeries.length).fill(0) : Array(tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
879
+ tabularReport.matrix.attributes[0].series.forEach((element, index) => {
880
+ let countDataSeries = [];
881
+ if (tabularReport.dataRender.get(index) && tabularReport.integerArray.length !== 0) {
882
+ let data = [];
883
+ countDataSeries = tabularReport.seriesData.get(index).slice(0);
884
+ data = (this.getSeriesWithCount(countDataSeries, tabularReport.integerArray, tabularReport.countsData.get(index), tabularReport));
885
+ tabularReport.dataRender.set(index, data);
886
+ }
887
+ let x = 0;
888
+ countDataSeries.forEach((element1, index1) => {
889
+ if (this.cloneIntegerCount[index1] === 'count' || index1 === countDataSeries.length) {
890
+ total[x] = (total[x] + element1);
891
+ x++;
892
+ }
893
+ countGrandTotal[index1] = (countGrandTotal[index1] + element1);
894
+ });
895
+ });
896
+ tabularReport.grandTotal2 = tabularReport.grandTotal.slice(0);
897
+ let integerArrayIndex = tabularReport.integerArray.length - 1;
898
+ let index = 0;
899
+ while (integerArrayIndex < countGrandTotal.length) {
900
+ tabularReport.grandTotal2.splice(integerArrayIndex + 1, 0, total[index]);
901
+ integerArrayIndex = integerArrayIndex + tabularReport.integerArray.length + 1;
902
+ index++;
903
+ }
904
+ tabularReport.grandTotal2.splice((tabularReport.grandTotal2.length - tabularReport.integerArray.length), tabularReport.integerArray.length);
905
+ tabularReport.grandTotal2 = tabularReport.grandTotal2.concat(tabularReport.sideGrandTotal);
906
+ let x = 0;
907
+ tabularReport.countIntegerIndexing = tabularReport.integerIndexing.slice(0);
908
+ while (x < countGrandTotal.length) {
909
+ tabularReport.countIntegerIndexing.splice(x + tabularReport.integerArray.length, 0, null);
910
+ x = x + tabularReport.integerArray.length + 1;
911
+ }
912
+ tabularReport.countTotalIntegerIndexing = [];
913
+ tabularReport.countTotalIntegerIndexing = tabularReport.gTotalIntegerIndexing.slice(0);
914
+ let m = 0;
915
+ while (m < tabularReport.gTotalIntegerIndexing.length) {
916
+ tabularReport.countTotalIntegerIndexing.splice(m + tabularReport.integerArray.length, 0, null);
917
+ m = m + tabularReport.integerArray.length + 1;
918
+ }
919
+ if (tabularReport.subTotal) {
920
+ tabularReport = tabularReport.subTotalToggle(tabularReport);
921
+ }
922
+ return tabularReport;
923
+ }
924
+ getIntegerIndex(integerArrayValues, tabularReport) {
925
+ if (tabularReport.matrix.attributes[0].series.length > 0) {
926
+ let arrayIndex = 0;
927
+ while (arrayIndex < tabularReport.seriesData.get(0).length) {
928
+ let index1 = arrayIndex;
929
+ tabularReport.integerData.forEach((element, index) => {
930
+ integerArrayValues.splice(index1, 1, element);
931
+ index1++;
932
+ });
933
+ arrayIndex = arrayIndex + tabularReport.integerData.length;
934
+ }
935
+ tabularReport.integerIndexing = integerArrayValues;
936
+ tabularReport.gTotalIntegerIndexing = integerArrayValues.concat(tabularReport.integerData);
937
+ }
938
+ return tabularReport;
939
+ }
940
+ tableClickEvent(tabularReport) {
941
+ const tabularProperty = new ElementProperty();
942
+ if (tabularReport instanceof TabularReport) {
943
+ tabularProperty.page = null;
944
+ tabularProperty.element = tabularReport;
945
+ }
946
+ else {
947
+ tabularProperty.page = tabularReport;
948
+ }
949
+ this._tableClickEvent.emit(tabularProperty);
950
+ }
951
+ }
952
+ TabularReportService.ɵfac = function TabularReportService_Factory(t) { return new (t || TabularReportService)(i0.ɵɵinject(i1.HttpClient)); };
953
+ TabularReportService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TabularReportService, factory: TabularReportService.ɵfac, providedIn: 'root' });
954
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TabularReportService, [{
955
+ type: Injectable,
956
+ args: [{
957
+ providedIn: 'root'
958
+ }]
959
+ }], function () { return [{ type: i1.HttpClient }]; }, null); })();
960
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFidWxhci1yZXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9heC1jb21tb24tdWktbGliL3NyYy9saWIvZW5saWdodGVuLWxpYi9yZXBvcnQvdGFidWxhci1yZXBvcnQvdGFidWxhci1yZXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBTWpELE1BQU0sT0FBTyxvQkFBb0I7SUFNL0IsWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFKM0MsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5ELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0Msc0JBQWlCLEdBQUMsS0FBSyxFQUFPLENBQUM7SUFHL0IsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsYUFBNEI7UUFDcEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hELHVDQUF1QztZQUN6QyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7WUFDeEMsSUFBRyxLQUFLLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUM7Z0JBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNyQztpQkFBSTtnQkFDSCwrQkFBK0I7Z0JBQy9CLElBQUksVUFBVSxHQUFDLENBQUMsQ0FB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QU0sRUFBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVDLE1BQU0sRUFBRSxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDO2dCQUNILFVBQVUsR0FBQyxVQUFVLEdBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7YUFDeEQ7WUFDRCxhQUFhLENBQUMsZUFBZSxHQUFDLGtCQUFrQixDQUFDO1lBQ2pELGFBQWEsQ0FBQyxxQkFBcUIsR0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hGO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUNELGVBQWUsQ0FBQyxhQUFrQjtRQUNoQyxNQUFNLGVBQWUsR0FBRSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzdDLElBQUcsYUFBYSxZQUFZLGFBQWEsRUFBQztZQUMxQyxlQUFlLENBQUMsSUFBSSxHQUFDLElBQUksQ0FBQztZQUMxQixlQUFlLENBQUMsT0FBTyxHQUFDLGFBQWEsQ0FBQztTQUNyQzthQUNHO1lBQ0YsZUFBZSxDQUFDLElBQUksR0FBQyxhQUFhLENBQUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O3dGQWhnQ1ksb0JBQW9COzBFQUFwQixvQkFBb0IsV0FBcEIsb0JBQW9CLG1CQUZuQixNQUFNO3VGQUVQLG9CQUFvQjtjQUhoQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVEYXRhIH0gZnJvbSAnLi4vLi4vZmllbGRzL2F0dHJpYnV0ZS1kYXRhJztcbmltcG9ydCB7IEVsZW1lbnRQcm9wZXJ0eSB9IGZyb20gJy4uLy4uL3Byb3BlcnR5L2VsZW1lbnQtcHJvcGVydHknO1xuaW1wb3J0IHsgVGFidWxhclJlcG9ydCB9IGZyb20gJy4vdGFidWxhci1yZXBvcnQnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYnVsYXJSZXBvcnRTZXJ2aWNlIHtcblxuICBkYXRhUmVuZGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgYXR0ckFycmF5OiBBcnJheTxBdHRyaWJ1dGVEYXRhPjtcbiAgX3RhYmxlQ2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBjbG9uZUludGVnZXJDb3VudD1BcnJheTxhbnk+KCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQpe1xuXG4gIH1cbiAgLyoqdG8gY291bnQgZGF0YSBjb3VudCBpbiBhIHNlcmllc1xuICAgKlxuICAgKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICAgKlxuICAgKi9cbiAgZ3JvdXBEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlLGluZGV4KSA9PiB7XG4gICAgICAgIC8vIHdoZW4gcm93IHNwYW4gaXMgdHJ1ZSBhbmQgaW5kZXggaXMgMFxuICAgICAgYXR0cmlidXRlLmdyb3VwRGF0YSA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgIGlmKGluZGV4ID09PSAwIHx8IGF0dHJpYnV0ZS5jb2xTcGFuKXtcbiAgICAgICAgICB0aGlzLmdldEZpcnN0Um93R3JvdXBpbmcoYXR0cmlidXRlKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgLy8gd2hlbiBpbmRleCBpcyBncmVhdGVyIHRoYW4gMFxuICAgICAgICAgIGxldCBzdGFydEluZGV4PTA7XG4gICAgICAgICAgY29uc3QgY2xvbmVTZXJpZXM9W107XG4gICAgICAgICAgbGV0IGdkSW5kZXg9MDtcbiAgICAgICAgICB3aGlsZShzdGFydEluZGV4PD0gKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW5kZXggLSAxXS5ncm91cERhdGEubGVuZ3RoLTEpKXtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTZXJpZXM9W107XG4gICAgICAgICAgICBnZEluZGV4PXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW5kZXggLSAxXS5ncm91cERhdGFbc3RhcnRJbmRleF07XG4gICAgICAgICAgICBjb25zdCBzdWJTZXJpZXMgPSBhdHRyaWJ1dGUuc2VyaWVzLnNsaWNlKHN0YXJ0SW5kZXgsc3RhcnRJbmRleCtnZEluZGV4KTtcbiAgICAgICAgICAgIHN1YlNlcmllcy5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChzdWJTZXJpZXMsZGF0YSkpO1xuICAgICAgICAgICAgICAvLyB0byByZXBsYWNlIHJlcGVhdGVkIGRhdGFcbiAgICAgICAgICAgICAgaWYoZGF0YVNlcmllcy5pbmNsdWRlcyhkYXRhKSl7XG4gICAgICAgICAgICAgICAgZGF0YVNlcmllcy5wdXNoKCdyZXBlYXRlZCcpO1xuICAgICAgICAgICAgICAgIGNsb25lU2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgICAgY2xvbmVTZXJpZXMucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGUuY2xvbmVHcm91cERhdGE9YXR0cmlidXRlLmdyb3VwRGF0YS5zbGljZSgwKTtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg9c3RhcnRJbmRleCtnZEluZGV4O1xuXG4gICAgICAgICAgfVxuICAgICAgICAgIGF0dHJpYnV0ZS5jbG9uZVNlcmllcz1jbG9uZVNlcmllcztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmKHRhYnVsYXJSZXBvcnQuc3ViVG90YWwgJiYgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg9PT0wKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQ9dGFidWxhclJlcG9ydC5zdWJUb3RhbFRvZ2dsZSh0YWJ1bGFyUmVwb3J0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG4gIH1cblxuICAvKiogdG8gY291bnQgZGF0YSBjb3VudCBpbiBhIHNlcmllc1xuICAgKlxuICAgKiBAcGFyYW0gc3RyaW5nXG4gICAqIEBwYXJhbSBhbnlcbiAgICpcbiAgICovXG4gIGdldFJvd1NwYW5Db3VudChzZXJpZXM6IEFycmF5PGFueT4gLGtleTogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gIHNlcmllcy5maWx0ZXIoc3RyID0+IHN0ciA9PT0ga2V5KS5sZW5ndGg7XG4gIH1cblxuICAvKiogdG8gY291bnQgZmlyc3Qgcm93IGdyb3VwaW5nIGRhdGEgY291bnRcbiAgICpcbiAgICogQHBhcmFtIEF0dHJpYnV0ZURhdGFcbiAgICpcbiAgICovXG4gIGdldEZpcnN0Um93R3JvdXBpbmcoYXR0cmlidXRlOiBBdHRyaWJ1dGVEYXRhKTogQXR0cmlidXRlRGF0YXtcbiAgICBjb25zdCBzZXJpZXM9W107XG4gICAgY29uc3QgdW5pcXVlU2VyaWVzPVtdO1xuICAgIGF0dHJpYnV0ZS5zZXJpZXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYoc2VyaWVzLmluY2x1ZGVzKGVsZW1lbnQpKXtcbiAgICAgICAgc2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgc2VyaWVzLnB1c2goZWxlbWVudCk7XG4gICAgICB1bmlxdWVTZXJpZXMucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhdHRyaWJ1dGUuY2xvbmVTZXJpZXM9c2VyaWVzO1xuICAgIGF0dHJpYnV0ZS51bmlxdWVTZXJpZXM9dW5pcXVlU2VyaWVzO1xuICAgIGF0dHJpYnV0ZS5zZXJpZXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgYXR0cmlidXRlLmdyb3VwRGF0YS5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KGF0dHJpYnV0ZS5zZXJpZXMsZGF0YSkpO1xuICAgIH0pO1xuICAgIGF0dHJpYnV0ZS5jbG9uZUdyb3VwRGF0YT1hdHRyaWJ1dGUuZ3JvdXBEYXRhLnNsaWNlKDApO1xuICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gIH1cblxuICBzZW5kRW1haWwoZW1haWxEdG86IGFueSk6IFByb21pc2U8YW55PntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5faHR0cENsaWVudC5wb3N0KCdyZXBvcnRzL2V4cG9ydCcsIGVtYWlsRHRvKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqdG8gY291bnQgZGF0YSBjb3VudCBhbmQgc2V0IGNsb25lIGRhdGEgd2hpbGUgY29sdW1uIGdyb3VwaW5nIGlzIGFwcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAgICpcbiAgICovXG4gIGNvbHVtbkRhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG4gICAgdGFidWxhclJlcG9ydD10aGlzLnJvd1NwYW4odGFidWxhclJlcG9ydCk7XG4gICAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICBpZighYXR0ci51bmlxdWVTZXJpZXMpe1xuICAgICAgICBpZighYXR0ci51bmlxdWVTZXJpZXMpe1xuICAgICAgICAgIGNvbnN0IHNlcmllcz1bXTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVTZXJpZXM9W107XG4gICAgICAgICAgYXR0ci5zZXJpZXMuZm9yRWFjaCgoX2VsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmKHNlcmllcy5pbmNsdWRlcyhfZWxlbWVudCkpe1xuICAgICAgICAgICAgICBzZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBzZXJpZXMucHVzaChfZWxlbWVudCk7XG4gICAgICAgICAgICB1bmlxdWVTZXJpZXMucHVzaChfZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdW5pcXVlU2VyaWVzLnNvcnQoKTtcbiAgICAgICAgICBhdHRyLnVuaXF1ZVNlcmllcz11bmlxdWVTZXJpZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgIGlmKCFhdHRyLnVuaXF1ZVNlcmllcyl7XG4gICAgICAgIGlmKCFhdHRyLnVuaXF1ZVNlcmllcyl7XG4gICAgICAgICAgY29uc3Qgc2VyaWVzPVtdO1xuICAgICAgICAgIGNvbnN0IHVuaXF1ZVNlcmllcz1bXTtcbiAgICAgICAgICBhdHRyLnNlcmllcy5mb3JFYWNoKChzZXJpZXNEYXRhKSA9PiB7XG4gICAgICAgICAgICBpZihzZXJpZXMuaW5jbHVkZXMoc2VyaWVzRGF0YSkpe1xuICAgICAgICAgICAgICBzZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBzZXJpZXMucHVzaChzZXJpZXNEYXRhKTtcbiAgICAgICAgICAgIHVuaXF1ZVNlcmllcy5wdXNoKHNlcmllc0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHVuaXF1ZVNlcmllcy5zb3J0KCk7XG4gICAgICAgICAgYXR0ci51bmlxdWVTZXJpZXM9dW5pcXVlU2VyaWVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFidWxhclJlcG9ydDtcblxuXG4gIH1cbiAgLyoqdG8gY291bnQgcm93cyBncm91cCBkYXRhIHdoZW4gY29sdW1uIGdyb3VwaW5nIGlzIGFwcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAgICpcbiAgICovXG4gIHJvd1NwYW4odGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXk9W107XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXg9W107XG4gICAgdGFidWxhclJlcG9ydD10aGlzLmdldEludGVnZXJBcnJheSh0YWJ1bGFyUmVwb3J0KTtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg9PT0wKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQucm93Q291bnQ9dHJ1ZTtcbiAgICB9XG4gICAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUsaW5kZXgpID0+IHtcbiAgICAgIGlmKGluZGV4PT09MCAmJiBhdHRyaWJ1dGUucm93U3Bhbil7XG4gICAgICAgIGNvbnN0IHNlcmllcz1bXTtcbiAgICAgICAgY29uc3QgdW5pcXVlU2VyaWVzPVtdO1xuICAgICAgICBhdHRyaWJ1dGUuc2VyaWVzLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICBpZihzZXJpZXMuaW5jbHVkZXMoZGF0YSkpe1xuICAgICAgICAgICAgc2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgc2VyaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgdW5pcXVlU2VyaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXR0cmlidXRlLmNsb25lU2VyaWVzPXNlcmllcztcbiAgICAgICAgYXR0cmlidXRlLnVuaXF1ZVNlcmllcz11bmlxdWVTZXJpZXM7XG4gICAgICAgIGF0dHJpYnV0ZS5zZXJpZXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgIGF0dHJpYnV0ZS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChhdHRyaWJ1dGUuc2VyaWVzLGRhdGEpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJpYnV0ZS5jbG9uZUdyb3VwRGF0YT1hdHRyaWJ1dGUuZ3JvdXBEYXRhO1xuICAgICAgfVxuICAgICAgaWYoaW5kZXg9PT0xICYmIGF0dHJpYnV0ZS5yb3dTcGFuKXtcbiAgICAgICAgYXR0cmlidXRlPXRoaXMuZ2V0Q2xvbmVEYXRhKHRhYnVsYXJSZXBvcnQsaW5kZXgsYXR0cmlidXRlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuLyoqdG8gc2V0IGhlYWRlcnMgc2VjdGlvbiBvZiBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICogQHBhcmFtIEF0dHJpYnV0ZURhdGFcbiAqXG4gKi9cbm5ld0RhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCAsYXR0cjogQXR0cmlidXRlRGF0YSk6IFRhYnVsYXJSZXBvcnR7XG5jb25zdCBjb3VudD0odGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5pbmRleE9mKGF0dHIpKTtcbnRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YT0gbmV3IE1hcDxzdHJpbmcsYW55PigpO1xudGFidWxhclJlcG9ydC5zZWNvbmRDb2xTZXJpZXM9bmV3IEFycmF5KCk7XG50YWJ1bGFyUmVwb3J0LmZpcnN0Q29sU2VyaWVzPW5ldyBBcnJheSgpO1xuY29uc3QgX2luZGV4PXRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoKyhjb3VudCk7XG5pZihjb3VudD09PTEpe1xuICB0YWJ1bGFyUmVwb3J0PXRoaXMuZ2V0U2Vjb25kQ29sRGF0YSh0YWJ1bGFyUmVwb3J0LF9pbmRleCk7XG5cbn1cblxuXG4gIGlmKHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MSl7XG4gICAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMuZm9yRWFjaCgoc2VyaWVzKSA9PiB7XG4gICAgICB0YWJ1bGFyUmVwb3J0LmNvbERhdGEuc2V0KHNlcmllcyx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpO1xuICAgIH0pO1xuICBsZXQgbT0wO1xuICB0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50PVtdO1xuICB0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5PVtdO1xuICB3aGlsZShtPCh0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5sZW5ndGgpKXtcbiAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICB0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5LnB1c2goZWxlbWVudCk7XG4gICAgfSk7XG4gICAgdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5wdXNoKG0pO1xuXG4gICAgbSsrO1xuICB9XG59XG5pZih0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD4xICYmIGNvdW50PT09MSl7XG4gIGxldCBfY291bnQ9MDtcbiAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1sxXS51bmlxdWVTZXJpZXMuZm9yRWFjaCgoc2VyaWVzKSA9PiB7XG4gICAgICB0YWJ1bGFyUmVwb3J0LmNvbERhdGEuc2V0KHNlcmllcyx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpO1xuICAgIH0pO1xuICB0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5mb3JFYWNoKChzZXJpZXMpID0+IHtcbiAgICB0YWJ1bGFyUmVwb3J0LmNvbERhdGEuc2V0KHNlcmllcyx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgqKHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5nZXQoc2VyaWVzKS5sZW5ndGgpKTtcbiAgICBfY291bnQrPSh0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHNlcmllcykubGVuZ3RoKTtcbiAgfSk7XG4gIHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQ9W107XG4gIGxldCBjbG9uZURhdGFJbmRleD0wO2NvbnN0IGRhdGExMjM9W107XG4gIHdoaWxlKGNsb25lRGF0YUluZGV4PF9jb3VudCl7XG4gICAgdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5wdXNoKGNsb25lRGF0YUluZGV4KTtcbiAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBkYXRhMTIzLnB1c2goZWxlbWVudCk7XG5cbiAgICB9KTtcbiAgICBjbG9uZURhdGFJbmRleCsrO1xuICB9XG4gIH1cbiAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG4gIC8qKnRvIGdldCBkYXRhIHJlbmRlciB2YWx1ZSB3aGVuIHNpbmdsZSBjb2x1bW4gZ3JvdXBpbmcgaXMgYXBwbGllZFxuICAgKlxuICAgKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICAgKlxuICAgKi9cbiAgZGF0YUZhY3RvcnkodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG4gIGNvbnN0IHJDb3VudD10YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aC0xO1xuICBjb25zdCBjQ291bnQ9dGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg7XG4gIGxldCBjb3VudD0wO1xuICB0YWJ1bGFyUmVwb3J0LmNvdW50c0RhdGE9bmV3IE1hcDxudW1iZXIsYW55PigpO1xuXG4gIGxldCBpPTA7XG4gIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhPVtdO1xuICBjb25zdCBzaWRlVG90YWwxPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbiAgaWYodGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg9PT0xKXtcbiAgd2hpbGUoaTx0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGgpe1xuICAgIGNvbnN0IGdyb3VwRGF0YT10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudF0uZ3JvdXBEYXRhW2ldO1xuICAgICBjb25zdCBzdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5zZXJpZXMuc2xpY2UoaSxpK2dyb3VwRGF0YSk7XG4gICAgIHN1YlNlcmllcy5mb3JFYWNoKChfZGF0YSkgPT4ge1xuICAgICAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChzdWJTZXJpZXMsX2RhdGEpKTtcbiAgICB9KTtcbiAgICBpPWkrZ3JvdXBEYXRhO1xuICB9XG5cblxuICBpPTA7XG4gIGNvbnN0IF9fRGF0YT1uZXcgTWFwPG51bWJlcixhbnk+KCk7XG4gIGNvbnN0IF9fRGF0YTE9bmV3IE1hcDxudW1iZXIsYW55PigpO1xuICBsZXQgZmlyc3RDb2x1bW5JbmRleD0wO1xuICBjb25zdCBncmFuZFRvdGFsPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gIGNvbnN0IGNvdW50c0dyYW5kVG90YWw9QXJyYXkodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICBsZXQgY291bnRUb3RhbD0wO1xuICB3aGlsZShpPHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aCl7XG4gICAgbGV0IGRhdGFTZXJpZXM9W107IGxldCBjb3VudERhdGFTZXJpZXM9W107XG4gICAgY29uc3QgY291bnRBcnJheT1BcnJheSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnVuaXF1ZVNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gICAgY29uc3QgaWFycj1bXTtcbiAgICBjb25zdCBncm91cERhdGE9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICBjb25zdCBzdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGEuc2xpY2UoaSxpK2dyb3VwRGF0YSk7XG4gICAgY29uc3QgZGF0YVN1YlNlcmllcz10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllcy5zbGljZShpLGkrZ3JvdXBEYXRhKTtcbiAgICBjb25zdCB1bmlxdWVTZXJpZXM9IFsuLi5uZXcgU2V0KHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzKV07XG4gICAgY29uc3QgY291bnRHcm91cERhdGE9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICBsZXQgY291bnREYXRhSW5kZXg9aTtcbiAgICBjb25zdCBlbmQ9aStjb3VudEdyb3VwRGF0YTtcbiAgICB1bmlxdWVTZXJpZXMuc29ydCgpO1xuICAgIHdoaWxlKGNvdW50RGF0YUluZGV4PGVuZCl7XG4gICAgICB1bmlxdWVTZXJpZXMuZm9yRWFjaCgoZWxlbWVudCxkSW5kZXgpID0+IHtcbiAgICAgICAgaWYoZWxlbWVudD09PXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzW2NvdW50RGF0YUluZGV4XSl7XG4gICAgICAgICAgY291bnRBcnJheS5zcGxpY2UoZEluZGV4LDEsdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGFbY291bnREYXRhSW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb3VudERhdGFJbmRleD1jb3VudERhdGFJbmRleCt0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLmdyb3VwRGF0YVtjb3VudERhdGFJbmRleF07XG4gICAgfVxuICAgICAgICAgICBkYXRhU2VyaWVzPVtdO1xuICAgICAgICAgIGNvbnN0IHJvd0NvdW50PVtdO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93c0RhdGE9W107XG4gICAgICAgICAgbGV0IHN1YlNlcmllc0luZGV4PTA7XG4gICAgICAgICAgaWYodGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg9PT0xKXtcbiAgICAgICAgICBjb25zdCBkYXRhU2VyaWVzVmFsdWVzPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gICAgICAgICAgd2hpbGUoc3ViU2VyaWVzSW5kZXg8c3ViU2VyaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcm93Q291bnQucHVzaChzdWJTZXJpZXNbc3ViU2VyaWVzSW5kZXhdKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93c0RhdGEucHVzaChkYXRhU3ViU2VyaWVzW3N1YlNlcmllc0luZGV4XSk7XG4gICAgICAgICAgICBpYXJyLnB1c2goZmlyc3RDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleC5mb3JFYWNoKChpbnQpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRmaXJzdENvbEludGVnZXJEYXRhKHRhYnVsYXJSZXBvcnQsaW50LGZpcnN0Q29sdW1uSW5kZXgsc3ViU2VyaWVzSW5kZXgsc3ViU2VyaWVzLGRhdGFTZXJpZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaXJzdENvbHVtbkluZGV4PWZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW3N1YlNlcmllc0luZGV4XTtcbiAgICAgICAgICAgIHN1YlNlcmllc0luZGV4PXN1YlNlcmllc0luZGV4K3N1YlNlcmllc1tzdWJTZXJpZXNJbmRleF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGluZGV4PTA7XG4gICAgICAgICAgaWFyci5mb3JFYWNoKChpbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGE9IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzW2ludF07XG4gICAgICAgICAgICAgIGxldCBkYXRhSW5kZXg9dGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMuaW5kZXhPZihkYXRhKTtcbiAgICAgICAgICAgICAgZGF0YUluZGV4PWRhdGFJbmRleCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IGFycj1kYXRhU2VyaWVzLnNsaWNlKGluZGV4LHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCtpbmRleCk7XG4gICAgICAgICAgICAgIGxldCAgdmFsdWU9ZGF0YUluZGV4O1xuICAgICAgICAgICAgICBhcnIuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXNWYWx1ZXMuc3BsaWNlKHZhbHVlLDEsZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdmFsdWUgKys7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGluZGV4PWluZGV4K3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aDtcblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHNpZGVUb3RhbD10aGlzLmdldFNpZGVUb3RhbChkYXRhU2VyaWVzLHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5KTtcbiAgICAgICAgICBkYXRhU2VyaWVzPWRhdGFTZXJpZXNWYWx1ZXM7XG4gICAgICAgICAgY291bnREYXRhU2VyaWVzPWRhdGFTZXJpZXNWYWx1ZXMuc2xpY2UoMCk7XG4gICAgICAgICAgY29uc3QgbWluPUFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgICBjb25zdCBtYXg9QXJyYXk8bnVtYmVyPigpO1xuXG4gICAgICAgICAgZGF0YVNlcmllc1ZhbHVlcy5mb3JFYWNoKChlbGVtZW50LGluZCkgPT4ge1xuICAgICAgICAgICAgaWYodGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheVtpbmRdLmluY2x1ZGVzKCdNaW4nKSl7XG4gICAgICAgICAgICAgIG1pbi5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICBpZihlbGVtZW50PGdyYW5kVG90YWxbaW5kXSl7XG4gICAgICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRdPWVsZW1lbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYodGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheVtpbmRdLmluY2x1ZGVzKCdNYXgnKSl7XG4gICAgICAgICAgICAgIG1heC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICBpZihlbGVtZW50PmdyYW5kVG90YWxbaW5kXSl7XG4gICAgICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRdPWVsZW1lbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBncmFuZFRvdGFsW2luZF09KGdyYW5kVG90YWxbaW5kXStlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWRlVG90YWwuZm9yRWFjaCgoZWxlbWVudCxpbmRleDEpID0+IHtcbiAgICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4MV0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgICAgICAgICAgc2lkZVRvdGFsW2luZGV4MV09dGhpcy5jb3VudEdyYW5kVG90YWxBdmcoZWxlbWVudCxkYXRhU2VyaWVzVmFsdWVzLmxlbmd0aC90YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpO1xuICAgICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09KHNpZGVUb3RhbDFbaW5kZXgxXStlbGVtZW50KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdNaW4nKSl7XG4gICAgICAgICAgICAgIHNpZGVUb3RhbFtpbmRleDFdPXRoaXMuY291bnRNaW4obWluKTtcbiAgICAgICAgICAgICAgaWYoc2lkZVRvdGFsW2luZGV4MV08c2lkZVRvdGFsMVtpbmRleDFdKXtcbiAgICAgICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09c2lkZVRvdGFsW2luZGV4MV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXgxXS5pbmNsdWRlcygnTWF4Jykpe1xuICAgICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50TWF4KG1heCk7XG4gICAgICAgICAgICAgIGlmKHNpZGVUb3RhbFtpbmRleDFdPnNpZGVUb3RhbDFbaW5kZXgxXSl7XG4gICAgICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPXNpZGVUb3RhbFtpbmRleDFdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPShzaWRlVG90YWwxW2luZGV4MV0rZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gY291bnRzR3JhbmRUb3RhbFxuICAgICAgICAgIGNvdW50QXJyYXkuZm9yRWFjaCgoY291bnREYXRhLGNvdW50SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvdW50c0dyYW5kVG90YWxbY291bnRJbmRleF09KGNvdW50c0dyYW5kVG90YWxbY291bnRJbmRleF0rY291bnREYXRhKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbD1ncmFuZFRvdGFsO1xuICAgICAgICAgIGNvdW50VG90YWw9Y291bnRUb3RhbCtyb3dDb3VudC5yZWR1Y2UoKGEyLCBiMikgPT4gYTIgKyBiMiwgMCk7XG4gICAgICAgICAgaWYodGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg+MSl7XG4gICAgICAgICAgICBfX0RhdGEuc2V0KGksZGF0YVNlcmllcyk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnRvdGFsUm93Q291bnQuc2V0KGkscm93Q291bnQucmVkdWNlKChhMSwgYjEpID0+IGExICsgYjEsIDApKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuc2lkZVRvdGFsLnNldChpLHNpZGVUb3RhbCk7XG4gICAgICAgICAgICBfX0RhdGExLnNldChpLGNvdW50RGF0YVNlcmllcyk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd0NvdW50SW5kZXguc2V0KGkscm93Q291bnQpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLnNldChpLGNvdW50QXJyYXkpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5kYXRhSW5kZXhTVG90YWwuc2V0KGNvdW50LGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgX19EYXRhLnNldChjb3VudCxkYXRhU2VyaWVzKTtcbiAgICAgICAgICAgIF9fRGF0YTEuc2V0KGNvdW50LGNvdW50RGF0YVNlcmllcyk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnRvdGFsUm93Q291bnQuc2V0KGNvdW50LHJvd0NvdW50LnJlZHVjZSgoYTIsIGIyKSA9PiBhMiArIGIyLCAwKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5zZXQoY291bnQsc2lkZVRvdGFsKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93Q291bnRJbmRleC5zZXQoY291bnQscm93Q291bnQpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLnNldChjb3VudCxjb3VudEFycmF5KTtcblxuICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNvdW50Kys7XG4gICAgaT1pK2dyb3VwRGF0YTtcblxuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aD4wKXtcbiAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsLmZvckVhY2goKGVsZW1lbnQsaW5kZXgpID0+IHtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5W2luZGV4XS5pbmNsdWRlcygnQXZnJykpe1xuICAgICAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsW2luZGV4XT10aGlzLmNvdW50R3JhbmRUb3RhbEF2ZyhlbGVtZW50LGNvdW50KTtcbiAgICB9XG4gIH0pO1xuICB9XG4gIHNpZGVUb3RhbDEuZm9yRWFjaCgoZWxlbWVudCxpbmRleEQpID0+IHtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleERdLmluY2x1ZGVzKCdBdmcnKSl7XG4gICAgICBzaWRlVG90YWwxW2luZGV4RF09dGhpcy5jb3VudEdyYW5kVG90YWxBdmcoZWxlbWVudCxjb3VudCk7XG4gICAgfVxuXG4gIH0pO1xuICB0YWJ1bGFyUmVwb3J0LnNlcmllc0RhdGE9X19EYXRhO1xuICB0aGlzLmRhdGFSZW5kZXIuZW1pdChfX0RhdGEpO1xuICBjb25zdCBpbnRlZ2VyQXJyYXlWYWx1ZXM9QXJyYXkodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKnRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzLmxlbmd0aCkuZmlsbCgwKTtcbiAgdGFidWxhclJlcG9ydD10aGlzLmdldEludGVnZXJJbmRleChpbnRlZ2VyQXJyYXlWYWx1ZXMsdGFidWxhclJlcG9ydCk7XG4gIHRhYnVsYXJSZXBvcnQuZGF0YVJlbmRlcj1fX0RhdGExO1xuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWw9dGFidWxhclJlcG9ydC5ncmFuZFRvdGFsLmNvbmNhdChzaWRlVG90YWwxKTtcbiAgdGFidWxhclJlcG9ydC5zaWRlR3JhbmRUb3RhbD1zaWRlVG90YWwxLmNvbmNhdChjb3VudFRvdGFsKTtcbiAgdGFidWxhclJlcG9ydC5jb3VudHNUb3RhbD1uZXcgQXJyYXk8bnVtYmVyPigpO1xuICB0YWJ1bGFyUmVwb3J0LmNvdW50c1RvdGFsPWNvdW50c0dyYW5kVG90YWwuY29uY2F0KGNvdW50VG90YWwpO1xufVxuXG4gIGlmKHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09Mil7XG4gICAgdGFidWxhclJlcG9ydD10aGlzLmdldFNlY29uZENvbHVtbih0YWJ1bGFyUmVwb3J0KTtcbiAgICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQuc3ViVG90YWwpe1xuICAgICAgdGFidWxhclJlcG9ydD10YWJ1bGFyUmVwb3J0LnN1YlRvdGFsVG9nZ2xlKHRhYnVsYXJSZXBvcnQpO1xuICB9XG5cblxuICBpZih0YWJ1bGFyUmVwb3J0LnN1YlRvdGFsICYmICF0YWJ1bGFyUmVwb3J0LnJvd0NvdW50KXtcbiAgICAgIHRhYnVsYXJSZXBvcnQ9dGFidWxhclJlcG9ydC5zdWJUb3RhbFRvZ2dsZSh0YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG4gIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxuXG5jb3VudEdyYW5kVG90YWxBdmcoZGF0YTogbnVtYmVyLGNvdW50OiBudW1iZXIpOiBudW1iZXJ7XG4gIHJldHVybiAocGFyc2VGbG9hdCgoZGF0YS9jb3VudCkudG9GaXhlZCgyKSkpO1xufVxuXG4vLyBjb3VudEdyYW5kVG90YWxNaW4oc2VyaWVzOilcblxuLyoqIHJldHVybnMgc3VtIG9mIGludGVnZXIgIGNvbHVtbnMgc3ViU2VyaWVzIGZvciBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmNvdW50U3VtKHNlcmllczogQXJyYXk8bnVtYmVyPik6IG51bWJlcntcbiAgbGV0IHRvdGFsID0gMDtcbiAgZm9yKGNvbnN0IGRhdGEgb2Ygc2VyaWVzKXtcbiAgICB0b3RhbCArPSBOdW1iZXIoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIHRvdGFsO1xufVxuXG4vKiogcmV0dXJucyBBdmVyYWdlIG9mIGludGVnZXIgIGNvbHVtbnMgc3ViU2VyaWVzIGZvciBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmNvdW50QXZnKHNlcmllczogQXJyYXk8bnVtYmVyPik6IG51bWJlcntcbiAgbGV0IHRvdGFsID0gMDtcbiAgZm9yKGNvbnN0IGRhdGEgb2Ygc2VyaWVzKXtcbiAgICB0b3RhbCArPSBOdW1iZXIoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIChwYXJzZUZsb2F0KCh0b3RhbC9zZXJpZXMubGVuZ3RoKS50b0ZpeGVkKDIpKSk7XG59XG5cbi8qKiByZXR1cm5zIE1heCBvZiBpbnRlZ2VyIGNvbHVtbnMgc3ViU2VyaWVzIGZvciBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmNvdW50TWF4KHNlcmllczogQXJyYXk8bnVtYmVyPik6IG51bWJlcntcbiAgcmV0dXJuICBNYXRoLm1heCguLi5zZXJpZXMpO1xufVxuXG4vKiogcmV0dXJucyBtaW4gb2YgaW50ZWdlciAgY29sdW1ucyBzdWJTZXJpZXMgZm9yIGNvbHVtbiBncm91cGluZ1xuICpcbiAqIEBwYXJhbSBBcnJheVxuICpcbiAqL1xuY291bnRNaW4oc2VyaWVzOiBBcnJheTxudW1iZXI+KTogbnVtYmVye1xuICByZXR1cm4gIE1hdGgubWluKC4uLnNlcmllcyk7XG59XG5cbi8qKiByZXR1cm5zIGNvdW50IG9mIHVuaXF1ZSBkYXRhIGZvciAgaW50ZWdlciBjb2x1bW5zIHN1YlNlcmllcyBpbiBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmdldFVuaXF1ZShzZXJpZXM6IEFycmF5PGFueT4pOiBudW1iZXJ7XG4gIHJldHVybiBbLi4ubmV3IFNldChzZXJpZXMpXS5sZW5ndGg7XG5cbn1cblxuLyoqIHRvIGFkZCBpbnRlZ2VyIGNvbHVtbiBpbiBJbnRlZ2VyQXJyYXlcbiAqXG4gKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICpcbiAqL1xuZ2V0SW50ZWdlckFycmF5KHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICBjb25zdCBkYXRhPVtdO1xuICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlLGluZGV4KSA9PiB7XG4gICAgICBpZiggIWF0dHJpYnV0ZS5yb3dTcGFuICYmICFhdHRyaWJ1dGUuY29sU3Bhbil7XG4gICAgICAgIGlmKGF0dHJpYnV0ZS5hZ2dyZWdhdGUuc2hvd1VuaXF1ZUNvdW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5wdXNoKCd1bmlxdWUgJythdHRyaWJ1dGUubGFiZWwpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXgucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgICAgICBkYXRhLnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihhdHRyaWJ1dGUudHlwZT09PSdpbnQnICYmICFhdHRyaWJ1dGUucm93U3BhbiAmJiAhYXR0cmlidXRlLmNvbFNwYW4pe1xuICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleC5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgaWYoYXR0cmlidXRlLmFnZ3JlZ2F0ZS5zaG93U3VtKVxuICAgICAgICB7XG4gICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5LnB1c2goJ1N1bSAnK2F0dHJpYnV0ZS5sYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihhdHRyaWJ1dGUuYWdncmVnYXRlLnNob3dBdmcpXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhLnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkucHVzaCgnQXZnICcrYXR0cmlidXRlLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGF0dHJpYnV0ZS5hZ2dyZWdhdGUuc2hvd01heClcbiAgICAgICAge1xuICAgICAgICAgIGRhdGEucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5wdXNoKCdNYXggJythdHRyaWJ1dGUubGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoYXR0cmlidXRlLmFnZ3JlZ2F0ZS5zaG93TWluKVxuICAgICAgICB7XG4gICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5LnB1c2goJ01pbiAnK2F0dHJpYnV0ZS5sYWJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgdGFidWxhclJlcG9ydC5pbnRlZ2VyRGF0YT1kYXRhO1xuXG4gIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxuXG4vKiogdG8gY291bnQgY2xvbmUgZGF0YSBmb3Igc2luZ2xlIGNvbHVtbiBncm91cGluZ1xuICpcbiAqIEBwYXJhbSB0YWJ1bGFyUmVwb3J0XG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gYXR0cmlidXRlRGF0YVxuICpcbiAqL1xuZ2V0Q2xvbmVEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQsIGluZGV4OiBudW1iZXIsYXR0cmlidXRlOiBBdHRyaWJ1dGVEYXRhKTogQXR0cmlidXRlRGF0YXtcbiAgbGV0IHN0YXJ0SW5kZXg9MDtcbiAgY29uc3QgY2xvbmVTZXJpZXM9W107XG4gIGxldCBnZEluZGV4PTA7XG4gIHdoaWxlKHN0YXJ0SW5kZXg8PSAodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbmRleCAtIDFdLmdyb3VwRGF0YS5sZW5ndGgtMSkpe1xuICAgIGNvbnN0IGRhdGFTZXJpZXM9W107XG4gICAgZ2RJbmRleD10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2luZGV4IC0gMV0uZ3JvdXBEYXRhW3N0YXJ0SW5kZXhdO1xuICAgIGNvbnN0IHN1YlNlcmllcyA9IGF0dHJpYnV0ZS5zZXJpZXMuc2xpY2Uoc3RhcnRJbmRleCxzdGFydEluZGV4K2dkSW5kZXgpO1xuICAgIHN1YlNlcmllcy5mb3JFYWNoKChzdWJTZXJpZXNEYXRhKSA9PiB7XG4gICAgICBhdHRyaWJ1dGUuZ3JvdXBEYXRhLnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoc3ViU2VyaWVzLHN1YlNlcmllc0RhdGEpKTtcbiAgICAgIC8vIHRvIHJlcGxhY2UgcmVwZWF0ZWQgc3ViU2VyaWVzRGF0YVxuICAgICAgaWYoZGF0YVNlcmllcy5pbmNsdWRlcyhzdWJTZXJpZXNEYXRhKSl7XG4gICAgICAgIGRhdGFTZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgICAgY2xvbmVTZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgIH1cbiAgICAgIGVsc2V7XG4gICAgICAgIGRhdGFTZXJpZXMucHVzaChzdWJTZXJpZXNEYXRhKTtcbiAgICAgICAgY2xvbmVTZXJpZXMucHVzaChzdWJTZXJpZXNEYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhdHRyaWJ1dGUuY2xvbmVHcm91cERhdGE9YXR0cmlidXRlLmdyb3VwRGF0YS5zbGljZSgwKTtcbiAgICBzdGFydEluZGV4PXN0YXJ0SW5kZXgrZ2RJbmRleDtcblxuICB9XG4gIGF0dHJpYnV0ZS5jbG9uZVNlcmllcz1jbG9uZVNlcmllcztcblxuICByZXR1cm4gYXR0cmlidXRlO1xufVxuLyoqIHRvIGNvdW50IGNsb25lIGRhdGEgZm9yIGRvdWJsZSBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gdGFidWxhclJlcG9ydFxuICogQHBhcmFtIG51bWJlclxuICpcbiAqL1xuZ2V0U2Vjb25kQ29sRGF0YSh0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0LCBfaW5kZXg6IG51bWJlcik6IFRhYnVsYXJSZXBvcnR7XG4gIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbX2luZGV4LTFdLnVuaXF1ZVNlcmllcy5mb3JFYWNoKCh1bmlxdWUpID0+IHtcbiAgICBjb25zdCBkYXRhPVtdO1xuICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbX2luZGV4LTFdLnNlcmllcy5mb3JFYWNoKChzZXJpZXMsaW5kZXgpID0+IHtcbiAgICAgICAgaWYodW5pcXVlPT09c2VyaWVzKXtcbiAgICAgICAgICBpZighZGF0YS5pbmNsdWRlcyh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW19pbmRleF0uc2VyaWVzW2luZGV4XSkpe1xuICAgICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbX2luZGV4XS5zZXJpZXNbaW5kZXhdKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzLnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tfaW5kZXhdLnNlcmllc1tpbmRleF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyB0YWJ1bGFyUmVwb3J0LnNlY29uZFNlcmllcz1cbiAgICAgIHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5zZXQodW5pcXVlLGRhdGEpO1xuICAgICAgZGF0YS5mb3JFYWNoKCgpID0+IHtcbiAgICAgICAgdGFidWxhclJlcG9ydC5maXJzdENvbFNlcmllcy5wdXNoKHVuaXF1ZSk7XG5cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXM9Wy4uLm5ldyBTZXQodGFidWxhclJlcG9ydC5maXJzdENvbFNlcmllcyldO1xuICAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG5cbi8qKiBjcmVhdGUgc2VyaWVzIHdpdGggcm93IGNvdW50XG4gKlxuICogQHBhcmFtIHRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRTZXJpZXNXaXRoQ291bnQoc3dhcDE6IEFycmF5PG51bWJlcj4saW50ZWdlckFycmF5OiBBcnJheTxhbnk+LHJvd0NvdW50OiBBcnJheTxudW1iZXI+LHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBBcnJheTxudW1iZXI+e1xuICBsZXQgaW50ZWdlckFycmF5SW5kZXg9aW50ZWdlckFycmF5Lmxlbmd0aC0xOyBsZXQgZGF0YUluZGV4PTA7XG4gdGhpcy5jbG9uZUludGVnZXJDb3VudD1BcnJheShzd2FwMS5sZW5ndGgpLmZpbGwoMCk7XG4gY29uc3QgY291bnRJbmRleD1BcnJheShzd2FwMS5sZW5ndGgpLmZpbGwoMCk7XG4gIHdoaWxlKGludGVnZXJBcnJheUluZGV4PHN3YXAxLmxlbmd0aCl7XG4gICAgaWYoc3dhcDFbaW50ZWdlckFycmF5SW5kZXhdPjApe1xuICAgICAgY291bnRJbmRleC5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwwLG51bGwpO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgY291bnRJbmRleC5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwwLG51bGwpO1xuICAgIH1cbiAgICBzd2FwMS5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwwLHJvd0NvdW50W2RhdGFJbmRleF0pO1xuICAgIHRoaXMuY2xvbmVJbnRlZ2VyQ291bnQuc3BsaWNlKGludGVnZXJBcnJheUluZGV4KzEsMCwnY291bnQnKTtcbiAgICBpZihpbnRlZ2VyQXJyYXlJbmRleDx0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5Lmxlbmd0aCl7XG4gICAgICB0aGlzLmNsb25lSW50ZWdlckNvdW50LnNwbGljZShpbnRlZ2VyQXJyYXlJbmRleCsxLDEsJ2NvdW50Jyk7fVxuICAgIGludGVnZXJBcnJheUluZGV4PWludGVnZXJBcnJheUluZGV4K2ludGVnZXJBcnJheS5sZW5ndGgrMTtcbiAgICBkYXRhSW5kZXgrKztcbiAgfVxuICByZXR1cm4gc3dhcDE7XG59XG5cbi8qKiBjb3VudCBJbnRlZ2VyIGNvbHVtbnMgc3ViU2VyaWVzIERhdGEgZm9yIHNpbmdsZSBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gdGFidWxhclJlcG9ydFxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIEFycmF5XG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmdldGZpcnN0Q29sSW50ZWdlckRhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCxpbnQ6IG51bWJlcixmaXJzdENvbHVtbkluZGV4OiBudW1iZXIsajogbnVtYmVyLHN1YlNlcmllczogQXJyYXk8YW55Pixzd2FwOiBBcnJheTxudW1iZXI+KTogQXJyYXk8bnVtYmVyPntcbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93VW5pcXVlQ291bnQpe1xuICAgIHN3YXAucHVzaCh0aGlzLmdldFVuaXF1ZSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93U3VtKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudFN1bSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93QXZnKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudEF2Zyh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93TWF4KXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudE1heCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93TWluKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudE1pbih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cblxuICByZXR1cm4gc3dhcDtcbn1cblxuLyoqIGNvdW50IEludGVnZXIgY29sdW1ucyBzdWJTZXJpZXMgRGF0YSBmb3IgZG91YmxlIGNvbHVtbiBncm91cGluZ1xuICpcbiAqIEBwYXJhbSB0YWJ1bGFyUmVwb3J0XG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gQXJyYXlcbiAqIEBwYXJhbSBBcnJheVxuICpcbiAqL1xuZ2V0U2Vjb25kQ29sSW50ZWdlckRhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCxpbnQ6IG51bWJlcixzZWNvbmRDb2x1bW5JbmRleDogbnVtYmVyLG46IG51bWJlcixzd2FwOiBBcnJheTxudW1iZXI+LHh5ejogQXJyYXk8YW55Pik6IEFycmF5PG51bWJlcj57XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd1VuaXF1ZUNvdW50KXtcbiAgICBzd2FwLnB1c2godGhpcy5nZXRVbmlxdWUodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShzZWNvbmRDb2x1bW5JbmRleCxzZWNvbmRDb2x1bW5JbmRleCt4eXpbbl0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93U3VtKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudFN1bSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKHNlY29uZENvbHVtbkluZGV4LHNlY29uZENvbHVtbkluZGV4K3h5eltuXSkpKTtcbiAgfVxuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uYWdncmVnYXRlLnNob3dBdmcpe1xuICAgIHN3YXAucHVzaCh0aGlzLmNvdW50QXZnKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5zZXJpZXMuc2xpY2Uoc2Vjb25kQ29sdW1uSW5kZXgsc2Vjb25kQ29sdW1uSW5kZXgreHl6W25dKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd01heCl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRNYXgodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShzZWNvbmRDb2x1bW5JbmRleCxzZWNvbmRDb2x1bW5JbmRleCt4eXpbbl0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93TWluKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudE1pbih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKHNlY29uZENvbHVtbkluZGV4LHNlY29uZENvbHVtbkluZGV4K3h5eltuXSkpKTtcbiAgfVxuXG4gIHJldHVybiBzd2FwO1xufVxuXG5cbi8qKiBjb3VudCBob3Jpem9udGFsIGdyYW5kIFRvdGFsXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmdldFNpZGVUb3RhbChzd2FwOiBBcnJheTxudW1iZXI+LGludGVnZXJBcnJheTogQXJyYXk8YW55Pik6IEFycmF5PG51bWJlcj57XG4gIGxldCB0b3RhbEluZGV4PTA7IGxldCBpbnRlZ2VyQXJyYXlJbmRleD0wO1xuICBjb25zdCBzaWRlVG90YWw9QXJyYXkoaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbiAgd2hpbGUodG90YWxJbmRleDxpbnRlZ2VyQXJyYXkubGVuZ3RoKXtcbiAgICBpbnRlZ2VyQXJyYXlJbmRleD10b3RhbEluZGV4O1xuICAgIHNpZGVUb3RhbFt0b3RhbEluZGV4XT1zd2FwW2ludGVnZXJBcnJheUluZGV4XTtcbiAgICB3aGlsZShpbnRlZ2VyQXJyYXlJbmRleCtpbnRlZ2VyQXJyYXkubGVuZ3RoPHN3YXAubGVuZ3RoKXtcbiAgICAgIHNpZGVUb3RhbFt0b3RhbEluZGV4XT1zaWRlVG90YWxbdG90YWxJbmRleF0rc3dhcFtpbnRlZ2VyQXJyYXlJbmRleCtpbnRlZ2VyQXJyYXkubGVuZ3RoXTtcbiAgICAgIGludGVnZXJBcnJheUluZGV4PWludGVnZXJBcnJheUluZGV4K2ludGVnZXJBcnJheS5sZW5ndGg7XG4gICAgfVxuICAgIHRvdGFsSW5kZXgrKztcblxuICB9XG4gIHJldHVybiBzaWRlVG90YWw7XG59XG5cbi8qKiBnZXQgU2Vjb25kIGNvbHVtbiBzZXJpZXMgZ3JvdXBpbmcgZGF0YVxuICpcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBudW1iZXJcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRTZXJpZXNEYXRhKGlhcnI6IEFycmF5PG51bWJlcj4sdGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCxyQ291bnQ6IG51bWJlcixjQ291bnQ6IG51bWJlcixzd2FwOiBBcnJheTxudW1iZXI+LGE6IEFycmF5PG51bWJlcj4pOiBBcnJheTxudW1iZXI+e1xuICBsZXQgaW5kZXg9MDtcbiAgaWFyci5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgbGV0IGlBcnJheUluZGV4PXRhYnVsYXJSZXBvcnQuZmlyc3RDb2xTZXJpZXMuaW5kZXhPZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCsxXS5zZXJpZXNbZWxlbWVudF0pO1xuICAgICAgY29uc3QgbWF4PWlBcnJheUluZGV4K3RhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5nZXQodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrMV0uc2VyaWVzW2VsZW1lbnRdKS5sZW5ndGg7XG4gICAgICB3aGlsZShpQXJyYXlJbmRleDxtYXgpe1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzW2lBcnJheUluZGV4XT09PXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzW2VsZW1lbnRdKXtcbiAgICAgICAgICAgIGNvbnN0IGFycj1zd2FwLnNsaWNlKGluZGV4LHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCtpbmRleCk7XG4gICAgICAgICAgICBsZXQgIHZhbHVlPWlBcnJheUluZGV4KnRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgYS5zcGxpY2UodmFsdWUsMSxzd2FwW2luZGV4XSk7XG4gICAgICAgICAgICAgIGFyci5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgYS5zcGxpY2UodmFsdWUsMSxkYXRhKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSArKztcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGluZGV4PWluZGV4K3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpQXJyYXlJbmRleCsrO1xuICAgICAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuXG4vKiogZ2V0IFNlY29uZCBjb2x1bW4gZGF0YVxuICpcbiAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gKlxuICovXG5nZXRTZWNvbmRDb2x1bW4odGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG5jb25zdCByQ291bnQ9dGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgtMTtcbmNvbnN0IGNDb3VudD10YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aDtcbmxldCBjb3VudD0wO1xuXG5sZXQgaT0wO1xudGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGE9W107XG5jb25zdCBzaWRlVG90YWwxPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbndoaWxlKGk8dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMubGVuZ3RoKXtcbiAgY29uc3QgZ3JvdXBEYXRhPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICBjb25zdCBzdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5zZXJpZXMuc2xpY2UoaSxpK2dyb3VwRGF0YSk7XG4gICBzdWJTZXJpZXMuZm9yRWFjaCgoX2RhdGEpID0+IHtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLmdyb3VwRGF0YS5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KHN1YlNlcmllcyxfZGF0YSkpO1xuICB9KTtcbiAgaT1pK2dyb3VwRGF0YTtcbn1cbmk9MDtcbmNvbnN0IF9fRGF0YT1uZXcgTWFwPG51bWJlcixhbnk+KCk7XG5jb25zdCBfX0RhdGExPW5ldyBNYXA8bnVtYmVyLGFueT4oKTtcbmxldCBzdWJTZXJpZXNJbmRleD0wO1xubGV0IHNlY29uZENvbHVtbkluZGV4PTA7XG5jb25zdCBncmFuZFRvdGFsPUFycmF5KHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQubGVuZ3RoKnRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbmNvbnN0IGNvdW50R3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgpLmZpbGwoMCk7XG5sZXQgY291bnRUb3RhbD0wO1xuY29uc3QgY291bnRzR3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG53aGlsZShpPHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aCl7XG4gIGNvbnN0IHN1YlNlcmllc0RhdGFDb3VudD1bXTtcbiAgbGV0IHNlcmllc0RhdGE9W107IGxldCBjb3VudFNlcmllc0RhdGE9W107XG4gIGNvbnN0IGlhcnI9W107XG4gICBjb25zdCBncm91cERhdGE9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICAgICAgc2VyaWVzRGF0YT1bXTtcbiAgICAgICAgY29uc3Qgcm93Q291bnQ9W107XG4gICAgICAgIGNvbnN0IGRhdGFTZXJpZXNWYWx1ZXM9QXJyYXkodGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKS5maWxsKDApO1xuICAgICAgICBjb25zdCBncm91cERhdGFTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICAgICAgY29uc3QgY291bnRBcnJheT1BcnJheSh0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gICAgICAgIGNvbnN0IHN1YlNlcmllcz10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCsxXS5zZXJpZXMuc2xpY2UoaSxpK2dyb3VwRGF0YVNlcmllcyk7XG4gICAgICAgIGNvbnN0IHN1YlNlcmllc0dyb3VwRGF0YT1bXTtcbiAgICAgICAgIHN1YlNlcmllcy5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgIHN1YlNlcmllc0dyb3VwRGF0YS5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KHN1YlNlcmllcyxkYXRhKSk7XG4gICAgICAgICB9KTtcbiAgICAgICAgIGxldCBzU2VyaWVzR0RJbmRleD0wO1xuXG5cbiAgICAgICAgIHdoaWxlKHNTZXJpZXNHREluZGV4PHN1YlNlcmllc0dyb3VwRGF0YS5sZW5ndGgpe1xuICAgICAgICAgIGNvbnN0IHNTZXJpZXMgPSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllcy5zbGljZShzdWJTZXJpZXNJbmRleCxzdWJTZXJpZXNJbmRleCtzdWJTZXJpZXNHcm91cERhdGFbc1Nlcmllc0dESW5kZXhdKSk7XG4gICAgICAgICAgc1Nlcmllcy5mb3JFYWNoKChkYXRhMSkgPT4ge1xuICAgICAgICAgICAgc3ViU2VyaWVzRGF0YUNvdW50LnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoc1NlcmllcyxkYXRhMSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN1YlNlcmllc0luZGV4PXN1YlNlcmllc0luZGV4K3N1YlNlcmllc0dyb3VwRGF0YVtzU2VyaWVzR0RJbmRleF07XG4gICAgICAgICAgc1Nlcmllc0dESW5kZXg9c1Nlcmllc0dESW5kZXgrc3ViU2VyaWVzR3JvdXBEYXRhW3NTZXJpZXNHREluZGV4XTtcbiAgICAgICAgIH1cbiAgICAgICAgIGxldCBzU2VyaWVzR0RDSW5kZXg9MDtcbiAgICAgICAgd2hpbGUoc1Nlcmllc0dEQ0luZGV4PHN1YlNlcmllc0RhdGFDb3VudC5sZW5ndGgpe1xuICAgICAgICAgIGNvbnN0IGRhdGE9IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzW2krc1Nlcmllc0dEQ0luZGV4XTtcbiAgICAgICAgICBsZXQgc2VyaWVzPVtdO1xuICAgICAgICAgIHNlcmllcz10YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHN1YlNlcmllc1tzU2VyaWVzR0RDSW5kZXhdKTtcbiAgICAgICAgICBjb25zdCB4PXRhYnVsYXJSZXBvcnQuZmlyc3RDb2xTZXJpZXMuaW5kZXhPZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCsxXS5zZXJpZXNbaStzU2VyaWVzR0RDSW5kZXhdKTtcbiAgICAgICAgICBjb25zdCBtPShzZXJpZXMuaW5kZXhPZihkYXRhKSk7XG4gICAgICAgICAgY291bnRBcnJheS5zcGxpY2UobSt4LDEsc3ViU2VyaWVzRGF0YUNvdW50W3NTZXJpZXNHRENJbmRleF0pO1xuICAgICAgICAgIHJvd0NvdW50LnB1c2goc3ViU2VyaWVzRGF0YUNvdW50W3NTZXJpZXNHRENJbmRleF0pO1xuICAgICAgICAgIGlhcnIucHVzaChzZWNvbmRDb2x1bW5JbmRleCk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXguZm9yRWFjaCgoaW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldFNlY29uZENvbEludGVnZXJEYXRhKHRhYnVsYXJSZXBvcnQsaW50LHNlY29uZENvbHVtbkluZGV4LHNTZXJpZXNHRENJbmRleCxzZXJpZXNEYXRhLHN1YlNlcmllc0RhdGFDb3VudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2Vjb25kQ29sdW1uSW5kZXg9c2Vjb25kQ29sdW1uSW5kZXgrc3ViU2VyaWVzRGF0YUNvdW50W3NTZXJpZXNHRENJbmRleF07XG4gICAgICAgICAgc1Nlcmllc0dEQ0luZGV4PXNTZXJpZXNHRENJbmRleCtzdWJTZXJpZXNEYXRhQ291bnRbc1Nlcmllc0dEQ0luZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpZGVUb3RhbD10aGlzLmdldFNpZGVUb3RhbChzZXJpZXNEYXRhLHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5KTtcbiAgICAgICAgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoIT09MCl7XG4gICAgICAgIHNlcmllc0RhdGE9dGhpcy5nZXRTZXJpZXNEYXRhKGlhcnIsdGFidWxhclJlcG9ydCxyQ291bnQsY0NvdW50LHNlcmllc0RhdGEsZGF0YVNlcmllc1ZhbHVlcyk7XG4gICAgICAgfVxuICAgICAgICBjb3VudFNlcmllc0RhdGE9ZGF0YVNlcmllc1ZhbHVlcy5zbGljZSgwKTtcbiAgICAgICAgY291bnRBcnJheS5mb3JFYWNoKChjb3VudERhdGEsY291bnRJbmRleCkgPT4ge1xuICAgICAgICAgIGNvdW50c0dyYW5kVG90YWxbY291bnRJbmRleF09KGNvdW50c0dyYW5kVG90YWxbY291bnRJbmRleF0rY291bnREYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXk9W107XG4gICAgICAgIHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5mb3JFYWNoKChlbGVtZW50MSkgPT4ge1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheS5wdXNoKGVsZW1lbnQxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1pbj1BcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgY29uc3QgbWF4PUFycmF5PG51bWJlcj4oKTtcblxuXG4gICAgICAgIGRhdGFTZXJpZXNWYWx1ZXMuZm9yRWFjaCgoZWxlbWVudCxpbmRleCkgPT4ge1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kZXhdLmluY2x1ZGVzKCdNaW4nKSl7XG4gICAgICAgICAgICBtaW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmKGVsZW1lbnQ8Z3JhbmRUb3RhbFtpbmRleF0pe1xuICAgICAgICAgICAgICBncmFuZFRvdGFsW2luZGV4XT1lbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kZXhdLmluY2x1ZGVzKCdNYXgnKSl7XG4gICAgICAgICAgICBtYXgucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmKGVsZW1lbnQ+Z3JhbmRUb3RhbFtpbmRleF0pe1xuICAgICAgICAgICAgICBncmFuZFRvdGFsW2luZGV4XT1lbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgIGdyYW5kVG90YWxbaW5kZXhdPShncmFuZFRvdGFsW2luZGV4XStlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsPWdyYW5kVG90YWw7XG4gICAgICAgIHNpZGVUb3RhbC5mb3JFYWNoKChlbGVtZW50LGluZGV4MSkgPT4ge1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4MV0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgICAgICAgIHNpZGVUb3RhbFtpbmRleDFdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKGVsZW1lbnQsZGF0YVNlcmllc1ZhbHVlcy5sZW5ndGgvdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT0oc2lkZVRvdGFsMVtpbmRleDFdK2VsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4MV0uaW5jbHVkZXMoJ01pbicpKXtcbiAgICAgICAgICAgIHNpZGVUb3RhbFtpbmRleDFdPXRoaXMuY291bnRNaW4obWluKTtcbiAgICAgICAgICAgIGlmKHNpZGVUb3RhbFtpbmRleDFdPHNpZGVUb3RhbDFbaW5kZXgxXSl7XG4gICAgICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT1zaWRlVG90YWxbaW5kZXgxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdNYXgnKSl7XG4gICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50TWF4KG1heCk7XG4gICAgICAgICAgICBpZihzaWRlVG90YWxbaW5kZXgxXT5zaWRlVG90YWwxW2luZGV4MV0pe1xuICAgICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09c2lkZVRvdGFsW2luZGV4MV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPShzaWRlVG90YWwxW2luZGV4MV0rZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY291bnRUb3RhbD1jb3VudFRvdGFsK3Jvd0NvdW50LnJlZHVjZSgoYTIsIGIyKSA9PiBhMiArIGIyLCAwKTtcbiAgICAgICAgaWYodGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg+MSl7XG4gICAgICAgICAgX19EYXRhLnNldChpLHNlcmllc0RhdGEpO1xuICAgICAgICAgIF9fRGF0YTEuc2V0KGksY291bnRTZXJpZXNEYXRhKTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnRvdGFsUm93Q291bnQuc2V0KGkscm93Q291bnQucmVkdWNlKChhMSwgYjEpID0+IGExICsgYjEsIDApKTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5zZXQoaSxzaWRlVG90YWwpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93Q291bnRJbmRleC5zZXQoaSxyb3dDb3VudCk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLnNldChpLGNvdW50QXJyYXkpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuZGF0YUluZGV4U1RvdGFsLnNldChjb3VudCxpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIF9fRGF0YS5zZXQoY291bnQsc2VyaWVzRGF0YSk7XG4gICAgICAgICAgX19EYXRhMS5zZXQoY291bnQsY291bnRTZXJpZXNEYXRhKTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnRvdGFsUm93Q291bnQuc2V0KGNvdW50LHJvd0NvdW50LnJlZHVjZSgoYTEsIGIxKSA9PiBhMSArIGIxLCAwKSk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuc2V0KGNvdW50LHNpZGVUb3RhbCk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5yb3dDb3VudEluZGV4LnNldChjb3VudCxyb3dDb3VudCk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLnNldChjb3VudCxjb3VudEFycmF5KTtcblxuICAgICAgICB9XG5cbiAgICBjb3VudCsrO1xuICBpPWkrZ3JvdXBEYXRhO1xufVxuXG4gIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbC5mb3JFYWNoKChlbGVtZW50LGluZGV4RGF0YSkgPT4ge1xuICAgIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kZXhEYXRhXS5pbmNsdWRlcygnQXZnJykpe1xuICAgICAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsW2luZGV4RGF0YV09dGhpcy5jb3VudEdyYW5kVG90YWxBdmcoZWxlbWVudCxjb3VudCk7XG4gICAgfVxuICB9KTtcbiAgc2lkZVRvdGFsMS5mb3JFYWNoKChfZWxlbWVudERhdGEsaW5kZXhEKSA9PiB7XG4gICAgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXhEXS5pbmNsdWRlcygnQXZnJykpe1xuICAgICAgc2lkZVRvdGFsMVtpbmRleERdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKF9lbGVtZW50RGF0YSxjb3VudCk7XG4gICAgfVxuXG4gIH0pO1xudGhpcy5kYXRhUmVuZGVyLmVtaXQoX19EYXRhKTtcbnRhYnVsYXJSZXBvcnQuc2VyaWVzRGF0YT1fX0RhdGE7XG50YWJ1bGFyUmVwb3J0LmRhdGFSZW5kZXI9X19EYXRhMTtcbmNvbnN0IGludGVnZXJBcnJheVZhbHVlcz1BcnJheSh0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG50aGlzLmdldEludGVnZXJJbmRleChpbnRlZ2VyQXJyYXlWYWx1ZXMsdGFidWxhclJlcG9ydCk7XG50YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWw9Z3JhbmRUb3RhbDtcbnRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbD10YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwuY29uY2F0KHNpZGVUb3RhbDEpO1xudGFidWxhclJlcG9ydC5zaWRlR3JhbmRUb3RhbD1zaWRlVG90YWwxLmNvbmNhdChjb3VudFRvdGFsKTtcbnRhYnVsYXJSZXBvcnQuY291bnRzVG90YWw9bmV3IEFycmF5PG51bWJlcj4oKTtcbnRhYnVsYXJSZXBvcnQuY291bnRzVG90YWw9Y291bnRzR3JhbmRUb3RhbC5jb25jYXQoY291bnRUb3RhbCk7XG5yZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuLyoqIHRvIGdldCBzZXJpZXMgZGF0YSB3aXRoIHJvdyBjb3VudFxuICpcbiAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gKlxuICovXG5yb3dDb3VudERhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG4gIGNvbnN0IGNvdW50R3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgpLmZpbGwoMCk7XG4gIGNvbnN0IHRvdGFsPXRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPjE/IEFycmF5KHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzLmxlbmd0aCkuZmlsbCgwKSA6QXJyYXkodGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5mb3JFYWNoKChlbGVtZW50LGluZGV4KSA9PntcbiAgICBsZXQgY291bnREYXRhU2VyaWVzPVtdO1xuXG4gICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuZGF0YVJlbmRlci5nZXQoaW5kZXgpICYmIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCE9PTApe1xuICAgICAgICAgIGxldCBkYXRhPVtdO1xuICAgICAgICAgIGNvdW50RGF0YVNlcmllcz10YWJ1bGFyUmVwb3J0LnNlcmllc0RhdGEuZ2V0KGluZGV4KS5zbGljZSgwKTtcbiAgICAgICAgICAgIGRhdGE9KHRoaXMuZ2V0U2VyaWVzV2l0aENvdW50KGNvdW50RGF0YVNlcmllcyxcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5LHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5nZXQoaW5kZXgpLHRhYnVsYXJSZXBvcnQpKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuZGF0YVJlbmRlci5zZXQoaW5kZXgsZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHg9MDtcbiAgICAgICAgY291bnREYXRhU2VyaWVzLmZvckVhY2goKGVsZW1lbnQxLGluZGV4MSkgPT4ge1xuICAgICAgICAgIGlmKHRoaXMuY2xvbmVJbnRlZ2VyQ291bnRbaW5kZXgxXT09PSdjb3VudCcgfHwgaW5kZXgxPT09Y291bnREYXRhU2VyaWVzLmxlbmd0aCl7XG4gICAgICAgICAgICB0b3RhbFt4XT0odG90YWxbeF0rZWxlbWVudDEpO1xuICAgICAgICAgIHgrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgY291bnRHcmFuZFRvdGFsW2luZGV4MV09KGNvdW50R3JhbmRUb3RhbFtpbmRleDFdK2VsZW1lbnQxKTtcbiAgICAgICAgfSk7XG5cbiAgfSk7XG4gIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbDI9dGFidWxhclJlcG9ydC5ncmFuZFRvdGFsLnNsaWNlKDApO1xuICBsZXQgaW50ZWdlckFycmF5SW5kZXg9dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoLTE7XG4gIGxldCBpbmRleD0wO1xuICB3aGlsZShpbnRlZ2VyQXJyYXlJbmRleDxjb3VudEdyYW5kVG90YWwubGVuZ3RoKXtcbiAgICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyLnNwbGljZShpbnRlZ2VyQXJyYXlJbmRleCsxLDAsdG90YWxbaW5kZXhdKTtcbiAgICBpbnRlZ2VyQXJyYXlJbmRleD1pbnRlZ2VyQXJyYXlJbmRleCt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrMTtcbiAgICBpbmRleCArKztcbiAgfVxuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyLnNwbGljZSgodGFidWxhclJlcG9ydC5ncmFuZFRvdGFsMi5sZW5ndGgtdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKSx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpO1xuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyPXRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbDIuY29uY2F0KHRhYnVsYXJSZXBvcnQuc2lkZUdyYW5kVG90YWwpO1xuICBsZXQgeD0wO1xuICB0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nPXRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nLnNsaWNlKDApO1xuICB3aGlsZSh4PGNvdW50R3JhbmRUb3RhbC5sZW5ndGgpe1xuICAgIHRhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmcuc3BsaWNlKHgrdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoLDAsbnVsbCk7XG4gICAgeD14K3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCsxO1xuICB9XG4gIHRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZz1bXTtcbiAgdGFidWxhclJlcG9ydC5jb3VudFRvdGFsSW50ZWdlckluZGV4aW5nPXRhYnVsYXJSZXBvcnQuZ1RvdGFsSW50ZWdlckluZGV4aW5nLnNsaWNlKDApO1xuXG4gIGxldCBtPTA7XG4gIHdoaWxlKG08dGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmcubGVuZ3RoKXtcbiAgICB0YWJ1bGFyUmVwb3J0LmNvdW50VG90YWxJbnRlZ2VySW5kZXhpbmcuc3BsaWNlKG0rdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoLDAsbnVsbCk7XG4gICAgbT1tK3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCsxO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQuc3ViVG90YWwpe1xuICAgIHRhYnVsYXJSZXBvcnQ9dGFidWxhclJlcG9ydC5zdWJUb3RhbFRvZ2dsZSh0YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG5yZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuXG5nZXRJbnRlZ2VySW5kZXgoaW50ZWdlckFycmF5VmFsdWVzOiBBcnJheTxudW1iZXI+LHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGg+MCl7XG4gIGxldCBhcnJheUluZGV4PTA7XG4gIHdoaWxlKGFycmF5SW5kZXg8dGFidWxhclJlcG9ydC5zZXJpZXNEYXRhLmdldCgwKS5sZW5ndGgpe1xuICAgIGxldCBpbmRleDE9YXJyYXlJbmRleDtcbiAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJEYXRhLmZvckVhY2goKGVsZW1lbnQsaW5kZXgpID0+IHtcbiAgICAgIGludGVnZXJBcnJheVZhbHVlcy5zcGxpY2UoaW5kZXgxLDEsZWxlbWVudCk7XG4gICAgICBpbmRleDErKztcbiAgICB9KTtcbiAgICBhcnJheUluZGV4PWFycmF5SW5kZXgrdGFidWxhclJlcG9ydC5pbnRlZ2VyRGF0YS5sZW5ndGg7XG4gIH1cbiAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmc9aW50ZWdlckFycmF5VmFsdWVzO1xuICB0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZz1pbnRlZ2VyQXJyYXlWYWx1ZXMuY29uY2F0KHRhYnVsYXJSZXBvcnQuaW50ZWdlckRhdGEpO1xuICB9XG4gIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxudGFibGVDbGlja0V2ZW50KHRhYnVsYXJSZXBvcnQ6IGFueSk6IHZvaWR7XG4gIGNvbnN0IHRhYnVsYXJQcm9wZXJ0eT0gbmV3IEVsZW1lbnRQcm9wZXJ0eSgpO1xuICBpZih0YWJ1bGFyUmVwb3J0IGluc3RhbmNlb2YgVGFidWxhclJlcG9ydCl7XG4gIHRhYnVsYXJQcm9wZXJ0eS5wYWdlPW51bGw7XG4gIHRhYnVsYXJQcm9wZXJ0eS5lbGVtZW50PXRhYnVsYXJSZXBvcnQ7XG4gIH1cbiAgZWxzZXtcbiAgICB0YWJ1bGFyUHJvcGVydHkucGFnZT10YWJ1bGFyUmVwb3J0O1xuICB9XG4gIHRoaXMuX3RhYmxlQ2xpY2tFdmVudC5lbWl0KHRhYnVsYXJQcm9wZXJ0eSk7XG59XG59XG4iXX0=