@igo2/common 1.12.0 → 1.13.0-alpha.1

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 (239) hide show
  1. package/{esm2015/igo2-common.js → esm2020/igo2-common.mjs} +0 -0
  2. package/{esm2015/lib/action/action.module.js → esm2020/lib/action/action.module.mjs} +3 -5
  3. package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +252 -0
  4. package/esm2020/lib/action/actionbar/actionbar.component.mjs +370 -0
  5. package/{esm2015/lib/action/actionbar/actionbar.module.js → esm2020/lib/action/actionbar/actionbar.module.mjs} +10 -12
  6. package/{esm2015/lib/action/index.js → esm2020/lib/action/index.mjs} +0 -0
  7. package/{esm2015/lib/action/shared/action.enums.js → esm2020/lib/action/shared/action.enums.mjs} +0 -0
  8. package/{esm2015/lib/action/shared/action.interfaces.js → esm2020/lib/action/shared/action.interfaces.mjs} +0 -0
  9. package/{esm2015/lib/action/shared/index.js → esm2020/lib/action/shared/index.mjs} +0 -0
  10. package/{esm2015/lib/action/shared/store.js → esm2020/lib/action/shared/store.mjs} +0 -0
  11. package/{esm2015/lib/backdrop/backdrop.component.js → esm2020/lib/backdrop/backdrop.component.mjs} +3 -7
  12. package/{esm2015/lib/backdrop/backdrop.module.js → esm2020/lib/backdrop/backdrop.module.mjs} +2 -2
  13. package/{esm2015/lib/backdrop/index.js → esm2020/lib/backdrop/index.mjs} +0 -0
  14. package/{esm2015/lib/badge-icon/badge-icon.directive.js → esm2020/lib/badge-icon/badge-icon.directive.mjs} +0 -0
  15. package/{esm2015/lib/badge-icon/badge-icon.module.js → esm2020/lib/badge-icon/badge-icon.module.mjs} +2 -2
  16. package/{esm2015/lib/badge-icon/index.js → esm2020/lib/badge-icon/index.mjs} +0 -0
  17. package/{esm2015/lib/clickout/clickout.directive.js → esm2020/lib/clickout/clickout.directive.mjs} +0 -0
  18. package/{esm2015/lib/clickout/clickout.module.js → esm2020/lib/clickout/clickout.module.mjs} +2 -2
  19. package/{esm2015/lib/clickout/index.js → esm2020/lib/clickout/index.mjs} +0 -0
  20. package/{esm2015/lib/clone/clone.module.js → esm2020/lib/clone/clone.module.mjs} +2 -2
  21. package/{esm2015/lib/clone/clone.pipe.js → esm2020/lib/clone/clone.pipe.mjs} +0 -0
  22. package/{esm2015/lib/clone/index.js → esm2020/lib/clone/index.mjs} +0 -0
  23. package/{esm2015/lib/collapsible/collapse.directive.js → esm2020/lib/collapsible/collapse.directive.mjs} +0 -0
  24. package/{esm2015/lib/collapsible/collapsible.component.js → esm2020/lib/collapsible/collapsible.component.mjs} +9 -15
  25. package/{esm2015/lib/collapsible/collapsible.module.js → esm2020/lib/collapsible/collapsible.module.mjs} +2 -2
  26. package/{esm2015/lib/collapsible/index.js → esm2020/lib/collapsible/index.mjs} +0 -0
  27. package/{esm2015/lib/confirm-dialog/confirm-dialog.component.js → esm2020/lib/confirm-dialog/confirm-dialog.component.mjs} +5 -11
  28. package/{esm2015/lib/confirm-dialog/confirm-dialog.module.js → esm2020/lib/confirm-dialog/confirm-dialog.module.mjs} +2 -2
  29. package/{esm2015/lib/confirm-dialog/confirm-dialog.service.js → esm2020/lib/confirm-dialog/confirm-dialog.service.mjs} +0 -0
  30. package/{esm2015/lib/confirm-dialog/index.js → esm2020/lib/confirm-dialog/index.mjs} +0 -0
  31. package/{esm2015/lib/context-menu/context-menu.directive.js → esm2020/lib/context-menu/context-menu.directive.mjs} +0 -0
  32. package/{esm2015/lib/context-menu/context-menu.module.js → esm2020/lib/context-menu/context-menu.module.mjs} +2 -2
  33. package/{esm2015/lib/context-menu/index.js → esm2020/lib/context-menu/index.mjs} +0 -0
  34. package/{esm2015/lib/custom-html/custom-html.component.js → esm2020/lib/custom-html/custom-html.component.mjs} +3 -7
  35. package/{esm2015/lib/custom-html/custom-html.module.js → esm2020/lib/custom-html/custom-html.module.mjs} +7 -9
  36. package/{esm2015/lib/custom-html/custom-html.pipe.js → esm2020/lib/custom-html/custom-html.pipe.mjs} +0 -0
  37. package/{esm2015/lib/custom-html/index.js → esm2020/lib/custom-html/index.mjs} +0 -0
  38. package/{esm2015/lib/dom/dom.interfaces.js → esm2020/lib/dom/dom.interfaces.mjs} +0 -0
  39. package/{esm2015/lib/dom/dom.module.js → esm2020/lib/dom/dom.module.mjs} +0 -0
  40. package/{esm2015/lib/dom/dom.service.js → esm2020/lib/dom/dom.service.mjs} +11 -14
  41. package/{esm2015/lib/dom/index.js → esm2020/lib/dom/index.mjs} +0 -0
  42. package/{esm2015/lib/drag-drop/drag-drop.directive.js → esm2020/lib/drag-drop/drag-drop.directive.mjs} +0 -0
  43. package/{esm2015/lib/drag-drop/drag-drop.module.js → esm2020/lib/drag-drop/drag-drop.module.mjs} +2 -2
  44. package/{esm2015/lib/drag-drop/index.js → esm2020/lib/drag-drop/index.mjs} +0 -0
  45. package/{esm2015/lib/dynamic-component/dynamic-component.module.js → esm2020/lib/dynamic-component/dynamic-component.module.mjs} +3 -5
  46. package/{esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.js → esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs} +2 -7
  47. package/{esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.js → esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs} +2 -4
  48. package/{esm2015/lib/dynamic-component/index.js → esm2020/lib/dynamic-component/index.mjs} +0 -0
  49. package/{esm2015/lib/dynamic-component/shared/dynamic-component.interfaces.js → esm2020/lib/dynamic-component/shared/dynamic-component.interfaces.mjs} +0 -0
  50. package/{esm2015/lib/dynamic-component/shared/dynamic-component.js → esm2020/lib/dynamic-component/shared/dynamic-component.mjs} +0 -0
  51. package/{esm2015/lib/dynamic-component/shared/dynamic-component.service.js → esm2020/lib/dynamic-component/shared/dynamic-component.service.mjs} +0 -0
  52. package/{esm2015/lib/dynamic-component/shared/index.js → esm2020/lib/dynamic-component/shared/index.mjs} +0 -0
  53. package/{esm2015/lib/entity/entity-selector/entity-selector.component.js → esm2020/lib/entity/entity-selector/entity-selector.component.mjs} +8 -15
  54. package/{esm2015/lib/entity/entity-selector/entity-selector.module.js → esm2020/lib/entity/entity-selector/entity-selector.module.mjs} +4 -6
  55. package/{esm2015/lib/entity/entity-table/entity-table-row.directive.js → esm2020/lib/entity/entity-table/entity-table-row.directive.mjs} +0 -0
  56. package/esm2020/lib/entity/entity-table/entity-table.component.mjs +1339 -0
  57. package/{esm2015/lib/entity/entity-table/entity-table.module.js → esm2020/lib/entity/entity-table/entity-table.module.mjs} +20 -22
  58. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +132 -0
  59. package/{esm2015/lib/entity/entity-table-paginator/entity-table-paginator.interface.js → esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs} +0 -0
  60. package/{esm2015/lib/entity/entity-table-paginator/entity-table-paginator.module.js → esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs} +2 -4
  61. package/{esm2015/lib/entity/entity.module.js → esm2020/lib/entity/entity.module.mjs} +2 -4
  62. package/{esm2015/lib/entity/index.js → esm2020/lib/entity/index.mjs} +0 -0
  63. package/{esm2015/lib/entity/shared/entity.enums.js → esm2020/lib/entity/shared/entity.enums.mjs} +0 -0
  64. package/{esm2015/lib/entity/shared/entity.interfaces.js → esm2020/lib/entity/shared/entity.interfaces.mjs} +0 -0
  65. package/esm2020/lib/entity/shared/entity.utils.mjs +67 -0
  66. package/{esm2015/lib/entity/shared/index.js → esm2020/lib/entity/shared/index.mjs} +0 -0
  67. package/{esm2015/lib/entity/shared/state.js → esm2020/lib/entity/shared/state.mjs} +0 -0
  68. package/{esm2015/lib/entity/shared/store.js → esm2020/lib/entity/shared/store.mjs} +0 -0
  69. package/{esm2015/lib/entity/shared/strategies/filter-custom-function.js → esm2020/lib/entity/shared/strategies/filter-custom-function.mjs} +0 -0
  70. package/{esm2015/lib/entity/shared/strategies/filter-selection.js → esm2020/lib/entity/shared/strategies/filter-selection.mjs} +0 -0
  71. package/{esm2015/lib/entity/shared/strategies/index.js → esm2020/lib/entity/shared/strategies/index.mjs} +0 -0
  72. package/{esm2015/lib/entity/shared/strategies/strategy.js → esm2020/lib/entity/shared/strategies/strategy.mjs} +0 -0
  73. package/{esm2015/lib/entity/shared/transaction.js → esm2020/lib/entity/shared/transaction.mjs} +0 -0
  74. package/{esm2015/lib/entity/shared/view.js → esm2020/lib/entity/shared/view.mjs} +0 -0
  75. package/{esm2015/lib/entity/shared/watcher.js → esm2020/lib/entity/shared/watcher.mjs} +0 -0
  76. package/{esm2015/lib/flexible/flexible.component.js → esm2020/lib/flexible/flexible.component.mjs} +7 -17
  77. package/{esm2015/lib/flexible/flexible.module.js → esm2020/lib/flexible/flexible.module.mjs} +2 -2
  78. package/{esm2015/lib/flexible/flexible.type.js → esm2020/lib/flexible/flexible.type.mjs} +0 -0
  79. package/{esm2015/lib/flexible/index.js → esm2020/lib/flexible/index.mjs} +0 -0
  80. package/esm2020/lib/form/form/form.component.mjs +117 -0
  81. package/{esm2015/lib/form/form/form.module.js → esm2020/lib/form/form/form.module.mjs} +4 -6
  82. package/esm2020/lib/form/form-field/form-field-select.component.mjs +127 -0
  83. package/esm2020/lib/form/form-field/form-field-text.component.mjs +104 -0
  84. package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +105 -0
  85. package/{esm2015/lib/form/form-field/form-field.component.js → esm2020/lib/form/form-field/form-field.component.mjs} +3 -8
  86. package/{esm2015/lib/form/form-field/form-field.module.js → esm2020/lib/form/form-field/form-field.module.mjs} +10 -12
  87. package/{esm2015/lib/form/form-field/index.js → esm2020/lib/form/form-field/index.mjs} +0 -0
  88. package/{esm2015/lib/form/form-group/form-group.component.js → esm2020/lib/form/form-group/form-group.component.mjs} +5 -10
  89. package/{esm2015/lib/form/form-group/form-group.module.js → esm2020/lib/form/form-group/form-group.module.mjs} +5 -7
  90. package/{esm2015/lib/form/form.module.js → esm2020/lib/form/form.module.mjs} +4 -6
  91. package/{esm2015/lib/form/index.js → esm2020/lib/form/index.mjs} +0 -0
  92. package/{esm2015/lib/form/shared/form-field-component.js → esm2020/lib/form/shared/form-field-component.mjs} +0 -0
  93. package/{esm2015/lib/form/shared/form-field.service.js → esm2020/lib/form/shared/form-field.service.mjs} +1 -1
  94. package/{esm2015/lib/form/shared/form.interfaces.js → esm2020/lib/form/shared/form.interfaces.mjs} +0 -0
  95. package/{esm2015/lib/form/shared/form.service.js → esm2020/lib/form/shared/form.service.mjs} +0 -0
  96. package/{esm2015/lib/form/shared/form.utils.js → esm2020/lib/form/shared/form.utils.mjs} +0 -0
  97. package/{esm2015/lib/form/shared/index.js → esm2020/lib/form/shared/index.mjs} +0 -0
  98. package/{esm2015/lib/home-button/home-button.component.js → esm2020/lib/home-button/home-button.component.mjs} +6 -10
  99. package/{esm2015/lib/home-button/home-button.module.js → esm2020/lib/home-button/home-button.module.mjs} +6 -8
  100. package/{esm2015/lib/home-button/index.js → esm2020/lib/home-button/index.mjs} +0 -0
  101. package/{esm2015/lib/image/image.module.js → esm2020/lib/image/image.module.mjs} +2 -2
  102. package/{esm2015/lib/image/index.js → esm2020/lib/image/index.mjs} +0 -0
  103. package/esm2020/lib/image/secure-image.pipe.mjs +54 -0
  104. package/{esm2015/lib/interactive-tour/index.js → esm2020/lib/interactive-tour/index.mjs} +0 -0
  105. package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +135 -0
  106. package/{esm2015/lib/interactive-tour/interactive-tour.interface.js → esm2020/lib/interactive-tour/interactive-tour.interface.mjs} +0 -0
  107. package/{esm2015/lib/interactive-tour/interactive-tour.loader.js → esm2020/lib/interactive-tour/interactive-tour.loader.mjs} +0 -0
  108. package/{esm2015/lib/interactive-tour/interactive-tour.module.js → esm2020/lib/interactive-tour/interactive-tour.module.mjs} +6 -8
  109. package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +285 -0
  110. package/{esm2015/lib/json-dialog/index.js → esm2020/lib/json-dialog/index.mjs} +0 -0
  111. package/{esm2015/lib/json-dialog/json-dialog.component.js → esm2020/lib/json-dialog/json-dialog.component.mjs} +6 -13
  112. package/{esm2015/lib/json-dialog/json-dialog.module.js → esm2020/lib/json-dialog/json-dialog.module.mjs} +2 -2
  113. package/{esm2015/lib/json-dialog/json-dialog.service.js → esm2020/lib/json-dialog/json-dialog.service.mjs} +0 -0
  114. package/{esm2015/lib/keyvalue/index.js → esm2020/lib/keyvalue/index.mjs} +0 -0
  115. package/{esm2015/lib/keyvalue/keyvalue.module.js → esm2020/lib/keyvalue/keyvalue.module.mjs} +2 -2
  116. package/{esm2015/lib/keyvalue/keyvalue.pipe.js → esm2020/lib/keyvalue/keyvalue.pipe.mjs} +0 -0
  117. package/{esm2015/lib/list/index.js → esm2020/lib/list/index.mjs} +0 -0
  118. package/{esm2015/lib/list/list-item.directive.js → esm2020/lib/list/list-item.directive.mjs} +0 -0
  119. package/{esm2015/lib/list/list.component.js → esm2020/lib/list/list.component.mjs} +6 -10
  120. package/{esm2015/lib/list/list.module.js → esm2020/lib/list/list.module.mjs} +2 -2
  121. package/{esm2015/lib/panel/index.js → esm2020/lib/panel/index.mjs} +0 -0
  122. package/esm2020/lib/panel/panel.component.mjs +60 -0
  123. package/{esm2015/lib/panel/panel.module.js → esm2020/lib/panel/panel.module.mjs} +2 -2
  124. package/{esm2015/lib/sidenav/index.js → esm2020/lib/sidenav/index.mjs} +0 -0
  125. package/{esm2015/lib/sidenav/sidenav-shim.directive.js → esm2020/lib/sidenav/sidenav-shim.directive.mjs} +0 -0
  126. package/{esm2015/lib/sidenav/sidenav.module.js → esm2020/lib/sidenav/sidenav.module.mjs} +2 -2
  127. package/{esm2015/lib/spinner/index.js → esm2020/lib/spinner/index.mjs} +0 -0
  128. package/{esm2015/lib/spinner/spinner-activity.directive.js → esm2020/lib/spinner/spinner-activity.directive.mjs} +0 -0
  129. package/{esm2015/lib/spinner/spinner.component.js → esm2020/lib/spinner/spinner.component.mjs} +4 -9
  130. package/{esm2015/lib/spinner/spinner.module.js → esm2020/lib/spinner/spinner.module.mjs} +2 -2
  131. package/{esm2015/lib/stop-propagation/index.js → esm2020/lib/stop-propagation/index.mjs} +0 -0
  132. package/{esm2015/lib/stop-propagation/stop-drop-propagation.directive.js → esm2020/lib/stop-propagation/stop-drop-propagation.directive.mjs} +0 -0
  133. package/{esm2015/lib/stop-propagation/stop-propagation.directive.js → esm2020/lib/stop-propagation/stop-propagation.directive.mjs} +0 -0
  134. package/{esm2015/lib/stop-propagation/stop-propagation.module.js → esm2020/lib/stop-propagation/stop-propagation.module.mjs} +2 -2
  135. package/{esm2015/lib/table/index.js → esm2020/lib/table/index.mjs} +0 -0
  136. package/{esm2015/lib/table/table-action-color.enum.js → esm2020/lib/table/table-action-color.enum.mjs} +0 -0
  137. package/{esm2015/lib/table/table-database.js → esm2020/lib/table/table-database.mjs} +0 -0
  138. package/{esm2015/lib/table/table-datasource.js → esm2020/lib/table/table-datasource.mjs} +0 -0
  139. package/{esm2015/lib/table/table-model.interface.js → esm2020/lib/table/table-model.interface.mjs} +0 -0
  140. package/esm2020/lib/table/table.component.mjs +297 -0
  141. package/{esm2015/lib/table/table.module.js → esm2020/lib/table/table.module.mjs} +12 -14
  142. package/{esm2015/lib/tool/index.js → esm2020/lib/tool/index.mjs} +0 -0
  143. package/{esm2015/lib/tool/shared/index.js → esm2020/lib/tool/shared/index.mjs} +0 -0
  144. package/{esm2015/lib/tool/shared/tool-component.js → esm2020/lib/tool/shared/tool-component.mjs} +0 -0
  145. package/{esm2015/lib/tool/shared/tool.interface.js → esm2020/lib/tool/shared/tool.interface.mjs} +0 -0
  146. package/{esm2015/lib/tool/shared/tool.service.js → esm2020/lib/tool/shared/tool.service.mjs} +1 -1
  147. package/{esm2015/lib/tool/shared/toolbox.enums.js → esm2020/lib/tool/shared/toolbox.enums.mjs} +0 -0
  148. package/{esm2015/lib/tool/shared/toolbox.js → esm2020/lib/tool/shared/toolbox.mjs} +0 -0
  149. package/{esm2015/lib/tool/tool.module.js → esm2020/lib/tool/tool.module.mjs} +2 -4
  150. package/{esm2015/lib/tool/toolbox/toolbox.animation.js → esm2020/lib/tool/toolbox/toolbox.animation.mjs} +0 -0
  151. package/esm2020/lib/tool/toolbox/toolbox.component.mjs +255 -0
  152. package/{esm2015/lib/tool/toolbox/toolbox.module.js → esm2020/lib/tool/toolbox/toolbox.module.mjs} +4 -6
  153. package/{esm2015/lib/widget/index.js → esm2020/lib/widget/index.mjs} +0 -0
  154. package/{esm2015/lib/widget/shared/index.js → esm2020/lib/widget/shared/index.mjs} +0 -0
  155. package/{esm2015/lib/widget/shared/widget.interfaces.js → esm2020/lib/widget/shared/widget.interfaces.mjs} +0 -0
  156. package/{esm2015/lib/widget/shared/widget.js → esm2020/lib/widget/shared/widget.mjs} +0 -0
  157. package/{esm2015/lib/widget/shared/widget.service.js → esm2020/lib/widget/shared/widget.service.mjs} +0 -0
  158. package/{esm2015/lib/widget/widget-outlet/widget-outlet.component.js → esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs} +3 -8
  159. package/{esm2015/lib/widget/widget-outlet/widget-outlet.module.js → esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs} +3 -5
  160. package/{esm2015/lib/widget/widget.module.js → esm2020/lib/widget/widget.module.mjs} +3 -5
  161. package/{esm2015/lib/workspace/index.js → esm2020/lib/workspace/index.mjs} +0 -0
  162. package/{esm2015/lib/workspace/shared/index.js → esm2020/lib/workspace/shared/index.mjs} +0 -0
  163. package/{esm2015/lib/workspace/shared/store.js → esm2020/lib/workspace/shared/store.mjs} +0 -0
  164. package/{esm2015/lib/workspace/shared/workspace.interfaces.js → esm2020/lib/workspace/shared/workspace.interfaces.mjs} +0 -0
  165. package/{esm2015/lib/workspace/shared/workspace.js → esm2020/lib/workspace/shared/workspace.mjs} +0 -0
  166. package/{esm2015/lib/workspace/workspace-selector/workspace-selector.component.js → esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs} +3 -8
  167. package/{esm2015/lib/workspace/workspace-selector/workspace-selector.module.js → esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs} +3 -5
  168. package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +88 -0
  169. package/{esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.js → esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs} +3 -5
  170. package/{esm2015/lib/workspace/workspace.module.js → esm2020/lib/workspace/workspace.module.mjs} +2 -4
  171. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  172. package/fesm2015/igo2-common.mjs +10145 -0
  173. package/fesm2015/igo2-common.mjs.map +1 -0
  174. package/{fesm2015/igo2-common.js → fesm2020/igo2-common.mjs} +469 -704
  175. package/fesm2020/igo2-common.mjs.map +1 -0
  176. package/{igo2-common.d.ts → index.d.ts} +0 -0
  177. package/lib/action/actionbar/actionbar-item.component.d.ts +1 -1
  178. package/lib/action/actionbar/actionbar.component.d.ts +1 -1
  179. package/lib/backdrop/backdrop.component.d.ts +1 -1
  180. package/lib/badge-icon/badge-icon.directive.d.ts +1 -1
  181. package/lib/clickout/clickout.directive.d.ts +1 -1
  182. package/lib/clone/clone.pipe.d.ts +1 -1
  183. package/lib/collapsible/collapse.directive.d.ts +1 -1
  184. package/lib/collapsible/collapsible.component.d.ts +1 -1
  185. package/lib/confirm-dialog/confirm-dialog.component.d.ts +1 -1
  186. package/lib/context-menu/context-menu.directive.d.ts +1 -1
  187. package/lib/custom-html/custom-html.component.d.ts +1 -1
  188. package/lib/custom-html/custom-html.pipe.d.ts +1 -1
  189. package/lib/drag-drop/drag-drop.directive.d.ts +1 -1
  190. package/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.d.ts +1 -1
  191. package/lib/entity/entity-selector/entity-selector.component.d.ts +1 -1
  192. package/lib/entity/entity-table/entity-table-row.directive.d.ts +1 -1
  193. package/lib/entity/entity-table/entity-table.component.d.ts +1 -1
  194. package/lib/entity/entity-table-paginator/entity-table-paginator.component.d.ts +1 -1
  195. package/lib/flexible/flexible.component.d.ts +1 -1
  196. package/lib/form/form/form.component.d.ts +1 -1
  197. package/lib/form/form-field/form-field-select.component.d.ts +1 -1
  198. package/lib/form/form-field/form-field-text.component.d.ts +1 -1
  199. package/lib/form/form-field/form-field-textarea.component.d.ts +1 -1
  200. package/lib/form/form-field/form-field.component.d.ts +1 -1
  201. package/lib/form/form-group/form-group.component.d.ts +1 -1
  202. package/lib/home-button/home-button.component.d.ts +1 -1
  203. package/lib/image/secure-image.pipe.d.ts +1 -1
  204. package/lib/interactive-tour/interactive-tour.component.d.ts +1 -1
  205. package/lib/json-dialog/json-dialog.component.d.ts +1 -1
  206. package/lib/keyvalue/keyvalue.pipe.d.ts +1 -1
  207. package/lib/list/list-item.directive.d.ts +1 -1
  208. package/lib/list/list.component.d.ts +1 -1
  209. package/lib/panel/panel.component.d.ts +1 -1
  210. package/lib/sidenav/sidenav-shim.directive.d.ts +1 -1
  211. package/lib/spinner/spinner-activity.directive.d.ts +1 -1
  212. package/lib/spinner/spinner.component.d.ts +1 -1
  213. package/lib/stop-propagation/stop-drop-propagation.directive.d.ts +1 -1
  214. package/lib/stop-propagation/stop-propagation.directive.d.ts +1 -1
  215. package/lib/table/table.component.d.ts +1 -1
  216. package/lib/tool/toolbox/toolbox.component.d.ts +1 -1
  217. package/lib/widget/widget-outlet/widget-outlet.component.d.ts +1 -1
  218. package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +1 -1
  219. package/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.d.ts +1 -1
  220. package/package.json +25 -12
  221. package/bundles/igo2-common.umd.js +0 -11545
  222. package/bundles/igo2-common.umd.js.map +0 -1
  223. package/esm2015/lib/action/actionbar/actionbar-item.component.js +0 -257
  224. package/esm2015/lib/action/actionbar/actionbar.component.js +0 -385
  225. package/esm2015/lib/entity/entity-table/entity-table.component.js +0 -1359
  226. package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.component.js +0 -138
  227. package/esm2015/lib/entity/shared/entity.utils.js +0 -67
  228. package/esm2015/lib/form/form/form.component.js +0 -125
  229. package/esm2015/lib/form/form-field/form-field-select.component.js +0 -132
  230. package/esm2015/lib/form/form-field/form-field-text.component.js +0 -108
  231. package/esm2015/lib/form/form-field/form-field-textarea.component.js +0 -110
  232. package/esm2015/lib/image/secure-image.pipe.js +0 -55
  233. package/esm2015/lib/interactive-tour/interactive-tour.component.js +0 -140
  234. package/esm2015/lib/interactive-tour/interactive-tour.service.js +0 -285
  235. package/esm2015/lib/panel/panel.component.js +0 -67
  236. package/esm2015/lib/table/table.component.js +0 -310
  237. package/esm2015/lib/tool/toolbox/toolbox.component.js +0 -261
  238. package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.js +0 -93
  239. package/fesm2015/igo2-common.js.map +0 -1
