@messaia/cdk 12.3.5-rc21 → 13.0.0-rc02

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 (1093) hide show
  1. package/esm2020/lib/base/base.module.mjs +64 -0
  2. package/esm2020/lib/base/components/base.component.mjs +436 -0
  3. package/esm2020/lib/base/components/generic-form.component.mjs +482 -0
  4. package/esm2020/lib/base/components/generic-list.component.mjs +461 -0
  5. package/{esm2015/lib/base/constants/common.js → esm2020/lib/base/constants/common.mjs} +0 -0
  6. package/{esm2015/lib/base/enums/message-type.js → esm2020/lib/base/enums/message-type.mjs} +0 -0
  7. package/{esm2015/lib/base/helpers/auth-helper.js → esm2020/lib/base/helpers/auth-helper.mjs} +0 -0
  8. package/esm2020/lib/base/interceptors/base.interceptor.mjs +138 -0
  9. package/esm2020/lib/base/interceptors/caching-interceptor.mjs +68 -0
  10. package/esm2020/lib/base/interceptors/loading.interceptor.mjs +63 -0
  11. package/{esm2015/lib/base/models/auth-user.js → esm2020/lib/base/models/auth-user.mjs} +0 -0
  12. package/{esm2015/lib/base/public_api.js → esm2020/lib/base/public_api.mjs} +0 -0
  13. package/esm2020/lib/base/services/file.service.mjs +18 -0
  14. package/esm2020/lib/base/services/loading-screen.service.mjs +47 -0
  15. package/esm2020/lib/base/services/print.service.mjs +40 -0
  16. package/esm2020/lib/chips/chips.module.mjs +63 -0
  17. package/esm2020/lib/chips/components/chips.component.mjs +419 -0
  18. package/esm2020/lib/chips/public_api.mjs +3 -0
  19. package/{esm2015/lib/common/animations/collapse/collapse.animation.js → esm2020/lib/common/animations/collapse/collapse.animation.mjs} +0 -0
  20. package/{esm2015/lib/common/animations/common/interfaces.js → esm2020/lib/common/animations/common/interfaces.mjs} +0 -0
  21. package/{esm2015/lib/common/behaviors/constructor.js → esm2020/lib/common/behaviors/constructor.mjs} +0 -0
  22. package/esm2020/lib/common/behaviors/control-value-accesor.mixin.mjs +39 -0
  23. package/{esm2015/lib/common/behaviors/disabled.mixin.js → esm2020/lib/common/behaviors/disabled.mixin.mjs} +0 -0
  24. package/esm2020/lib/common/common.module.mjs +118 -0
  25. package/{esm2015/lib/common/constants/constants.js → esm2020/lib/common/constants/constants.mjs} +0 -0
  26. package/esm2020/lib/common/directives/disable-control.directive.mjs +34 -0
  27. package/{esm2015/lib/common/enums/salutation.js → esm2020/lib/common/enums/salutation.mjs} +0 -0
  28. package/{esm2015/lib/common/functions/decorators.js → esm2020/lib/common/functions/decorators.mjs} +0 -0
  29. package/{esm2015/lib/common/functions/functions.js → esm2020/lib/common/functions/functions.mjs} +0 -0
  30. package/esm2020/lib/common/functions/utils.mjs +161 -0
  31. package/esm2020/lib/common/helpers/app-storage.mjs +53 -0
  32. package/esm2020/lib/common/helpers/dynamic-builder.mjs +49 -0
  33. package/esm2020/lib/common/models/app-setting.mjs +10 -0
  34. package/{esm2015/lib/common/models/audit-user.js → esm2020/lib/common/models/audit-user.mjs} +0 -0
  35. package/{esm2015/lib/common/models/entity.js → esm2020/lib/common/models/entity.mjs} +0 -0
  36. package/{esm2015/lib/common/models/enum-item.js → esm2020/lib/common/models/enum-item.mjs} +0 -0
  37. package/{esm2015/lib/common/models/key-value.js → esm2020/lib/common/models/key-value.mjs} +0 -0
  38. package/{esm2015/lib/common/models/save-action.js → esm2020/lib/common/models/save-action.mjs} +0 -0
  39. package/esm2020/lib/common/pipes/data-source.pipe.mjs +15 -0
  40. package/esm2020/lib/common/pipes/enum.pipe.mjs +23 -0
  41. package/esm2020/lib/common/pipes/file-size.pipe.mjs +37 -0
  42. package/esm2020/lib/common/pipes/filter.pipe.mjs +23 -0
  43. package/esm2020/lib/common/pipes/first-letter.mjs +24 -0
  44. package/esm2020/lib/common/pipes/keys.mjs +18 -0
  45. package/esm2020/lib/common/pipes/month-name.pipe.mjs +27 -0
  46. package/esm2020/lib/common/pipes/only-number.mjs +53 -0
  47. package/esm2020/lib/common/pipes/order.pipe.mjs +183 -0
  48. package/esm2020/lib/common/pipes/placeholder.pipe.mjs +26 -0
  49. package/esm2020/lib/common/pipes/safe-html.pipe.mjs +31 -0
  50. package/esm2020/lib/common/pipes/time.pipe.mjs +20 -0
  51. package/esm2020/lib/common/pipes/titlecase.pipe.mjs +14 -0
  52. package/esm2020/lib/common/pipes/truncate.pipe.mjs +15 -0
  53. package/esm2020/lib/common/pipes/values.mjs +14 -0
  54. package/esm2020/lib/common/public_api.mjs +18 -0
  55. package/esm2020/lib/common/services/base.service.mjs +19 -0
  56. package/{esm2015/lib/common/services/context-helper.js → esm2020/lib/common/services/context-helper.mjs} +0 -0
  57. package/esm2020/lib/common/services/enum.service.mjs +44 -0
  58. package/{esm2015/lib/common/services/service-locator.js → esm2020/lib/common/services/service-locator.mjs} +0 -0
  59. package/esm2020/lib/dialogs/alert-dialog/alert-dialog.component.mjs +31 -0
  60. package/esm2020/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +37 -0
  61. package/esm2020/lib/dialogs/dialog.component.mjs +56 -0
  62. package/esm2020/lib/dialogs/dialogs.module.mjs +82 -0
  63. package/esm2020/lib/dialogs/prompt-dialog/prompt-dialog.component.mjs +40 -0
  64. package/{esm2015/lib/dialogs/public_api.js → esm2020/lib/dialogs/public_api.mjs} +0 -0
  65. package/esm2020/lib/dialogs/services/dialog.service.mjs +136 -0
  66. package/esm2020/lib/file/file-input.component.mjs +327 -0
  67. package/esm2020/lib/file/file.module.mjs +39 -0
  68. package/{esm2015/lib/file/public_api.js → esm2020/lib/file/public_api.mjs} +0 -0
  69. package/esm2020/lib/form-validators/abstract/typed-form.mjs +3 -0
  70. package/esm2020/lib/form-validators/algorithm/luhn-algorithm.mjs +15 -0
  71. package/esm2020/lib/form-validators/const/app-validators.const.mjs +68 -0
  72. package/esm2020/lib/form-validators/const/app.const.mjs +17 -0
  73. package/esm2020/lib/form-validators/const/config-names.const.mjs +9 -0
  74. package/esm2020/lib/form-validators/const/config-required-fields.const.mjs +11 -0
  75. package/esm2020/lib/form-validators/const/decorators.const.mjs +23 -0
  76. package/esm2020/lib/form-validators/const/events.const.mjs +14 -0
  77. package/esm2020/lib/form-validators/const/html-elements.const.mjs +7 -0
  78. package/esm2020/lib/form-validators/const/iban-country-wise-regex.const.mjs +80 -0
  79. package/esm2020/lib/form-validators/const/index.mjs +6 -0
  80. package/esm2020/lib/form-validators/const/operators.const.mjs +7 -0
  81. package/esm2020/lib/form-validators/const/validation-alphabet-locale.const.mjs +9 -0
  82. package/esm2020/lib/form-validators/const/validator.const.mjs +8 -0
  83. package/esm2020/lib/form-validators/core/defaultContainer.mjs +243 -0
  84. package/esm2020/lib/form-validators/core/validator.interface.mjs +2 -0
  85. package/esm2020/lib/form-validators/core/validator.static.mjs +74 -0
  86. package/esm2020/lib/form-validators/decorators/allOf.decorator.mjs +10 -0
  87. package/esm2020/lib/form-validators/decorators/alpha.decorator.mjs +10 -0
  88. package/esm2020/lib/form-validators/decorators/alphaNumeric.decorator.mjs +10 -0
  89. package/esm2020/lib/form-validators/decorators/and.decorator.mjs +6 -0
  90. package/esm2020/lib/form-validators/decorators/ascii.decorator.mjs +6 -0
  91. package/esm2020/lib/form-validators/decorators/async.decorator.mjs +6 -0
  92. package/esm2020/lib/form-validators/decorators/base-decorator.function.mjs +7 -0
  93. package/esm2020/lib/form-validators/decorators/choice.decorator.mjs +10 -0
  94. package/esm2020/lib/form-validators/decorators/compare.decorator.mjs +6 -0
  95. package/esm2020/lib/form-validators/decorators/compose.decorator.mjs +6 -0
  96. package/esm2020/lib/form-validators/decorators/contains.decorator.mjs +10 -0
  97. package/esm2020/lib/form-validators/decorators/credit-card.decorator.mjs +10 -0
  98. package/esm2020/lib/form-validators/decorators/cusip.decorator.mjs +6 -0
  99. package/esm2020/lib/form-validators/decorators/custom.decorator.mjs +10 -0
  100. package/esm2020/lib/form-validators/decorators/dataUri.decorator.mjs +6 -0
  101. package/esm2020/lib/form-validators/decorators/date.decorator.mjs +10 -0
  102. package/esm2020/lib/form-validators/decorators/different.decorator.mjs +6 -0
  103. package/esm2020/lib/form-validators/decorators/digit.decorator.mjs +6 -0
  104. package/esm2020/lib/form-validators/decorators/email.decorator.mjs +6 -0
  105. package/esm2020/lib/form-validators/decorators/endsWith.decorator.mjs +10 -0
  106. package/esm2020/lib/form-validators/decorators/even.decorator.mjs +6 -0
  107. package/esm2020/lib/form-validators/decorators/extension.decorator.mjs +10 -0
  108. package/esm2020/lib/form-validators/decorators/factor.decorator.mjs +10 -0
  109. package/esm2020/lib/form-validators/decorators/file.decorator.mjs +10 -0
  110. package/esm2020/lib/form-validators/decorators/fileSize.decorator.mjs +10 -0
  111. package/esm2020/lib/form-validators/decorators/greater-than-equal-to.decorator.mjs +10 -0
  112. package/esm2020/lib/form-validators/decorators/greater-than.decorator.mjs +10 -0
  113. package/esm2020/lib/form-validators/decorators/grid.decorator.mjs +6 -0
  114. package/esm2020/lib/form-validators/decorators/hexColor.decorator.mjs +6 -0
  115. package/esm2020/lib/form-validators/decorators/image.decorator.mjs +10 -0
  116. package/esm2020/lib/form-validators/decorators/index.mjs +91 -0
  117. package/esm2020/lib/form-validators/decorators/json.decorator.mjs +6 -0
  118. package/esm2020/lib/form-validators/decorators/latLong.decorator.mjs +6 -0
  119. package/esm2020/lib/form-validators/decorators/latitude.decorator.mjs +6 -0
  120. package/esm2020/lib/form-validators/decorators/leapYear.decorator.mjs +6 -0
  121. package/esm2020/lib/form-validators/decorators/less-than-equal-to.decorator.mjs +10 -0
  122. package/esm2020/lib/form-validators/decorators/less-than.decorator.mjs +10 -0
  123. package/esm2020/lib/form-validators/decorators/longitude.decorator.mjs +6 -0
  124. package/esm2020/lib/form-validators/decorators/lowercase.decorator.mjs +6 -0
  125. package/esm2020/lib/form-validators/decorators/mac.decorator.mjs +6 -0
  126. package/esm2020/lib/form-validators/decorators/mask.decorator.mjs +6 -0
  127. package/esm2020/lib/form-validators/decorators/maxDate.decorator.mjs +10 -0
  128. package/esm2020/lib/form-validators/decorators/maxLength.decorator.mjs +10 -0
  129. package/esm2020/lib/form-validators/decorators/maxNumber.decorator.mjs +10 -0
  130. package/esm2020/lib/form-validators/decorators/maxTime.decorator.mjs +10 -0
  131. package/esm2020/lib/form-validators/decorators/minDate.decorator.mjs +10 -0
  132. package/esm2020/lib/form-validators/decorators/minLength.decorator.mjs +10 -0
  133. package/esm2020/lib/form-validators/decorators/minNumber.decorator.mjs +10 -0
  134. package/esm2020/lib/form-validators/decorators/minTime.decorator.mjs +10 -0
  135. package/esm2020/lib/form-validators/decorators/model.decorator.mjs +7 -0
  136. package/esm2020/lib/form-validators/decorators/non-validation-decorators/disable.decorator.mjs +8 -0
  137. package/esm2020/lib/form-validators/decorators/non-validation-decorators/elementClass.decorator.mjs +8 -0
  138. package/esm2020/lib/form-validators/decorators/non-validation-decorators/error.decorator.mjs +8 -0
  139. package/esm2020/lib/form-validators/decorators/noneOf.decorator.mjs +10 -0
  140. package/esm2020/lib/form-validators/decorators/not.decorator.mjs +6 -0
  141. package/esm2020/lib/form-validators/decorators/notEmpty.decorator.mjs +6 -0
  142. package/esm2020/lib/form-validators/decorators/numeric.decorator.mjs +10 -0
  143. package/esm2020/lib/form-validators/decorators/odd.decorator.mjs +6 -0
  144. package/esm2020/lib/form-validators/decorators/oneOf.decorator.mjs +10 -0
  145. package/esm2020/lib/form-validators/decorators/or.decorator.mjs +6 -0
  146. package/esm2020/lib/form-validators/decorators/password.decorator.mjs +10 -0
  147. package/esm2020/lib/form-validators/decorators/pattern.decorator.mjs +10 -0
  148. package/esm2020/lib/form-validators/decorators/port.decorator.mjs +6 -0
  149. package/esm2020/lib/form-validators/decorators/primeNumber.decorator.mjs +6 -0
  150. package/esm2020/lib/form-validators/decorators/prop-array.decorator.mjs +18 -0
  151. package/esm2020/lib/form-validators/decorators/prop-object.decorator.mjs +8 -0
  152. package/esm2020/lib/form-validators/decorators/prop.decorator.mjs +16 -0
  153. package/esm2020/lib/form-validators/decorators/range.decorator.mjs +10 -0
  154. package/esm2020/lib/form-validators/decorators/required.decorator.mjs +6 -0
  155. package/esm2020/lib/form-validators/decorators/requiredTrue.decorator.mjs +6 -0
  156. package/esm2020/lib/form-validators/decorators/rule.decorator.mjs +6 -0
  157. package/esm2020/lib/form-validators/decorators/sanitize/blacklist.decorator.mjs +8 -0
  158. package/esm2020/lib/form-validators/decorators/sanitize/escape.decorator.mjs +8 -0
  159. package/esm2020/lib/form-validators/decorators/sanitize/ltrim.decorator.mjs +8 -0
  160. package/esm2020/lib/form-validators/decorators/sanitize/prefix.decorator.mjs +8 -0
  161. package/esm2020/lib/form-validators/decorators/sanitize/rtrim.decorator.mjs +8 -0
  162. package/esm2020/lib/form-validators/decorators/sanitize/sanitize.decorator.mjs +8 -0
  163. package/esm2020/lib/form-validators/decorators/sanitize/stripLow.decorator.mjs +8 -0
  164. package/esm2020/lib/form-validators/decorators/sanitize/suffix.decorator.mjs +8 -0
  165. package/esm2020/lib/form-validators/decorators/sanitize/toBoolean.decorator.mjs +8 -0
  166. package/esm2020/lib/form-validators/decorators/sanitize/toDate.decorator.mjs +8 -0
  167. package/esm2020/lib/form-validators/decorators/sanitize/toDouble.decorator.mjs +8 -0
  168. package/esm2020/lib/form-validators/decorators/sanitize/toFloat.decorator.mjs +8 -0
  169. package/esm2020/lib/form-validators/decorators/sanitize/toInt.decorator.mjs +8 -0
  170. package/esm2020/lib/form-validators/decorators/sanitize/toString.decorator.mjs +8 -0
  171. package/esm2020/lib/form-validators/decorators/sanitize/trim.decorator.mjs +8 -0
  172. package/esm2020/lib/form-validators/decorators/sanitize/whitelist.decorator.mjs +8 -0
  173. package/esm2020/lib/form-validators/decorators/startsWith.decorator.mjs +10 -0
  174. package/esm2020/lib/form-validators/decorators/time.decorator.mjs +10 -0
  175. package/esm2020/lib/form-validators/decorators/unique.decorator.mjs +6 -0
  176. package/esm2020/lib/form-validators/decorators/uppercase.decorator.mjs +6 -0
  177. package/esm2020/lib/form-validators/decorators/url.decorator.mjs +10 -0
  178. package/esm2020/lib/form-validators/directives/base-directive.mjs +43 -0
  179. package/esm2020/lib/form-validators/directives/control-host.directive.mjs +34 -0
  180. package/esm2020/lib/form-validators/directives/html-control-template.directive.mjs +20 -0
  181. package/esm2020/lib/form-validators/directives/rx-form.directive.mjs +134 -0
  182. package/esm2020/lib/form-validators/directives/template-validations/async-validation.directive.mjs +31 -0
  183. package/esm2020/lib/form-validators/directives/template-validations/base-validator.directive.mjs +42 -0
  184. package/esm2020/lib/form-validators/directives/template-validations/control-expression-process.mjs +26 -0
  185. package/esm2020/lib/form-validators/directives/template-validations/file-control.directive.mjs +91 -0
  186. package/esm2020/lib/form-validators/directives/template-validations/image-file-control.directive.mjs +50 -0
  187. package/esm2020/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs +277 -0
  188. package/esm2020/lib/form-validators/domain/disable-provider.mjs +93 -0
  189. package/esm2020/lib/form-validators/domain/element-processor/decimal.provider.mjs +59 -0
  190. package/esm2020/lib/form-validators/domain/element-processor/mask.provider.mjs +430 -0
  191. package/esm2020/lib/form-validators/domain/form-data.mjs +47 -0
  192. package/esm2020/lib/form-validators/enums/error-message-binding-strategy.mjs +11 -0
  193. package/esm2020/lib/form-validators/enums/index.mjs +5 -0
  194. package/esm2020/lib/form-validators/enums/ip-version.mjs +7 -0
  195. package/esm2020/lib/form-validators/enums/numeric-value-type.mjs +7 -0
  196. package/esm2020/lib/form-validators/enums/reset-type.mjs +10 -0
  197. package/esm2020/lib/form-validators/enums/url-validation-type.mjs +7 -0
  198. package/esm2020/lib/form-validators/models/config/alpha-config.mjs +2 -0
  199. package/esm2020/lib/form-validators/models/config/array-config.mjs +2 -0
  200. package/esm2020/lib/form-validators/models/config/base-config-fn.mjs +2 -0
  201. package/esm2020/lib/form-validators/models/config/base-config.mjs +2 -0
  202. package/esm2020/lib/form-validators/models/config/base-date-config.mjs +2 -0
  203. package/esm2020/lib/form-validators/models/config/choice-config.mjs +2 -0
  204. package/esm2020/lib/form-validators/models/config/compare-config.mjs +2 -0
  205. package/esm2020/lib/form-validators/models/config/component-config.mjs +2 -0
  206. package/esm2020/lib/form-validators/models/config/compose-config.mjs +2 -0
  207. package/esm2020/lib/form-validators/models/config/contains-config.mjs +2 -0
  208. package/esm2020/lib/form-validators/models/config/credit-card-config.mjs +2 -0
  209. package/esm2020/lib/form-validators/models/config/custom-config.mjs +2 -0
  210. package/esm2020/lib/form-validators/models/config/date-config.mjs +2 -0
  211. package/esm2020/lib/form-validators/models/config/default-config.mjs +2 -0
  212. package/esm2020/lib/form-validators/models/config/digit-config.mjs +2 -0
  213. package/esm2020/lib/form-validators/models/config/disable-config.mjs +2 -0
  214. package/esm2020/lib/form-validators/models/config/element-class-config.mjs +2 -0
  215. package/esm2020/lib/form-validators/models/config/email-config.mjs +2 -0
  216. package/esm2020/lib/form-validators/models/config/error-config.mjs +2 -0
  217. package/esm2020/lib/form-validators/models/config/extension-config.mjs +2 -0
  218. package/esm2020/lib/form-validators/models/config/factor-config.mjs +2 -0
  219. package/esm2020/lib/form-validators/models/config/field-config.mjs +2 -0
  220. package/esm2020/lib/form-validators/models/config/file-config.mjs +2 -0
  221. package/esm2020/lib/form-validators/models/config/hex-color-config.mjs +2 -0
  222. package/esm2020/lib/form-validators/models/config/iban-config.mjs +2 -0
  223. package/esm2020/lib/form-validators/models/config/image-config.mjs +2 -0
  224. package/esm2020/lib/form-validators/models/config/index.mjs +35 -0
  225. package/esm2020/lib/form-validators/models/config/ip-config.mjs +2 -0
  226. package/esm2020/lib/form-validators/models/config/logical-operator-config.mjs +2 -0
  227. package/esm2020/lib/form-validators/models/config/mask-config.mjs +2 -0
  228. package/esm2020/lib/form-validators/models/config/max-date-config.mjs +2 -0
  229. package/esm2020/lib/form-validators/models/config/message-config.mjs +2 -0
  230. package/esm2020/lib/form-validators/models/config/min-date-config.mjs +2 -0
  231. package/esm2020/lib/form-validators/models/config/model-config.mjs +2 -0
  232. package/esm2020/lib/form-validators/models/config/number-config.mjs +2 -0
  233. package/esm2020/lib/form-validators/models/config/numeric-config.mjs +2 -0
  234. package/esm2020/lib/form-validators/models/config/password-config.mjs +2 -0
  235. package/esm2020/lib/form-validators/models/config/pattern-config.mjs +2 -0
  236. package/esm2020/lib/form-validators/models/config/prop-config.mjs +2 -0
  237. package/esm2020/lib/form-validators/models/config/props-config.mjs +2 -0
  238. package/esm2020/lib/form-validators/models/config/range-config.mjs +2 -0
  239. package/esm2020/lib/form-validators/models/config/relational-operator-config.mjs +2 -0
  240. package/esm2020/lib/form-validators/models/config/required-config.mjs +2 -0
  241. package/esm2020/lib/form-validators/models/config/rule-config.mjs +2 -0
  242. package/esm2020/lib/form-validators/models/config/sanitize-config.mjs +2 -0
  243. package/esm2020/lib/form-validators/models/config/size-config.mjs +2 -0
  244. package/esm2020/lib/form-validators/models/config/string-comparison-config.mjs +2 -0
  245. package/esm2020/lib/form-validators/models/config/time-config.mjs +2 -0
  246. package/esm2020/lib/form-validators/models/config/todate-config.mjs +2 -0
  247. package/esm2020/lib/form-validators/models/config/unique-config.mjs +2 -0
  248. package/esm2020/lib/form-validators/models/config/url-config.mjs +2 -0
  249. package/esm2020/lib/form-validators/models/form-builder-configuration.mjs +8 -0
  250. package/esm2020/lib/form-validators/models/index.mjs +3 -0
  251. package/esm2020/lib/form-validators/models/interface/array-prop-instance-config.interface.mjs +2 -0
  252. package/esm2020/lib/form-validators/models/interface/auto-instance-config.interface.mjs +2 -0
  253. package/esm2020/lib/form-validators/models/interface/form-data-config.mjs +2 -0
  254. package/esm2020/lib/form-validators/models/interface/i-abstract-control.mjs +4 -0
  255. package/esm2020/lib/form-validators/models/interface/i-form-group.mjs +2 -0
  256. package/esm2020/lib/form-validators/models/interface/instance-argument.interface.mjs +2 -0
  257. package/esm2020/lib/form-validators/models/interface/object-prop-instance-config.interface.mjs +2 -0
  258. package/esm2020/lib/form-validators/models/interface/options.mjs +2 -0
  259. package/esm2020/lib/form-validators/models/password-validation.model.mjs +2 -0
  260. package/esm2020/lib/form-validators/models/prop-validation-config.mjs +2 -0
  261. package/esm2020/lib/form-validators/public_api.mjs +25 -0
  262. package/esm2020/lib/form-validators/reactive-form-validators/allOf.validator.mjs +22 -0
  263. package/esm2020/lib/form-validators/reactive-form-validators/alpha.validator.mjs +9 -0
  264. package/esm2020/lib/form-validators/reactive-form-validators/alphaNumeric.validator.mjs +9 -0
  265. package/esm2020/lib/form-validators/reactive-form-validators/and.validator.mjs +23 -0
  266. package/esm2020/lib/form-validators/reactive-form-validators/ascii.validator.mjs +9 -0
  267. package/esm2020/lib/form-validators/reactive-form-validators/async/base.async.validator.mjs +24 -0
  268. package/esm2020/lib/form-validators/reactive-form-validators/choice.validator.mjs +19 -0
  269. package/esm2020/lib/form-validators/reactive-form-validators/compare.validator.mjs +20 -0
  270. package/esm2020/lib/form-validators/reactive-form-validators/compose.validator.mjs +23 -0
  271. package/esm2020/lib/form-validators/reactive-form-validators/conditional-change.validator.mjs +63 -0
  272. package/esm2020/lib/form-validators/reactive-form-validators/contains.validator.mjs +15 -0
  273. package/esm2020/lib/form-validators/reactive-form-validators/credit-card.validator.mjs +48 -0
  274. package/esm2020/lib/form-validators/reactive-form-validators/cusip.validator.mjs +38 -0
  275. package/esm2020/lib/form-validators/reactive-form-validators/custom.validator.mjs +23 -0
  276. package/esm2020/lib/form-validators/reactive-form-validators/dataUri.validator.mjs +9 -0
  277. package/esm2020/lib/form-validators/reactive-form-validators/date.validator.mjs +8 -0
  278. package/esm2020/lib/form-validators/reactive-form-validators/different.validator.mjs +19 -0
  279. package/esm2020/lib/form-validators/reactive-form-validators/digit.validator.mjs +9 -0
  280. package/esm2020/lib/form-validators/reactive-form-validators/email.validator.mjs +9 -0
  281. package/esm2020/lib/form-validators/reactive-form-validators/endsWith.validator.mjs +16 -0
  282. package/esm2020/lib/form-validators/reactive-form-validators/even.validator.mjs +15 -0
  283. package/esm2020/lib/form-validators/reactive-form-validators/extension.validator.mjs +40 -0
  284. package/esm2020/lib/form-validators/reactive-form-validators/factor.validator.mjs +37 -0
  285. package/esm2020/lib/form-validators/reactive-form-validators/file.validator.mjs +26 -0
  286. package/esm2020/lib/form-validators/reactive-form-validators/fileSize.validator.mjs +32 -0
  287. package/esm2020/lib/form-validators/reactive-form-validators/greater-than-equal-to.validator.mjs +8 -0
  288. package/esm2020/lib/form-validators/reactive-form-validators/greater-than.validator.mjs +8 -0
  289. package/esm2020/lib/form-validators/reactive-form-validators/grid.validator.mjs +31 -0
  290. package/esm2020/lib/form-validators/reactive-form-validators/hexcolor.validator.mjs +9 -0
  291. package/esm2020/lib/form-validators/reactive-form-validators/iban.validator.mjs +30 -0
  292. package/esm2020/lib/form-validators/reactive-form-validators/image.validator.mjs +48 -0
  293. package/esm2020/lib/form-validators/reactive-form-validators/index.mjs +66 -0
  294. package/esm2020/lib/form-validators/reactive-form-validators/ip.validator.mjs +35 -0
  295. package/esm2020/lib/form-validators/reactive-form-validators/json.validator.mjs +26 -0
  296. package/esm2020/lib/form-validators/reactive-form-validators/latLong.validator.mjs +18 -0
  297. package/esm2020/lib/form-validators/reactive-form-validators/latitude.validator.mjs +9 -0
  298. package/esm2020/lib/form-validators/reactive-form-validators/leapYear.validator.mjs +16 -0
  299. package/esm2020/lib/form-validators/reactive-form-validators/less-than-equal-to.validator.mjs +8 -0
  300. package/esm2020/lib/form-validators/reactive-form-validators/less-than.validator.mjs +8 -0
  301. package/esm2020/lib/form-validators/reactive-form-validators/longitude.validator.mjs +9 -0
  302. package/esm2020/lib/form-validators/reactive-form-validators/lowercase.validator.mjs +15 -0
  303. package/esm2020/lib/form-validators/reactive-form-validators/mac.validator.mjs +9 -0
  304. package/esm2020/lib/form-validators/reactive-form-validators/mask.validator.mjs +13 -0
  305. package/esm2020/lib/form-validators/reactive-form-validators/maxDate.validator.mjs +8 -0
  306. package/esm2020/lib/form-validators/reactive-form-validators/maxLength.validator.mjs +16 -0
  307. package/esm2020/lib/form-validators/reactive-form-validators/maxNumber.validator.mjs +16 -0
  308. package/esm2020/lib/form-validators/reactive-form-validators/maxTime.validator.mjs +8 -0
  309. package/esm2020/lib/form-validators/reactive-form-validators/minDate.validator.mjs +8 -0
  310. package/esm2020/lib/form-validators/reactive-form-validators/minLength.validator.mjs +16 -0
  311. package/esm2020/lib/form-validators/reactive-form-validators/minNumber.validator.mjs +16 -0
  312. package/esm2020/lib/form-validators/reactive-form-validators/minTime.validator.mjs +8 -0
  313. package/esm2020/lib/form-validators/reactive-form-validators/noneOf.validator.mjs +24 -0
  314. package/esm2020/lib/form-validators/reactive-form-validators/not.validator.mjs +23 -0
  315. package/esm2020/lib/form-validators/reactive-form-validators/notEmpty.validator.mjs +17 -0
  316. package/esm2020/lib/form-validators/reactive-form-validators/numeric.validator.mjs +20 -0
  317. package/esm2020/lib/form-validators/reactive-form-validators/odd.validator.mjs +16 -0
  318. package/esm2020/lib/form-validators/reactive-form-validators/oneOf.validator.mjs +22 -0
  319. package/esm2020/lib/form-validators/reactive-form-validators/or.validator.mjs +23 -0
  320. package/esm2020/lib/form-validators/reactive-form-validators/password.validator.mjs +33 -0
  321. package/esm2020/lib/form-validators/reactive-form-validators/pattern.validator.mjs +17 -0
  322. package/esm2020/lib/form-validators/reactive-form-validators/port.validator.mjs +18 -0
  323. package/esm2020/lib/form-validators/reactive-form-validators/primeNumber.validator.mjs +26 -0
  324. package/esm2020/lib/form-validators/reactive-form-validators/range.validator.mjs +16 -0
  325. package/esm2020/lib/form-validators/reactive-form-validators/required.validator.mjs +17 -0
  326. package/esm2020/lib/form-validators/reactive-form-validators/requiredTrue.validator.mjs +16 -0
  327. package/esm2020/lib/form-validators/reactive-form-validators/rule.validator.mjs +20 -0
  328. package/esm2020/lib/form-validators/reactive-form-validators/startsWith.validator.mjs +16 -0
  329. package/esm2020/lib/form-validators/reactive-form-validators/time.validator.mjs +18 -0
  330. package/esm2020/lib/form-validators/reactive-form-validators/unique.validator.mjs +70 -0
  331. package/esm2020/lib/form-validators/reactive-form-validators/uppercase.validator.mjs +15 -0
  332. package/esm2020/lib/form-validators/reactive-form-validators/url.validator.mjs +28 -0
  333. package/esm2020/lib/form-validators/services/base-form-builder.mjs +115 -0
  334. package/esm2020/lib/form-validators/services/entity.service.mjs +64 -0
  335. package/esm2020/lib/form-validators/services/form-control.mjs +349 -0
  336. package/esm2020/lib/form-validators/services/form-group.mjs +2 -0
  337. package/esm2020/lib/form-validators/services/reactive-form.module.mjs +52 -0
  338. package/esm2020/lib/form-validators/services/rx-form-array.mjs +100 -0
  339. package/esm2020/lib/form-validators/services/rx-form-builder.mjs +559 -0
  340. package/esm2020/lib/form-validators/services/rx-form-group.mjs +299 -0
  341. package/esm2020/lib/form-validators/services/typed-form-builder.mjs +23 -0
  342. package/esm2020/lib/form-validators/util/alphabet-regex.locale.mjs +29 -0
  343. package/esm2020/lib/form-validators/util/app-util.mjs +141 -0
  344. package/esm2020/lib/form-validators/util/check-length.mjs +10 -0
  345. package/esm2020/lib/form-validators/util/config-provider.mjs +35 -0
  346. package/esm2020/lib/form-validators/util/date-checker.function.mjs +52 -0
  347. package/esm2020/lib/form-validators/util/date-provider.mjs +97 -0
  348. package/esm2020/lib/form-validators/util/form-const.mjs +3 -0
  349. package/esm2020/lib/form-validators/util/form-provider.mjs +37 -0
  350. package/esm2020/lib/form-validators/util/index.mjs +7 -0
  351. package/esm2020/lib/form-validators/util/instance-provider.function.mjs +30 -0
  352. package/esm2020/lib/form-validators/util/ip-checker.mjs +18 -0
  353. package/esm2020/lib/form-validators/util/linq.mjs +147 -0
  354. package/esm2020/lib/form-validators/util/object-maker.mjs +38 -0
  355. package/esm2020/lib/form-validators/util/reactive-form-config.mjs +23 -0
  356. package/esm2020/lib/form-validators/util/regex-rules.mjs +37 -0
  357. package/esm2020/lib/form-validators/util/regex-validator.mjs +74 -0
  358. package/esm2020/lib/form-validators/util/relational-checker.function.mjs +85 -0
  359. package/esm2020/lib/form-validators/util/reset-form.mjs +56 -0
  360. package/esm2020/lib/form-validators/util/sanitizers.mjs +131 -0
  361. package/esm2020/lib/form-validators/util/time-checker.function.mjs +48 -0
  362. package/esm2020/lib/form-validators/util/type.mjs +2 -0
  363. package/esm2020/lib/form-validators/util/validator-value-checker.mjs +17 -0
  364. package/esm2020/lib/form-validators/validators-extension/allOf-validator.extension.mjs +11 -0
  365. package/esm2020/lib/form-validators/validators-extension/alpha-validator.extension.mjs +11 -0
  366. package/esm2020/lib/form-validators/validators-extension/alphaNumeric-validator.extension.mjs +11 -0
  367. package/esm2020/lib/form-validators/validators-extension/and-validator.extension.mjs +7 -0
  368. package/esm2020/lib/form-validators/validators-extension/ascii-validator.extension.mjs +7 -0
  369. package/esm2020/lib/form-validators/validators-extension/base-validator.function.mjs +33 -0
  370. package/esm2020/lib/form-validators/validators-extension/choice-validator.extension.mjs +11 -0
  371. package/esm2020/lib/form-validators/validators-extension/compare-validator.extension.mjs +7 -0
  372. package/esm2020/lib/form-validators/validators-extension/compose-validator.extension.mjs +7 -0
  373. package/esm2020/lib/form-validators/validators-extension/contains-validator.extension.mjs +11 -0
  374. package/esm2020/lib/form-validators/validators-extension/credit-card-validator.extension.mjs +11 -0
  375. package/esm2020/lib/form-validators/validators-extension/cusip-validator.extension.mjs +7 -0
  376. package/esm2020/lib/form-validators/validators-extension/custom-validator.extension.mjs +11 -0
  377. package/esm2020/lib/form-validators/validators-extension/dataUri-validator.extension.mjs +7 -0
  378. package/esm2020/lib/form-validators/validators-extension/date-validator.extension.mjs +11 -0
  379. package/esm2020/lib/form-validators/validators-extension/different-validator.extension.mjs +7 -0
  380. package/esm2020/lib/form-validators/validators-extension/digit-validator.extension.mjs +7 -0
  381. package/esm2020/lib/form-validators/validators-extension/email-validator.extension.mjs +7 -0
  382. package/esm2020/lib/form-validators/validators-extension/endsWith-validator.extension.mjs +11 -0
  383. package/esm2020/lib/form-validators/validators-extension/even-validator.extension.mjs +7 -0
  384. package/esm2020/lib/form-validators/validators-extension/extension-validator.extension.mjs +10 -0
  385. package/esm2020/lib/form-validators/validators-extension/factor-validator.extension.mjs +11 -0
  386. package/esm2020/lib/form-validators/validators-extension/file-validator.extension.mjs +10 -0
  387. package/esm2020/lib/form-validators/validators-extension/fileSize-validator.extension.mjs +10 -0
  388. package/esm2020/lib/form-validators/validators-extension/greater-than-equal-to-validator.extension.mjs +11 -0
  389. package/esm2020/lib/form-validators/validators-extension/greater-than-validator.extension.mjs +11 -0
  390. package/esm2020/lib/form-validators/validators-extension/grid-validator.extension.mjs +7 -0
  391. package/esm2020/lib/form-validators/validators-extension/hexcolor-validator.extension.mjs +7 -0
  392. package/esm2020/lib/form-validators/validators-extension/iban-validator.extension.mjs +11 -0
  393. package/esm2020/lib/form-validators/validators-extension/image-validator.extension.mjs +10 -0
  394. package/esm2020/lib/form-validators/validators-extension/index.mjs +68 -0
  395. package/esm2020/lib/form-validators/validators-extension/ip-validator.extension.mjs +11 -0
  396. package/esm2020/lib/form-validators/validators-extension/json-validator.extension.mjs +7 -0
  397. package/esm2020/lib/form-validators/validators-extension/latLong-validator.extension.mjs +7 -0
  398. package/esm2020/lib/form-validators/validators-extension/latitude-validator.extension.mjs +7 -0
  399. package/esm2020/lib/form-validators/validators-extension/leapYear-validator.extension.mjs +7 -0
  400. package/esm2020/lib/form-validators/validators-extension/less-than-equal-to-validator.extension.mjs +11 -0
  401. package/esm2020/lib/form-validators/validators-extension/less-than-validator.extension.mjs +11 -0
  402. package/esm2020/lib/form-validators/validators-extension/longitude-validator.extension.mjs +7 -0
  403. package/esm2020/lib/form-validators/validators-extension/lowercase-validator.extension.mjs +7 -0
  404. package/esm2020/lib/form-validators/validators-extension/mac-validator.extension.mjs +7 -0
  405. package/esm2020/lib/form-validators/validators-extension/mask-validator.extension.mjs +7 -0
  406. package/esm2020/lib/form-validators/validators-extension/maxDate-validator.extension.mjs +11 -0
  407. package/esm2020/lib/form-validators/validators-extension/maxLength-validator.extension.mjs +11 -0
  408. package/esm2020/lib/form-validators/validators-extension/maxNumber-validator.extension.mjs +11 -0
  409. package/esm2020/lib/form-validators/validators-extension/maxTime-validator.extension.mjs +11 -0
  410. package/esm2020/lib/form-validators/validators-extension/minDate-validator.extension.mjs +11 -0
  411. package/esm2020/lib/form-validators/validators-extension/minLength-validator.extension.mjs +11 -0
  412. package/esm2020/lib/form-validators/validators-extension/minNumber-validator.extension.mjs +11 -0
  413. package/esm2020/lib/form-validators/validators-extension/minTime-validator.extension.mjs +11 -0
  414. package/esm2020/lib/form-validators/validators-extension/noneOf-validator.extension.mjs +11 -0
  415. package/esm2020/lib/form-validators/validators-extension/not-validator.extension.mjs +7 -0
  416. package/esm2020/lib/form-validators/validators-extension/notEmpty-validator.extension.mjs +7 -0
  417. package/esm2020/lib/form-validators/validators-extension/numeric-validator.extension.mjs +11 -0
  418. package/esm2020/lib/form-validators/validators-extension/odd-validator.extension.mjs +7 -0
  419. package/esm2020/lib/form-validators/validators-extension/oneOf-validator.extension.mjs +11 -0
  420. package/esm2020/lib/form-validators/validators-extension/or-validator.extension.mjs +7 -0
  421. package/esm2020/lib/form-validators/validators-extension/password-validator.extension.mjs +11 -0
  422. package/esm2020/lib/form-validators/validators-extension/pattern-validator.extension.mjs +11 -0
  423. package/esm2020/lib/form-validators/validators-extension/port-validator.extension.mjs +7 -0
  424. package/esm2020/lib/form-validators/validators-extension/primeNumber-validator.extension.mjs +7 -0
  425. package/esm2020/lib/form-validators/validators-extension/range-validator.extension.mjs +11 -0
  426. package/esm2020/lib/form-validators/validators-extension/required-validator.extension.mjs +7 -0
  427. package/esm2020/lib/form-validators/validators-extension/requiredTrue-validator.extension.mjs +7 -0
  428. package/esm2020/lib/form-validators/validators-extension/rxweb-validators.mjs +108 -0
  429. package/esm2020/lib/form-validators/validators-extension/startsWith-validator.extension.mjs +11 -0
  430. package/esm2020/lib/form-validators/validators-extension/time-validator.extension.mjs +11 -0
  431. package/esm2020/lib/form-validators/validators-extension/unique-validator.extension.mjs +7 -0
  432. package/esm2020/lib/form-validators/validators-extension/uppercase-validator.extension.mjs +7 -0
  433. package/esm2020/lib/form-validators/validators-extension/url-validator.extension.mjs +11 -0
  434. package/esm2020/lib/form-validators/validators-function/alpha-validation.function.mjs +37 -0
  435. package/esm2020/lib/form-validators/validators-function/regex-validation.function.mjs +16 -0
  436. package/esm2020/lib/forms/components/generic-form/generic-form.component.mjs +131 -0
  437. package/{esm2015/lib/forms/constants/constants.js → esm2020/lib/forms/constants/constants.mjs} +0 -0
  438. package/esm2020/lib/forms/directives/mat-form-field-readonly.directive.mjs +33 -0
  439. package/{esm2015/lib/forms/enums/form-field-type.js → esm2020/lib/forms/enums/form-field-type.mjs} +0 -0
  440. package/esm2020/lib/forms/forms.module.mjs +122 -0
  441. package/esm2020/lib/forms/functions/decorators.mjs +127 -0
  442. package/{esm2015/lib/forms/functions/functions.js → esm2020/lib/forms/functions/functions.mjs} +0 -0
  443. package/esm2020/lib/forms/helpers/abstract-mat-form-field.mjs +251 -0
  444. package/esm2020/lib/forms/helpers/value-accessor-base.mjs +141 -0
  445. package/{esm2015/lib/forms/models/form-field-definition.js → esm2020/lib/forms/models/form-field-definition.mjs} +0 -0
  446. package/{esm2015/lib/forms/models/form-field-group.js → esm2020/lib/forms/models/form-field-group.mjs} +0 -0
  447. package/esm2020/lib/forms/public_api.mjs +4 -0
  448. package/esm2020/lib/forms/validators/equal-validator.directive.mjs +79 -0
  449. package/esm2020/lib/forms/validators/native-element-injector.directive.mjs +32 -0
  450. package/esm2020/lib/forms/validators/unique-validator-directive.mjs +75 -0
  451. package/esm2020/lib/http/http.module.mjs +20 -0
  452. package/{esm2015/lib/http/public_api.js → esm2020/lib/http/public_api.mjs} +0 -0
  453. package/{esm2015/lib/http/services/generic.service.js → esm2020/lib/http/services/generic.service.mjs} +0 -0
  454. package/esm2020/lib/layout/layout-card-over/layout-card-over.component.mjs +43 -0
  455. package/esm2020/lib/layout/layout-footer/layout-footer.component.mjs +34 -0
  456. package/esm2020/lib/layout/layout-manage-list/layout-manage-list.component.mjs +128 -0
  457. package/esm2020/lib/layout/layout-manage-list/layout-manage-list.directives.mjs +81 -0
  458. package/esm2020/lib/layout/layout-nav/layout-nav.component.mjs +62 -0
  459. package/esm2020/lib/layout/layout-nav-list/layout-nav-list.component.mjs +123 -0
  460. package/esm2020/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +81 -0
  461. package/esm2020/lib/layout/layout-toggle.class.mjs +71 -0
  462. package/esm2020/lib/layout/layout.component.mjs +82 -0
  463. package/esm2020/lib/layout/layout.directives.mjs +81 -0
  464. package/esm2020/lib/layout/layout.module.mjs +118 -0
  465. package/esm2020/lib/layout/navigation-drawer/navigation-drawer.component.mjs +167 -0
  466. package/{esm2015/lib/layout/public_api.js → esm2020/lib/layout/public_api.mjs} +0 -0
  467. package/esm2020/lib/media/directives/media-toggle.directive.mjs +115 -0
  468. package/esm2020/lib/media/media.module.mjs +37 -0
  469. package/{esm2015/lib/media/public_api.js → esm2020/lib/media/public_api.mjs} +0 -0
  470. package/esm2020/lib/media/services/media.service.mjs +108 -0
  471. package/esm2020/lib/menu/components/menu.component.mjs +52 -0
  472. package/{esm2015/lib/menu/enums/menu-scope.js → esm2020/lib/menu/enums/menu-scope.mjs} +0 -0
  473. package/esm2020/lib/menu/menu.module.mjs +50 -0
  474. package/{esm2015/lib/menu/models/menu-item.js → esm2020/lib/menu/models/menu-item.mjs} +0 -0
  475. package/{esm2015/lib/menu/models/menu.js → esm2020/lib/menu/models/menu.mjs} +0 -0
  476. package/{esm2015/lib/menu/public_api.js → esm2020/lib/menu/public_api.mjs} +0 -0
  477. package/esm2020/lib/menu/services/menu-items.service.mjs +19 -0
  478. package/esm2020/lib/menu/services/menu.resolve.mjs +55 -0
  479. package/esm2020/lib/menu/services/menu.service.mjs +19 -0
  480. package/{esm2015/lib/search/public_api.js → esm2020/lib/search/public_api.mjs} +0 -0
  481. package/esm2020/lib/search/search.module.mjs +47 -0
  482. package/esm2020/lib/search/vd-search-box/vd-search-box.component.mjs +143 -0
  483. package/esm2020/lib/search/vd-search-input/vd-search-input.component.mjs +148 -0
  484. package/esm2020/lib/select/public_api.mjs +3 -0
  485. package/esm2020/lib/select/select.component.mjs +407 -0
  486. package/esm2020/lib/select/select.module.mjs +45 -0
  487. package/esm2020/lib/table/components/dynamic-table/dynamic-table.component.mjs +301 -0
  488. package/esm2020/lib/table/components/filter-clear.component.mjs +44 -0
  489. package/esm2020/lib/table/components/filter-date.component.mjs +151 -0
  490. package/esm2020/lib/table/components/filter-input.component.mjs +198 -0
  491. package/esm2020/lib/table/components/filter-select.component.mjs +334 -0
  492. package/esm2020/lib/table/directives/data-source-filter.directive.mjs +45 -0
  493. package/{esm2015/lib/table/enums/table-column-type.js → esm2020/lib/table/enums/table-column-type.mjs} +0 -0
  494. package/esm2020/lib/table/functions/decorators.mjs +135 -0
  495. package/esm2020/lib/table/functions/functions.mjs +15 -0
  496. package/{esm2015/lib/table/models/pagination.js → esm2020/lib/table/models/pagination.mjs} +0 -0
  497. package/{esm2015/lib/table/models/table-column.js → esm2020/lib/table/models/table-column.mjs} +0 -0
  498. package/{esm2015/lib/table/models/table-definition.js → esm2020/lib/table/models/table-definition.mjs} +0 -0
  499. package/{esm2015/lib/table/models/table-menu-item.js → esm2020/lib/table/models/table-menu-item.mjs} +0 -0
  500. package/esm2020/lib/table/paginator-intl.mjs +44 -0
  501. package/esm2020/lib/table/public_api.mjs +3 -0
  502. package/esm2020/lib/table/table.data-source.mjs +210 -0
  503. package/esm2020/lib/table/table.module.mjs +140 -0
  504. package/esm2020/lib/table/table.static-data-source.mjs +133 -0
  505. package/esm2020/messaia-cdk.mjs +5 -0
  506. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  507. package/fesm2015/messaia-cdk.mjs +15946 -0
  508. package/fesm2015/messaia-cdk.mjs.map +1 -0
  509. package/fesm2020/messaia-cdk.mjs +15868 -0
  510. package/fesm2020/messaia-cdk.mjs.map +1 -0
  511. package/lib/base/base.module.d.ts +7 -0
  512. package/lib/base/components/base.component.d.ts +8 -0
  513. package/lib/base/components/generic-form.component.d.ts +3 -0
  514. package/lib/base/components/generic-list.component.d.ts +3 -0
  515. package/lib/base/interceptors/base.interceptor.d.ts +3 -0
  516. package/lib/base/interceptors/caching-interceptor.d.ts +3 -0
  517. package/lib/base/interceptors/loading.interceptor.d.ts +3 -0
  518. package/lib/base/services/file.service.d.ts +3 -0
  519. package/lib/base/services/loading-screen.service.d.ts +3 -0
  520. package/lib/base/services/print.service.d.ts +3 -0
  521. package/lib/chips/chips.module.d.ts +13 -2
  522. package/lib/chips/components/chips.component.d.ts +7 -0
  523. package/lib/chips/public_api.d.ts +1 -0
  524. package/lib/common/common.module.d.ts +20 -0
  525. package/lib/common/directives/disable-control.directive.d.ts +3 -0
  526. package/lib/common/functions/utils.d.ts +3 -0
  527. package/lib/common/helpers/app-storage.d.ts +3 -0
  528. package/lib/common/helpers/dynamic-builder.d.ts +3 -0
  529. package/lib/common/models/app-setting.d.ts +3 -0
  530. package/lib/common/pipes/data-source.pipe.d.ts +3 -0
  531. package/lib/common/pipes/enum.pipe.d.ts +3 -0
  532. package/lib/common/pipes/file-size.pipe.d.ts +3 -0
  533. package/lib/common/pipes/filter.pipe.d.ts +3 -0
  534. package/lib/common/pipes/first-letter.d.ts +3 -0
  535. package/lib/common/pipes/keys.d.ts +3 -0
  536. package/lib/common/pipes/month-name.pipe.d.ts +3 -0
  537. package/lib/common/pipes/only-number.d.ts +3 -0
  538. package/lib/common/pipes/order.pipe.d.ts +4 -1
  539. package/lib/common/pipes/placeholder.pipe.d.ts +3 -0
  540. package/lib/common/pipes/safe-html.pipe.d.ts +3 -0
  541. package/lib/common/pipes/time.pipe.d.ts +3 -0
  542. package/lib/common/pipes/titlecase.pipe.d.ts +3 -0
  543. package/lib/common/pipes/truncate.pipe.d.ts +3 -0
  544. package/lib/common/pipes/values.d.ts +3 -0
  545. package/lib/common/public_api.d.ts +16 -0
  546. package/lib/common/services/base.service.d.ts +3 -0
  547. package/lib/common/services/enum.service.d.ts +3 -0
  548. package/lib/common/styles/platform.scss +1 -1
  549. package/lib/common/theming/_all-theme.scss +1 -1
  550. package/lib/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -0
  551. package/lib/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -0
  552. package/lib/dialogs/dialog.component.d.ts +9 -0
  553. package/lib/dialogs/dialogs.module.d.ts +13 -0
  554. package/lib/dialogs/prompt-dialog/prompt-dialog.component.d.ts +3 -0
  555. package/lib/dialogs/services/dialog.service.d.ts +3 -0
  556. package/lib/file/file-input.component.d.ts +3 -0
  557. package/lib/file/file.module.d.ts +10 -0
  558. package/lib/form-validators/directives/base-directive.d.ts +3 -0
  559. package/lib/form-validators/directives/control-host.directive.d.ts +3 -0
  560. package/lib/form-validators/directives/html-control-template.directive.d.ts +3 -0
  561. package/lib/form-validators/directives/rx-form.directive.d.ts +3 -0
  562. package/lib/form-validators/directives/template-validations/async-validation.directive.d.ts +3 -0
  563. package/lib/form-validators/directives/template-validations/base-validator.directive.d.ts +3 -0
  564. package/lib/form-validators/directives/template-validations/control-expression-process.d.ts +3 -0
  565. package/lib/form-validators/directives/template-validations/file-control.directive.d.ts +3 -0
  566. package/lib/form-validators/directives/template-validations/image-file-control.directive.d.ts +3 -0
  567. package/lib/form-validators/directives/template-validations/rxformcontrol.directive.d.ts +3 -0
  568. package/lib/form-validators/domain/element-processor/decimal.provider.d.ts +3 -0
  569. package/lib/form-validators/services/reactive-form.module.d.ts +16 -0
  570. package/lib/form-validators/services/rx-form-builder.d.ts +3 -0
  571. package/lib/form-validators/services/typed-form-builder.d.ts +3 -0
  572. package/lib/forms/components/generic-form/generic-form.component.d.ts +11 -0
  573. package/lib/forms/directives/mat-form-field-readonly.directive.d.ts +3 -0
  574. package/lib/forms/forms.module.d.ts +23 -0
  575. package/lib/forms/helpers/abstract-mat-form-field.d.ts +4 -1
  576. package/lib/forms/helpers/value-accessor-base.d.ts +3 -0
  577. package/lib/forms/public_api.d.ts +2 -0
  578. package/lib/forms/validators/equal-validator.directive.d.ts +3 -0
  579. package/lib/forms/validators/native-element-injector.directive.d.ts +3 -0
  580. package/lib/forms/validators/unique-validator-directive.d.ts +3 -0
  581. package/lib/http/http.module.d.ts +5 -0
  582. package/lib/layout/layout-card-over/layout-card-over.component.d.ts +3 -0
  583. package/lib/layout/layout-footer/layout-footer.component.d.ts +3 -0
  584. package/lib/layout/layout-manage-list/layout-manage-list.component.d.ts +3 -0
  585. package/lib/layout/layout-manage-list/layout-manage-list.directives.d.ts +7 -0
  586. package/lib/layout/layout-nav/layout-nav.component.d.ts +3 -0
  587. package/lib/layout/layout-nav-list/layout-nav-list.component.d.ts +3 -0
  588. package/lib/layout/layout-nav-list/layout-nav-list.directives.d.ts +7 -0
  589. package/lib/layout/layout-toggle.class.d.ts +3 -0
  590. package/lib/layout/layout.component.d.ts +3 -0
  591. package/lib/layout/layout.directives.d.ts +7 -0
  592. package/lib/layout/layout.module.d.ts +22 -0
  593. package/lib/layout/navigation-drawer/navigation-drawer.component.d.ts +7 -0
  594. package/lib/media/directives/media-toggle.directive.d.ts +3 -0
  595. package/lib/media/media.module.d.ts +6 -0
  596. package/lib/media/services/media.service.d.ts +3 -0
  597. package/lib/menu/components/menu.component.d.ts +3 -0
  598. package/lib/menu/menu.module.d.ts +9 -0
  599. package/lib/menu/services/menu-items.service.d.ts +3 -0
  600. package/lib/menu/services/menu.resolve.d.ts +5 -0
  601. package/lib/menu/services/menu.service.d.ts +3 -0
  602. package/lib/search/search.module.d.ts +11 -0
  603. package/lib/search/vd-search-box/vd-search-box.component.d.ts +3 -0
  604. package/lib/search/vd-search-input/vd-search-input.component.d.ts +3 -0
  605. package/lib/select/public_api.d.ts +1 -0
  606. package/lib/select/select.component.d.ts +5 -0
  607. package/lib/select/select.module.d.ts +10 -0
  608. package/lib/table/components/dynamic-table/dynamic-table.component.d.ts +3 -0
  609. package/lib/table/components/filter-clear.component.d.ts +3 -0
  610. package/lib/table/components/filter-date.component.d.ts +3 -0
  611. package/lib/table/components/filter-input.component.d.ts +3 -0
  612. package/lib/table/components/filter-select.component.d.ts +5 -0
  613. package/lib/table/directives/data-source-filter.directive.d.ts +3 -0
  614. package/lib/table/paginator-intl.d.ts +3 -0
  615. package/lib/table/public_api.d.ts +1 -0
  616. package/lib/table/table.module.d.ts +28 -0
  617. package/messaia-cdk.d.ts +1 -25
  618. package/package.json +20 -8
  619. package/src/lib/common/styles/font/README.md +9 -0
  620. package/src/lib/layout/README.md +119 -0
  621. package/src/lib/layout/layout-card-over/README.md +36 -0
  622. package/src/lib/layout/layout-manage-list/README.md +76 -0
  623. package/src/lib/layout/layout-nav/README.md +40 -0
  624. package/src/lib/layout/layout-nav-list/README.md +85 -0
  625. package/bundles/messaia-cdk.umd.js +0 -17755
  626. package/bundles/messaia-cdk.umd.js.map +0 -1
  627. package/esm2015/lib/base/base.module.js +0 -47
  628. package/esm2015/lib/base/components/base.component.js +0 -441
  629. package/esm2015/lib/base/components/generic-form.component.js +0 -492
  630. package/esm2015/lib/base/components/generic-list.component.js +0 -469
  631. package/esm2015/lib/base/interceptors/base.interceptor.js +0 -148
  632. package/esm2015/lib/base/interceptors/caching-interceptor.js +0 -75
  633. package/esm2015/lib/base/interceptors/loading.interceptor.js +0 -70
  634. package/esm2015/lib/base/services/file.service.js +0 -25
  635. package/esm2015/lib/base/services/loading-screen.service.js +0 -46
  636. package/esm2015/lib/base/services/print.service.js +0 -49
  637. package/esm2015/lib/chips/chips.module.js +0 -44
  638. package/esm2015/lib/chips/components/chips.component.js +0 -420
  639. package/esm2015/lib/chips/public_api.js +0 -2
  640. package/esm2015/lib/common/behaviors/control-value-accesor.mixin.js +0 -41
  641. package/esm2015/lib/common/common.module.js +0 -86
  642. package/esm2015/lib/common/directives/disable-control.directive.js +0 -43
  643. package/esm2015/lib/common/functions/utils.js +0 -160
  644. package/esm2015/lib/common/helpers/app-storage.js +0 -51
  645. package/esm2015/lib/common/helpers/dynamic-builder.js +0 -58
  646. package/esm2015/lib/common/models/app-setting.js +0 -8
  647. package/esm2015/lib/common/pipes/data-source.pipe.js +0 -12
  648. package/esm2015/lib/common/pipes/enum.pipe.js +0 -20
  649. package/esm2015/lib/common/pipes/file-size.pipe.js +0 -34
  650. package/esm2015/lib/common/pipes/filter.pipe.js +0 -20
  651. package/esm2015/lib/common/pipes/first-letter.js +0 -21
  652. package/esm2015/lib/common/pipes/keys.js +0 -15
  653. package/esm2015/lib/common/pipes/month-name.pipe.js +0 -24
  654. package/esm2015/lib/common/pipes/only-number.js +0 -60
  655. package/esm2015/lib/common/pipes/order.pipe.js +0 -180
  656. package/esm2015/lib/common/pipes/placeholder.pipe.js +0 -23
  657. package/esm2015/lib/common/pipes/safe-html.pipe.js +0 -37
  658. package/esm2015/lib/common/pipes/time.pipe.js +0 -17
  659. package/esm2015/lib/common/pipes/titlecase.pipe.js +0 -11
  660. package/esm2015/lib/common/pipes/truncate.pipe.js +0 -12
  661. package/esm2015/lib/common/pipes/values.js +0 -11
  662. package/esm2015/lib/common/public_api.js +0 -2
  663. package/esm2015/lib/common/services/base.service.js +0 -26
  664. package/esm2015/lib/common/services/enum.service.js +0 -42
  665. package/esm2015/lib/dialogs/alert-dialog/alert-dialog.component.js +0 -38
  666. package/esm2015/lib/dialogs/confirm-dialog/confirm-dialog.component.js +0 -44
  667. package/esm2015/lib/dialogs/dialog.component.js +0 -47
  668. package/esm2015/lib/dialogs/dialogs.module.js +0 -54
  669. package/esm2015/lib/dialogs/prompt-dialog/prompt-dialog.component.js +0 -44
  670. package/esm2015/lib/dialogs/services/dialog.service.js +0 -145
  671. package/esm2015/lib/file/file-input.component.js +0 -301
  672. package/esm2015/lib/file/file.module.js +0 -25
  673. package/esm2015/lib/form-validators/abstract/typed-form.js +0 -3
  674. package/esm2015/lib/form-validators/algorithm/luhn-algorithm.js +0 -15
  675. package/esm2015/lib/form-validators/const/app-validators.const.js +0 -68
  676. package/esm2015/lib/form-validators/const/app.const.js +0 -17
  677. package/esm2015/lib/form-validators/const/config-names.const.js +0 -9
  678. package/esm2015/lib/form-validators/const/config-required-fields.const.js +0 -11
  679. package/esm2015/lib/form-validators/const/decorators.const.js +0 -23
  680. package/esm2015/lib/form-validators/const/events.const.js +0 -14
  681. package/esm2015/lib/form-validators/const/html-elements.const.js +0 -7
  682. package/esm2015/lib/form-validators/const/iban-country-wise-regex.const.js +0 -80
  683. package/esm2015/lib/form-validators/const/index.js +0 -6
  684. package/esm2015/lib/form-validators/const/operators.const.js +0 -7
  685. package/esm2015/lib/form-validators/const/validation-alphabet-locale.const.js +0 -9
  686. package/esm2015/lib/form-validators/const/validator.const.js +0 -8
  687. package/esm2015/lib/form-validators/core/defaultContainer.js +0 -243
  688. package/esm2015/lib/form-validators/core/validator.interface.js +0 -2
  689. package/esm2015/lib/form-validators/core/validator.static.js +0 -74
  690. package/esm2015/lib/form-validators/decorators/allOf.decorator.js +0 -10
  691. package/esm2015/lib/form-validators/decorators/alpha.decorator.js +0 -10
  692. package/esm2015/lib/form-validators/decorators/alphaNumeric.decorator.js +0 -10
  693. package/esm2015/lib/form-validators/decorators/and.decorator.js +0 -6
  694. package/esm2015/lib/form-validators/decorators/ascii.decorator.js +0 -6
  695. package/esm2015/lib/form-validators/decorators/async.decorator.js +0 -6
  696. package/esm2015/lib/form-validators/decorators/base-decorator.function.js +0 -7
  697. package/esm2015/lib/form-validators/decorators/choice.decorator.js +0 -10
  698. package/esm2015/lib/form-validators/decorators/compare.decorator.js +0 -6
  699. package/esm2015/lib/form-validators/decorators/compose.decorator.js +0 -6
  700. package/esm2015/lib/form-validators/decorators/contains.decorator.js +0 -10
  701. package/esm2015/lib/form-validators/decorators/credit-card.decorator.js +0 -10
  702. package/esm2015/lib/form-validators/decorators/cusip.decorator.js +0 -6
  703. package/esm2015/lib/form-validators/decorators/custom.decorator.js +0 -10
  704. package/esm2015/lib/form-validators/decorators/dataUri.decorator.js +0 -6
  705. package/esm2015/lib/form-validators/decorators/date.decorator.js +0 -10
  706. package/esm2015/lib/form-validators/decorators/different.decorator.js +0 -6
  707. package/esm2015/lib/form-validators/decorators/digit.decorator.js +0 -6
  708. package/esm2015/lib/form-validators/decorators/email.decorator.js +0 -6
  709. package/esm2015/lib/form-validators/decorators/endsWith.decorator.js +0 -10
  710. package/esm2015/lib/form-validators/decorators/even.decorator.js +0 -6
  711. package/esm2015/lib/form-validators/decorators/extension.decorator.js +0 -10
  712. package/esm2015/lib/form-validators/decorators/factor.decorator.js +0 -10
  713. package/esm2015/lib/form-validators/decorators/file.decorator.js +0 -10
  714. package/esm2015/lib/form-validators/decorators/fileSize.decorator.js +0 -10
  715. package/esm2015/lib/form-validators/decorators/greater-than-equal-to.decorator.js +0 -10
  716. package/esm2015/lib/form-validators/decorators/greater-than.decorator.js +0 -10
  717. package/esm2015/lib/form-validators/decorators/grid.decorator.js +0 -6
  718. package/esm2015/lib/form-validators/decorators/hexColor.decorator.js +0 -6
  719. package/esm2015/lib/form-validators/decorators/image.decorator.js +0 -10
  720. package/esm2015/lib/form-validators/decorators/index.js +0 -91
  721. package/esm2015/lib/form-validators/decorators/json.decorator.js +0 -6
  722. package/esm2015/lib/form-validators/decorators/latLong.decorator.js +0 -6
  723. package/esm2015/lib/form-validators/decorators/latitude.decorator.js +0 -6
  724. package/esm2015/lib/form-validators/decorators/leapYear.decorator.js +0 -6
  725. package/esm2015/lib/form-validators/decorators/less-than-equal-to.decorator.js +0 -10
  726. package/esm2015/lib/form-validators/decorators/less-than.decorator.js +0 -10
  727. package/esm2015/lib/form-validators/decorators/longitude.decorator.js +0 -6
  728. package/esm2015/lib/form-validators/decorators/lowercase.decorator.js +0 -6
  729. package/esm2015/lib/form-validators/decorators/mac.decorator.js +0 -6
  730. package/esm2015/lib/form-validators/decorators/mask.decorator.js +0 -6
  731. package/esm2015/lib/form-validators/decorators/maxDate.decorator.js +0 -10
  732. package/esm2015/lib/form-validators/decorators/maxLength.decorator.js +0 -10
  733. package/esm2015/lib/form-validators/decorators/maxNumber.decorator.js +0 -10
  734. package/esm2015/lib/form-validators/decorators/maxTime.decorator.js +0 -10
  735. package/esm2015/lib/form-validators/decorators/minDate.decorator.js +0 -10
  736. package/esm2015/lib/form-validators/decorators/minLength.decorator.js +0 -10
  737. package/esm2015/lib/form-validators/decorators/minNumber.decorator.js +0 -10
  738. package/esm2015/lib/form-validators/decorators/minTime.decorator.js +0 -10
  739. package/esm2015/lib/form-validators/decorators/model.decorator.js +0 -7
  740. package/esm2015/lib/form-validators/decorators/non-validation-decorators/disable.decorator.js +0 -8
  741. package/esm2015/lib/form-validators/decorators/non-validation-decorators/elementClass.decorator.js +0 -8
  742. package/esm2015/lib/form-validators/decorators/non-validation-decorators/error.decorator.js +0 -8
  743. package/esm2015/lib/form-validators/decorators/noneOf.decorator.js +0 -10
  744. package/esm2015/lib/form-validators/decorators/not.decorator.js +0 -6
  745. package/esm2015/lib/form-validators/decorators/notEmpty.decorator.js +0 -6
  746. package/esm2015/lib/form-validators/decorators/numeric.decorator.js +0 -10
  747. package/esm2015/lib/form-validators/decorators/odd.decorator.js +0 -6
  748. package/esm2015/lib/form-validators/decorators/oneOf.decorator.js +0 -10
  749. package/esm2015/lib/form-validators/decorators/or.decorator.js +0 -6
  750. package/esm2015/lib/form-validators/decorators/password.decorator.js +0 -10
  751. package/esm2015/lib/form-validators/decorators/pattern.decorator.js +0 -10
  752. package/esm2015/lib/form-validators/decorators/port.decorator.js +0 -6
  753. package/esm2015/lib/form-validators/decorators/primeNumber.decorator.js +0 -6
  754. package/esm2015/lib/form-validators/decorators/prop-array.decorator.js +0 -18
  755. package/esm2015/lib/form-validators/decorators/prop-object.decorator.js +0 -8
  756. package/esm2015/lib/form-validators/decorators/prop.decorator.js +0 -16
  757. package/esm2015/lib/form-validators/decorators/range.decorator.js +0 -10
  758. package/esm2015/lib/form-validators/decorators/required.decorator.js +0 -6
  759. package/esm2015/lib/form-validators/decorators/requiredTrue.decorator.js +0 -6
  760. package/esm2015/lib/form-validators/decorators/rule.decorator.js +0 -6
  761. package/esm2015/lib/form-validators/decorators/sanitize/blacklist.decorator.js +0 -8
  762. package/esm2015/lib/form-validators/decorators/sanitize/escape.decorator.js +0 -8
  763. package/esm2015/lib/form-validators/decorators/sanitize/ltrim.decorator.js +0 -8
  764. package/esm2015/lib/form-validators/decorators/sanitize/prefix.decorator.js +0 -8
  765. package/esm2015/lib/form-validators/decorators/sanitize/rtrim.decorator.js +0 -8
  766. package/esm2015/lib/form-validators/decorators/sanitize/sanitize.decorator.js +0 -8
  767. package/esm2015/lib/form-validators/decorators/sanitize/stripLow.decorator.js +0 -8
  768. package/esm2015/lib/form-validators/decorators/sanitize/suffix.decorator.js +0 -8
  769. package/esm2015/lib/form-validators/decorators/sanitize/toBoolean.decorator.js +0 -8
  770. package/esm2015/lib/form-validators/decorators/sanitize/toDate.decorator.js +0 -8
  771. package/esm2015/lib/form-validators/decorators/sanitize/toDouble.decorator.js +0 -8
  772. package/esm2015/lib/form-validators/decorators/sanitize/toFloat.decorator.js +0 -8
  773. package/esm2015/lib/form-validators/decorators/sanitize/toInt.decorator.js +0 -8
  774. package/esm2015/lib/form-validators/decorators/sanitize/toString.decorator.js +0 -8
  775. package/esm2015/lib/form-validators/decorators/sanitize/trim.decorator.js +0 -8
  776. package/esm2015/lib/form-validators/decorators/sanitize/whitelist.decorator.js +0 -8
  777. package/esm2015/lib/form-validators/decorators/startsWith.decorator.js +0 -10
  778. package/esm2015/lib/form-validators/decorators/time.decorator.js +0 -10
  779. package/esm2015/lib/form-validators/decorators/unique.decorator.js +0 -6
  780. package/esm2015/lib/form-validators/decorators/uppercase.decorator.js +0 -6
  781. package/esm2015/lib/form-validators/decorators/url.decorator.js +0 -10
  782. package/esm2015/lib/form-validators/directives/base-directive.js +0 -43
  783. package/esm2015/lib/form-validators/directives/control-host.directive.js +0 -42
  784. package/esm2015/lib/form-validators/directives/html-control-template.directive.js +0 -28
  785. package/esm2015/lib/form-validators/directives/rx-form.directive.js +0 -131
  786. package/esm2015/lib/form-validators/directives/template-validations/async-validation.directive.js +0 -26
  787. package/esm2015/lib/form-validators/directives/template-validations/base-validator.directive.js +0 -42
  788. package/esm2015/lib/form-validators/directives/template-validations/control-expression-process.js +0 -25
  789. package/esm2015/lib/form-validators/directives/template-validations/file-control.directive.js +0 -93
  790. package/esm2015/lib/form-validators/directives/template-validations/image-file-control.directive.js +0 -55
  791. package/esm2015/lib/form-validators/directives/template-validations/rxformcontrol.directive.js +0 -237
  792. package/esm2015/lib/form-validators/domain/disable-provider.js +0 -93
  793. package/esm2015/lib/form-validators/domain/element-processor/decimal.provider.js +0 -64
  794. package/esm2015/lib/form-validators/domain/element-processor/mask.provider.js +0 -430
  795. package/esm2015/lib/form-validators/domain/form-data.js +0 -47
  796. package/esm2015/lib/form-validators/enums/error-message-binding-strategy.js +0 -11
  797. package/esm2015/lib/form-validators/enums/index.js +0 -5
  798. package/esm2015/lib/form-validators/enums/ip-version.js +0 -7
  799. package/esm2015/lib/form-validators/enums/numeric-value-type.js +0 -7
  800. package/esm2015/lib/form-validators/enums/reset-type.js +0 -10
  801. package/esm2015/lib/form-validators/enums/url-validation-type.js +0 -7
  802. package/esm2015/lib/form-validators/models/config/alpha-config.js +0 -2
  803. package/esm2015/lib/form-validators/models/config/array-config.js +0 -2
  804. package/esm2015/lib/form-validators/models/config/base-config-fn.js +0 -2
  805. package/esm2015/lib/form-validators/models/config/base-config.js +0 -2
  806. package/esm2015/lib/form-validators/models/config/base-date-config.js +0 -2
  807. package/esm2015/lib/form-validators/models/config/choice-config.js +0 -2
  808. package/esm2015/lib/form-validators/models/config/compare-config.js +0 -2
  809. package/esm2015/lib/form-validators/models/config/component-config.js +0 -2
  810. package/esm2015/lib/form-validators/models/config/compose-config.js +0 -2
  811. package/esm2015/lib/form-validators/models/config/contains-config.js +0 -2
  812. package/esm2015/lib/form-validators/models/config/credit-card-config.js +0 -2
  813. package/esm2015/lib/form-validators/models/config/custom-config.js +0 -2
  814. package/esm2015/lib/form-validators/models/config/date-config.js +0 -2
  815. package/esm2015/lib/form-validators/models/config/default-config.js +0 -2
  816. package/esm2015/lib/form-validators/models/config/digit-config.js +0 -2
  817. package/esm2015/lib/form-validators/models/config/disable-config.js +0 -2
  818. package/esm2015/lib/form-validators/models/config/element-class-config.js +0 -2
  819. package/esm2015/lib/form-validators/models/config/email-config.js +0 -2
  820. package/esm2015/lib/form-validators/models/config/error-config.js +0 -2
  821. package/esm2015/lib/form-validators/models/config/extension-config.js +0 -2
  822. package/esm2015/lib/form-validators/models/config/factor-config.js +0 -2
  823. package/esm2015/lib/form-validators/models/config/field-config.js +0 -2
  824. package/esm2015/lib/form-validators/models/config/file-config.js +0 -2
  825. package/esm2015/lib/form-validators/models/config/hex-color-config.js +0 -2
  826. package/esm2015/lib/form-validators/models/config/iban-config.js +0 -2
  827. package/esm2015/lib/form-validators/models/config/image-config.js +0 -2
  828. package/esm2015/lib/form-validators/models/config/index.js +0 -35
  829. package/esm2015/lib/form-validators/models/config/ip-config.js +0 -2
  830. package/esm2015/lib/form-validators/models/config/logical-operator-config.js +0 -2
  831. package/esm2015/lib/form-validators/models/config/mask-config.js +0 -2
  832. package/esm2015/lib/form-validators/models/config/max-date-config.js +0 -2
  833. package/esm2015/lib/form-validators/models/config/message-config.js +0 -2
  834. package/esm2015/lib/form-validators/models/config/min-date-config.js +0 -2
  835. package/esm2015/lib/form-validators/models/config/model-config.js +0 -2
  836. package/esm2015/lib/form-validators/models/config/number-config.js +0 -2
  837. package/esm2015/lib/form-validators/models/config/numeric-config.js +0 -2
  838. package/esm2015/lib/form-validators/models/config/password-config.js +0 -2
  839. package/esm2015/lib/form-validators/models/config/pattern-config.js +0 -2
  840. package/esm2015/lib/form-validators/models/config/prop-config.js +0 -2
  841. package/esm2015/lib/form-validators/models/config/props-config.js +0 -2
  842. package/esm2015/lib/form-validators/models/config/range-config.js +0 -2
  843. package/esm2015/lib/form-validators/models/config/relational-operator-config.js +0 -2
  844. package/esm2015/lib/form-validators/models/config/required-config.js +0 -2
  845. package/esm2015/lib/form-validators/models/config/rule-config.js +0 -2
  846. package/esm2015/lib/form-validators/models/config/sanitize-config.js +0 -2
  847. package/esm2015/lib/form-validators/models/config/size-config.js +0 -2
  848. package/esm2015/lib/form-validators/models/config/string-comparison-config.js +0 -2
  849. package/esm2015/lib/form-validators/models/config/time-config.js +0 -2
  850. package/esm2015/lib/form-validators/models/config/todate-config.js +0 -2
  851. package/esm2015/lib/form-validators/models/config/unique-config.js +0 -2
  852. package/esm2015/lib/form-validators/models/config/url-config.js +0 -2
  853. package/esm2015/lib/form-validators/models/form-builder-configuration.js +0 -8
  854. package/esm2015/lib/form-validators/models/index.js +0 -3
  855. package/esm2015/lib/form-validators/models/interface/array-prop-instance-config.interface.js +0 -2
  856. package/esm2015/lib/form-validators/models/interface/auto-instance-config.interface.js +0 -2
  857. package/esm2015/lib/form-validators/models/interface/form-data-config.js +0 -2
  858. package/esm2015/lib/form-validators/models/interface/i-abstract-control.js +0 -4
  859. package/esm2015/lib/form-validators/models/interface/i-form-group.js +0 -2
  860. package/esm2015/lib/form-validators/models/interface/instance-argument.interface.js +0 -2
  861. package/esm2015/lib/form-validators/models/interface/object-prop-instance-config.interface.js +0 -2
  862. package/esm2015/lib/form-validators/models/interface/options.js +0 -2
  863. package/esm2015/lib/form-validators/models/password-validation.model.js +0 -2
  864. package/esm2015/lib/form-validators/models/prop-validation-config.js +0 -2
  865. package/esm2015/lib/form-validators/public_api.js +0 -25
  866. package/esm2015/lib/form-validators/reactive-form-validators/allOf.validator.js +0 -22
  867. package/esm2015/lib/form-validators/reactive-form-validators/alpha.validator.js +0 -9
  868. package/esm2015/lib/form-validators/reactive-form-validators/alphaNumeric.validator.js +0 -9
  869. package/esm2015/lib/form-validators/reactive-form-validators/and.validator.js +0 -23
  870. package/esm2015/lib/form-validators/reactive-form-validators/ascii.validator.js +0 -9
  871. package/esm2015/lib/form-validators/reactive-form-validators/async/base.async.validator.js +0 -24
  872. package/esm2015/lib/form-validators/reactive-form-validators/choice.validator.js +0 -19
  873. package/esm2015/lib/form-validators/reactive-form-validators/compare.validator.js +0 -20
  874. package/esm2015/lib/form-validators/reactive-form-validators/compose.validator.js +0 -23
  875. package/esm2015/lib/form-validators/reactive-form-validators/conditional-change.validator.js +0 -63
  876. package/esm2015/lib/form-validators/reactive-form-validators/contains.validator.js +0 -15
  877. package/esm2015/lib/form-validators/reactive-form-validators/credit-card.validator.js +0 -48
  878. package/esm2015/lib/form-validators/reactive-form-validators/cusip.validator.js +0 -38
  879. package/esm2015/lib/form-validators/reactive-form-validators/custom.validator.js +0 -23
  880. package/esm2015/lib/form-validators/reactive-form-validators/dataUri.validator.js +0 -9
  881. package/esm2015/lib/form-validators/reactive-form-validators/date.validator.js +0 -8
  882. package/esm2015/lib/form-validators/reactive-form-validators/different.validator.js +0 -19
  883. package/esm2015/lib/form-validators/reactive-form-validators/digit.validator.js +0 -9
  884. package/esm2015/lib/form-validators/reactive-form-validators/email.validator.js +0 -9
  885. package/esm2015/lib/form-validators/reactive-form-validators/endsWith.validator.js +0 -16
  886. package/esm2015/lib/form-validators/reactive-form-validators/even.validator.js +0 -15
  887. package/esm2015/lib/form-validators/reactive-form-validators/extension.validator.js +0 -40
  888. package/esm2015/lib/form-validators/reactive-form-validators/factor.validator.js +0 -37
  889. package/esm2015/lib/form-validators/reactive-form-validators/file.validator.js +0 -26
  890. package/esm2015/lib/form-validators/reactive-form-validators/fileSize.validator.js +0 -32
  891. package/esm2015/lib/form-validators/reactive-form-validators/greater-than-equal-to.validator.js +0 -8
  892. package/esm2015/lib/form-validators/reactive-form-validators/greater-than.validator.js +0 -8
  893. package/esm2015/lib/form-validators/reactive-form-validators/grid.validator.js +0 -31
  894. package/esm2015/lib/form-validators/reactive-form-validators/hexcolor.validator.js +0 -9
  895. package/esm2015/lib/form-validators/reactive-form-validators/iban.validator.js +0 -30
  896. package/esm2015/lib/form-validators/reactive-form-validators/image.validator.js +0 -48
  897. package/esm2015/lib/form-validators/reactive-form-validators/index.js +0 -66
  898. package/esm2015/lib/form-validators/reactive-form-validators/ip.validator.js +0 -35
  899. package/esm2015/lib/form-validators/reactive-form-validators/json.validator.js +0 -26
  900. package/esm2015/lib/form-validators/reactive-form-validators/latLong.validator.js +0 -18
  901. package/esm2015/lib/form-validators/reactive-form-validators/latitude.validator.js +0 -9
  902. package/esm2015/lib/form-validators/reactive-form-validators/leapYear.validator.js +0 -16
  903. package/esm2015/lib/form-validators/reactive-form-validators/less-than-equal-to.validator.js +0 -8
  904. package/esm2015/lib/form-validators/reactive-form-validators/less-than.validator.js +0 -8
  905. package/esm2015/lib/form-validators/reactive-form-validators/longitude.validator.js +0 -9
  906. package/esm2015/lib/form-validators/reactive-form-validators/lowercase.validator.js +0 -15
  907. package/esm2015/lib/form-validators/reactive-form-validators/mac.validator.js +0 -9
  908. package/esm2015/lib/form-validators/reactive-form-validators/mask.validator.js +0 -13
  909. package/esm2015/lib/form-validators/reactive-form-validators/maxDate.validator.js +0 -8
  910. package/esm2015/lib/form-validators/reactive-form-validators/maxLength.validator.js +0 -16
  911. package/esm2015/lib/form-validators/reactive-form-validators/maxNumber.validator.js +0 -16
  912. package/esm2015/lib/form-validators/reactive-form-validators/maxTime.validator.js +0 -8
  913. package/esm2015/lib/form-validators/reactive-form-validators/minDate.validator.js +0 -8
  914. package/esm2015/lib/form-validators/reactive-form-validators/minLength.validator.js +0 -16
  915. package/esm2015/lib/form-validators/reactive-form-validators/minNumber.validator.js +0 -16
  916. package/esm2015/lib/form-validators/reactive-form-validators/minTime.validator.js +0 -8
  917. package/esm2015/lib/form-validators/reactive-form-validators/noneOf.validator.js +0 -24
  918. package/esm2015/lib/form-validators/reactive-form-validators/not.validator.js +0 -23
  919. package/esm2015/lib/form-validators/reactive-form-validators/notEmpty.validator.js +0 -17
  920. package/esm2015/lib/form-validators/reactive-form-validators/numeric.validator.js +0 -20
  921. package/esm2015/lib/form-validators/reactive-form-validators/odd.validator.js +0 -16
  922. package/esm2015/lib/form-validators/reactive-form-validators/oneOf.validator.js +0 -22
  923. package/esm2015/lib/form-validators/reactive-form-validators/or.validator.js +0 -23
  924. package/esm2015/lib/form-validators/reactive-form-validators/password.validator.js +0 -33
  925. package/esm2015/lib/form-validators/reactive-form-validators/pattern.validator.js +0 -17
  926. package/esm2015/lib/form-validators/reactive-form-validators/port.validator.js +0 -18
  927. package/esm2015/lib/form-validators/reactive-form-validators/primeNumber.validator.js +0 -26
  928. package/esm2015/lib/form-validators/reactive-form-validators/range.validator.js +0 -16
  929. package/esm2015/lib/form-validators/reactive-form-validators/required.validator.js +0 -17
  930. package/esm2015/lib/form-validators/reactive-form-validators/requiredTrue.validator.js +0 -16
  931. package/esm2015/lib/form-validators/reactive-form-validators/rule.validator.js +0 -20
  932. package/esm2015/lib/form-validators/reactive-form-validators/startsWith.validator.js +0 -16
  933. package/esm2015/lib/form-validators/reactive-form-validators/time.validator.js +0 -18
  934. package/esm2015/lib/form-validators/reactive-form-validators/unique.validator.js +0 -70
  935. package/esm2015/lib/form-validators/reactive-form-validators/uppercase.validator.js +0 -15
  936. package/esm2015/lib/form-validators/reactive-form-validators/url.validator.js +0 -28
  937. package/esm2015/lib/form-validators/services/base-form-builder.js +0 -115
  938. package/esm2015/lib/form-validators/services/entity.service.js +0 -64
  939. package/esm2015/lib/form-validators/services/form-control.js +0 -349
  940. package/esm2015/lib/form-validators/services/form-group.js +0 -2
  941. package/esm2015/lib/form-validators/services/reactive-form.module.js +0 -53
  942. package/esm2015/lib/form-validators/services/rx-form-array.js +0 -100
  943. package/esm2015/lib/form-validators/services/rx-form-builder.js +0 -565
  944. package/esm2015/lib/form-validators/services/rx-form-group.js +0 -299
  945. package/esm2015/lib/form-validators/services/typed-form-builder.js +0 -29
  946. package/esm2015/lib/form-validators/util/alphabet-regex.locale.js +0 -29
  947. package/esm2015/lib/form-validators/util/app-util.js +0 -141
  948. package/esm2015/lib/form-validators/util/check-length.js +0 -10
  949. package/esm2015/lib/form-validators/util/config-provider.js +0 -35
  950. package/esm2015/lib/form-validators/util/date-checker.function.js +0 -52
  951. package/esm2015/lib/form-validators/util/date-provider.js +0 -97
  952. package/esm2015/lib/form-validators/util/form-const.js +0 -3
  953. package/esm2015/lib/form-validators/util/form-provider.js +0 -37
  954. package/esm2015/lib/form-validators/util/index.js +0 -7
  955. package/esm2015/lib/form-validators/util/instance-provider.function.js +0 -30
  956. package/esm2015/lib/form-validators/util/ip-checker.js +0 -18
  957. package/esm2015/lib/form-validators/util/linq.js +0 -147
  958. package/esm2015/lib/form-validators/util/object-maker.js +0 -38
  959. package/esm2015/lib/form-validators/util/reactive-form-config.js +0 -23
  960. package/esm2015/lib/form-validators/util/regex-rules.js +0 -37
  961. package/esm2015/lib/form-validators/util/regex-validator.js +0 -74
  962. package/esm2015/lib/form-validators/util/relational-checker.function.js +0 -85
  963. package/esm2015/lib/form-validators/util/reset-form.js +0 -56
  964. package/esm2015/lib/form-validators/util/sanitizers.js +0 -131
  965. package/esm2015/lib/form-validators/util/time-checker.function.js +0 -48
  966. package/esm2015/lib/form-validators/util/type.js +0 -2
  967. package/esm2015/lib/form-validators/util/validator-value-checker.js +0 -17
  968. package/esm2015/lib/form-validators/validators-extension/allOf-validator.extension.js +0 -11
  969. package/esm2015/lib/form-validators/validators-extension/alpha-validator.extension.js +0 -11
  970. package/esm2015/lib/form-validators/validators-extension/alphaNumeric-validator.extension.js +0 -11
  971. package/esm2015/lib/form-validators/validators-extension/and-validator.extension.js +0 -7
  972. package/esm2015/lib/form-validators/validators-extension/ascii-validator.extension.js +0 -7
  973. package/esm2015/lib/form-validators/validators-extension/base-validator.function.js +0 -33
  974. package/esm2015/lib/form-validators/validators-extension/choice-validator.extension.js +0 -11
  975. package/esm2015/lib/form-validators/validators-extension/compare-validator.extension.js +0 -7
  976. package/esm2015/lib/form-validators/validators-extension/compose-validator.extension.js +0 -7
  977. package/esm2015/lib/form-validators/validators-extension/contains-validator.extension.js +0 -11
  978. package/esm2015/lib/form-validators/validators-extension/credit-card-validator.extension.js +0 -11
  979. package/esm2015/lib/form-validators/validators-extension/cusip-validator.extension.js +0 -7
  980. package/esm2015/lib/form-validators/validators-extension/custom-validator.extension.js +0 -11
  981. package/esm2015/lib/form-validators/validators-extension/dataUri-validator.extension.js +0 -7
  982. package/esm2015/lib/form-validators/validators-extension/date-validator.extension.js +0 -11
  983. package/esm2015/lib/form-validators/validators-extension/different-validator.extension.js +0 -7
  984. package/esm2015/lib/form-validators/validators-extension/digit-validator.extension.js +0 -7
  985. package/esm2015/lib/form-validators/validators-extension/email-validator.extension.js +0 -7
  986. package/esm2015/lib/form-validators/validators-extension/endsWith-validator.extension.js +0 -11
  987. package/esm2015/lib/form-validators/validators-extension/even-validator.extension.js +0 -7
  988. package/esm2015/lib/form-validators/validators-extension/extension-validator.extension.js +0 -10
  989. package/esm2015/lib/form-validators/validators-extension/factor-validator.extension.js +0 -11
  990. package/esm2015/lib/form-validators/validators-extension/file-validator.extension.js +0 -10
  991. package/esm2015/lib/form-validators/validators-extension/fileSize-validator.extension.js +0 -10
  992. package/esm2015/lib/form-validators/validators-extension/greater-than-equal-to-validator.extension.js +0 -11
  993. package/esm2015/lib/form-validators/validators-extension/greater-than-validator.extension.js +0 -11
  994. package/esm2015/lib/form-validators/validators-extension/grid-validator.extension.js +0 -7
  995. package/esm2015/lib/form-validators/validators-extension/hexcolor-validator.extension.js +0 -7
  996. package/esm2015/lib/form-validators/validators-extension/iban-validator.extension.js +0 -11
  997. package/esm2015/lib/form-validators/validators-extension/image-validator.extension.js +0 -10
  998. package/esm2015/lib/form-validators/validators-extension/index.js +0 -68
  999. package/esm2015/lib/form-validators/validators-extension/ip-validator.extension.js +0 -11
  1000. package/esm2015/lib/form-validators/validators-extension/json-validator.extension.js +0 -7
  1001. package/esm2015/lib/form-validators/validators-extension/latLong-validator.extension.js +0 -7
  1002. package/esm2015/lib/form-validators/validators-extension/latitude-validator.extension.js +0 -7
  1003. package/esm2015/lib/form-validators/validators-extension/leapYear-validator.extension.js +0 -7
  1004. package/esm2015/lib/form-validators/validators-extension/less-than-equal-to-validator.extension.js +0 -11
  1005. package/esm2015/lib/form-validators/validators-extension/less-than-validator.extension.js +0 -11
  1006. package/esm2015/lib/form-validators/validators-extension/longitude-validator.extension.js +0 -7
  1007. package/esm2015/lib/form-validators/validators-extension/lowercase-validator.extension.js +0 -7
  1008. package/esm2015/lib/form-validators/validators-extension/mac-validator.extension.js +0 -7
  1009. package/esm2015/lib/form-validators/validators-extension/mask-validator.extension.js +0 -7
  1010. package/esm2015/lib/form-validators/validators-extension/maxDate-validator.extension.js +0 -11
  1011. package/esm2015/lib/form-validators/validators-extension/maxLength-validator.extension.js +0 -11
  1012. package/esm2015/lib/form-validators/validators-extension/maxNumber-validator.extension.js +0 -11
  1013. package/esm2015/lib/form-validators/validators-extension/maxTime-validator.extension.js +0 -11
  1014. package/esm2015/lib/form-validators/validators-extension/minDate-validator.extension.js +0 -11
  1015. package/esm2015/lib/form-validators/validators-extension/minLength-validator.extension.js +0 -11
  1016. package/esm2015/lib/form-validators/validators-extension/minNumber-validator.extension.js +0 -11
  1017. package/esm2015/lib/form-validators/validators-extension/minTime-validator.extension.js +0 -11
  1018. package/esm2015/lib/form-validators/validators-extension/noneOf-validator.extension.js +0 -11
  1019. package/esm2015/lib/form-validators/validators-extension/not-validator.extension.js +0 -7
  1020. package/esm2015/lib/form-validators/validators-extension/notEmpty-validator.extension.js +0 -7
  1021. package/esm2015/lib/form-validators/validators-extension/numeric-validator.extension.js +0 -11
  1022. package/esm2015/lib/form-validators/validators-extension/odd-validator.extension.js +0 -7
  1023. package/esm2015/lib/form-validators/validators-extension/oneOf-validator.extension.js +0 -11
  1024. package/esm2015/lib/form-validators/validators-extension/or-validator.extension.js +0 -7
  1025. package/esm2015/lib/form-validators/validators-extension/password-validator.extension.js +0 -11
  1026. package/esm2015/lib/form-validators/validators-extension/pattern-validator.extension.js +0 -11
  1027. package/esm2015/lib/form-validators/validators-extension/port-validator.extension.js +0 -7
  1028. package/esm2015/lib/form-validators/validators-extension/primeNumber-validator.extension.js +0 -7
  1029. package/esm2015/lib/form-validators/validators-extension/range-validator.extension.js +0 -11
  1030. package/esm2015/lib/form-validators/validators-extension/required-validator.extension.js +0 -7
  1031. package/esm2015/lib/form-validators/validators-extension/requiredTrue-validator.extension.js +0 -7
  1032. package/esm2015/lib/form-validators/validators-extension/rxweb-validators.js +0 -108
  1033. package/esm2015/lib/form-validators/validators-extension/startsWith-validator.extension.js +0 -11
  1034. package/esm2015/lib/form-validators/validators-extension/time-validator.extension.js +0 -11
  1035. package/esm2015/lib/form-validators/validators-extension/unique-validator.extension.js +0 -7
  1036. package/esm2015/lib/form-validators/validators-extension/uppercase-validator.extension.js +0 -7
  1037. package/esm2015/lib/form-validators/validators-extension/url-validator.extension.js +0 -11
  1038. package/esm2015/lib/form-validators/validators-function/alpha-validation.function.js +0 -37
  1039. package/esm2015/lib/form-validators/validators-function/regex-validation.function.js +0 -16
  1040. package/esm2015/lib/forms/components/generic-form/generic-form.component.js +0 -149
  1041. package/esm2015/lib/forms/directives/mat-form-field-readonly.directive.js +0 -40
  1042. package/esm2015/lib/forms/forms.module.js +0 -70
  1043. package/esm2015/lib/forms/functions/decorators.js +0 -129
  1044. package/esm2015/lib/forms/helpers/abstract-mat-form-field.js +0 -257
  1045. package/esm2015/lib/forms/helpers/value-accessor-base.js +0 -140
  1046. package/esm2015/lib/forms/public_api.js +0 -2
  1047. package/esm2015/lib/forms/validators/equal-validator.directive.js +0 -75
  1048. package/esm2015/lib/forms/validators/native-element-injector.directive.js +0 -38
  1049. package/esm2015/lib/forms/validators/unique-validator-directive.js +0 -78
  1050. package/esm2015/lib/http/http.module.js +0 -14
  1051. package/esm2015/lib/layout/layout-card-over/layout-card-over.component.js +0 -35
  1052. package/esm2015/lib/layout/layout-footer/layout-footer.component.js +0 -48
  1053. package/esm2015/lib/layout/layout-manage-list/layout-manage-list.component.js +0 -125
  1054. package/esm2015/lib/layout/layout-manage-list/layout-manage-list.directives.js +0 -103
  1055. package/esm2015/lib/layout/layout-nav/layout-nav.component.js +0 -59
  1056. package/esm2015/lib/layout/layout-nav-list/layout-nav-list.component.js +0 -111
  1057. package/esm2015/lib/layout/layout-nav-list/layout-nav-list.directives.js +0 -103
  1058. package/esm2015/lib/layout/layout-toggle.class.js +0 -80
  1059. package/esm2015/lib/layout/layout.component.js +0 -77
  1060. package/esm2015/lib/layout/layout.directives.js +0 -103
  1061. package/esm2015/lib/layout/layout.module.js +0 -64
  1062. package/esm2015/lib/layout/navigation-drawer/navigation-drawer.component.js +0 -148
  1063. package/esm2015/lib/media/directives/media-toggle.directive.js +0 -118
  1064. package/esm2015/lib/media/media.module.js +0 -29
  1065. package/esm2015/lib/media/services/media.service.js +0 -116
  1066. package/esm2015/lib/menu/components/menu.component.js +0 -45
  1067. package/esm2015/lib/menu/menu.module.js +0 -38
  1068. package/esm2015/lib/menu/services/menu-items.service.js +0 -26
  1069. package/esm2015/lib/menu/services/menu.resolve.js +0 -61
  1070. package/esm2015/lib/menu/services/menu.service.js +0 -26
  1071. package/esm2015/lib/search/search.module.js +0 -31
  1072. package/esm2015/lib/search/vd-search-box/vd-search-box.component.js +0 -111
  1073. package/esm2015/lib/search/vd-search-input/vd-search-input.component.js +0 -122
  1074. package/esm2015/lib/select/public_api.js +0 -2
  1075. package/esm2015/lib/select/select.component.js +0 -396
  1076. package/esm2015/lib/select/select.module.js +0 -29
  1077. package/esm2015/lib/table/components/dynamic-table/dynamic-table.component.js +0 -264
  1078. package/esm2015/lib/table/components/filter-clear.component.js +0 -45
  1079. package/esm2015/lib/table/components/filter-date.component.js +0 -133
  1080. package/esm2015/lib/table/components/filter-input.component.js +0 -179
  1081. package/esm2015/lib/table/components/filter-select.component.js +0 -309
  1082. package/esm2015/lib/table/directives/data-source-filter.directive.js +0 -43
  1083. package/esm2015/lib/table/functions/decorators.js +0 -137
  1084. package/esm2015/lib/table/functions/functions.js +0 -18
  1085. package/esm2015/lib/table/paginator-intl.js +0 -42
  1086. package/esm2015/lib/table/public_api.js +0 -2
  1087. package/esm2015/lib/table/table.data-source.js +0 -211
  1088. package/esm2015/lib/table/table.module.js +0 -84
  1089. package/esm2015/lib/table/table.static-data-source.js +0 -135
  1090. package/esm2015/messaia-cdk.js +0 -29
  1091. package/fesm2015/messaia-cdk.js +0 -15733
  1092. package/fesm2015/messaia-cdk.js.map +0 -1
  1093. package/messaia-cdk.metadata.json +0 -1
