fabrikantencore 2.6.11 → 2.6.13

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 (281) hide show
  1. package/{esm2020 → esm2022}/fabrikantencore.mjs +4 -4
  2. package/{esm2020 → esm2022}/public_api.mjs +12 -12
  3. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-categories/beheer-categories.component.mjs +49 -0
  4. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-connect-category-dialog/beheer-connect-category-dialog.component.mjs +73 -0
  5. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-deeplink/beheer-deeplink.component.mjs +54 -0
  6. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-display-ebo/beheer-display-ebo.component.mjs +30 -0
  7. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-ebo-koppel/beheer-ebo-koppel/beheer-ebo-koppel.component.mjs +139 -0
  8. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-filter/beheer-filter.component.mjs +211 -0
  9. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-filters/beheer-filters.component.mjs +88 -0
  10. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-dialog/beheer-import-sets-dialog.component.mjs +59 -0
  11. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-ebo/beheer-import-sets-ebo.component.mjs +99 -0
  12. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-eigenschap/beheer-import-sets-eigenschap.component.mjs +34 -0
  13. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets.component.mjs +80 -0
  14. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-inlog/beheer-inlog.component.mjs +49 -0
  15. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-main/beheer-main.component.mjs +21 -0
  16. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-nav/beheer-nav.component.mjs +47 -0
  17. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-bcbproduct/beheer-products-bcbproduct.component.mjs +56 -0
  18. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-connect-rangeinput/beheer-products-connect-rangeinput.component.mjs +125 -0
  19. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-ebo/beheer-products-ebo.component.mjs +185 -0
  20. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-eigenschap/beheer-products-eigenschap.component.mjs +216 -0
  21. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-eigenschap-bereik/beheer-products-eigenschap-bereik.component.mjs +18 -0
  22. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-koppel-filteroption-dailog/beheer-products-koppel-filteroption-dailog.component.mjs +143 -0
  23. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-product/beheer-products-product.component.mjs +32 -0
  24. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products.component.mjs +150 -0
  25. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-rangeinput/beheer-rangeinput.component.mjs +87 -0
  26. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-searchproducts/beheer-searchproducts-koppel-dialog/beheer-searchproducts-koppel-dialog.component.mjs +85 -0
  27. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-searchproducts/beheer-searchproducts.component.mjs +299 -0
  28. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-select-filter-dialog/beheer-select-filter-dialog.component.mjs +101 -0
  29. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-select-filteroption-dialog/beheer-select-filteroption-dialog.component.mjs +82 -0
  30. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-boolean/beheer-settings-boolean.component.mjs +43 -0
  31. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-options/beheer-settings-options.component.mjs +27 -0
  32. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-string/beheer-settings-string.component.mjs +27 -0
  33. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings.component.mjs +30 -0
  34. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-translate/beheer-translate.component.mjs +289 -0
  35. package/esm2022/src/app/modules/fabrikantencore/beheer/components/beheer-users/beheer-users.component.mjs +143 -0
  36. package/esm2022/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.mjs +158 -0
  37. package/esm2022/src/app/modules/fabrikantencore/components/fab-bcb-product/fab-bcb-product.component.mjs +15 -0
  38. package/esm2022/src/app/modules/fabrikantencore/components/fab-breadcrumb/fab-breadcrumb.component.mjs +86 -0
  39. package/esm2022/src/app/modules/fabrikantencore/components/fab-categories/fab-categories.component.mjs +36 -0
  40. package/esm2022/src/app/modules/fabrikantencore/components/fab-category-navigator/fab-category-navigator.component.mjs +69 -0
  41. package/esm2022/src/app/modules/fabrikantencore/components/fab-category-tile/fab-category-tile.component.mjs +55 -0
  42. package/esm2022/src/app/modules/fabrikantencore/components/fab-filter/fab-filter.component.mjs +134 -0
  43. package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-colour/fab-filter-colour-dialog/fab-filter-colour-dialog.component.mjs +320 -0
  44. package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-colour/fab-filter-colour.component.mjs +64 -0
  45. package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-colour-label/fab-filter-colour-label.component.mjs +64 -0
  46. package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-fold/fab-filter-fold.component.mjs +94 -0
  47. package/esm2022/src/app/modules/fabrikantencore/components/fab-filter-label/fab-filter-label.component.mjs +134 -0
  48. package/esm2022/src/app/modules/fabrikantencore/components/fab-filters/fab-filters.component.mjs +49 -0
  49. package/esm2022/src/app/modules/fabrikantencore/components/fab-filters-input/fab-filters-input.component.mjs +59 -0
  50. package/esm2022/src/app/modules/fabrikantencore/components/fab-filters-overview/fab-filters-overview.component.mjs +34 -0
  51. package/esm2022/src/app/modules/fabrikantencore/components/fab-flag/fab-flag.component.mjs +18 -0
  52. package/esm2022/src/app/modules/fabrikantencore/components/fab-header/fab-header.component.mjs +63 -0
  53. package/esm2022/src/app/modules/fabrikantencore/components/fab-iframe/fab-iframe.component.mjs +31 -0
  54. package/esm2022/src/app/modules/fabrikantencore/components/fab-input/fab-input.component.mjs +31 -0
  55. package/esm2022/src/app/modules/fabrikantencore/components/fab-language-select/fab-language-select.component.mjs +26 -0
  56. package/esm2022/src/app/modules/fabrikantencore/components/fab-loader/fab-loader.component.mjs +16 -0
  57. package/esm2022/src/app/modules/fabrikantencore/components/fab-multiselect/fab-multiselect.component.mjs +53 -0
  58. package/esm2022/src/app/modules/fabrikantencore/components/fab-multiselect-fold/fab-multiselect-fold.component.mjs +45 -0
  59. package/esm2022/src/app/modules/fabrikantencore/components/fab-product/fab-product-bestek/fab-product-bestek.component.mjs +53 -0
  60. package/esm2022/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info-photo/fab-product-info-photo.component.mjs +36 -0
  61. package/esm2022/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info-photo-dialog/fab-product-info-photo-dialog.component.mjs +24 -0
  62. package/esm2022/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info.component.mjs +47 -0
  63. package/esm2022/src/app/modules/fabrikantencore/components/fab-product/fab-product.component.mjs +115 -0
  64. package/esm2022/src/app/modules/fabrikantencore/components/fab-product/fab-toebehoren/fab-toebehoren.component.mjs +100 -0
  65. package/esm2022/src/app/modules/fabrikantencore/components/fab-product-select/fab-product-select.component.mjs +79 -0
  66. package/esm2022/src/app/modules/fabrikantencore/components/fab-product-tile/fab-product-tile.component.mjs +59 -0
  67. package/esm2022/src/app/modules/fabrikantencore/components/fab-range-input/fab-range-input.component.mjs +99 -0
  68. package/esm2022/src/app/modules/fabrikantencore/components/fab-range-input-fold/fab-range-input-fold.component.mjs +45 -0
  69. package/esm2022/src/app/modules/fabrikantencore/components/fab-select-bcbproduct/fab-select-bcbproduct.component.mjs +30 -0
  70. package/esm2022/src/app/modules/fabrikantencore/components/fab-start/fab-start.component.mjs +31 -0
  71. package/esm2022/src/app/modules/fabrikantencore/components/fab-svg-viewer/fab-svg-viewer.component.mjs +75 -0
  72. package/esm2022/src/app/modules/fabrikantencore/components/fab-texture/fab-texture.component.mjs +48 -0
  73. package/{esm2020 → esm2022}/src/app/modules/fabrikantencore/components/fab-webgl-viewer/fab-webgl-viewer.component.mjs +96 -89
  74. package/esm2022/src/app/modules/fabrikantencore/fabrikantencore.module.mjs +483 -0
  75. package/esm2022/src/app/modules/fabrikantencore/helpers/auth.guard.mjs +33 -0
  76. package/esm2022/src/app/modules/fabrikantencore/helpers/basic-auth.interceptor.mjs +28 -0
  77. package/esm2022/src/app/modules/fabrikantencore/helpers/error.interceptor.mjs +29 -0
  78. package/esm2022/src/app/modules/fabrikantencore/services/authentication.service.mjs +74 -0
  79. package/esm2022/src/app/modules/fabrikantencore/services/bestek.service.mjs +90 -0
  80. package/esm2022/src/app/modules/fabrikantencore/services/fabrikanten.service.mjs +988 -0
  81. package/esm2022/src/app/modules/fabrikantencore/services/importsets.service.mjs +137 -0
  82. package/esm2022/src/app/modules/fabrikantencore/services/mobile.service.mjs +50 -0
  83. package/esm2022/src/app/modules/fabrikantencore/services/navigate.service.mjs +42 -0
  84. package/esm2022/src/app/modules/fabrikantencore/services/photo.service.mjs +102 -0
  85. package/esm2022/src/app/modules/fabrikantencore/services/products.service.mjs +223 -0
  86. package/esm2022/src/app/modules/fabrikantencore/services/projectsetting.service.mjs +94 -0
  87. package/esm2022/src/app/modules/fabrikantencore/services/statistics.service.mjs +82 -0
  88. package/esm2022/src/app/modules/fabrikantencore/services/svg.service.mjs +79 -0
  89. package/esm2022/src/app/modules/fabrikantencore/services/texture.service.mjs +31 -0
  90. package/esm2022/src/app/modules/fabrikantencore/services/toebehoren.service.mjs +57 -0
  91. package/esm2022/src/app/modules/fabrikantencore/services/translate.service.mjs +135 -0
  92. package/esm2022/src/app/modules/fabrikantencore/services/webgl.service.mjs +64 -0
  93. package/{esm2020 → esm2022}/src/app/modules/fabrikantencore/swagger/SwaggerClient.mjs +11481 -10774
  94. package/{fesm2020 → fesm2022}/fabrikantencore.mjs +18860 -17864
  95. package/fesm2022/fabrikantencore.mjs.map +1 -0
  96. package/index.d.ts +5 -5
  97. package/package.json +23 -27
  98. package/public_api.d.ts +12 -12
  99. package/src/app/modules/fabrikantencore/beheer/components/beheer-categories/beheer-categories.component.d.ts +14 -14
  100. package/src/app/modules/fabrikantencore/beheer/components/beheer-connect-category-dialog/beheer-connect-category-dialog.component.d.ts +22 -22
  101. package/src/app/modules/fabrikantencore/beheer/components/beheer-deeplink/beheer-deeplink.component.d.ts +19 -19
  102. package/src/app/modules/fabrikantencore/beheer/components/beheer-display-ebo/beheer-display-ebo.component.d.ts +11 -11
  103. package/src/app/modules/fabrikantencore/beheer/components/beheer-ebo-koppel/beheer-ebo-koppel/beheer-ebo-koppel.component.d.ts +23 -23
  104. package/src/app/modules/fabrikantencore/beheer/components/beheer-filter/beheer-filter.component.d.ts +30 -30
  105. package/src/app/modules/fabrikantencore/beheer/components/beheer-filters/beheer-filters.component.d.ts +24 -24
  106. package/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-dialog/beheer-import-sets-dialog.component.d.ts +20 -20
  107. package/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-ebo/beheer-import-sets-ebo.component.d.ts +29 -29
  108. package/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-eigenschap/beheer-import-sets-eigenschap.component.d.ts +14 -14
  109. package/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets.component.d.ts +23 -23
  110. package/src/app/modules/fabrikantencore/beheer/components/beheer-inlog/beheer-inlog.component.d.ts +21 -21
  111. package/src/app/modules/fabrikantencore/beheer/components/beheer-main/beheer-main.component.d.ts +10 -10
  112. package/src/app/modules/fabrikantencore/beheer/components/beheer-nav/beheer-nav.component.d.ts +19 -19
  113. package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-bcbproduct/beheer-products-bcbproduct.component.d.ts +17 -17
  114. package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-connect-rangeinput/beheer-products-connect-rangeinput.component.d.ts +34 -34
  115. package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-ebo/beheer-products-ebo.component.d.ts +36 -36
  116. package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-eigenschap/beheer-products-eigenschap.component.d.ts +30 -30
  117. package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-eigenschap-bereik/beheer-products-eigenschap-bereik.component.d.ts +10 -10
  118. package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-koppel-filteroption-dailog/beheer-products-koppel-filteroption-dailog.component.d.ts +36 -36
  119. package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-product/beheer-products-product.component.d.ts +14 -14
  120. package/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products.component.d.ts +26 -26
  121. package/src/app/modules/fabrikantencore/beheer/components/beheer-rangeinput/beheer-rangeinput.component.d.ts +17 -17
  122. package/src/app/modules/fabrikantencore/beheer/components/beheer-searchproducts/beheer-searchproducts-koppel-dialog/beheer-searchproducts-koppel-dialog.component.d.ts +23 -23
  123. package/src/app/modules/fabrikantencore/beheer/components/beheer-searchproducts/beheer-searchproducts.component.d.ts +41 -41
  124. package/src/app/modules/fabrikantencore/beheer/components/beheer-select-filter-dialog/beheer-select-filter-dialog.component.d.ts +30 -30
  125. package/src/app/modules/fabrikantencore/beheer/components/beheer-select-filteroption-dialog/beheer-select-filteroption-dialog.component.d.ts +25 -23
  126. package/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-boolean/beheer-settings-boolean.component.d.ts +14 -14
  127. package/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-options/beheer-settings-options.component.d.ts +12 -12
  128. package/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-string/beheer-settings-string.component.d.ts +12 -12
  129. package/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings.component.d.ts +11 -11
  130. package/src/app/modules/fabrikantencore/beheer/components/beheer-translate/beheer-translate.component.d.ts +44 -28
  131. package/src/app/modules/fabrikantencore/beheer/components/beheer-users/beheer-users.component.d.ts +25 -25
  132. package/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.d.ts +51 -51
  133. package/src/app/modules/fabrikantencore/components/fab-bcb-product/fab-bcb-product.component.d.ts +8 -8
  134. package/src/app/modules/fabrikantencore/components/fab-breadcrumb/fab-breadcrumb.component.d.ts +24 -24
  135. package/src/app/modules/fabrikantencore/components/fab-categories/fab-categories.component.d.ts +15 -15
  136. package/src/app/modules/fabrikantencore/components/fab-category-navigator/fab-category-navigator.component.d.ts +23 -23
  137. package/src/app/modules/fabrikantencore/components/fab-category-tile/fab-category-tile.component.d.ts +22 -22
  138. package/src/app/modules/fabrikantencore/components/fab-filter/fab-filter.component.d.ts +28 -28
  139. package/src/app/modules/fabrikantencore/components/fab-filter-colour/fab-filter-colour-dialog/fab-filter-colour-dialog.component.d.ts +38 -38
  140. package/src/app/modules/fabrikantencore/components/fab-filter-colour/fab-filter-colour.component.d.ts +22 -22
  141. package/src/app/modules/fabrikantencore/components/fab-filter-colour-label/fab-filter-colour-label.component.d.ts +22 -22
  142. package/src/app/modules/fabrikantencore/components/fab-filter-fold/fab-filter-fold.component.d.ts +28 -28
  143. package/src/app/modules/fabrikantencore/components/fab-filter-label/fab-filter-label.component.d.ts +28 -28
  144. package/src/app/modules/fabrikantencore/components/fab-filters/fab-filters.component.d.ts +23 -23
  145. package/src/app/modules/fabrikantencore/components/fab-filters-input/fab-filters-input.component.d.ts +19 -19
  146. package/src/app/modules/fabrikantencore/components/fab-filters-overview/fab-filters-overview.component.d.ts +12 -12
  147. package/src/app/modules/fabrikantencore/components/fab-flag/fab-flag.component.d.ts +9 -9
  148. package/src/app/modules/fabrikantencore/components/fab-header/fab-header.component.d.ts +20 -20
  149. package/src/app/modules/fabrikantencore/components/fab-iframe/fab-iframe.component.d.ts +12 -12
  150. package/src/app/modules/fabrikantencore/components/fab-input/fab-input.component.d.ts +9 -9
  151. package/src/app/modules/fabrikantencore/components/fab-language-select/fab-language-select.component.d.ts +13 -13
  152. package/src/app/modules/fabrikantencore/components/fab-loader/fab-loader.component.d.ts +8 -8
  153. package/src/app/modules/fabrikantencore/components/fab-multiselect/fab-multiselect.component.d.ts +20 -20
  154. package/src/app/modules/fabrikantencore/components/fab-multiselect-fold/fab-multiselect-fold.component.d.ts +20 -20
  155. package/src/app/modules/fabrikantencore/components/fab-product/fab-product-bestek/fab-product-bestek.component.d.ts +23 -23
  156. package/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info-photo/fab-product-info-photo.component.d.ts +15 -15
  157. package/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info-photo-dialog/fab-product-info-photo-dialog.component.d.ts +12 -12
  158. package/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info.component.d.ts +17 -17
  159. package/src/app/modules/fabrikantencore/components/fab-product/fab-product.component.d.ts +36 -36
  160. package/src/app/modules/fabrikantencore/components/fab-product/fab-toebehoren/fab-toebehoren.component.d.ts +28 -28
  161. package/src/app/modules/fabrikantencore/components/fab-product-select/fab-product-select.component.d.ts +28 -28
  162. package/src/app/modules/fabrikantencore/components/fab-product-tile/fab-product-tile.component.d.ts +24 -24
  163. package/src/app/modules/fabrikantencore/components/fab-range-input/fab-range-input.component.d.ts +25 -25
  164. package/src/app/modules/fabrikantencore/components/fab-range-input-fold/fab-range-input-fold.component.d.ts +20 -20
  165. package/src/app/modules/fabrikantencore/components/fab-select-bcbproduct/fab-select-bcbproduct.component.d.ts +15 -15
  166. package/src/app/modules/fabrikantencore/components/fab-start/fab-start.component.d.ts +15 -15
  167. package/src/app/modules/fabrikantencore/components/fab-svg-viewer/fab-svg-viewer.component.d.ts +26 -26
  168. package/src/app/modules/fabrikantencore/components/fab-texture/fab-texture.component.d.ts +20 -20
  169. package/src/app/modules/fabrikantencore/components/fab-webgl-viewer/fab-webgl-viewer.component.d.ts +25 -25
  170. package/src/app/modules/fabrikantencore/fabrikantencore.module.d.ts +105 -104
  171. package/src/app/modules/fabrikantencore/helpers/auth.guard.d.ts +11 -11
  172. package/src/app/modules/fabrikantencore/helpers/basic-auth.interceptor.d.ts +11 -11
  173. package/src/app/modules/fabrikantencore/helpers/error.interceptor.d.ts +11 -11
  174. package/src/app/modules/fabrikantencore/services/authentication.service.d.ts +20 -20
  175. package/src/app/modules/fabrikantencore/services/bestek.service.d.ts +20 -20
  176. package/src/app/modules/fabrikantencore/services/fabrikanten.service.d.ts +99 -99
  177. package/src/app/modules/fabrikantencore/services/importsets.service.d.ts +31 -31
  178. package/src/app/modules/fabrikantencore/services/mobile.service.d.ts +19 -19
  179. package/src/app/modules/fabrikantencore/services/navigate.service.d.ts +15 -15
  180. package/src/app/modules/fabrikantencore/services/photo.service.d.ts +20 -20
  181. package/src/app/modules/fabrikantencore/services/products.service.d.ts +31 -31
  182. package/src/app/modules/fabrikantencore/services/projectsetting.service.d.ts +20 -20
  183. package/src/app/modules/fabrikantencore/services/statistics.service.d.ts +17 -17
  184. package/src/app/modules/fabrikantencore/services/svg.service.d.ts +27 -27
  185. package/src/app/modules/fabrikantencore/services/texture.service.d.ts +12 -12
  186. package/src/app/modules/fabrikantencore/services/toebehoren.service.d.ts +18 -18
  187. package/src/app/modules/fabrikantencore/services/translate.service.d.ts +27 -27
  188. package/src/app/modules/fabrikantencore/services/webgl.service.d.ts +21 -21
  189. package/src/app/modules/fabrikantencore/swagger/SwaggerClient.d.ts +2970 -2955
  190. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-categories/beheer-categories.component.mjs +0 -56
  191. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-connect-category-dialog/beheer-connect-category-dialog.component.mjs +0 -77
  192. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-deeplink/beheer-deeplink.component.mjs +0 -49
  193. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-display-ebo/beheer-display-ebo.component.mjs +0 -28
  194. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-ebo-koppel/beheer-ebo-koppel/beheer-ebo-koppel.component.mjs +0 -133
  195. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-filter/beheer-filter.component.mjs +0 -225
  196. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-filters/beheer-filters.component.mjs +0 -87
  197. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-dialog/beheer-import-sets-dialog.component.mjs +0 -56
  198. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-ebo/beheer-import-sets-ebo.component.mjs +0 -90
  199. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets-eigenschap/beheer-import-sets-eigenschap.component.mjs +0 -30
  200. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-import-sets/beheer-import-sets.component.mjs +0 -74
  201. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-inlog/beheer-inlog.component.mjs +0 -44
  202. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-main/beheer-main.component.mjs +0 -19
  203. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-nav/beheer-nav.component.mjs +0 -48
  204. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-bcbproduct/beheer-products-bcbproduct.component.mjs +0 -56
  205. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-connect-rangeinput/beheer-products-connect-rangeinput.component.mjs +0 -111
  206. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-ebo/beheer-products-ebo.component.mjs +0 -175
  207. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-eigenschap/beheer-products-eigenschap.component.mjs +0 -208
  208. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-eigenschap-bereik/beheer-products-eigenschap-bereik.component.mjs +0 -16
  209. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-koppel-filteroption-dailog/beheer-products-koppel-filteroption-dailog.component.mjs +0 -144
  210. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products-product/beheer-products-product.component.mjs +0 -28
  211. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-products/beheer-products.component.mjs +0 -150
  212. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-rangeinput/beheer-rangeinput.component.mjs +0 -87
  213. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-searchproducts/beheer-searchproducts-koppel-dialog/beheer-searchproducts-koppel-dialog.component.mjs +0 -89
  214. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-searchproducts/beheer-searchproducts.component.mjs +0 -299
  215. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-select-filter-dialog/beheer-select-filter-dialog.component.mjs +0 -104
  216. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-select-filteroption-dialog/beheer-select-filteroption-dialog.component.mjs +0 -76
  217. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-boolean/beheer-settings-boolean.component.mjs +0 -40
  218. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-options/beheer-settings-options.component.mjs +0 -24
  219. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings-string/beheer-settings-string.component.mjs +0 -24
  220. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-settings/beheer-settings.component.mjs +0 -27
  221. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-translate/beheer-translate.component.mjs +0 -126
  222. package/esm2020/src/app/modules/fabrikantencore/beheer/components/beheer-users/beheer-users.component.mjs +0 -143
  223. package/esm2020/src/app/modules/fabrikantencore/components/fab-actionmenu/fab-actionmenu.component.mjs +0 -147
  224. package/esm2020/src/app/modules/fabrikantencore/components/fab-bcb-product/fab-bcb-product.component.mjs +0 -14
  225. package/esm2020/src/app/modules/fabrikantencore/components/fab-breadcrumb/fab-breadcrumb.component.mjs +0 -80
  226. package/esm2020/src/app/modules/fabrikantencore/components/fab-categories/fab-categories.component.mjs +0 -31
  227. package/esm2020/src/app/modules/fabrikantencore/components/fab-category-navigator/fab-category-navigator.component.mjs +0 -68
  228. package/esm2020/src/app/modules/fabrikantencore/components/fab-category-tile/fab-category-tile.component.mjs +0 -49
  229. package/esm2020/src/app/modules/fabrikantencore/components/fab-filter/fab-filter.component.mjs +0 -128
  230. package/esm2020/src/app/modules/fabrikantencore/components/fab-filter-colour/fab-filter-colour-dialog/fab-filter-colour-dialog.component.mjs +0 -305
  231. package/esm2020/src/app/modules/fabrikantencore/components/fab-filter-colour/fab-filter-colour.component.mjs +0 -57
  232. package/esm2020/src/app/modules/fabrikantencore/components/fab-filter-colour-label/fab-filter-colour-label.component.mjs +0 -57
  233. package/esm2020/src/app/modules/fabrikantencore/components/fab-filter-fold/fab-filter-fold.component.mjs +0 -88
  234. package/esm2020/src/app/modules/fabrikantencore/components/fab-filter-label/fab-filter-label.component.mjs +0 -128
  235. package/esm2020/src/app/modules/fabrikantencore/components/fab-filters/fab-filters.component.mjs +0 -42
  236. package/esm2020/src/app/modules/fabrikantencore/components/fab-filters-input/fab-filters-input.component.mjs +0 -55
  237. package/esm2020/src/app/modules/fabrikantencore/components/fab-filters-overview/fab-filters-overview.component.mjs +0 -32
  238. package/esm2020/src/app/modules/fabrikantencore/components/fab-flag/fab-flag.component.mjs +0 -16
  239. package/esm2020/src/app/modules/fabrikantencore/components/fab-header/fab-header.component.mjs +0 -57
  240. package/esm2020/src/app/modules/fabrikantencore/components/fab-iframe/fab-iframe.component.mjs +0 -29
  241. package/esm2020/src/app/modules/fabrikantencore/components/fab-input/fab-input.component.mjs +0 -29
  242. package/esm2020/src/app/modules/fabrikantencore/components/fab-language-select/fab-language-select.component.mjs +0 -23
  243. package/esm2020/src/app/modules/fabrikantencore/components/fab-loader/fab-loader.component.mjs +0 -15
  244. package/esm2020/src/app/modules/fabrikantencore/components/fab-multiselect/fab-multiselect.component.mjs +0 -48
  245. package/esm2020/src/app/modules/fabrikantencore/components/fab-multiselect-fold/fab-multiselect-fold.component.mjs +0 -40
  246. package/esm2020/src/app/modules/fabrikantencore/components/fab-product/fab-product-bestek/fab-product-bestek.component.mjs +0 -46
  247. package/esm2020/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info-photo/fab-product-info-photo.component.mjs +0 -32
  248. package/esm2020/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info-photo-dialog/fab-product-info-photo-dialog.component.mjs +0 -21
  249. package/esm2020/src/app/modules/fabrikantencore/components/fab-product/fab-product-info/fab-product-info.component.mjs +0 -42
  250. package/esm2020/src/app/modules/fabrikantencore/components/fab-product/fab-product.component.mjs +0 -106
  251. package/esm2020/src/app/modules/fabrikantencore/components/fab-product/fab-toebehoren/fab-toebehoren.component.mjs +0 -93
  252. package/esm2020/src/app/modules/fabrikantencore/components/fab-product-select/fab-product-select.component.mjs +0 -70
  253. package/esm2020/src/app/modules/fabrikantencore/components/fab-product-tile/fab-product-tile.component.mjs +0 -52
  254. package/esm2020/src/app/modules/fabrikantencore/components/fab-range-input/fab-range-input.component.mjs +0 -92
  255. package/esm2020/src/app/modules/fabrikantencore/components/fab-range-input-fold/fab-range-input-fold.component.mjs +0 -40
  256. package/esm2020/src/app/modules/fabrikantencore/components/fab-select-bcbproduct/fab-select-bcbproduct.component.mjs +0 -26
  257. package/esm2020/src/app/modules/fabrikantencore/components/fab-start/fab-start.component.mjs +0 -26
  258. package/esm2020/src/app/modules/fabrikantencore/components/fab-svg-viewer/fab-svg-viewer.component.mjs +0 -66
  259. package/esm2020/src/app/modules/fabrikantencore/components/fab-texture/fab-texture.component.mjs +0 -42
  260. package/esm2020/src/app/modules/fabrikantencore/fabrikantencore.module.mjs +0 -478
  261. package/esm2020/src/app/modules/fabrikantencore/helpers/auth.guard.mjs +0 -30
  262. package/esm2020/src/app/modules/fabrikantencore/helpers/basic-auth.interceptor.mjs +0 -26
  263. package/esm2020/src/app/modules/fabrikantencore/helpers/error.interceptor.mjs +0 -27
  264. package/esm2020/src/app/modules/fabrikantencore/services/authentication.service.mjs +0 -70
  265. package/esm2020/src/app/modules/fabrikantencore/services/bestek.service.mjs +0 -91
  266. package/esm2020/src/app/modules/fabrikantencore/services/fabrikanten.service.mjs +0 -1066
  267. package/esm2020/src/app/modules/fabrikantencore/services/importsets.service.mjs +0 -137
  268. package/esm2020/src/app/modules/fabrikantencore/services/mobile.service.mjs +0 -47
  269. package/esm2020/src/app/modules/fabrikantencore/services/navigate.service.mjs +0 -39
  270. package/esm2020/src/app/modules/fabrikantencore/services/photo.service.mjs +0 -99
  271. package/esm2020/src/app/modules/fabrikantencore/services/products.service.mjs +0 -226
  272. package/esm2020/src/app/modules/fabrikantencore/services/projectsetting.service.mjs +0 -90
  273. package/esm2020/src/app/modules/fabrikantencore/services/statistics.service.mjs +0 -82
  274. package/esm2020/src/app/modules/fabrikantencore/services/svg.service.mjs +0 -78
  275. package/esm2020/src/app/modules/fabrikantencore/services/texture.service.mjs +0 -33
  276. package/esm2020/src/app/modules/fabrikantencore/services/toebehoren.service.mjs +0 -58
  277. package/esm2020/src/app/modules/fabrikantencore/services/translate.service.mjs +0 -127
  278. package/esm2020/src/app/modules/fabrikantencore/services/webgl.service.mjs +0 -66
  279. package/fesm2015/fabrikantencore.mjs +0 -18179
  280. package/fesm2015/fabrikantencore.mjs.map +0 -1
  281. package/fesm2020/fabrikantencore.mjs.map +0 -1
