@bnsights/bbsf-controls 1.0.107 → 1.0.109

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 (221) hide show
  1. package/README.md +11 -0
  2. package/esm2020/bnsights-bbsf-controls.mjs +5 -0
  3. package/esm2020/lib/Shared/Components/app-base-component.mjs +226 -0
  4. package/esm2020/lib/Shared/Components/ng-tag-input.mjs +331 -0
  5. package/esm2020/lib/Shared/Directives/template-name.directive.mjs +18 -0
  6. package/{esm2015/lib/Shared/Models/DropdownListItem.js → esm2020/lib/Shared/Models/DropdownListItem.mjs} +1 -1
  7. package/esm2020/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +21 -0
  8. package/esm2020/lib/Shared/Pipes/bbsf-date.pipe.mjs +21 -0
  9. package/esm2020/lib/Shared/default_intl.mjs +29 -0
  10. package/esm2020/lib/Shared/services/ControlUtility.mjs +162 -0
  11. package/esm2020/lib/Shared/services/GlobalSettings.service.mjs +30 -0
  12. package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +24 -0
  13. package/esm2020/lib/Shared/services/render-component-service.service.mjs +30 -0
  14. package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +170 -0
  15. package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +262 -0
  16. package/esm2020/lib/controls/Calendar/Calendar.component.mjs +173 -0
  17. package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +117 -0
  18. package/esm2020/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +136 -0
  19. package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +223 -0
  20. package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +194 -0
  21. package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +447 -0
  22. package/esm2020/lib/controls/Form/Form.component.mjs +101 -0
  23. package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +226 -0
  24. package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +350 -0
  25. package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +325 -0
  26. package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +427 -0
  27. package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +429 -0
  28. package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +428 -0
  29. package/esm2020/lib/controls/Paging/JwPagination.component.mjs +156 -0
  30. package/esm2020/lib/controls/Paging/Paging.component.mjs +312 -0
  31. package/esm2020/lib/controls/Phone/Phone.component.mjs +129 -0
  32. package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +376 -0
  33. package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +109 -0
  34. package/esm2020/lib/controls/Recaptcha/Recaptcha.component.mjs +135 -0
  35. package/esm2020/lib/controls/Repeater/repeater/repeater.component.mjs +125 -0
  36. package/esm2020/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +750 -0
  37. package/esm2020/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +21 -0
  38. package/esm2020/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +108 -0
  39. package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +277 -0
  40. package/esm2020/lib/controls/TextArea/TextArea.component.mjs +196 -0
  41. package/esm2020/lib/controls/TextBox/TextBox.component.mjs +312 -0
  42. package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +90 -0
  43. package/esm2020/lib/controls/bbsf-controls.module.mjs +361 -0
  44. package/esm2020/lib/controls/page-header-component/page-header-component.component.mjs +37 -0
  45. package/{esm2015/public-api.js → esm2020/public-api.mjs} +2 -2
  46. package/fesm2015/{bnsights-bbsf-controls.js → bnsights-bbsf-controls.mjs} +2214 -2111
  47. package/fesm2015/bnsights-bbsf-controls.mjs.map +1 -0
  48. package/fesm2020/bnsights-bbsf-controls.mjs +9098 -0
  49. package/fesm2020/bnsights-bbsf-controls.mjs.map +1 -0
  50. package/index.d.ts +5 -0
  51. package/lib/Shared/Components/app-base-component.d.ts +7 -0
  52. package/lib/Shared/Components/ng-tag-input.d.ts +4 -1
  53. package/lib/Shared/Directives/template-name.directive.d.ts +3 -0
  54. package/lib/Shared/Models/DropdownListItem.d.ts +2 -2
  55. package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +3 -0
  56. package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +3 -0
  57. package/lib/Shared/default_intl.d.ts +3 -0
  58. package/lib/Shared/services/ControlUtility.d.ts +3 -0
  59. package/lib/Shared/services/GlobalSettings.service.d.ts +3 -0
  60. package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +3 -0
  61. package/lib/Shared/services/render-component-service.service.d.ts +3 -0
  62. package/lib/Shared/services/validationErrorMassage.service.d.ts +4 -3
  63. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +3 -0
  64. package/lib/controls/Calendar/Calendar.component.d.ts +3 -0
  65. package/lib/controls/CheckBox/CheckBox.component.d.ts +3 -0
  66. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +3 -0
  67. package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +3 -0
  68. package/lib/controls/DropdownList/DropdownList.component.d.ts +5 -0
  69. package/lib/controls/FileUplaod/FileUplaod.component.d.ts +3 -0
  70. package/lib/controls/Form/Form.component.d.ts +3 -0
  71. package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +3 -0
  72. package/lib/controls/ImageUpload/ImageUpload.component.d.ts +3 -0
  73. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +3 -0
  74. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +3 -0
  75. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +3 -0
  76. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +3 -0
  77. package/lib/controls/Paging/JwPagination.component.d.ts +3 -0
  78. package/lib/controls/Paging/Paging.component.d.ts +3 -0
  79. package/lib/controls/Phone/Phone.component.d.ts +3 -0
  80. package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +3 -0
  81. package/lib/controls/RadioButton/RadioButton.component.d.ts +3 -0
  82. package/lib/controls/Recaptcha/Recaptcha.component.d.ts +3 -0
  83. package/lib/controls/Repeater/repeater/repeater.component.d.ts +3 -0
  84. package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +3 -0
  85. package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +3 -0
  86. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +3 -0
  87. package/lib/controls/TagsInput/TagsInput.component.d.ts +3 -0
  88. package/lib/controls/TextArea/TextArea.component.d.ts +3 -0
  89. package/lib/controls/TextBox/TextBox.component.d.ts +3 -0
  90. package/lib/controls/Toggleslide/toggleslide.component.d.ts +3 -0
  91. package/lib/controls/bbsf-controls.module.d.ts +71 -4
  92. package/lib/controls/page-header-component/page-header-component.component.d.ts +3 -0
  93. package/package.json +44 -48
  94. package/public-api.d.ts +1 -1
  95. package/bnsights-bbsf-controls-1.0.107.tgz +0 -0
  96. package/bnsights-bbsf-controls.d.ts +0 -5
  97. package/bnsights-bbsf-controls.metadata.json +0 -1
  98. package/bundles/bnsights-bbsf-controls.umd.js +0 -9636
  99. package/bundles/bnsights-bbsf-controls.umd.js.map +0 -1
  100. package/esm2015/bnsights-bbsf-controls.js +0 -6
  101. package/esm2015/lib/Shared/Components/app-base-component.js +0 -202
  102. package/esm2015/lib/Shared/Components/ng-tag-input.js +0 -323
  103. package/esm2015/lib/Shared/Directives/template-name.directive.js +0 -18
  104. package/esm2015/lib/Shared/Pipes/bbsf-date-time.pipe.js +0 -20
  105. package/esm2015/lib/Shared/Pipes/bbsf-date.pipe.js +0 -20
  106. package/esm2015/lib/Shared/default_intl.js +0 -29
  107. package/esm2015/lib/Shared/services/ControlUtility.js +0 -164
  108. package/esm2015/lib/Shared/services/GlobalSettings.service.js +0 -28
  109. package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +0 -22
  110. package/esm2015/lib/Shared/services/render-component-service.service.js +0 -30
  111. package/esm2015/lib/Shared/services/validationErrorMassage.service.js +0 -172
  112. package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +0 -266
  113. package/esm2015/lib/controls/Calendar/Calendar.component.js +0 -177
  114. package/esm2015/lib/controls/CheckBox/CheckBox.component.js +0 -118
  115. package/esm2015/lib/controls/ConfirmationModal/ConfirmationModal.component.js +0 -139
  116. package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +0 -227
  117. package/esm2015/lib/controls/DropdownList/DropdownList.component.js +0 -192
  118. package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +0 -447
  119. package/esm2015/lib/controls/Form/Form.component.js +0 -106
  120. package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +0 -226
  121. package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +0 -347
  122. package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +0 -325
  123. package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +0 -429
  124. package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +0 -434
  125. package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +0 -433
  126. package/esm2015/lib/controls/Paging/JwPagination.component.js +0 -129
  127. package/esm2015/lib/controls/Paging/Paging.component.js +0 -312
  128. package/esm2015/lib/controls/Phone/Phone.component.js +0 -129
  129. package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +0 -371
  130. package/esm2015/lib/controls/RadioButton/RadioButton.component.js +0 -111
  131. package/esm2015/lib/controls/Recaptcha/Recaptcha.component.js +0 -135
  132. package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +0 -117
  133. package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +0 -748
  134. package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +0 -19
  135. package/esm2015/lib/controls/Repeater/repeater-table/repeater-table.component.js +0 -108
  136. package/esm2015/lib/controls/TagsInput/TagsInput.component.js +0 -278
  137. package/esm2015/lib/controls/TextArea/TextArea.component.js +0 -197
  138. package/esm2015/lib/controls/TextBox/TextBox.component.js +0 -309
  139. package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +0 -90
  140. package/esm2015/lib/controls/bbsf-controls.module.js +0 -240
  141. package/esm2015/lib/controls/page-header-component/page-header-component.component.js +0 -32
  142. package/fesm2015/bnsights-bbsf-controls.js.map +0 -1
  143. package/src/lib/assets/.gitkeep +0 -0
  144. /package/{esm2015/lib/Shared/Enums/CalendarView.js → esm2020/lib/Shared/Enums/CalendarView.mjs} +0 -0
  145. /package/{esm2015/lib/Shared/Enums/ControlLayout.js → esm2020/lib/Shared/Enums/ControlLayout.mjs} +0 -0
  146. /package/{esm2015/lib/Shared/Enums/Countries.js → esm2020/lib/Shared/Enums/Countries.mjs} +0 -0
  147. /package/{esm2015/lib/Shared/Enums/Enums.js → esm2020/lib/Shared/Enums/Enums.mjs} +0 -0
  148. /package/{esm2015/lib/Shared/Enums/FileType.js → esm2020/lib/Shared/Enums/FileType.mjs} +0 -0
  149. /package/{esm2015/lib/Shared/Enums/FilterType.js → esm2020/lib/Shared/Enums/FilterType.mjs} +0 -0
  150. /package/{esm2015/lib/Shared/Enums/FontSize.js → esm2020/lib/Shared/Enums/FontSize.mjs} +0 -0
  151. /package/{esm2015/lib/Shared/Enums/ForceDirection.js → esm2020/lib/Shared/Enums/ForceDirection.mjs} +0 -0
  152. /package/{esm2015/lib/Shared/Enums/IconPosition.js → esm2020/lib/Shared/Enums/IconPosition.mjs} +0 -0
  153. /package/{esm2015/lib/Shared/Enums/ImageType.js → esm2020/lib/Shared/Enums/ImageType.mjs} +0 -0
  154. /package/{esm2015/lib/Shared/Enums/InputType.js → esm2020/lib/Shared/Enums/InputType.mjs} +0 -0
  155. /package/{esm2015/lib/Shared/Enums/Insert.js → esm2020/lib/Shared/Enums/Insert.mjs} +0 -0
  156. /package/{esm2015/lib/Shared/Enums/LanguageMode.js → esm2020/lib/Shared/Enums/LanguageMode.mjs} +0 -0
  157. /package/{esm2015/lib/Shared/Enums/LanguageValidation.js → esm2020/lib/Shared/Enums/LanguageValidation.mjs} +0 -0
  158. /package/{esm2015/lib/Shared/Enums/Misc.js → esm2020/lib/Shared/Enums/Misc.mjs} +0 -0
  159. /package/{esm2015/lib/Shared/Enums/PagingActionMode.js → esm2020/lib/Shared/Enums/PagingActionMode.mjs} +0 -0
  160. /package/{esm2015/lib/Shared/Enums/Para.js → esm2020/lib/Shared/Enums/Para.mjs} +0 -0
  161. /package/{esm2015/lib/Shared/Enums/PickerType.js → esm2020/lib/Shared/Enums/PickerType.mjs} +0 -0
  162. /package/{esm2015/lib/Shared/Enums/SelectMode.js → esm2020/lib/Shared/Enums/SelectMode.mjs} +0 -0
  163. /package/{esm2015/lib/Shared/Enums/StartView.js → esm2020/lib/Shared/Enums/StartView.mjs} +0 -0
  164. /package/{esm2015/lib/Shared/Enums/Style.js → esm2020/lib/Shared/Enums/Style.mjs} +0 -0
  165. /package/{esm2015/lib/Shared/Enums/StyleConfirmationMode.js → esm2020/lib/Shared/Enums/StyleConfirmationMode.mjs} +0 -0
  166. /package/{esm2015/lib/Shared/Enums/TagInputView.js → esm2020/lib/Shared/Enums/TagInputView.mjs} +0 -0
  167. /package/{esm2015/lib/Shared/Enums/menu-list-enum.js → esm2020/lib/Shared/Enums/menu-list-enum.mjs} +0 -0
  168. /package/{esm2015/lib/Shared/Models/Attribute.js → esm2020/lib/Shared/Models/Attribute.mjs} +0 -0
  169. /package/{esm2015/lib/Shared/Models/AutocompleteDTO.js → esm2020/lib/Shared/Models/AutocompleteDTO.mjs} +0 -0
  170. /package/{esm2015/lib/Shared/Models/AutocompleteOptions.js → esm2020/lib/Shared/Models/AutocompleteOptions.mjs} +0 -0
  171. /package/{esm2015/lib/Shared/Models/CalendarEventDTO.js → esm2020/lib/Shared/Models/CalendarEventDTO.mjs} +0 -0
  172. /package/{esm2015/lib/Shared/Models/CalendarOptions.js → esm2020/lib/Shared/Models/CalendarOptions.mjs} +0 -0
  173. /package/{esm2015/lib/Shared/Models/CancelDTO.js → esm2020/lib/Shared/Models/CancelDTO.mjs} +0 -0
  174. /package/{esm2015/lib/Shared/Models/CaptchaStyle.js → esm2020/lib/Shared/Models/CaptchaStyle.mjs} +0 -0
  175. /package/{esm2015/lib/Shared/Models/CheckBoxOptions.js → esm2020/lib/Shared/Models/CheckBoxOptions.mjs} +0 -0
  176. /package/{esm2015/lib/Shared/Models/ConfirmationModalOptions.js → esm2020/lib/Shared/Models/ConfirmationModalOptions.mjs} +0 -0
  177. /package/{esm2015/lib/Shared/Models/ControlOptionsBase.js → esm2020/lib/Shared/Models/ControlOptionsBase.mjs} +0 -0
  178. /package/{esm2015/lib/Shared/Models/CustomValidation.js → esm2020/lib/Shared/Models/CustomValidation.mjs} +0 -0
  179. /package/{esm2015/lib/Shared/Models/DropdownOptions.js → esm2020/lib/Shared/Models/DropdownOptions.mjs} +0 -0
  180. /package/{esm2015/lib/Shared/Models/EditPersonalImage.js → esm2020/lib/Shared/Models/EditPersonalImage.mjs} +0 -0
  181. /package/{esm2015/lib/Shared/Models/EnglishArabicDTO.js → esm2020/lib/Shared/Models/EnglishArabicDTO.mjs} +0 -0
  182. /package/{esm2015/lib/Shared/Models/FileDTO.js → esm2020/lib/Shared/Models/FileDTO.mjs} +0 -0
  183. /package/{esm2015/lib/Shared/Models/FileUploadModel.js → esm2020/lib/Shared/Models/FileUploadModel.mjs} +0 -0
  184. /package/{esm2015/lib/Shared/Models/FileUploadOptions.js → esm2020/lib/Shared/Models/FileUploadOptions.mjs} +0 -0
  185. /package/{esm2015/lib/Shared/Models/FilterItem.js → esm2020/lib/Shared/Models/FilterItem.mjs} +0 -0
  186. /package/{esm2015/lib/Shared/Models/FormOptions.js → esm2020/lib/Shared/Models/FormOptions.mjs} +0 -0
  187. /package/{esm2015/lib/Shared/Models/HtmlEditorOptions.js → esm2020/lib/Shared/Models/HtmlEditorOptions.mjs} +0 -0
  188. /package/{esm2015/lib/Shared/Models/ImageUploadOptions.js → esm2020/lib/Shared/Models/ImageUploadOptions.mjs} +0 -0
  189. /package/{esm2015/lib/Shared/Models/MapAutoCompleteOptions.js → esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs} +0 -0
  190. /package/{esm2015/lib/Shared/Models/MapAutocompleteDTO.js → esm2020/lib/Shared/Models/MapAutocompleteDTO.mjs} +0 -0
  191. /package/{esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js → esm2020/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs} +0 -0
  192. /package/{esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js → esm2020/lib/Shared/Models/MultiLingualTextAreaOptions.mjs} +0 -0
  193. /package/{esm2015/lib/Shared/Models/MultilingualControlOptionsBase.js → esm2020/lib/Shared/Models/MultilingualControlOptionsBase.mjs} +0 -0
  194. /package/{esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js → esm2020/lib/Shared/Models/MultilingualTextBoxOptions.mjs} +0 -0
  195. /package/{esm2015/lib/Shared/Models/MultipleFileUploadModel.js → esm2020/lib/Shared/Models/MultipleFileUploadModel.mjs} +0 -0
  196. /package/{esm2015/lib/Shared/Models/PagingDTO.js → esm2020/lib/Shared/Models/PagingDTO.mjs} +0 -0
  197. /package/{esm2015/lib/Shared/Models/PagingOptions.js → esm2020/lib/Shared/Models/PagingOptions.mjs} +0 -0
  198. /package/{esm2015/lib/Shared/Models/PagingPayload.js → esm2020/lib/Shared/Models/PagingPayload.mjs} +0 -0
  199. /package/{esm2015/lib/Shared/Models/PhoneOptions.js → esm2020/lib/Shared/Models/PhoneOptions.mjs} +0 -0
  200. /package/{esm2015/lib/Shared/Models/ProfileImageUploadOptions.js → esm2020/lib/Shared/Models/ProfileImageUploadOptions.mjs} +0 -0
  201. /package/{esm2015/lib/Shared/Models/ProfilePictureDTO.js → esm2020/lib/Shared/Models/ProfilePictureDTO.mjs} +0 -0
  202. /package/{esm2015/lib/Shared/Models/RadioButtonItem.js → esm2020/lib/Shared/Models/RadioButtonItem.mjs} +0 -0
  203. /package/{esm2015/lib/Shared/Models/RadioButtonOptions.js → esm2020/lib/Shared/Models/RadioButtonOptions.mjs} +0 -0
  204. /package/{esm2015/lib/Shared/Models/RangeNumber.js → esm2020/lib/Shared/Models/RangeNumber.mjs} +0 -0
  205. /package/{esm2015/lib/Shared/Models/Recaptcha.js → esm2020/lib/Shared/Models/Recaptcha.mjs} +0 -0
  206. /package/{esm2015/lib/Shared/Models/RecaptchaOptions.js → esm2020/lib/Shared/Models/RecaptchaOptions.mjs} +0 -0
  207. /package/{esm2015/lib/Shared/Models/RepeaterField.js → esm2020/lib/Shared/Models/RepeaterField.mjs} +0 -0
  208. /package/{esm2015/lib/Shared/Models/RepeaterOptions.js → esm2020/lib/Shared/Models/RepeaterOptions.mjs} +0 -0
  209. /package/{esm2015/lib/Shared/Models/SaveDTO.js → esm2020/lib/Shared/Models/SaveDTO.mjs} +0 -0
  210. /package/{esm2015/lib/Shared/Models/TagsInputDTO.js → esm2020/lib/Shared/Models/TagsInputDTO.mjs} +0 -0
  211. /package/{esm2015/lib/Shared/Models/TagsInputOptions.js → esm2020/lib/Shared/Models/TagsInputOptions.mjs} +0 -0
  212. /package/{esm2015/lib/Shared/Models/TextAreaOptions.js → esm2020/lib/Shared/Models/TextAreaOptions.mjs} +0 -0
  213. /package/{esm2015/lib/Shared/Models/TextBoxOptions.js → esm2020/lib/Shared/Models/TextBoxOptions.mjs} +0 -0
  214. /package/{esm2015/lib/Shared/Models/ToggleslideOptions.js → esm2020/lib/Shared/Models/ToggleslideOptions.mjs} +0 -0
  215. /package/{esm2015/lib/Shared/Models/UploadPersonalImage.js → esm2020/lib/Shared/Models/UploadPersonalImage.mjs} +0 -0
  216. /package/{esm2015/lib/Shared/Models/bread-crumb.js → esm2020/lib/Shared/Models/bread-crumb.mjs} +0 -0
  217. /package/{esm2015/lib/Shared/Models/control-filter-Item.js → esm2020/lib/Shared/Models/control-filter-Item.mjs} +0 -0
  218. /package/{esm2015/lib/Shared/Models/datePickerOptions.js → esm2020/lib/Shared/Models/datePickerOptions.mjs} +0 -0
  219. /package/{esm2015/lib/Shared/Models/filter-options.js → esm2020/lib/Shared/Models/filter-options.mjs} +0 -0
  220. /package/{esm2015/lib/Shared/Models/page-header-options.js → esm2020/lib/Shared/Models/page-header-options.mjs} +0 -0
  221. /package/{esm2015/lib/Shared/config/environment.js → esm2020/lib/Shared/config/environment.mjs} +0 -0