@@ -1,565 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import { FormGroup, FormArray, FormControl, FormBuilder } from "@angular/forms";
3
- import { BaseFormBuilder } from './base-form-builder';
4
- import { ReactiveFormConfig } from '../util/reactive-form-config';
5
- import { defaultContainer } from '../core/defaultContainer';
6
- import { FormBuilderConfiguration } from "../models";
7
- import { ARRAY_PROPERTY, OBJECT_PROPERTY, PROPERTY, FUNCTION_STRING, OBJECT_STRING, RX_WEB_VALIDATOR, NUMBER, BOOLEAN, STRING, MODEL } from "../const";
8
- import { AnnotationTypes } from "../core/validator.static";
9
- import { conditionalChangeValidator } from "../reactive-form-validators/conditional-change.validator";
10
- import { Linq } from '../util/linq';
11
- import { APP_VALIDATORS } from '../const/app-validators.const';
12
- import { RxFormControl } from './form-control';
13
- import { RxFormGroup } from './rx-form-group';
14
- import { RxFormArray } from './rx-form-array';
15
- import { andValidator } from '../reactive-form-validators/and.validator';
16
- import { orValidator } from '../reactive-form-validators/or.validator';
17
- import { notValidator } from '../reactive-form-validators/not.validator';
18
- import { RegexValidator } from "../util/regex-validator";
19
- const LOGICAL_VALIDATORS = { and: andValidator, or: orValidator, not: notValidator };
20
- const ASYNC = "async";
21
- const ENTITY_OBJECT = "entityObject";
22
- export class RxFormBuilder extends BaseFormBuilder {
23
- constructor() {
24
- super();
25
- this.conditionalObjectProps = [];
26
- this.conditionalValidationInstance = {};
27
- this.builderConfigurationConditionalObjectProps = [];
28
- this.formGroupPropOtherValidator = {};
29
- this.currentFormGroupPropOtherValidator = {};
30
- this.isNested = false;
31
- this.isGroupCalled = false;
32
- this.isNestedBinding = false;
33
- }
34
- getInstanceContainer(instanceFunc, entityObject) {
35
- return this.instaceProvider(instanceFunc, entityObject);
36
- }
37
- setValue(formGroup, object) {
38
- for (var col in object) {
39
- var control = formGroup.get([col]);
40
- control.setValue(object[col]);
41
- control.updateValueAndValidity();
42
- }
43
- }
44
- extractExpressions(fomrBuilderConfiguration) {
45
- if (fomrBuilderConfiguration && fomrBuilderConfiguration.dynamicValidation) {
46
- for (var property in fomrBuilderConfiguration.dynamicValidation) {
47
- for (var decorator in fomrBuilderConfiguration.dynamicValidation[property]) {
48
- if (fomrBuilderConfiguration.dynamicValidation[property][decorator].conditionalExpression) {
49
- let columns = Linq.expressionColumns(fomrBuilderConfiguration.dynamicValidation[property][decorator].conditionalExpression);
50
- defaultContainer.addChangeValidation(this.conditionalValidationInstance, property, columns);
51
- }
52
- }
53
- }
54
- }
55
- return null;
56
- }
57
- addAsyncValidation(property, propertyValidators, propValidationConfig) {
58
- let asyncValidators = [];
59
- if (propertyValidators) {
60
- for (let propertyValidator of propertyValidators) {
61
- if (propertyValidator.isAsync)
62
- propertyValidator.config.forEach(t => { asyncValidators.push(t); });
63
- }
64
- }
65
- if (propValidationConfig && propValidationConfig[ASYNC]) {
66
- propValidationConfig[ASYNC].forEach(t => { asyncValidators.push(t); });
67
- }
68
- return asyncValidators;
69
- }
70
- addFormControl(property, propertyValidators, propValidationConfig, instance, entity) {
71
- let validators = [];
72
- let columns = [];
73
- if ((instance.conditionalValidationProps && instance.conditionalValidationProps[property.name]) || (this.conditionalValidationInstance.conditionalValidationProps && this.conditionalValidationInstance.conditionalValidationProps[property.name])) {
74
- let props = [];
75
- if ((instance.conditionalValidationProps && instance.conditionalValidationProps[property.name]))
76
- instance.conditionalValidationProps[property.name].forEach(t => props.push(t));
77
- if (this.conditionalValidationInstance.conditionalValidationProps && this.conditionalValidationInstance.conditionalValidationProps[property.name])
78
- this.conditionalValidationInstance.conditionalValidationProps[property.name].forEach(t => props.push(t));
79
- validators.push(conditionalChangeValidator(props));
80
- }
81
- if (this.conditionalObjectProps.length > 0 || this.builderConfigurationConditionalObjectProps.length > 0) {
82
- let propConditions = [];
83
- if (this.conditionalObjectProps)
84
- propConditions = this.conditionalObjectProps.filter(t => t.propName == property.name);
85
- if (this.builderConfigurationConditionalObjectProps)
86
- this.builderConfigurationConditionalObjectProps.filter(t => t.propName == property.name).forEach(t => propConditions.push(t));
87
- propConditions.forEach(t => {
88
- if (t.referencePropName && columns.indexOf(t.referencePropName) == -1)
89
- columns.push(t.referencePropName);
90
- });
91
- if (columns.length > 0)
92
- validators.push(conditionalChangeValidator(columns));
93
- }
94
- for (let propertyValidator of propertyValidators) {
95
- if (!propertyValidator.isAsync)
96
- switch (propertyValidator.annotationType) {
97
- case AnnotationTypes.rule:
98
- validators.push(APP_VALIDATORS[propertyValidator.annotationType](propertyValidator.config, entity));
99
- break;
100
- case AnnotationTypes.and:
101
- case AnnotationTypes.or:
102
- case AnnotationTypes.not:
103
- validators.push(LOGICAL_VALIDATORS[propertyValidator.annotationType](propertyValidator.config));
104
- break;
105
- default:
106
- validators.push(APP_VALIDATORS[propertyValidator.annotationType](propertyValidator.config));
107
- break;
108
- }
109
- }
110
- if (propValidationConfig)
111
- this.additionalValidation(validators, propValidationConfig);
112
- if (this.currentFormGroupPropOtherValidator[property.name])
113
- this.currentFormGroupPropOtherValidator[property.name].forEach(t => { validators.push(t); });
114
- return validators;
115
- }
116
- additionalValidation(validations, propValidationConfig) {
117
- for (var col in AnnotationTypes) {
118
- if (propValidationConfig[AnnotationTypes[col]] && col != "custom") {
119
- validations.push(APP_VALIDATORS[AnnotationTypes[col]](propValidationConfig[AnnotationTypes[col]]));
120
- }
121
- else if (col == AnnotationTypes.custom && propValidationConfig[AnnotationTypes[col]])
122
- validations.push(propValidationConfig[col]);
123
- }
124
- }
125
- getEntity(object, formBuilderConfiguration, propertyName, isSameObjectConstructor = false) {
126
- if (formBuilderConfiguration && formBuilderConfiguration.genericEntities && formBuilderConfiguration.genericEntities[propertyName])
127
- return formBuilderConfiguration.genericEntities[propertyName];
128
- return isSameObjectConstructor ? object.constructor : undefined;
129
- }
130
- getObjectPropertyInstance(object, propertyInfo, formBuilderConfiguration) {
131
- if (propertyInfo.propertyType == OBJECT_PROPERTY && object[propertyInfo.name])
132
- return object[propertyInfo.name].constructor;
133
- else if (propertyInfo.propertyType == ARRAY_PROPERTY && object[propertyInfo.name] && object[propertyInfo.name].length > 0)
134
- return object[propertyInfo.name][0].constructor;
135
- return this.getEntity(object, formBuilderConfiguration, propertyInfo.name);
136
- }
137
- checkObjectPropAdditionalValidation(instanceContainer, object, formBuilderConfiguration) {
138
- var props = instanceContainer.properties.filter(t => t.propertyType == OBJECT_PROPERTY || t.propertyType == ARRAY_PROPERTY);
139
- props.forEach(t => {
140
- let entity = t.entity;
141
- if (!t.entity)
142
- entity = this.getObjectPropertyInstance(object, t, formBuilderConfiguration);
143
- if (entity) {
144
- let instance = this.getInstanceContainer(entity, null);
145
- if (instance && instance.conditionalValidationProps) {
146
- for (var key in instance.conditionalValidationProps) {
147
- var prop = instanceContainer.properties.filter(t => t.name == key)[0];
148
- if (prop) {
149
- if (!instanceContainer.conditionalValidationProps)
150
- instanceContainer.conditionalValidationProps = {};
151
- if (!instanceContainer.conditionalValidationProps[key])
152
- instanceContainer.conditionalValidationProps[key] = [];
153
- instance.conditionalValidationProps[key].forEach(x => {
154
- if (t.propertyType != ARRAY_PROPERTY)
155
- instanceContainer.conditionalValidationProps[key].push([t.name, x].join('.'));
156
- else
157
- instanceContainer.conditionalValidationProps[key].push([t.name, x].join('[]'));
158
- });
159
- }
160
- }
161
- }
162
- }
163
- });
164
- }
165
- getObject(model, entityObject, formBuilderConfiguration) {
166
- let json = {};
167
- if (typeof model == FUNCTION_STRING)
168
- json.model = model;
169
- if (typeof model == FUNCTION_STRING && (entityObject instanceof FormBuilderConfiguration)) {
170
- json.entityObject = this.createClassObject(json.model, entityObject);
171
- }
172
- if (entityObject && !(entityObject instanceof FormBuilderConfiguration))
173
- json.entityObject = entityObject;
174
- if (entityObject instanceof FormBuilderConfiguration && !formBuilderConfiguration)
175
- json.formBuilderConfiguration = entityObject;
176
- else if (!(entityObject instanceof FormBuilderConfiguration) && formBuilderConfiguration) {
177
- json.formBuilderConfiguration = formBuilderConfiguration;
178
- json.entityObject = this.createClassObject(json.model, json.formBuilderConfiguration, json.entityObject);
179
- }
180
- if (!entityObject) {
181
- if (typeof model == OBJECT_STRING)
182
- json.model = model.constructor;
183
- json.entityObject = this.createClassObject(json.model, json.formBuilderConfiguration, model);
184
- }
185
- else if (model && (entityObject instanceof FormBuilderConfiguration) && (typeof model == OBJECT_STRING)) {
186
- json[MODEL] = model.constructor;
187
- json[ENTITY_OBJECT] = this.createClassObject(json.model, json.formBuilderConfiguration, model);
188
- }
189
- return json;
190
- }
191
- control(value, validators, asyncValidators) {
192
- return new RxFormControl(value, validators, asyncValidators, {}, {}, '', []);
193
- }
194
- array(values, validatorConfig) {
195
- let formArray = this.group({ temp: values }, validatorConfig).get("temp");
196
- var formBuilder = new FormBuilder();
197
- return formBuilder.array(formArray.controls);
198
- }
199
- group(groupObject, validatorConfig) {
200
- let modelInstance = super.createInstance();
201
- let entityObject = {};
202
- this.formGroupPropOtherValidator = {};
203
- this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;
204
- this.createValidatorFormGroup(groupObject, entityObject, modelInstance, validatorConfig);
205
- this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;
206
- this.isGroupCalled = true;
207
- let formGroup = this.formGroup(modelInstance.constructor, entityObject, validatorConfig);
208
- this.isGroupCalled = false;
209
- this.formGroupPropOtherValidator = {};
210
- this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;
211
- this.formGroupPropOtherValidator = {};
212
- return formGroup;
213
- }
214
- applyAllPropValidator(propName, validatorConfig, modelInstance) {
215
- if (validatorConfig && validatorConfig.applyAllProps) {
216
- if (!(validatorConfig.excludeProps && validatorConfig.excludeProps.length > 0 && validatorConfig.excludeProps.indexOf(propName) == -1)) {
217
- validatorConfig.applyAllProps.forEach((t) => {
218
- if (t.name == RX_WEB_VALIDATOR) {
219
- t(propName, modelInstance);
220
- }
221
- else {
222
- if (!this.currentFormGroupPropOtherValidator[propName])
223
- this.currentFormGroupPropOtherValidator[propName] = [];
224
- this.currentFormGroupPropOtherValidator[propName].push(t);
225
- }
226
- });
227
- }
228
- }
229
- }
230
- dynamicValidationPropCheck(propName, validatorConfig) {
231
- return (validatorConfig == undefined) ? true : (!validatorConfig.dynamicValidationConfigurationPropertyName) ? true : validatorConfig.dynamicValidationConfigurationPropertyName == propName ? false : true;
232
- }
233
- isNotObject(value) {
234
- return value instanceof Date || value === null || typeof value != OBJECT_STRING;
235
- }
236
- createValidatorFormGroup(groupObject, entityObject, modelInstance, validatorConfig) {
237
- for (var propName in groupObject) {
238
- var prop = groupObject[propName];
239
- if (prop instanceof Array && prop.length > 0 && this.isNotObject(prop[0])) {
240
- let propValidators = (prop.length > 1 && prop[1] instanceof Array) ? prop[1] : (prop.length == 2) ? [prop[1]] : [];
241
- let propertyAdded = false;
242
- for (var i = 0; i < propValidators.length; i++) {
243
- if (propValidators[i].name == RX_WEB_VALIDATOR) {
244
- propValidators[i](propName, modelInstance);
245
- propertyAdded = true;
246
- }
247
- else {
248
- if (!this.currentFormGroupPropOtherValidator[propName])
249
- this.currentFormGroupPropOtherValidator[propName] = [];
250
- this.currentFormGroupPropOtherValidator[propName].push(propValidators[i]);
251
- }
252
- }
253
- if (!propertyAdded)
254
- defaultContainer.initPropertyObject(propName, PROPERTY, undefined, typeof modelInstance == OBJECT_STRING ? modelInstance : { constructor: modelInstance });
255
- this.applyAllPropValidator(propName, validatorConfig, modelInstance);
256
- }
257
- else if (prop === null || prop === undefined || typeof prop == STRING || typeof prop == NUMBER || typeof prop == BOOLEAN || prop instanceof Date) {
258
- defaultContainer.initPropertyObject(propName, PROPERTY, undefined, typeof modelInstance == OBJECT_STRING ? modelInstance : { constructor: modelInstance });
259
- this.applyAllPropValidator(propName, validatorConfig, modelInstance);
260
- }
261
- else if (prop instanceof Array) {
262
- if (prop instanceof FormArray) {
263
- entityObject[propName] = prop;
264
- }
265
- else {
266
- let propModelInstance = super.createInstance();
267
- if (typeof modelInstance == "function")
268
- modelInstance.constructor = modelInstance;
269
- defaultContainer.initPropertyObject(propName, ARRAY_PROPERTY, propModelInstance.constructor, modelInstance);
270
- entityObject[propName] = [];
271
- for (let row of prop) {
272
- let jObject = {};
273
- entityObject[propName].push(jObject);
274
- this.createValidatorFormGroup(row, jObject, propModelInstance.constructor, validatorConfig);
275
- }
276
- }
277
- }
278
- else if (typeof prop == OBJECT_STRING && !(prop instanceof FormControl || prop instanceof RxFormControl)) {
279
- let formGroup = (prop instanceof FormArray) ? prop.controls[0] : prop;
280
- if (!formGroup.model && (prop instanceof FormGroup || prop instanceof RxFormGroup)) {
281
- formGroup = this.group(formGroup.controls);
282
- }
283
- if (prop instanceof FormGroup || prop instanceof RxFormGroup) {
284
- entityObject[propName] = prop;
285
- defaultContainer.initPropertyObject(propName, OBJECT_PROPERTY, formGroup.model, modelInstance);
286
- }
287
- else if (prop instanceof FormArray) {
288
- entityObject[propName] = prop;
289
- defaultContainer.initPropertyObject(propName, ARRAY_PROPERTY, formGroup.model, modelInstance);
290
- }
291
- else {
292
- if (this.dynamicValidationPropCheck(propName, validatorConfig)) {
293
- this.formGroupPropOtherValidator[propName] = {};
294
- this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[propName];
295
- let propModelInstance = super.createInstance();
296
- entityObject[propName] = {};
297
- entityObject[propName].constructor = propModelInstance.constructor;
298
- defaultContainer.initPropertyObject(propName, OBJECT_PROPERTY, entityObject[propName].constructor, modelInstance.constructor == Function ? { constructor: modelInstance } : modelInstance);
299
- let objectValidationConfig = this.getValidatorConfig(validatorConfig, groupObject, propName + ".");
300
- this.createValidatorFormGroup(groupObject[propName], entityObject[propName], entityObject[propName].constructor, objectValidationConfig);
301
- }
302
- else
303
- entityObject[propName] = groupObject[propName];
304
- }
305
- }
306
- if (typeof prop == STRING || typeof prop == NUMBER || typeof prop == BOOLEAN || prop instanceof Date) {
307
- entityObject[propName] = prop;
308
- }
309
- else if ((prop && prop.length > 0 && this.isNotObject(prop[0]) && !(prop instanceof FormControl || prop instanceof RxFormControl) && !(prop instanceof FormArray))) {
310
- entityObject[propName] = prop[0];
311
- }
312
- else if (prop instanceof FormArray) {
313
- entityObject[propName] = prop;
314
- }
315
- else if (prop instanceof FormControl || prop instanceof RxFormControl) {
316
- entityObject[propName] = prop;
317
- defaultContainer.initPropertyObject(propName, PROPERTY, undefined, modelInstance.constructor ? modelInstance : { constructor: modelInstance });
318
- }
319
- }
320
- }
321
- getValidatorConfig(validatorConfig, entityObject, rootPropertyName, arrayPropertyName) {
322
- let excludeProps = [];
323
- let includeProps = [];
324
- let ignoreUndefinedProps = [];
325
- if (!validatorConfig)
326
- return {};
327
- const validationProps = this.getObjectForProperty(validatorConfig.dynamicValidation, rootPropertyName, arrayPropertyName);
328
- const abstractControlOptions = this.getObjectForProperty(validatorConfig.abstractControlOptions, rootPropertyName, arrayPropertyName);
329
- if (validatorConfig.excludeProps)
330
- excludeProps = this.getProps(validatorConfig.excludeProps, rootPropertyName);
331
- if (validatorConfig.includeProps)
332
- includeProps = this.getProps(validatorConfig.includeProps, rootPropertyName);
333
- if (validatorConfig.ignoreUndefinedProps)
334
- ignoreUndefinedProps = this.getProps(validatorConfig.ignoreUndefinedProps, rootPropertyName, true);
335
- if (!Object.keys(abstractControlOptions).length && rootPropertyName.endsWith('.') && validatorConfig.abstractControlOptions && validatorConfig.abstractControlOptions[rootPropertyName.substring(0, rootPropertyName.length - 1)])
336
- abstractControlOptions['global'] = validatorConfig.abstractControlOptions[rootPropertyName.substring(0, rootPropertyName.length - 1)];
337
- const dynamicValidation = (validatorConfig.dynamicValidationConfigurationPropertyName && entityObject[validatorConfig.dynamicValidationConfigurationPropertyName]) ? entityObject[validatorConfig.dynamicValidationConfigurationPropertyName] : validationProps;
338
- return { ignoreUndefinedProps: ignoreUndefinedProps, includeProps: includeProps, dynamicValidation: dynamicValidation, excludeProps: excludeProps, abstractControlOptions: abstractControlOptions };
339
- }
340
- getObjectForProperty(rootObject, rootPropertyName, arrayPropertyName) {
341
- const result = {};
342
- for (let propName in rootObject) {
343
- if (!propName.startsWith(rootPropertyName) && (!arrayPropertyName || !propName.startsWith(arrayPropertyName)))
344
- continue;
345
- let splitProp = propName.split(".", 2)[1];
346
- if (!splitProp)
347
- continue;
348
- result[splitProp] = rootObject[propName];
349
- }
350
- return result;
351
- }
352
- getProps(properties, rootPropertyName, isIgnoreProp = false) {
353
- let props = [];
354
- for (let prop of properties) {
355
- if (prop.indexOf(rootPropertyName) != -1) {
356
- let splitProps = prop.split(".");
357
- if (splitProps.length == 2) {
358
- props.push(splitProps[1]);
359
- }
360
- else if (splitProps.length > 2) {
361
- splitProps.splice(0, 1);
362
- props.push(splitProps.join("."));
363
- }
364
- }
365
- }
366
- if (isIgnoreProp && properties.filter(x => x == rootPropertyName.replace('.', '')).length == 1)
367
- props.push(':self:');
368
- return props;
369
- }
370
- formGroup(model, entityObject, formBuilderConfiguration) {
371
- let json = this.getObject(model, entityObject, formBuilderConfiguration);
372
- model = json.model;
373
- entityObject = json.entityObject;
374
- if (entityObject.constructor != model && !this.isGroupCalled) {
375
- entityObject = json.entityObject = this.updateObject(model, json.entityObject, formBuilderConfiguration);
376
- }
377
- formBuilderConfiguration = json.formBuilderConfiguration;
378
- if (formBuilderConfiguration)
379
- this.extractExpressions(formBuilderConfiguration);
380
- let instanceContainer = this.getInstanceContainer(model, entityObject);
381
- this.checkObjectPropAdditionalValidation(instanceContainer, entityObject, formBuilderConfiguration);
382
- let formGroupObject = {};
383
- let extendedProperties = {};
384
- let formChildGroup = undefined;
385
- let formArrayGroup = undefined;
386
- var additionalValidations = {};
387
- instanceContainer.properties.forEach(property => {
388
- let isIncludeProp = true;
389
- if (formBuilderConfiguration) {
390
- if (formBuilderConfiguration.excludeProps && formBuilderConfiguration.excludeProps.length > 0)
391
- isIncludeProp = formBuilderConfiguration.excludeProps.indexOf(property.name) == -1;
392
- if (formBuilderConfiguration.dynamicValidation)
393
- additionalValidations = formBuilderConfiguration.dynamicValidation;
394
- if (formBuilderConfiguration.includeProps && formBuilderConfiguration.includeProps.length > 0)
395
- isIncludeProp = formBuilderConfiguration.includeProps.indexOf(property.name) != -1;
396
- if (formBuilderConfiguration.ignoreUndefinedProps && formBuilderConfiguration.ignoreUndefinedProps.length > 0) {
397
- isIncludeProp = !(property.propertyType == PROPERTY && !RegexValidator.isNotBlank(json.entityObject[property.name]) && (formBuilderConfiguration.ignoreUndefinedProps.indexOf(property.name) !== -1 || formBuilderConfiguration.ignoreUndefinedProps.indexOf(":self:") !== -1));
398
- }
399
- }
400
- if (property.ignore)
401
- isIncludeProp = !property.ignore.call(json.entityObject, json.entityObject);
402
- if (isIncludeProp) {
403
- switch (property.propertyType) {
404
- case PROPERTY:
405
- if (!(entityObject[property.name] instanceof FormControl || entityObject[property.name] instanceof RxFormControl)) {
406
- let propertyValidators = instanceContainer.propertyAnnotations.filter(t => t.propertyName == property.name);
407
- let sanitizeValue = super.sanitizeValue(instanceContainer, property.name, super.getDefaultValue(property, entityObject[property.name], formBuilderConfiguration), json.entityObject, Object.assign({}, json.entityObject));
408
- if (entityObject[property.name] === undefined && sanitizeValue)
409
- entityObject[property.name] = sanitizeValue;
410
- let validators = this.addFormControl(property, propertyValidators, additionalValidations[property.name], instanceContainer, entityObject);
411
- let abstractControlOptions = { validators: validators, asyncValidators: this.addAsyncValidation(property, propertyValidators, additionalValidations[property.name]) };
412
- abstractControlOptions = this.getAbstractControlOptions(property.name, formBuilderConfiguration, abstractControlOptions);
413
- if (property.updateOn && !abstractControlOptions.updateOn)
414
- abstractControlOptions.updateOn = property.updateOn;
415
- formGroupObject[property.name] = new RxFormControl(sanitizeValue, abstractControlOptions, [], json.entityObject, Object.assign({}, json.entityObject), property.name, instanceContainer.sanitizers[property.name]);
416
- this.isNested = false;
417
- }
418
- else
419
- formGroupObject[property.name] = super.getDefaultValue(property, entityObject[property.name], formBuilderConfiguration);
420
- extendedProperties[property.name] = true;
421
- break;
422
- case OBJECT_PROPERTY:
423
- let objectValue = entityObject[property.name];
424
- if (objectValue && objectValue instanceof Object && !(objectValue instanceof FormGroup || objectValue instanceof RxFormGroup)) {
425
- this.isNestedBinding = this.isNested = true;
426
- if (instanceContainer && instanceContainer.conditionalObjectProps)
427
- this.conditionalObjectProps = instanceContainer.conditionalObjectProps.filter(t => t.objectPropName == property.name);
428
- if (this.conditionalValidationInstance && this.conditionalValidationInstance.conditionalObjectProps)
429
- this.builderConfigurationConditionalObjectProps = this.conditionalValidationInstance.conditionalObjectProps.filter(t => t.objectPropName == property.name);
430
- if (this.formGroupPropOtherValidator[property.name])
431
- this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[property.name];
432
- let objectValidationConfig = this.getValidatorConfig(formBuilderConfiguration, objectValue, `${property.name}.`);
433
- let entity = property.entityProvider ? property.entityProvider.call(entityObject) : undefined;
434
- formGroupObject[property.name] = this.formGroup(entity || property.entity || this.getEntity(objectValue, formBuilderConfiguration, property.name, true), objectValue, objectValidationConfig);
435
- this.conditionalObjectProps = [];
436
- this.builderConfigurationConditionalObjectProps = [];
437
- this.isNestedBinding = this.isNested = false;
438
- }
439
- else if (objectValue instanceof FormGroup || objectValue instanceof RxFormGroup)
440
- formGroupObject[property.name] = objectValue;
441
- break;
442
- case ARRAY_PROPERTY:
443
- let arrayObjectValue = entityObject[property.name];
444
- if (arrayObjectValue && arrayObjectValue instanceof Array && !(arrayObjectValue instanceof FormArray)) {
445
- this.isNestedBinding = this.isNested = true;
446
- var formArrayGroup = [];
447
- let index = 0;
448
- let entity = property.entityProvider ? property.entityProvider.call(entityObject) : undefined;
449
- let objectValidationConfig = null;
450
- for (let subObject of arrayObjectValue) {
451
- if (instanceContainer && instanceContainer.conditionalObjectProps)
452
- this.conditionalObjectProps = instanceContainer.conditionalObjectProps.filter(t => t.objectPropName == property.name && t.arrayIndex == index);
453
- if (this.conditionalValidationInstance && this.conditionalValidationInstance.conditionalObjectProps)
454
- this.builderConfigurationConditionalObjectProps = this.conditionalValidationInstance.conditionalObjectProps.filter(t => t.objectPropName == property.name && t.arrayIndex == index);
455
- if (this.formGroupPropOtherValidator[property.name])
456
- this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[property.name];
457
- objectValidationConfig = this.getValidatorConfig(formBuilderConfiguration, subObject, `${property.name}.`, `${property.name}[${index}].`);
458
- formArrayGroup.push(this.formGroup(entity || property.entity || this.getEntity(subObject, formBuilderConfiguration, property.name, true), subObject, objectValidationConfig));
459
- index++;
460
- this.conditionalObjectProps = [];
461
- this.builderConfigurationConditionalObjectProps = [];
462
- }
463
- let abstractControlOptions = this.getAbstractControlOptions(property.name, formBuilderConfiguration, {});
464
- formGroupObject[property.name] = new RxFormArray(arrayObjectValue, formArrayGroup, abstractControlOptions, null, property.arrayConfig);
465
- if (ReactiveFormConfig.autoInstancePush) {
466
- arrayObjectValue.push = (instance) => { let formGroup = this.formGroup(instance.constructor, instance, objectValidationConfig); formGroupObject[property.name].push(formGroup, { isAddedInstance: true }); return 0; };
467
- arrayObjectValue.splice = (start, deleteCount) => {
468
- let end = (start + deleteCount) - 1;
469
- for (var i = start; i <= end; i++) {
470
- formGroupObject[property.name].removeAt(i, { isRemovedInstance: true });
471
- }
472
- return [];
473
- };
474
- }
475
- this.isNestedBinding = this.isNested = false;
476
- }
477
- else if (arrayObjectValue instanceof FormArray)
478
- formGroupObject[property.name] = arrayObjectValue;
479
- else if (property.arrayConfig && property.arrayConfig.createBlank)
480
- formGroupObject[property.name] = new RxFormArray([], [], null, null, property.arrayConfig);
481
- break;
482
- }
483
- }
484
- });
485
- if (!this.isNested) {
486
- this.conditionalValidationInstance = {};
487
- this.builderConfigurationConditionalObjectProps = [];
488
- }
489
- let abstractControlOptions = {
490
- validators: [],
491
- asyncValidators: [],
492
- updateOn: formBuilderConfiguration && formBuilderConfiguration.abstractControlOptions && formBuilderConfiguration.abstractControlOptions['global']
493
- ? formBuilderConfiguration.abstractControlOptions['global']
494
- : undefined
495
- };
496
- abstractControlOptions = this.getAbstractControlOptions("global", formBuilderConfiguration, abstractControlOptions);
497
- let formGroup = new RxFormGroup(json.model, json.entityObject, formGroupObject, abstractControlOptions);
498
- if (defaultContainer.isExperimental) {
499
- json.entityObject["formGroup"] = formGroup;
500
- this.overrideProperties(formGroup, json.entityObject, extendedProperties);
501
- }
502
- if (!this.isNestedBinding && !this.isGroupCalled)
503
- formGroup.refreshDisable();
504
- return formGroup;
505
- }
506
- overrideProperties(formGroup, entityObject, properties) {
507
- Object.keys(properties).forEach(t => {
508
- this.overrideProp(entityObject, t, formGroup);
509
- });
510
- }
511
- getAbstractControlOptions(name, formBuilderConfiguration, abstractControlOptions) {
512
- if (formBuilderConfiguration && formBuilderConfiguration.abstractControlOptions && formBuilderConfiguration.abstractControlOptions[name])
513
- abstractControlOptions.updateOn = formBuilderConfiguration.abstractControlOptions[name];
514
- const controlOptions = formBuilderConfiguration ? formBuilderConfiguration.baseAbstractControlOptions : null;
515
- if (controlOptions && controlOptions[name]) {
516
- if (controlOptions[name].updateOn)
517
- abstractControlOptions.updateOn = controlOptions[name].updateOn;
518
- if (controlOptions[name].validators) {
519
- if (Array.isArray(controlOptions[name].validators))
520
- controlOptions[name].validators.forEach(validator => abstractControlOptions.validators.push(validator));
521
- else
522
- abstractControlOptions.validators.push(controlOptions[name].validators);
523
- }
524
- if (controlOptions[name].asyncValidators) {
525
- if (Array.isArray(controlOptions[name].asyncValidators))
526
- controlOptions[name].asyncValidators.forEach(validator => abstractControlOptions.asyncValidators.push(validator));
527
- else
528
- abstractControlOptions.asyncValidators.push(controlOptions[name].validators);
529
- }
530
- }
531
- return abstractControlOptions;
532
- }
533
- overrideProp(entityObject, propName, formGroup) {
534
- let descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(entityObject), propName);
535
- let value = entityObject[propName];
536
- let oldValue = null;
537
- Object.defineProperty(entityObject, propName, {
538
- get: () => { return descriptor ? descriptor.get.call(entityObject) : value; },
539
- set: (v) => {
540
- value = v;
541
- if (oldValue != v) {
542
- if (descriptor)
543
- descriptor.set.call(entityObject, v);
544
- if (!formGroup.changing && formGroup.controls[propName]) {
545
- formGroup.controls[propName].setValue(v);
546
- }
547
- }
548
- oldValue = v;
549
- }
550
- });
551
- }
552
- }
553
- /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
554
- RxFormBuilder.decorators = [
555
- { type: Injectable }
556
- ];
557
- /**
558
- * @type {function(): !Array<(null|{
559
- * type: ?,
560
- * decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
561
- * })>}
562
- * @nocollapse
563
- */
564
- RxFormBuilder.ctorParameters = () => [];
565
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3J4LWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBaUMsV0FBVyxFQUEwQixNQUFNLGdCQUFnQixDQUFBO0FBRXRJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBR3RKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ25DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FB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QU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztZQUM1RSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDUCxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtvQkFDZixJQUFJLFVBQVU7d0JBQ1YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNyRCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDNUM7aUJBQ0o7Z0JBQ0QsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNqQixDQUFDO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQzs7OztZQXRqQkosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQnVpbGRlciwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3V0aWxcIlxuaW1wb3J0IHsgQmFzZUZvcm1CdWlsZGVyIH0gZnJvbSAnLi9iYXNlLWZvcm0tYnVpbGRlcic7XG5cbmltcG9ydCB7IFJlYWN0aXZlRm9ybUNvbmZpZyB9IGZyb20gJy4uL3V0aWwvcmVhY3RpdmUtZm9ybS1jb25maWcnXG5pbXBvcnQgeyBkZWZhdWx0Q29udGFpbmVyIH0gZnJvbSAnLi4vY29yZS9kZWZhdWx0Q29udGFpbmVyJztcbmltcG9ydCB7IERlY29yYXRvckNvbmZpZ3VyYXRpb24sIEluc3RhbmNlQ29udGFpbmVyLCBQcm9wZXJ0eUluZm8gfSBmcm9tICcuLi9jb3JlL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzXCJcbmltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBPQkpFQ1RfUFJPUEVSVFksIFBST1BFUlRZLCBGVU5DVElPTl9TVFJJTkcsIE9CSkVDVF9TVFJJTkcsIFJYX1dFQl9WQUxJREFUT1IsIE5VTUJFUiwgQk9PTEVBTiwgU1RSSU5HLCBNT0RFTCB9IGZyb20gXCIuLi9jb25zdFwiXG5pbXBvcnQgeyBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvcHJvcC12YWxpZGF0aW9uLWNvbmZpZ1wiO1xuXG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiLi4vY29yZS92YWxpZGF0b3Iuc3RhdGljXCI7XG5pbXBvcnQgeyBjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvciB9IGZyb20gXCIuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvY29uZGl0aW9uYWwtY2hhbmdlLnZhbGlkYXRvclwiO1xuaW1wb3J0IHsgTGlucSB9IGZyb20gJy4uL3V0aWwvbGlucSdcbmltcG9ydCB7IEFQUF9WQUxJREFUT1JTIH0gZnJvbSAnLi4vY29uc3QvYXBwLXZhbGlkYXRvcnMuY29uc3QnXG5pbXBvcnQgeyBSeEZvcm1Db250cm9sIH0gZnJvbSAnLi9mb3JtLWNvbnRyb2wnO1xuaW1wb3J0IHsgUnhGb3JtR3JvdXAgfSBmcm9tICcuL3J4LWZvcm0tZ3JvdXAnXG5pbXBvcnQgeyBSeEZvcm1BcnJheSB9IGZyb20gJy4vcngtZm9ybS1hcnJheSc7XG5pbXBvcnQgeyBhbmRWYWxpZGF0b3IgfSBmcm9tICcuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvYW5kLnZhbGlkYXRvcidcbmltcG9ydCB7IG9yVmFsaWRhdG9yIH0gZnJvbSAnLi4vcmVhY3RpdmUtZm9ybS12YWxpZGF0b3JzL29yLnZhbGlkYXRvcidcbmltcG9ydCB7IG5vdFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9ub3QudmFsaWRhdG9yJ1xuaW1wb3J0IHsgQXBwRm9ybUdyb3VwIH0gZnJvbSAnLi4vbW9kZWxzL2ludGVyZmFjZS9pLWZvcm0tZ3JvdXAnXG5pbXBvcnQgeyBSZWdleFZhbGlkYXRvciB9IGZyb20gXCIuLi91dGlsL3JlZ2V4LXZhbGlkYXRvclwiO1xuaW1wb3J0IHsgZ2V0SW5zdGFuY2UgfSBmcm9tIFwiLi4vdXRpbC9pbnN0YW5jZS1wcm92aWRlci5mdW5jdGlvblwiO1xuaW1wb3J0IHsgSUFic3RyYWN0Q29udHJvbCB9IGZyb20gXCIuLi9tb2RlbHMvaW50ZXJmYWNlL2ktYWJzdHJhY3QtY29udHJvbFwiXG5jb25zdCBMT0dJQ0FMX1ZBTElEQVRPUlM6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfSA9IHsgYW5kOiBhbmRWYWxpZGF0b3IsIG9yOiBvclZhbGlkYXRvciwgbm90OiBub3RWYWxpZGF0b3IgfVxuY29uc3QgQVNZTkM6IHN0cmluZyA9IFwiYXN5bmNcIlxuY29uc3QgRU5USVRZX09CSkVDVDogc3RyaW5nID0gXCJlbnRpdHlPYmplY3RcIjtcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSeEZvcm1CdWlsZGVyIGV4dGVuZHMgQmFzZUZvcm1CdWlsZGVyIHtcbiAgICBwcml2YXRlIG5lc3RlZFByb3A6IHN0cmluZztcbiAgICBwcml2YXRlIGNvbmRpdGlvbmFsT2JqZWN0UHJvcHM6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBjb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZTogYW55ID0ge307XG4gICAgcHJpdmF0ZSBidWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHM6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBmb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBwcml2YXRlIGN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBwcml2YXRlIGlzTmVzdGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0dyb3VwQ2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc05lc3RlZEJpbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuXG5cbiAgICBwcml2YXRlIGdldEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYzogYW55LCBlbnRpdHlPYmplY3Q6IGFueSk6IEluc3RhbmNlQ29udGFpbmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFjZVByb3ZpZGVyKGluc3RhbmNlRnVuYywgZW50aXR5T2JqZWN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFZhbHVlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBvYmplY3Q6IGFueSk6IHZvaWQge1xuICAgICAgICBmb3IgKHZhciBjb2wgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICB2YXIgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoW2NvbF0pO1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShvYmplY3RbY29sXSk7XG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdEV4cHJlc3Npb25zKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9IHtcbiAgICAgICAgaWYgKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGRlY29yYXRvciBpbiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZXhwcmVzc2lvbkNvbHVtbnMoZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uW3Byb3BlcnR5XVtkZWNvcmF0b3JdLmNvbmRpdGlvbmFsRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmFkZENoYW5nZVZhbGlkYXRpb24odGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZSwgcHJvcGVydHksIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQXN5bmNWYWxpZGF0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eUluZm8sIHByb3BlcnR5VmFsaWRhdG9yczogRGVjb3JhdG9yQ29uZmlndXJhdGlvbltdLCBwcm9wVmFsaWRhdGlvbkNvbmZpZzogUHJvcFZhbGlkYXRpb25Db25maWcpIHtcbiAgICAgICAgbGV0IGFzeW5jVmFsaWRhdG9ycyA9IFtdO1xuICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwcm9wZXJ0eVZhbGlkYXRvciBvZiBwcm9wZXJ0eVZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3IuaXNBc3luYylcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZyAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBU1lOQ10pIHtcbiAgICAgICAgICAgIHByb3BWYWxpZGF0aW9uQ29uZmlnW0FTWU5DXS5mb3JFYWNoKHQgPT4geyBhc3luY1ZhbGlkYXRvcnMucHVzaCh0KSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRvcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGb3JtQ29udHJvbChwcm9wZXJ0eTogUHJvcGVydHlJbmZvLCBwcm9wZXJ0eVZhbGlkYXRvcnM6IERlY29yYXRvckNvbmZpZ3VyYXRpb25bXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnLCBpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIGVudGl0eTogYW55KSB7XG4gICAgICAgIGxldCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pIHx8ICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKSB7XG4gICAgICAgICAgICBsZXQgcHJvcHMgPSBbXTtcbiAgICAgICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKVxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKVxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKTtcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihwcm9wcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMubGVuZ3RoID4gMCB8fCB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgcHJvcENvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXG4gICAgICAgICAgICAgICAgcHJvcENvbmRpdGlvbnMgPSB0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5wcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcylcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0LnByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUpLmZvckVhY2godCA9PiBwcm9wQ29uZGl0aW9ucy5wdXNoKHQpKTtcbiAgICAgICAgICAgIHByb3BDb25kaXRpb25zLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHQucmVmZXJlbmNlUHJvcE5hbWUgJiYgY29sdW1ucy5pbmRleE9mKHQucmVmZXJlbmNlUHJvcE5hbWUpID09IC0xKVxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godC5yZWZlcmVuY2VQcm9wTmFtZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goY29uZGl0aW9uYWxDaGFuZ2VWYWxpZGF0b3IoY29sdW1ucykpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbGlkYXRvci5pc0FzeW5jKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMucnVsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLCBlbnRpdHkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLmFuZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMub3I6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLm5vdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChMT0dJQ0FMX1ZBTElEQVRPUlNbcHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGVdKHByb3BlcnR5VmFsaWRhdG9yLmNvbmZpZykpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbGlkYXRpb25Db25maWcpXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxWYWxpZGF0aW9uKHZhbGlkYXRvcnMsIHByb3BWYWxpZGF0aW9uQ29uZmlnKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXS5mb3JFYWNoKHQgPT4geyB2YWxpZGF0b3JzLnB1c2godCk7IH0pXG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkaXRpb25hbFZhbGlkYXRpb24odmFsaWRhdGlvbnM6IGFueVtdLCBwcm9wVmFsaWRhdGlvbkNvbmZpZzogUHJvcFZhbGlkYXRpb25Db25maWcgfCBhbnkpIHtcbiAgICAgICAgZm9yICh2YXIgY29sIGluIEFubm90YXRpb25UeXBlcykge1xuICAgICAgICAgICAgaWYgKHByb3BWYWxpZGF0aW9uQ29uZmlnW0Fubm90YXRpb25UeXBlc1tjb2xdXSAmJiBjb2wgIT0gXCJjdXN0b21cIikge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2goQVBQX1ZBTElEQVRPUlNbQW5ub3RhdGlvblR5cGVzW2NvbF1dKHByb3BWYWxpZGF0aW9uQ29uZmlnW0Fubm90YXRpb25UeXBlc1tjb2xdXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sID09IEFubm90YXRpb25UeXBlcy5jdXN0b20gJiYgcHJvcFZhbGlkYXRpb25Db25maWdbQW5ub3RhdGlvblR5cGVzW2NvbF1dKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gocHJvcFZhbGlkYXRpb25Db25maWdbY29sXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVudGl0eTxUPihvYmplY3Q6IFQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNTYW1lT2JqZWN0Q29uc3RydWN0b3I6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5nZW5lcmljRW50aXRpZXMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllc1twcm9wZXJ0eU5hbWVdKVxuICAgICAgICAgICAgcmV0dXJuIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5nZW5lcmljRW50aXRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgcmV0dXJuIGlzU2FtZU9iamVjdENvbnN0cnVjdG9yID8gb2JqZWN0LmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnByb3BlcnR5VHlwZSA9PSBPQkpFQ1RfUFJPUEVSVFkgJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXSlcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RbcHJvcGVydHlJbmZvLm5hbWVdLmNvbnN0cnVjdG9yO1xuICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZICYmIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV0gJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV1bMF0uY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eShvYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgcHJvcGVydHlJbmZvLm5hbWUpXG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uPFQ+KGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciwgb2JqZWN0OiBULCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgICB2YXIgcHJvcHMgPSBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0aWVzLmZpbHRlcih0ID0+IHQucHJvcGVydHlUeXBlID09IE9CSkVDVF9QUk9QRVJUWSB8fCB0LnByb3BlcnR5VHlwZSA9PSBBUlJBWV9QUk9QRVJUWSlcbiAgICAgICAgcHJvcHMuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0LmVudGl0eTtcbiAgICAgICAgICAgIGlmICghdC5lbnRpdHkpXG4gICAgICAgICAgICAgICAgZW50aXR5ID0gdGhpcy5nZXRPYmplY3RQcm9wZXJ0eUluc3RhbmNlKG9iamVjdCwgdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxuICAgICAgICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuZ2V0SW5zdGFuY2VDb250YWluZXIoZW50aXR5LCBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZmlsdGVyKHQgPT4gdC5uYW1lID09IGtleSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5wcm9wZXJ0eVR5cGUgIT0gQVJSQVlfUFJPUEVSVFkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignLicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignW10nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYmplY3QobW9kZWw6IGFueSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGVudGl0eU9iamVjdD86IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbj86IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICBsZXQganNvbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HKVxuICAgICAgICAgICAganNvbi5tb2RlbCA9IG1vZGVsO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKSB7XG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwgZW50aXR5T2JqZWN0KVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRpdHlPYmplY3QgJiYgIShlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKVxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSBlbnRpdHlPYmplY3Q7XG5cbiAgICAgICAgaWYgKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiAhZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxuICAgICAgICAgICAganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBlbnRpdHlPYmplY3Q7XG4gICAgICAgIGVsc2UgaWYgKCEoZW50aXR5T2JqZWN0IGluc3RhbmNlb2YgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uO1xuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSB0aGlzLmNyZWF0ZUNsYXNzT2JqZWN0KGpzb24ubW9kZWwsIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBqc29uLmVudGl0eU9iamVjdClcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKCFlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORylcbiAgICAgICAgICAgICAgICBqc29uLm1vZGVsID0gbW9kZWwuY29uc3RydWN0b3I7XG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG1vZGVsKVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pICYmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORykpIHtcbiAgICAgICAgICAgIGpzb25bTU9ERUxdID0gbW9kZWwuY29uc3RydWN0b3I7XG4gICAgICAgICAgICBqc29uW0VOVElUWV9PQkpFQ1RdID0gdGhpcy5jcmVhdGVDbGFzc09iamVjdChqc29uLm1vZGVsLCBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgbW9kZWwpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuXG5cblxuICAgIGNvbnRyb2wodmFsdWU/OiBhbnksIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbltdLCBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW10pOiBJQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSeEZvcm1Db250cm9sKHZhbHVlLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHt9LCB7fSwgJycsIFtdKTtcbiAgICB9XG5cbiAgICBhcnJheSh2YWx1ZXM6IFt7IFtrZXk6IHN0cmluZ106IGFueSB9XSwgdmFsaWRhdG9yQ29uZmlnPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmdyb3VwKHsgdGVtcDogdmFsdWVzIH0sIHZhbGlkYXRvckNvbmZpZykuZ2V0KFwidGVtcFwiKSBhcyBGb3JtQXJyYXk7XG4gICAgICAgIHZhciBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcigpO1xuICAgICAgICByZXR1cm4gZm9ybUJ1aWxkZXIuYXJyYXkoZm9ybUFycmF5LmNvbnRyb2xzKTtcbiAgICB9XG5cbiAgICBncm91cChncm91cE9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgdmFsaWRhdG9yQ29uZmlnPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogRm9ybUdyb3VwIHtcbiAgICAgICAgbGV0IG1vZGVsSW5zdGFuY2UgPSBzdXBlci5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgICBsZXQgZW50aXR5T2JqZWN0ID0ge307XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xuICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChncm91cE9iamVjdCwgZW50aXR5T2JqZWN0LCBtb2RlbEluc3RhbmNlLCB2YWxpZGF0b3JDb25maWcpO1xuICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcjtcbiAgICAgICAgdGhpcy5pc0dyb3VwQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwKG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IsIGVudGl0eU9iamVjdCwgdmFsaWRhdG9yQ29uZmlnKTtcbiAgICAgICAgdGhpcy5pc0dyb3VwQ2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHt9O1xuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlBbGxQcm9wVmFsaWRhdG9yKHByb3BOYW1lOiBzdHJpbmcsIHZhbGlkYXRvckNvbmZpZzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBtb2RlbEluc3RhbmNlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZyAmJiB2YWxpZGF0b3JDb25maWcuYXBwbHlBbGxQcm9wcykge1xuICAgICAgICAgICAgaWYgKCEodmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcyAmJiB2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLmxlbmd0aCA+IDAgJiYgdmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcy5pbmRleE9mKHByb3BOYW1lKSA9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JDb25maWcuYXBwbHlBbGxQcm9wcy5mb3JFYWNoKCh0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQubmFtZSA9PSBSWF9XRUJfVkFMSURBVE9SKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0KHByb3BOYW1lLCBtb2RlbEluc3RhbmNlKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0ucHVzaCh0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZHluYW1pY1ZhbGlkYXRpb25Qcm9wQ2hlY2socHJvcE5hbWU6IHN0cmluZywgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuICh2YWxpZGF0b3JDb25maWcgPT0gdW5kZWZpbmVkKSA/IHRydWUgOiAoIXZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUpID8gdHJ1ZSA6IHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUgPT0gcHJvcE5hbWUgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vdE9iamVjdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPSBPQkpFQ1RfU1RSSU5HO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKGdyb3VwT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBlbnRpdHlPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIG1vZGVsSW5zdGFuY2U6IGFueSwgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZ3JvdXBPYmplY3QpIHtcblxuICAgICAgICAgICAgdmFyIHByb3AgPSBncm91cE9iamVjdFtwcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEFycmF5ICYmIHByb3AubGVuZ3RoID4gMCAmJiB0aGlzLmlzTm90T2JqZWN0KHByb3BbMF0pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BWYWxpZGF0b3JzID0gKHByb3AubGVuZ3RoID4gMSAmJiBwcm9wWzFdIGluc3RhbmNlb2YgQXJyYXkpID8gcHJvcFsxXSA6IChwcm9wLmxlbmd0aCA9PSAyKSA/IFtwcm9wWzFdXSA6IFtdO1xuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eUFkZGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcFZhbGlkYXRvcnNbaV0ubmFtZSA9PSBSWF9XRUJfVkFMSURBVE9SKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wVmFsaWRhdG9yc1tpXShwcm9wTmFtZSwgbW9kZWxJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdLnB1c2gocHJvcFZhbGlkYXRvcnNbaV0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eUFkZGVkKVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgdHlwZW9mIG1vZGVsSW5zdGFuY2UgPT0gT0JKRUNUX1NUUklORyA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlBbGxQcm9wVmFsaWRhdG9yKHByb3BOYW1lLCB2YWxpZGF0b3JDb25maWcsIG1vZGVsSW5zdGFuY2UpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgPT09IG51bGwgfHwgcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBwcm9wID09IFNUUklORyB8fCB0eXBlb2YgcHJvcCA9PSBOVU1CRVIgfHwgdHlwZW9mIHByb3AgPT0gQk9PTEVBTiB8fCBwcm9wIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBQUk9QRVJUWSwgdW5kZWZpbmVkLCB0eXBlb2YgbW9kZWxJbnN0YW5jZSA9PSBPQkpFQ1RfU1RSSU5HID8gbW9kZWxJbnN0YW5jZSA6IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFsbFByb3BWYWxpZGF0b3IocHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZywgbW9kZWxJbnN0YW5jZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BNb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2RlbEluc3RhbmNlID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IgPSBtb2RlbEluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgQVJSQVlfUFJPUEVSVFksIHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yLCBtb2RlbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpPYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0ucHVzaChqT2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAocm93LCBqT2JqZWN0LCBwcm9wTW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciwgdmFsaWRhdG9yQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wID09IE9CSkVDVF9TVFJJTkcgJiYgIShwcm9wIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZm9ybUdyb3VwOiBhbnkgPSAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgPyBwcm9wLmNvbnRyb2xzWzBdIDogcHJvcFxuICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLm1vZGVsICYmIChwcm9wIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwID0gdGhpcy5ncm91cChmb3JtR3JvdXAuY29udHJvbHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBPQkpFQ1RfUFJPUEVSVFksIGZvcm1Hcm91cC5tb2RlbCwgbW9kZWxJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgQVJSQVlfUFJPUEVSVFksIGZvcm1Hcm91cC5tb2RlbCwgbW9kZWxJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHluYW1pY1ZhbGlkYXRpb25Qcm9wQ2hlY2socHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BNb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0uY29uc3RydWN0b3IgPSBwcm9wTW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBPQkpFQ1RfUFJPUEVSVFksIGVudGl0eU9iamVjdFtwcm9wTmFtZV0uY29uc3RydWN0b3IsIG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IgPT0gRnVuY3Rpb24gPyB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0gOiBtb2RlbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcodmFsaWRhdG9yQ29uZmlnLCBncm91cE9iamVjdCwgcHJvcE5hbWUgKyBcIi5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKGdyb3VwT2JqZWN0W3Byb3BOYW1lXSwgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSwgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5jb25zdHJ1Y3Rvciwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gZ3JvdXBPYmplY3RbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09IFNUUklORyB8fCB0eXBlb2YgcHJvcCA9PSBOVU1CRVIgfHwgdHlwZW9mIHByb3AgPT0gQk9PTEVBTiB8fCBwcm9wIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgocHJvcCAmJiBwcm9wLmxlbmd0aCA+IDAgJiYgdGhpcy5pc05vdE9iamVjdChwcm9wWzBdKSAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkgJiYgIShwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSkpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcFswXVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgbW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZGF0b3JDb25maWcodmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGVudGl0eU9iamVjdDogYW55LCByb290UHJvcGVydHlOYW1lOiBzdHJpbmcsIGFycmF5UHJvcGVydHlOYW1lPzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgbGV0IGV4Y2x1ZGVQcm9wcyA9IFtdO1xuICAgICAgICBsZXQgaW5jbHVkZVByb3BzID0gW107XG4gICAgICAgIGxldCBpZ25vcmVVbmRlZmluZWRQcm9wcyA9IFtdO1xuXG4gICAgICAgIGlmICghdmFsaWRhdG9yQ29uZmlnKSByZXR1cm4ge307XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb3BzID0gdGhpcy5nZXRPYmplY3RGb3JQcm9wZXJ0eSh2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb24sIHJvb3RQcm9wZXJ0eU5hbWUsIGFycmF5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgY29uc3QgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0T2JqZWN0Rm9yUHJvcGVydHkodmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnMsIHJvb3RQcm9wZXJ0eU5hbWUsIGFycmF5UHJvcGVydHlOYW1lKTtcblxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcylcbiAgICAgICAgICAgIGV4Y2x1ZGVQcm9wcyA9IHRoaXMuZ2V0UHJvcHModmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcywgcm9vdFByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmICh2YWxpZGF0b3JDb25maWcuaW5jbHVkZVByb3BzKVxuICAgICAgICAgICAgaW5jbHVkZVByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuaW5jbHVkZVByb3BzLCByb290UHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZy5pZ25vcmVVbmRlZmluZWRQcm9wcylcbiAgICAgICAgICAgIGlnbm9yZVVuZGVmaW5lZFByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuaWdub3JlVW5kZWZpbmVkUHJvcHMsIHJvb3RQcm9wZXJ0eU5hbWUsIHRydWUpO1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGFic3RyYWN0Q29udHJvbE9wdGlvbnMpLmxlbmd0aCAmJiByb290UHJvcGVydHlOYW1lLmVuZHNXaXRoKCcuJykgJiYgdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnMgJiYgdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbcm9vdFByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcm9vdFByb3BlcnR5TmFtZS5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICBhYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXSA9IHZhbGlkYXRvckNvbmZpZy5hYnN0cmFjdENvbnRyb2xPcHRpb25zW3Jvb3RQcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHJvb3RQcm9wZXJ0eU5hbWUubGVuZ3RoIC0gMSldO1xuXG4gICAgICAgIGNvbnN0IGR5bmFtaWNWYWxpZGF0aW9uID0gKHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUgJiYgZW50aXR5T2JqZWN0W3ZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWVdKSA/IGVudGl0eU9iamVjdFt2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlOYW1lXSA6IHZhbGlkYXRpb25Qcm9wcztcbiAgICAgICAgcmV0dXJuIHsgaWdub3JlVW5kZWZpbmVkUHJvcHM6IGlnbm9yZVVuZGVmaW5lZFByb3BzLCBpbmNsdWRlUHJvcHM6IGluY2x1ZGVQcm9wcywgZHluYW1pY1ZhbGlkYXRpb246IGR5bmFtaWNWYWxpZGF0aW9uLCBleGNsdWRlUHJvcHM6IGV4Y2x1ZGVQcm9wcywgYWJzdHJhY3RDb250cm9sT3B0aW9uczogYWJzdHJhY3RDb250cm9sT3B0aW9ucyB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYmplY3RGb3JQcm9wZXJ0eTxUPihyb290T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgcm9vdFByb3BlcnR5TmFtZTogc3RyaW5nLCBhcnJheVByb3BlcnR5TmFtZT86IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IFQgfSA9IHt9O1xuXG4gICAgICAgIGZvciAobGV0IHByb3BOYW1lIGluIHJvb3RPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICghcHJvcE5hbWUuc3RhcnRzV2l0aChyb290UHJvcGVydHlOYW1lKSAmJiAoIWFycmF5UHJvcGVydHlOYW1lIHx8ICFwcm9wTmFtZS5zdGFydHNXaXRoKGFycmF5UHJvcGVydHlOYW1lKSkpXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHNwbGl0UHJvcCA9IHByb3BOYW1lLnNwbGl0KFwiLlwiLCAyKVsxXTtcbiAgICAgICAgICAgIGlmICghc3BsaXRQcm9wKVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHJlc3VsdFtzcGxpdFByb3BdID0gcm9vdE9iamVjdFtwcm9wTmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvcHMocHJvcGVydGllczogc3RyaW5nW10sIHJvb3RQcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNJZ25vcmVQcm9wOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHByb3BzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChwcm9wLmluZGV4T2Yocm9vdFByb3BlcnR5TmFtZSkgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXRQcm9wcyA9IHByb3Auc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdFByb3BzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnB1c2goc3BsaXRQcm9wc1sxXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdFByb3BzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9wcy5zcGxpY2UoMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnB1c2goc3BsaXRQcm9wcy5qb2luKFwiLlwiKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSWdub3JlUHJvcCAmJiBwcm9wZXJ0aWVzLmZpbHRlcih4ID0+IHggPT0gcm9vdFByb3BlcnR5TmFtZS5yZXBsYWNlKCcuJywgJycpKS5sZW5ndGggPT0gMSlcbiAgICAgICAgICAgIHByb3BzLnB1c2goJzpzZWxmOicpO1xuXG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICBmb3JtR3JvdXA8VD4obW9kZWw6IFR5cGU8VD4gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBlbnRpdHlPYmplY3Q/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiBSeEZvcm1Hcm91cCB8IEZvcm1Hcm91cCB8IEFwcEZvcm1Hcm91cDxUPiB7XG4gICAgICAgIGxldCBqc29uID0gdGhpcy5nZXRPYmplY3QobW9kZWwsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcbiAgICAgICAgbW9kZWwgPSBqc29uLm1vZGVsO1xuICAgICAgICBlbnRpdHlPYmplY3QgPSBqc29uLmVudGl0eU9iamVjdDtcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdC5jb25zdHJ1Y3RvciAhPSBtb2RlbCAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKSB7XG4gICAgICAgICAgICBlbnRpdHlPYmplY3QgPSBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMudXBkYXRlT2JqZWN0KG1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjtcbiAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdEV4cHJlc3Npb25zKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIgPSB0aGlzLmdldEluc3RhbmNlQ29udGFpbmVyKG1vZGVsLCBlbnRpdHlPYmplY3QpO1xuICAgICAgICB0aGlzLmNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uKGluc3RhbmNlQ29udGFpbmVyLCBlbnRpdHlPYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCBmb3JtR3JvdXBPYmplY3QgPSB7fTtcbiAgICAgICAgbGV0IGV4dGVuZGVkUHJvcGVydGllcyA9IHt9O1xuICAgICAgICBsZXQgZm9ybUNoaWxkR3JvdXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBmb3JtQXJyYXlHcm91cCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxWYWxpZGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9ID0ge307XG4gICAgICAgIGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNJbmNsdWRlUHJvcCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5leGNsdWRlUHJvcHMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBpc0luY2x1ZGVQcm9wID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpID09IC0xXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFZhbGlkYXRpb25zID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaW5jbHVkZVByb3BzICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSAhPSAtMVxuICAgICAgICAgICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmlnbm9yZVVuZGVmaW5lZFByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9ICEocHJvcGVydHkucHJvcGVydHlUeXBlID09IFBST1BFUlRZICYmICFSZWdleFZhbGlkYXRvci5pc05vdEJsYW5rKGpzb24uZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdKSAmJiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmlnbm9yZVVuZGVmaW5lZFByb3BzLmluZGV4T2YocHJvcGVydHkubmFtZSkgIT09IC0xIHx8IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcy5pbmRleE9mKFwiOnNlbGY6XCIpICE9PSAtMSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkuaWdub3JlKVxuICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSAhcHJvcGVydHkuaWdub3JlLmNhbGwoanNvbi5lbnRpdHlPYmplY3QsIGpzb24uZW50aXR5T2JqZWN0KTtcbiAgICAgICAgICAgIGlmIChpc0luY2x1ZGVQcm9wKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQUk9QRVJUWTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5VmFsaWRhdG9ycyA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnR5QW5ub3RhdGlvbnMuZmlsdGVyKHQgPT4gdC5wcm9wZXJ0eU5hbWUgPT0gcHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNhbml0aXplVmFsdWUgPSBzdXBlci5zYW5pdGl6ZVZhbHVlKGluc3RhbmNlQ29udGFpbmVyLCBwcm9wZXJ0eS5uYW1lLCBzdXBlci5nZXREZWZhdWx0VmFsdWUocHJvcGVydHksIGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSwganNvbi5lbnRpdHlPYmplY3QsIE9iamVjdC5hc3NpZ24oe30sIGpzb24uZW50aXR5T2JqZWN0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9PT0gdW5kZWZpbmVkICYmIHNhbml0aXplVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IHNhbml0aXplVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSB0aGlzLmFkZEZvcm1Db250cm9sKHByb3BlcnR5LCBwcm9wZXJ0eVZhbGlkYXRvcnMsIGFkZGl0aW9uYWxWYWxpZGF0aW9uc1twcm9wZXJ0eS5uYW1lXSwgaW5zdGFuY2VDb250YWluZXIsIGVudGl0eU9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7IHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9yczogdGhpcy5hZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHksIHByb3BlcnR5VmFsaWRhdG9ycywgYWRkaXRpb25hbFZhbGlkYXRpb25zW3Byb3BlcnR5Lm5hbWVdKSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB0aGlzLmdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMocHJvcGVydHkubmFtZSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS51cGRhdGVPbiAmJiAhYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IHByb3BlcnR5LnVwZGF0ZU9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IG5ldyBSeEZvcm1Db250cm9sKHNhbml0aXplVmFsdWUsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIFtdLCBqc29uLmVudGl0eU9iamVjdCwgT2JqZWN0LmFzc2lnbih7fSwganNvbi5lbnRpdHlPYmplY3QpLCBwcm9wZXJ0eS5uYW1lLCBpbnN0YW5jZUNvbnRhaW5lci5zYW5pdGl6ZXJzW3Byb3BlcnR5Lm5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBzdXBlci5nZXREZWZhdWx0VmFsdWUocHJvcGVydHksIGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkUHJvcGVydGllc1twcm9wZXJ0eS5uYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBPQkpFQ1RfUFJPUEVSVFk6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsdWUgPSBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0VmFsdWUgJiYgb2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgIShvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXN0ZWRCaW5kaW5nID0gdGhpcy5pc05lc3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyICYmIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBvYmplY3RWYWx1ZSwgYCR7cHJvcGVydHkubmFtZX0uYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIgPyBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlci5jYWxsKGVudGl0eU9iamVjdCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gdGhpcy5mb3JtR3JvdXAoZW50aXR5IHx8IHByb3BlcnR5LmVudGl0eSB8fCB0aGlzLmdldEVudGl0eShvYmplY3RWYWx1ZSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eS5uYW1lLCB0cnVlKSwgb2JqZWN0VmFsdWUsIG9iamVjdFZhbGlkYXRpb25Db25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IG9iamVjdFZhbHVlIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gb2JqZWN0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBUlJBWV9QUk9QRVJUWTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheU9iamVjdFZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5T2JqZWN0VmFsdWUgJiYgYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmICEoYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtQXJyYXlHcm91cCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVudGl0eSA9IHByb3BlcnR5LmVudGl0eVByb3ZpZGVyID8gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIuY2FsbChlbnRpdHlPYmplY3QpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdWJPYmplY3Qgb2YgYXJyYXlPYmplY3RWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VDb250YWluZXIgJiYgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lICYmIHQuYXJyYXlJbmRleCA9PSBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lICYmIHQuYXJyYXlJbmRleCA9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBzdWJPYmplY3QsIGAke3Byb3BlcnR5Lm5hbWV9LmAsIGAke3Byb3BlcnR5Lm5hbWV9WyR7aW5kZXh9XS5gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQXJyYXlHcm91cC5wdXNoKHRoaXMuZm9ybUdyb3VwKGVudGl0eSB8fCBwcm9wZXJ0eS5lbnRpdHkgfHwgdGhpcy5nZXRFbnRpdHkoc3ViT2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBzdWJPYmplY3QsIG9iamVjdFZhbGlkYXRpb25Db25maWcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRBYnN0cmFjdENvbnRyb2xPcHRpb25zKHByb3BlcnR5Lm5hbWUsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAsIHsgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBuZXcgUnhGb3JtQXJyYXkoYXJyYXlPYmplY3RWYWx1ZSwgZm9ybUFycmF5R3JvdXAsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIG51bGwsIHByb3BlcnR5LmFycmF5Q29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3RpdmVGb3JtQ29uZmlnLmF1dG9JbnN0YW5jZVB1c2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5wdXNoID0gKGluc3RhbmNlOiBhbnlbXSk6IG51bWJlciA9PiB7IGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cChpbnN0YW5jZS5jb25zdHJ1Y3RvciwgaW5zdGFuY2UsIG9iamVjdFZhbGlkYXRpb25Db25maWcpOyBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucHVzaChmb3JtR3JvdXAsIHsgaXNBZGRlZEluc3RhbmNlOiB0cnVlIH0pOyByZXR1cm4gMDsgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5zcGxpY2UgPSAoc3RhcnQsIGRlbGV0ZUNvdW50KTogYW55W10gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZCA9IChzdGFydCArIGRlbGV0ZUNvdW50KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucmVtb3ZlQXQoaSwgeyBpc1JlbW92ZWRJbnN0YW5jZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBhcnJheU9iamVjdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkuYXJyYXlDb25maWcgJiYgcHJvcGVydHkuYXJyYXlDb25maWcuY3JlYXRlQmxhbmspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUFycmF5KFtdLCBbXSwgbnVsbCwgbnVsbCwgcHJvcGVydHkuYXJyYXlDb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlID0ge307XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zID0ge1xuICAgICAgICAgICAgdmFsaWRhdG9yczogW10sXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IFtdLFxuICAgICAgICAgICAgdXBkYXRlT246IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1snZ2xvYmFsJ11cbiAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbJ2dsb2JhbCddXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIH07XG4gICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB0aGlzLmdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMoXCJnbG9iYWxcIiwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IG5ldyBSeEZvcm1Hcm91cChqc29uLm1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUdyb3VwT2JqZWN0LCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcbiAgICAgICAgaWYgKGRlZmF1bHRDb250YWluZXIuaXNFeHBlcmltZW50YWwpIHtcbiAgICAgICAgICAgIGpzb24uZW50aXR5T2JqZWN0W1wiZm9ybUdyb3VwXCJdID0gZm9ybUdyb3VwO1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3BlcnRpZXMoZm9ybUdyb3VwLCBqc29uLmVudGl0eU9iamVjdCwgZXh0ZW5kZWRQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNOZXN0ZWRCaW5kaW5nICYmICF0aGlzLmlzR3JvdXBDYWxsZWQpXG4gICAgICAgICAgICBmb3JtR3JvdXAucmVmcmVzaERpc2FibGUoKTtcbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcblxuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVQcm9wZXJ0aWVzKGZvcm1Hcm91cDogUnhGb3JtR3JvdXAsIGVudGl0eU9iamVjdDogYW55LCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSkge1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3AoZW50aXR5T2JqZWN0LCB0LCBmb3JtR3JvdXApO1xuICAgICAgICB9KVxuICAgIH1cbiAgICBwcml2YXRlIGdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMobmFtZTogc3RyaW5nLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgYWJzdHJhY3RDb250cm9sT3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9ucykge1xuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdKVxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdO1xuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xPcHRpb25zID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID8gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmJhc2VBYnN0cmFjdENvbnRyb2xPcHRpb25zIDogbnVsbDtcbiAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zICYmIGNvbnRyb2xPcHRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbE9wdGlvbnNbbmFtZV0udXBkYXRlT24pXG4gICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGNvbnRyb2xPcHRpb25zW25hbWVdLnVwZGF0ZU9uO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKSlcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpLmZvckVhY2godmFsaWRhdG9yID0+ICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLnZhbGlkYXRvcnMpLnB1c2godmFsaWRhdG9yKSlcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLnZhbGlkYXRvcnMpLnB1c2goPFZhbGlkYXRvckZuPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udHJvbE9wdGlvbnNbbmFtZV0uYXN5bmNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbE9wdGlvbnNbbmFtZV0uYXN5bmNWYWxpZGF0b3JzKSlcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykuZm9yRWFjaCh2YWxpZGF0b3IgPT4gKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAoPFZhbGlkYXRvckZuW10+YWJzdHJhY3RDb250cm9sT3B0aW9ucy5hc3luY1ZhbGlkYXRvcnMpLnB1c2goPFZhbGlkYXRvckZuPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYnN0cmFjdENvbnRyb2xPcHRpb25zO1xuICAgIH1cbiAgICBwcml2YXRlIG92ZXJyaWRlUHJvcChlbnRpdHlPYmplY3Q6IGFueSwgcHJvcE5hbWU6IHN0cmluZywgZm9ybUdyb3VwOiBSeEZvcm1Hcm91cCkge1xuICAgICAgICBsZXQgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVudGl0eU9iamVjdCksIHByb3BOYW1lKTtcbiAgICAgICAgbGV0IHZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BOYW1lXTtcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVudGl0eU9iamVjdCwgcHJvcE5hbWUsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4geyByZXR1cm4gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3IuZ2V0LmNhbGwoZW50aXR5T2JqZWN0KSA6IHZhbHVlIH0sXG4gICAgICAgICAgICBzZXQ6ICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSB2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQuY2FsbChlbnRpdHlPYmplY3QsIHYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jaGFuZ2luZyAmJiBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdLnNldFZhbHVlKHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9sZFZhbHVlID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=