@@ -0,0 +1,289 @@
1
+ import { Component, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { BeheerLanguagesFilterViewModel, BeheerLanguagesSubCategoryViewModel, CreateExportRequest, LoginResponseModel, ReadExportRequest, TranslationCategory, TranslationSubCategory } from '../../../swagger/SwaggerClient';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../swagger/SwaggerClient";
5
+ import * as i2 from "../../../services/authentication.service";
6
+ import * as i3 from "@angular/material/legacy-snack-bar";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "@kolkov/angular-editor";
9
+ import * as i6 from "@angular/material/legacy-form-field";
10
+ import * as i7 from "@angular/material/legacy-input";
11
+ import * as i8 from "@angular/forms";
12
+ import * as i9 from "@angular/material/legacy-button";
13
+ import * as i10 from "@angular/material/legacy-card";
14
+ import * as i11 from "@angular/material/legacy-paginator";
15
+ import * as i12 from "@angular/material/legacy-checkbox";
16
+ import * as i13 from "@angular/material/legacy-select";
17
+ import * as i14 from "@angular/material/legacy-core";
18
+ import * as i15 from "../beheer-nav/beheer-nav.component";
19
+ import * as i16 from "../../../components/fab-loader/fab-loader.component";
20
+ import * as i17 from "../../../components/fab-flag/fab-flag.component";
21
+ class BeheerTranslateComponent {
22
+ TranslateApiClient;
23
+ authenticationService;
24
+ snackBar;
25
+ ChangeDetectorRef;
26
+ HTML = "test";
27
+ Loading = true;
28
+ OpenChanges = false;
29
+ BeheerLanguagesViewModel;
30
+ ActiveSubs = new Array();
31
+ pageIndex = 0;
32
+ amountLength = 0;
33
+ amountPerPage = 10;
34
+ get TranslationCategory() {
35
+ return TranslationCategory;
36
+ }
37
+ get TranslationSubCategory() {
38
+ return TranslationSubCategory;
39
+ }
40
+ SelectedBeheerLanguagesCategoryViewModel = null;
41
+ tablediv;
42
+ editorConfig = {
43
+ editable: true,
44
+ spellcheck: false,
45
+ height: 'auto',
46
+ minHeight: '0',
47
+ maxHeight: 'auto',
48
+ width: 'auto',
49
+ minWidth: '0',
50
+ translate: 'no',
51
+ enableToolbar: true,
52
+ showToolbar: true,
53
+ defaultParagraphSeparator: '',
54
+ defaultFontName: '',
55
+ defaultFontSize: '',
56
+ sanitize: true,
57
+ toolbarPosition: 'top',
58
+ toolbarHiddenButtons: [
59
+ ['fontName']
60
+ ]
61
+ };
62
+ constructor(TranslateApiClient, authenticationService, snackBar, ChangeDetectorRef) {
63
+ this.TranslateApiClient = TranslateApiClient;
64
+ this.authenticationService = authenticationService;
65
+ this.snackBar = snackBar;
66
+ this.ChangeDetectorRef = ChangeDetectorRef;
67
+ }
68
+ ngDoCheck() {
69
+ this.Resize();
70
+ }
71
+ onResize(event) {
72
+ this.Resize();
73
+ }
74
+ ngOnInit() {
75
+ this.LoadTranslations(this.ChangeDetectorRef);
76
+ }
77
+ handlePageEvent(e) {
78
+ //this.pageEvent = e;
79
+ //this.length = e.length;
80
+ //this.pageSize = e.pageSize;
81
+ this.pageIndex = e.pageIndex;
82
+ this.RefreshPaginator();
83
+ }
84
+ RefreshPaginator() {
85
+ this.amountLength = 0;
86
+ this.ActiveSubs = new Array();
87
+ var startIndex = this.pageIndex * this.amountPerPage;
88
+ var endIndex = (this.pageIndex + 1) * this.amountPerPage;
89
+ if (this.SelectedBeheerLanguagesCategoryViewModel != null) {
90
+ var subcats = this.SelectedBeheerLanguagesCategoryViewModel.subCategories;
91
+ if (subcats != null) {
92
+ for (var i = 0; i < subcats.length; i++) {
93
+ var keys = subcats[i].keys;
94
+ if (keys != null) {
95
+ var subcat = null;
96
+ for (var j = 0; j < keys.length; j++) {
97
+ if (this.amountLength >= startIndex && this.amountLength < endIndex) {
98
+ if (subcat == null) {
99
+ subcat = new BeheerLanguagesSubCategoryViewModel();
100
+ subcat.translationSubCategory = subcats[i].translationSubCategory;
101
+ subcat.html = subcats[i].html;
102
+ subcat.keys = new Array();
103
+ this.ActiveSubs.push(subcat);
104
+ }
105
+ if (subcat?.keys != null) {
106
+ subcat.keys.push(keys[j]);
107
+ }
108
+ }
109
+ this.amountLength++;
110
+ }
111
+ }
112
+ var filters = subcats[i].filters;
113
+ if (filters != null) {
114
+ var subcat = null;
115
+ for (var j = 0; j < filters.length; j++) {
116
+ var options = filters[j].options;
117
+ var filtermodel = null;
118
+ if (options != null) {
119
+ for (var o = 0; o < options.length; o++) {
120
+ if (this.amountLength >= startIndex && this.amountLength < endIndex) {
121
+ if (subcat == null) {
122
+ subcat = new BeheerLanguagesSubCategoryViewModel();
123
+ subcat.translationSubCategory = subcats[i].translationSubCategory;
124
+ subcat.html = subcats[i].html;
125
+ subcat.keys = new Array();
126
+ subcat.filters = new Array();
127
+ this.ActiveSubs.push(subcat);
128
+ }
129
+ if (subcat?.filters != null && filtermodel == null) {
130
+ this.amountLength++;
131
+ filtermodel = new BeheerLanguagesFilterViewModel(filters[j]);
132
+ filtermodel.options = new Array();
133
+ subcat.filters.push(filtermodel);
134
+ }
135
+ if (filtermodel?.options != null) {
136
+ filtermodel.options.push(options[o]);
137
+ }
138
+ }
139
+ this.amountLength++;
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+ this.ChangeDetectorRef.detectChanges();
148
+ }
149
+ Resize() {
150
+ if (this.tablediv?.nativeElement?.offsetHeight != null) {
151
+ if (this.IsHTML()) {
152
+ if (this.amountPerPage != 1) {
153
+ this.amountPerPage = 1;
154
+ this.editorConfig.height = Math.floor(this.tablediv?.nativeElement?.offsetHeight - 400) + "px";
155
+ this.RefreshPaginator();
156
+ }
157
+ }
158
+ else {
159
+ var itemcount = Math.floor((parseInt(this.tablediv.nativeElement.offsetHeight) - 250) / 57);
160
+ if (itemcount > 0) {
161
+ if (this.amountPerPage != itemcount) {
162
+ this.amountPerPage = itemcount;
163
+ this.RefreshPaginator();
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ GetEntry(entries, language) {
170
+ if (entries.entries != null) {
171
+ for (var i = 0; i < entries.length; i++) {
172
+ if (entries[i].languageId == language.id) {
173
+ return entries[i];
174
+ }
175
+ }
176
+ }
177
+ return null;
178
+ }
179
+ LoadTranslations(ChangeDetectorRef) {
180
+ this.Loading = true;
181
+ ChangeDetectorRef.detectChanges();
182
+ this.TranslateApiClient.getBeheerLanguagesViewModel(this.authenticationService.currentUserValue).subscribe((model) => {
183
+ this.BeheerLanguagesViewModel = model;
184
+ if (this.BeheerLanguagesViewModel.categories != null) {
185
+ this.SelectedBeheerLanguagesCategoryViewModel = this.BeheerLanguagesViewModel.categories[0];
186
+ this.RefreshPaginator();
187
+ }
188
+ this.Loading = false;
189
+ ChangeDetectorRef.detectChanges();
190
+ }, (error) => {
191
+ if (error.status == 400)
192
+ alert(error.json());
193
+ else {
194
+ alert('An unexpected error occured');
195
+ alert(error);
196
+ }
197
+ this.Loading = false;
198
+ ChangeDetectorRef.detectChanges();
199
+ });
200
+ }
201
+ Save() {
202
+ this.Loading = true;
203
+ this.ChangeDetectorRef.detectChanges();
204
+ this.BeheerLanguagesViewModel.loginResponseModel = new LoginResponseModel(this.authenticationService.currentUserValue);
205
+ this.TranslateApiClient.saveBeheerLanguagesViewModel(this.BeheerLanguagesViewModel).subscribe(() => {
206
+ this.Loading = false;
207
+ this.OpenChanges = false;
208
+ this.ChangeDetectorRef.detectChanges();
209
+ }, (error) => {
210
+ alert('An unexpected error occured');
211
+ this.Loading = false;
212
+ this.ChangeDetectorRef.detectChanges();
213
+ });
214
+ }
215
+ UpdateChanged(entry) {
216
+ entry.changed = true;
217
+ this.ShowSnackBar();
218
+ }
219
+ ShowSnackBar() {
220
+ if (!this.OpenChanges) {
221
+ this.OpenChanges = true;
222
+ var snack = this.snackBar.open("Unsaved changes...", "Save");
223
+ snack.onAction().subscribe(() => {
224
+ this.Save();
225
+ });
226
+ }
227
+ }
228
+ Export() {
229
+ var request = new CreateExportRequest();
230
+ this.TranslateApiClient.createExport(request).subscribe((model) => {
231
+ alert(model.url);
232
+ }, (error) => {
233
+ if (error.status == 400)
234
+ alert(error.json());
235
+ else {
236
+ alert('An unexpected error occured');
237
+ alert(error);
238
+ }
239
+ });
240
+ }
241
+ Import() {
242
+ var request = new ReadExportRequest();
243
+ this.TranslateApiClient.readExport(request).subscribe(() => {
244
+ }, (error) => {
245
+ if (error.status == 400)
246
+ alert(error.json());
247
+ else {
248
+ alert('An unexpected error occured');
249
+ alert(error);
250
+ }
251
+ });
252
+ }
253
+ IsHTML() {
254
+ if (this.SelectedBeheerLanguagesCategoryViewModel != null) {
255
+ var subcats = this.SelectedBeheerLanguagesCategoryViewModel.subCategories;
256
+ if (subcats != null) {
257
+ for (var i = 0; i < subcats.length; i++) {
258
+ if (subcats[i].html)
259
+ return true;
260
+ }
261
+ }
262
+ }
263
+ return false;
264
+ }
265
+ GetLanguageCount() {
266
+ var count = 0;
267
+ if (this.BeheerLanguagesViewModel != null) {
268
+ var languages = this.BeheerLanguagesViewModel.languages;
269
+ if (languages != null) {
270
+ for (var i = 0; i < languages.length; i++) {
271
+ if (languages[i].selected)
272
+ count++;
273
+ }
274
+ }
275
+ }
276
+ return count;
277
+ }
278
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: BeheerTranslateComponent, deps: [{ token: i1.TranslateApiClient }, { token: i2.AuthenticationService }, { token: i3.MatLegacySnackBar }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
279
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: BeheerTranslateComponent, selector: "app-beheer-translate", viewQueries: [{ propertyName: "tablediv", first: true, predicate: ["tablediv"], descendants: true }], ngImport: i0, template: "<app-beheer-nav></app-beheer-nav>\r\n\r\n<app-fab-loader *ngIf=\"Loading\"></app-fab-loader>\r\n\r\n<div *ngIf=\"!Loading\">\r\n <div class=\"displayflex\" #tablediv (window:resize)=\"onResize($event)\">\r\n <div>\r\n <mat-card class=\"main-bar\">\r\n <mat-card-content>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label>Group</mat-label>\r\n <mat-select [(ngModel)]=\"SelectedBeheerLanguagesCategoryViewModel\" (selectionChange)=\"this.pageIndex = 0; Resize()\">\r\n <mat-option *ngFor=\"let cat of BeheerLanguagesViewModel.categories\" [value]=\"cat\">\r\n {{ TranslationCategory[cat.translationCategory] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!--<button mat-raised-button (click)=\"Export()\">\r\n Export\r\n </button>\r\n <button mat-raised-button (click)=\"Import()\">\r\n Import\r\n </button>-->\r\n <div *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <mat-checkbox [(ngModel)]=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <br /><br />\r\n <button mat-raised-button (click)=\"Save()\" class=\"save-button\" [disabled]=\"!OpenChanges\">\r\n Save\r\n </button>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n <mat-card class=\"main-bar flexauto\">\r\n <mat-card-content>\r\n <div class=\"max-height\">\r\n\r\n <div *ngIf=\"SelectedBeheerLanguagesCategoryViewModel != null\">\r\n <h1>{{ TranslationCategory[SelectedBeheerLanguagesCategoryViewModel.translationCategory] }}</h1>\r\n\r\n <table class=\"full-width\">\r\n <tr>\r\n <td *ngIf=\"!IsHTML()\" colspan=\"2\" class=\"cat-row\"></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td class=\"cat-row\" *ngIf=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n <ng-container *ngIf=\"IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <ng-container *ngFor=\"let key of subcat.keys\">\r\n <tr>\r\n <td [attr.colspan]=\"GetLanguageCount()\">\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\" [style.width]=\"'50%'\">\r\n <div>\r\n <angular-editor [config]=\"editorConfig\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (ngModelChange)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </angular-editor>\r\n </div>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <tr *ngFor=\"let key of subcat.keys\">\r\n <td>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Translation\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngFor=\"let filter of subcat.filters\">\r\n <tr>\r\n <td>\r\n {{ filter.filter.text }}\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Translation\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(filter.filter.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(filter.filter.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngFor=\"let option of filter.options\">\r\n <tr>\r\n <td>\r\n <ul>\r\n <li>{{ option.text }}</li>\r\n </ul>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Translation\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(option.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(option.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n </div>\r\n <div>\r\n <mat-paginator #paginator\r\n (page)=\"handlePageEvent($event)\"\r\n [length]=\"amountLength\"\r\n [pageSize]=\"amountPerPage\"\r\n [showFirstLastButtons]=\"true\"\r\n [hidePageSize]=\"true\"\r\n [pageIndex]=\"pageIndex\"\r\n aria-label=\"Select page\">\r\n </mat-paginator>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n</div>\r\n", styles: [".mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#aaa!important}snack-bar-container .mat-button-wrapper{color:#aaa}app-beheer-translate .mat-form-field-wrapper{margin-bottom:-16px}app-beheer-translate .cat-row{font-weight:700;border-bottom:1px solid #000;padding-top:20px}app-beheer-translate .save-button{width:100%}app-beheer-translate .displayflex{display:flex}app-beheer-translate .flexauto{flex:auto}app-beheer-translate .max-height{height:calc(100vH - 174px);overflow:auto}app-beheer-translate .fullwidth{width:100%}app-beheer-translate .main{margin:20px;max-height:calc(100vH - 235px);overflow:auto}app-beheer-translate .main-bar{margin:20px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["html", "viewMode", "blur", "focus"] }, { kind: "component", type: i6.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i10.MatLegacyCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i11.MatLegacyPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i15.BeheerNavComponent, selector: "app-beheer-nav" }, { kind: "component", type: i16.FabLoaderComponent, selector: "app-fab-loader" }, { kind: "component", type: i17.FabFlagComponent, selector: "fab-flag", inputs: ["country"] }], encapsulation: i0.ViewEncapsulation.None });
280
+ }
281
+ export { BeheerTranslateComponent };
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: BeheerTranslateComponent, decorators: [{
283
+ type: Component,
284
+ args: [{ selector: 'app-beheer-translate', encapsulation: ViewEncapsulation.None, template: "<app-beheer-nav></app-beheer-nav>\r\n\r\n<app-fab-loader *ngIf=\"Loading\"></app-fab-loader>\r\n\r\n<div *ngIf=\"!Loading\">\r\n <div class=\"displayflex\" #tablediv (window:resize)=\"onResize($event)\">\r\n <div>\r\n <mat-card class=\"main-bar\">\r\n <mat-card-content>\r\n <mat-form-field appearance=\"fill\">\r\n <mat-label>Group</mat-label>\r\n <mat-select [(ngModel)]=\"SelectedBeheerLanguagesCategoryViewModel\" (selectionChange)=\"this.pageIndex = 0; Resize()\">\r\n <mat-option *ngFor=\"let cat of BeheerLanguagesViewModel.categories\" [value]=\"cat\">\r\n {{ TranslationCategory[cat.translationCategory] }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!--<button mat-raised-button (click)=\"Export()\">\r\n Export\r\n </button>\r\n <button mat-raised-button (click)=\"Import()\">\r\n Import\r\n </button>-->\r\n <div *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <mat-checkbox [(ngModel)]=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <br /><br />\r\n <button mat-raised-button (click)=\"Save()\" class=\"save-button\" [disabled]=\"!OpenChanges\">\r\n Save\r\n </button>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n <mat-card class=\"main-bar flexauto\">\r\n <mat-card-content>\r\n <div class=\"max-height\">\r\n\r\n <div *ngIf=\"SelectedBeheerLanguagesCategoryViewModel != null\">\r\n <h1>{{ TranslationCategory[SelectedBeheerLanguagesCategoryViewModel.translationCategory] }}</h1>\r\n\r\n <table class=\"full-width\">\r\n <tr>\r\n <td *ngIf=\"!IsHTML()\" colspan=\"2\" class=\"cat-row\"></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td class=\"cat-row\" *ngIf=\"language.selected\">\r\n <fab-flag [country]=\"language.flag\"></fab-flag> {{ language.name }}\r\n </td>\r\n </ng-container>\r\n </tr>\r\n\r\n <ng-container *ngIf=\"IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <ng-container *ngFor=\"let key of subcat.keys\">\r\n <tr>\r\n <td [attr.colspan]=\"GetLanguageCount()\">\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\" [style.width]=\"'50%'\">\r\n <div>\r\n <angular-editor [config]=\"editorConfig\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (ngModelChange)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </angular-editor>\r\n </div>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!IsHTML()\">\r\n <ng-container *ngFor=\"let subcat of ActiveSubs\">\r\n <tr *ngFor=\"let key of subcat.keys\">\r\n <td>\r\n {{ TranslationSubCategory[subcat.translationSubCategory] }}\r\n <ng-container *ngIf=\"key.text != ''\">\r\n ({{ key.text }})\r\n </ng-container>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages; index as i\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Translation\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(key.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(key.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngFor=\"let filter of subcat.filters\">\r\n <tr>\r\n <td>\r\n {{ filter.filter.text }}\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Translation\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(filter.filter.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(filter.filter.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n <ng-container *ngFor=\"let option of filter.options\">\r\n <tr>\r\n <td>\r\n <ul>\r\n <li>{{ option.text }}</li>\r\n </ul>\r\n </td>\r\n <td></td>\r\n <ng-container *ngFor=\"let language of BeheerLanguagesViewModel.languages\">\r\n <td *ngIf=\"language.selected\">\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Translation\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"GetEntry(option.entries, language).value\" (keyup)=\"UpdateChanged(GetEntry(option.entries, language))\">\r\n </mat-form-field>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n </div>\r\n <div>\r\n <mat-paginator #paginator\r\n (page)=\"handlePageEvent($event)\"\r\n [length]=\"amountLength\"\r\n [pageSize]=\"amountPerPage\"\r\n [showFirstLastButtons]=\"true\"\r\n [hidePageSize]=\"true\"\r\n [pageIndex]=\"pageIndex\"\r\n aria-label=\"Select page\">\r\n </mat-paginator>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n</div>\r\n", styles: [".mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#aaa!important}snack-bar-container .mat-button-wrapper{color:#aaa}app-beheer-translate .mat-form-field-wrapper{margin-bottom:-16px}app-beheer-translate .cat-row{font-weight:700;border-bottom:1px solid #000;padding-top:20px}app-beheer-translate .save-button{width:100%}app-beheer-translate .displayflex{display:flex}app-beheer-translate .flexauto{flex:auto}app-beheer-translate .max-height{height:calc(100vH - 174px);overflow:auto}app-beheer-translate .fullwidth{width:100%}app-beheer-translate .main{margin:20px;max-height:calc(100vH - 235px);overflow:auto}app-beheer-translate .main-bar{margin:20px}\n"] }]
285
+ }], ctorParameters: function () { return [{ type: i1.TranslateApiClient }, { type: i2.AuthenticationService }, { type: i3.MatLegacySnackBar }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { tablediv: [{
286
+ type: ViewChild,
287
+ args: ['tablediv']
288
+ }] } });
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2JlaGVlci9jb21wb25lbnRzL2JlaGVlci10cmFuc2xhdGUvYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2JlaGVlci9jb21wb25lbnRzL2JlaGVlci10cmFuc2xhdGUvYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBeUQsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTWxKLE9BQU8sRUFBbUUsOEJBQThCLEVBQStCLG1DQUFtQyxFQUFxRCxtQkFBbUIsRUFBd0Isa0JBQWtCLEVBQUUsaUJBQWlCLEVBQXFELG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFeGIsTUFNYSx3QkFBd0I7SUErQ3pCO0lBQ0E7SUFDQTtJQUNBO0lBaERILElBQUksR0FBVyxNQUFNLENBQUM7SUFFdEIsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLHdCQUF3QixDQUEyQjtJQUNuRCxVQUFVLEdBQStDLElBQUksS0FBSyxFQUF1QyxDQUFDO0lBRTFHLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFDdEIsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUN6QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBRWxDLElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsc0JBQXNCO1FBQy9CLE9BQU8sc0JBQXNC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QUFJO3dCQUNqQixPQUFPLElBQUksQ0FBQztpQkFDZjthQUNGO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxJQUFJLENBQUMsd0JBQXdCLElBQUksSUFBSSxFQUFFO1lBQ3pDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUM7WUFFeEQsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFO2dCQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTt3QkFDdkIsS0FBSyxFQUFFLENBQUM7aUJBQ1g7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3VHQXBVVSx3QkFBd0I7MkZBQXhCLHdCQUF3QixrS0NkckMsNGhQQTRKQTs7U0Q5SWEsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGlCQUdqQixpQkFBaUIsQ0FBQyxJQUFJOzZNQXlCZCxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBPbkNoYW5nZXMsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMZWdhY3lQYWdlRXZlbnQgYXMgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXBhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcic7XHJcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3JDb25maWcgfSBmcm9tICdAa29sa292L2FuZ3VsYXItZWRpdG9yJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsLCBCZWhlZXJMYW5ndWFnZXNFbnRyeVZpZXdNb2RlbCwgQmVoZWVyTGFuZ3VhZ2VzRmlsdGVyVmlld01vZGVsLCBCZWhlZXJMYW5ndWFnZXNLZXlWaWV3TW9kZWwsIEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsLCBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwsIEJlaGVlckxhbmd1YWdlVmlld01vZGVsLCBDcmVhdGVFeHBvcnRSZXF1ZXN0LCBDcmVhdGVFeHBvcnRSZXNwb25zZSwgTG9naW5SZXNwb25zZU1vZGVsLCBSZWFkRXhwb3J0UmVxdWVzdCwgVHJhbnNsYXRlQXBpQ2xpZW50LCBUcmFuc2xhdGVLZXlDYXRlZ29yeVZpZXdNb2RlbCwgVHJhbnNsYXRpb25DYXRlZ29yeSwgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSB9IGZyb20gJy4uLy4uLy4uL3N3YWdnZXIvU3dhZ2dlckNsaWVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1iZWhlZXItdHJhbnNsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYmVoZWVyLXRyYW5zbGF0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEJlaGVlclRyYW5zbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjayB7XHJcblxyXG4gIHB1YmxpYyBIVE1MOiBzdHJpbmcgPSBcInRlc3RcIjtcclxuXHJcbiAgcHVibGljIExvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBPcGVuQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWw6IEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbDtcclxuICBwdWJsaWMgQWN0aXZlU3ViczogQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzU3ViQ2F0ZWdvcnlWaWV3TW9kZWw+ID0gbmV3IEFycmF5PEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsPigpO1xyXG5cclxuICBwdWJsaWMgcGFnZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBhbW91bnRMZW5ndGg6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGFtb3VudFBlclBhZ2U6IG51bWJlciA9IDEwO1xyXG5cclxuICBwdWJsaWMgZ2V0IFRyYW5zbGF0aW9uQ2F0ZWdvcnkoKSB7XHJcbiAgICByZXR1cm4gVHJhbnNsYXRpb25DYXRlZ29yeTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgVHJhbnNsYXRpb25TdWJDYXRlZ29yeSgpIHtcclxuICAgIHJldHVybiBUcmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWw6IEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlZGl2JykgdGFibGVkaXY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGVkaXRvckNvbmZpZzogQW5ndWxhckVkaXRvckNvbmZpZyA9IHtcclxuICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgc3BlbGxjaGVjazogZmFsc2UsXHJcbiAgICBoZWlnaHQ6ICdhdXRvJyxcclxuICAgIG1pbkhlaWdodDogJzAnLFxyXG4gICAgbWF4SGVpZ2h0OiAnYXV0bycsXHJcbiAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgbWluV2lkdGg6ICcwJyxcclxuICAgIHRyYW5zbGF0ZTogJ25vJyxcclxuICAgIGVuYWJsZVRvb2xiYXI6IHRydWUsXHJcbiAgICBzaG93VG9vbGJhcjogdHJ1ZSxcclxuICAgIGRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I6ICcnLFxyXG4gICAgZGVmYXVsdEZvbnROYW1lOiAnJyxcclxuICAgIGRlZmF1bHRGb250U2l6ZTogJycsXHJcbiAgICBzYW5pdGl6ZTogdHJ1ZSxcclxuICAgIHRvb2xiYXJQb3NpdGlvbjogJ3RvcCcsXHJcbiAgICB0b29sYmFySGlkZGVuQnV0dG9uczogW1xyXG4gICAgICBbJ2ZvbnROYW1lJ11cclxuICAgIF1cclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgVHJhbnNsYXRlQXBpQ2xpZW50OiBUcmFuc2xhdGVBcGlDbGllbnQsXHJcbiAgICBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIENoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLlJlc2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRUcmFuc2xhdGlvbnModGhpcy5DaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYWdlRXZlbnQoZTogUGFnZUV2ZW50KSB7XHJcbiAgICAvL3RoaXMucGFnZUV2ZW50ID0gZTtcclxuICAgIC8vdGhpcy5sZW5ndGggPSBlLmxlbmd0aDtcclxuICAgIC8vdGhpcy5wYWdlU2l6ZSA9IGUucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGUucGFnZUluZGV4O1xyXG5cclxuICAgIHRoaXMuUmVmcmVzaFBhZ2luYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlZnJlc2hQYWdpbmF0b3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFtb3VudExlbmd0aCA9IDA7XHJcbiAgICB0aGlzLkFjdGl2ZVN1YnMgPSBuZXcgQXJyYXk8QmVoZWVyTGFuZ3VhZ2VzU3ViQ2F0ZWdvcnlWaWV3TW9kZWw+KCk7XHJcblxyXG4gICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLnBhZ2VJbmRleCAqIHRoaXMuYW1vdW50UGVyUGFnZTtcclxuICAgIHZhciBlbmRJbmRleCA9ICh0aGlzLnBhZ2VJbmRleCArIDEpICogdGhpcy5hbW91bnRQZXJQYWdlO1xyXG5cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwgIT0gbnVsbCkge1xyXG5cclxuICAgICAgdmFyIHN1YmNhdHMgPSB0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwuc3ViQ2F0ZWdvcmllcztcclxuXHJcbiAgICAgIGlmIChzdWJjYXRzICE9IG51bGwpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YmNhdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHZhciBrZXlzID0gc3ViY2F0c1tpXS5rZXlzO1xyXG5cclxuICAgICAgICAgIGlmIChrZXlzICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBzdWJjYXQ6IEJlaGVlckxhbmd1YWdlc1N1YkNhdGVnb3J5Vmlld01vZGVsIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYW1vdW50TGVuZ3RoID49IHN0YXJ0SW5kZXggJiYgdGhpcy5hbW91bnRMZW5ndGggPCBlbmRJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1YmNhdCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN1YmNhdCA9IG5ldyBCZWhlZXJMYW5ndWFnZXNTdWJDYXRlZ29yeVZpZXdNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgICBzdWJjYXQudHJhbnNsYXRpb25TdWJDYXRlZ29yeSA9IHN1YmNhdHNbaV0udHJhbnNsYXRpb25TdWJDYXRlZ29yeTtcclxuICAgICAgICAgICAgICAgICAgc3ViY2F0Lmh0bWwgPSBzdWJjYXRzW2ldLmh0bWw7XHJcbiAgICAgICAgICAgICAgICAgIHN1YmNhdC5rZXlzID0gbmV3IEFycmF5PEJlaGVlckxhbmd1YWdlc0tleVZpZXdNb2RlbD4oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuQWN0aXZlU3Vicy5wdXNoKHN1YmNhdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHN1YmNhdD8ua2V5cyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN1YmNhdC5rZXlzLnB1c2goa2V5c1tqXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLmFtb3VudExlbmd0aCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdmFyIGZpbHRlcnMgPSBzdWJjYXRzW2ldLmZpbHRlcnM7XHJcblxyXG4gICAgICAgICAgaWYgKGZpbHRlcnMgIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdmFyIHN1YmNhdDogQmVoZWVyTGFuZ3VhZ2VzU3ViQ2F0ZWdvcnlWaWV3TW9kZWwgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmlsdGVycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIHZhciBvcHRpb25zID0gZmlsdGVyc1tqXS5vcHRpb25zO1xyXG4gICAgICAgICAgICAgIHZhciBmaWx0ZXJtb2RlbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIG8gPSAwOyBvIDwgb3B0aW9ucy5sZW5ndGg7IG8rKykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbW91bnRMZW5ndGggPj0gc3RhcnRJbmRleCAmJiB0aGlzLmFtb3VudExlbmd0aCA8IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YmNhdCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJjYXQgPSBuZXcgQmVoZWVyTGFuZ3VhZ2VzU3ViQ2F0ZWdvcnlWaWV3TW9kZWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHN1YmNhdC50cmFuc2xhdGlvblN1YkNhdGVnb3J5ID0gc3ViY2F0c1tpXS50cmFuc2xhdGlvblN1YkNhdGVnb3J5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3ViY2F0Lmh0bWwgPSBzdWJjYXRzW2ldLmh0bWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJjYXQua2V5cyA9IG5ldyBBcnJheTxCZWhlZXJMYW5ndWFnZXNLZXlWaWV3TW9kZWw+KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJjYXQuZmlsdGVycyA9IG5ldyBBcnJheTxCZWhlZXJMYW5ndWFnZXNGaWx0ZXJWaWV3TW9kZWw+KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5BY3RpdmVTdWJzLnB1c2goc3ViY2F0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJjYXQ/LmZpbHRlcnMgIT0gbnVsbCAmJiBmaWx0ZXJtb2RlbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFtb3VudExlbmd0aCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVybW9kZWwgPSBuZXcgQmVoZWVyTGFuZ3VhZ2VzRmlsdGVyVmlld01vZGVsKGZpbHRlcnNbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVybW9kZWwub3B0aW9ucyA9IG5ldyBBcnJheTxCZWhlZXJMYW5ndWFnZXNLZXlWaWV3TW9kZWw+KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdWJjYXQuZmlsdGVycy5wdXNoKGZpbHRlcm1vZGVsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJtb2RlbD8ub3B0aW9ucyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJtb2RlbC5vcHRpb25zLnB1c2gob3B0aW9uc1tvXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFtb3VudExlbmd0aCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFJlc2l6ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRhYmxlZGl2Py5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5Jc0hUTUwoKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmFtb3VudFBlclBhZ2UgIT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5hbW91bnRQZXJQYWdlID0gMTtcclxuXHJcbiAgICAgICAgICB0aGlzLmVkaXRvckNvbmZpZy5oZWlnaHQgPSBNYXRoLmZsb29yKHRoaXMudGFibGVkaXY/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodCAtIDQwMCkgKyBcInB4XCI7XHJcblxyXG4gICAgICAgICAgdGhpcy5SZWZyZXNoUGFnaW5hdG9yKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBpdGVtY291bnQgPSBNYXRoLmZsb29yKChwYXJzZUludCh0aGlzLnRhYmxlZGl2Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KSAtIDI1MCkgLyA1Nyk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtY291bnQgPiAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbW91bnRQZXJQYWdlICE9IGl0ZW1jb3VudCkge1xyXG4gICAgICAgICAgICB0aGlzLmFtb3VudFBlclBhZ2UgPSBpdGVtY291bnQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLlJlZnJlc2hQYWdpbmF0b3IoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRFbnRyeShlbnRyaWVzOiBCZWhlZXJMYW5ndWFnZXNFbnRyeVZpZXdNb2RlbFtdLCBsYW5ndWFnZTogQmVoZWVyTGFuZ3VhZ2VWaWV3TW9kZWwpOiBCZWhlZXJMYW5ndWFnZXNFbnRyeVZpZXdNb2RlbCB8IG51bGwge1xyXG4gICAgaWYgKGVudHJpZXMuZW50cmllcyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChlbnRyaWVzW2ldLmxhbmd1YWdlSWQgPT0gbGFuZ3VhZ2UuaWQpIHtcclxuICAgICAgICAgIHJldHVybiBlbnRyaWVzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIExvYWRUcmFuc2xhdGlvbnMoQ2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICB0aGlzLlRyYW5zbGF0ZUFwaUNsaWVudC5nZXRCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwodGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuY3VycmVudFVzZXJWYWx1ZSkuc3Vic2NyaWJlKChtb2RlbDogQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsKSA9PiB7XHJcbiAgICAgIHRoaXMuQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgICBpZiAodGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwuY2F0ZWdvcmllcyAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsID0gdGhpcy5CZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwuY2F0ZWdvcmllc1swXTtcclxuICAgICAgICB0aGlzLlJlZnJlc2hQYWdpbmF0b3IoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgIGFsZXJ0KGVycm9yLmpzb24oKSk7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICBhbGVydChlcnJvcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBDaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBTYXZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5Mb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHRoaXMuQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxvZ2luUmVzcG9uc2VNb2RlbCA9IG5ldyBMb2dpblJlc3BvbnNlTW9kZWwodGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuY3VycmVudFVzZXJWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5UcmFuc2xhdGVBcGlDbGllbnQuc2F2ZUJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbCh0aGlzLkJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuT3BlbkNoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgdGhpcy5DaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFVwZGF0ZUNoYW5nZWQoZW50cnk6IEJlaGVlckxhbmd1YWdlc0VudHJ5Vmlld01vZGVsKTogdm9pZCB7XHJcbiAgICBlbnRyeS5jaGFuZ2VkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLlNob3dTbmFja0JhcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNob3dTbmFja0JhcigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5PcGVuQ2hhbmdlcykge1xyXG4gICAgICB0aGlzLk9wZW5DaGFuZ2VzID0gdHJ1ZTtcclxuXHJcbiAgICAgIHZhciBzbmFjayA9IHRoaXMuc25hY2tCYXIub3BlbihcIlVuc2F2ZWQgY2hhbmdlcy4uLlwiLCBcIlNhdmVcIik7XHJcblxyXG4gICAgICBzbmFjay5vbkFjdGlvbigpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5TYXZlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIEV4cG9ydCgpOiB2b2lkIHtcclxuICAgIHZhciByZXF1ZXN0ID0gbmV3IENyZWF0ZUV4cG9ydFJlcXVlc3QoKTtcclxuXHJcblxyXG4gICAgdGhpcy5UcmFuc2xhdGVBcGlDbGllbnQuY3JlYXRlRXhwb3J0KHJlcXVlc3QpLnN1YnNjcmliZSgobW9kZWw6IENyZWF0ZUV4cG9ydFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGFsZXJ0KG1vZGVsLnVybCk7XHJcblxyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICBhbGVydChlcnJvci5qc29uKCkpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBJbXBvcnQoKTogdm9pZCB7XHJcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZWFkRXhwb3J0UmVxdWVzdCgpO1xyXG5cclxuXHJcbiAgICB0aGlzLlRyYW5zbGF0ZUFwaUNsaWVudC5yZWFkRXhwb3J0KHJlcXVlc3QpLnN1YnNjcmliZSgoKSA9PiB7XHJcblxyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09IDQwMClcclxuICAgICAgICBhbGVydChlcnJvci5qc29uKCkpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBhbGVydCgnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkJyk7XHJcbiAgICAgICAgYWxlcnQoZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBJc0hUTUwoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgdmFyIHN1YmNhdHMgPSB0aGlzLlNlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwuc3ViQ2F0ZWdvcmllcztcclxuXHJcbiAgICAgIGlmIChzdWJjYXRzICE9IG51bGwpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YmNhdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChzdWJjYXRzW2ldLmh0bWwpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRMYW5ndWFnZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICB2YXIgY291bnQgPSAwO1xyXG4gICAgaWYgKHRoaXMuQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsICE9IG51bGwpIHtcclxuICAgICAgdmFyIGxhbmd1YWdlcyA9IHRoaXMuQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlcztcclxuXHJcbiAgICAgIGlmIChsYW5ndWFnZXMgIT0gbnVsbCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFuZ3VhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAobGFuZ3VhZ2VzW2ldLnNlbGVjdGVkKVxyXG4gICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb3VudDtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1iZWhlZXItbmF2PjwvYXBwLWJlaGVlci1uYXY+XHJcblxyXG48YXBwLWZhYi1sb2FkZXIgKm5nSWY9XCJMb2FkaW5nXCI+PC9hcHAtZmFiLWxvYWRlcj5cclxuXHJcbjxkaXYgKm5nSWY9XCIhTG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJkaXNwbGF5ZmxleFwiICN0YWJsZWRpdiAod2luZG93OnJlc2l6ZSk9XCJvblJlc2l6ZSgkZXZlbnQpXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtYWluLWJhclwiPlxyXG4gICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJmaWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+R3JvdXA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJTZWxlY3RlZEJlaGVlckxhbmd1YWdlc0NhdGVnb3J5Vmlld01vZGVsXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJ0aGlzLnBhZ2VJbmRleCA9IDA7IFJlc2l6ZSgpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNhdCBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwuY2F0ZWdvcmllc1wiIFt2YWx1ZV09XCJjYXRcIj5cclxuICAgICAgICAgICAgICAgIHt7IFRyYW5zbGF0aW9uQ2F0ZWdvcnlbY2F0LnRyYW5zbGF0aW9uQ2F0ZWdvcnldIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPCEtLTxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIkV4cG9ydCgpXCI+XHJcbiAgICAgICAgICAgIEV4cG9ydFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJJbXBvcnQoKVwiPlxyXG4gICAgICAgICAgICBJbXBvcnRcclxuICAgICAgICAgIDwvYnV0dG9uPi0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlc1wiPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IFsobmdNb2RlbCldPVwibGFuZ3VhZ2Uuc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICA8ZmFiLWZsYWcgW2NvdW50cnldPVwibGFuZ3VhZ2UuZmxhZ1wiPjwvZmFiLWZsYWc+IHt7IGxhbmd1YWdlLm5hbWUgfX1cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8YnIgLz48YnIgLz5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIlNhdmUoKVwiIGNsYXNzPVwic2F2ZS1idXR0b25cIiBbZGlzYWJsZWRdPVwiIU9wZW5DaGFuZ2VzXCI+XHJcbiAgICAgICAgICAgIFNhdmVcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgPC9tYXQtY2FyZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1jYXJkIGNsYXNzPVwibWFpbi1iYXIgZmxleGF1dG9cIj5cclxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1heC1oZWlnaHRcIj5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiU2VsZWN0ZWRCZWhlZXJMYW5ndWFnZXNDYXRlZ29yeVZpZXdNb2RlbCAhPSBudWxsXCI+XHJcbiAgICAgICAgICAgIDxoMT57eyBUcmFuc2xhdGlvbkNhdGVnb3J5W1NlbGVjdGVkQmVoZWVyTGFuZ3VhZ2VzQ2F0ZWdvcnlWaWV3TW9kZWwudHJhbnNsYXRpb25DYXRlZ29yeV0gfX08L2gxPlxyXG5cclxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFJc0hUTUwoKVwiIGNvbHNwYW49XCIyXCIgY2xhc3M9XCJjYXQtcm93XCI+PC90ZD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxhbmd1YWdlIG9mIEJlaGVlckxhbmd1YWdlc1ZpZXdNb2RlbC5sYW5ndWFnZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2F0LXJvd1wiICpuZ0lmPVwibGFuZ3VhZ2Uuc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZmFiLWZsYWcgW2NvdW50cnldPVwibGFuZ3VhZ2UuZmxhZ1wiPjwvZmFiLWZsYWc+IHt7IGxhbmd1YWdlLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJJc0hUTUwoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViY2F0IG9mIEFjdGl2ZVN1YnNcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIHN1YmNhdC5rZXlzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiR2V0TGFuZ3VhZ2VDb3VudCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnlbc3ViY2F0LnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnldIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJrZXkudGV4dCAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh7eyBrZXkudGV4dCB9fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsYW5ndWFnZS5zZWxlY3RlZFwiIFtzdHlsZS53aWR0aF09XCInNTAlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5ndWxhci1lZGl0b3IgW2NvbmZpZ109XCJlZGl0b3JDb25maWdcIiBbKG5nTW9kZWwpXT1cIkdldEVudHJ5KGtleS5lbnRyaWVzLCBsYW5ndWFnZSkudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJVcGRhdGVDaGFuZ2VkKEdldEVudHJ5KGtleS5lbnRyaWVzLCBsYW5ndWFnZSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FuZ3VsYXItZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIUlzSFRNTCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJjYXQgb2YgQWN0aXZlU3Vic1wiPlxyXG4gICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGtleSBvZiBzdWJjYXQua2V5c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IFRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnlbc3ViY2F0LnRyYW5zbGF0aW9uU3ViQ2F0ZWdvcnldIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwia2V5LnRleHQgIT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKHt7IGtleS50ZXh0IH19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsYW5ndWFnZS5zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImZ1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiR2V0RW50cnkoa2V5LmVudHJpZXMsIGxhbmd1YWdlKS52YWx1ZVwiIChrZXl1cCk9XCJVcGRhdGVDaGFuZ2VkKEdldEVudHJ5KGtleS5lbnRyaWVzLCBsYW5ndWFnZSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2Ygc3ViY2F0LmZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlci5maWx0ZXIudGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgQmVoZWVyTGFuZ3VhZ2VzVmlld01vZGVsLmxhbmd1YWdlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJsYW5ndWFnZS5zZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cIkdldEVudHJ5KGZpbHRlci5maWx0ZXIuZW50cmllcywgbGFuZ3VhZ2UpLnZhbHVlXCIgKGtleXVwKT1cIlVwZGF0ZUNoYW5nZWQoR2V0RW50cnkoZmlsdGVyLmZpbHRlci5lbnRyaWVzLCBsYW5ndWFnZSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlci5vcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+e3sgb3B0aW9uLnRleHQgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBCZWhlZXJMYW5ndWFnZXNWaWV3TW9kZWwubGFuZ3VhZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwibGFuZ3VhZ2Uuc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiR2V0RW50cnkob3B0aW9uLmVudHJpZXMsIGxhbmd1YWdlKS52YWx1ZVwiIChrZXl1cCk9XCJVcGRhdGVDaGFuZ2VkKEdldEVudHJ5KG9wdGlvbi5lbnRyaWVzLCBsYW5ndWFnZSkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bWF0LXBhZ2luYXRvciAjcGFnaW5hdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZSk9XCJoYW5kbGVQYWdlRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbGVuZ3RoXT1cImFtb3VudExlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiYW1vdW50UGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVBhZ2VTaXplXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbGVjdCBwYWdlXCI+XHJcbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgIDwvbWF0LWNhcmQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,143 @@
1
+ import { Component } from '@angular/core';
2
+ import { CreateUserModel, DeleteUserModel, EditUserModel, LoginResponseModel, UserViewModel } from '../../../swagger/SwaggerClient';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../swagger/SwaggerClient";
5
+ import * as i2 from "../../../services/authentication.service";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/material/legacy-form-field";
8
+ import * as i5 from "@angular/material/legacy-input";
9
+ import * as i6 from "@angular/forms";
10
+ import * as i7 from "@angular/material/legacy-button";
11
+ import * as i8 from "@angular/material/legacy-card";
12
+ import * as i9 from "@angular/material/legacy-select";
13
+ import * as i10 from "@angular/material/legacy-core";
14
+ import * as i11 from "../beheer-nav/beheer-nav.component";
15
+ import * as i12 from "../../../components/fab-loader/fab-loader.component";
16
+ class BeheerUsersComponent {
17
+ securityApiClient;
18
+ authenticationService;
19
+ Loading = false;
20
+ Overview = true;
21
+ NewUser = false;
22
+ EditUser = false;
23
+ Password = "";
24
+ UsersViewModel;
25
+ UserViewModel;
26
+ constructor(securityApiClient, authenticationService) {
27
+ this.securityApiClient = securityApiClient;
28
+ this.authenticationService = authenticationService;
29
+ }
30
+ ngOnInit() {
31
+ this.LoadUsers();
32
+ }
33
+ Add() {
34
+ this.EditUser = false;
35
+ this.NewUser = true;
36
+ this.Overview = false;
37
+ this.UserViewModel = new UserViewModel();
38
+ }
39
+ Edit(user) {
40
+ this.EditUser = true;
41
+ this.Overview = false;
42
+ this.NewUser = false;
43
+ this.UserViewModel = user;
44
+ }
45
+ Save() {
46
+ this.Loading = true;
47
+ if (this.NewUser) {
48
+ var model = new CreateUserModel();
49
+ model.loginResponseModel = new LoginResponseModel(this.authenticationService.currentUserValue);
50
+ model.userName = this.UserViewModel.userName;
51
+ model.password = this.Password;
52
+ model.userRole = this.UserViewModel.userRole;
53
+ this.securityApiClient.createUser(model).subscribe((model) => {
54
+ if (!model.success) {
55
+ alert(model.message);
56
+ }
57
+ this.LoadUsers();
58
+ }, (error) => {
59
+ if (error.status == 400)
60
+ console.log(error.json());
61
+ else {
62
+ console.log('An unexpected error occured');
63
+ console.log(error);
64
+ }
65
+ this.Loading = false;
66
+ });
67
+ }
68
+ else if (this.EditUser) {
69
+ var model2 = new EditUserModel();
70
+ model2.loginResponseModel = new LoginResponseModel(this.authenticationService.currentUserValue);
71
+ model2.userName = this.UserViewModel.userName;
72
+ model2.password = this.Password;
73
+ model2.userRole = this.UserViewModel.userRole;
74
+ model2.userId = this.UserViewModel.userId;
75
+ this.securityApiClient.editUser(model2).subscribe((model) => {
76
+ if (!model.success) {
77
+ alert(model.message);
78
+ }
79
+ this.LoadUsers();
80
+ }, (error) => {
81
+ if (error.status == 400)
82
+ console.log(error.json());
83
+ else {
84
+ console.log('An unexpected error occured');
85
+ console.log(error);
86
+ }
87
+ this.Loading = false;
88
+ });
89
+ }
90
+ }
91
+ Cancel() {
92
+ this.Overview = true;
93
+ this.NewUser = false;
94
+ this.EditUser = false;
95
+ this.Password = "";
96
+ this.UserViewModel = new UserViewModel();
97
+ }
98
+ Delete(user) {
99
+ if (confirm("Weet je het zeker?")) {
100
+ this.Loading = true;
101
+ var model = new DeleteUserModel();
102
+ model.loginResponseModel = new LoginResponseModel(this.authenticationService.currentUserValue);
103
+ model.userId = user.userId;
104
+ this.securityApiClient.deleteUser(model).subscribe((model) => {
105
+ if (!model.success) {
106
+ alert(model.message);
107
+ }
108
+ this.LoadUsers();
109
+ }, (error) => {
110
+ if (error.status == 400)
111
+ console.log(error.json());
112
+ else {
113
+ console.log('An unexpected error occured');
114
+ console.log(error);
115
+ }
116
+ this.Loading = false;
117
+ });
118
+ }
119
+ }
120
+ LoadUsers() {
121
+ this.Loading = true;
122
+ this.NewUser = false;
123
+ this.EditUser = false;
124
+ this.Overview = true;
125
+ this.UserViewModel = new UserViewModel();
126
+ this.Password = "";
127
+ this.securityApiClient.getUsersViewModel(this.authenticationService.currentUserValue).subscribe((model) => {
128
+ this.UsersViewModel = model;
129
+ this.Loading = false;
130
+ }, (error) => {
131
+ alert('An unexpected error occured');
132
+ this.Loading = false;
133
+ });
134
+ }
135
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: BeheerUsersComponent, deps: [{ token: i1.SecurityApiClient }, { token: i2.AuthenticationService }], target: i0.ɵɵFactoryTarget.Component });
136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: BeheerUsersComponent, selector: "app-beheer-users", ngImport: i0, template: "<app-beheer-nav></app-beheer-nav>\r\n\r\n<div class=\"displayflex\">\r\n <mat-card class=\"card\">\r\n <mat-card-content>\r\n <div *ngIf=\"Loading\">\r\n <app-fab-loader></app-fab-loader>\r\n </div>\r\n <ng-container *ngIf=\"!Loading\">\r\n <div *ngIf=\"Overview\">\r\n <table>\r\n <tr>\r\n <td class=\"headercell-username\"><b>Username</b></td>\r\n <td class=\"headercell-role\"><b>Role</b></td>\r\n <td class=\"headercell-actions\"></td>\r\n <td class=\"headercell-actions\"></td>\r\n </tr>\r\n <ng-container *ngFor=\"let user of this.UsersViewModel.users\">\r\n <tr>\r\n <td class=\"cell\">{{ user.userName }}</td>\r\n <td class=\"cell\">{{ user.userRoleStr }}</td>\r\n <td>\r\n <button mat-raised-button (click)=\"Edit(user)\">\r\n Edit\r\n </button>\r\n\r\n </td>\r\n <td>\r\n <button mat-raised-button (click)=\"Delete(user)\" [disabled]=\"user.userId == this.UsersViewModel.currentUserId\">\r\n Delete\r\n </button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n <br />\r\n <br />\r\n <br />\r\n <br />\r\n <button mat-raised-button (click)=\"Add()\">\r\n Add\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"NewUser || EditUser\">\r\n <div>\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Username\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"this.UserViewModel.userName\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div>\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Password\r\n </mat-label>\r\n <input matInput type=\"password\" [(ngModel)]=\"Password\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div>\r\n <mat-form-field style=\"width: 100%;\">\r\n <mat-select placeholder=\"Role\" [(ngModel)]=\"UserViewModel.userRole\">\r\n <mat-option [value]=\"0\">\r\n Content\r\n </mat-option>\r\n <mat-option [value]=\"1\">\r\n Administrator\r\n </mat-option>\r\n <!--<mat-option [value]=\"2\">\r\n DeTweeSnoeken\r\n </mat-option>-->\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n <br />\r\n <br />\r\n <br />\r\n\r\n <div class=\"displayflex\">\r\n <button mat-raised-button (click)=\"Cancel()\">\r\n Cancel\r\n </button>\r\n <div style=\"flex: auto;\">\r\n\r\n </div>\r\n <button mat-raised-button (click)=\"Save()\">\r\n Save\r\n </button>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n \r\n </mat-card-content>\r\n </mat-card>\r\n</div>\r\n", styles: [".card{margin:auto}.displayflex{display:flex}.cell{border-bottom:1px solid #000}.headercell-username{min-width:300px}.headercell-role{min-width:200px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i8.MatLegacyCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i9.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i11.BeheerNavComponent, selector: "app-beheer-nav" }, { kind: "component", type: i12.FabLoaderComponent, selector: "app-fab-loader" }] });
137
+ }
138
+ export { BeheerUsersComponent };
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: BeheerUsersComponent, decorators: [{
140
+ type: Component,
141
+ args: [{ selector: 'app-beheer-users', template: "<app-beheer-nav></app-beheer-nav>\r\n\r\n<div class=\"displayflex\">\r\n <mat-card class=\"card\">\r\n <mat-card-content>\r\n <div *ngIf=\"Loading\">\r\n <app-fab-loader></app-fab-loader>\r\n </div>\r\n <ng-container *ngIf=\"!Loading\">\r\n <div *ngIf=\"Overview\">\r\n <table>\r\n <tr>\r\n <td class=\"headercell-username\"><b>Username</b></td>\r\n <td class=\"headercell-role\"><b>Role</b></td>\r\n <td class=\"headercell-actions\"></td>\r\n <td class=\"headercell-actions\"></td>\r\n </tr>\r\n <ng-container *ngFor=\"let user of this.UsersViewModel.users\">\r\n <tr>\r\n <td class=\"cell\">{{ user.userName }}</td>\r\n <td class=\"cell\">{{ user.userRoleStr }}</td>\r\n <td>\r\n <button mat-raised-button (click)=\"Edit(user)\">\r\n Edit\r\n </button>\r\n\r\n </td>\r\n <td>\r\n <button mat-raised-button (click)=\"Delete(user)\" [disabled]=\"user.userId == this.UsersViewModel.currentUserId\">\r\n Delete\r\n </button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n <br />\r\n <br />\r\n <br />\r\n <br />\r\n <button mat-raised-button (click)=\"Add()\">\r\n Add\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"NewUser || EditUser\">\r\n <div>\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Username\r\n </mat-label>\r\n <input matInput type=\"text\" [(ngModel)]=\"this.UserViewModel.userName\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div>\r\n <mat-form-field appearance=\"fill\" class=\"fullwidth\">\r\n <mat-label>\r\n Password\r\n </mat-label>\r\n <input matInput type=\"password\" [(ngModel)]=\"Password\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div>\r\n <mat-form-field style=\"width: 100%;\">\r\n <mat-select placeholder=\"Role\" [(ngModel)]=\"UserViewModel.userRole\">\r\n <mat-option [value]=\"0\">\r\n Content\r\n </mat-option>\r\n <mat-option [value]=\"1\">\r\n Administrator\r\n </mat-option>\r\n <!--<mat-option [value]=\"2\">\r\n DeTweeSnoeken\r\n </mat-option>-->\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n\r\n <br />\r\n <br />\r\n <br />\r\n\r\n <div class=\"displayflex\">\r\n <button mat-raised-button (click)=\"Cancel()\">\r\n Cancel\r\n </button>\r\n <div style=\"flex: auto;\">\r\n\r\n </div>\r\n <button mat-raised-button (click)=\"Save()\">\r\n Save\r\n </button>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n \r\n </mat-card-content>\r\n </mat-card>\r\n</div>\r\n", styles: [".card{margin:auto}.displayflex{display:flex}.cell{border-bottom:1px solid #000}.headercell-username{min-width:300px}.headercell-role{min-width:200px}\n"] }]
142
+ }], ctorParameters: function () { return [{ type: i1.SecurityApiClient }, { type: i2.AuthenticationService }]; } });
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoZWVyLXVzZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9mYWJyaWthbnRlbmNvcmUvYmVoZWVyL2NvbXBvbmVudHMvYmVoZWVyLXVzZXJzL2JlaGVlci11c2Vycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvZmFicmlrYW50ZW5jb3JlL2JlaGVlci9jb21wb25lbnRzL2JlaGVlci11c2Vycy9iZWhlZXItdXNlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQXdELGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQUUxTCxNQUthLG9CQUFvQjtJQWFYO0lBQ1Y7SUFaSCxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLFFBQVEsR0FBWSxJQUFJLENBQUM7SUFDekIsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUN6QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBRTFCLFFBQVEsR0FBVyxFQUFFLENBQUM7SUFFdEIsY0FBYyxDQUFpQjtJQUUvQixhQUFhLENBQWdCO0lBRXBDLFlBQW9CLGlCQUFvQyxFQUM5QyxxQkFBNEM7UUFEbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUM5QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO0lBQUksQ0FBQztJQUUzRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxHQUFHO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJ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QkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3JlYXRlVXNlck1vZGVsLCBEZWxldGVVc2VyTW9kZWwsIEVkaXRVc2VyTW9kZWwsIExvZ2luUmVzcG9uc2VNb2RlbCwgU2VjdXJpdHlBcGlDbGllbnQsIFVzZXJSZXNwb25zZU1vZGVsLCBVc2Vyc1ZpZXdNb2RlbCwgVXNlclZpZXdNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3N3YWdnZXIvU3dhZ2dlckNsaWVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1iZWhlZXItdXNlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9iZWhlZXItdXNlcnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2JlaGVlci11c2Vycy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCZWhlZXJVc2Vyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIE92ZXJ2aWV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgTmV3VXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBFZGl0VXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgUGFzc3dvcmQ6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHB1YmxpYyBVc2Vyc1ZpZXdNb2RlbDogVXNlcnNWaWV3TW9kZWw7XHJcblxyXG4gIHB1YmxpYyBVc2VyVmlld01vZGVsOiBVc2VyVmlld01vZGVsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlY3VyaXR5QXBpQ2xpZW50OiBTZWN1cml0eUFwaUNsaWVudCxcclxuICAgIHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZFVzZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQWRkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5FZGl0VXNlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5OZXdVc2VyID0gdHJ1ZTtcclxuICAgIHRoaXMuT3ZlcnZpZXcgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLlVzZXJWaWV3TW9kZWwgPSBuZXcgVXNlclZpZXdNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEVkaXQodXNlcjogVXNlclZpZXdNb2RlbCkge1xyXG4gICAgdGhpcy5FZGl0VXNlciA9IHRydWU7XHJcbiAgICB0aGlzLk92ZXJ2aWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLk5ld1VzZXIgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLlVzZXJWaWV3TW9kZWwgPSB1c2VyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNhdmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLk5ld1VzZXIpIHtcclxuICAgICAgdmFyIG1vZGVsID0gbmV3IENyZWF0ZVVzZXJNb2RlbCgpO1xyXG5cclxuICAgICAgbW9kZWwubG9naW5SZXNwb25zZU1vZGVsID0gbmV3IExvZ2luUmVzcG9uc2VNb2RlbCh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5jdXJyZW50VXNlclZhbHVlKTtcclxuXHJcbiAgICAgIG1vZGVsLnVzZXJOYW1lID0gdGhpcy5Vc2VyVmlld01vZGVsLnVzZXJOYW1lO1xyXG4gICAgICBtb2RlbC5wYXNzd29yZCA9IHRoaXMuUGFzc3dvcmQ7XHJcbiAgICAgIG1vZGVsLnVzZXJSb2xlID0gdGhpcy5Vc2VyVmlld01vZGVsLnVzZXJSb2xlO1xyXG5cclxuICAgICAgdGhpcy5zZWN1cml0eUFwaUNsaWVudC5jcmVhdGVVc2VyKG1vZGVsKS5zdWJzY3JpYmUoKG1vZGVsOiBVc2VyUmVzcG9uc2VNb2RlbCkgPT4ge1xyXG5cclxuICAgICAgICBpZiAoIW1vZGVsLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGFsZXJ0KG1vZGVsLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkVXNlcnMoKTtcclxuICAgICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IuanNvbigpKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuRWRpdFVzZXIpIHtcclxuICAgICAgdmFyIG1vZGVsMiA9IG5ldyBFZGl0VXNlck1vZGVsKCk7XHJcblxyXG4gICAgICBtb2RlbDIubG9naW5SZXNwb25zZU1vZGVsID0gbmV3IExvZ2luUmVzcG9uc2VNb2RlbCh0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5jdXJyZW50VXNlclZhbHVlKTtcclxuXHJcbiAgICAgIG1vZGVsMi51c2VyTmFtZSA9IHRoaXMuVXNlclZpZXdNb2RlbC51c2VyTmFtZTtcclxuICAgICAgbW9kZWwyLnBhc3N3b3JkID0gdGhpcy5QYXNzd29yZDtcclxuICAgICAgbW9kZWwyLnVzZXJSb2xlID0gdGhpcy5Vc2VyVmlld01vZGVsLnVzZXJSb2xlO1xyXG4gICAgICBtb2RlbDIudXNlcklkID0gdGhpcy5Vc2VyVmlld01vZGVsLnVzZXJJZDtcclxuXHJcbiAgICAgIHRoaXMuc2VjdXJpdHlBcGlDbGllbnQuZWRpdFVzZXIobW9kZWwyKS5zdWJzY3JpYmUoKG1vZGVsOiBVc2VyUmVzcG9uc2VNb2RlbCkgPT4ge1xyXG4gICAgICAgIGlmICghbW9kZWwuc3VjY2Vzcykge1xyXG4gICAgICAgICAgYWxlcnQobW9kZWwubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRVc2VycygpO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIENhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuT3ZlcnZpZXcgPSB0cnVlO1xyXG4gICAgdGhpcy5OZXdVc2VyID0gZmFsc2U7XHJcbiAgICB0aGlzLkVkaXRVc2VyID0gZmFsc2U7XHJcbiAgICB0aGlzLlBhc3N3b3JkID0gXCJcIjtcclxuICAgIHRoaXMuVXNlclZpZXdNb2RlbCA9IG5ldyBVc2VyVmlld01vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRGVsZXRlKHVzZXI6IFVzZXJWaWV3TW9kZWwpIHtcclxuICAgIGlmIChjb25maXJtKFwiV2VldCBqZSBoZXQgemVrZXI/XCIpKSB7XHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB2YXIgbW9kZWwgPSBuZXcgRGVsZXRlVXNlck1vZGVsKCk7XHJcblxyXG4gICAgICBtb2RlbC5sb2dpblJlc3BvbnNlTW9kZWwgPSBuZXcgTG9naW5SZXNwb25zZU1vZGVsKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmN1cnJlbnRVc2VyVmFsdWUpO1xyXG5cclxuICAgICAgbW9kZWwudXNlcklkID0gdXNlci51c2VySWQ7XHJcblxyXG4gICAgICB0aGlzLnNlY3VyaXR5QXBpQ2xpZW50LmRlbGV0ZVVzZXIobW9kZWwpLnN1YnNjcmliZSgobW9kZWw6IFVzZXJSZXNwb25zZU1vZGVsKSA9PiB7XHJcblxyXG4gICAgICAgIGlmICghbW9kZWwuc3VjY2Vzcykge1xyXG4gICAgICAgICAgYWxlcnQobW9kZWwubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkxvYWRVc2VycygpO1xyXG4gICAgICB9LCAoZXJyb3I6IFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA0MDApXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvci5qc29uKCkpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIExvYWRVc2VycygpOiB2b2lkIHtcclxuICAgIHRoaXMuTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5OZXdVc2VyID0gZmFsc2U7XHJcbiAgICB0aGlzLkVkaXRVc2VyID0gZmFsc2U7XHJcbiAgICB0aGlzLk92ZXJ2aWV3ID0gdHJ1ZTtcclxuICAgIHRoaXMuVXNlclZpZXdNb2RlbCA9IG5ldyBVc2VyVmlld01vZGVsKCk7XHJcbiAgICB0aGlzLlBhc3N3b3JkID0gXCJcIjtcclxuXHJcbiAgICB0aGlzLnNlY3VyaXR5QXBpQ2xpZW50LmdldFVzZXJzVmlld01vZGVsKHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmN1cnJlbnRVc2VyVmFsdWUpLnN1YnNjcmliZSgobW9kZWw6IFVzZXJzVmlld01vZGVsKSA9PiB7XHJcbiAgICAgIHRoaXMuVXNlcnNWaWV3TW9kZWwgPSBtb2RlbDtcclxuXHJcbiAgICAgIHRoaXMuTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSwgKGVycm9yOiBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgYWxlcnQoJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJlZCcpO1xyXG5cclxuICAgICAgdGhpcy5Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1iZWhlZXItbmF2PjwvYXBwLWJlaGVlci1uYXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiZGlzcGxheWZsZXhcIj5cclxuICA8bWF0LWNhcmQgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgPGRpdiAqbmdJZj1cIkxvYWRpbmdcIj5cclxuICAgICAgICA8YXBwLWZhYi1sb2FkZXI+PC9hcHAtZmFiLWxvYWRlcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhTG9hZGluZ1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJPdmVydmlld1wiPlxyXG4gICAgICAgICAgPHRhYmxlPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGVhZGVyY2VsbC11c2VybmFtZVwiPjxiPlVzZXJuYW1lPC9iPjwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGVhZGVyY2VsbC1yb2xlXCI+PGI+Um9sZTwvYj48L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImhlYWRlcmNlbGwtYWN0aW9uc1wiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGVhZGVyY2VsbC1hY3Rpb25zXCI+PC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdXNlciBvZiB0aGlzLlVzZXJzVmlld01vZGVsLnVzZXJzXCI+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2VsbFwiPnt7IHVzZXIudXNlck5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2VsbFwiPnt7IHVzZXIudXNlclJvbGVTdHIgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJFZGl0KHVzZXIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRWRpdFxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJEZWxldGUodXNlcilcIiBbZGlzYWJsZWRdPVwidXNlci51c2VySWQgPT0gdGhpcy5Vc2Vyc1ZpZXdNb2RlbC5jdXJyZW50VXNlcklkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRGVsZXRlXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIkFkZCgpXCI+XHJcbiAgICAgICAgICAgIEFkZFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJOZXdVc2VyIHx8IEVkaXRVc2VyXCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImZ1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICBVc2VybmFtZVxyXG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwidGhpcy5Vc2VyVmlld01vZGVsLnVzZXJOYW1lXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImZ1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICBQYXNzd29yZFxyXG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBbKG5nTW9kZWwpXT1cIlBhc3N3b3JkXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlJvbGVcIiBbKG5nTW9kZWwpXT1cIlVzZXJWaWV3TW9kZWwudXNlclJvbGVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgIENvbnRlbnRcclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCIxXCI+XHJcbiAgICAgICAgICAgICAgICAgIEFkbWluaXN0cmF0b3JcclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwhLS08bWF0LW9wdGlvbiBbdmFsdWVdPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgICBEZVR3ZWVTbm9la2VuXHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+LS0+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICA8YnIgLz5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzcGxheWZsZXhcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiQ2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICBDYW5jZWxcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiBhdXRvO1wiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cIlNhdmUoKVwiPlxyXG4gICAgICAgICAgICAgIFNhdmVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgXHJcbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgPC9tYXQtY2FyZD5cclxuPC9kaXY+XHJcbiJdfQ==