@@ -0,0 +1,1339 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, Optional, Self } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { EntityTableColumnRenderer, EntityTableSelectionState, EntityTableScrollBehavior } from '../shared';
4
+ import { MatTableDataSource } from '@angular/material/table';
5
+ import { MatFormFieldControl } from '@angular/material/form-field';
6
+ import { FormGroup } from '@angular/forms';
7
+ import { map } from 'rxjs/operators';
8
+ import { default as moment } from 'moment';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/forms";
11
+ import * as i2 from "@angular/cdk/a11y";
12
+ import * as i3 from "@angular/material/core";
13
+ import * as i4 from "@angular/common";
14
+ import * as i5 from "@angular/material/table";
15
+ import * as i6 from "@angular/material/autocomplete";
16
+ import * as i7 from "@angular/material/sort";
17
+ import * as i8 from "@angular/material/icon";
18
+ import * as i9 from "@angular/material/button";
19
+ import * as i10 from "@angular/material/checkbox";
20
+ import * as i11 from "@angular/material/form-field";
21
+ import * as i12 from "@angular/material/select";
22
+ import * as i13 from "../../stop-propagation/stop-propagation.directive";
23
+ import * as i14 from "../entity-table-paginator/entity-table-paginator.component";
24
+ import * as i15 from "@angular/material/input";
25
+ import * as i16 from "@angular/material/datepicker";
26
+ import * as i17 from "@angular/material/tooltip";
27
+ import * as i18 from "./entity-table-row.directive";
28
+ import * as i19 from "../../custom-html/custom-html.pipe";
29
+ import * as i20 from "../../image/secure-image.pipe";
30
+ import * as i21 from "@ngx-translate/core";
31
+ function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
32
+ const _r10 = i0.ɵɵgetCurrentView();
33
+ i0.ɵɵelementContainerStart(0);
34
+ i0.ɵɵelementStart(1, "mat-checkbox", 11);
35
+ i0.ɵɵlistener("change", function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r9.onToggleRows($event.checked)); });
36
+ i0.ɵɵelementEnd();
37
+ i0.ɵɵelementContainerEnd();
38
+ } if (rf & 2) {
39
+ const selectionState_r8 = ctx.ngIf;
40
+ const ctx_r7 = i0.ɵɵnextContext(3);
41
+ i0.ɵɵadvance(1);
42
+ i0.ɵɵproperty("checked", selectionState_r8 === ctx_r7.entityTableSelectionState.All)("indeterminate", selectionState_r8 === ctx_r7.entityTableSelectionState.Some);
43
+ } }
44
+ function EntityTableComponent_th_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
45
+ i0.ɵɵelementContainerStart(0);
46
+ i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_ng_container_1_Template, 2, 2, "ng-container", 10);
47
+ i0.ɵɵpipe(2, "async");
48
+ i0.ɵɵelementContainerEnd();
49
+ } if (rf & 2) {
50
+ const ctx_r6 = i0.ɵɵnextContext(2);
51
+ i0.ɵɵadvance(1);
52
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r6.selectionState$));
53
+ } }
54
+ function EntityTableComponent_th_3_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "th", 9);
56
+ i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_Template, 3, 3, "ng-container", 10);
57
+ i0.ɵɵelementEnd();
58
+ } if (rf & 2) {
59
+ const ctx_r0 = i0.ɵɵnextContext();
60
+ i0.ɵɵadvance(1);
61
+ i0.ɵɵproperty("ngIf", ctx_r0.selectMany);
62
+ } }
63
+ function EntityTableComponent_td_4_Template(rf, ctx) { if (rf & 1) {
64
+ const _r14 = i0.ɵɵgetCurrentView();
65
+ i0.ɵɵelementStart(0, "td", 12)(1, "mat-checkbox", 13);
66
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_td_4_Template_mat_checkbox_mousedown_1_listener($event) { return $event.shiftKey ? $event.preventDefault() : null; })("click", function EntityTableComponent_td_4_Template_mat_checkbox_click_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const record_r11 = restoredCtx.$implicit; const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView($event.shiftKey ? ctx_r13.onShiftToggleRow(!ctx_r13.rowIsSelected(record_r11), record_r11, $event) : $event.stopPropagation()); })("change", function EntityTableComponent_td_4_Template_mat_checkbox_change_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const record_r11 = restoredCtx.$implicit; const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.onToggleRow($event.checked, record_r11)); });
67
+ i0.ɵɵelementEnd()();
68
+ } if (rf & 2) {
69
+ const record_r11 = ctx.$implicit;
70
+ const ctx_r1 = i0.ɵɵnextContext();
71
+ i0.ɵɵadvance(1);
72
+ i0.ɵɵproperty("checked", ctx_r1.rowIsSelected(record_r11));
73
+ } }
74
+ function EntityTableComponent_ng_container_5_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
75
+ i0.ɵɵelementStart(0, "th", 16);
76
+ i0.ɵɵtext(1);
77
+ i0.ɵɵelementEnd();
78
+ } if (rf & 2) {
79
+ const column_r16 = i0.ɵɵnextContext(2).$implicit;
80
+ i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
81
+ i0.ɵɵadvance(1);
82
+ i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
83
+ } }
84
+ function EntityTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
85
+ i0.ɵɵelementContainerStart(0);
86
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 2, "th", 15);
87
+ i0.ɵɵelementContainerEnd();
88
+ } }
89
+ function EntityTableComponent_ng_container_5_ng_container_2_th_1_Template(rf, ctx) { if (rf & 1) {
90
+ i0.ɵɵelementStart(0, "th", 18);
91
+ i0.ɵɵtext(1);
92
+ i0.ɵɵelementEnd();
93
+ } if (rf & 2) {
94
+ const column_r16 = i0.ɵɵnextContext(2).$implicit;
95
+ i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
96
+ i0.ɵɵadvance(1);
97
+ i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
98
+ } }
99
+ function EntityTableComponent_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
100
+ i0.ɵɵelementContainerStart(0);
101
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 2, "th", 17);
102
+ i0.ɵɵelementContainerEnd();
103
+ } }
104
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
105
+ i0.ɵɵelementStart(0, "td", 22);
106
+ i0.ɵɵtext(1);
107
+ i0.ɵɵelementEnd();
108
+ } if (rf & 2) {
109
+ const record_r31 = i0.ɵɵnextContext().$implicit;
110
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
111
+ const ctx_r32 = i0.ɵɵnextContext();
112
+ i0.ɵɵproperty("ngClass", ctx_r32.getCellClass(record_r31, column_r16));
113
+ i0.ɵɵadvance(1);
114
+ i0.ɵɵtextInterpolate1(" ", ctx_r32.getValue(record_r31, column_r16), " ");
115
+ } }
116
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
117
+ i0.ɵɵelement(0, "img", 26);
118
+ i0.ɵɵpipe(1, "async");
119
+ i0.ɵɵpipe(2, "secureImage");
120
+ } if (rf & 2) {
121
+ const record_r31 = i0.ɵɵnextContext(2).$implicit;
122
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
123
+ const ctx_r37 = i0.ɵɵnextContext();
124
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r37.getValue(record_r31, column_r16))), i0.ɵɵsanitizeUrl);
125
+ } }
126
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
127
+ i0.ɵɵelementStart(0, "span");
128
+ i0.ɵɵtext(1);
129
+ i0.ɵɵpipe(2, "translate");
130
+ i0.ɵɵelementEnd();
131
+ } if (rf & 2) {
132
+ i0.ɵɵadvance(1);
133
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.common.entity-table.targetHtmlUrl"), " ");
134
+ } }
135
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
136
+ i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
137
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
138
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
139
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
140
+ i0.ɵɵelementEnd()();
141
+ } if (rf & 2) {
142
+ const _r38 = i0.ɵɵreference(4);
143
+ const record_r31 = i0.ɵɵnextContext().$implicit;
144
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
145
+ const ctx_r34 = i0.ɵɵnextContext();
146
+ i0.ɵɵproperty("ngClass", ctx_r34.getCellClass(record_r31, column_r16));
147
+ i0.ɵɵadvance(1);
148
+ i0.ɵɵpropertyInterpolate("href", ctx_r34.getValue(record_r31, column_r16), i0.ɵɵsanitizeUrl);
149
+ i0.ɵɵadvance(1);
150
+ i0.ɵɵproperty("ngIf", ctx_r34.isImg(ctx_r34.getValue(record_r31, column_r16)))("ngIfElse", _r38);
151
+ } }
152
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
153
+ i0.ɵɵelementContainerStart(0);
154
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 20);
155
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 21, i0.ɵɵtemplateRefExtractor);
156
+ i0.ɵɵelementContainerEnd();
157
+ } if (rf & 2) {
158
+ const record_r31 = ctx.$implicit;
159
+ const _r33 = i0.ɵɵreference(3);
160
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
161
+ const ctx_r30 = i0.ɵɵnextContext();
162
+ i0.ɵɵadvance(1);
163
+ i0.ɵɵproperty("ngIf", !ctx_r30.isUrl(ctx_r30.getValue(record_r31, column_r16)))("ngIfElse", _r33);
164
+ } }
165
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
166
+ i0.ɵɵelementContainerStart(0);
167
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 19);
168
+ i0.ɵɵelementContainerEnd();
169
+ } }
170
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
171
+ i0.ɵɵelement(0, "td", 29);
172
+ } if (rf & 2) {
173
+ const record_r47 = i0.ɵɵnextContext().$implicit;
174
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
175
+ const ctx_r48 = i0.ɵɵnextContext();
176
+ i0.ɵɵproperty("ngClass", ctx_r48.getCellClass(record_r47, column_r16))("innerHTML", ctx_r48.getValue(record_r47, column_r16), i0.ɵɵsanitizeHtml);
177
+ } }
178
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
179
+ i0.ɵɵelement(0, "img", 26);
180
+ i0.ɵɵpipe(1, "async");
181
+ i0.ɵɵpipe(2, "secureImage");
182
+ } if (rf & 2) {
183
+ const record_r47 = i0.ɵɵnextContext(2).$implicit;
184
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
185
+ const ctx_r53 = i0.ɵɵnextContext();
186
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r53.getValue(record_r47, column_r16))), i0.ɵɵsanitizeUrl);
187
+ } }
188
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
189
+ i0.ɵɵelementStart(0, "span");
190
+ i0.ɵɵtext(1);
191
+ i0.ɵɵpipe(2, "translate");
192
+ i0.ɵɵelementEnd();
193
+ } if (rf & 2) {
194
+ i0.ɵɵadvance(1);
195
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
196
+ } }
197
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
198
+ i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
199
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
200
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
201
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
202
+ i0.ɵɵelementEnd()();
203
+ } if (rf & 2) {
204
+ const _r54 = i0.ɵɵreference(4);
205
+ const record_r47 = i0.ɵɵnextContext().$implicit;
206
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
207
+ const ctx_r50 = i0.ɵɵnextContext();
208
+ i0.ɵɵproperty("ngClass", ctx_r50.getCellClass(record_r47, column_r16));
209
+ i0.ɵɵadvance(1);
210
+ i0.ɵɵpropertyInterpolate("href", ctx_r50.getValue(record_r47, column_r16), i0.ɵɵsanitizeUrl);
211
+ i0.ɵɵadvance(1);
212
+ i0.ɵɵproperty("ngIf", ctx_r50.isImg(ctx_r50.getValue(record_r47, column_r16)))("ngIfElse", _r54);
213
+ } }
214
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
215
+ i0.ɵɵelementContainerStart(0);
216
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 27);
217
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 28, i0.ɵɵtemplateRefExtractor);
218
+ i0.ɵɵelementContainerEnd();
219
+ } if (rf & 2) {
220
+ const record_r47 = ctx.$implicit;
221
+ const _r49 = i0.ɵɵreference(3);
222
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
223
+ const ctx_r46 = i0.ɵɵnextContext();
224
+ i0.ɵɵadvance(1);
225
+ i0.ɵɵproperty("ngIf", !ctx_r46.isUrl(ctx_r46.getValue(record_r47, column_r16)))("ngIfElse", _r49);
226
+ } }
227
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵelementContainerStart(0);
229
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 19);
230
+ i0.ɵɵelementContainerEnd();
231
+ } }
232
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template(rf, ctx) { if (rf & 1) {
233
+ const _r79 = i0.ɵɵgetCurrentView();
234
+ i0.ɵɵelementStart(0, "div", 43);
235
+ i0.ɵɵelement(1, "mat-datepicker-toggle", 44);
236
+ i0.ɵɵelementStart(2, "input", 45);
237
+ i0.ɵɵlistener("dateChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template_input_dateChange_2_listener($event) { i0.ɵɵrestoreView(_r79); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r77 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r77.onDateChange(column_r16.name, record_r63, $event)); });
238
+ i0.ɵɵelementEnd();
239
+ i0.ɵɵelement(3, "mat-datepicker", null, 46);
240
+ i0.ɵɵelementEnd();
241
+ } if (rf & 2) {
242
+ const _r76 = i0.ɵɵreference(4);
243
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
244
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
245
+ const ctx_r67 = i0.ɵɵnextContext();
246
+ i0.ɵɵadvance(1);
247
+ i0.ɵɵproperty("for", _r76);
248
+ i0.ɵɵadvance(1);
249
+ i0.ɵɵpropertyInterpolate("value", ctx_r67.getValue(record_r63, column_r16));
250
+ i0.ɵɵproperty("matDatepicker", _r76)("formControlName", column_r16.name);
251
+ } }
252
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template(rf, ctx) { if (rf & 1) {
253
+ const _r85 = i0.ɵɵgetCurrentView();
254
+ i0.ɵɵelementStart(0, "input", 47);
255
+ i0.ɵɵlistener("focus", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onFocus($event)); })("keypress", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_keypress_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onChange($event)); })("blur", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onBlur($event)); });
256
+ i0.ɵɵelementEnd();
257
+ } if (rf & 2) {
258
+ const column_r16 = i0.ɵɵnextContext(5).$implicit;
259
+ i0.ɵɵproperty("formControlName", column_r16.name);
260
+ } }
261
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template(rf, ctx) { if (rf & 1) {
262
+ const _r93 = i0.ɵɵgetCurrentView();
263
+ i0.ɵɵelementStart(0, "input", 48);
264
+ i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r93); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r91 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r91.onValueChange(column_r16.name, record_r63, $event)); });
265
+ i0.ɵɵelementEnd();
266
+ } if (rf & 2) {
267
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
268
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
269
+ const ctx_r69 = i0.ɵɵnextContext();
270
+ i0.ɵɵpropertyInterpolate("step", column_r16.step);
271
+ i0.ɵɵpropertyInterpolate("value", ctx_r69.getValue(record_r63, column_r16));
272
+ i0.ɵɵpropertyInterpolate("readonly", ctx_r69.getValidationAttributeValue(column_r16, "readonly"));
273
+ i0.ɵɵpropertyInterpolate("required", ctx_r69.getValidationAttributeValue(column_r16, "mandatory"));
274
+ i0.ɵɵpropertyInterpolate("min", ctx_r69.getValidationAttributeValue(column_r16, "minValue"));
275
+ i0.ɵɵpropertyInterpolate("max", ctx_r69.getValidationAttributeValue(column_r16, "maxValue"));
276
+ i0.ɵɵproperty("formControlName", column_r16.name);
277
+ } }
278
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template(rf, ctx) { if (rf & 1) {
279
+ const _r99 = i0.ɵɵgetCurrentView();
280
+ i0.ɵɵelementStart(0, "input", 49);
281
+ i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r99); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r97 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r97.onValueChange(column_r16.name, record_r63, $event)); });
282
+ i0.ɵɵelementEnd();
283
+ } if (rf & 2) {
284
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
285
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
286
+ const ctx_r70 = i0.ɵɵnextContext();
287
+ i0.ɵɵpropertyInterpolate("value", ctx_r70.getValue(record_r63, column_r16));
288
+ i0.ɵɵpropertyInterpolate("readonly", ctx_r70.getValidationAttributeValue(column_r16, "readonly"));
289
+ i0.ɵɵpropertyInterpolate("required", ctx_r70.getValidationAttributeValue(column_r16, "mandatory"));
290
+ i0.ɵɵproperty("formControlName", column_r16.name);
291
+ } }
292
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template(rf, ctx) { if (rf & 1) {
293
+ const _r105 = i0.ɵɵgetCurrentView();
294
+ i0.ɵɵelementStart(0, "mat-checkbox", 50);
295
+ i0.ɵɵlistener("change", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r105); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r103 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r103.onBooleanValueChange(column_r16.name, record_r63, $event)); });
296
+ i0.ɵɵelementEnd();
297
+ } if (rf & 2) {
298
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
299
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
300
+ const ctx_r71 = i0.ɵɵnextContext();
301
+ i0.ɵɵproperty("formControlName", column_r16.name)("checked", ctx_r71.getValue(record_r63, column_r16));
302
+ } }
303
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template(rf, ctx) { if (rf & 1) {
304
+ i0.ɵɵelementStart(0, "mat-option", 53);
305
+ i0.ɵɵtext(1);
306
+ i0.ɵɵelementEnd();
307
+ } if (rf & 2) {
308
+ const option_r110 = ctx.$implicit;
309
+ i0.ɵɵproperty("value", option_r110.id)("disabled", option_r110.disabled);
310
+ i0.ɵɵadvance(1);
311
+ i0.ɵɵtextInterpolate1(" ", option_r110.value, " ");
312
+ } }
313
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template(rf, ctx) { if (rf & 1) {
314
+ const _r113 = i0.ɵɵgetCurrentView();
315
+ i0.ɵɵelementStart(0, "mat-select", 51);
316
+ i0.ɵɵlistener("selectionChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template_mat_select_selectionChange_0_listener($event) { i0.ɵɵrestoreView(_r113); const record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r111 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r111.onSelectValueChange(column_r16.name, record_r63, $event)); });
317
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template, 2, 3, "mat-option", 52);
318
+ i0.ɵɵelementEnd();
319
+ } if (rf & 2) {
320
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
321
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
322
+ const ctx_r72 = i0.ɵɵnextContext();
323
+ i0.ɵɵpropertyInterpolate("required", ctx_r72.getValidationAttributeValue(column_r16, "mandatory"));
324
+ i0.ɵɵproperty("formControlName", column_r16.name)("multiple", column_r16.multiple)("value", ctx_r72.getValue(record_r63, column_r16));
325
+ i0.ɵɵadvance(1);
326
+ i0.ɵɵproperty("ngForOf", column_r16.domainValues);
327
+ } }
328
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template(rf, ctx) { if (rf & 1) {
329
+ i0.ɵɵelement(0, "input", 54);
330
+ } if (rf & 2) {
331
+ i0.ɵɵnextContext();
332
+ const _r74 = i0.ɵɵreference(9);
333
+ const record_r63 = i0.ɵɵnextContext().$implicit;
334
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
335
+ const ctx_r73 = i0.ɵɵnextContext();
336
+ i0.ɵɵpropertyInterpolate("required", ctx_r73.getValidationAttributeValue(column_r16, "mandatory"));
337
+ i0.ɵɵpropertyInterpolate("value", ctx_r73.getValue(record_r63, column_r16));
338
+ i0.ɵɵproperty("formControlName", column_r16.name)("matAutocomplete", _r74);
339
+ } }
340
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template(rf, ctx) { if (rf & 1) {
341
+ i0.ɵɵelementStart(0, "mat-option", 55);
342
+ i0.ɵɵtext(1);
343
+ i0.ɵɵelementEnd();
344
+ } if (rf & 2) {
345
+ const option_r119 = ctx.$implicit;
346
+ i0.ɵɵproperty("value", option_r119.id);
347
+ i0.ɵɵadvance(1);
348
+ i0.ɵɵtextInterpolate1(" ", option_r119.value, " ");
349
+ } }
350
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
351
+ const _r122 = i0.ɵɵgetCurrentView();
352
+ i0.ɵɵelementStart(0, "td", 32);
353
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template, 5, 4, "div", 33);
354
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template, 1, 1, "input", 34);
355
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template, 1, 7, "input", 35);
356
+ i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template, 1, 4, "input", 36);
357
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template, 1, 2, "mat-checkbox", 37);
358
+ i0.ɵɵtemplate(6, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template, 2, 5, "mat-select", 38);
359
+ i0.ɵɵtemplate(7, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template, 1, 4, "input", 39);
360
+ i0.ɵɵelementStart(8, "mat-autocomplete", 40, 41);
361
+ i0.ɵɵlistener("optionSelected", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template_mat_autocomplete_optionSelected_8_listener($event) { i0.ɵɵrestoreView(_r122); const record_r63 = i0.ɵɵnextContext().$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r120 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r120.onAutocompleteValueChange(column_r16.name, record_r63, $event)); });
362
+ i0.ɵɵtemplate(10, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template, 2, 2, "mat-option", 42);
363
+ i0.ɵɵpipe(11, "async");
364
+ i0.ɵɵelementEnd()();
365
+ } if (rf & 2) {
366
+ const record_r63 = i0.ɵɵnextContext().$implicit;
367
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
368
+ const ctx_r64 = i0.ɵɵnextContext();
369
+ i0.ɵɵproperty("formGroup", ctx_r64.formGroup)("ngClass", ctx_r64.getCellClass(record_r63, column_r16));
370
+ i0.ɵɵadvance(1);
371
+ i0.ɵɵproperty("ngIf", column_r16.type === "date");
372
+ i0.ɵɵadvance(1);
373
+ i0.ɵɵproperty("ngIf", column_r16.type === "time");
374
+ i0.ɵɵadvance(1);
375
+ i0.ɵɵproperty("ngIf", column_r16.type === "number");
376
+ i0.ɵɵadvance(1);
377
+ i0.ɵɵproperty("ngIf", !column_r16.type || column_r16.type === "string");
378
+ i0.ɵɵadvance(1);
379
+ i0.ɵɵproperty("ngIf", column_r16.type === "boolean");
380
+ i0.ɵɵadvance(1);
381
+ i0.ɵɵproperty("ngIf", column_r16.type === "list");
382
+ i0.ɵɵadvance(1);
383
+ i0.ɵɵproperty("ngIf", column_r16.type === "autocomplete");
384
+ i0.ɵɵadvance(3);
385
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 10, ctx_r64.filteredOptions));
386
+ } }
387
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template(rf, ctx) { if (rf & 1) {
388
+ i0.ɵɵelement(0, "td", 29);
389
+ i0.ɵɵpipe(1, "sanitizeHtml");
390
+ } if (rf & 2) {
391
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
392
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
393
+ const ctx_r126 = i0.ɵɵnextContext();
394
+ i0.ɵɵproperty("ngClass", ctx_r126.getCellClass(record_r63, column_r16))("innerHTML", i0.ɵɵpipeBind1(1, 2, ctx_r126.getValue(record_r63, column_r16)), i0.ɵɵsanitizeHtml);
395
+ } }
396
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template(rf, ctx) { if (rf & 1) {
397
+ i0.ɵɵelement(0, "img", 26);
398
+ i0.ɵɵpipe(1, "async");
399
+ i0.ɵɵpipe(2, "secureImage");
400
+ } if (rf & 2) {
401
+ const record_r63 = i0.ɵɵnextContext(3).$implicit;
402
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
403
+ const ctx_r131 = i0.ɵɵnextContext();
404
+ i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r131.getValue(record_r63, column_r16))), i0.ɵɵsanitizeUrl);
405
+ } }
406
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
407
+ i0.ɵɵelementStart(0, "span");
408
+ i0.ɵɵtext(1);
409
+ i0.ɵɵpipe(2, "translate");
410
+ i0.ɵɵelementEnd();
411
+ } if (rf & 2) {
412
+ i0.ɵɵadvance(1);
413
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
414
+ } }
415
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
416
+ i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
417
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
418
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template, 3, 5, "img", 24);
419
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
420
+ i0.ɵɵelementEnd()();
421
+ } if (rf & 2) {
422
+ const _r132 = i0.ɵɵreference(4);
423
+ const record_r63 = i0.ɵɵnextContext(2).$implicit;
424
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
425
+ const ctx_r128 = i0.ɵɵnextContext();
426
+ i0.ɵɵproperty("ngClass", ctx_r128.getCellClass(record_r63, column_r16));
427
+ i0.ɵɵadvance(1);
428
+ i0.ɵɵpropertyInterpolate("href", ctx_r128.getValue(record_r63, column_r16), i0.ɵɵsanitizeUrl);
429
+ i0.ɵɵadvance(1);
430
+ i0.ɵɵproperty("ngIf", ctx_r128.isImg(ctx_r128.getValue(record_r63, column_r16)))("ngIfElse", _r132);
431
+ } }
432
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
433
+ i0.ɵɵtemplate(0, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template, 2, 4, "td", 27);
434
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template, 5, 4, "ng-template", null, 56, i0.ɵɵtemplateRefExtractor);
435
+ } if (rf & 2) {
436
+ const _r127 = i0.ɵɵreference(2);
437
+ const record_r63 = i0.ɵɵnextContext().$implicit;
438
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
439
+ const ctx_r66 = i0.ɵɵnextContext();
440
+ i0.ɵɵproperty("ngIf", !ctx_r66.isUrl(ctx_r66.getValue(record_r63, column_r16)))("ngIfElse", _r127);
441
+ } }
442
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
443
+ i0.ɵɵelementContainerStart(0);
444
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 12, 12, "td", 30);
445
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template, 3, 2, "ng-template", null, 31, i0.ɵɵtemplateRefExtractor);
446
+ i0.ɵɵelementContainerEnd();
447
+ } if (rf & 2) {
448
+ const record_r63 = ctx.$implicit;
449
+ const _r65 = i0.ɵɵreference(3);
450
+ const ctx_r62 = i0.ɵɵnextContext(4);
451
+ i0.ɵɵadvance(1);
452
+ i0.ɵɵproperty("ngIf", ctx_r62.isEdition(record_r63))("ngIfElse", _r65);
453
+ } }
454
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
455
+ i0.ɵɵelementContainerStart(0);
456
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 19);
457
+ i0.ɵɵelementContainerEnd();
458
+ } }
459
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
460
+ const _r145 = i0.ɵɵgetCurrentView();
461
+ i0.ɵɵelementStart(0, "td", 22)(1, "mat-icon", 58);
462
+ i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template_mat_icon_click_1_listener($event) { i0.ɵɵrestoreView(_r145); const column_r16 = i0.ɵɵnextContext(3).$implicit; return i0.ɵɵresetView(column_r16.onClick($event)); });
463
+ i0.ɵɵelementEnd()();
464
+ } if (rf & 2) {
465
+ const record_r142 = ctx.$implicit;
466
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
467
+ const ctx_r141 = i0.ɵɵnextContext();
468
+ i0.ɵɵproperty("ngClass", ctx_r141.getCellClass(record_r142, column_r16));
469
+ i0.ɵɵadvance(1);
470
+ i0.ɵɵpropertyInterpolate("svgIcon", ctx_r141.getValue(record_r142, column_r16) || column_r16.icon);
471
+ } }
472
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
473
+ i0.ɵɵelementContainerStart(0);
474
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 2, 2, "td", 57);
475
+ i0.ɵɵelementContainerEnd();
476
+ } }
477
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {
478
+ const _r156 = i0.ɵɵgetCurrentView();
479
+ i0.ɵɵelementStart(0, "button", 62);
480
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r156); const button_r150 = i0.ɵɵnextContext(2).$implicit; const record_r148 = i0.ɵɵnextContext().$implicit; const ctx_r154 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r154.onButtonClick(button_r150.click, record_r148)); });
481
+ i0.ɵɵelement(1, "mat-icon", 63);
482
+ i0.ɵɵelementEnd();
483
+ } if (rf & 2) {
484
+ const button_r150 = i0.ɵɵnextContext(2).$implicit;
485
+ i0.ɵɵproperty("color", button_r150.color)("disabled", button_r150.disabled);
486
+ i0.ɵɵadvance(1);
487
+ i0.ɵɵpropertyInterpolate("svgIcon", button_r150.icon);
488
+ } }
489
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template(rf, ctx) { if (rf & 1) {
490
+ const _r161 = i0.ɵɵgetCurrentView();
491
+ i0.ɵɵelementStart(0, "button", 64);
492
+ i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r161); const button_r150 = i0.ɵɵnextContext(2).$implicit; const record_r148 = i0.ɵɵnextContext().$implicit; const ctx_r159 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r159.onButtonClick(button_r150.click, record_r148)); });
493
+ i0.ɵɵelement(1, "mat-icon", 63);
494
+ i0.ɵɵelementEnd();
495
+ } if (rf & 2) {
496
+ const button_r150 = i0.ɵɵnextContext(2).$implicit;
497
+ i0.ɵɵproperty("color", button_r150.color)("disabled", button_r150.disabled);
498
+ i0.ɵɵadvance(1);
499
+ i0.ɵɵpropertyInterpolate("svgIcon", button_r150.icon);
500
+ } }
501
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
502
+ i0.ɵɵelementContainerStart(0);
503
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template, 2, 3, "button", 60);
504
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template, 2, 3, "button", 61);
505
+ i0.ɵɵelementContainerEnd();
506
+ } if (rf & 2) {
507
+ const button_r150 = i0.ɵɵnextContext().$implicit;
508
+ i0.ɵɵadvance(1);
509
+ i0.ɵɵproperty("ngIf", button_r150.style === "mat-icon-button");
510
+ i0.ɵɵadvance(1);
511
+ i0.ɵɵproperty("ngIf", button_r150.style !== "mat-icon-button");
512
+ } }
513
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template(rf, ctx) { if (rf & 1) {
514
+ i0.ɵɵelementStart(0, "span");
515
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template, 3, 2, "ng-container", 10);
516
+ i0.ɵɵelementEnd();
517
+ } if (rf & 2) {
518
+ const button_r150 = ctx.$implicit;
519
+ const record_r148 = i0.ɵɵnextContext().$implicit;
520
+ const ctx_r149 = i0.ɵɵnextContext(4);
521
+ i0.ɵɵadvance(1);
522
+ i0.ɵɵproperty("ngIf", ctx_r149.isEdition(record_r148) === button_r150.editMode);
523
+ } }
524
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
525
+ i0.ɵɵelementContainerStart(0);
526
+ i0.ɵɵelementStart(1, "td", 22);
527
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template, 2, 1, "span", 59);
528
+ i0.ɵɵelementEnd();
529
+ i0.ɵɵelementContainerEnd();
530
+ } if (rf & 2) {
531
+ const record_r148 = ctx.$implicit;
532
+ const column_r16 = i0.ɵɵnextContext(3).$implicit;
533
+ const ctx_r147 = i0.ɵɵnextContext();
534
+ i0.ɵɵadvance(1);
535
+ i0.ɵɵproperty("ngClass", ctx_r147.getCellClass(record_r148, column_r16));
536
+ i0.ɵɵadvance(1);
537
+ i0.ɵɵproperty("ngForOf", ctx_r147.getValue(record_r148, column_r16));
538
+ } }
539
+ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
540
+ i0.ɵɵelementContainerStart(0);
541
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template, 3, 2, "ng-container", 19);
542
+ i0.ɵɵelementContainerEnd();
543
+ } }
544
+ function EntityTableComponent_ng_container_5_ng_container_3_Template(rf, ctx) { if (rf & 1) {
545
+ i0.ɵɵelementContainerStart(0);
546
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template, 2, 0, "ng-container", 10);
547
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template, 2, 0, "ng-container", 10);
548
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template, 2, 0, "ng-container", 10);
549
+ i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template, 2, 0, "ng-container", 10);
550
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template, 2, 0, "ng-container", 10);
551
+ i0.ɵɵelementContainerEnd();
552
+ } if (rf & 2) {
553
+ const columnRenderer_r24 = ctx.ngIf;
554
+ const ctx_r19 = i0.ɵɵnextContext(2);
555
+ i0.ɵɵadvance(1);
556
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Default);
557
+ i0.ɵɵadvance(1);
558
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.HTML);
559
+ i0.ɵɵadvance(1);
560
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.UnsanitizedHTML);
561
+ i0.ɵɵadvance(1);
562
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Icon);
563
+ i0.ɵɵadvance(1);
564
+ i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.ButtonGroup);
565
+ } }
566
+ function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
567
+ i0.ɵɵelementContainerStart(0, 14);
568
+ i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_Template, 2, 0, "ng-container", 10);
569
+ i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_2_Template, 2, 0, "ng-container", 10);
570
+ i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_Template, 6, 5, "ng-container", 10);
571
+ i0.ɵɵelementContainerEnd();
572
+ } if (rf & 2) {
573
+ const column_r16 = ctx.$implicit;
574
+ const ctx_r2 = i0.ɵɵnextContext();
575
+ i0.ɵɵproperty("matColumnDef", column_r16.name);
576
+ i0.ɵɵadvance(1);
577
+ i0.ɵɵproperty("ngIf", ctx_r2.columnIsSortable(column_r16));
578
+ i0.ɵɵadvance(1);
579
+ i0.ɵɵproperty("ngIf", !ctx_r2.columnIsSortable(column_r16));
580
+ i0.ɵɵadvance(1);
581
+ i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
582
+ } }
583
+ function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
584
+ i0.ɵɵelement(0, "tr", 65);
585
+ } if (rf & 2) {
586
+ const ctx_r3 = i0.ɵɵnextContext();
587
+ i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
588
+ } }
589
+ function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
590
+ const _r169 = i0.ɵɵgetCurrentView();
591
+ i0.ɵɵelementStart(0, "tr", 66);
592
+ i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r169); const record_r167 = restoredCtx.$implicit; const ctx_r168 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r168.onRowSelect(record_r167)); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r169); const record_r167 = restoredCtx.$implicit; const ctx_r170 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r170.onRowClick(record_r167)); });
593
+ i0.ɵɵelementEnd();
594
+ } if (rf & 2) {
595
+ const record_r167 = ctx.$implicit;
596
+ const ctx_r4 = i0.ɵɵnextContext();
597
+ i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r167))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r167));
598
+ } }
599
+ function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
600
+ const _r172 = i0.ɵɵgetCurrentView();
601
+ i0.ɵɵelementStart(0, "igo-entity-table-paginator", 67);
602
+ i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r172); const ctx_r171 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r171.paginatorChange($event)); });
603
+ i0.ɵɵelementEnd();
604
+ } if (rf & 2) {
605
+ const ctx_r5 = i0.ɵɵnextContext();
606
+ i0.ɵɵproperty("store", ctx_r5.store)("paginatorOptions", ctx_r5.paginatorOptions)("entitySortChange$", ctx_r5.entitySortChange$);
607
+ } }
608
+ export class EntityTableComponent {
609
+ constructor(cdRef, formBuilder, _focusMonitor, _elementRef, ngControl, _parentForm, _controlName, _defaultErrorStateMatcher, dateAdapter) {
610
+ this.cdRef = cdRef;
611
+ this.formBuilder = formBuilder;
612
+ this._focusMonitor = _focusMonitor;
613
+ this._elementRef = _elementRef;
614
+ this.ngControl = ngControl;
615
+ this._parentForm = _parentForm;
616
+ this._controlName = _controlName;
617
+ this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
618
+ this.dateAdapter = dateAdapter;
619
+ this.entitySortChange$ = new BehaviorSubject(false);
620
+ this.formGroup = new FormGroup({});
621
+ /**
622
+ * Reference to the column renderer types
623
+ * @internal
624
+ */
625
+ this.entityTableColumnRenderer = EntityTableColumnRenderer;
626
+ /**
627
+ * Reference to the selection's state
628
+ * @internal
629
+ */
630
+ this.entityTableSelectionState = EntityTableSelectionState;
631
+ /**
632
+ * Observable of the selection,s state
633
+ * @internal
634
+ */
635
+ this.selectionState$ = new BehaviorSubject(undefined);
636
+ /**
637
+ * Scroll behavior on selection
638
+ */
639
+ this.scrollBehavior = EntityTableScrollBehavior.Auto;
640
+ /**
641
+ * Whether nulls should be first when sorting
642
+ */
643
+ this.sortNullsFirst = false;
644
+ /**
645
+ * Show the table paginator or not. False by default.
646
+ */
647
+ this.withPaginator = false;
648
+ /**
649
+ * Event emitted when an entity (row) is clicked
650
+ */
651
+ this.entityClick = new EventEmitter();
652
+ /**
653
+ * Event emitted when an entity (row) is selected
654
+ */
655
+ this.entitySelectChange = new EventEmitter();
656
+ /**
657
+ * Event emitted when the table sort is changed.
658
+ */
659
+ this.entitySortChange = new EventEmitter(undefined);
660
+ /**
661
+ * Data source consumable by the underlying material table
662
+ * @internal
663
+ */
664
+ this.dataSource = new MatTableDataSource();
665
+ this.dateAdapter.setLocale('fr-CA');
666
+ }
667
+ /**
668
+ * Table paginator
669
+ */
670
+ set paginator(value) {
671
+ this._paginator = value;
672
+ this.dataSource.paginator = value;
673
+ }
674
+ get paginator() {
675
+ return this._paginator;
676
+ }
677
+ /**
678
+ * Table headers
679
+ * @internal
680
+ */
681
+ get headers() {
682
+ let columns = this.template.columns
683
+ .filter((column) => column.visible !== false)
684
+ .map((column) => column.name);
685
+ if (this.selectionCheckbox === true) {
686
+ columns = ['selectionCheckbox'].concat(columns);
687
+ }
688
+ return columns;
689
+ }
690
+ /**
691
+ * Whether selection is supported
692
+ * @internal
693
+ */
694
+ get selection() { return this.template.selection || false; }
695
+ /**
696
+ * Whether a selection checkbox should be displayed
697
+ * @internal
698
+ */
699
+ get selectionCheckbox() { return this.template.selectionCheckbox || false; }
700
+ /**
701
+ * Whether selection many entities should eb supported
702
+ * @internal
703
+ */
704
+ get selectMany() { return this.template.selectMany || false; }
705
+ /**
706
+ * Whether selection many entities should eb supported
707
+ * @internal
708
+ */
709
+ get fixedHeader() { return this.template.fixedHeader === undefined ? true : this.template.fixedHeader; }
710
+ /**
711
+ * Track the selection state to properly display the selection checkboxes
712
+ * @internal
713
+ */
714
+ ngOnInit() {
715
+ this.handleDatasource();
716
+ this.dataSource.paginator = this.paginator;
717
+ }
718
+ /**
719
+ * @internal
720
+ */
721
+ ngOnChanges(changes) {
722
+ const store = changes.store;
723
+ if (store && store.currentValue !== store.previousValue) {
724
+ this.handleDatasource();
725
+ }
726
+ }
727
+ /**
728
+ * Process text or number value change (edition)
729
+ */
730
+ onValueChange(column, record, event) {
731
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
732
+ record.entity.properties[key] = event.target.value;
733
+ }
734
+ /**
735
+ * Process boolean value change (edition)
736
+ */
737
+ onBooleanValueChange(column, record, event) {
738
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
739
+ record.entity.properties[key] = event.checked;
740
+ }
741
+ /**
742
+ * Process select value change (edition)
743
+ */
744
+ onSelectValueChange(column, record, event) {
745
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
746
+ record.entity.properties[key] = event.value;
747
+ }
748
+ /**
749
+ * Process autocomplete value change (edition)
750
+ */
751
+ onAutocompleteValueChange(column, record, event) {
752
+ this.formGroup.controls[column].setValue(event.option.viewValue);
753
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
754
+ record.entity.properties[key] = event.option.value;
755
+ }
756
+ /**
757
+ * Process date value change (edition)
758
+ */
759
+ onDateChange(column, record, event) {
760
+ const format = "YYYY-MM-DD";
761
+ const value = moment(event.value).format(format);
762
+ const key = this.getColumnKeyWithoutPropertiesTag(column);
763
+ record.entity.properties[key] = value;
764
+ }
765
+ /**
766
+ * Enable edition mode for one row
767
+ * More than one row can be edited at the same time
768
+ */
769
+ enableEdit(record) {
770
+ const item = record.entity.properties || record.entity;
771
+ this.template.columns.forEach(column => {
772
+ column.title = column.validation?.mandatory && !column.title.includes('*') ? column.title + ' *' : column.title;
773
+ const key = this.getColumnKeyWithoutPropertiesTag(column.name);
774
+ if (column.type === 'boolean') {
775
+ if (!item[key] || item[key] === null) {
776
+ item[key] = false;
777
+ }
778
+ else if (typeof item[key] === 'string') {
779
+ item[key] = JSON.parse(item[key].toLowerCase());
780
+ }
781
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
782
+ }
783
+ else if (column.type === 'list') {
784
+ if (column.multiple) {
785
+ this.formGroup.setControl(column.name, this.formBuilder.control([item[key]]));
786
+ }
787
+ else {
788
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
789
+ typeof item[key] === 'string' ?
790
+ this.formGroup.controls[column.name].setValue(parseInt(item[key])) :
791
+ this.formGroup.controls[column.name].setValue(item[key]);
792
+ }
793
+ }
794
+ else if (column.type === 'autocomplete') {
795
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
796
+ this.filteredOptions = this.formGroup.controls[column.name].valueChanges.pipe(map(value => {
797
+ if (value.length) {
798
+ return column.domainValues.filter((option) => {
799
+ const filterNormalized = value ? value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '') : '';
800
+ const featureNameNormalized = option.value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
801
+ return featureNameNormalized.includes(filterNormalized);
802
+ });
803
+ }
804
+ }));
805
+ let formControlValue = item[key];
806
+ column.domainValues.forEach(option => {
807
+ if (typeof formControlValue === 'string' && /^\d+$/.test(formControlValue)) {
808
+ formControlValue = parseInt(formControlValue);
809
+ }
810
+ if (option.value === formControlValue || option.id === formControlValue) {
811
+ formControlValue = option.value;
812
+ }
813
+ });
814
+ this.formGroup.controls[column.name].setValue(formControlValue);
815
+ if (this.isEdition(record) && column.linkColumnForce) {
816
+ const entity = record.entity;
817
+ this.formGroup.controls[column.name].setValue(entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)]);
818
+ }
819
+ }
820
+ else if (column.type === 'date') {
821
+ if (column.visible) {
822
+ if (item[key]) {
823
+ let date = moment(item[key]);
824
+ item[key] = date.utc().format('YYYY-MM-DD');
825
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
826
+ }
827
+ else {
828
+ const newKey = this.getColumnKeyWithoutPropertiesTag(column.name);
829
+ record.entity.properties[newKey] = null;
830
+ this.formGroup.setControl(column.name, this.formBuilder.control(null));
831
+ }
832
+ }
833
+ }
834
+ else {
835
+ this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
836
+ }
837
+ if (this.formGroup.controls[column.name] && this.getValidationAttributeValue(column, 'readonly')) {
838
+ this.formGroup.controls[column.name].disable();
839
+ }
840
+ });
841
+ }
842
+ handleDatasource() {
843
+ this.unsubscribeStore();
844
+ this.selection$$ = this.store.stateView
845
+ .manyBy$((record) => record.state.selected === true)
846
+ .subscribe((records) => {
847
+ const firstSelected = records[0];
848
+ const firstSelectedStateviewPosition = this.store.stateView.all().indexOf(firstSelected);
849
+ const pageMax = this.paginator ? this.paginator.pageSize * (this.paginator.pageIndex + 1) : 0;
850
+ const pageMin = this.paginator ? pageMax - this.paginator.pageSize : 0;
851
+ if (this.paginator &&
852
+ (firstSelectedStateviewPosition < pageMin ||
853
+ firstSelectedStateviewPosition >= pageMax)) {
854
+ const pageToReach = Math.floor(firstSelectedStateviewPosition / this.paginator.pageSize);
855
+ this.dataSource.paginator.pageIndex = pageToReach;
856
+ }
857
+ this.selectionState$.next(this.computeSelectionState(records));
858
+ });
859
+ this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {
860
+ if (all[0]) {
861
+ this.enableEdit(all[0]);
862
+ }
863
+ this.dataSource.data = all;
864
+ });
865
+ }
866
+ /**
867
+ * Unbind the store watcher
868
+ * @internal
869
+ */
870
+ ngOnDestroy() {
871
+ this.unsubscribeStore();
872
+ }
873
+ unsubscribeStore() {
874
+ if (this.selection$$) {
875
+ this.selection$$.unsubscribe();
876
+ }
877
+ if (this.dataSource$$) {
878
+ this.dataSource$$.unsubscribe();
879
+ }
880
+ }
881
+ /**
882
+ * Trackby function
883
+ * @param record Record
884
+ * @param index Record index
885
+ * @internal
886
+ */
887
+ getTrackByFunction() {
888
+ return (index, record) => {
889
+ return record.ref;
890
+ };
891
+ }
892
+ /**
893
+ * Trigger a refresh of thre table. This can be useful when
894
+ * the data source doesn't emit a new value but for some reason
895
+ * the records need an update.
896
+ * @internal
897
+ */
898
+ refresh() {
899
+ this.cdRef.detectChanges();
900
+ }
901
+ paginatorChange(event) {
902
+ this.paginator = event;
903
+ }
904
+ /**
905
+ * On sort, sort the store
906
+ * @param event Sort event
907
+ * @internal
908
+ */
909
+ onSort(event) {
910
+ const direction = event.direction;
911
+ const column = this.template.columns
912
+ .find((c) => c.name === event.active);
913
+ if (direction === 'asc' || direction === 'desc') {
914
+ this.store.stateView.sort({
915
+ valueAccessor: (record) => this.getValue(record, column),
916
+ direction,
917
+ nullsFirst: this.sortNullsFirst
918
+ });
919
+ this.entitySortChange.emit({ column, direction });
920
+ this.entitySortChange$.next(true);
921
+ }
922
+ else {
923
+ this.store.stateView.sort(undefined);
924
+ }
925
+ }
926
+ /**
927
+ * When an entity is clicked, emit an event
928
+ * @param record Record
929
+ * @internal
930
+ */
931
+ onRowClick(record) {
932
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
933
+ this.entityClick.emit(record.entity);
934
+ }
935
+ /**
936
+ * When an entity is selected, select it in the store and emit an event. Even if
937
+ * "many" is set to true, this method always select a single, exclusive row. Selecting
938
+ * multiple rows should be achieved by using the checkboxes.
939
+ * @param record Record
940
+ * @internal
941
+ */
942
+ onRowSelect(record) {
943
+ if (this.selection === false) {
944
+ return;
945
+ }
946
+ const entity = record.entity;
947
+ this.store.state.update(entity, { selected: true }, true);
948
+ this.entitySelectChange.emit({ added: [entity] });
949
+ }
950
+ /**
951
+ * Select or unselect all rows at once. On select, emit an event.
952
+ * @param toggle Select or unselect
953
+ * @internal
954
+ */
955
+ onToggleRows(toggle) {
956
+ if (this.selection === false) {
957
+ return;
958
+ }
959
+ this.store.state.updateAll({ selected: toggle });
960
+ if (toggle === true) {
961
+ const entities = this.store.stateView
962
+ .all()
963
+ .map((record) => record.entity);
964
+ this.entitySelectChange.emit({ added: [entities] });
965
+ }
966
+ }
967
+ /**
968
+ * When an entity is toggled, select or unselect it in the store. On select,
969
+ * emit an event.
970
+ * @param toggle Select or unselect
971
+ * @param record Record
972
+ * @internal
973
+ */
974
+ onToggleRow(toggle, record) {
975
+ if (this.selection === false) {
976
+ return;
977
+ }
978
+ const entity = record.entity;
979
+ const exclusive = toggle === true && !this.selectMany;
980
+ this.store.state.update(entity, { selected: toggle }, exclusive);
981
+ if (toggle === true) {
982
+ this.entitySelectChange.emit({ added: [entity] });
983
+ }
984
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
985
+ }
986
+ /**
987
+ * When an entity is toggled, select or unselect it in the store. On select,
988
+ * emit an event.
989
+ * @param toggle Select or unselect
990
+ * @param record Record
991
+ * @internal
992
+ */
993
+ onShiftToggleRow(toggle, record, event) {
994
+ if (this.selection === false) {
995
+ return;
996
+ }
997
+ if (this.selectMany === false || this.lastRecordCheckedKey === undefined) {
998
+ this.onToggleRow(toggle, record);
999
+ return;
1000
+ }
1001
+ // This is a workaround mat checkbox wrong behavior
1002
+ // when the shift key is held.
1003
+ // See https://github.com/angular/components/issues/6232
1004
+ const range = window.document.createRange();
1005
+ range.selectNode(event.target);
1006
+ window.getSelection().removeAllRanges();
1007
+ window.getSelection().addRange(range);
1008
+ event.stopImmediatePropagation();
1009
+ const records = this.store.stateView.all();
1010
+ const recordIndex = records.indexOf(record);
1011
+ const lastRecordChecked = this.store.stateView.get(this.lastRecordCheckedKey);
1012
+ const lastRecordIndex = records.indexOf(lastRecordChecked);
1013
+ const indexes = [recordIndex, lastRecordIndex];
1014
+ const selectRecords = records.slice(Math.min(...indexes), Math.max(...indexes) + 1);
1015
+ const entities = selectRecords.map((_record) => _record.entity);
1016
+ this.store.state.updateMany(entities, { selected: toggle });
1017
+ if (toggle === true) {
1018
+ this.entitySelectChange.emit({ added: entities });
1019
+ }
1020
+ this.lastRecordCheckedKey = this.store.stateView.getKey(record);
1021
+ }
1022
+ /**
1023
+ * Compute the selection state
1024
+ * @returns Whether all, some or no rows are selected
1025
+ * @internal
1026
+ */
1027
+ computeSelectionState(selectedRecords) {
1028
+ const states = EntityTableSelectionState;
1029
+ const selectionCount = selectedRecords.length;
1030
+ return selectionCount === 0 ?
1031
+ states.None :
1032
+ (selectionCount === this.store.stateView.count ? states.All : states.Some);
1033
+ }
1034
+ /**
1035
+ * Whether a column is sortable
1036
+ * @param column Column
1037
+ * @returns True if a column is sortable
1038
+ * @internal
1039
+ */
1040
+ columnIsSortable(column) {
1041
+ let sortable = column.sort;
1042
+ if (sortable === undefined) {
1043
+ sortable = this.template.sort === undefined ? false : this.template.sort;
1044
+ }
1045
+ return sortable;
1046
+ }
1047
+ /**
1048
+ * Whether a row is should be selected based on the underlying entity state
1049
+ * @param record Record
1050
+ * @returns True if a row should be selected
1051
+ * @internal
1052
+ */
1053
+ rowIsSelected(record) {
1054
+ const state = record.state;
1055
+ return state.selected ? state.selected : false;
1056
+ }
1057
+ isImg(value) {
1058
+ if (this.isUrl(value)) {
1059
+ return (['jpg', 'png', 'gif'].indexOf(value.split('.').pop().toLowerCase()) !== -1);
1060
+ }
1061
+ else {
1062
+ return false;
1063
+ }
1064
+ }
1065
+ isUrl(value) {
1066
+ if (typeof value === 'string') {
1067
+ return (value.slice(0, 8) === 'https://' || value.slice(0, 7) === 'http://');
1068
+ }
1069
+ else {
1070
+ return false;
1071
+ }
1072
+ }
1073
+ /**
1074
+ * Method to access an entity's values
1075
+ * @param record Record
1076
+ * @param column Column
1077
+ * @returns Any value
1078
+ * @internal
1079
+ */
1080
+ getValue(record, column) {
1081
+ const entity = record.entity;
1082
+ let value;
1083
+ if (column.valueAccessor !== undefined) {
1084
+ return column.valueAccessor(entity, record);
1085
+ }
1086
+ if (this.template.valueAccessor !== undefined) {
1087
+ return this.template.valueAccessor(entity, column.name, record);
1088
+ }
1089
+ value = this.store.getProperty(entity, column.name);
1090
+ if (column.type === 'boolean') {
1091
+ if (value === undefined || value === null || value === '') {
1092
+ value = false;
1093
+ }
1094
+ else if (typeof value !== 'boolean' && value !== undefined) {
1095
+ if (typeof value === 'number') {
1096
+ value = Boolean(value);
1097
+ }
1098
+ else {
1099
+ value = JSON.parse(value.toLowerCase());
1100
+ }
1101
+ }
1102
+ if (!this.isEdition(record)) {
1103
+ value = value ? '&#10003;' : ''; // check mark
1104
+ }
1105
+ }
1106
+ else if (column.type === 'list' && value && column.domainValues) {
1107
+ const entity = record.entity;
1108
+ if (column.multiple) {
1109
+ let list_id;
1110
+ typeof value === 'string' ? list_id = value.match(/[\w.-]+/g).map(Number) : list_id = value;
1111
+ let list_option = [];
1112
+ column.domainValues.forEach(option => {
1113
+ if (list_id.includes(option.id)) {
1114
+ if (record.edition) {
1115
+ list_option.push(option.id);
1116
+ }
1117
+ else {
1118
+ list_option.push(option.value);
1119
+ }
1120
+ }
1121
+ });
1122
+ this.isEdition(record) ? value = list_id : value = list_option;
1123
+ }
1124
+ else {
1125
+ if (!this.isEdition(record) && column.linkColumnForce) {
1126
+ value = entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)];
1127
+ }
1128
+ else {
1129
+ column.domainValues.forEach(option => {
1130
+ if (typeof value === 'string' && /^\d+$/.test(value)) {
1131
+ value = parseInt(value);
1132
+ }
1133
+ if (option.value === value || option.id === value) {
1134
+ this.isEdition(record) ? value = option.id : value = option.value;
1135
+ }
1136
+ });
1137
+ }
1138
+ }
1139
+ }
1140
+ else if (column.type === 'autocomplete' && value && column.domainValues) {
1141
+ const entity = record.entity;
1142
+ if (!this.isEdition(record) && column.linkColumnForce) {
1143
+ value = entity?.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)];
1144
+ }
1145
+ else {
1146
+ column.domainValues.forEach(option => {
1147
+ if (typeof value === 'string' && /^\d+$/.test(value)) {
1148
+ value = parseInt(value);
1149
+ }
1150
+ if (option.value === value || option.id === value) {
1151
+ value = option.value;
1152
+ }
1153
+ });
1154
+ }
1155
+ }
1156
+ else if (column.type === 'date') {
1157
+ if (this.isEdition(record)) {
1158
+ if (value) {
1159
+ let date = moment(value);
1160
+ value = date.format();
1161
+ this.formGroup.controls[column.name].setValue(value);
1162
+ }
1163
+ }
1164
+ else if (!this.isEdition(record) && value === null) {
1165
+ value = "";
1166
+ }
1167
+ }
1168
+ if (value === undefined) {
1169
+ value = '';
1170
+ }
1171
+ return value;
1172
+ }
1173
+ /**
1174
+ * Method to access an entity's validation values
1175
+ * @param column Column
1176
+ * @param validationType string
1177
+ * @returns Any value (false if no validation or not the one concerned)
1178
+ * @internal
1179
+ */
1180
+ getValidationAttributeValue(column, validationType) {
1181
+ if (column.validation !== undefined && column.validation[validationType] !== undefined) {
1182
+ return column.validation[validationType];
1183
+ }
1184
+ else {
1185
+ return false;
1186
+ }
1187
+ }
1188
+ isEdition(record) {
1189
+ return record.entity.edition ? true : false;
1190
+ }
1191
+ /**
1192
+ * Return the type of renderer of a column
1193
+ * @param column Column
1194
+ * @returns Renderer type
1195
+ * @internal
1196
+ */
1197
+ getColumnRenderer(column) {
1198
+ if (column.renderer !== undefined) {
1199
+ return column.renderer;
1200
+ }
1201
+ return EntityTableColumnRenderer.Default;
1202
+ }
1203
+ /**
1204
+ * Return the table ngClass
1205
+ * @returns ngClass
1206
+ * @internal
1207
+ */
1208
+ getTableClass() {
1209
+ return {
1210
+ 'igo-entity-table-with-selection': this.selection
1211
+ };
1212
+ }
1213
+ /**
1214
+ * Return a header ngClass
1215
+ * @returns ngClass
1216
+ * @internal
1217
+ */
1218
+ getHeaderClass() {
1219
+ const func = this.template.headerClassFunc;
1220
+ if (func instanceof Function) {
1221
+ return func();
1222
+ }
1223
+ return {};
1224
+ }
1225
+ /**
1226
+ * Return a row ngClass
1227
+ * @param record Record
1228
+ * @returns ngClass
1229
+ * @internal
1230
+ */
1231
+ getRowClass(record) {
1232
+ const entity = record.entity;
1233
+ const func = this.template.rowClassFunc;
1234
+ if (func instanceof Function) {
1235
+ return func(entity, record);
1236
+ }
1237
+ return {};
1238
+ }
1239
+ /**
1240
+ * Return a row ngClass
1241
+ * @param record Record
1242
+ * @param column Column
1243
+ * @returns ngClass
1244
+ * @internal
1245
+ */
1246
+ getCellClass(record, column) {
1247
+ const entity = record.entity;
1248
+ const cls = {};
1249
+ const tableFunc = this.template.cellClassFunc;
1250
+ if (tableFunc instanceof Function) {
1251
+ Object.assign(cls, tableFunc(entity, column, record));
1252
+ }
1253
+ const columnFunc = column.cellClassFunc;
1254
+ if (columnFunc instanceof Function) {
1255
+ Object.assign(cls, columnFunc(entity, record));
1256
+ }
1257
+ return cls;
1258
+ }
1259
+ /**
1260
+ * When a button is clicked
1261
+ * @param func Function
1262
+ * @param record Record
1263
+ * @internal
1264
+ */
1265
+ onButtonClick(clickFunc, record) {
1266
+ this.enableEdit(record);
1267
+ if (typeof clickFunc === 'function') {
1268
+ clickFunc(record.entity, record);
1269
+ }
1270
+ }
1271
+ /**
1272
+ * Retrieve column name without his "properties" tag (useful for edition workspace properties)
1273
+ */
1274
+ getColumnKeyWithoutPropertiesTag(column) {
1275
+ if (column.includes('properties.')) {
1276
+ return column.split('.')[1];
1277
+ }
1278
+ return column;
1279
+ }
1280
+ }
1281
+ EntityTableComponent.ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.NgControl, 10), i0.ɵɵdirectiveInject(i1.NgForm, 8), i0.ɵɵdirectiveInject(i1.FormControlName, 8), i0.ɵɵdirectiveInject(i3.ErrorStateMatcher), i0.ɵɵdirectiveInject(i3.DateAdapter)); };
1282
+ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["igo-entity-table"]], inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, features: [i0.ɵɵProvidersFeature([{ provide: MatFormFieldControl, useExisting: EntityTableComponent }]), i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip"], ["mat-header-cell", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", 3, "matTooltip"], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["mat-cell", "", "class", "mat-cell-text edition", 3, "formGroup", "ngClass", 4, "ngIf", "ngIfElse"], ["isUnsanitizedHTML", ""], ["mat-cell", "", 1, "mat-cell-text", "edition", 3, "formGroup", "ngClass"], ["class", "date-picker", 4, "ngIf"], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur", 4, "ngIf"], ["matInput", "", "type", "number", "class", "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input", 4, "ngIf"], [3, "formControlName", "checked", "change", 4, "ngIf"], [3, "required", "formControlName", "multiple", "value", "selectionChange", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", 4, "ngIf"], ["panelWidth", "430px", 3, "optionSelected"], ["auto", "matAutocomplete"], [3, "value", 4, "ngFor", "ngForOf"], [1, "date-picker"], ["matSuffix", "", 3, "for"], ["matInput", "", 3, "matDatepicker", "formControlName", "value", "dateChange"], ["picker", ""], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur"], ["matInput", "", "type", "number", 1, "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input"], [3, "formControlName", "checked", "change"], [3, "required", "formControlName", "multiple", "value", "selectionChange"], [3, "value", "disabled", 4, "ngFor", "ngForOf"], [3, "value", "disabled"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value"], [3, "value"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon", "click"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown"], [3, "svgIcon"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
1283
+ i0.ɵɵelementStart(0, "div", 0)(1, "table", 1);
1284
+ i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
1285
+ i0.ɵɵelementContainerStart(2, 2);
1286
+ i0.ɵɵtemplate(3, EntityTableComponent_th_3_Template, 2, 1, "th", 3);
1287
+ i0.ɵɵtemplate(4, EntityTableComponent_td_4_Template, 2, 1, "td", 4);
1288
+ i0.ɵɵelementContainerEnd();
1289
+ i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_Template, 4, 4, "ng-container", 5);
1290
+ i0.ɵɵtemplate(6, EntityTableComponent_tr_6_Template, 1, 1, "tr", 6);
1291
+ i0.ɵɵtemplate(7, EntityTableComponent_tr_7_Template, 1, 4, "tr", 7);
1292
+ i0.ɵɵelementEnd();
1293
+ i0.ɵɵtemplate(8, EntityTableComponent_igo_entity_table_paginator_8_Template, 1, 3, "igo-entity-table-paginator", 8);
1294
+ i0.ɵɵelementEnd();
1295
+ } if (rf & 2) {
1296
+ i0.ɵɵadvance(1);
1297
+ i0.ɵɵproperty("ngClass", ctx.getTableClass())("dataSource", ctx.dataSource)("trackBy", ctx.getTrackByFunction());
1298
+ i0.ɵɵadvance(4);
1299
+ i0.ɵɵproperty("ngForOf", ctx.template.columns);
1300
+ i0.ɵɵadvance(1);
1301
+ i0.ɵɵproperty("matHeaderRowDef", ctx.headers)("matHeaderRowDefSticky", ctx.fixedHeader);
1302
+ i0.ɵɵadvance(1);
1303
+ i0.ɵɵproperty("matRowDefColumns", ctx.headers);
1304
+ i0.ɵɵadvance(1);
1305
+ i0.ɵɵproperty("ngIf", ctx.withPaginator);
1306
+ } }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i5.MatTable, i5.MatHeaderCellDef, i5.MatHeaderRowDef, i5.MatColumnDef, i5.MatCellDef, i5.MatRowDef, i5.MatHeaderCell, i5.MatCell, i5.MatHeaderRow, i5.MatRow, i6.MatAutocomplete, i6.MatAutocompleteTrigger, i3.MatOption, i7.MatSort, i7.MatSortHeader, i8.MatIcon, i9.MatButton, i10.MatCheckbox, i11.MatSuffix, i12.MatSelect, i13.StopPropagationDirective, i14.EntityTablePaginatorComponent, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.RequiredValidator, i1.MinValidator, i1.MaxValidator, i1.FormGroupDirective, i1.FormControlName, i15.MatInput, i16.MatDatepicker, i16.MatDatepickerInput, i16.MatDatepickerToggle, i17.MatTooltip, i18.EntityTableRowDirective, i4.AsyncPipe, i19.SanitizeHtmlPipe, i20.SecureImagePipe, i21.TranslatePipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}th.mat-header-cell[_ngcontent-%COMP%], td.mat-cell[_ngcontent-%COMP%], td.mat-footer-cell[_ngcontent-%COMP%]{padding:0 3px}entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}.class_hidden[_ngcontent-%COMP%]{visibility:hidden}.class_display_none[_ngcontent-%COMP%]{display:none}.class_boolean[_ngcontent-%COMP%], .class_icon[_ngcontent-%COMP%], .class_number[_ngcontent-%COMP%]{text-align:center;padding-right:35px!important}.class_sting[_ngcontent-%COMP%], .class_text[_ngcontent-%COMP%], .class_number_edition[_ngcontent-%COMP%]{text-align:left}td.edition[_ngcontent-%COMP%]{background:rgba(166,166,166,.2)}input[_ngcontent-%COMP%]{border-bottom:1px solid darkgrey}"], changeDetection: 0 });
1307
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityTableComponent, [{
1308
+ type: Component,
1309
+ args: [{ selector: 'igo-entity-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MatFormFieldControl, useExisting: EntityTableComponent }], template: "<div class=\"table-container\">\r\n <table mat-table matSort [ngClass]=\"getTableClass()\" [dataSource]=\"dataSource\" [trackBy]=\"getTrackByFunction()\" (matSortChange)=\"onSort($event)\">\r\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngIf=\"selectMany\">\r\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\r\n <mat-checkbox (change)=\"onToggleRows($event.checked)\" [checked]=\"selectionState === entityTableSelectionState.All\"\r\n [indeterminate]=\"selectionState === entityTableSelectionState.Some\">\r\n </mat-checkbox>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td mat-cell *matCellDef=\"let record\">\r\n <mat-checkbox (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\" (click)=\"$event.shiftKey ?\r\n onShiftToggleRow(!rowIsSelected(record), record, $event) : $event.stopPropagation()\" (change)=\"onToggleRow($event.checked,record)\"\r\n [checked]=\"rowIsSelected(record)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container [matColumnDef]=\"column.name\" *ngFor=\"let column of template.columns\">\r\n <ng-container *ngIf=\"columnIsSortable(column)\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\r\n {{column.title}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columnIsSortable(column)\">\r\n <th mat-header-cell *matHeaderCellDef [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\r\n {{column.title}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlDefault\" [ngClass]=\"getCellClass(record, column)\">\r\n {{getValue(record, column)}}\r\n </td>\r\n <ng-template #isAnUrlDefault>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{\r\n 'igo.common.entity-table.targetHtmlUrl' | translate }}\r\n </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlHTML\" [ngClass]=\"getCellClass(record, column)\"\r\n [innerHTML]=\"getValue(record, column)\">\r\n </td>\r\n <ng-template #isAnUrlHTML>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' |\r\n translate }} </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text edition\" [formGroup]=\"formGroup\" *ngIf=\"isEdition(record);else isUnsanitizedHTML\"\r\n [ngClass]=\"getCellClass(record, column)\">\r\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <input matInput [matDatepicker]=\"picker\" [formControlName]=\"column.name\" value=\"{{getValue(record, column)}}\"\r\n (dateChange)=\"onDateChange(column.name, record, $event)\">\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <input matInput type=\"time\" *ngIf=\"column.type === 'time'\" [formControlName]=\"column.name\" step=\"900\" (focus)=\"column.onFocus($event)\"\r\n (keypress)=\"column.onChange($event)\" (blur)=\"column.onBlur($event)\">\r\n <input matInput type=\"number\" class=\"class_number_edition\" *ngIf=\"column.type === 'number'\" [formControlName]=\"column.name\" step=\"{{column.step}}\"\r\n value=\"{{getValue(record,column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\r\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\r\n min=\"{{getValidationAttributeValue(column, 'minValue')}}\" max=\"{{getValidationAttributeValue(column, 'maxValue')}}\">\r\n <input matInput type=\"text\" *ngIf=\"!column.type || column.type ==='string'\" [formControlName]=\"column.name\"\r\n value=\"{{getValue(record, column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\r\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\">\r\n <mat-checkbox *ngIf=\"column.type === 'boolean'\" [formControlName]=\"column.name\" [checked]=\"getValue(record,column)\"\r\n (change)=\"onBooleanValueChange(column.name, record,$event)\"></mat-checkbox>\r\n <mat-select *ngIf=\"column.type === 'list'\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\r\n [formControlName]=\"column.name\" [multiple]=\"column.multiple\" (selectionChange)=\"onSelectValueChange(column.name, record, $event)\"\r\n [value]=\"getValue(record, column)\">\r\n <mat-option *ngFor=\"let option of column.domainValues\" [value]=\"option.id\" [disabled]=\"option.disabled\">\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-select>\r\n <input matInput type=\"text\" [formControlName]=\"column.name\" *ngIf=\"column.type === 'autocomplete'\"\r\n [matAutocomplete]=\"auto\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\" value=\"{{getValue(record, column)}}\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteValueChange(column.name, record, $event)\"\r\n panelWidth=\"430px\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" [value]=\"option.id\">\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </td>\r\n <ng-template #isUnsanitizedHTML>\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlUnsanitizedHTML\" [ngClass]=\"getCellClass(record, column)\"\r\n [innerHTML]=\"getValue(record, column) | sanitizeHtml\">\r\n </td>\r\n <ng-template #isAnUrlUnsanitizedHTML>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' | translate }} </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\r\n <td mat-cell *matCellDef=\"let record\" class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <mat-icon svgIcon=\"{{getValue(record, column)|| column.icon}}\" (click)=\"column.onClick($event)\"></mat-icon>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <span *ngFor=\"let button of getValue(record, column)\">\r\n <ng-container *ngIf=\"isEdition(record) === button.editMode\">\r\n <button *ngIf=\"button.style === 'mat-icon-button'\" igoStopPropagation mat-icon-button\r\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\r\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\r\n </button>\r\n <button *ngIf=\"button.style !== 'mat-icon-button'\" igoStopPropagation mat-mini-fab\r\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\r\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"headers; sticky: fixedHeader;\" [ngClass]=\"getHeaderClass()\">\r\n </tr>\r\n <tr mat-row igoEntityTableRow *matRowDef=\"let record; columns: headers;\" [scrollBehavior]=\"scrollBehavior\" [ngClass]=\"getRowClass(record)\" [selection]=\"selection\" [selected]=\"rowIsSelected(record)\" (select)=\"onRowSelect(record)\" (click)=\"onRowClick(record)\">\r\n </tr>\r\n </table>\r\n <igo-entity-table-paginator *ngIf=\"withPaginator\" [store]=\"store\" [paginatorOptions]=\"paginatorOptions\" [entitySortChange$]=\"entitySortChange$\" (paginatorChange)=\"paginatorChange($event)\">\r\n </igo-entity-table-paginator>\r\n</div>", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-header-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:36px}:host.table-compact tr.mat-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text{overflow:hidden;word-wrap:break-word}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0 3px}entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table button{margin:7px}.class_hidden{visibility:hidden}.class_display_none{display:none}.class_boolean,.class_icon,.class_number{text-align:center;padding-right:35px!important}.class_sting,.class_text,.class_number_edition{text-align:left}td.edition{background:rgba(166,166,166,.2)}input{border-bottom:1px solid darkgrey}\n"] }]
1310
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
1311
+ type: Optional
1312
+ }, {
1313
+ type: Self
1314
+ }] }, { type: i1.NgForm, decorators: [{
1315
+ type: Optional
1316
+ }] }, { type: i1.FormControlName, decorators: [{
1317
+ type: Optional
1318
+ }] }, { type: i3.ErrorStateMatcher }, { type: i3.DateAdapter }]; }, { store: [{
1319
+ type: Input
1320
+ }], paginator: [{
1321
+ type: Input
1322
+ }], template: [{
1323
+ type: Input
1324
+ }], scrollBehavior: [{
1325
+ type: Input
1326
+ }], sortNullsFirst: [{
1327
+ type: Input
1328
+ }], withPaginator: [{
1329
+ type: Input
1330
+ }], paginatorOptions: [{
1331
+ type: Input
1332
+ }], entityClick: [{
1333
+ type: Output
1334
+ }], entitySelectChange: [{
1335
+ type: Output
1336
+ }], entitySortChange: [{
1337
+ type: Output
1338
+ }] }); })();
1339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBT3ZCLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQU9MLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQzFCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBbUQsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDaEN6Qiw2QkFBZ0U7SUFDNUQsd0NBQ29FO0lBRHRELDhNQUFVLGVBQUEsbUNBQTRCLENBQUEsSUFBQztJQUVyRCxpQkFBZTtJQUNuQiwwQkFBZTs7OztJQUgyQyxlQUE0RDtJQUE1RCxvRkFBNEQsOEVBQUE7OztJQUYxSCw2QkFBaUM7SUFDN0IsNEdBSWU7O0lBQ25C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QUNoQixRQUFROztzQkFDUixRQUFRO2tGQWpIRixLQUFLO2tCQUFiLEtBQUs7WUFLTyxTQUFTO2tCQUFyQixLQUFLO1lBYUcsUUFBUTtrQkFBaEIsS0FBSztZQU1OLGNBQWM7a0JBRGIsS0FBSztZQU9OLGNBQWM7a0JBRGIsS0FBSztZQU9OLGFBQWE7a0JBRFosS0FBSztZQU9OLGdCQUFnQjtrQkFEZixLQUFLO1lBTUksV0FBVztrQkFBcEIsTUFBTTtZQUtHLGtCQUFrQjtrQkFBM0IsTUFBTTtZQU9HLGdCQUFnQjtrQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNlbGZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEVudGl0eUtleSxcclxuICBFbnRpdHlSZWNvcmQsXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RvcmUsXHJcbiAgRW50aXR5VGFibGVUZW1wbGF0ZSxcclxuICBFbnRpdHlUYWJsZUNvbHVtbixcclxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxyXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXHJcbiAgRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvclxyXG59IGZyb20gJy4uL3NoYXJlZCc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zIH0gZnJvbSAnLi4vZW50aXR5LXRhYmxlLXBhZ2luYXRvci9lbnRpdHktdGFibGUtcGFnaW5hdG9yLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIE5nQ29udHJvbCwgTmdGb3JtLCBGb3JtQ29udHJvbE5hbWUsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBkZWZhdWx0IGFzIG1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1lbnRpdHktdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VudGl0eS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEVudGl0eVRhYmxlQ29tcG9uZW50IH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBlbnRpdHlTb3J0Q2hhbmdlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWRPcHRpb25zOiBPYnNlcnZhYmxlPGFueVtdPjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBjb2x1bW4gcmVuZGVyZXIgdHlwZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyID0gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBzZWxlY3Rpb24ncyBzdGF0ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBzZWxlY3Rpb24scyBzdGF0ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNlbGVjdGlvblN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIHN0b3JlJ3Mgc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZWxlY3Rpb24kJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIGRhdGFTb3VyY2VcclxuICAgKi9cclxuICBwcml2YXRlIGRhdGFTb3VyY2UkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbGFzdCByZWNvcmQgY2hlY2tlZC4gVXNlZnVsIGZvciBzZWxlY3RpbmdcclxuICAgKiBtdWx0aXBsZSByZWNvcmRzIGJ5IGhvbGRpbmcgdGhlIHNoaWZ0IGtleSBhbmQgY2hlY2tpbmdcclxuICAgKiBjaGVja2JveGVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgbGFzdFJlY29yZENoZWNrZWRLZXk6IEVudGl0eUtleTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW50aXR5IHN0b3JlXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3RvcmU6IEVudGl0eVN0b3JlPG9iamVjdD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRhYmxlIHBhZ2luYXRvclxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNldCBwYWdpbmF0b3IodmFsdWU6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdG9yO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgdGVtcGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSB0ZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xsIGJlaGF2aW9yIG9uIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2Nyb2xsQmVoYXZpb3I6IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IgPSBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yLkF1dG87XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgbnVsbHMgc2hvdWxkIGJlIGZpcnN0IHdoZW4gc29ydGluZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc29ydE51bGxzRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyB0aGUgdGFibGUgcGFnaW5hdG9yIG9yIG5vdC4gRmFsc2UgYnkgZGVmYXVsdC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHdpdGhQYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGFnaW5hdG9yIG9wdGlvbnNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHBhZ2luYXRvck9wdGlvbnM6IEVudGl0eVRhYmxlUGFnaW5hdG9yT3B0aW9ucztcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBjbGlja2VkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGVudGl0eUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBlbnRpdHkgKHJvdykgaXMgc2VsZWN0ZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5U2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBhZGRlZDogb2JqZWN0W107XHJcbiAgfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0YWJsZSBzb3J0IGlzIGNoYW5nZWQuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGVudGl0eVNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7Y29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbiwgZGlyZWN0aW9uOiBzdHJpbmd9PiA9IG5ldyBFdmVudEVtaXR0ZXIodW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgaGVhZGVyc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBoZWFkZXJzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjb2x1bW5zID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSlcclxuICAgICAgLm1hcCgoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoZWNrYm94ID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbHVtbnMgPSBbJ3NlbGVjdGlvbkNoZWNrYm94J10uY29uY2F0KGNvbHVtbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0YSBzb3VyY2UgY29uc3VtYWJsZSBieSB0aGUgdW5kZXJseWluZyBtYXRlcmlhbCB0YWJsZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPG9iamVjdD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gaXMgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uIHx8IGZhbHNlOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSBzZWxlY3Rpb24gY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3Rpb25DaGVja2JveCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uQ2hlY2tib3ggfHwgZmFsc2U7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdE1hbnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdE1hbnkgfHwgZmFsc2U7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGZpeGVkSGVhZGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMudGVtcGxhdGUuZml4ZWRIZWFkZXI7IH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByb3RlY3RlZCBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXHJcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX3BhcmVudEZvcm06IE5nRm9ybSxcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfY29udHJvbE5hbWU6IEZvcm1Db250cm9sTmFtZSxcclxuICAgIHByb3RlY3RlZCBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcclxuICAgIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+XHJcbiAgKSB7XHJcbiAgICB0aGlzLmRhdGVBZGFwdGVyLnNldExvY2FsZSgnZnItQ0EnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrIHRoZSBzZWxlY3Rpb24gc3RhdGUgdG8gcHJvcGVybHkgZGlzcGxheSB0aGUgc2VsZWN0aW9uIGNoZWNrYm94ZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3Qgc3RvcmUgPSBjaGFuZ2VzLnN0b3JlO1xyXG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmN1cnJlbnRWYWx1ZSAhPT0gc3RvcmUucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZURhdGFzb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgdGV4dCBvciBudW1iZXIgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxyXG4gICAqL1xyXG4gIG9uVmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYm9vbGVhbiB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIHNlbGVjdCB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25TZWxlY3RWYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIGF1dG9jb21wbGV0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25BdXRvY29tcGxldGVWYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbl0uc2V0VmFsdWUoZXZlbnQub3B0aW9uLnZpZXdWYWx1ZSk7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgZGF0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25EYXRlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XHJcbiAgICBjb25zdCB2YWx1ZSA9IG1vbWVudChldmVudC52YWx1ZSkuZm9ybWF0KGZvcm1hdCk7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlIGVkaXRpb24gbW9kZSBmb3Igb25lIHJvd1xyXG4gICAqIE1vcmUgdGhhbiBvbmUgcm93IGNhbiBiZSBlZGl0ZWQgYXQgdGhlIHNhbWUgdGltZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZW5hYmxlRWRpdChyZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+KSB7XHJcbiAgICBjb25zdCBpdGVtID0gcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzIHx8IHJlY29yZC5lbnRpdHk7XHJcbiAgICB0aGlzLnRlbXBsYXRlLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBjb2x1bW4udGl0bGUgPSBjb2x1bW4udmFsaWRhdGlvbj8ubWFuZGF0b3J5ICYmICFjb2x1bW4udGl0bGUuaW5jbHVkZXMoJyonKSA/IGNvbHVtbi50aXRsZSArICcgKicgOiBjb2x1bW4udGl0bGU7XHJcblxyXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKTtcclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBpZiAoIWl0ZW1ba2V5XSB8fCBpdGVtW2tleV0gPT09IG51bGwpIHtcclxuICAgICAgICAgIGl0ZW1ba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW1ba2V5XSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGl0ZW1ba2V5XSA9IEpTT04ucGFyc2UoaXRlbVtrZXldLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICBpdGVtW2tleV1cclxuICAgICAgICApKTtcclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xpc3QnKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgICBbaXRlbVtrZXldXVxyXG4gICAgICAgICAgKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgICAgaXRlbVtrZXldXHJcbiAgICAgICAgICApKTtcclxuXHJcbiAgICAgICAgICB0eXBlb2YgaXRlbVtrZXldID09PSAnc3RyaW5nJyA/XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShwYXJzZUludChpdGVtW2tleV0pKSA6XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShpdGVtW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICBpdGVtW2tleV1cclxuICAgICAgICApKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICBtYXAodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5kb21haW5WYWx1ZXMuZmlsdGVyKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykgOiAnJztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVOYW1lTm9ybWFsaXplZCA9IG9wdGlvbi52YWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmVOYW1lTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgZm9ybUNvbnRyb2xWYWx1ZSA9IGl0ZW1ba2V5XTtcclxuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZm9ybUNvbnRyb2xWYWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGQrJC8udGVzdChmb3JtQ29udHJvbFZhbHVlKSkge1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlID0gcGFyc2VJbnQoZm9ybUNvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSBmb3JtQ29udHJvbFZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gZm9ybUNvbnRyb2xWYWx1ZSkge1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eSBhcyBhbnk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoXHJcbiAgICAgICAgICAgIGVudGl0eT8ucHJvcGVydGllc1t0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgIGlmIChjb2x1bW4udmlzaWJsZSkge1xyXG4gICAgICAgICAgaWYgKGl0ZW1ba2V5XSkge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudChpdGVtW2tleV0pO1xyXG4gICAgICAgICAgICBpdGVtW2tleV0gPSBkYXRlLnV0YygpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICAgICAgaXRlbVtrZXldXHJcbiAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3S2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XHJcbiAgICAgICAgICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1tuZXdLZXldID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdICYmIHRoaXMuZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5JykpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRGF0YXNvdXJjZSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVTdG9yZSgpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb24kJCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgIC5tYW55QnkkKChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWUpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W10pID0+IHtcclxuICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gcmVjb3Jkc1swXTtcclxuICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwoKS5pbmRleE9mKGZpcnN0U2VsZWN0ZWQpO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VNYXggPSB0aGlzLnBhZ2luYXRvciA/IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICogKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCArIDEpIDogMDtcclxuICAgICAgICBjb25zdCBwYWdlTWluID0gdGhpcy5wYWdpbmF0b3IgPyBwYWdlTWF4IC0gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgOiAwO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvciAmJlxyXG4gICAgICAgICAgKGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA8IHBhZ2VNaW4gfHxcclxuICAgICAgICAgIGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA+PSBwYWdlTWF4KSkge1xyXG4gICAgICAgICAgY29uc3QgcGFnZVRvUmVhY2ggPSBNYXRoLmZsb29yKGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiAvIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZUluZGV4ID0gcGFnZVRvUmVhY2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUkLm5leHQodGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGUocmVjb3JkcykpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsJCgpLnN1YnNjcmliZSgoYWxsKSA9PiB7XHJcbiAgICAgIGlmIChhbGxbMF0pIHtcclxuICAgICAgICB0aGlzLmVuYWJsZUVkaXQoYWxsWzBdKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGFsbDtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuYmluZCB0aGUgc3RvcmUgd2F0Y2hlclxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlU3RvcmUoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24kJCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbiQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlJCQpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrYnkgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBpbmRleCBSZWNvcmQgaW5kZXhcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRUcmFja0J5RnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdCwgRW50aXR5U3RhdGU+KSA9PiB7XHJcbiAgICAgIHJldHVybiByZWNvcmQucmVmO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgYSByZWZyZXNoIG9mIHRocmUgdGFibGUuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuXHJcbiAgICogdGhlIGRhdGEgc291cmNlIGRvZXNuJ3QgZW1pdCBhIG5ldyB2YWx1ZSBidXQgZm9yIHNvbWUgcmVhc29uXHJcbiAgICogdGhlIHJlY29yZHMgbmVlZCBhbiB1cGRhdGUuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcGFnaW5hdG9yQ2hhbmdlKGV2ZW50OiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIHRoaXMucGFnaW5hdG9yID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBzb3J0LCBzb3J0IHRoZSBzdG9yZVxyXG4gICAqIEBwYXJhbSBldmVudCBTb3J0IGV2ZW50XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Tb3J0KGV2ZW50OiB7YWN0aXZlOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nfSkge1xyXG4gICAgY29uc3QgZGlyZWN0aW9uID0gZXZlbnQuZGlyZWN0aW9uO1xyXG4gICAgY29uc3QgY29sdW1uID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXHJcbiAgICAgIC5maW5kKChjOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gYy5uYW1lID09PSBldmVudC5hY3RpdmUpO1xyXG5cclxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdhc2MnIHx8IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQoe1xyXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiB0aGlzLmdldFZhbHVlKHJlY29yZCwgY29sdW1uKSxcclxuICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgbnVsbHNGaXJzdDogdGhpcy5zb3J0TnVsbHNGaXJzdFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlLmVtaXQoe2NvbHVtbiwgZGlyZWN0aW9ufSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZSQubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQodW5kZWZpbmVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIGNsaWNrZWQsIGVtaXQgYW4gZXZlbnRcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uUm93Q2xpY2socmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gICAgdGhpcy5lbnRpdHlDbGljay5lbWl0KHJlY29yZC5lbnRpdHkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgc2VsZWN0ZWQsIHNlbGVjdCBpdCBpbiB0aGUgc3RvcmUgYW5kIGVtaXQgYW4gZXZlbnQuIEV2ZW4gaWZcclxuICAgKiBcIm1hbnlcIiBpcyBzZXQgdG8gdHJ1ZSwgdGhpcyBtZXRob2QgYWx3YXlzIHNlbGVjdCBhIHNpbmdsZSwgZXhjbHVzaXZlIHJvdy4gU2VsZWN0aW5nXHJcbiAgICogbXVsdGlwbGUgcm93cyBzaG91bGQgYmUgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlIGNoZWNrYm94ZXMuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblJvd1NlbGVjdChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZShlbnRpdHksIHtzZWxlY3RlZDogdHJ1ZX0sIHRydWUpO1xyXG4gICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdHldfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb3IgdW5zZWxlY3QgYWxsIHJvd3MgYXQgb25jZS4gT24gc2VsZWN0LCBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Ub2dnbGVSb3dzKHRvZ2dsZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cclxuXHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7c2VsZWN0ZWQ6IHRvZ2dsZX0pO1xyXG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgLmFsbCgpXHJcbiAgICAgICAgLm1hcCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLmVudGl0eSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXRpZXNdfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXHJcbiAgICogZW1pdCBhbiBldmVudC5cclxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Ub2dnbGVSb3codG9nZ2xlOiBib29sZWFuLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBleGNsdXNpdmUgPSB0b2dnbGUgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0TWFueTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwge3NlbGVjdGVkOiB0b2dnbGV9LCBleGNsdXNpdmUpO1xyXG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0eV19KTtcclxuICAgIH1cclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcclxuICAgKiBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblNoaWZ0VG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0TWFueSA9PT0gZmFsc2UgfHwgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMub25Ub2dnbGVSb3codG9nZ2xlLCByZWNvcmQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgbWF0IGNoZWNrYm94IHdyb25nIGJlaGF2aW9yXHJcbiAgICAvLyB3aGVuIHRoZSBzaGlmdCBrZXkgaXMgaGVsZC5cclxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy82MjMyXHJcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwoKTtcclxuICAgIGNvbnN0IHJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKHJlY29yZCk7XHJcbiAgICBjb25zdCBsYXN0UmVjb3JkQ2hlY2tlZCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldCh0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5KTtcclxuICAgIGNvbnN0IGxhc3RSZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihsYXN0UmVjb3JkQ2hlY2tlZCk7XHJcbiAgICBjb25zdCBpbmRleGVzID0gW3JlY29yZEluZGV4LCBsYXN0UmVjb3JkSW5kZXhdO1xyXG4gICAgY29uc3Qgc2VsZWN0UmVjb3JkcyA9IHJlY29yZHMuc2xpY2UoTWF0aC5taW4oLi4uaW5kZXhlcyksIE1hdGgubWF4KC4uLmluZGV4ZXMpICsgMSk7XHJcblxyXG4gICAgY29uc3QgZW50aXRpZXMgPSBzZWxlY3RSZWNvcmRzLm1hcCgoX3JlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IF9yZWNvcmQuZW50aXR5KTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlTWFueShlbnRpdGllcywge3NlbGVjdGVkOiB0b2dnbGV9KTtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IGVudGl0aWVzfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlIHRoZSBzZWxlY3Rpb24gc3RhdGVcclxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGFsbCwgc29tZSBvciBubyByb3dzIGFyZSBzZWxlY3RlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29tcHV0ZVNlbGVjdGlvblN0YXRlKHNlbGVjdGVkUmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSk6IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUge1xyXG4gICAgY29uc3Qgc3RhdGVzID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbkNvdW50ID0gc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aDtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Db3VudCA9PT0gMCA/XHJcbiAgICAgIHN0YXRlcy5Ob25lIDpcclxuICAgICAgKHNlbGVjdGlvbkNvdW50ID09PSB0aGlzLnN0b3JlLnN0YXRlVmlldy5jb3VudCA/IHN0YXRlcy5BbGwgOiBzdGF0ZXMuU29tZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgY29sdW1uIGlzIHNvcnRhYmxlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgY29sdW1uSXNTb3J0YWJsZShjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc29ydGFibGUgPSBjb2x1bW4uc29ydDtcclxuICAgIGlmIChzb3J0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNvcnRhYmxlID0gdGhpcy50ZW1wbGF0ZS5zb3J0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHRoaXMudGVtcGxhdGUuc29ydDtcclxuICAgIH1cclxuICAgIHJldHVybiBzb3J0YWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSByb3cgaXMgc2hvdWxkIGJlIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzdGF0ZVxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByb3dJc1NlbGVjdGVkKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN0YXRlID0gcmVjb3JkLnN0YXRlO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkID8gc3RhdGUuc2VsZWN0ZWQgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzSW1nKHZhbHVlKSB7XHJcbiAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBbJ2pwZycsICdwbmcnLCAnZ2lmJ10uaW5kZXhPZih2YWx1ZS5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKCkpICE9PSAtMVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNVcmwodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdmFsdWUuc2xpY2UoMCwgOCkgPT09ICdodHRwczovLycgfHwgdmFsdWUuc2xpY2UoMCwgNykgPT09ICdodHRwOi8vJ1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWx1ZXNcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgQW55IHZhbHVlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VmFsdWUocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGFueSB7XHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgaWYgKGNvbHVtbi52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi52YWx1ZUFjY2Vzc29yKGVudGl0eSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS52YWx1ZUFjY2Vzc29yKGVudGl0eSwgY29sdW1uLm5hbWUsIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgICB2YWx1ZSA9IHRoaXMuc3RvcmUuZ2V0UHJvcGVydHkoZW50aXR5LCBjb2x1bW4ubmFtZSk7XHJcblxyXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgdmFsdWUgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpe1xyXG4gICAgICAgICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkpe1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUgPyAnJiMxMDAwMzsnIDogJyc7IC8vIGNoZWNrIG1hcmtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xpc3QnICYmIHZhbHVlICYmIGNvbHVtbi5kb21haW5WYWx1ZXMpIHtcclxuICAgICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eSBhcyBhbnk7XHJcbiAgICAgIGlmIChjb2x1bW4ubXVsdGlwbGUpIHtcclxuICAgICAgICBsZXQgbGlzdF9pZDtcclxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbGlzdF9pZCA9IHZhbHVlLm1hdGNoKC9bXFx3Li1dKy9nKS5tYXAoTnVtYmVyKSA6IGxpc3RfaWQgPSB2YWx1ZTtcclxuICAgICAgICBsZXQgbGlzdF9vcHRpb24gPSBbXTtcclxuXHJcbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBpZiAobGlzdF9pZC5pbmNsdWRlcyhvcHRpb24uaWQpKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNvcmQuZWRpdGlvbikge1xyXG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLmlkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsaXN0X29wdGlvbi5wdXNoKG9wdGlvbi52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/IHZhbHVlID0gbGlzdF9pZCA6IHZhbHVlID0gbGlzdF9vcHRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpIHtcclxuICAgICAgICAgIHZhbHVlID0gZW50aXR5Py5wcm9wZXJ0aWVzW3RoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/IHZhbHVlID0gb3B0aW9uLmlkIDogdmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgdmFsdWUgJiYgY29sdW1uLmRvbWFpblZhbHVlcykge1xyXG4gICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcclxuICAgICAgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpIHtcclxuICAgICAgICB2YWx1ZSA9IGVudGl0eT8ucHJvcGVydGllc1t0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUgfHwgb3B0aW9uLmlkID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRWRpdGlvbihyZWNvcmQpKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudCh2YWx1ZSk7XHJcbiAgICAgICAgICB2YWx1ZSA9IGRhdGUuZm9ybWF0KCk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiB2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHZhbHVlID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhbHVlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWxpZGF0aW9uIHZhbHVlc1xyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZSAoZmFsc2UgaWYgbm8gdmFsaWRhdGlvbiBvciBub3QgdGhlIG9uZSBjb25jZXJuZWQpXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sIHZhbGlkYXRpb25UeXBlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYgKGNvbHVtbi52YWxpZGF0aW9uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLnZhbGlkYXRpb25bdmFsaWRhdGlvblR5cGVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0VkaXRpb24ocmVjb3JkKSB7XHJcbiAgICByZXR1cm4gcmVjb3JkLmVudGl0eS5lZGl0aW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHJlbmRlcmVyIG9mIGEgY29sdW1uXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBSZW5kZXJlciB0eXBlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIge1xyXG4gICAgaWYgKGNvbHVtbi5yZW5kZXJlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4ucmVuZGVyZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5EZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0YWJsZSBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFRhYmxlQ2xhc3MoKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdpZ28tZW50aXR5LXRhYmxlLXdpdGgtc2VsZWN0aW9uJzogdGhpcy5zZWxlY3Rpb25cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBoZWFkZXIgbmdDbGFzc1xyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRIZWFkZXJDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgY29uc3QgZnVuYyA9IHRoaXMudGVtcGxhdGUuaGVhZGVyQ2xhc3NGdW5jO1xyXG4gICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICByZXR1cm4gZnVuYygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRSb3dDbGFzcyhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5yb3dDbGFzc0Z1bmM7XHJcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKGVudGl0eSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRDZWxsQ2xhc3MocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgY29uc3QgY2xzID0ge307XHJcblxyXG4gICAgY29uc3QgdGFibGVGdW5jID0gdGhpcy50ZW1wbGF0ZS5jZWxsQ2xhc3NGdW5jO1xyXG4gICAgaWYgKHRhYmxlRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oY2xzLCB0YWJsZUZ1bmMoZW50aXR5LCBjb2x1bW4sIHJlY29yZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbHVtbkZ1bmMgPSBjb2x1bW4uY2VsbENsYXNzRnVuYztcclxuICAgIGlmIChjb2x1bW5GdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIGNvbHVtbkZ1bmMoZW50aXR5LCByZWNvcmQpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkXHJcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uQnV0dG9uQ2xpY2soXHJcbiAgICBjbGlja0Z1bmM6IChlbnRpdHk6IG9iamVjdCwgcmVjb3JkPzogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHZvaWQsXHJcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+XHJcbiAgKSB7XHJcbiAgICB0aGlzLmVuYWJsZUVkaXQocmVjb3JkKTtcclxuICAgIGlmICh0eXBlb2YgY2xpY2tGdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNsaWNrRnVuYyhyZWNvcmQuZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgY29sdW1uIG5hbWUgd2l0aG91dCBoaXMgXCJwcm9wZXJ0aWVzXCIgdGFnICh1c2VmdWwgZm9yIGVkaXRpb24gd29ya3NwYWNlIHByb3BlcnRpZXMpXHJcbiAgICovXHJcbiAgcHVibGljIGdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICBpZiAoY29sdW1uLmluY2x1ZGVzKCdwcm9wZXJ0aWVzLicpKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4uc3BsaXQoJy4nKVsxXTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cclxuICA8dGFibGUgbWF0LXRhYmxlIG1hdFNvcnQgW25nQ2xhc3NdPVwiZ2V0VGFibGVDbGFzcygpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCIgKG1hdFNvcnRDaGFuZ2UpPVwib25Tb3J0KCRldmVudClcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3Rpb25DaGVja2JveFwiIGNsYXNzPVwibWF0LWNlbGwtY2hlY2tib3hcIj5cclxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE1hbnlcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblN0YXRlJCB8IGFzeW5jIGFzIHNlbGVjdGlvblN0YXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwib25Ub2dnbGVSb3dzKCRldmVudC5jaGVja2VkKVwiIFtjaGVja2VkXT1cInNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLkFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25TdGF0ZSA9PT0gZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZS5Tb21lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKG1vdXNlZG93bik9XCIkZXZlbnQuc2hpZnRLZXkgPyAkZXZlbnQucHJldmVudERlZmF1bHQoKSA6IG51bGxcIiAoY2xpY2spPVwiJGV2ZW50LnNoaWZ0S2V5ID9cclxuICAgICAgICAgICAgICBvblNoaWZ0VG9nZ2xlUm93KCFyb3dJc1NlbGVjdGVkKHJlY29yZCksIHJlY29yZCwgJGV2ZW50KSA6ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChjaGFuZ2UpPVwib25Ub2dnbGVSb3coJGV2ZW50LmNoZWNrZWQscmVjb3JkKVwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicm93SXNTZWxlY3RlZChyZWNvcmQpXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGVtcGxhdGUuY29sdW1uc1wiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbklzU29ydGFibGUoY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIFttYXRUb29sdGlwXT1cImNvbHVtbi50b29sdGlwID8gY29sdW1uLnRvb2x0aXAgOiB1bmRlZmluZWRcIj5cclxuICAgICAgICAgICAgICAgICAge3tjb2x1bW4udGl0bGV9fVxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbklzU29ydGFibGUoY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXAgPyBjb2x1bW4udG9vbHRpcCA6IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e2NvbHVtbi50aXRsZX19XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pIGFzIGNvbHVtblJlbmRlcmVyXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybERlZmF1bHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIiB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHwgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAgICdpZ28uY29tbW9uLmVudGl0eS10YWJsZS50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuSFRNTFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsSFRNTFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxIVE1MPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8IGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuVW5zYW5pdGl6ZWRIVE1MXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0IGVkaXRpb25cIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiICpuZ0lmPVwiaXNFZGl0aW9uKHJlY29yZCk7ZWxzZSBpc1Vuc2FuaXRpemVkSFRNTFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyXCIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRpbWVcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAndGltZSdcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgc3RlcD1cIjkwMFwiIChmb2N1cyk9XCJjb2x1bW4ub25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwiY29sdW1uLm9uQ2hhbmdlKCRldmVudClcIiAoYmx1cik9XCJjb2x1bW4ub25CbHVyKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiY2xhc3NfbnVtYmVyX2VkaXRpb25cIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnbnVtYmVyJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBzdGVwPVwie3tjb2x1bW4uc3RlcH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7Z2V0VmFsdWUocmVjb3JkLGNvbHVtbil9fVwiIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtaW5WYWx1ZScpfX1cIiBtYXg9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYXhWYWx1ZScpfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiAqbmdJZj1cIiFjb2x1bW4udHlwZSB8fCBjb2x1bW4udHlwZSA9PT0nc3RyaW5nJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbidcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgW2NoZWNrZWRdPVwiZ2V0VmFsdWUocmVjb3JkLGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwkZXZlbnQpXCI+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xpc3QnXCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgW211bHRpcGxlXT1cImNvbHVtbi5tdWx0aXBsZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RWYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uLmRvbWFpblZhbHVlc1wiIFt2YWx1ZV09XCJvcHRpb24uaWRcIiBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIHJlcXVpcmVkPVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWFuZGF0b3J5Jyl9fVwiIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbFdpZHRoPVwiNDMwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zIHwgYXN5bmNcIiBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzVW5zYW5pdGl6ZWRIVE1MPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybFVuc2FuaXRpemVkSFRNTFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2FuaXRpemVIdG1sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxVbnNhbml0aXplZEhUTUw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHwgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX0gPC9zcGFuPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5JY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIiBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfHwgY29sdW1uLmljb259fVwiIChjbGljayk9XCJjb2x1bW4ub25DbGljaygkZXZlbnQpXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuQnV0dG9uR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGlvbihyZWNvcmQpID09PSBidXR0b24uZWRpdE1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJidXR0b24uc3R5bGUgPT09ICdtYXQtaWNvbi1idXR0b24nXCIgaWdvU3RvcFByb3BhZ2F0aW9uIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uY29sb3JcIiAobW91c2Vkb3duKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByZWNvcmQpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1dHRvbi5zdHlsZSAhPT0gJ21hdC1pY29uLWJ1dHRvbidcIiBpZ29TdG9wUHJvcGFnYXRpb24gbWF0LW1pbmktZmFiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7e2J1dHRvbi5pY29ufX1cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJoZWFkZXJzOyBzdGlja3k6IGZpeGVkSGVhZGVyO1wiIFtuZ0NsYXNzXT1cImdldEhlYWRlckNsYXNzKClcIj5cclxuICAgICAgPC90cj5cclxuICAgICAgPHRyIG1hdC1yb3cgaWdvRW50aXR5VGFibGVSb3cgKm1hdFJvd0RlZj1cImxldCByZWNvcmQ7IGNvbHVtbnM6IGhlYWRlcnM7XCIgW3Njcm9sbEJlaGF2aW9yXT1cInNjcm9sbEJlaGF2aW9yXCIgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MocmVjb3JkKVwiIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCIgW3NlbGVjdGVkXT1cInJvd0lzU2VsZWN0ZWQocmVjb3JkKVwiIChzZWxlY3QpPVwib25Sb3dTZWxlY3QocmVjb3JkKVwiIChjbGljayk9XCJvblJvd0NsaWNrKHJlY29yZClcIj5cclxuICAgICAgPC90cj5cclxuICA8L3RhYmxlPlxyXG4gIDxpZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvciAqbmdJZj1cIndpdGhQYWdpbmF0b3JcIiBbc3RvcmVdPVwic3RvcmVcIiBbcGFnaW5hdG9yT3B0aW9uc109XCJwYWdpbmF0b3JPcHRpb25zXCIgW2VudGl0eVNvcnRDaGFuZ2UkXT1cImVudGl0eVNvcnRDaGFuZ2UkXCIgKHBhZ2luYXRvckNoYW5nZSk9XCJwYWdpbmF0b3JDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gIDwvaWdvLWVudGl0eS10YWJsZS1wYWdpbmF0b3I+XHJcbjwvZGl2PiJdfQ==