@@ -0,0 +1,325 @@
1
+ import { Component, Input, Optional, ViewChild, EventEmitter, Output } from '@angular/core';
2
+ import { FormControl, Validators } from '@angular/forms';
3
+ import { MapAutocompleteDTO } from '../../Shared/Models/MapAutocompleteDTO';
4
+ import { LazyMapsAPILoader } from '@agm/core';
5
+ import { environment } from '@bnsights/bbsf-utilities';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@agm/core";
8
+ import * as i2 from "../../Shared/services/ControlUtility";
9
+ import * as i3 from "@angular/forms";
10
+ import * as i4 from "@bnsights/bbsf-utilities";
11
+ import * as i5 from "../../Shared/services/GlobalSettings.service";
12
+ import * as i6 from "@angular/common";
13
+ import * as i7 from "@angular-material-extensions/google-maps-autocomplete";
14
+ export class MapAutoCompleteComponent {
15
+ constructor(mapsAPILoader, ngZone, controlUtility, controlContainer, MapAutoCompleteControlHost, UtilityService, translate, controlValidationService, globalSettings) {
16
+ this.mapsAPILoader = mapsAPILoader;
17
+ this.ngZone = ngZone;
18
+ this.controlUtility = controlUtility;
19
+ this.controlContainer = controlContainer;
20
+ this.MapAutoCompleteControlHost = MapAutoCompleteControlHost;
21
+ this.UtilityService = UtilityService;
22
+ this.translate = translate;
23
+ this.controlValidationService = controlValidationService;
24
+ this.globalSettings = globalSettings;
25
+ this.OnChange = new EventEmitter();
26
+ this.MapAutoCompleteModel = new MapAutocompleteDTO();
27
+ this.CurrentLanguage = "";
28
+ this.onAutocompleteSelected = new EventEmitter();
29
+ this.onGermanAddressMapped = new EventEmitter();
30
+ this.onLocationSelected = new EventEmitter();
31
+ this.markAllAsTouched = false;
32
+ this.validationRules = [];
33
+ this.validationRulesasync = [];
34
+ this.resetError = () => {
35
+ this.controlValidationService.removeGlobalError();
36
+ };
37
+ //External Method
38
+ this.RemoveRequiredValidation = () => {
39
+ this.controlUtility.RemoveRequiredValidation(this.MapAutoCompleteFormControl, this.validationRules, this.options);
40
+ };
41
+ //External Method
42
+ this.AddRequiredValidation = () => {
43
+ this.controlUtility.AddRequiredValidation(this.MapAutoCompleteFormControl, this.validationRules, this.options);
44
+ };
45
+ //External Method
46
+ this.RemoveCustomValidation = (CustomValidation) => {
47
+ this.controlUtility.RemoveCustomValidation(this.MapAutoCompleteFormControl, this.validationRules, CustomValidation);
48
+ };
49
+ //External Method
50
+ this.AddCustomValidation = (CustomValidation) => {
51
+ this.controlUtility.AddCustomValidation(this.MapAutoCompleteFormControl, this.validationRules, CustomValidation);
52
+ };
53
+ //External Method
54
+ this.IsValid = () => {
55
+ this.controlUtility.IsValid(this.MapAutoCompleteFormControl);
56
+ };
57
+ MapAutoCompleteComponent.controlContainerstatic = this.controlContainer;
58
+ this.CurrentLanguage = translate.currentLang != undefined ? translate.currentLang : translate.defaultLang;
59
+ }
60
+ ngOnInit() {
61
+ this.controlValidationService.isCreatedBefor = false;
62
+ this.MapAutoCompleteModel = new MapAutocompleteDTO();
63
+ this.translate.onLangChange.subscribe((event) => {
64
+ this.CurrentLanguage = event.lang;
65
+ ;
66
+ if (this.CurrentLanguage == 'ar')
67
+ this.mapsAPILoader["_config"]["localeId"] = "ar-EG";
68
+ if (this.CurrentLanguage == 'en')
69
+ this.mapsAPILoader["_config"]["localeId"] = "en-US";
70
+ this.mapsAPILoader["_scriptLoadingPromise"] = null;
71
+ this.mapsAPILoader["_config"]["apiKey"] = `${environment.BBSF_GoogleMapKey}&language=${this.CurrentLanguage}`;
72
+ var ScriptTag = document.getElementById(this.mapsAPILoader["_SCRIPT_ID"]);
73
+ if (ScriptTag)
74
+ ScriptTag.remove();
75
+ var elements = document.getElementsByClassName("pac-container");
76
+ while (elements.length > 0)
77
+ elements[0].remove();
78
+ let window = this.mapsAPILoader["_windowRef"].getNativeWindow();
79
+ window.google = null;
80
+ this.LazyMapsAPILoader = new LazyMapsAPILoader({
81
+ // &language=${UtilityService.CurrentLanguage}
82
+ apiKey: `${environment.BBSF_GoogleMapKey}&language=${this.CurrentLanguage}`,
83
+ libraries: ['places'],
84
+ }, this.mapsAPILoader["_windowRef"], this.mapsAPILoader["_documentRef"], this.mapsAPILoader["_config"]["localeId"]);
85
+ this.LazyMapsAPILoader.load().then(() => {
86
+ let autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement, {
87
+ types: ["address"]
88
+ });
89
+ autocomplete.addListener('place_changed', ( /**
90
+ * @return {?}
91
+ */() => {
92
+ this.ngZone.run(( /**
93
+ * @return {?}
94
+ */() => {
95
+ // get the place result
96
+ /** @type {?} */
97
+ const place = autocomplete.getPlace();
98
+ /** @type {?} */
99
+ const germanAddress = {
100
+ gmID: place.id,
101
+ icon: place.icon,
102
+ url: place.url,
103
+ placeID: place.place_id,
104
+ displayAddress: place.formatted_address,
105
+ name: place.name,
106
+ vicinity: place.vicinity,
107
+ locality: {},
108
+ state: {},
109
+ country: {},
110
+ geoLocation: { latitude: -1, longitude: -1 },
111
+ };
112
+ if (place.geometry && place.geometry.location) {
113
+ germanAddress.geoLocation.latitude = place.geometry.location.lat();
114
+ germanAddress.geoLocation.longitude = place.geometry.location.lng();
115
+ }
116
+ place.address_components.forEach(( /**
117
+ * @param {?} value
118
+ * @return {?}
119
+ *//**
120
+ * @param {?} value
121
+ * @return {?}
122
+ */ value => {
123
+ if (value.types.indexOf('street_number') > -1) {
124
+ germanAddress["streetNumber"] = value.short_name;
125
+ }
126
+ if (value.types.indexOf('route') > -1) {
127
+ germanAddress["streetName"] = value.long_name;
128
+ }
129
+ if (value.types.indexOf('postal_code') > -1) {
130
+ germanAddress["postalCode"] = Number(value.short_name);
131
+ }
132
+ if (value.types.indexOf('sublocality') > -1) {
133
+ germanAddress["sublocality"] = value.long_name;
134
+ }
135
+ if (value.types.indexOf('locality') > -1) {
136
+ germanAddress.locality["long"] = value.long_name;
137
+ germanAddress.locality["short"] = value.short_name;
138
+ }
139
+ if (value.types.indexOf('administrative_area_level_1') > -1) {
140
+ germanAddress.state["long"] = value.long_name;
141
+ germanAddress.state["short"] = value.short_name;
142
+ }
143
+ if (value.types.indexOf('country') > -1) {
144
+ germanAddress.country["long"] = value.long_name;
145
+ germanAddress.country["short"] = value.short_name;
146
+ }
147
+ if (value.types.indexOf('administrative_area_level_3') > -1) {
148
+ germanAddress.locality["short"] = value.short_name;
149
+ }
150
+ }));
151
+ this.onGermanAddressMapped.emit(germanAddress);
152
+ this.GermanAddressMapped(germanAddress);
153
+ if (!place.place_id || place.geometry === undefined || place.geometry === null) {
154
+ // place result is not valid
155
+ return;
156
+ }
157
+ else {
158
+ // show dialog to select a address from the input
159
+ // emit failed event
160
+ }
161
+ // this.address = place.formatted_address;
162
+ this.onAutocompleteSelected.emit(place);
163
+ this.AutocompleteSelected(place);
164
+ this.onLocationSelected.emit({
165
+ latitude: place.geometry.location.lat(),
166
+ longitude: place.geometry.location.lng()
167
+ });
168
+ }));
169
+ }));
170
+ });
171
+ });
172
+ if (this.CurrentLanguage == 'ar')
173
+ this.mapsAPILoader["_config"]["localeId"] = "ar-EG";
174
+ if (this.CurrentLanguage == 'en')
175
+ this.mapsAPILoader["_config"]["localeId"] = "en-US";
176
+ this.mapsAPILoader["_scriptLoadingPromise"] = null;
177
+ this.mapsAPILoader["_config"]["apiKey"] = `${environment.BBSF_GoogleMapKey}&language=${this.CurrentLanguage}`;
178
+ var leftSection = document.getElementById(this.mapsAPILoader["_SCRIPT_ID"]);
179
+ if (leftSection)
180
+ leftSection.remove();
181
+ this.LazyMapsAPILoader = new LazyMapsAPILoader({
182
+ apiKey: `${environment.BBSF_GoogleMapKey}&language=${this.CurrentLanguage}`,
183
+ libraries: ['places'],
184
+ }, this.mapsAPILoader["_windowRef"], this.mapsAPILoader["_documentRef"], this.mapsAPILoader["_config"]["localeId"]);
185
+ this.LazyMapsAPILoader.load();
186
+ this.mapsAPILoader.load().then(() => {
187
+ let autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement, {
188
+ types: ["address"]
189
+ });
190
+ });
191
+ this.group.addControl(this.options.Name, new FormControl(''));
192
+ this.MapAutoCompleteFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
193
+ if (!this.options.ViewType)
194
+ this.options.ViewType = this.globalSettings.ViewType;
195
+ if (this.options.IsRequired) {
196
+ this.validationRules.push(Validators.required);
197
+ }
198
+ if (this.options.LabelKey != null && this.options.LabelKey != "")
199
+ this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
200
+ this.MapAutoCompleteFormControl.setValidators(this.validationRules);
201
+ this.MapAutoCompleteFormControl.setAsyncValidators(this.validationRulesasync);
202
+ if (this.options.IsDisabled) {
203
+ this.MapAutoCompleteFormControl.disable();
204
+ }
205
+ if (this.options.Value != null) {
206
+ let germanAddress = {
207
+ url: this.options.Value.GoogleMapsURL,
208
+ placeID: this.options.Value.PlaceID,
209
+ displayAddress: this.options.Value.Text,
210
+ name: this.options.Value.Text,
211
+ locality: {},
212
+ state: {},
213
+ country: {},
214
+ geoLocation: { latitude: -1, longitude: -1 },
215
+ };
216
+ germanAddress.geoLocation.latitude = this.options.Value.Latitude;
217
+ germanAddress.geoLocation.longitude = this.options.Value.Longitude;
218
+ this.onGermanAddressMapped.emit(germanAddress);
219
+ this.GermanAddressMapped(germanAddress);
220
+ this.place = {
221
+ url: this.options.Value.GoogleMapsURL,
222
+ place_id: this.options.Value.PlaceID,
223
+ formatted_address: this.options.Value.Text,
224
+ name: this.options.Value.Text,
225
+ };
226
+ this.onAutocompleteSelected.emit(this.place);
227
+ this.AutocompleteSelected(this.place);
228
+ this.onLocationSelected.emit({
229
+ latitude: this.options.Value.Latitude,
230
+ longitude: this.options.Value.Longitude
231
+ });
232
+ this.group.controls[this.options.Name].setValue(this.MapAutoCompleteModel);
233
+ this.MapAutoCompleteFormControl.setValue(this.options.Value);
234
+ }
235
+ if (this.options.CustomValidation.length > 0) {
236
+ let Validations = this.options.CustomValidation;
237
+ for (let index = 0; index < Validations.length; index++) {
238
+ const Validation = Validations[index];
239
+ this.validationRules.push(Validation.functionBody);
240
+ }
241
+ }
242
+ this.MapAutoCompleteControlHost.ngSubmit.subscribe((value) => {
243
+ this.group.markAllAsTouched();
244
+ this.markAllAsTouched = true;
245
+ });
246
+ }
247
+ ngAfterViewInit() {
248
+ if (this.options.AttributeList != null) {
249
+ var element = document.getElementById(this.options.Name);
250
+ for (let index = 0; index < this.options.AttributeList.length; index++) {
251
+ element.setAttribute(this.options.AttributeList[index].Key, this.options.AttributeList[index].value);
252
+ }
253
+ }
254
+ var elementHTML = document.getElementById(this.options.Name);
255
+ elementHTML.value = this.MapAutoCompleteModel.Text;
256
+ }
257
+ showGlobalError() {
258
+ this.controlUtility.showGlobalError();
259
+ }
260
+ getErrorValidation(ErrorList) {
261
+ if (this.markAllAsTouched && this.group.invalid) {
262
+ this.showGlobalError();
263
+ this.markAllAsTouched = false;
264
+ }
265
+ return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
266
+ }
267
+ AutocompleteSelected(result) {
268
+ this.MapAutoCompleteModel == new MapAutocompleteDTO();
269
+ this.MapAutoCompleteModel.Text = result.formatted_address;
270
+ this.MapAutoCompleteModel.PlaceID = result.place_id;
271
+ this.MapAutoCompleteModel.GoogleMapsURL = result.url;
272
+ }
273
+ LocationSelected(location) {
274
+ this.MapAutoCompleteModel.Latitude = location.latitude;
275
+ this.MapAutoCompleteModel.Longitude = location.longitude;
276
+ this.MapAutoCompleteFormControl.setValue(null);
277
+ this.MapAutoCompleteFormControl.setValue(this.MapAutoCompleteModel);
278
+ let originalValue = this.MapAutoCompleteFormControl.value;
279
+ if (this.options.PatchFunction && this.options.PatchPath && this.MapAutoCompleteFormControl.valid) {
280
+ this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
281
+ }
282
+ //Use this line to enable two way binding.
283
+ this.options.Value = this.MapAutoCompleteModel;
284
+ }
285
+ GermanAddressMapped(result) {
286
+ if (result.type) {
287
+ if (result.target.value == "") {
288
+ this.MapAutoCompleteFormControl.setValue(result);
289
+ this.group.controls[this.options.Name].setValue(result);
290
+ this.options.Value = result;
291
+ }
292
+ return;
293
+ }
294
+ this.MapAutoCompleteModel == new MapAutocompleteDTO();
295
+ this.MapAutoCompleteModel.Text = result.displayAddress;
296
+ this.MapAutoCompleteModel.PlaceID = result.placeID;
297
+ this.MapAutoCompleteModel.GoogleMapsURL = result.url;
298
+ this.MapAutoCompleteModel.Latitude = result.geoLocation.latitude;
299
+ this.MapAutoCompleteModel.Longitude = result.geoLocation.longitude;
300
+ this.MapAutoCompleteFormControl.setValue(this.MapAutoCompleteModel);
301
+ this.group.controls[this.options.Name].setValue(this.MapAutoCompleteModel);
302
+ this.OnChange.emit(this.MapAutoCompleteFormControl.value);
303
+ //Use this line to enable two way binding.
304
+ this.options.Value = this.MapAutoCompleteModel;
305
+ }
306
+ }
307
+ MapAutoCompleteComponent.controlContainerstatic = null;
308
+ MapAutoCompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapAutoCompleteComponent, deps: [{ token: i1.MapsAPILoader }, { token: i0.NgZone }, { token: i2.ControlUtility }, { token: i3.ControlContainer, optional: true }, { token: i3.FormGroupDirective }, { token: i4.UtilityService }, { token: i4.BBSFTranslateService }, { token: i4.ControlValidationService }, { token: i5.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component });
309
+ MapAutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: MapAutoCompleteComponent, selector: "BBSF-MapAutoComplete", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, viewQueries: [{ propertyName: "searchElementRef", first: true, predicate: ["search"], descendants: true }], ngImport: i0, template: "\r\n<div class=\"form-group bbsf-control bbsf-maps\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&!options.IsReadonly\" class=\"text-danger\">*</span>\r\n </label>\r\n <!--input-->\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.IsReadonly\">\r\n <input class=\"form-control{{options.ExtraClasses}}\"\r\n [value]=\"MapAutoCompleteModel.Text\"\r\n [address]=\"MapAutoCompleteModel.Text\"\r\n value=\"{{MapAutoCompleteModel.Text}}\"\r\n aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n [class.is-invalid]=\"MapAutoCompleteFormControl.invalid && MapAutoCompleteFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" (keyup)=\"GermanAddressMapped($event)\"\r\n matGoogleMapsAutocomplete #search (onAutocompleteSelected)=\"AutocompleteSelected($event)\"\r\n (onLocationSelected)=\"LocationSelected($event)\" (onGermanAddressMapped)=\"GermanAddressMapped($event)\" />\r\n\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\">{{MapAutoCompleteModel.Text}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.IsReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\"\r\n *ngIf=\"(MapAutoCompleteFormControl.invalid && MapAutoCompleteFormControl.touched)\">\r\n {{getErrorValidation(MapAutoCompleteFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty)\">{{resetError()}} </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.MatGoogleMapsAutocompleteDirective, selector: "[matGoogleMapsAutocomplete]", inputs: ["address", "country", "placeIdOnly", "strictBounds", "types", "type", "autoCompleteOptions", "value"], outputs: ["onChange", "onAutocompleteSelected", "onGermanAddressMapped", "onLocationSelected"], exportAs: ["matGoogleMapsAutocomplete"] }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i6.KeyValuePipe, name: "keyvalue" }] });
310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MapAutoCompleteComponent, decorators: [{
311
+ type: Component,
312
+ args: [{ selector: 'BBSF-MapAutoComplete', template: "\r\n<div class=\"form-group bbsf-control bbsf-maps\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&!options.IsReadonly\" class=\"text-danger\">*</span>\r\n </label>\r\n <!--input-->\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.IsReadonly\">\r\n <input class=\"form-control{{options.ExtraClasses}}\"\r\n [value]=\"MapAutoCompleteModel.Text\"\r\n [address]=\"MapAutoCompleteModel.Text\"\r\n value=\"{{MapAutoCompleteModel.Text}}\"\r\n aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n [class.is-invalid]=\"MapAutoCompleteFormControl.invalid && MapAutoCompleteFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" (keyup)=\"GermanAddressMapped($event)\"\r\n matGoogleMapsAutocomplete #search (onAutocompleteSelected)=\"AutocompleteSelected($event)\"\r\n (onLocationSelected)=\"LocationSelected($event)\" (onGermanAddressMapped)=\"GermanAddressMapped($event)\" />\r\n\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\">{{MapAutoCompleteModel.Text}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.IsReadonly\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\"\r\n *ngIf=\"(MapAutoCompleteFormControl.invalid && MapAutoCompleteFormControl.touched)\">\r\n {{getErrorValidation(MapAutoCompleteFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty)\">{{resetError()}} </div>\r\n</div>\r\n" }]
313
+ }], ctorParameters: function () { return [{ type: i1.MapsAPILoader }, { type: i0.NgZone }, { type: i2.ControlUtility }, { type: i3.ControlContainer, decorators: [{
314
+ type: Optional
315
+ }] }, { type: i3.FormGroupDirective }, { type: i4.UtilityService }, { type: i4.BBSFTranslateService }, { type: i4.ControlValidationService }, { type: i5.GlobalSettings }]; }, propDecorators: { group: [{
316
+ type: Input
317
+ }], options: [{
318
+ type: Input
319
+ }], OnChange: [{
320
+ type: Output
321
+ }], searchElementRef: [{
322
+ type: ViewChild,
323
+ args: ["search", { static: false }]
324
+ }] } });
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFwQXV0b0NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9NYXBBdXRvQ29tcGxldGUvTWFwQXV0b0NvbXBsZXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9NYXBBdXRvQ29tcGxldGUvTWFwQXV0b0NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFFBQVEsRUFBc0IsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEgsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW9FLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFNUUsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQWtELFdBQVcsRUFBa0IsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBU3ZILE1BQU0sT0FBTyx3QkFBd0I7SUFJbkMsWUFDVSxhQUE0QixFQUM1QixNQUFjLEVBQ2QsY0FBOEIsRUFDbEIsZ0JBQWtDLEVBQy9DLDBCQUE4QyxFQUM3QyxjQUE4QixFQUM5QixTQUErQixFQUMvQix3QkFBa0QsRUFDbEQsY0FBOEI7UUFSOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNsQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQy9DLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBb0I7UUFDN0MsbUJBQWMsR0FBZCxj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QUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3JELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDakUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNuRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN6RCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ2pELENBQUM7O0FBOVRNLCtDQUFzQixHQUFHLElBQUksQ0FBQztzSEFIMUIsd0JBQXdCOzBHQUF4Qix3QkFBd0IsMlBDakJyQyxrb0VBc0NBOzRGRHJCYSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0Usc0JBQXNCOzswQkFZN0IsUUFBUTtpTkFTRixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBU0EsZ0JBQWdCO3NCQUR0QixTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGNvbnN0IGdvb2dsZTogYW55XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3B0aW9uYWwsIE5nWm9uZSwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBNYXBBdXRvQ29tcGxldGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9NYXBBdXRvQ29tcGxldGVPcHRpb25zJztcclxuaW1wb3J0IHsgTWFwQXV0b2NvbXBsZXRlRFRPIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9NYXBBdXRvY29tcGxldGVEVE8nO1xyXG5pbXBvcnQgeyBNYXRHb29nbGVNYXBzQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXItbWF0ZXJpYWwtZXh0ZW5zaW9ucy9nb29nbGUtbWFwcy1hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXBzQVBJTG9hZGVyLCBMYXp5TWFwc0FQSUxvYWRlciB9IGZyb20gJ0BhZ20vY29yZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIGVudmlyb25tZW50LCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtTWFwQXV0b0NvbXBsZXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vTWFwQXV0b0NvbXBsZXRlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcEF1dG9Db21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG1hcHNBUElMb2FkZXI6IE1hcHNBUElMb2FkZXIsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwdWJsaWMgTWFwQXV0b0NvbXBsZXRlQ29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSxcclxuICAgIHByaXZhdGUgVXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZ2xvYmFsU2V0dGluZ3M6IEdsb2JhbFNldHRpbmdzKSB7XHJcbiAgICBNYXBBdXRvQ29tcGxldGVDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gdHJhbnNsYXRlLmN1cnJlbnRMYW5nICE9IHVuZGVmaW5lZCA/IHRyYW5zbGF0ZS5jdXJyZW50TGFuZyA6IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZ1xyXG4gIH1cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IE1hcEF1dG9Db21wbGV0ZU9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBNYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIE1hcEF1dG9Db21wbGV0ZU1vZGVsOiBNYXBBdXRvY29tcGxldGVEVE8gPSBuZXcgTWFwQXV0b2NvbXBsZXRlRFRPKCk7XHJcbiAgQ3VycmVudExhbmd1YWdlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIG9uQXV0b2NvbXBsZXRlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgb25HZXJtYW5BZGRyZXNzTWFwcGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIG9uTG9jYXRpb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAVmlld0NoaWxkKFwic2VhcmNoXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBzZWFyY2hFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xyXG4gIE1hdEdvb2dsZU1hcHNBdXRvY29tcGxldGVDb21wb25lbnQ6IE1hdEdvb2dsZU1hcHNBdXRvY29tcGxldGVDb21wb25lbnRcclxuICBMYXp5TWFwc0FQSUxvYWRlcjogTGF6eU1hcHNBUElMb2FkZXJcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBwbGFjZTogYW55O1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuaXNDcmVhdGVkQmVmb3IgPSBmYWxzZVxyXG5cclxuICAgIHRoaXMuTWFwQXV0b0NvbXBsZXRlTW9kZWwgPSBuZXcgTWFwQXV0b2NvbXBsZXRlRFRPKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLkN1cnJlbnRMYW5ndWFnZSA9IGV2ZW50Lmxhbmc7XHJcbiAgICAgIDtcclxuICAgICAgaWYgKHRoaXMuQ3VycmVudExhbmd1YWdlID09ICdhcicpXHJcbiAgICAgICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2NvbmZpZ1wiXVtcImxvY2FsZUlkXCJdID0gXCJhci1FR1wiO1xyXG4gICAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2VuJylcclxuICAgICAgICB0aGlzLm1hcHNBUElMb2FkZXJbXCJfY29uZmlnXCJdW1wibG9jYWxlSWRcIl0gPSBcImVuLVVTXCI7XHJcbiAgICAgIHRoaXMubWFwc0FQSUxvYWRlcltcIl9zY3JpcHRMb2FkaW5nUHJvbWlzZVwiXSA9IG51bGxcclxuICAgICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2NvbmZpZ1wiXVtcImFwaUtleVwiXSA9IGAke2Vudmlyb25tZW50LkJCU0ZfR29vZ2xlTWFwS2V5fSZsYW5ndWFnZT0ke3RoaXMuQ3VycmVudExhbmd1YWdlfWA7XHJcbiAgICAgIHZhciBTY3JpcHRUYWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1hcHNBUElMb2FkZXJbXCJfU0NSSVBUX0lEXCJdKTtcclxuICAgICAgaWYgKFNjcmlwdFRhZylcclxuICAgICAgICBTY3JpcHRUYWcucmVtb3ZlKCk7XHJcbiAgICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJwYWMtY29udGFpbmVyXCIpO1xyXG4gICAgICB3aGlsZSAoZWxlbWVudHMubGVuZ3RoID4gMClcclxuICAgICAgICBlbGVtZW50c1swXS5yZW1vdmUoKTtcclxuXHJcbiAgICAgIGxldCB3aW5kb3cgPSB0aGlzLm1hcHNBUElMb2FkZXJbXCJfd2luZG93UmVmXCJdLmdldE5hdGl2ZVdpbmRvdygpO1xyXG4gICAgICB3aW5kb3cuZ29vZ2xlID0gbnVsbFxyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLkxhenlNYXBzQVBJTG9hZGVyID0gbmV3IExhenlNYXBzQVBJTG9hZGVyKHtcclxuICAgICAgICAvLyAmbGFuZ3VhZ2U9JHtVdGlsaXR5U2VydmljZS5DdXJyZW50TGFuZ3VhZ2V9XHJcbiAgICAgICAgYXBpS2V5OiBgJHtlbnZpcm9ubWVudC5CQlNGX0dvb2dsZU1hcEtleX0mbGFuZ3VhZ2U9JHt0aGlzLkN1cnJlbnRMYW5ndWFnZX1gLFxyXG4gICAgICAgIGxpYnJhcmllczogWydwbGFjZXMnXSxcclxuICAgICAgfSwgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX3dpbmRvd1JlZlwiXSwgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2RvY3VtZW50UmVmXCJdLCB0aGlzLm1hcHNBUElMb2FkZXJbXCJfY29uZmlnXCJdW1wibG9jYWxlSWRcIl0pO1xyXG4gICAgICB0aGlzLkxhenlNYXBzQVBJTG9hZGVyLmxvYWQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICBsZXQgYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUodGhpcy5zZWFyY2hFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICAgIHR5cGVzOiBbXCJhZGRyZXNzXCJdXHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF1dG9jb21wbGV0ZS5hZGRMaXN0ZW5lcigncGxhY2VfY2hhbmdlZCcsICgvKipcclxuICAgICAgICAgICAgICAgICogQHJldHVybiB7P31cclxuICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKC8qKlxyXG4gICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7P31cclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgcGxhY2UgcmVzdWx0XHJcbiAgICAgICAgICAgICAgICAvKiogQHR5cGUgez99ICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZSA9IGF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xyXG4gICAgICAgICAgICAgICAgLyoqIEB0eXBlIHs/fSAqL1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2VybWFuQWRkcmVzcyA9IHtcclxuICAgICAgICAgICAgICAgICAgZ21JRDogcGxhY2UuaWQsXHJcbiAgICAgICAgICAgICAgICAgIGljb246IHBsYWNlLmljb24sXHJcbiAgICAgICAgICAgICAgICAgIHVybDogcGxhY2UudXJsLFxyXG4gICAgICAgICAgICAgICAgICBwbGFjZUlEOiBwbGFjZS5wbGFjZV9pZCxcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBwbGFjZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICB2aWNpbml0eTogcGxhY2UudmljaW5pdHksXHJcbiAgICAgICAgICAgICAgICAgIGxvY2FsaXR5OiB7fSxcclxuICAgICAgICAgICAgICAgICAgc3RhdGU6IHt9LFxyXG4gICAgICAgICAgICAgICAgICBjb3VudHJ5OiB7fSxcclxuICAgICAgICAgICAgICAgICAgZ2VvTG9jYXRpb246IHsgbGF0aXR1ZGU6IC0xLCBsb25naXR1ZGU6IC0xIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwbGFjZS5nZW9tZXRyeSAmJiBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzLmdlb0xvY2F0aW9uLmxhdGl0dWRlID0gcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24ubGF0KCk7XHJcbiAgICAgICAgICAgICAgICAgIGdlcm1hbkFkZHJlc3MuZ2VvTG9jYXRpb24ubG9uZ2l0dWRlID0gcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24ubG5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBwbGFjZS5hZGRyZXNzX2NvbXBvbmVudHMuZm9yRWFjaCgoLyoqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHs/fSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4gez99XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZXMuaW5kZXhPZignc3RyZWV0X251bWJlcicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGdlcm1hbkFkZHJlc3NbXCJzdHJlZXROdW1iZXJcIl0gPSB2YWx1ZS5zaG9ydF9uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZXMuaW5kZXhPZigncm91dGUnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzW1wic3RyZWV0TmFtZVwiXSA9IHZhbHVlLmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGVzLmluZGV4T2YoJ3Bvc3RhbF9jb2RlJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzc1tcInBvc3RhbENvZGVcIl0gPSBOdW1iZXIodmFsdWUuc2hvcnRfbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlcy5pbmRleE9mKCdzdWJsb2NhbGl0eScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGdlcm1hbkFkZHJlc3NbXCJzdWJsb2NhbGl0eVwiXSA9IHZhbHVlLmxvbmdfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGVzLmluZGV4T2YoJ2xvY2FsaXR5JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzcy5sb2NhbGl0eVtcImxvbmdcIl0gPSB2YWx1ZS5sb25nX25hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzLmxvY2FsaXR5W1wic2hvcnRcIl0gPSB2YWx1ZS5zaG9ydF9uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZXMuaW5kZXhPZignYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzcy5zdGF0ZVtcImxvbmdcIl0gPSB2YWx1ZS5sb25nX25hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzLnN0YXRlW1wic2hvcnRcIl0gPSB2YWx1ZS5zaG9ydF9uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZXMuaW5kZXhPZignY291bnRyeScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGdlcm1hbkFkZHJlc3MuY291bnRyeVtcImxvbmdcIl0gPSB2YWx1ZS5sb25nX25hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzLmNvdW50cnlbXCJzaG9ydFwiXSA9IHZhbHVlLnNob3J0X25hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlcy5pbmRleE9mKCdhZG1pbmlzdHJhdGl2ZV9hcmVhX2xldmVsXzMnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzLmxvY2FsaXR5W1wic2hvcnRcIl0gPSB2YWx1ZS5zaG9ydF9uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMub25HZXJtYW5BZGRyZXNzTWFwcGVkLmVtaXQoZ2VybWFuQWRkcmVzcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkdlcm1hbkFkZHJlc3NNYXBwZWQoZ2VybWFuQWRkcmVzcylcclxuICAgICAgICAgICAgICAgIGlmICghcGxhY2UucGxhY2VfaWQgfHwgcGxhY2UuZ2VvbWV0cnkgPT09IHVuZGVmaW5lZCB8fCBwbGFjZS5nZW9tZXRyeSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBwbGFjZSByZXN1bHQgaXMgbm90IHZhbGlkXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyBzaG93IGRpYWxvZyB0byBzZWxlY3QgYSBhZGRyZXNzIGZyb20gdGhlIGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIC8vIGVtaXQgZmFpbGVkIGV2ZW50XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyAgIHRoaXMuYWRkcmVzcyA9IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkF1dG9jb21wbGV0ZVNlbGVjdGVkLmVtaXQocGxhY2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5BdXRvY29tcGxldGVTZWxlY3RlZChwbGFjZSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uTG9jYXRpb25TZWxlY3RlZC5lbWl0KHtcclxuICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uLmxhdCgpLFxyXG4gICAgICAgICAgICAgICAgICBsb25naXR1ZGU6IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uLmxuZygpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLkN1cnJlbnRMYW5ndWFnZSA9PSAnYXInKVxyXG4gICAgICB0aGlzLm1hcHNBUElMb2FkZXJbXCJfY29uZmlnXCJdW1wibG9jYWxlSWRcIl0gPSBcImFyLUVHXCI7XHJcbiAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2VuJylcclxuICAgICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2NvbmZpZ1wiXVtcImxvY2FsZUlkXCJdID0gXCJlbi1VU1wiO1xyXG4gICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX3NjcmlwdExvYWRpbmdQcm9taXNlXCJdID0gbnVsbFxyXG4gICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2NvbmZpZ1wiXVtcImFwaUtleVwiXSA9IGAke2Vudmlyb25tZW50LkJCU0ZfR29vZ2xlTWFwS2V5fSZsYW5ndWFnZT0ke3RoaXMuQ3VycmVudExhbmd1YWdlfWA7XHJcbiAgICB2YXIgbGVmdFNlY3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1hcHNBUElMb2FkZXJbXCJfU0NSSVBUX0lEXCJdKTtcclxuICAgIGlmIChsZWZ0U2VjdGlvbilcclxuICAgICAgbGVmdFNlY3Rpb24ucmVtb3ZlKCk7XHJcbiAgICB0aGlzLkxhenlNYXBzQVBJTG9hZGVyID0gbmV3IExhenlNYXBzQVBJTG9hZGVyKHtcclxuICAgICAgYXBpS2V5OiBgJHtlbnZpcm9ubWVudC5CQlNGX0dvb2dsZU1hcEtleX0mbGFuZ3VhZ2U9JHt0aGlzLkN1cnJlbnRMYW5ndWFnZX1gLFxyXG4gICAgICBsaWJyYXJpZXM6IFsncGxhY2VzJ10sXHJcbiAgICB9LCB0aGlzLm1hcHNBUElMb2FkZXJbXCJfd2luZG93UmVmXCJdLCB0aGlzLm1hcHNBUElMb2FkZXJbXCJfZG9jdW1lbnRSZWZcIl0sIHRoaXMubWFwc0FQSUxvYWRlcltcIl9jb25maWdcIl1bXCJsb2NhbGVJZFwiXSk7XHJcbiAgICB0aGlzLkxhenlNYXBzQVBJTG9hZGVyLmxvYWQoKTtcclxuXHJcbiAgICB0aGlzLm1hcHNBUElMb2FkZXIubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBsZXQgYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUodGhpcy5zZWFyY2hFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICB0eXBlczogW1wiYWRkcmVzc1wiXVxyXG5cclxuICAgICAgfSk7XHJcblxyXG4gICAgfSlcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5WaWV3VHlwZSlcclxuICAgICAgdGhpcy5vcHRpb25zLlZpZXdUeXBlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5WaWV3VHlwZTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuTGFiZWxLZXkgIT0gXCJcIilcclxuICAgICAgdGhpcy5vcHRpb25zLkxhYmVsVmFsdWUgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUodGhpcy5vcHRpb25zLkxhYmVsS2V5KTtcclxuXHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXNhc3luYyk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLlZhbHVlICE9IG51bGwpIHtcclxuICAgICAgbGV0IGdlcm1hbkFkZHJlc3MgPSB7XHJcblxyXG4gICAgICAgIHVybDogdGhpcy5vcHRpb25zLlZhbHVlLkdvb2dsZU1hcHNVUkwsXHJcbiAgICAgICAgcGxhY2VJRDogdGhpcy5vcHRpb25zLlZhbHVlLlBsYWNlSUQsXHJcbiAgICAgICAgZGlzcGxheUFkZHJlc3M6IHRoaXMub3B0aW9ucy5WYWx1ZS5UZXh0LFxyXG4gICAgICAgIG5hbWU6IHRoaXMub3B0aW9ucy5WYWx1ZS5UZXh0LFxyXG4gICAgICAgIGxvY2FsaXR5OiB7fSxcclxuICAgICAgICBzdGF0ZToge30sXHJcbiAgICAgICAgY291bnRyeToge30sXHJcbiAgICAgICAgZ2VvTG9jYXRpb246IHsgbGF0aXR1ZGU6IC0xLCBsb25naXR1ZGU6IC0xIH0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBnZXJtYW5BZGRyZXNzLmdlb0xvY2F0aW9uLmxhdGl0dWRlID0gdGhpcy5vcHRpb25zLlZhbHVlLkxhdGl0dWRlO1xyXG4gICAgICBnZXJtYW5BZGRyZXNzLmdlb0xvY2F0aW9uLmxvbmdpdHVkZSA9IHRoaXMub3B0aW9ucy5WYWx1ZS5Mb25naXR1ZGU7XHJcbiAgICAgIHRoaXMub25HZXJtYW5BZGRyZXNzTWFwcGVkLmVtaXQoZ2VybWFuQWRkcmVzcyk7XHJcbiAgICAgIHRoaXMuR2VybWFuQWRkcmVzc01hcHBlZChnZXJtYW5BZGRyZXNzKVxyXG4gICAgICB0aGlzLnBsYWNlID0ge1xyXG5cclxuICAgICAgICB1cmw6IHRoaXMub3B0aW9ucy5WYWx1ZS5Hb29nbGVNYXBzVVJMLFxyXG4gICAgICAgIHBsYWNlX2lkOiB0aGlzLm9wdGlvbnMuVmFsdWUuUGxhY2VJRCxcclxuICAgICAgICBmb3JtYXR0ZWRfYWRkcmVzczogdGhpcy5vcHRpb25zLlZhbHVlLlRleHQsXHJcbiAgICAgICAgbmFtZTogdGhpcy5vcHRpb25zLlZhbHVlLlRleHQsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMub25BdXRvY29tcGxldGVTZWxlY3RlZC5lbWl0KHRoaXMucGxhY2UpO1xyXG4gICAgICB0aGlzLkF1dG9jb21wbGV0ZVNlbGVjdGVkKHRoaXMucGxhY2UpXHJcblxyXG4gICAgICB0aGlzLm9uTG9jYXRpb25TZWxlY3RlZC5lbWl0KHtcclxuICAgICAgICBsYXRpdHVkZTogdGhpcy5vcHRpb25zLlZhbHVlLkxhdGl0dWRlLFxyXG4gICAgICAgIGxvbmdpdHVkZTogdGhpcy5vcHRpb25zLlZhbHVlLkxvbmdpdHVkZVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV0uc2V0VmFsdWUodGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbClcclxuICAgICAgdGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMuVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBWYWxpZGF0aW9ucyA9IHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUNvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZVxyXG4gICAgfSlcclxuXHJcblxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkF0dHJpYnV0ZUxpc3QgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5OYW1lKTtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0W2luZGV4XS5LZXksIHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0W2luZGV4XS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBlbGVtZW50SFRNTCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5OYW1lKSBhcyBhbnlcclxuICAgIGVsZW1lbnRIVE1MLnZhbHVlID0gdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5UZXh0O1xyXG4gIH1cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLnJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpXHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBBdXRvY29tcGxldGVTZWxlY3RlZChyZXN1bHQpIHtcclxuXHJcblxyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbCA9PSBuZXcgTWFwQXV0b2NvbXBsZXRlRFRPKCk7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLlRleHQgPSByZXN1bHQuZm9ybWF0dGVkX2FkZHJlc3M7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLlBsYWNlSUQgPSByZXN1bHQucGxhY2VfaWQ7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLkdvb2dsZU1hcHNVUkwgPSByZXN1bHQudXJsO1xyXG4gIH1cclxuICBMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uKSB7XHJcblxyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5MYXRpdHVkZSA9IGxvY2F0aW9uLmxhdGl0dWRlO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5Mb25naXR1ZGUgPSBsb2NhdGlvbi5sb25naXR1ZGU7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xyXG5cclxuICAgIHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbCk7XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gJiYgdGhpcy5vcHRpb25zLlBhdGNoUGF0aCAmJiB0aGlzLk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0Y2hDb250cm9sVmFsdWUob3JpZ2luYWxWYWx1ZSwgdGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24sIHRoaXMub3B0aW9ucy5QYXRjaFBhdGgpXHJcbiAgICB9XHJcbiAgICAvL1VzZSB0aGlzIGxpbmUgdG8gZW5hYmxlIHR3byB3YXkgYmluZGluZy5cclxuICAgIHRoaXMub3B0aW9ucy5WYWx1ZSA9IHRoaXMuTWFwQXV0b0NvbXBsZXRlTW9kZWw7XHJcbiAgfVxyXG5cclxuICBHZXJtYW5BZGRyZXNzTWFwcGVkKHJlc3VsdCkge1xyXG4gICAgaWYgKHJlc3VsdC50eXBlKSB7XHJcbiAgICAgIGlmIChyZXN1bHQudGFyZ2V0LnZhbHVlID09IFwiXCIpIHtcclxuICAgICAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHJlc3VsdCk7XHJcbiAgICAgICAgdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV0uc2V0VmFsdWUocmVzdWx0KTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuVmFsdWUgPSByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbCA9PSBuZXcgTWFwQXV0b2NvbXBsZXRlRFRPKCk7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLlRleHQgPSByZXN1bHQuZGlzcGxheUFkZHJlc3M7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLlBsYWNlSUQgPSByZXN1bHQucGxhY2VJRDtcclxuICAgIHRoaXMuTWFwQXV0b0NvbXBsZXRlTW9kZWwuR29vZ2xlTWFwc1VSTCA9IHJlc3VsdC51cmw7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLkxhdGl0dWRlID0gcmVzdWx0Lmdlb0xvY2F0aW9uLmxhdGl0dWRlO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5Mb25naXR1ZGUgPSByZXN1bHQuZ2VvTG9jYXRpb24ubG9uZ2l0dWRlO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsKTtcclxuICAgIHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdLnNldFZhbHVlKHRoaXMuTWFwQXV0b0NvbXBsZXRlTW9kZWwpXHJcbiAgICB0aGlzLk9uQ2hhbmdlLmVtaXQodGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC52YWx1ZSlcclxuICAgIC8vVXNlIHRoaXMgbGluZSB0byBlbmFibGUgdHdvIHdheSBiaW5kaW5nLlxyXG4gICAgdGhpcy5vcHRpb25zLlZhbHVlID0gdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbDtcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcblxyXG4gIFJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcblxyXG4gIEFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZEN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRDdXN0b21WYWxpZGF0aW9uKHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBJc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wpXHJcbiAgfVxyXG59XHJcblxyXG5cclxuIiwiXHJcbjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGJic2YtY29udHJvbCBiYnNmLW1hcHNcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCIob3B0aW9ucy5WaWV3VHlwZT09MSk/J2Jic2YtdmVydGljYWwnOidiYnNmLWhvcml6b250YWwnXCI+XHJcbiAgICA8IS0tbGFiZWwtLT5cclxuICAgIDxsYWJlbCAqbmdJZj1cIiFvcHRpb25zLkhpZGVMYWJlbFwiIGNsYXNzPVwiYmJzZi1sYWJlbCB7e29wdGlvbnMuTGFiZWxFeHRyYUNsYXNzZXN9fVwiPlxyXG4gICAgICB7e29wdGlvbnMuTGFiZWxWYWx1ZX19XHJcbiAgICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIigob3B0aW9ucy5TaG93QXN0ZXJpc2smJm9wdGlvbnMuSXNSZXF1aXJlZCl8fChvcHRpb25zLklzUmVxdWlyZWQpKSYmIW9wdGlvbnMuSXNSZWFkb25seVwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgPC9sYWJlbD5cclxuICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCIgICpuZ0lmPVwiIW9wdGlvbnMuSXNSZWFkb25seVwiPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2x7e29wdGlvbnMuRXh0cmFDbGFzc2VzfX1cIlxyXG4gICAgICAgICAgICAgW3ZhbHVlXT1cIk1hcEF1dG9Db21wbGV0ZU1vZGVsLlRleHRcIlxyXG4gICAgICAgICAgICAgW2FkZHJlc3NdPVwiTWFwQXV0b0NvbXBsZXRlTW9kZWwuVGV4dFwiXHJcbiAgICAgICAgICAgICB2YWx1ZT1cInt7TWFwQXV0b0NvbXBsZXRlTW9kZWwuVGV4dH19XCJcclxuICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJlbWFpbC1lcnJvclwiXHJcbiAgICAgICAgICAgICBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cIk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLmludmFsaWQgJiYgTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wudG91Y2hlZFwiXHJcbiAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7b3B0aW9ucy5QbGFjZWhvbGRlcn19XCIgaWQ9XCJ7e29wdGlvbnMuTmFtZX19XCIgKGtleXVwKT1cIkdlcm1hbkFkZHJlc3NNYXBwZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICBtYXRHb29nbGVNYXBzQXV0b2NvbXBsZXRlICNzZWFyY2ggKG9uQXV0b2NvbXBsZXRlU2VsZWN0ZWQpPVwiQXV0b2NvbXBsZXRlU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAob25Mb2NhdGlvblNlbGVjdGVkKT1cIkxvY2F0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiIChvbkdlcm1hbkFkZHJlc3NNYXBwZWQpPVwiR2VybWFuQWRkcmVzc01hcHBlZCgkZXZlbnQpXCIgLz5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgICA8IS0tIHJlYWRvbmx5IC0tPlxyXG4gICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLklzUmVhZG9ubHlcIj48c3BhbiBjbGFzcz1cInJlYWRvbmx5LXZpZXdcIj57e01hcEF1dG9Db21wbGV0ZU1vZGVsLlRleHR9fTwvc3Bhbj5cclxuICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic3VidGV4dC1jb250YWluZXJcIiAgKm5nSWY9XCIhb3B0aW9ucy5Jc1JlYWRvbmx5XCI+XHJcbiAgICA8IS0tIExhYmVsRGVzY3JpcHRpb24tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNvbnRyb2wtZGVzY1wiICpuZ0lmPVwib3B0aW9ucy5MYWJlbERlc2NyaXB0aW9uIT1udWxsXCI+e3tvcHRpb25zLkxhYmVsRGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLXZhbGlkYXRpb25cIlxyXG4gICAgICAgICAqbmdJZj1cIihNYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC5pbnZhbGlkICYmIE1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLnRvdWNoZWQpXCI+XHJcbiAgICAgIHt7Z2V0RXJyb3JWYWxpZGF0aW9uKE1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLmVycm9yc3xrZXl2YWx1ZSl9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cIihncm91cC52YWxpZCYmZ3JvdXAuZGlydHkmJmdyb3VwLnRvdWNoZWQgKXx8KGdyb3VwLnVudG91Y2hlZCYmZ3JvdXAuaW52YWxpZCYmZ3JvdXAuZGlydHkpXCI+e3tyZXNldEVycm9yKCl9fSA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==