ets-fe-ng-sdk 17.0.430 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.component.mjs +4 -4
  2. package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.module.mjs +4 -4
  3. package/esm2022/lib/Reusables/reusable-comps/watermark/watermark.component.mjs +3 -3
  4. package/esm2022/lib/Reusables/reusable-pages/extra-pages/extra-pages-routing.module.mjs +4 -4
  5. package/esm2022/lib/Reusables/reusable-pages/extra-pages/extra-pages.module.mjs +4 -4
  6. package/esm2022/lib/Reusables/reusable-pages/logger/logger-routing.module.mjs +4 -4
  7. package/esm2022/lib/Reusables/reusable-pages/logger/logger.component.mjs +4 -4
  8. package/esm2022/lib/Reusables/reusable-pages/logger/logger.interface.mjs +1 -1
  9. package/esm2022/lib/Reusables/reusable-pages/logger/logger.module.mjs +4 -4
  10. package/esm2022/lib/Reusables/reusable-pages/logger/logger.service.mjs +3 -3
  11. package/esm2022/lib/Reusables/reusable-pages/page-not-found/page-not-found.component.mjs +3 -3
  12. package/esm2022/lib/Reusables/reusable-pages/reset/reset-routing.module.mjs +4 -4
  13. package/esm2022/lib/Reusables/reusable-pages/reset/reset.component.mjs +4 -4
  14. package/esm2022/lib/Reusables/reusable-pages/reset/reset.module.mjs +4 -4
  15. package/esm2022/lib/Reusables/reusable-pages/robot/robot-routing.module.mjs +4 -4
  16. package/esm2022/lib/Reusables/reusable-pages/robot/robot.component.mjs +3 -3
  17. package/esm2022/lib/Reusables/reusable-pages/robot/robot.module.mjs +4 -4
  18. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester-routing.module.mjs +4 -4
  19. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester.component.mjs +4 -4
  20. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester.module.mjs +4 -4
  21. package/esm2022/lib/Reusables/reusable-pages/user-activity/ua-extras/user-activity.service.mjs +3 -3
  22. package/esm2022/lib/Reusables/reusable-pages/version/version-routing.module.mjs +4 -4
  23. package/esm2022/lib/Reusables/reusable-pages/version/version.component.mjs +3 -3
  24. package/esm2022/lib/Reusables/reusable-pages/version/version.module.mjs +4 -4
  25. package/esm2022/lib/Reusables/reusable-pages/version/version.service.mjs +4 -4
  26. package/esm2022/lib/Services/Interceptors/authentication-interceptor.service.mjs +5 -5
  27. package/esm2022/lib/Services/Interceptors/global-error-handler.service.mjs +3 -3
  28. package/esm2022/lib/Services/Interceptors/logger-interceptor.service.mjs +5 -5
  29. package/esm2022/lib/Services/Interceptors/request-loader-interceptor.service.mjs +5 -5
  30. package/esm2022/lib/Services/Interceptors/request-timeout.service.mjs +4 -4
  31. package/esm2022/lib/Services/api.service.mjs +4 -4
  32. package/esm2022/lib/Services/app.service.mjs +3 -3
  33. package/esm2022/lib/Services/base.effect.mjs +3 -3
  34. package/esm2022/lib/Services/base.facade.service.mjs +1 -1
  35. package/esm2022/lib/Services/base.service.mjs +4 -4
  36. package/esm2022/lib/Services/cache/cache-updater.service.mjs +3 -3
  37. package/esm2022/lib/Services/cache/cache.service.mjs +4 -4
  38. package/esm2022/lib/Services/cache/local-cache.service.mjs +4 -4
  39. package/esm2022/lib/Services/cache/saver.service.mjs +3 -3
  40. package/esm2022/lib/Services/debouncer.service.mjs +4 -4
  41. package/esm2022/lib/Services/htmler.service.mjs +3 -3
  42. package/esm2022/lib/Services/input.service.mjs +4 -4
  43. package/esm2022/lib/Services/page-loader.service.mjs +7 -7
  44. package/esm2022/lib/Services/page.service.mjs +3 -3
  45. package/esm2022/lib/Services/route.service.mjs +4 -4
  46. package/esm2022/lib/Services/service-worker/check-for-update.service.mjs +4 -4
  47. package/esm2022/lib/Services/service-worker/handle-unrecoverable-state.service.mjs +3 -3
  48. package/esm2022/lib/Services/service-worker/log-update.service.mjs +4 -4
  49. package/esm2022/lib/Services/service-worker/prompt-update.service.mjs +3 -3
  50. package/esm2022/lib/Services/service-worker/service-worker.service.mjs +4 -4
  51. package/esm2022/lib/Services/storage.service.mjs +4 -4
  52. package/esm2022/lib/Services/theme.service.mjs +3 -3
  53. package/esm2022/lib/Services/translation.service.mjs +4 -4
  54. package/esm2022/lib/Services/utility.service.mjs +4 -4
  55. package/esm2022/lib/Services/window-security.service.mjs +4 -4
  56. package/esm2022/lib/Shared/classes/page-loader.class.mjs +1 -1
  57. package/esm2022/lib/Shared/components/add-item/add-item.component.mjs +3 -3
  58. package/esm2022/lib/Shared/components/autocomplete/autocomplete-td-rf/autocomplete-td-rf.component.mjs +4 -4
  59. package/esm2022/lib/Shared/components/autocomplete/autocomplete.component.mjs +4 -4
  60. package/esm2022/lib/Shared/components/autocomplete/autocomplete.service.mjs +4 -4
  61. package/esm2022/lib/Shared/components/btn/btn-lg/btn-lg.component.mjs +3 -3
  62. package/esm2022/lib/Shared/components/btn/btn-link/btn-link.component.mjs +3 -3
  63. package/esm2022/lib/Shared/components/btn/btn.component.mjs +4 -4
  64. package/esm2022/lib/Shared/components/btn/btn.service.mjs +4 -4
  65. package/esm2022/lib/Shared/components/btn/details-btn/details-btn.component.mjs +3 -3
  66. package/esm2022/lib/Shared/components/card/card.component.mjs +3 -3
  67. package/esm2022/lib/Shared/components/confirm-dialog/confirm-dialog.component.mjs +3 -3
  68. package/esm2022/lib/Shared/components/confirm-dialog/confirm-dialog.service.mjs +4 -4
  69. package/esm2022/lib/Shared/components/core/button/button.component.mjs +3 -3
  70. package/esm2022/lib/Shared/components/documents-name-display/documents-name-display.component.mjs +4 -4
  71. package/esm2022/lib/Shared/components/editable-text-case/editable-text-case.component.mjs +4 -4
  72. package/esm2022/lib/Shared/components/export-table/export-table.component.mjs +4 -4
  73. package/esm2022/lib/Shared/components/fields-to-display/fields-to-display.component.mjs +4 -4
  74. package/esm2022/lib/Shared/components/file-upload/file-upload.component.mjs +4 -4
  75. package/esm2022/lib/Shared/components/form-error/form-error.component.mjs +4 -4
  76. package/esm2022/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.mjs +6 -6
  77. package/esm2022/lib/Shared/components/form-generator/form-generator.base.component.mjs +11 -2
  78. package/esm2022/lib/Shared/components/form-generator/form-generator.component.mjs +4 -4
  79. package/esm2022/lib/Shared/components/form-generator/form-generator.service.mjs +3 -3
  80. package/esm2022/lib/Shared/components/form-link/form-link.component.mjs +3 -3
  81. package/esm2022/lib/Shared/components/form-tab-headers/form-tab-headers.component.mjs +3 -3
  82. package/esm2022/lib/Shared/components/index-comp-layout/index-comp-layout.component.mjs +7 -7
  83. package/esm2022/lib/Shared/components/info-dialog/info-dialog.component.mjs +4 -4
  84. package/esm2022/lib/Shared/components/info-dialog/info-dialog.service.mjs +4 -4
  85. package/esm2022/lib/Shared/components/info-icon/info-icon.component.mjs +3 -3
  86. package/esm2022/lib/Shared/components/input/date-input/date-input.component.mjs +5 -5
  87. package/esm2022/lib/Shared/components/input/day-hour-min-input/day-hour-min-input.component.mjs +4 -4
  88. package/esm2022/lib/Shared/components/input/input-base.component.mjs +4 -4
  89. package/esm2022/lib/Shared/components/input/input-basic.component.mjs +4 -4
  90. package/esm2022/lib/Shared/components/input/input-control.component.mjs +3 -3
  91. package/esm2022/lib/Shared/components/input/input-label/input-label.component.mjs +3 -3
  92. package/esm2022/lib/Shared/components/input/input-td-rf.component.mjs +4 -4
  93. package/esm2022/lib/Shared/components/input/input.component.mjs +3 -3
  94. package/esm2022/lib/Shared/components/input/input.service.mjs +4 -4
  95. package/esm2022/lib/Shared/components/input/inputs-pipes.pipe.mjs +26 -26
  96. package/esm2022/lib/Shared/components/input/validation-message/validation-message.component.mjs +6 -6
  97. package/esm2022/lib/Shared/components/input/validation-message/validation-message.service.mjs +3 -3
  98. package/esm2022/lib/Shared/components/input/year-month-td-rf/year-month-td-rf.component.mjs +3 -3
  99. package/esm2022/lib/Shared/components/input-NgModel/input-ngmodel.component.mjs +4 -4
  100. package/esm2022/lib/Shared/components/input-NgModel/validation-message-ngmodel/validation-message-ngmodel.component.mjs +3 -3
  101. package/esm2022/lib/Shared/components/input-table/input-table.component.mjs +4 -4
  102. package/esm2022/lib/Shared/components/input-table/input-table.service.mjs +3 -3
  103. package/esm2022/lib/Shared/components/label/label.component.mjs +3 -3
  104. package/esm2022/lib/Shared/components/loader/loader-animations/blinking-blocks/blinking-blocks.component.mjs +3 -3
  105. package/esm2022/lib/Shared/components/loader/loader-animations/bouncing-ball/bouncing-ball.component.mjs +3 -3
  106. package/esm2022/lib/Shared/components/loader/loader-animations/fading-bars/fading-bars.component.mjs +3 -3
  107. package/esm2022/lib/Shared/components/loader/loader-animations/fading-circles/fading-circles.component.mjs +3 -3
  108. package/esm2022/lib/Shared/components/loader/loader-animations/ring-ripples/ring-ripples.component.mjs +3 -3
  109. package/esm2022/lib/Shared/components/loader/loader.component.mjs +3 -3
  110. package/esm2022/lib/Shared/components/loader/spinner.component.mjs +3 -3
  111. package/esm2022/lib/Shared/components/modal/modal-body.directive.mjs +3 -3
  112. package/esm2022/lib/Shared/components/modal/modal-footer.directive.mjs +3 -3
  113. package/esm2022/lib/Shared/components/modal/modal.component.mjs +3 -3
  114. package/esm2022/lib/Shared/components/modal-form/modal-form.component.mjs +3 -3
  115. package/esm2022/lib/Shared/components/modal-header/modal-header.component.mjs +3 -3
  116. package/esm2022/lib/Shared/components/narration-history-comp/narration-history-comp.component.mjs +4 -4
  117. package/esm2022/lib/Shared/components/notifications/notifications.component.mjs +3 -3
  118. package/esm2022/lib/Shared/components/notifications/notifications.service.mjs +3 -3
  119. package/esm2022/lib/Shared/components/page-center-body/page-center-body.component.mjs +3 -3
  120. package/esm2022/lib/Shared/components/page-template/page-template.component.mjs +4 -4
  121. package/esm2022/lib/Shared/components/page-to-component/page-to-component.component.mjs +6 -6
  122. package/esm2022/lib/Shared/components/page-to-component/page-to-component.directive.mjs +3 -3
  123. package/esm2022/lib/Shared/components/page-to-component/page-to-component.service.mjs +3 -3
  124. package/esm2022/lib/Shared/components/paginator/paginator.component.mjs +4 -4
  125. package/esm2022/lib/Shared/components/phone-number/phone-number.component.mjs +4 -4
  126. package/esm2022/lib/Shared/components/phone-number/phone-number.model.mjs +1 -1
  127. package/esm2022/lib/Shared/components/phone-number/phone-number.service.mjs +3 -3
  128. package/esm2022/lib/Shared/components/rich-text-editor/rich-text-editor.component.mjs +12 -12
  129. package/esm2022/lib/Shared/components/rich-text-editor-rf/rich-text-editor-rf.component.mjs +12 -12
  130. package/esm2022/lib/Shared/components/row-actions/row-actions.component.mjs +3 -3
  131. package/esm2022/lib/Shared/components/svg-icon/svg-icon.component.mjs +3 -3
  132. package/esm2022/lib/Shared/components/svg-icon/svg-icon.service.mjs +3 -3
  133. package/esm2022/lib/Shared/components/table-https/table-https.component.mjs +4 -4
  134. package/esm2022/lib/Shared/components/table-input/table-input-row/table-input-row.component.mjs +3 -3
  135. package/esm2022/lib/Shared/components/table-input/table-input.component.mjs +4 -4
  136. package/esm2022/lib/Shared/components/table-plain/table-base.component.mjs +4 -4
  137. package/esm2022/lib/Shared/components/table-plain/table-plain.component.mjs +4 -4
  138. package/esm2022/lib/Shared/components/table-plain/table-plain.service.mjs +3 -3
  139. package/esm2022/lib/Shared/components/table-plain/table.pipe.mjs +20 -20
  140. package/esm2022/lib/Shared/components/text/text.component.mjs +3 -3
  141. package/esm2022/lib/Shared/components/text-area-modal/text-area-modal.component.mjs +3 -3
  142. package/esm2022/lib/Shared/components/text-area-modal/text-area-modal.service.mjs +3 -3
  143. package/esm2022/lib/Shared/components/text-case-1/text-case-1.component.mjs +4 -4
  144. package/esm2022/lib/Shared/components/text-case-2/text-case-2.component.mjs +3 -3
  145. package/esm2022/lib/Shared/components/text-case-2/text-case.service.mjs +4 -4
  146. package/esm2022/lib/Shared/components/text-case-input/text-case-input.component.mjs +3 -3
  147. package/esm2022/lib/Shared/components/toggle-input-form/toggle-input-form.component.mjs +3 -3
  148. package/esm2022/lib/Shared/components/translator-case/translator-case.component.mjs +3 -3
  149. package/esm2022/lib/Shared/components/vertical-nav/vertical-nav.component.mjs +4 -4
  150. package/esm2022/lib/Shared/components/view-form-buttons/view-form-buttons.component.mjs +3 -3
  151. package/esm2022/lib/Shared/components/webcam-media/webcam-media.component.mjs +4 -4
  152. package/esm2022/lib/Shared/directives/commafy-number.directive.mjs +3 -3
  153. package/esm2022/lib/Shared/directives/drag-drop-file-upload.directive.mjs +4 -4
  154. package/esm2022/lib/Shared/directives/form-invalid-class.directive.mjs +3 -3
  155. package/esm2022/lib/Shared/directives/index.directive.mjs +23 -23
  156. package/esm2022/lib/Shared/directives/input-formatter.directive.mjs +14 -14
  157. package/esm2022/lib/Shared/directives/integer-only.directive.mjs +4 -4
  158. package/esm2022/lib/Shared/directives/mHref.directive.mjs +3 -3
  159. package/esm2022/lib/Shared/directives/negative-number-only.directive.mjs +4 -4
  160. package/esm2022/lib/Shared/directives/responsiveness.directive.mjs +20 -20
  161. package/esm2022/lib/Shared/directives/translator.directive.mjs +4 -4
  162. package/esm2022/lib/Shared/models/form.class.mjs +1 -1
  163. package/esm2022/lib/Shared/pipes/form-invalid-class.pipe.mjs +3 -3
  164. package/esm2022/lib/Shared/pipes/paginator.pipe.mjs +3 -3
  165. package/esm2022/lib/Shared/pipes/translate.pipe.mjs +7 -7
  166. package/esm2022/lib/Shared/pipes/utility.pipe.mjs +134 -134
  167. package/esm2022/lib/Shared/prototypes/prototypes.mjs +1 -1
  168. package/esm2022/lib/Shared/shared.module.mjs +4 -4
  169. package/esm2022/lib/authentication/web-user/web-user-authentication.guard.mjs +1 -1
  170. package/esm2022/lib/authentication/web-user/web-user-authentication.interceptor.mjs +1 -1
  171. package/esm2022/lib/authentication/web-user/web-user-authentication.service.mjs +3 -3
  172. package/esm2022/lib/authentication/web-user/web-user-forgot-password.component.mjs +4 -4
  173. package/esm2022/lib/authentication/web-user/web-user-login.component.mjs +4 -4
  174. package/esm2022/lib/authentication/web-user/web-user-reset-password.component.mjs +4 -4
  175. package/esm2022/lib/configs/base-functions.mjs +1 -1
  176. package/fesm2022/ets-fe-ng-sdk.mjs +766 -758
  177. package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
  178. package/lib/Services/utility.service.d.ts +5 -5
  179. package/lib/Shared/components/btn/btn.component.d.ts +3 -3
  180. package/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.d.ts +1 -1
  181. package/lib/Shared/components/form-generator/form-generator.base.component.d.ts +3 -0
  182. package/lib/Shared/components/index-comp-layout/index-comp-layout.component.d.ts +1 -1
  183. package/lib/Shared/components/input/input-base.component.d.ts +3 -7
  184. package/lib/Shared/components/table-https/table-https.component.d.ts +3 -3
  185. package/lib/Shared/components/text-case-2/text-case.service.d.ts +1 -1
  186. package/package.json +1 -1
@@ -234,10 +234,10 @@ export class InputBase {
234
234
  this.control().patchValue(value);
235
235
  this.mchange.emit(value);
236
236
  }
237
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: InputBase, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
238
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "17.3.8", type: InputBase, isStandalone: true, selector: "ng-component", inputs: { cls: { classPropertyName: "cls", publicName: "cls", isSignal: true, isRequired: false, transformFunction: null }, dontFormatAsInputSignal: { classPropertyName: "dontFormatAsInputSignal", publicName: "dontFormatAsInput", isSignal: true, isRequired: false, transformFunction: null }, duplicateCheckSignal: { classPropertyName: "duplicateCheckSignal", publicName: "duplicateCheck", isSignal: true, isRequired: false, transformFunction: null }, presetValue: { classPropertyName: "presetValue", publicName: "presetValue", isSignal: true, isRequired: false, transformFunction: null }, endLabelSignal: { classPropertyName: "endLabelSignal", publicName: "endLabel", isSignal: true, isRequired: false, transformFunction: null }, endLabelTooltipSignal: { classPropertyName: "endLabelTooltipSignal", publicName: "endLabelTooltip", isSignal: true, isRequired: false, transformFunction: null }, idSignal: { classPropertyName: "idSignal", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, inputContClassSignal: { classPropertyName: "inputContClassSignal", publicName: "inputContClass", isSignal: true, isRequired: false, transformFunction: null }, labelSignal: { classPropertyName: "labelSignal", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noFormat: { classPropertyName: "noFormat", publicName: "noFormat", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, readonlySignal: { classPropertyName: "readonlySignal", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, requiredSignal: { classPropertyName: "requiredSignal", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, showRequiredTagSignal: { classPropertyName: "showRequiredTagSignal", publicName: "showRequiredTag", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, textareaRowsSignal: { classPropertyName: "textareaRowsSignal", publicName: "textareaRows", isSignal: true, isRequired: false, transformFunction: null }, translateOptions: { classPropertyName: "translateOptions", publicName: "translateOptions", isSignal: true, isRequired: false, transformFunction: null }, setFormattedValue: { classPropertyName: "setFormattedValue", publicName: "setFormattedValue", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, inlineHint: { classPropertyName: "inlineHint", publicName: "inlineHint", isSignal: false, isRequired: false, transformFunction: null }, autoPickValueField: { classPropertyName: "autoPickValueField", publicName: "autoPickValueField", isSignal: false, isRequired: false, transformFunction: null }, labelField: { classPropertyName: "labelField", publicName: "labelField", isSignal: false, isRequired: false, transformFunction: null }, labelType: { classPropertyName: "labelType", publicName: "labelType", isSignal: false, isRequired: false, transformFunction: null }, optionFormatter: { classPropertyName: "optionFormatter", publicName: "optionFormatter", isSignal: false, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, _indeterminate: { classPropertyName: "_indeterminate", publicName: "indeterminate", isSignal: false, isRequired: false, transformFunction: null }, maxToday: { classPropertyName: "maxToday", publicName: "maxToday", isSignal: false, isRequired: false, transformFunction: null }, minToday: { classPropertyName: "minToday", publicName: "minToday", isSignal: false, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: false, isRequired: false, transformFunction: null }, prefixSignal: { classPropertyName: "prefixSignal", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, miniSignal: { classPropertyName: "miniSignal", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, inpClSignal: { classPropertyName: "inpClSignal", publicName: "inpCl", isSignal: true, isRequired: false, transformFunction: null }, showEmptyOptionSignal: { classPropertyName: "showEmptyOptionSignal", publicName: "showEmptyOption", isSignal: true, isRequired: false, transformFunction: null }, showLabelSignal: { classPropertyName: "showLabelSignal", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, showValidationSignal: { classPropertyName: "showValidationSignal", publicName: "showValidation", isSignal: true, isRequired: false, transformFunction: null }, showValidationIconSignal: { classPropertyName: "showValidationIconSignal", publicName: "showValidationIcon", isSignal: true, isRequired: false, transformFunction: null }, smallSignal: { classPropertyName: "smallSignal", publicName: "small", isSignal: true, isRequired: false, transformFunction: null }, showValidationMsgSignal: { classPropertyName: "showValidationMsgSignal", publicName: "showValidationMsg", isSignal: true, isRequired: false, transformFunction: null }, stackedSignal: { classPropertyName: "stackedSignal", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, verbose: { classPropertyName: "verbose", publicName: "verbose", isSignal: true, isRequired: false, transformFunction: null }, checkParentBeforeDisable: { classPropertyName: "checkParentBeforeDisable", publicName: "checkParentBeforeDisable", isSignal: true, isRequired: false, transformFunction: null }, clearOnDisable: { classPropertyName: "clearOnDisable", publicName: "clearOnDisable", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: false, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: false, isRequired: false, transformFunction: null }, _disabled: { classPropertyName: "_disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, _type: { classPropertyName: "_type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, maxSignal: { classPropertyName: "maxSignal", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minSignal: { classPropertyName: "minSignal", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, coloredSignal: { classPropertyName: "coloredSignal", publicName: "colored", isSignal: true, isRequired: false, transformFunction: null }, checkedSignal: { classPropertyName: "checkedSignal", publicName: "checkedSignal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { form: "formChange", name: "nameChange", prefixSignal: "prefixChange", miniSignal: "miniChange", inpClSignal: "inpClChange", showEmptyOptionSignal: "showEmptyOptionChange", showLabelSignal: "showLabelChange", showValidationSignal: "showValidationChange", showValidationIconSignal: "showValidationIconChange", smallSignal: "smallChange", showValidationMsgSignal: "showValidationMsgChange", checkParentBeforeDisable: "checkParentBeforeDisableChange", maxSignal: "maxChange", minSignal: "minChange", mchange: "mchange", mSelectOptionChange: "mSelectOptionChange" }, viewQueries: [{ propertyName: "dateInputRef", first: true, predicate: DateInputComponent, descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true }); }
237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: InputBase, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
238
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.0", type: InputBase, isStandalone: true, selector: "ng-component", inputs: { cls: { classPropertyName: "cls", publicName: "cls", isSignal: true, isRequired: false, transformFunction: null }, dontFormatAsInputSignal: { classPropertyName: "dontFormatAsInputSignal", publicName: "dontFormatAsInput", isSignal: true, isRequired: false, transformFunction: null }, duplicateCheckSignal: { classPropertyName: "duplicateCheckSignal", publicName: "duplicateCheck", isSignal: true, isRequired: false, transformFunction: null }, presetValue: { classPropertyName: "presetValue", publicName: "presetValue", isSignal: true, isRequired: false, transformFunction: null }, endLabelSignal: { classPropertyName: "endLabelSignal", publicName: "endLabel", isSignal: true, isRequired: false, transformFunction: null }, endLabelTooltipSignal: { classPropertyName: "endLabelTooltipSignal", publicName: "endLabelTooltip", isSignal: true, isRequired: false, transformFunction: null }, idSignal: { classPropertyName: "idSignal", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, inputContClassSignal: { classPropertyName: "inputContClassSignal", publicName: "inputContClass", isSignal: true, isRequired: false, transformFunction: null }, labelSignal: { classPropertyName: "labelSignal", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noFormat: { classPropertyName: "noFormat", publicName: "noFormat", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, readonlySignal: { classPropertyName: "readonlySignal", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, requiredSignal: { classPropertyName: "requiredSignal", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, showRequiredTagSignal: { classPropertyName: "showRequiredTagSignal", publicName: "showRequiredTag", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, textareaRowsSignal: { classPropertyName: "textareaRowsSignal", publicName: "textareaRows", isSignal: true, isRequired: false, transformFunction: null }, translateOptions: { classPropertyName: "translateOptions", publicName: "translateOptions", isSignal: true, isRequired: false, transformFunction: null }, setFormattedValue: { classPropertyName: "setFormattedValue", publicName: "setFormattedValue", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: false, transformFunction: null }, inlineHint: { classPropertyName: "inlineHint", publicName: "inlineHint", isSignal: false, isRequired: false, transformFunction: null }, autoPickValueField: { classPropertyName: "autoPickValueField", publicName: "autoPickValueField", isSignal: false, isRequired: false, transformFunction: null }, labelField: { classPropertyName: "labelField", publicName: "labelField", isSignal: false, isRequired: false, transformFunction: null }, labelType: { classPropertyName: "labelType", publicName: "labelType", isSignal: false, isRequired: false, transformFunction: null }, optionFormatter: { classPropertyName: "optionFormatter", publicName: "optionFormatter", isSignal: false, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, _indeterminate: { classPropertyName: "_indeterminate", publicName: "indeterminate", isSignal: false, isRequired: false, transformFunction: null }, maxToday: { classPropertyName: "maxToday", publicName: "maxToday", isSignal: false, isRequired: false, transformFunction: null }, minToday: { classPropertyName: "minToday", publicName: "minToday", isSignal: false, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: false, isRequired: false, transformFunction: null }, prefixSignal: { classPropertyName: "prefixSignal", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, miniSignal: { classPropertyName: "miniSignal", publicName: "mini", isSignal: true, isRequired: false, transformFunction: null }, inpClSignal: { classPropertyName: "inpClSignal", publicName: "inpCl", isSignal: true, isRequired: false, transformFunction: null }, showEmptyOptionSignal: { classPropertyName: "showEmptyOptionSignal", publicName: "showEmptyOption", isSignal: true, isRequired: false, transformFunction: null }, showLabelSignal: { classPropertyName: "showLabelSignal", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, showValidationSignal: { classPropertyName: "showValidationSignal", publicName: "showValidation", isSignal: true, isRequired: false, transformFunction: null }, showValidationIconSignal: { classPropertyName: "showValidationIconSignal", publicName: "showValidationIcon", isSignal: true, isRequired: false, transformFunction: null }, smallSignal: { classPropertyName: "smallSignal", publicName: "small", isSignal: true, isRequired: false, transformFunction: null }, showValidationMsgSignal: { classPropertyName: "showValidationMsgSignal", publicName: "showValidationMsg", isSignal: true, isRequired: false, transformFunction: null }, stackedSignal: { classPropertyName: "stackedSignal", publicName: "stacked", isSignal: true, isRequired: false, transformFunction: null }, debug: { classPropertyName: "debug", publicName: "debug", isSignal: true, isRequired: false, transformFunction: null }, verbose: { classPropertyName: "verbose", publicName: "verbose", isSignal: true, isRequired: false, transformFunction: null }, checkParentBeforeDisable: { classPropertyName: "checkParentBeforeDisable", publicName: "checkParentBeforeDisable", isSignal: true, isRequired: false, transformFunction: null }, clearOnDisable: { classPropertyName: "clearOnDisable", publicName: "clearOnDisable", isSignal: true, isRequired: false, transformFunction: null }, minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: false, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: false, isRequired: false, transformFunction: null }, _disabled: { classPropertyName: "_disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, _type: { classPropertyName: "_type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, maxSignal: { classPropertyName: "maxSignal", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, minSignal: { classPropertyName: "minSignal", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, coloredSignal: { classPropertyName: "coloredSignal", publicName: "colored", isSignal: true, isRequired: false, transformFunction: null }, checkedSignal: { classPropertyName: "checkedSignal", publicName: "checkedSignal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { form: "formChange", name: "nameChange", prefixSignal: "prefixChange", miniSignal: "miniChange", inpClSignal: "inpClChange", showEmptyOptionSignal: "showEmptyOptionChange", showLabelSignal: "showLabelChange", showValidationSignal: "showValidationChange", showValidationIconSignal: "showValidationIconChange", smallSignal: "smallChange", showValidationMsgSignal: "showValidationMsgChange", checkParentBeforeDisable: "checkParentBeforeDisableChange", maxSignal: "maxChange", minSignal: "minChange", mchange: "mchange", mSelectOptionChange: "mSelectOptionChange" }, viewQueries: [{ propertyName: "dateInputRef", first: true, predicate: DateInputComponent, descendants: true, isSignal: true }], ngImport: i0, template: '', isInline: true }); }
239
239
  }
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: InputBase, decorators: [{
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: InputBase, decorators: [{
241
241
  type: Component,
242
242
  args: [{
243
243
  standalone: true,
@@ -273,4 +273,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
273
273
  type: Input,
274
274
  args: ['type']
275
275
  }] } });
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEyQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQVcsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBS3BFLE1BQU0sT0FBTyxTQUFTO0lBeURwQixJQUE0QixjQUFjLENBQUMsQ0FBVTtRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUM7WUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFhLFFBQVEsQ0FBQyxDQUFVO1FBQzlCLElBQUksQ0FBQztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FB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LFNBQVM7c0JBQWpCLEtBQUs7Z0JBRWlCLFNBQVM7c0JBQS9CLEtBQUs7dUJBQUMsVUFBVTtnQkFvQkUsS0FBSztzQkFBdkIsS0FBSzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSU9wdGlvbiwgSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi9pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IElPYmplY3RMaXRlcmFsLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgbWVyZ2UsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3B0aW9uTGFiZWxUeXBlIH0gZnJvbSAnLi9pbnB1dC1iYXNpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogJycsXG59KVxuZXhwb3J0IGNsYXNzIElucHV0QmFzZTxcbiAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfSA9IGFueSxcbiAgVENvbnRyb2wgPSBhbnksXG4gIFRPcHRpb24gPSBhbnksXG4+IHtcbiAgcmVhZG9ubHkgZGF0ZUlucHV0UmVmID0gdmlld0NoaWxkPERhdGVJbnB1dENvbXBvbmVudD4oRGF0ZUlucHV0Q29tcG9uZW50KTtcbiAgcmVhZG9ubHkgY2xzID0gaW5wdXQ8c3RyaW5nPihudWxsKTtcbiAgcmVhZG9ubHkgZG9udEZvcm1hdEFzSW5wdXRTaWduYWwgPSBpbnB1dDxib29sZWFuPihudWxsLCB7IGFsaWFzOiAnZG9udEZvcm1hdEFzSW5wdXQnIH0pO1xuICByZWFkb25seSBkdXBsaWNhdGVDaGVja1NpZ25hbCA9IGlucHV0PGJvb2xlYW4+KG51bGwsIHsgYWxpYXM6ICdkdXBsaWNhdGVDaGVjaycgfSk7XG4gIHJlYWRvbmx5IHByZXNldFZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBlbmRMYWJlbFNpZ25hbCA9IGlucHV0PHN0cmluZz4obnVsbCwgeyBhbGlhczogJ2VuZExhYmVsJyB9KTtcbiAgcmVhZG9ubHkgZW5kTGFiZWxUb29sdGlwU2lnbmFsID0gaW5wdXQ8c3RyaW5nPihudWxsLCB7IGFsaWFzOiAnZW5kTGFiZWxUb29sdGlwJyB9KTtcbiAgcmVhZG9ubHkgaWRTaWduYWwgPSBpbnB1dCgnaWQnICsgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwMDAwMCksIHsgYWxpYXM6ICdpZCcgfSk7XG4gIHJlYWRvbmx5IGlucHV0Q29udENsYXNzU2lnbmFsID0gaW5wdXQ8c3RyaW5nPihudWxsLCB7IGFsaWFzOiAnaW5wdXRDb250Q2xhc3MnIH0pO1xuICByZWFkb25seSBsYWJlbFNpZ25hbCA9IGlucHV0PHN0cmluZz4obnVsbCwgeyBhbGlhczogJ2xhYmVsJyB9KTtcbiAgcmVhZG9ubHkgbm9Gb3JtYXQgPSBpbnB1dDxib29sZWFuPihudWxsKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KG51bGwpO1xuICByZWFkb25seSByZWFkb25seVNpZ25hbCA9IGlucHV0PGJvb2xlYW4gfCBudWxsPihudWxsLCB7IGFsaWFzOiAncmVhZG9ubHknIH0pO1xuICByZWFkb25seSByZXF1aXJlZFNpZ25hbCA9IGlucHV0PGJvb2xlYW4gfCBudWxsPihudWxsLCB7IGFsaWFzOiAncmVxdWlyZWQnIH0pO1xuICByZWFkb25seSBzaG93UmVxdWlyZWRUYWdTaWduYWwgPSBpbnB1dDxib29sZWFuPih0cnVlLCB7IGFsaWFzOiAnc2hvd1JlcXVpcmVkVGFnJyB9KTtcbiAgcmVhZG9ubHkgc3VmZml4ID0gaW5wdXQ8c3RyaW5nPihudWxsKTtcbiAgcmVhZG9ubHkgdGV4dGFyZWFSb3dzU2lnbmFsID0gaW5wdXQ8bnVtYmVyPihudWxsLCB7IGFsaWFzOiAndGV4dGFyZWFSb3dzJyB9KTtcbiAgcmVhZG9ubHkgdHJhbnNsYXRlT3B0aW9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2V0Rm9ybWF0dGVkVmFsdWUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgY29tcHV0ZWROb0Zvcm1hdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBub0Zvcm1hdCA9IHRoaXMubm9Gb3JtYXQoKSxcbiAgICAgIHR5cGVTaWduYWwgPSB0aGlzLnR5cGVTaWduYWwoKSxcbiAgICAgIHNob3dWYWxpZGF0aW9uU2lnbmFsID0gdGhpcy5zaG93VmFsaWRhdGlvblNpZ25hbCgpLFxuICAgICAgc2hvd1ZhbGlkYXRpb25JY29uU2lnbmFsID0gdGhpcy5zaG93VmFsaWRhdGlvbkljb25TaWduYWwoKSxcbiAgICAgIGxhYmVsU2lnbmFsID0gdGhpcy5sYWJlbFNpZ25hbCgpO1xuICAgIHJldHVybiBub0Zvcm1hdCA9PSBudWxsXG4gICAgICA/IHR5cGVTaWduYWwgPT0gJ3ZpZXdlcicgfHxcbiAgICAgICAgICBzaG93VmFsaWRhdGlvblNpZ25hbCB8fFxuICAgICAgICAgIHNob3dWYWxpZGF0aW9uSWNvblNpZ25hbCB8fFxuICAgICAgICAgIGxhYmVsU2lnbmFsPy5pbmNsdWRlcygnY29kZScpXG4gICAgICA6IG5vRm9ybWF0O1xuICB9KTtcblxuICAvKiogRm9ybUdyb3VwICovXG4gIHJlYWRvbmx5IGZvcm0gPSBtb2RlbDxcbiAgICBGb3JtR3JvdXA8VEZvcm1Hcm91cD4gfCBGb3JtQ29udHJvbDxUQ29udHJvbD4gfCBBYnN0cmFjdENvbnRyb2w8VENvbnRyb2w+XG4gID4oKTtcblxuICAvKiogU2hvdyB0aGUgaGludCB3aXRob3V0IHRoZSB0b29sdGlwICovXG4gIEBJbnB1dCgpIGlubGluZUhpbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGF1dG9QaWNrVmFsdWVGaWVsZDogYm9vbGVhbjtcbiAgQElucHV0KCkgbGFiZWxGaWVsZDoga2V5b2YgVE9wdGlvbjtcbiAgQElucHV0KCkgbGFiZWxUeXBlOiBPcHRpb25MYWJlbFR5cGU7IC8vdXNlIHRoaXMgdG8gcGljayBhIHByZXNldCB2YWx1ZSBsYWJlbCBncm91cCBmb3IgdGhlIG9wdGlvbnNcbiAgQElucHV0KCkgb3B0aW9uRm9ybWF0dGVyOiAoaXRlbTogVE9wdGlvbikgPT4gc3RyaW5nO1xuXG4gIC8qKiBGb3JtQ29udHJvbE5hbWUgKi9cbiAgbmFtZSA9IG1vZGVsPGtleW9mIFRGb3JtR3JvdXA+KCk7XG4gIGluZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCdpbmRldGVybWluYXRlJykgc2V0IF9pbmRldGVybWluYXRlKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSB2O1xuICAgIGlmICh2KSB0aGlzLmNvbnRyb2woKT8ucGF0Y2hWYWx1ZShmYWxzZSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IG1heFRvZGF5KHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikgdGhpcy5tYXhTaWduYWwuc2V0KG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSk7XG4gIH1cbiAgQElucHV0KCkgc2V0IG1pblRvZGF5KHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikgdGhpcy5taW5TaWduYWwuc2V0KG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSk7XG4gIH1cbiAgQElucHV0KCkgdmFsdWVGaWVsZDoga2V5b2YgVE9wdGlvbjsgLy91c2UgdGhpcyB0byBjaG9vc2UgYSBmaWVsZCBpbiB0aGUgb3B0aW9uIGZvciBtb2RlbGluZ1xuICByZWFkb25seSBwcmVmaXhTaWduYWwgPSBtb2RlbDxzdHJpbmc+KG51bGwsIHsgYWxpYXM6ICdwcmVmaXgnIH0pO1xuICByZWFkb25seSBtaW5pU2lnbmFsID0gbW9kZWw8Ym9vbGVhbj4obnVsbCwgeyBhbGlhczogJ21pbmknIH0pO1xuICByZWFkb25seSBpbnBDbFNpZ25hbCA9IG1vZGVsPHN0cmluZz4oJ2NvbnRyb2wtYmctZ3JheScsIHsgYWxpYXM6ICdpbnBDbCcgfSk7XG4gIHJlYWRvbmx5IHNob3dFbXB0eU9wdGlvblNpZ25hbCA9IG1vZGVsPGJvb2xlYW4+KHRydWUsIHtcbiAgICBhbGlhczogJ3Nob3dFbXB0eU9wdGlvbicsXG4gIH0pO1xuICByZWFkb25seSBzaG93TGFiZWxTaWduYWwgPSBtb2RlbDxib29sZWFuPih0cnVlLCB7XG4gICAgYWxpYXM6ICdzaG93TGFiZWwnLFxuICB9KTtcbiAgcmVhZG9ubHkgc2hvd1ZhbGlkYXRpb25TaWduYWwgPSBtb2RlbDxib29sZWFuPihmYWxzZSwge1xuICAgIGFsaWFzOiAnc2hvd1ZhbGlkYXRpb24nLFxuICB9KTtcbiAgcmVhZG9ubHkgc2hvd1ZhbGlkYXRpb25JY29uU2lnbmFsID0gbW9kZWw8Ym9vbGVhbj4obnVsbCwge1xuICAgIGFsaWFzOiAnc2hvd1ZhbGlkYXRpb25JY29uJyxcbiAgfSk7XG4gIHJlYWRvbmx5IHNtYWxsU2lnbmFsID0gbW9kZWw8Ym9vbGVhbj4obnVsbCwge1xuICAgIGFsaWFzOiAnc21hbGwnLFxuICB9KTtcbiAgcmVhZG9ubHkgc2hvd1ZhbGlkYXRpb25Nc2dTaWduYWwgPSBtb2RlbDxib29sZWFuPihmYWxzZSwge1xuICAgIGFsaWFzOiAnc2hvd1ZhbGlkYXRpb25Nc2cnLFxuICB9KTtcbiAgcmVhZG9ubHkgc3RhY2tlZFNpZ25hbCA9IGlucHV0PGJvb2xlYW4+KHRydWUsIHtcbiAgICB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgYXMgdW5kZWZpbmVkLFxuICAgIGFsaWFzOiAnc3RhY2tlZCcsXG4gIH0pO1xuICByZWFkb25seSBkZWJ1ZyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHZlcmJvc2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBjaGVja1BhcmVudEJlZm9yZURpc2FibGUgPSBtb2RlbDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgY2xlYXJPbkRpc2FibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIEBJbnB1dCgpIG1pbkxlbmd0aDogbnVtYmVyO1xuICBASW5wdXQoKSBtYXhMZW5ndGg6IG51bWJlcjtcblxuICBASW5wdXQoJ2Rpc2FibGVkJykgc2V0IF9kaXNhYmxlZCh2OiBib29sZWFuKSB7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb250cm9sKCk7XG4gICAgaWYgKCFjb250cm9sKVxuICAgICAgdGhpcy5hZGRPbkNvbnRyb2xPYnRhaW5lZEhvb2soJ2Rpc2FibGVkJywgKGNvbnRyb2wpID0+IHRoaXMuZGlzYWJsZUZ1bmMoY29udHJvbCwgdikpO1xuICAgIGVsc2UgdGhpcy5kaXNhYmxlRnVuYyhjb250cm9sLCB2KTtcblxuICAgIC8vIH0sIDEwMDApO1xuICB9XG4gIHByb3RlY3RlZCBkaXNhYmxlRnVuYyA9IChjb250cm9sID0gdGhpcy5jb250cm9sKCksIGRpc2FibGU6IGJvb2xlYW4pID0+IHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAodGhpcy5jaGVja1BhcmVudEJlZm9yZURpc2FibGUoKSAmJiBjb250cm9sPy5wYXJlbnQ/LmRpc2FibGVkKSByZXR1cm47XG4gICAgaWYgKGRpc2FibGUpIHtcbiAgICAgIGlmICh0aGlzLmNsZWFyT25EaXNhYmxlKCkpIGNvbnRyb2w/LnJlc2V0KCk7XG4gICAgICBjb250cm9sPy5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIGlmIChjb250cm9sPy5kaXNhYmxlZCkgY29udHJvbD8uZW5hYmxlKCk7XG4gIH07XG5cbiAgQElucHV0KCd0eXBlJykgc2V0IF90eXBlKHY6IElucHV0VHlwZSkge1xuICAgIHRoaXMub1R5cGVTaWduYWwuc2V0KHYpO1xuICAgIGlmICh2ID09ICdwZXJjZW50YWdlJykge1xuICAgICAgdGhpcy50eXBlU2lnbmFsLnNldCgnbnVtYmVyJyk7XG4gICAgICB0aGlzLm1heFNpZ25hbC5zZXQoMTAwKTtcbiAgICAgIHRoaXMubWluU2lnbmFsLnNldCgwKTtcbiAgICB9IGVsc2UgdGhpcy50eXBlU2lnbmFsLnNldCh2KTtcbiAgfVxuXG4gIHJlYWRvbmx5IHNob3dQYXNzd29yZFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihudWxsKTtcblxuICByZWFkb25seSBkaXNhYmxlZFNpZ25hbCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICB0aGlzLmZvcm1GaWVsZE5vdGlmaWVyKCk7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCgpPy5kaXNhYmxlZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgb1R5cGVTaWduYWwgPSBzaWduYWw8SW5wdXRUeXBlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHR5cGVTaWduYWwgPSBzaWduYWw8SW5wdXRUeXBlPigndGV4dCcpO1xuICByZWFkb25seSBtYXhTaWduYWwgPSBtb2RlbDxudW1iZXIgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPihudWxsLCB7IGFsaWFzOiAnbWF4JyB9KTtcbiAgcmVhZG9ubHkgbWluU2lnbmFsID0gbW9kZWw8bnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4obnVsbCwgeyBhbGlhczogJ21pbicgfSk7XG5cbiAgcmVhZG9ubHkgY29tcHV0ZWRTaG93TGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2hvd0xhYmVsID0gdGhpcy5zaG93TGFiZWxTaWduYWwoKSxcbiAgICAgIGxhYmVsID0gdGhpcy5sYWJlbFNpZ25hbCgpO1xuICAgIHJldHVybiBzaG93TGFiZWwgJiYgbGFiZWwgIT0gbnVsbDtcbiAgfSk7XG5cbiAgcHVibGljIGlTID0gaW5qZWN0KElucHV0U2VydmljZSk7XG5cbiAgLy8gQFZpZXdDaGlsZCgnZGF0ZUlucHV0JykgZGF0ZUlucHV0UmVmPzogRGF0ZUlucHV0Q29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IGNvbnRyb2wgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgKHRoaXMuZm9ybSgpIGFzIEZvcm1Hcm91cDxURm9ybUdyb3VwPik/LmNvbnRyb2xzW1xuICAgICAgICB0aGlzLm5hbWUoKSBhcyBrZXlvZiBGb3JtR3JvdXA8VEZvcm1Hcm91cD5bJ2NvbnRyb2xzJ11cbiAgICAgIF0sXG4gICk7XG4gIC8vIHByb3RlY3RlZCBmaXJzdEZldGNoPXRydWVcblxuICByZWFkb25seSBvbkNvbnRyb2xPYnRhaW5lZEVmZmVjdCA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jb250cm9sKCk7XG4gICAgICAvLyBjb25zb2xlLmxvZygnY29udHJvbCBvYnRhaW5lZCcsIGNvbnRyb2wpO1xuICAgICAgaWYgKGNvbnRyb2wpIHRoaXMub25Db250cm9sT2J0YWluZWRMaXN0KCkuZm9yRWFjaCgoZnVuYykgPT4gZnVuYyhjb250cm9sKSk7XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG5cbiAgcmVhZG9ubHkgYWRkT25Db250cm9sT2J0YWluZWRIb29rID0gKFxuICAgIGtleTogc3RyaW5nLFxuICAgIGZ1bmM6IChjb250cm9sOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmNvbnRyb2w+KSA9PiBhbnksXG4gICkgPT4ge1xuICAgIHRoaXMub25Db250cm9sT2J0YWluZWRNYXAudXBkYXRlKChtYXApID0+ICh7IC4uLm1hcCwgW2tleV06IGZ1bmMgfSkpO1xuICB9O1xuXG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlcyA9IHRvT2JzZXJ2YWJsZSh0aGlzLmNvbnRyb2wpLnBpcGUoXG4gICAgc3RhcnRXaXRoKHRoaXMuY29udHJvbCgpKSxcbiAgICBmaWx0ZXIoKGMpID0+ICEhYyksXG4gICAgc3dpdGNoTWFwKFxuICAgICAgKGMpID0+XG4gICAgICAgIGM/LnZhbHVlQ2hhbmdlcz8ucGlwZShcbiAgICAgICAgICBzdGFydFdpdGgoYz8uZ2V0UmF3VmFsdWUoKSksXG4gICAgICAgICAgbWFwKCgpID0+IGM/LmdldFJhd1ZhbHVlKCkpLFxuICAgICAgICApLFxuICAgICksXG4gICk7XG5cbiAgcmVhZG9ubHkgZm9ybUZpZWxkTm90aWZpZXIgPSB0b1NpZ25hbChcbiAgICB0aGlzLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgLy8gdGFwKChjb250cm9sKSA9PiB7XG4gICAgICAvLyAgIGNvbnNvbGUubG9nKCdmb3JtRmllbGROb3RpZmllciBjb250cm9sJywgY29udHJvbCk7XG4gICAgICAvLyB9KSxcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNvbnRyb2woKSAhPSBudWxsKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICBtZXJnZSh0aGlzLmNvbnRyb2woKT8udmFsdWVDaGFuZ2VzLCB0aGlzLmNvbnRyb2woKT8uc3RhdHVzQ2hhbmdlcykucGlwZShkZWJvdW5jZVRpbWUoMTAwKSksXG4gICAgICApLFxuICAgICAgbWFwKCgpID0+IHBlcmZvcm1hbmNlLm5vdygpKSxcbiAgICAgIC8vIG1hcCgoKT0+TWF0aC5yYW5kb20oKSksXG4gICAgICAvLyB0YXAoKCkgPT4ge1xuICAgICAgLy8gICBjb25zb2xlLmxvZygnZm9ybUZpZWxkTm90aWZpZXIgY29udHJvbCBzd2l0Y2hNYXAgZW1pdHRlcicsIHRoaXMuY29udHJvbCgpPy5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgIC8vIH0pLFxuICAgICksXG4gICk7XG4gIHJlYWRvbmx5IHZhbGlkU2lnbmFsID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICAvLyBjb25zb2xlLmxvZygndmFsaWRTaWduYWwgbm90aWZpZWQnLCB0aGlzLmNvbnRyb2woKSk7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCgpPy52YWxpZDtcbiAgfSk7XG4gIHJlYWRvbmx5IGludmFsaWRTaWduYWwgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKT8uaW52YWxpZDtcbiAgfSk7XG4gIHJlYWRvbmx5IHZhbHVlU2lnbmFsID0gdG9TaWduYWwodGhpcy52YWx1ZUNoYW5nZXMpO1xuICByZWFkb25seSBoYXNWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudmFsdWVTaWduYWwoKT8udG9TdHJpbmcoKT8udHJpbSgpPy5sZW5ndGggPiAwKTtcbiAgcmVhZG9ubHkgaW52YWxpZENoZWNrYm94U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmludmFsaWRTaWduYWwoKSAmJiB0aGlzLnR5cGVTaWduYWwoKSA9PSAnY2hlY2tib3gnO1xuICB9KTtcbiAgcmVhZG9ubHkgZGlydHlTaWduYWwgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKT8uZGlydHk7XG4gIH0pO1xuICByZWFkb25seSB0b3VjaGVkU2lnbmFsID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sKCk/LnRvdWNoZWQ7XG4gIH0pO1xuICByZWFkb25seSBlcnJvcnNTaWduYWwgPSBjb21wdXRlZDxJT2JqZWN0TGl0ZXJhbD4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sKCk/LmVycm9ycztcbiAgfSk7XG4gIHJlYWRvbmx5IGVycm9yc1NpZ25hbGpzb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZXJyb3JzU2lnbmFsKCkgfHwge30pO1xuICB9KTtcbiAgcmVhZG9ubHkgcGVuZGluZ1NpZ25hbCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICB0aGlzLmZvcm1GaWVsZE5vdGlmaWVyKCk7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCgpPy5wZW5kaW5nO1xuICB9KTtcbiAgcmVhZG9ubHkgcHJpc3RpbmVTaWduYWwgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKT8ucHJpc3RpbmU7XG4gIH0pO1xuICByZWFkb25seSBjb250cm9sUmVxdWlyZWRTaWduYWwgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKT8uaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICB9KTtcbiAgcmVhZG9ubHkgaXNSZXF1aXJlZFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVxdWlyZWRTaWduYWwoKSB8fCB0aGlzLmNvbnRyb2xSZXF1aXJlZFNpZ25hbCgpKTtcbiAgcmVhZG9ubHkgbmFtZVN0clNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubmFtZSgpPy50b1N0cmluZygpKTtcbiAgcmVhZG9ubHkgaW5wdXRDbGFzc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5pUy5pbnB1dENsYXNzKFxuICAgICAgdGhpcy5pbnBDbFNpZ25hbCgpLFxuICAgICAgdGhpcy5kaXJ0eVNpZ25hbCgpLFxuICAgICAgdGhpcy52YWxpZFNpZ25hbCgpLFxuICAgICAgdGhpcy5pbnZhbGlkU2lnbmFsKCksXG4gICAgICB0aGlzLnNob3dWYWxpZGF0aW9uU2lnbmFsKCksXG4gICAgKSxcbiAgKTtcbiAgcmVhZG9ubHkgY29sb3JlZFNpZ25hbCA9IGlucHV0PGJvb2xlYW4+KHRydWUsIHsgYWxpYXM6ICdjb2xvcmVkJyB9KTtcbiAgcmVhZG9ubHkgY2hlY2tlZFNpZ25hbCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTsgLy9vcHRpb25hbCBjaGVja2VkIG9wdGlvbiBmb3IgY2hlY2tib3hlc1xuICByZWFkb25seSByYXdPcHRpb25zU2lnbmFsID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIHJlYWRvbmx5IG9wdGlvbnMgPSBjb21wdXRlZDxJT3B0aW9uW10+KCgpID0+XG4gICAgdGhpcy5pUy5vcHRpb25zRm9ybWF0dGVyKFxuICAgICAgdGhpcy5yYXdPcHRpb25zU2lnbmFsKCksXG4gICAgICB0aGlzLnZhbHVlRmllbGQgYXMgc3RyaW5nLFxuICAgICAgdGhpcy5vcHRpb25Gb3JtYXR0ZXIsXG4gICAgICB0aGlzLmxhYmVsVHlwZSxcbiAgICAgIHRoaXMubGFiZWxGaWVsZCBhcyBzdHJpbmcsXG4gICAgICB0aGlzLmF1dG9QaWNrVmFsdWVGaWVsZCxcbiAgICApLFxuICApO1xuICByZWFkb25seSBvcHRpb25zTWFwID0gY29tcHV0ZWQ8eyBbdmFsdWU6IHN0cmluZ106IElPcHRpb24gfT4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKTtcbiAgICBjb25zdCBtYXA6IHsgW3ZhbHVlS2V5OiBzdHJpbmddOiBJT3B0aW9uIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb3B0aW9ucykge1xuICAgICAgbWFwW0pTT04uc3RyaW5naWZ5KGl0ZW0udmFsdWUpXSA9IGl0ZW07XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZG9lc09wdGlvbkV4aXN0ID0gKHZhbCkgPT4gdGhpcy5vcHRpb25zTWFwKClbSlNPTi5zdHJpbmdpZnkodmFsKV07XG4gIC8qKkFjdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGEgbmV3IGNvbnRyb2wgaXMgY3JlYXRlZCAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25Db250cm9sT2J0YWluZWRNYXAgPSBzaWduYWw8e1xuICAgIFtrZXk6IHN0cmluZ106IChjb250cm9sOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmNvbnRyb2w+KSA9PiBhbnk7XG4gIH0+KHt9KTtcbiAgLyoqQWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gYSBuZXcgY29udHJvbCBpcyBjcmVhdGVkICovXG4gIHJlYWRvbmx5IG9uQ29udHJvbE9idGFpbmVkTGlzdCA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC52YWx1ZXModGhpcy5vbkNvbnRyb2xPYnRhaW5lZE1hcCgpIHx8IHt9KSk7XG4gIHJlYWRvbmx5IG1jaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBtU2VsZWN0T3B0aW9uQ2hhbmdlID0gb3V0cHV0PFRPcHRpb24+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbFNpZ25hbCgpO1xuICAgICAgLy8gY29uc29sZS5sb2coJ0xhYmVsIHNldCB0byBjb250cm9sJyk7XG4gICAgICAvLyB2YWx1ZSA9IHRoaXMudmFsdWVTaWduYWwoKTtcbiAgICAgIGlmICh0aGlzLmNvbnRyb2woKSkgdGhpcy5jb250cm9sKCkubGFiZWxWYWx1ZSA9IGxhYmVsO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHByZXNldFZhbHVlID0gdGhpcy5wcmVzZXRWYWx1ZSgpLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG4gICAgICAvLyBjb25zb2xlLmxvZygnY2hlY2sgcHJlc2V0Jyk7XG4gICAgICBpZiAocHJlc2V0VmFsdWUgJiYgb3B0aW9ucz8ubGVuZ3RoID09IDEgJiYgIXRoaXMuY29udHJvbCgpPy52YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnRyb2woKT8ucGF0Y2hWYWx1ZShvcHRpb25zWzBdLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RlZE9wdGlvbihvcHRpb246IElPcHRpb24pIHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIHRoaXMubVNlbGVjdE9wdGlvbkNoYW5nZS5lbWl0KG9wdGlvbi5vcmlnaW5hbFJvdyk7XG4gIH1cbiAgZGF0ZUNoYW5nZWQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5jb250cm9sKCkpIHJldHVybjtcbiAgICB0aGlzLmNvbnRyb2woKS5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm1jaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEyQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQVcsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBS3BFLE1BQU0sT0FBTyxTQUFTO0lBeURwQixJQUE0QixjQUFjLENBQUMsQ0FBVTtRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUM7WUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFhLFFBQVEsQ0FBQyxDQUFVO1FBQzlCLElBQUksQ0FBQztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FB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QkFBbEIsS0FBSztnQkE4QkcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVpQixTQUFTO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBb0JFLEtBQUs7c0JBQXZCLEtBQUs7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElPcHRpb24sIElucHV0U2VydmljZSB9IGZyb20gJy4vaW5wdXQuc2VydmljZSc7XG5pbXBvcnQgeyBJT2JqZWN0TGl0ZXJhbCwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIG1lcmdlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0ZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE9wdGlvbkxhYmVsVHlwZSB9IGZyb20gJy4vaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dEJhc2U8XG4gIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gIH0gPSBhbnksXG4gIFRDb250cm9sID0gYW55LFxuICBUT3B0aW9uID0gYW55LFxuPiB7XG4gIHJlYWRvbmx5IGRhdGVJbnB1dFJlZiA9IHZpZXdDaGlsZDxEYXRlSW5wdXRDb21wb25lbnQ+KERhdGVJbnB1dENvbXBvbmVudCk7XG4gIHJlYWRvbmx5IGNscyA9IGlucHV0PHN0cmluZz4obnVsbCk7XG4gIHJlYWRvbmx5IGRvbnRGb3JtYXRBc0lucHV0U2lnbmFsID0gaW5wdXQ8Ym9vbGVhbj4obnVsbCwgeyBhbGlhczogJ2RvbnRGb3JtYXRBc0lucHV0JyB9KTtcbiAgcmVhZG9ubHkgZHVwbGljYXRlQ2hlY2tTaWduYWwgPSBpbnB1dDxib29sZWFuPihudWxsLCB7IGFsaWFzOiAnZHVwbGljYXRlQ2hlY2snIH0pO1xuICByZWFkb25seSBwcmVzZXRWYWx1ZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZW5kTGFiZWxTaWduYWwgPSBpbnB1dDxzdHJpbmc+KG51bGwsIHsgYWxpYXM6ICdlbmRMYWJlbCcgfSk7XG4gIHJlYWRvbmx5IGVuZExhYmVsVG9vbHRpcFNpZ25hbCA9IGlucHV0PHN0cmluZz4obnVsbCwgeyBhbGlhczogJ2VuZExhYmVsVG9vbHRpcCcgfSk7XG4gIHJlYWRvbmx5IGlkU2lnbmFsID0gaW5wdXQoJ2lkJyArIE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApLCB7IGFsaWFzOiAnaWQnIH0pO1xuICByZWFkb25seSBpbnB1dENvbnRDbGFzc1NpZ25hbCA9IGlucHV0PHN0cmluZz4obnVsbCwgeyBhbGlhczogJ2lucHV0Q29udENsYXNzJyB9KTtcbiAgcmVhZG9ubHkgbGFiZWxTaWduYWwgPSBpbnB1dDxzdHJpbmc+KG51bGwsIHsgYWxpYXM6ICdsYWJlbCcgfSk7XG4gIHJlYWRvbmx5IG5vRm9ybWF0ID0gaW5wdXQ8Ym9vbGVhbj4obnVsbCk7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nPihudWxsKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHlTaWduYWwgPSBpbnB1dDxib29sZWFuIHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ3JlYWRvbmx5JyB9KTtcbiAgcmVhZG9ubHkgcmVxdWlyZWRTaWduYWwgPSBpbnB1dDxib29sZWFuIHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ3JlcXVpcmVkJyB9KTtcbiAgcmVhZG9ubHkgc2hvd1JlcXVpcmVkVGFnU2lnbmFsID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSwgeyBhbGlhczogJ3Nob3dSZXF1aXJlZFRhZycgfSk7XG4gIHJlYWRvbmx5IHN1ZmZpeCA9IGlucHV0PHN0cmluZz4obnVsbCk7XG4gIHJlYWRvbmx5IHRleHRhcmVhUm93c1NpZ25hbCA9IGlucHV0PG51bWJlcj4obnVsbCwgeyBhbGlhczogJ3RleHRhcmVhUm93cycgfSk7XG4gIHJlYWRvbmx5IHRyYW5zbGF0ZU9wdGlvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNldEZvcm1hdHRlZFZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IGNvbXB1dGVkTm9Gb3JtYXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgbm9Gb3JtYXQgPSB0aGlzLm5vRm9ybWF0KCksXG4gICAgICB0eXBlU2lnbmFsID0gdGhpcy50eXBlU2lnbmFsKCksXG4gICAgICBzaG93VmFsaWRhdGlvblNpZ25hbCA9IHRoaXMuc2hvd1ZhbGlkYXRpb25TaWduYWwoKSxcbiAgICAgIHNob3dWYWxpZGF0aW9uSWNvblNpZ25hbCA9IHRoaXMuc2hvd1ZhbGlkYXRpb25JY29uU2lnbmFsKCksXG4gICAgICBsYWJlbFNpZ25hbCA9IHRoaXMubGFiZWxTaWduYWwoKTtcbiAgICByZXR1cm4gbm9Gb3JtYXQgPT0gbnVsbFxuICAgICAgPyB0eXBlU2lnbmFsID09ICd2aWV3ZXInIHx8XG4gICAgICAgICAgc2hvd1ZhbGlkYXRpb25TaWduYWwgfHxcbiAgICAgICAgICBzaG93VmFsaWRhdGlvbkljb25TaWduYWwgfHxcbiAgICAgICAgICBsYWJlbFNpZ25hbD8uaW5jbHVkZXMoJ2NvZGUnKVxuICAgICAgOiBub0Zvcm1hdDtcbiAgfSk7XG5cbiAgLyoqIEZvcm1Hcm91cCAqL1xuICByZWFkb25seSBmb3JtID0gbW9kZWw8XG4gICAgRm9ybUdyb3VwPFRGb3JtR3JvdXA+IHwgRm9ybUNvbnRyb2w8VENvbnRyb2w+IHwgQWJzdHJhY3RDb250cm9sPFRDb250cm9sPlxuICA+KCk7XG5cbiAgLyoqIFNob3cgdGhlIGhpbnQgd2l0aG91dCB0aGUgdG9vbHRpcCAqL1xuICBASW5wdXQoKSBpbmxpbmVIaW50OiBib29sZWFuO1xuICBASW5wdXQoKSBhdXRvUGlja1ZhbHVlRmllbGQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxhYmVsRmllbGQ6IGtleW9mIFRPcHRpb247XG4gIEBJbnB1dCgpIGxhYmVsVHlwZTogT3B0aW9uTGFiZWxUeXBlOyAvL3VzZSB0aGlzIHRvIHBpY2sgYSBwcmVzZXQgdmFsdWUgbGFiZWwgZ3JvdXAgZm9yIHRoZSBvcHRpb25zXG4gIEBJbnB1dCgpIG9wdGlvbkZvcm1hdHRlcjogKGl0ZW06IFRPcHRpb24pID0+IHN0cmluZztcblxuICAvKiogRm9ybUNvbnRyb2xOYW1lICovXG4gIG5hbWUgPSBtb2RlbDxrZXlvZiBURm9ybUdyb3VwPigpO1xuICBpbmRldGVybWluYXRlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgnaW5kZXRlcm1pbmF0ZScpIHNldCBfaW5kZXRlcm1pbmF0ZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5pbmRldGVybWluYXRlID0gdjtcbiAgICBpZiAodikgdGhpcy5jb250cm9sKCk/LnBhdGNoVmFsdWUoZmFsc2UpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBtYXhUb2RheSh2OiBib29sZWFuKSB7XG4gICAgaWYgKHYpIHRoaXMubWF4U2lnbmFsLnNldChuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBtaW5Ub2RheSh2OiBib29sZWFuKSB7XG4gICAgaWYgKHYpIHRoaXMubWluU2lnbmFsLnNldChuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpO1xuICB9XG4gIEBJbnB1dCgpIHZhbHVlRmllbGQ6IGtleW9mIFRPcHRpb247IC8vdXNlIHRoaXMgdG8gY2hvb3NlIGEgZmllbGQgaW4gdGhlIG9wdGlvbiBmb3IgbW9kZWxpbmdcbiAgcmVhZG9ubHkgcHJlZml4U2lnbmFsID0gbW9kZWw8c3RyaW5nPihudWxsLCB7IGFsaWFzOiAncHJlZml4JyB9KTtcbiAgcmVhZG9ubHkgbWluaVNpZ25hbCA9IG1vZGVsPGJvb2xlYW4+KG51bGwsIHsgYWxpYXM6ICdtaW5pJyB9KTtcbiAgcmVhZG9ubHkgaW5wQ2xTaWduYWwgPSBtb2RlbDxzdHJpbmc+KCdjb250cm9sLWJnLWdyYXknLCB7IGFsaWFzOiAnaW5wQ2wnIH0pO1xuICByZWFkb25seSBzaG93RW1wdHlPcHRpb25TaWduYWwgPSBtb2RlbDxib29sZWFuPih0cnVlLCB7XG4gICAgYWxpYXM6ICdzaG93RW1wdHlPcHRpb24nLFxuICB9KTtcbiAgcmVhZG9ubHkgc2hvd0xhYmVsU2lnbmFsID0gbW9kZWw8Ym9vbGVhbj4odHJ1ZSwge1xuICAgIGFsaWFzOiAnc2hvd0xhYmVsJyxcbiAgfSk7XG4gIHJlYWRvbmx5IHNob3dWYWxpZGF0aW9uU2lnbmFsID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UsIHtcbiAgICBhbGlhczogJ3Nob3dWYWxpZGF0aW9uJyxcbiAgfSk7XG4gIHJlYWRvbmx5IHNob3dWYWxpZGF0aW9uSWNvblNpZ25hbCA9IG1vZGVsPGJvb2xlYW4+KG51bGwsIHtcbiAgICBhbGlhczogJ3Nob3dWYWxpZGF0aW9uSWNvbicsXG4gIH0pO1xuICByZWFkb25seSBzbWFsbFNpZ25hbCA9IG1vZGVsPGJvb2xlYW4+KG51bGwsIHtcbiAgICBhbGlhczogJ3NtYWxsJyxcbiAgfSk7XG4gIHJlYWRvbmx5IHNob3dWYWxpZGF0aW9uTXNnU2lnbmFsID0gbW9kZWw8Ym9vbGVhbj4oZmFsc2UsIHtcbiAgICBhbGlhczogJ3Nob3dWYWxpZGF0aW9uTXNnJyxcbiAgfSk7XG4gIHJlYWRvbmx5IHN0YWNrZWRTaWduYWwgPSBpbnB1dDxib29sZWFuPih0cnVlLCB7XG4gICAgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIGFzIHVuZGVmaW5lZCxcbiAgICBhbGlhczogJ3N0YWNrZWQnLFxuICB9KTtcbiAgcmVhZG9ubHkgZGVidWcgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB2ZXJib3NlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY2hlY2tQYXJlbnRCZWZvcmVEaXNhYmxlID0gbW9kZWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGNsZWFyT25EaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBASW5wdXQoKSBtaW5MZW5ndGg6IG51bWJlcjtcbiAgQElucHV0KCkgbWF4TGVuZ3RoOiBudW1iZXI7XG5cbiAgQElucHV0KCdkaXNhYmxlZCcpIHNldCBfZGlzYWJsZWQodjogYm9vbGVhbikge1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbCgpO1xuICAgIGlmICghY29udHJvbClcbiAgICAgIHRoaXMuYWRkT25Db250cm9sT2J0YWluZWRIb29rKCdkaXNhYmxlZCcsIChjb250cm9sKSA9PiB0aGlzLmRpc2FibGVGdW5jKGNvbnRyb2wsIHYpKTtcbiAgICBlbHNlIHRoaXMuZGlzYWJsZUZ1bmMoY29udHJvbCwgdik7XG5cbiAgICAvLyB9LCAxMDAwKTtcbiAgfVxuICBwcm90ZWN0ZWQgZGlzYWJsZUZ1bmMgPSAoY29udHJvbCA9IHRoaXMuY29udHJvbCgpLCBkaXNhYmxlOiBib29sZWFuKSA9PiB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgaWYgKHRoaXMuY2hlY2tQYXJlbnRCZWZvcmVEaXNhYmxlKCkgJiYgY29udHJvbD8ucGFyZW50Py5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGlmIChkaXNhYmxlKSB7XG4gICAgICBpZiAodGhpcy5jbGVhck9uRGlzYWJsZSgpKSBjb250cm9sPy5yZXNldCgpO1xuICAgICAgY29udHJvbD8uZGlzYWJsZSgpO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbD8uZGlzYWJsZWQpIGNvbnRyb2w/LmVuYWJsZSgpO1xuICB9O1xuXG4gIEBJbnB1dCgndHlwZScpIHNldCBfdHlwZSh2OiBJbnB1dFR5cGUpIHtcbiAgICB0aGlzLm9UeXBlU2lnbmFsLnNldCh2KTtcbiAgICBpZiAodiA9PSAncGVyY2VudGFnZScpIHtcbiAgICAgIHRoaXMudHlwZVNpZ25hbC5zZXQoJ251bWJlcicpO1xuICAgICAgdGhpcy5tYXhTaWduYWwuc2V0KDEwMCk7XG4gICAgICB0aGlzLm1pblNpZ25hbC5zZXQoMCk7XG4gICAgfSBlbHNlIHRoaXMudHlwZVNpZ25hbC5zZXQodik7XG4gIH1cblxuICByZWFkb25seSBzaG93UGFzc3dvcmRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4obnVsbCk7XG5cbiAgcmVhZG9ubHkgZGlzYWJsZWRTaWduYWwgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKT8uZGlzYWJsZWQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IG9UeXBlU2lnbmFsID0gc2lnbmFsPElucHV0VHlwZSB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSB0eXBlU2lnbmFsID0gc2lnbmFsPElucHV0VHlwZT4oJ3RleHQnKTtcbiAgcmVhZG9ubHkgbWF4U2lnbmFsID0gbW9kZWw8bnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4obnVsbCwgeyBhbGlhczogJ21heCcgfSk7XG4gIHJlYWRvbmx5IG1pblNpZ25hbCA9IG1vZGVsPG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KG51bGwsIHsgYWxpYXM6ICdtaW4nIH0pO1xuXG4gIHJlYWRvbmx5IGNvbXB1dGVkU2hvd0xhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNob3dMYWJlbCA9IHRoaXMuc2hvd0xhYmVsU2lnbmFsKCksXG4gICAgICBsYWJlbCA9IHRoaXMubGFiZWxTaWduYWwoKTtcbiAgICByZXR1cm4gc2hvd0xhYmVsICYmIGxhYmVsICE9IG51bGw7XG4gIH0pO1xuXG4gIHB1YmxpYyBpUyA9IGluamVjdChJbnB1dFNlcnZpY2UpO1xuXG4gIC8vIEBWaWV3Q2hpbGQoJ2RhdGVJbnB1dCcpIGRhdGVJbnB1dFJlZj86IERhdGVJbnB1dENvbXBvbmVudDtcblxuICByZWFkb25seSBjb250cm9sID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgICh0aGlzLmZvcm0oKSBhcyBGb3JtR3JvdXA8VEZvcm1Hcm91cD4pPy5jb250cm9sc1tcbiAgICAgICAgdGhpcy5uYW1lKCkgYXMga2V5b2YgRm9ybUdyb3VwPFRGb3JtR3JvdXA+Wydjb250cm9scyddXG4gICAgICBdLFxuICApO1xuICAvLyBwcm90ZWN0ZWQgZmlyc3RGZXRjaD10cnVlXG5cbiAgcmVhZG9ubHkgb25Db250cm9sT2J0YWluZWRFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29udHJvbCgpO1xuICAgICAgLy8gY29uc29sZS5sb2coJ2NvbnRyb2wgb2J0YWluZWQnLCBjb250cm9sKTtcbiAgICAgIGlmIChjb250cm9sKSB0aGlzLm9uQ29udHJvbE9idGFpbmVkTGlzdCgpLmZvckVhY2goKGZ1bmMpID0+IGZ1bmMoY29udHJvbCkpO1xuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xuXG4gIHJlYWRvbmx5IGFkZE9uQ29udHJvbE9idGFpbmVkSG9vayA9IChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBmdW5jOiAoY29udHJvbDogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5jb250cm9sPikgPT4gYW55LFxuICApID0+IHtcbiAgICB0aGlzLm9uQ29udHJvbE9idGFpbmVkTWFwLnVwZGF0ZSgobWFwKSA9PiAoeyAuLi5tYXAsIFtrZXldOiBmdW5jIH0pKTtcbiAgfTtcblxuICByZWFkb25seSB2YWx1ZUNoYW5nZXMgPSB0b09ic2VydmFibGUodGhpcy5jb250cm9sKS5waXBlKFxuICAgIHN0YXJ0V2l0aCh0aGlzLmNvbnRyb2woKSksXG4gICAgZmlsdGVyKChjKSA9PiAhIWMpLFxuICAgIHN3aXRjaE1hcChcbiAgICAgIChjKSA9PlxuICAgICAgICBjPy52YWx1ZUNoYW5nZXM/LnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGM/LmdldFJhd1ZhbHVlKCkpLFxuICAgICAgICAgIG1hcCgoKSA9PiBjPy5nZXRSYXdWYWx1ZSgpKSxcbiAgICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIHJlYWRvbmx5IGZvcm1GaWVsZE5vdGlmaWVyID0gdG9TaWduYWwoXG4gICAgdGhpcy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIC8vIHRhcCgoY29udHJvbCkgPT4ge1xuICAgICAgLy8gICBjb25zb2xlLmxvZygnZm9ybUZpZWxkTm90aWZpZXIgY29udHJvbCcsIGNvbnRyb2wpO1xuICAgICAgLy8gfSksXG4gICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5jb250cm9sKCkgIT0gbnVsbCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgbWVyZ2UodGhpcy5jb250cm9sKCk/LnZhbHVlQ2hhbmdlcywgdGhpcy5jb250cm9sKCk/LnN0YXR1c0NoYW5nZXMpLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLFxuICAgICAgKSxcbiAgICAgIG1hcCgoKSA9PiBwZXJmb3JtYW5jZS5ub3coKSksXG4gICAgICAvLyBtYXAoKCk9Pk1hdGgucmFuZG9tKCkpLFxuICAgICAgLy8gdGFwKCgpID0+IHtcbiAgICAgIC8vICAgY29uc29sZS5sb2coJ2Zvcm1GaWVsZE5vdGlmaWVyIGNvbnRyb2wgc3dpdGNoTWFwIGVtaXR0ZXInLCB0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAvLyB9KSxcbiAgICApLFxuICApO1xuICByZWFkb25seSB2YWxpZFNpZ25hbCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICB0aGlzLmZvcm1GaWVsZE5vdGlmaWVyKCk7XG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkU2lnbmFsIG5vdGlmaWVkJywgdGhpcy5jb250cm9sKCkpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKT8udmFsaWQ7XG4gIH0pO1xuICByZWFkb25seSBpbnZhbGlkU2lnbmFsID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sKCk/LmludmFsaWQ7XG4gIH0pO1xuICByZWFkb25seSB2YWx1ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMudmFsdWVDaGFuZ2VzKTtcbiAgcmVhZG9ubHkgaGFzVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZhbHVlU2lnbmFsKCk/LnRvU3RyaW5nKCk/LnRyaW0oKT8ubGVuZ3RoID4gMCk7XG4gIHJlYWRvbmx5IGludmFsaWRDaGVja2JveFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkU2lnbmFsKCkgJiYgdGhpcy50eXBlU2lnbmFsKCkgPT0gJ2NoZWNrYm94JztcbiAgfSk7XG4gIHJlYWRvbmx5IGRpcnR5U2lnbmFsID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sKCk/LmRpcnR5O1xuICB9KTtcbiAgcmVhZG9ubHkgdG91Y2hlZFNpZ25hbCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICB0aGlzLmZvcm1GaWVsZE5vdGlmaWVyKCk7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCgpPy50b3VjaGVkO1xuICB9KTtcbiAgcmVhZG9ubHkgZXJyb3JzU2lnbmFsID0gY29tcHV0ZWQ8SU9iamVjdExpdGVyYWw+KCgpID0+IHtcbiAgICB0aGlzLmZvcm1GaWVsZE5vdGlmaWVyKCk7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbCgpPy5lcnJvcnM7XG4gIH0pO1xuICByZWFkb25seSBlcnJvcnNTaWduYWxqc29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmVycm9yc1NpZ25hbCgpIHx8IHt9KTtcbiAgfSk7XG4gIHJlYWRvbmx5IHBlbmRpbmdTaWduYWwgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtRmllbGROb3RpZmllcigpO1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2woKT8ucGVuZGluZztcbiAgfSk7XG4gIHJlYWRvbmx5IHByaXN0aW5lU2lnbmFsID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sKCk/LnByaXN0aW5lO1xuICB9KTtcbiAgcmVhZG9ubHkgY29udHJvbFJlcXVpcmVkU2lnbmFsID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIHRoaXMuZm9ybUZpZWxkTm90aWZpZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sKCk/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfSk7XG4gIHJlYWRvbmx5IGlzUmVxdWlyZWRTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlcXVpcmVkU2lnbmFsKCkgfHwgdGhpcy5jb250cm9sUmVxdWlyZWRTaWduYWwoKSk7XG4gIHJlYWRvbmx5IG5hbWVTdHJTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm5hbWUoKT8udG9TdHJpbmcoKSk7XG4gIHJlYWRvbmx5IGlucHV0Q2xhc3NTaWduYWwgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuaVMuaW5wdXRDbGFzcyhcbiAgICAgIHRoaXMuaW5wQ2xTaWduYWwoKSxcbiAgICAgIHRoaXMuZGlydHlTaWduYWwoKSxcbiAgICAgIHRoaXMudmFsaWRTaWduYWwoKSxcbiAgICAgIHRoaXMuaW52YWxpZFNpZ25hbCgpLFxuICAgICAgdGhpcy5zaG93VmFsaWRhdGlvblNpZ25hbCgpLFxuICAgICksXG4gICk7XG4gIHJlYWRvbmx5IGNvbG9yZWRTaWduYWwgPSBpbnB1dDxib29sZWFuPih0cnVlLCB7IGFsaWFzOiAnY29sb3JlZCcgfSk7XG4gIHJlYWRvbmx5IGNoZWNrZWRTaWduYWwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7IC8vb3B0aW9uYWwgY2hlY2tlZCBvcHRpb24gZm9yIGNoZWNrYm94ZXNcbiAgcmVhZG9ubHkgcmF3T3B0aW9uc1NpZ25hbCA9IHNpZ25hbDxhbnlbXT4oW10pO1xuICByZWFkb25seSBvcHRpb25zID0gY29tcHV0ZWQ8SU9wdGlvbltdPigoKSA9PlxuICAgIHRoaXMuaVMub3B0aW9uc0Zvcm1hdHRlcihcbiAgICAgIHRoaXMucmF3T3B0aW9uc1NpZ25hbCgpLFxuICAgICAgdGhpcy52YWx1ZUZpZWxkIGFzIHN0cmluZyxcbiAgICAgIHRoaXMub3B0aW9uRm9ybWF0dGVyLFxuICAgICAgdGhpcy5sYWJlbFR5cGUsXG4gICAgICB0aGlzLmxhYmVsRmllbGQgYXMgc3RyaW5nLFxuICAgICAgdGhpcy5hdXRvUGlja1ZhbHVlRmllbGQsXG4gICAgKSxcbiAgKTtcbiAgcmVhZG9ubHkgb3B0aW9uc01hcCA9IGNvbXB1dGVkPHsgW3ZhbHVlOiBzdHJpbmddOiBJT3B0aW9uIH0+KCgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zKCk7XG4gICAgY29uc3QgbWFwOiB7IFt2YWx1ZUtleTogc3RyaW5nXTogSU9wdGlvbiB9ID0ge307XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIG9wdGlvbnMpIHtcbiAgICAgIG1hcFtKU09OLnN0cmluZ2lmeShpdGVtLnZhbHVlKV0gPSBpdGVtO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvZXNPcHRpb25FeGlzdCA9ICh2YWwpID0+IHRoaXMub3B0aW9uc01hcCgpW0pTT04uc3RyaW5naWZ5KHZhbCldO1xuICAvKipBY3Rpb25zIHRvIHBlcmZvcm0gd2hlbiBhIG5ldyBjb250cm9sIGlzIGNyZWF0ZWQgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uQ29udHJvbE9idGFpbmVkTWFwID0gc2lnbmFsPHtcbiAgICBba2V5OiBzdHJpbmddOiAoY29udHJvbDogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5jb250cm9sPikgPT4gYW55O1xuICB9Pih7fSk7XG4gIC8qKkFjdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGEgbmV3IGNvbnRyb2wgaXMgY3JlYXRlZCAqL1xuICByZWFkb25seSBvbkNvbnRyb2xPYnRhaW5lZExpc3QgPSBjb21wdXRlZCgoKSA9PiBPYmplY3QudmFsdWVzKHRoaXMub25Db250cm9sT2J0YWluZWRNYXAoKSB8fCB7fSkpO1xuICByZWFkb25seSBtY2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgbVNlbGVjdE9wdGlvbkNoYW5nZSA9IG91dHB1dDxUT3B0aW9uPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWxTaWduYWwoKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdMYWJlbCBzZXQgdG8gY29udHJvbCcpO1xuICAgICAgLy8gdmFsdWUgPSB0aGlzLnZhbHVlU2lnbmFsKCk7XG4gICAgICBpZiAodGhpcy5jb250cm9sKCkpIHRoaXMuY29udHJvbCgpLmxhYmVsVmFsdWUgPSBsYWJlbDtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBwcmVzZXRWYWx1ZSA9IHRoaXMucHJlc2V0VmFsdWUoKSxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucygpO1xuICAgICAgLy8gY29uc29sZS5sb2coJ2NoZWNrIHByZXNldCcpO1xuICAgICAgaWYgKHByZXNldFZhbHVlICYmIG9wdGlvbnM/Lmxlbmd0aCA9PSAxICYmICF0aGlzLmNvbnRyb2woKT8udmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb250cm9sKCk/LnBhdGNoVmFsdWUob3B0aW9uc1swXS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRPcHRpb24ob3B0aW9uOiBJT3B0aW9uKSB7XG4gICAgLy8gZGVidWdnZXJcbiAgICB0aGlzLm1TZWxlY3RPcHRpb25DaGFuZ2UuZW1pdChvcHRpb24ub3JpZ2luYWxSb3cpO1xuICB9XG4gIGRhdGVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY29udHJvbCgpKSByZXR1cm47XG4gICAgdGhpcy5jb250cm9sKCkucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5tY2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG59XG4iXX0=
@@ -110,10 +110,10 @@ export class InputBasicComponent extends InputBase {
110
110
  this.files = e.target.files;
111
111
  this.mchange.emit(e);
112
112
  }
113
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: InputBasicComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
114
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: InputBasicComponent, isStandalone: true, selector: "app-input-basic,app-input", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: false, isRequired: false, transformFunction: null }, inp: { classPropertyName: "inp", publicName: "input", isSignal: false, isRequired: false, transformFunction: null }, contextData: { classPropertyName: "contextData", publicName: "contextData", isSignal: false, isRequired: false, transformFunction: null }, decimalPoints: { classPropertyName: "decimalPoints", publicName: "decimalPoints", isSignal: false, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: false, isRequired: false, transformFunction: null }, hide: { classPropertyName: "hide", publicName: "hide", isSignal: false, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: false, isRequired: false, transformFunction: null }, clearOnDisable: { classPropertyName: "clearOnDisable", publicName: "clearOnDisable", isSignal: true, isRequired: false, transformFunction: null }, labelLink: { classPropertyName: "labelLink", publicName: "labelLink", isSignal: false, isRequired: false, transformFunction: null }, lblCl: { classPropertyName: "lblCl", publicName: "lblCl", isSignal: false, isRequired: false, transformFunction: null }, light: { classPropertyName: "light", publicName: "light", isSignal: false, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, optionsFunc: { classPropertyName: "optionsFunc", publicName: "optionsFunc", isSignal: false, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: false, isRequired: false, transformFunction: null }, vms: { classPropertyName: "vms", publicName: "vms", isSignal: false, isRequired: false, transformFunction: null }, xsmall: { classPropertyName: "xsmall", publicName: "xsmall", isSignal: false, isRequired: false, transformFunction: null }, _setCurrentDate: { classPropertyName: "_setCurrentDate", publicName: "setCurrentDate", isSignal: false, isRequired: false, transformFunction: null }, _options: { classPropertyName: "_options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { mSelectedOptionLabel: "mSelectedOptionLabel" }, providers: InputProviders, viewQueries: [{ propertyName: "matSelect", first: true, predicate: ["matSelectTag"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- <div>form().getRawValue: {{ff}}</div> -->\n@if (verbose()) {\n <div>disabledSignal: {{ disabledSignal() }}</div>\n <div>validSignal: {{ validSignal() }}</div>\n <div>invalidSignal: {{ invalidSignal() }}</div>\n <div>valueSignal: {{ valueSignal() }}</div>\n <div>hasValue: {{ hasValue() }}</div>\n <div>dirtySignal: {{ dirtySignal() }}</div>\n <div>touchedSignal: {{ touchedSignal() }}</div>\n <div>errorsSignal: {{ errorsSignaljson() }}</div>\n <div>pendingSignal: {{ pendingSignal() }}</div>\n <div>requiredSignal: {{ requiredSignal() }}</div>\n <div>pristineSignal: {{ pristineSignal() }}</div>\n <div>controlRequiredSignal: {{ controlRequiredSignal() }}</div>\n <div>isRequiredSignal: {{ isRequiredSignal() }}</div>\n <div class=\"\">onControlObtainedList Length: {{ onControlObtainedList().length }}</div>\n}\n<div\n class=\" custom-input align-items-center {{ typeSignal() }} gx-1\"\n [formGroup]=\"form() | toAny\"\n [ngClass]=\"{ 'd-flex': !stackedSignal() }\">\n @if (computedShowLabel()) {\n <app-input-label\n [colored]=\"coloredSignal()\"\n [form]=\"form()\"\n [hint]=\"hint\"\n [id]=\"idSignal()\"\n [invalidCheckbox]=\"invalidCheckboxSignal()\"\n [isRequired]=\"isRequiredSignal()\"\n [label]=\"labelSignal()\"\n [lblCl]=\"lblCl\"\n [light]=\"light\"\n [mini]=\"miniSignal()\"\n [ngClass]=\"{ 'w-100': stackedSignal() }\"\n [inlineHint]=\"inlineHint\"\n [showRequiredTag]=\"showRequiredTagSignal()\"\n [showLabel]=\"showLabelSignal()\"\n [small]=\"smallSignal()\"\n [stacked]=\"stackedSignal()\"\n [theme]=\"theme\"\n [xsmall]=\"xsmall\"></app-input-label>\n }\n <div class=\"d-flex align-items-center {{ inputContClassSignal() }} \">\n <div\n class=\"position-relative d-flex input-content w-100\"\n [ngClass]=\"{\n 'ms-2': !stackedSignal(),\n showValidationIcon: showValidationSignal() || showValidationIconSignal(),\n dontFormatAsInput: dontFormatAsInputSignal()\n }\">\n <ng-template #date>\n <date-input\n #dateInput\n [debug]=\"debug()\"\n [readonly]=\"readonlySignal()\"\n [id]=\"idSignal()\"\n class=\"w-100\"\n [type]=\"typeSignal()\"\n (valueChanged)=\"dateChanged($event)\"\n [value]=\"valueSignal()\"\n [inputClass]=\"inputClassSignal()\"\n [disabled]=\"disabledSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [valid]=\"validSignal()\"\n [invalid]=\"invalidSignal()\"\n [showValidation]=\"showValidationSignal()\" />\n </ng-template>\n @switch (typeSignal()) {\n <!-- DATE -->\n @case ('date') {\n <ng-container *ngTemplateOutlet=\"date\" />\n }\n <!-- DATETIME-LOCAL -->\n @case ('datetime-local') {\n <ng-container *ngTemplateOutlet=\"date\" />\n }\n <!-- CHECKBOX -->\n @case ('checkbox') {\n <input\n type=\"checkbox\"\n [id]=\"idSignal()\"\n [formControlName]=\"nameStrSignal()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [attr.data-debug]=\"debug()\"\n class=\"{{ inpClSignal() }} d-inline-block form-control width-unset\"\n placeholder=\"{{ placeholder() }}\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [checked]=\"checkedSignal()\"\n [attr.indeterminate]=\"indeterminate\" />\n }\n @case ('checkedbox') {\n <input\n type=\"checkbox\"\n class=\"{{ inpClSignal() }} d-inline-block form-control width-unset\"\n [checked]=\"checkedSignal()\"\n [attr.data-debug]=\"debug()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\" />\n }\n <!-- FILE -->\n @case ('file') {\n <input\n type=\"file\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n (change)=\"upload($event)\"\n [accept]=\"accept\"\n [attr.multiple]=\"multiple\" />\n }\n <!-- FILE BUTTON-->\n @case ('fileButton') {\n <input\n type=\"file\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n (change)=\"upload($event)\"\n [accept]=\"accept\"\n [attr.multiple]=\"multiple\"\n hidden\n #file />\n <app-btn\n class=\"w-100\"\n (mclick)=\"file.click()\"\n icon=\"upload\"\n [type]=\"files ? 'primary' : 'secondary'\"\n text=\"{{ placeholder() || labelSignal() || 'Upload' }}\"></app-btn>\n }\n <!-- SELECT -->\n @case ('select') {\n <!-- [attr.disabled]=\"disabled\" -->\n <mat-select\n #matSelectTag\n placeholder=\"{{ placeholder() }}\"\n formControlName=\"{{ nameStrSignal() }}\"\n [id]=\"idSignal()\"\n class=\"{{ cls() }} {{ inputClassSignal() }}\"\n [required]=\"requiredSignal()\"\n (selectionChange)=\"change({ target: $event })\">\n @if (showEmptyOptionSignal()) {\n <mat-option selected [value]=\"null\" class=\"empty-option\">\n {{ placeholder() }}\n </mat-option>\n }\n @for (item of options(); track iS.trackByValue($index, item)) {\n <mat-option [value]=\"item.value\" (onSelectionChange)=\"selectedOption(item)\">\n <div\n class=\"option\"\n [matTooltip]=\"item.label\"\n [matTooltipShowDelay]=\"1000\"\n [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions() | async }}\n </div>\n </mat-option>\n }\n </mat-select>\n }\n <!-- TEXTAREA -->\n @case ('textarea') {\n <textarea\n [formControlName]=\"nameStrSignal()\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [rows]=\"textareaRowsSignal()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"></textarea>\n }\n <!-- Radio -->\n @case ('radio') {\n <input\n type=\"radio\"\n [formControlName]=\"nameStrSignal()\"\n [id]=\"idSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [value]=\"valueSignal()\" />\n }\n <!-- Viewer -->\n @case ('viewer') {\n <input\n type=\"text\"\n [id]=\"idSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [class]=\"inputClassSignal()\"\n [readonly]=\"true\"\n [value]=\"valueSignal()\" />\n }\n <!-- PASSWORD -->\n @case ('password') {\n <input\n type=\"{{ showPasswordSignal() ? 'text' : 'password' }}\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n [required]=\"requiredSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [value]=\"valueSignal()\" />\n <div\n class=\"password-icons pointer\"\n (click)=\"showPasswordSignal.set(!showPasswordSignal())\">\n @if (showPasswordSignal()) {\n <i class=\"fa fa-eye-slash\"></i>\n } @else {\n <i class=\"fa fa-eye\"></i>\n }\n </div>\n }\n <!-- DEFAULT -->\n @default {\n <div\n [class]=\"inputClassSignal()\"\n [ngClass]=\"{\n 'has-prefix': !!prefixSignal(),\n disabled: readonlySignal() || disabledSignal()\n }\">\n @if (prefixSignal()) {\n <div class=\"prefix-val\" #prefixVal>\n {{ prefixSignal() }}\n </div>\n }\n <input\n [type]=\"typeSignal()\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [id]=\"idSignal()\"\n [matTooltip]=\"ele.innerText\"\n [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\"\n #ele\n [attr.data-debug]=\"debug()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [attr.data-otype]=\"oTypeSignal()\"\n [required]=\"requiredSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\" />\n </div>\n }\n }\n\n @if (dirtySignal() && (showValidationSignal() || showValidationIconSignal())) {\n <div [ngClass]=\"{ valid: validSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-check\"></i>\n </div>\n <div [ngClass]=\"{ pending: pendingSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n <div [ngClass]=\"{ invalid: invalidSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-times\"></i>\n </div>\n }\n <!-- <mat-form-field class=\"input\" appearance=\"fill\">\n <input type=\"{{inp.type}}\" matInput [formControl]=\"inp.formControl\">\n <mat-error *ngFor=\"let validation of inp.vms\">\n <ng-container *ngIf=\"validation|validator:inp.formControl:inp.formControl?.value\">\n {{validation.message|validationMsg:inp.prefix:inp.suffix}}\n </ng-container>\n </mat-error>\n </mat-form-field> -->\n </div>\n @if (endLabelSignal()) {\n <div\n class=\"col-auto text-primary ms-2\"\n (click)=\"iS.log(form())\"\n [matTooltip]=\"endLabelTooltipSignal() | appTranslate | async\">\n {{ endLabelSignal() | appTranslate | async }}\n </div>\n }\n </div>\n</div>\n@if (showValidationMsgSignal()) {\n <app-validation-message\n [label]=\"labelSignal()\"\n [minLength]=\"minLength\"\n [maxLength]=\"maxLength\"\n [control]=\"control()\" />\n}\n", styles: [".bordercheck{border:1px solid #4ef580!important;outline:0}.borderuncheck{border:1px solid red!important;outline:0}.light{font-weight:500}.validity-icon{display:none;position:absolute;top:0;left:unset;right:20px;height:100%;align-items:center}.select .validity-icon{right:30px}.valid{display:flex!important;color:#4ef580}.pending{display:flex!important;color:#ff4500}.invalid{display:flex!important;color:red}.inputform{height:41px}.invalid-label{color:red!important}input[type=checkbox]:checked{position:relative}.showValidationIcon .form-control:not(input[type=checkbox].form-control),.showValidationIcon select.form-control:not(input[type=checkbox].form-control){padding:10px 36px 10px 12px}.password-icons{position:absolute;right:20px;top:17%}[disabled]{cursor:default}.link{cursor:pointer}.option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "component", type: DateInputComponent, selector: "date-input", inputs: ["value", "inpCl", "cls", "inputClass", "valid", "max", "min", "id", "invalid", "disabled", "debug", "readonly", "type", "showValidation"], outputs: ["valueChanged"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: i2.BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "ngmodule", type: i3.FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i4.InputFormatDirective, selector: "input:not([matInput]):not([noformat])", inputs: ["value"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.InputLabelComponent, selector: "app-input-label", inputs: ["colored", "form", "hint", "inlineHint", "id", "invalidCheckbox", "isRequired", "label", "labelLink", "lblCl", "light", "mini", "showLabel", "showRequiredTag", "small", "stacked", "theme", "xsmall"] }, { kind: "ngmodule", type: i6.MatDatepickerModule }, { kind: "ngmodule", type: i7.MatFormFieldModule }, { kind: "ngmodule", type: i8.MatInputModule }, { kind: "ngmodule", type: i9.MatNativeDateModule }, { kind: "ngmodule", type: i9.MatOptionModule }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: i10.MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: i11.MatTooltipModule }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: i3.ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i12.ToAnyPipe, name: "toAny" }, { kind: "pipe", type: i13.SDKTranslatePipe, name: "appTranslate" }, { kind: "component", type: i14.ValidationMessageComponent, selector: "app-validation-message", inputs: ["debug", "label", "hideOverflow", "minLength", "maxLength", "ignoreDirtiness", "customMessage", "control", "input"], outputs: ["labelChange"] }] }); }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: InputBasicComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
114
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: InputBasicComponent, isStandalone: true, selector: "app-input-basic,app-input", inputs: { accept: { classPropertyName: "accept", publicName: "accept", isSignal: false, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: false, isRequired: false, transformFunction: null }, inp: { classPropertyName: "inp", publicName: "input", isSignal: false, isRequired: false, transformFunction: null }, contextData: { classPropertyName: "contextData", publicName: "contextData", isSignal: false, isRequired: false, transformFunction: null }, decimalPoints: { classPropertyName: "decimalPoints", publicName: "decimalPoints", isSignal: false, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: false, isRequired: false, transformFunction: null }, hide: { classPropertyName: "hide", publicName: "hide", isSignal: false, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: false, isRequired: false, transformFunction: null }, clearOnDisable: { classPropertyName: "clearOnDisable", publicName: "clearOnDisable", isSignal: true, isRequired: false, transformFunction: null }, labelLink: { classPropertyName: "labelLink", publicName: "labelLink", isSignal: false, isRequired: false, transformFunction: null }, lblCl: { classPropertyName: "lblCl", publicName: "lblCl", isSignal: false, isRequired: false, transformFunction: null }, light: { classPropertyName: "light", publicName: "light", isSignal: false, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, optionsFunc: { classPropertyName: "optionsFunc", publicName: "optionsFunc", isSignal: false, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: false, isRequired: false, transformFunction: null }, vms: { classPropertyName: "vms", publicName: "vms", isSignal: false, isRequired: false, transformFunction: null }, xsmall: { classPropertyName: "xsmall", publicName: "xsmall", isSignal: false, isRequired: false, transformFunction: null }, _setCurrentDate: { classPropertyName: "_setCurrentDate", publicName: "setCurrentDate", isSignal: false, isRequired: false, transformFunction: null }, _options: { classPropertyName: "_options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { mSelectedOptionLabel: "mSelectedOptionLabel" }, providers: InputProviders, viewQueries: [{ propertyName: "matSelect", first: true, predicate: ["matSelectTag"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- <div>form().getRawValue: {{ff}}</div> -->\n@if (verbose()) {\n <div>disabledSignal: {{ disabledSignal() }}</div>\n <div>validSignal: {{ validSignal() }}</div>\n <div>invalidSignal: {{ invalidSignal() }}</div>\n <div>valueSignal: {{ valueSignal() }}</div>\n <div>hasValue: {{ hasValue() }}</div>\n <div>dirtySignal: {{ dirtySignal() }}</div>\n <div>touchedSignal: {{ touchedSignal() }}</div>\n <div>errorsSignal: {{ errorsSignaljson() }}</div>\n <div>pendingSignal: {{ pendingSignal() }}</div>\n <div>requiredSignal: {{ requiredSignal() }}</div>\n <div>pristineSignal: {{ pristineSignal() }}</div>\n <div>controlRequiredSignal: {{ controlRequiredSignal() }}</div>\n <div>isRequiredSignal: {{ isRequiredSignal() }}</div>\n <div class=\"\">onControlObtainedList Length: {{ onControlObtainedList().length }}</div>\n}\n<div\n class=\" custom-input align-items-center {{ typeSignal() }} gx-1\"\n [formGroup]=\"form() | toAny\"\n [ngClass]=\"{ 'd-flex': !stackedSignal() }\">\n @if (computedShowLabel()) {\n <app-input-label\n [colored]=\"coloredSignal()\"\n [form]=\"form()\"\n [hint]=\"hint\"\n [id]=\"idSignal()\"\n [invalidCheckbox]=\"invalidCheckboxSignal()\"\n [isRequired]=\"isRequiredSignal()\"\n [label]=\"labelSignal()\"\n [lblCl]=\"lblCl\"\n [light]=\"light\"\n [mini]=\"miniSignal()\"\n [ngClass]=\"{ 'w-100': stackedSignal() }\"\n [inlineHint]=\"inlineHint\"\n [showRequiredTag]=\"showRequiredTagSignal()\"\n [showLabel]=\"showLabelSignal()\"\n [small]=\"smallSignal()\"\n [stacked]=\"stackedSignal()\"\n [theme]=\"theme\"\n [xsmall]=\"xsmall\"></app-input-label>\n }\n <div class=\"d-flex align-items-center {{ inputContClassSignal() }} \">\n <div\n class=\"position-relative d-flex input-content w-100\"\n [ngClass]=\"{\n 'ms-2': !stackedSignal(),\n showValidationIcon: showValidationSignal() || showValidationIconSignal(),\n dontFormatAsInput: dontFormatAsInputSignal()\n }\">\n <ng-template #date>\n <date-input\n #dateInput\n [debug]=\"debug()\"\n [readonly]=\"readonlySignal()\"\n [id]=\"idSignal()\"\n class=\"w-100\"\n [type]=\"typeSignal()\"\n (valueChanged)=\"dateChanged($event)\"\n [value]=\"valueSignal()\"\n [inputClass]=\"inputClassSignal()\"\n [disabled]=\"disabledSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [valid]=\"validSignal()\"\n [invalid]=\"invalidSignal()\"\n [showValidation]=\"showValidationSignal()\" />\n </ng-template>\n @switch (typeSignal()) {\n <!-- DATE -->\n @case ('date') {\n <ng-container *ngTemplateOutlet=\"date\" />\n }\n <!-- DATETIME-LOCAL -->\n @case ('datetime-local') {\n <ng-container *ngTemplateOutlet=\"date\" />\n }\n <!-- CHECKBOX -->\n @case ('checkbox') {\n <input\n type=\"checkbox\"\n [id]=\"idSignal()\"\n [formControlName]=\"nameStrSignal()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [attr.data-debug]=\"debug()\"\n class=\"{{ inpClSignal() }} d-inline-block form-control width-unset\"\n placeholder=\"{{ placeholder() }}\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [checked]=\"checkedSignal()\"\n [attr.indeterminate]=\"indeterminate\" />\n }\n @case ('checkedbox') {\n <input\n type=\"checkbox\"\n class=\"{{ inpClSignal() }} d-inline-block form-control width-unset\"\n [checked]=\"checkedSignal()\"\n [attr.data-debug]=\"debug()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\" />\n }\n <!-- FILE -->\n @case ('file') {\n <input\n type=\"file\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n (change)=\"upload($event)\"\n [accept]=\"accept\"\n [attr.multiple]=\"multiple\" />\n }\n <!-- FILE BUTTON-->\n @case ('fileButton') {\n <input\n type=\"file\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n (change)=\"upload($event)\"\n [accept]=\"accept\"\n [attr.multiple]=\"multiple\"\n hidden\n #file />\n <app-btn\n class=\"w-100\"\n (mclick)=\"file.click()\"\n icon=\"upload\"\n [type]=\"files ? 'primary' : 'secondary'\"\n text=\"{{ placeholder() || labelSignal() || 'Upload' }}\"></app-btn>\n }\n <!-- SELECT -->\n @case ('select') {\n <!-- [attr.disabled]=\"disabled\" -->\n <mat-select\n #matSelectTag\n placeholder=\"{{ placeholder() }}\"\n formControlName=\"{{ nameStrSignal() }}\"\n [id]=\"idSignal()\"\n class=\"{{ cls() }} {{ inputClassSignal() }}\"\n [required]=\"requiredSignal()\"\n (selectionChange)=\"change({ target: $event })\">\n @if (showEmptyOptionSignal()) {\n <mat-option selected [value]=\"null\" class=\"empty-option\">\n {{ placeholder() }}\n </mat-option>\n }\n @for (item of options(); track iS.trackByValue($index, item)) {\n <mat-option [value]=\"item.value\" (onSelectionChange)=\"selectedOption(item)\">\n <div\n class=\"option\"\n [matTooltip]=\"item.label\"\n [matTooltipShowDelay]=\"1000\"\n [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions() | async }}\n </div>\n </mat-option>\n }\n </mat-select>\n }\n <!-- TEXTAREA -->\n @case ('textarea') {\n <textarea\n [formControlName]=\"nameStrSignal()\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [rows]=\"textareaRowsSignal()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"></textarea>\n }\n <!-- Radio -->\n @case ('radio') {\n <input\n type=\"radio\"\n [formControlName]=\"nameStrSignal()\"\n [id]=\"idSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [value]=\"valueSignal()\" />\n }\n <!-- Viewer -->\n @case ('viewer') {\n <input\n type=\"text\"\n [id]=\"idSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [class]=\"inputClassSignal()\"\n [readonly]=\"true\"\n [value]=\"valueSignal()\" />\n }\n <!-- PASSWORD -->\n @case ('password') {\n <input\n type=\"{{ showPasswordSignal() ? 'text' : 'password' }}\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n [required]=\"requiredSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [value]=\"valueSignal()\" />\n <div\n class=\"password-icons pointer\"\n (click)=\"showPasswordSignal.set(!showPasswordSignal())\">\n @if (showPasswordSignal()) {\n <i class=\"fa fa-eye-slash\"></i>\n } @else {\n <i class=\"fa fa-eye\"></i>\n }\n </div>\n }\n <!-- DEFAULT -->\n @default {\n <div\n [class]=\"inputClassSignal()\"\n [ngClass]=\"{\n 'has-prefix': !!prefixSignal(),\n disabled: readonlySignal() || disabledSignal()\n }\">\n @if (prefixSignal()) {\n <div class=\"prefix-val\" #prefixVal>\n {{ prefixSignal() }}\n </div>\n }\n <input\n [type]=\"typeSignal()\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [id]=\"idSignal()\"\n [matTooltip]=\"ele.innerText\"\n [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\"\n #ele\n [attr.data-debug]=\"debug()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [attr.data-otype]=\"oTypeSignal()\"\n [required]=\"requiredSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\" />\n </div>\n }\n }\n\n @if (dirtySignal() && (showValidationSignal() || showValidationIconSignal())) {\n <div [ngClass]=\"{ valid: validSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-check\"></i>\n </div>\n <div [ngClass]=\"{ pending: pendingSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n <div [ngClass]=\"{ invalid: invalidSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-times\"></i>\n </div>\n }\n <!-- <mat-form-field class=\"input\" appearance=\"fill\">\n <input type=\"{{inp.type}}\" matInput [formControl]=\"inp.formControl\">\n <mat-error *ngFor=\"let validation of inp.vms\">\n <ng-container *ngIf=\"validation|validator:inp.formControl:inp.formControl?.value\">\n {{validation.message|validationMsg:inp.prefix:inp.suffix}}\n </ng-container>\n </mat-error>\n </mat-form-field> -->\n </div>\n @if (endLabelSignal()) {\n <div\n class=\"col-auto text-primary ms-2\"\n (click)=\"iS.log(form())\"\n [matTooltip]=\"endLabelTooltipSignal() | appTranslate | async\">\n {{ endLabelSignal() | appTranslate | async }}\n </div>\n }\n </div>\n</div>\n@if (showValidationMsgSignal()) {\n <app-validation-message\n [label]=\"labelSignal()\"\n [minLength]=\"minLength\"\n [maxLength]=\"maxLength\"\n [control]=\"control()\" />\n}\n", styles: [".bordercheck{border:1px solid #4ef580!important;outline:0}.borderuncheck{border:1px solid red!important;outline:0}.light{font-weight:500}.validity-icon{display:none;position:absolute;top:0;left:unset;right:20px;height:100%;align-items:center}.select .validity-icon{right:30px}.valid{display:flex!important;color:#4ef580}.pending{display:flex!important;color:#ff4500}.invalid{display:flex!important;color:red}.inputform{height:41px}.invalid-label{color:red!important}input[type=checkbox]:checked{position:relative}.showValidationIcon .form-control:not(input[type=checkbox].form-control),.showValidationIcon select.form-control:not(input[type=checkbox].form-control){padding:10px 36px 10px 12px}.password-icons{position:absolute;right:20px;top:17%}[disabled]{cursor:default}.link{cursor:pointer}.option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], dependencies: [{ kind: "component", type: DateInputComponent, selector: "date-input", inputs: ["value", "inpCl", "cls", "inputClass", "valid", "max", "min", "id", "invalid", "disabled", "debug", "readonly", "type", "showValidation"], outputs: ["valueChanged"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: i2.BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "ngmodule", type: i3.FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i4.InputFormatDirective, selector: "input:not([matInput]):not([noformat])", inputs: ["value"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.InputLabelComponent, selector: "app-input-label", inputs: ["colored", "form", "hint", "inlineHint", "id", "invalidCheckbox", "isRequired", "label", "labelLink", "lblCl", "light", "mini", "showLabel", "showRequiredTag", "small", "stacked", "theme", "xsmall"] }, { kind: "ngmodule", type: i6.MatDatepickerModule }, { kind: "ngmodule", type: i7.MatFormFieldModule }, { kind: "ngmodule", type: i8.MatInputModule }, { kind: "ngmodule", type: i9.MatNativeDateModule }, { kind: "ngmodule", type: i9.MatOptionModule }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: i10.MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: i11.MatTooltipModule }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: i3.ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i12.ToAnyPipe, name: "toAny" }, { kind: "pipe", type: i13.SDKTranslatePipe, name: "appTranslate" }, { kind: "component", type: i14.ValidationMessageComponent, selector: "app-validation-message", inputs: ["debug", "label", "hideOverflow", "minLength", "maxLength", "ignoreDirtiness", "customMessage", "control", "input"], outputs: ["labelChange"] }] }); }
115
115
  }
116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: InputBasicComponent, decorators: [{
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: InputBasicComponent, decorators: [{
117
117
  type: Component,
118
118
  args: [{ selector: 'app-input-basic,app-input', standalone: true, providers: InputProviders, imports: [DateInputComponent, InputSharedModules], template: "<!-- <div>form().getRawValue: {{ff}}</div> -->\n@if (verbose()) {\n <div>disabledSignal: {{ disabledSignal() }}</div>\n <div>validSignal: {{ validSignal() }}</div>\n <div>invalidSignal: {{ invalidSignal() }}</div>\n <div>valueSignal: {{ valueSignal() }}</div>\n <div>hasValue: {{ hasValue() }}</div>\n <div>dirtySignal: {{ dirtySignal() }}</div>\n <div>touchedSignal: {{ touchedSignal() }}</div>\n <div>errorsSignal: {{ errorsSignaljson() }}</div>\n <div>pendingSignal: {{ pendingSignal() }}</div>\n <div>requiredSignal: {{ requiredSignal() }}</div>\n <div>pristineSignal: {{ pristineSignal() }}</div>\n <div>controlRequiredSignal: {{ controlRequiredSignal() }}</div>\n <div>isRequiredSignal: {{ isRequiredSignal() }}</div>\n <div class=\"\">onControlObtainedList Length: {{ onControlObtainedList().length }}</div>\n}\n<div\n class=\" custom-input align-items-center {{ typeSignal() }} gx-1\"\n [formGroup]=\"form() | toAny\"\n [ngClass]=\"{ 'd-flex': !stackedSignal() }\">\n @if (computedShowLabel()) {\n <app-input-label\n [colored]=\"coloredSignal()\"\n [form]=\"form()\"\n [hint]=\"hint\"\n [id]=\"idSignal()\"\n [invalidCheckbox]=\"invalidCheckboxSignal()\"\n [isRequired]=\"isRequiredSignal()\"\n [label]=\"labelSignal()\"\n [lblCl]=\"lblCl\"\n [light]=\"light\"\n [mini]=\"miniSignal()\"\n [ngClass]=\"{ 'w-100': stackedSignal() }\"\n [inlineHint]=\"inlineHint\"\n [showRequiredTag]=\"showRequiredTagSignal()\"\n [showLabel]=\"showLabelSignal()\"\n [small]=\"smallSignal()\"\n [stacked]=\"stackedSignal()\"\n [theme]=\"theme\"\n [xsmall]=\"xsmall\"></app-input-label>\n }\n <div class=\"d-flex align-items-center {{ inputContClassSignal() }} \">\n <div\n class=\"position-relative d-flex input-content w-100\"\n [ngClass]=\"{\n 'ms-2': !stackedSignal(),\n showValidationIcon: showValidationSignal() || showValidationIconSignal(),\n dontFormatAsInput: dontFormatAsInputSignal()\n }\">\n <ng-template #date>\n <date-input\n #dateInput\n [debug]=\"debug()\"\n [readonly]=\"readonlySignal()\"\n [id]=\"idSignal()\"\n class=\"w-100\"\n [type]=\"typeSignal()\"\n (valueChanged)=\"dateChanged($event)\"\n [value]=\"valueSignal()\"\n [inputClass]=\"inputClassSignal()\"\n [disabled]=\"disabledSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [valid]=\"validSignal()\"\n [invalid]=\"invalidSignal()\"\n [showValidation]=\"showValidationSignal()\" />\n </ng-template>\n @switch (typeSignal()) {\n <!-- DATE -->\n @case ('date') {\n <ng-container *ngTemplateOutlet=\"date\" />\n }\n <!-- DATETIME-LOCAL -->\n @case ('datetime-local') {\n <ng-container *ngTemplateOutlet=\"date\" />\n }\n <!-- CHECKBOX -->\n @case ('checkbox') {\n <input\n type=\"checkbox\"\n [id]=\"idSignal()\"\n [formControlName]=\"nameStrSignal()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [attr.data-debug]=\"debug()\"\n class=\"{{ inpClSignal() }} d-inline-block form-control width-unset\"\n placeholder=\"{{ placeholder() }}\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [checked]=\"checkedSignal()\"\n [attr.indeterminate]=\"indeterminate\" />\n }\n @case ('checkedbox') {\n <input\n type=\"checkbox\"\n class=\"{{ inpClSignal() }} d-inline-block form-control width-unset\"\n [checked]=\"checkedSignal()\"\n [attr.data-debug]=\"debug()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\" />\n }\n <!-- FILE -->\n @case ('file') {\n <input\n type=\"file\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n (change)=\"upload($event)\"\n [accept]=\"accept\"\n [attr.multiple]=\"multiple\" />\n }\n <!-- FILE BUTTON-->\n @case ('fileButton') {\n <input\n type=\"file\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n (change)=\"upload($event)\"\n [accept]=\"accept\"\n [attr.multiple]=\"multiple\"\n hidden\n #file />\n <app-btn\n class=\"w-100\"\n (mclick)=\"file.click()\"\n icon=\"upload\"\n [type]=\"files ? 'primary' : 'secondary'\"\n text=\"{{ placeholder() || labelSignal() || 'Upload' }}\"></app-btn>\n }\n <!-- SELECT -->\n @case ('select') {\n <!-- [attr.disabled]=\"disabled\" -->\n <mat-select\n #matSelectTag\n placeholder=\"{{ placeholder() }}\"\n formControlName=\"{{ nameStrSignal() }}\"\n [id]=\"idSignal()\"\n class=\"{{ cls() }} {{ inputClassSignal() }}\"\n [required]=\"requiredSignal()\"\n (selectionChange)=\"change({ target: $event })\">\n @if (showEmptyOptionSignal()) {\n <mat-option selected [value]=\"null\" class=\"empty-option\">\n {{ placeholder() }}\n </mat-option>\n }\n @for (item of options(); track iS.trackByValue($index, item)) {\n <mat-option [value]=\"item.value\" (onSelectionChange)=\"selectedOption(item)\">\n <div\n class=\"option\"\n [matTooltip]=\"item.label\"\n [matTooltipShowDelay]=\"1000\"\n [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\"\n #ele>\n {{ item.label | appTranslate: translateOptions() | async }}\n </div>\n </mat-option>\n }\n </mat-select>\n }\n <!-- TEXTAREA -->\n @case ('textarea') {\n <textarea\n [formControlName]=\"nameStrSignal()\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [rows]=\"textareaRowsSignal()\"\n [required]=\"requiredSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"></textarea>\n }\n <!-- Radio -->\n @case ('radio') {\n <input\n type=\"radio\"\n [formControlName]=\"nameStrSignal()\"\n [id]=\"idSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [value]=\"valueSignal()\" />\n }\n <!-- Viewer -->\n @case ('viewer') {\n <input\n type=\"text\"\n [id]=\"idSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [class]=\"inputClassSignal()\"\n [readonly]=\"true\"\n [value]=\"valueSignal()\" />\n }\n <!-- PASSWORD -->\n @case ('password') {\n <input\n type=\"{{ showPasswordSignal() ? 'text' : 'password' }}\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [id]=\"idSignal()\"\n [class]=\"inputClassSignal()\"\n [required]=\"requiredSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\"\n [value]=\"valueSignal()\" />\n <div\n class=\"password-icons pointer\"\n (click)=\"showPasswordSignal.set(!showPasswordSignal())\">\n @if (showPasswordSignal()) {\n <i class=\"fa fa-eye-slash\"></i>\n } @else {\n <i class=\"fa fa-eye\"></i>\n }\n </div>\n }\n <!-- DEFAULT -->\n @default {\n <div\n [class]=\"inputClassSignal()\"\n [ngClass]=\"{\n 'has-prefix': !!prefixSignal(),\n disabled: readonlySignal() || disabledSignal()\n }\">\n @if (prefixSignal()) {\n <div class=\"prefix-val\" #prefixVal>\n {{ prefixSignal() }}\n </div>\n }\n <input\n [type]=\"typeSignal()\"\n [formControlName]=\"nameStrSignal()\"\n placeholder=\"{{ placeholder() }}\"\n [id]=\"idSignal()\"\n [matTooltip]=\"ele.innerText\"\n [matTooltipDisabled]=\"ele.scrollWidth <= ele.offsetWidth\"\n #ele\n [attr.data-debug]=\"debug()\"\n [attr.data-noformat]=\"computedNoFormat()\"\n [attr.data-otype]=\"oTypeSignal()\"\n [required]=\"requiredSignal()\"\n [max]=\"maxSignal()\"\n [min]=\"minSignal()\"\n [readonly]=\"readonlySignal()\"\n (change)=\"change($event)\" />\n </div>\n }\n }\n\n @if (dirtySignal() && (showValidationSignal() || showValidationIconSignal())) {\n <div [ngClass]=\"{ valid: validSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-check\"></i>\n </div>\n <div [ngClass]=\"{ pending: pendingSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-spinner fa-spin\"></i>\n </div>\n <div [ngClass]=\"{ invalid: invalidSignal() }\" class=\"validity-icon\">\n <i class=\"fa fa-times\"></i>\n </div>\n }\n <!-- <mat-form-field class=\"input\" appearance=\"fill\">\n <input type=\"{{inp.type}}\" matInput [formControl]=\"inp.formControl\">\n <mat-error *ngFor=\"let validation of inp.vms\">\n <ng-container *ngIf=\"validation|validator:inp.formControl:inp.formControl?.value\">\n {{validation.message|validationMsg:inp.prefix:inp.suffix}}\n </ng-container>\n </mat-error>\n </mat-form-field> -->\n </div>\n @if (endLabelSignal()) {\n <div\n class=\"col-auto text-primary ms-2\"\n (click)=\"iS.log(form())\"\n [matTooltip]=\"endLabelTooltipSignal() | appTranslate | async\">\n {{ endLabelSignal() | appTranslate | async }}\n </div>\n }\n </div>\n</div>\n@if (showValidationMsgSignal()) {\n <app-validation-message\n [label]=\"labelSignal()\"\n [minLength]=\"minLength\"\n [maxLength]=\"maxLength\"\n [control]=\"control()\" />\n}\n", styles: [".bordercheck{border:1px solid #4ef580!important;outline:0}.borderuncheck{border:1px solid red!important;outline:0}.light{font-weight:500}.validity-icon{display:none;position:absolute;top:0;left:unset;right:20px;height:100%;align-items:center}.select .validity-icon{right:30px}.valid{display:flex!important;color:#4ef580}.pending{display:flex!important;color:#ff4500}.invalid{display:flex!important;color:red}.inputform{height:41px}.invalid-label{color:red!important}input[type=checkbox]:checked{position:relative}.showValidationIcon .form-control:not(input[type=checkbox].form-control),.showValidationIcon select.form-control:not(input[type=checkbox].form-control){padding:10px 36px 10px 12px}.password-icons{position:absolute;right:20px;top:17%}[disabled]{cursor:default}.link{cursor:pointer}.option{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
119
119
  }], ctorParameters: () => [], propDecorators: { accept: [{
@@ -163,4 +163,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
163
163
  type: ViewChild,
164
164
  args: ['matSelectTag']
165
165
  }] } });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYmFzaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFHVCxNQUFNLEVBRU4sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVduRCxNQUFNLE9BQU8sbUJBT1gsU0FBUSxTQUF3QztJQTJCaEQsc0JBQXNCO0lBQ3RCLElBQTZCLGVBQWUsQ0FBQyxDQUFVO1FBQ3JELElBQUksQ0FBQztZQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsSUFBc0IsUUFBUSxDQUFDLENBQW1CO1FBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUFFLFFBQVEsQ0FBQztRQUMzQixJ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QUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBTXNCLGVBQWU7c0JBQTNDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUdELFFBQVE7c0JBQTdCLEtBQUs7dUJBQUMsU0FBUztnQkFNVyxTQUFTO3NCQUFuQyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGQ0lucHV0LCBJbnB1dFR5cGUsIElWYWxpZGF0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVycywgSW5wdXRTaGFyZWRNb2R1bGVzIH0gZnJvbSAnLi9pbnB1dC1zaGFyZWQubW9kdWxlJztcbmltcG9ydCB7IERhdGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dEJhc2UgfSBmcm9tICcuL2lucHV0LWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IElPcHRpb24sIElucHV0U2VydmljZSB9IGZyb20gJy4vaW5wdXQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbnB1dC1iYXNpYyxhcHAtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IElucHV0UHJvdmlkZXJzLFxuICBpbXBvcnRzOiBbRGF0ZUlucHV0Q29tcG9uZW50LCBJbnB1dFNoYXJlZE1vZHVsZXNdLFxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dEJhc2ljQ29tcG9uZW50PFxuICAgIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgICB9ID0gYW55LFxuICAgIFRDb250cm9sID0gYW55LFxuICAgIFRPcHRpb24gPSBhbnksXG4gID5cbiAgZXh0ZW5kcyBJbnB1dEJhc2U8VEZvcm1Hcm91cCwgVENvbnRyb2wsIFRPcHRpb24+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBJbnB1dCgpIGFjY2VwdDogc3RyaW5nO1xuICBASW5wdXQoKSBhdXRvY29tcGxldGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoJ2lucHV0JykgaW5wOiBGQ0lucHV0O1xuICBASW5wdXQoKSBjb250ZXh0RGF0YTogYW55O1xuICBASW5wdXQoKSBkZWNpbWFsUG9pbnRzOiBudW1iZXI7XG4gIEBJbnB1dCgpIGZpbGVzOiBGaWxlW107XG4gIEBJbnB1dCgpIGhpZGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpbnQ6IHN0cmluZyB8IG51bWJlcjtcblxuICBvdmVycmlkZSByZWFkb25seSBjbGVhck9uRGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICBASW5wdXQoKSBsYWJlbExpbms6IHN0cmluZztcbiAgQElucHV0KCkgbGJsQ2w6IHN0cmluZyA9ICcyJztcbiAgQElucHV0KCkgbGlnaHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgb3B0aW9uc0Z1bmM6ICguLi52YWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XG4gIEBJbnB1dCgpIHRoZW1lOiBJbnB1dFRoZW1lID0gMTtcbiAgQElucHV0KCkgdm1zOiBJVmFsaWRhdGlvbk1lc3NhZ2VbXTtcbiAgQElucHV0KCkgeHNtYWxsOiBib29sZWFuO1xuICBAT3V0cHV0KCkgbVNlbGVjdGVkT3B0aW9uTGFiZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgb3B0aW9ucyQgPSBuZXcgUmVwbGF5U3ViamVjdDxJT3B0aW9uW10+KCk7XG4gIHZpZXdJbml0ZWQ6IGJvb2xlYW47XG4gIGZvcmNlUGF0Y2hlZDogYm9vbGVhbjtcblxuICAvLyBsYWJlbFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgnc2V0Q3VycmVudERhdGUnKSBzZXQgX3NldEN1cnJlbnREYXRlKHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikgdGhpcy5jb250cm9sKCk/LnBhdGNoVmFsdWUobmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0pO1xuICB9XG4gIEBJbnB1dCgnb3B0aW9ucycpIHNldCBfb3B0aW9ucyh2OiBUT3B0aW9uW10gfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgdGhpcy5yYXdPcHRpb25zU2lnbmFsLnNldCh2IHx8IFtdKTtcbiAgICB0aGlzLm9wdGlvbnMkLm5leHQodGhpcy5vcHRpb25zKCkpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnbWF0U2VsZWN0VGFnJykgbWF0U2VsZWN0OiBNYXRTZWxlY3Q7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUoKSAmJiB0aGlzLmNvbnRyb2woKSAmJiB0aGlzLnR5cGVTaWduYWwoKSA9PSAnc2VsZWN0Jykge1xuICAgICAgICB0aGlzLmNvbnRyb2woKS5mb3JtYXR0ZWRWYWx1ZSA9ICg8TWF0T3B0aW9uPnRoaXMubWF0U2VsZWN0Py5zZWxlY3RlZCk/LnZpZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5tU2VsZWN0ZWRPcHRpb25MYWJlbC5lbWl0KCg8TWF0T3B0aW9uPnRoaXMubWF0U2VsZWN0Py5zZWxlY3RlZCk/LnZpZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvUGlja1ZhbHVlRmllbGQpIHtcbiAgICAgIGlmICghdGhpcy5sYWJlbFR5cGUpIHRoaXMubGFiZWxUeXBlID0gJ2NkdCc7XG4gICAgICBpZiAoIXRoaXMudmFsdWVGaWVsZCkgdGhpcy52YWx1ZUZpZWxkID0gJ2NvZGUnIGFzIGFueTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWluU2lnbmFsKCkgPT0gMCAmJiB0aGlzLm1heFNpZ25hbCgpID09IDEwMCkgdGhpcy5vVHlwZVNpZ25hbC5zZXQoJ3BlcmNlbnRhZ2UnKTtcblxuICAgIC8vIGlmICh0aGlzLnR5cGUgPT0gJ3NlbGVjdCcgfHwgdGhpcy50eXBlID09ICdhdXRvY29tcGxldGUnKVxuICAgIC8vICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAvLyAgICAgdGhpcy5sYWJlbFZhbHVlID0gdGhpcy5vcHRpb25zLmZpbmQoKHgpID0+IHgudmFsdWUgPT0gcik/LmxhYmVsO1xuICAgIC8vICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pZClcbiAgICAvLyBpZiAodGhpcy5kaXNhYmxlZCkgdGhpcy5fZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIHRoaXMudmlld0luaXRlZCA9IHRydWU7XG4gIH1cblxuICBkaXNhYmxlQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSB0aGlzLmNvbnRyb2woKSkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZFNpZ25hbCgpKSByZXR1cm47XG4gICAgY29udHJvbD8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBjaGFuZ2UoZTogeyB0YXJnZXQ6IHsgY2hlY2tlZD86IGJvb2xlYW47IHZhbHVlOiBhbnkgfSB9IHwgRXZlbnQpIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICBsZXQgdmFsO1xuICAgIGlmICh0aGlzLnR5cGVTaWduYWwoKSA9PSAnY2hlY2tib3gnKSB7XG4gICAgICB2YWwgPSBlLnRhcmdldD8uWydjaGVja2VkJ107XG4gICAgICB0aGlzLmNvbnRyb2woKS5zZXRWYWx1ZShlLnRhcmdldD8uWydjaGVja2VkJ10pO1xuICAgIH0gZWxzZSB2YWwgPSB0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKTtcbiAgICBpZiAodGhpcy50eXBlU2lnbmFsKCkgPT0gJ251bWJlcicpIHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgaWYgKHRoaXMub1R5cGVTaWduYWwoKSA9PSAncGVyY2VudGFnZScgJiYgIXRoaXMubWF4U2lnbmFsKCkpIHtcbiAgICAgICAgdGhpcy5tYXhTaWduYWwuc2V0KDEwMCk7XG4gICAgICAgIHRoaXMubWluU2lnbmFsLnNldCgwKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWwgIT0gbnVsbCAmJiB2YWwgIT0gJycpIHtcbiAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgIGlmICh0aGlzLm1heFNpZ25hbCgpICYmICt2YWwgPiArdGhpcy5tYXhTaWduYWwoKSkgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUodGhpcy5tYXhTaWduYWwoKSk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMubWluU2lnbmFsKCkgIT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMubWluU2lnbmFsKCkgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgK3ZhbCA8ICt0aGlzLm1pblNpZ25hbCgpXG4gICAgICAgIClcbiAgICAgICAgICB0aGlzLmNvbnRyb2woKS5zZXRWYWx1ZSh0aGlzLm1pblNpZ25hbCgpKTtcbiAgICAgICAgaWYgKHRoaXMuZGVjaW1hbFBvaW50cyAhPSB1bmRlZmluZWQgJiYgdGhpcy5kZWNpbWFsUG9pbnRzICE9IG51bGwpXG4gICAgICAgICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUoKygrdmFsKS50b0ZpeGVkKHRoaXMuZGVjaW1hbFBvaW50cykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5tYXhMZW5ndGggJiYgdGhpcy5jb250cm9sKCk/LnZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKVxuICAgICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUoXG4gICAgICAgIHRoaXMudHlwZVNpZ25hbCgpID09ICdudW1iZXInXG4gICAgICAgICAgPyArdGhpcy5jb250cm9sKCk/LmdldFJhd1ZhbHVlKCk/LnRvU3RyaW5nKCkuc2xpY2UoMCwgdGhpcy5tYXhMZW5ndGgpXG4gICAgICAgICAgOiB0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKT8udG9TdHJpbmcoKS5zbGljZSgwLCB0aGlzLm1heExlbmd0aCksXG4gICAgICApO1xuICAgIHRoaXMubWNoYW5nZS5lbWl0KHRoaXMuY29udHJvbCgpPy5nZXRSYXdWYWx1ZSgpKTtcbiAgICAvLyBkZWJ1Z2dlclxuICB9XG5cbiAgdXBsb2FkKGUpIHtcbiAgICB0aGlzLmZpbGVzID0gZS50YXJnZXQuZmlsZXM7XG4gICAgdGhpcy5tY2hhbmdlLmVtaXQoZSk7XG4gIH1cbn1cbnR5cGUgSW5wdXRUaGVtZSA9IDEgfCAyO1xuZXhwb3J0IHR5cGUgT3B0aW9uTGFiZWxUeXBlID1cbiAgfCAnYWNkJ1xuICB8ICdibmsnXG4gIHwgJ2NjZCdcbiAgfCAnY2QnXG4gIHwgJ2NkdCdcbiAgfCAnY2YnXG4gIHwgJ2NnJ1xuICB8ICdjbCdcbiAgfCAnY21kJ1xuICB8ICdjbidcbiAgfCAnY3QnXG4gIHwgJ2N1J1xuICB8ICdnZCdcbiAgfCAnaGEnXG4gIHwgJ2lkJ1xuICB8ICdpZidcbiAgfCAnaWZsJ1xuICB8ICdpbCdcbiAgfCAnaXQnXG4gIHwgJ21kJ1xuICB8ICduYSdcbiAgfCAncGQnXG4gIHwgJ3BlcCdcbiAgfCAncGFtJ1xuICB8ICduZidcbiAgfCAndGQnXG4gIHwgJ3RpdGxlJ1xuICB8ICd1ZCdcbiAgfCAndWYnXG4gIHwgJ3ZsJ1xuICB8ICd2dic7XG5cbmV4cG9ydCB7IElPcHRpb24gfSBmcm9tICcuL2lucHV0LnNlcnZpY2UnO1xuIiwiPCEtLSA8ZGl2PmZvcm0oKS5nZXRSYXdWYWx1ZToge3tmZn19PC9kaXY+IC0tPlxuQGlmICh2ZXJib3NlKCkpIHtcbiAgPGRpdj5kaXNhYmxlZFNpZ25hbDoge3sgZGlzYWJsZWRTaWduYWwoKSB9fTwvZGl2PlxuICA8ZGl2PnZhbGlkU2lnbmFsOiB7eyB2YWxpZFNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+aW52YWxpZFNpZ25hbDoge3sgaW52YWxpZFNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+dmFsdWVTaWduYWw6IHt7IHZhbHVlU2lnbmFsKCkgfX08L2Rpdj5cbiAgPGRpdj5oYXNWYWx1ZToge3sgaGFzVmFsdWUoKSB9fTwvZGl2PlxuICA8ZGl2PmRpcnR5U2lnbmFsOiB7eyBkaXJ0eVNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+dG91Y2hlZFNpZ25hbDoge3sgdG91Y2hlZFNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+ZXJyb3JzU2lnbmFsOiB7eyBlcnJvcnNTaWduYWxqc29uKCkgfX08L2Rpdj5cbiAgPGRpdj5wZW5kaW5nU2lnbmFsOiB7eyBwZW5kaW5nU2lnbmFsKCkgfX08L2Rpdj5cbiAgPGRpdj5yZXF1aXJlZFNpZ25hbDoge3sgcmVxdWlyZWRTaWduYWwoKSB9fTwvZGl2PlxuICA8ZGl2PnByaXN0aW5lU2lnbmFsOiB7eyBwcmlzdGluZVNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+Y29udHJvbFJlcXVpcmVkU2lnbmFsOiB7eyBjb250cm9sUmVxdWlyZWRTaWduYWwoKSB9fTwvZGl2PlxuICA8ZGl2PmlzUmVxdWlyZWRTaWduYWw6IHt7IGlzUmVxdWlyZWRTaWduYWwoKSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiXCI+b25Db250cm9sT2J0YWluZWRMaXN0IExlbmd0aDoge3sgb25Db250cm9sT2J0YWluZWRMaXN0KCkubGVuZ3RoIH19PC9kaXY+XG59XG48ZGl2XG4gIGNsYXNzPVwiICBjdXN0b20taW5wdXQgYWxpZ24taXRlbXMtY2VudGVyIHt7IHR5cGVTaWduYWwoKSB9fSBneC0xXCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtKCkgfCB0b0FueVwiXG4gIFtuZ0NsYXNzXT1cInsgJ2QtZmxleCc6ICFzdGFja2VkU2lnbmFsKCkgfVwiPlxuICBAaWYgKGNvbXB1dGVkU2hvd0xhYmVsKCkpIHtcbiAgICA8YXBwLWlucHV0LWxhYmVsXG4gICAgICBbY29sb3JlZF09XCJjb2xvcmVkU2lnbmFsKClcIlxuICAgICAgW2Zvcm1dPVwiZm9ybSgpXCJcbiAgICAgIFtoaW50XT1cImhpbnRcIlxuICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgW2ludmFsaWRDaGVja2JveF09XCJpbnZhbGlkQ2hlY2tib3hTaWduYWwoKVwiXG4gICAgICBbaXNSZXF1aXJlZF09XCJpc1JlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgW2xhYmVsXT1cImxhYmVsU2lnbmFsKClcIlxuICAgICAgW2xibENsXT1cImxibENsXCJcbiAgICAgIFtsaWdodF09XCJsaWdodFwiXG4gICAgICBbbWluaV09XCJtaW5pU2lnbmFsKClcIlxuICAgICAgW25nQ2xhc3NdPVwieyAndy0xMDAnOiBzdGFja2VkU2lnbmFsKCkgfVwiXG4gICAgICBbaW5saW5lSGludF09XCJpbmxpbmVIaW50XCJcbiAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2hvd1JlcXVpcmVkVGFnU2lnbmFsKClcIlxuICAgICAgW3Nob3dMYWJlbF09XCJzaG93TGFiZWxTaWduYWwoKVwiXG4gICAgICBbc21hbGxdPVwic21hbGxTaWduYWwoKVwiXG4gICAgICBbc3RhY2tlZF09XCJzdGFja2VkU2lnbmFsKClcIlxuICAgICAgW3RoZW1lXT1cInRoZW1lXCJcbiAgICAgIFt4c21hbGxdPVwieHNtYWxsXCI+PC9hcHAtaW5wdXQtbGFiZWw+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIge3sgaW5wdXRDb250Q2xhc3NTaWduYWwoKSB9fSBcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleCBpbnB1dC1jb250ZW50IHctMTAwXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ21zLTInOiAhc3RhY2tlZFNpZ25hbCgpLFxuICAgICAgICBzaG93VmFsaWRhdGlvbkljb246IHNob3dWYWxpZGF0aW9uU2lnbmFsKCkgfHwgc2hvd1ZhbGlkYXRpb25JY29uU2lnbmFsKCksXG4gICAgICAgIGRvbnRGb3JtYXRBc0lucHV0OiBkb250Rm9ybWF0QXNJbnB1dFNpZ25hbCgpXG4gICAgICB9XCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RhdGU+XG4gICAgICAgIDxkYXRlLWlucHV0XG4gICAgICAgICAgI2RhdGVJbnB1dFxuICAgICAgICAgIFtkZWJ1Z109XCJkZWJ1ZygpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlTaWduYWwoKVwiXG4gICAgICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgICAgIGNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgIFt0eXBlXT1cInR5cGVTaWduYWwoKVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlZCk9XCJkYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbdmFsdWVdPVwidmFsdWVTaWduYWwoKVwiXG4gICAgICAgICAgW2lucHV0Q2xhc3NdPVwiaW5wdXRDbGFzc1NpZ25hbCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRTaWduYWwoKVwiXG4gICAgICAgICAgW21heF09XCJtYXhTaWduYWwoKVwiXG4gICAgICAgICAgW21pbl09XCJtaW5TaWduYWwoKVwiXG4gICAgICAgICAgW3ZhbGlkXT1cInZhbGlkU2lnbmFsKClcIlxuICAgICAgICAgIFtpbnZhbGlkXT1cImludmFsaWRTaWduYWwoKVwiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNob3dWYWxpZGF0aW9uU2lnbmFsKClcIiAvPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIEBzd2l0Y2ggKHR5cGVTaWduYWwoKSkge1xuICAgICAgICA8IS0tIERBVEUgLS0+XG4gICAgICAgIEBjYXNlICgnZGF0ZScpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBEQVRFVElNRS1MT0NBTCAtLT5cbiAgICAgICAgQGNhc2UgKCdkYXRldGltZS1sb2NhbCcpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBDSEVDS0JPWCAtLT5cbiAgICAgICAgQGNhc2UgKCdjaGVja2JveCcpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbaWRdPVwiaWRTaWduYWwoKVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVTdHJTaWduYWwoKVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW5vZm9ybWF0XT1cImNvbXB1dGVkTm9Gb3JtYXQoKVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRlYnVnXT1cImRlYnVnKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyBpbnBDbFNpZ25hbCgpIH19IGQtaW5saW5lLWJsb2NrIGZvcm0tY29udHJvbCB3aWR0aC11bnNldFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyKCkgfX1cIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5U2lnbmFsKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJjaGVja2VkU2lnbmFsKClcIlxuICAgICAgICAgICAgW2F0dHIuaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2NoZWNrZWRib3gnKSB7XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyBpbnBDbFNpZ25hbCgpIH19IGQtaW5saW5lLWJsb2NrIGZvcm0tY29udHJvbCB3aWR0aC11bnNldFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJjaGVja2VkU2lnbmFsKClcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kZWJ1Z109XCJkZWJ1ZygpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbm9mb3JtYXRdPVwiY29tcHV0ZWROb0Zvcm1hdCgpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVNpZ25hbCgpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gRklMRSAtLT5cbiAgICAgICAgQGNhc2UgKCdmaWxlJykge1xuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImlucHV0Q2xhc3NTaWduYWwoKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcbiAgICAgICAgICAgIFthdHRyLm11bHRpcGxlXT1cIm11bHRpcGxlXCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIEZJTEUgQlVUVE9OLS0+XG4gICAgICAgIEBjYXNlICgnZmlsZUJ1dHRvbicpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzU2lnbmFsKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgICAgICAgICBbYXR0ci5tdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgICNmaWxlIC8+XG4gICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgIGNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgICAgKG1jbGljayk9XCJmaWxlLmNsaWNrKClcIlxuICAgICAgICAgICAgaWNvbj1cInVwbG9hZFwiXG4gICAgICAgICAgICBbdHlwZV09XCJmaWxlcyA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgIHRleHQ9XCJ7eyBwbGFjZWhvbGRlcigpIHx8IGxhYmVsU2lnbmFsKCkgfHwgJ1VwbG9hZCcgfX1cIj48L2FwcC1idG4+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBTRUxFQ1QgLS0+XG4gICAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xuICAgICAgICAgIDwhLS0gW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAtLT5cbiAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgI21hdFNlbGVjdFRhZ1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlcigpIH19XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IG5hbWVTdHJTaWduYWwoKSB9fVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRTaWduYWwoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInt7IGNscygpIH19IHt7IGlucHV0Q2xhc3NTaWduYWwoKSB9fVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRTaWduYWwoKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZSh7IHRhcmdldDogJGV2ZW50IH0pXCI+XG4gICAgICAgICAgICBAaWYgKHNob3dFbXB0eU9wdGlvblNpZ25hbCgpKSB7XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHNlbGVjdGVkIFt2YWx1ZV09XCJudWxsXCIgY2xhc3M9XCJlbXB0eS1vcHRpb25cIj5cbiAgICAgICAgICAgICAgICB7eyBwbGFjZWhvbGRlcigpIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygb3B0aW9ucygpOyB0cmFjayBpUy50cmFja0J5VmFsdWUoJGluZGV4LCBpdGVtKSkge1xuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIChvblNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RlZE9wdGlvbihpdGVtKVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiMTAwMFwiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cImVsZS5zY3JvbGxXaWR0aCA8PSBlbGUub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgI2VsZT5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGU6IHRyYW5zbGF0ZU9wdGlvbnMoKSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBURVhUQVJFQSAtLT5cbiAgICAgICAgQGNhc2UgKCd0ZXh0YXJlYScpIHtcbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVN0clNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzU2lnbmFsKClcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1ub2Zvcm1hdF09XCJjb21wdXRlZE5vRm9ybWF0KClcIlxuICAgICAgICAgICAgW3Jvd3NdPVwidGV4dGFyZWFSb3dzU2lnbmFsKClcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5U2lnbmFsKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiPjwvdGV4dGFyZWE+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBSYWRpbyAtLT5cbiAgICAgICAgQGNhc2UgKCdyYWRpbycpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVTdHJTaWduYWwoKVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRTaWduYWwoKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlTaWduYWwoKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbm9mb3JtYXRdPVwiY29tcHV0ZWROb0Zvcm1hdCgpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVNpZ25hbCgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIFZpZXdlciAtLT5cbiAgICAgICAgQGNhc2UgKCd2aWV3ZXInKSB7XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbaWRdPVwiaWRTaWduYWwoKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyKCkgfX1cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1ub2Zvcm1hdF09XCJjb21wdXRlZE5vRm9ybWF0KClcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImlucHV0Q2xhc3NTaWduYWwoKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVTaWduYWwoKVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBQQVNTV09SRCAtLT5cbiAgICAgICAgQGNhc2UgKCdwYXNzd29yZCcpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ7eyBzaG93UGFzc3dvcmRTaWduYWwoKSA/ICd0ZXh0JyA6ICdwYXNzd29yZCcgfX1cIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJuYW1lU3RyU2lnbmFsKClcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlcigpIH19XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbm9mb3JtYXRdPVwiY29tcHV0ZWROb0Zvcm1hdCgpXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzU2lnbmFsKClcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgICAgICAgW21heF09XCJtYXhTaWduYWwoKVwiXG4gICAgICAgICAgICBbbWluXT1cIm1pblNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVNpZ25hbCgpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlU2lnbmFsKClcIiAvPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicGFzc3dvcmQtaWNvbnMgcG9pbnRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd1Bhc3N3b3JkU2lnbmFsLnNldCghc2hvd1Bhc3N3b3JkU2lnbmFsKCkpXCI+XG4gICAgICAgICAgICBAaWYgKHNob3dQYXNzd29yZFNpZ25hbCgpKSB7XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXllLXNsYXNoXCI+PC9pPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXllXCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gREVGQVVMVCAtLT5cbiAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzU2lnbmFsKClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaGFzLXByZWZpeCc6ICEhcHJlZml4U2lnbmFsKCksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiByZWFkb25seVNpZ25hbCgpIHx8IGRpc2FibGVkU2lnbmFsKClcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIEBpZiAocHJlZml4U2lnbmFsKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZWZpeC12YWxcIiAjcHJlZml4VmFsPlxuICAgICAgICAgICAgICAgIHt7IHByZWZpeFNpZ25hbCgpIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFt0eXBlXT1cInR5cGVTaWduYWwoKVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVN0clNpZ25hbCgpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlcigpIH19XCJcbiAgICAgICAgICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJlbGUuaW5uZXJUZXh0XCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJlbGUuc2Nyb2xsV2lkdGggPD0gZWxlLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgICAgI2VsZVxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWRlYnVnXT1cImRlYnVnKClcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLW5vZm9ybWF0XT1cImNvbXB1dGVkTm9Gb3JtYXQoKVwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtb3R5cGVdPVwib1R5cGVTaWduYWwoKVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFNpZ25hbCgpXCJcbiAgICAgICAgICAgICAgW21heF09XCJtYXhTaWduYWwoKVwiXG4gICAgICAgICAgICAgIFttaW5dPVwibWluU2lnbmFsKClcIlxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlTaWduYWwoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBpZiAoZGlydHlTaWduYWwoKSAmJiAoc2hvd1ZhbGlkYXRpb25TaWduYWwoKSB8fCBzaG93VmFsaWRhdGlvbkljb25TaWduYWwoKSkpIHtcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHZhbGlkOiB2YWxpZFNpZ25hbCgpIH1cIiBjbGFzcz1cInZhbGlkaXR5LWljb25cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHBlbmRpbmc6IHBlbmRpbmdTaWduYWwoKSB9XCIgY2xhc3M9XCJ2YWxpZGl0eS1pY29uXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgaW52YWxpZDogaW52YWxpZFNpZ25hbCgpIH1cIiBjbGFzcz1cInZhbGlkaXR5LWljb25cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDwhLS0gPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaW5wdXRcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInt7aW5wLnR5cGV9fVwiIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJpbnAuZm9ybUNvbnRyb2xcIj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBpbnAudm1zXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbGlkYXRpb258dmFsaWRhdG9yOmlucC5mb3JtQ29udHJvbDppbnAuZm9ybUNvbnRyb2w/LnZhbHVlXCI+XG4gICAgICAgICAgICB7e3ZhbGlkYXRpb24ubWVzc2FnZXx2YWxpZGF0aW9uTXNnOmlucC5wcmVmaXg6aW5wLnN1ZmZpeH19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG4gICAgPC9kaXY+XG4gICAgQGlmIChlbmRMYWJlbFNpZ25hbCgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLWF1dG8gdGV4dC1wcmltYXJ5IG1zLTJcIlxuICAgICAgICAoY2xpY2spPVwiaVMubG9nKGZvcm0oKSlcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJlbmRMYWJlbFRvb2x0aXBTaWduYWwoKSB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgIHt7IGVuZExhYmVsU2lnbmFsKCkgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuQGlmIChzaG93VmFsaWRhdGlvbk1zZ1NpZ25hbCgpKSB7XG4gIDxhcHAtdmFsaWRhdGlvbi1tZXNzYWdlXG4gICAgW2xhYmVsXT1cImxhYmVsU2lnbmFsKClcIlxuICAgIFttaW5MZW5ndGhdPVwibWluTGVuZ3RoXCJcbiAgICBbbWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgW2NvbnRyb2xdPVwiY29udHJvbCgpXCIgLz5cbn1cbiJdfQ==
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtYmFzaWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFHVCxNQUFNLEVBRU4sS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVduRCxNQUFNLE9BQU8sbUJBT1gsU0FBUSxTQUF3QztJQTJCaEQsc0JBQXNCO0lBQ3RCLElBQTZCLGVBQWUsQ0FBQyxDQUFVO1FBQ3JELElBQUksQ0FBQztZQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsSUFBc0IsUUFBUSxDQUFDLENBQW1CO1FBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUFFLFFBQVEsQ0FBQztRQUMzQixJ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RyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBTXNCLGVBQWU7c0JBQTNDLEtBQUs7dUJBQUMsZ0JBQWdCO2dCQUdELFFBQVE7c0JBQTdCLEtBQUs7dUJBQUMsU0FBUztnQkFNVyxTQUFTO3NCQUFuQyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGQ0lucHV0LCBJbnB1dFR5cGUsIElWYWxpZGF0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVycywgSW5wdXRTaGFyZWRNb2R1bGVzIH0gZnJvbSAnLi9pbnB1dC1zaGFyZWQubW9kdWxlJztcbmltcG9ydCB7IERhdGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dEJhc2UgfSBmcm9tICcuL2lucHV0LWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IElPcHRpb24sIElucHV0U2VydmljZSB9IGZyb20gJy4vaW5wdXQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbnB1dC1iYXNpYyxhcHAtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IElucHV0UHJvdmlkZXJzLFxuICBpbXBvcnRzOiBbRGF0ZUlucHV0Q29tcG9uZW50LCBJbnB1dFNoYXJlZE1vZHVsZXNdLFxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dEJhc2ljQ29tcG9uZW50PFxuICAgIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgICB9ID0gYW55LFxuICAgIFRDb250cm9sID0gYW55LFxuICAgIFRPcHRpb24gPSBhbnksXG4gID5cbiAgZXh0ZW5kcyBJbnB1dEJhc2U8VEZvcm1Hcm91cCwgVENvbnRyb2wsIFRPcHRpb24+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBJbnB1dCgpIGFjY2VwdDogc3RyaW5nO1xuICBASW5wdXQoKSBhdXRvY29tcGxldGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoJ2lucHV0JykgaW5wOiBGQ0lucHV0O1xuICBASW5wdXQoKSBjb250ZXh0RGF0YTogYW55O1xuICBASW5wdXQoKSBkZWNpbWFsUG9pbnRzOiBudW1iZXI7XG4gIEBJbnB1dCgpIGZpbGVzOiBGaWxlW107XG4gIEBJbnB1dCgpIGhpZGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpbnQ6IHN0cmluZyB8IG51bWJlcjtcblxuICBvdmVycmlkZSByZWFkb25seSBjbGVhck9uRGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICBASW5wdXQoKSBsYWJlbExpbms6IHN0cmluZztcbiAgQElucHV0KCkgbGJsQ2w6IHN0cmluZyA9ICcyJztcbiAgQElucHV0KCkgbGlnaHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBtdWx0aXBsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgb3B0aW9uc0Z1bmM6ICguLi52YWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XG4gIEBJbnB1dCgpIHRoZW1lOiBJbnB1dFRoZW1lID0gMTtcbiAgQElucHV0KCkgdm1zOiBJVmFsaWRhdGlvbk1lc3NhZ2VbXTtcbiAgQElucHV0KCkgeHNtYWxsOiBib29sZWFuO1xuICBAT3V0cHV0KCkgbVNlbGVjdGVkT3B0aW9uTGFiZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgb3B0aW9ucyQgPSBuZXcgUmVwbGF5U3ViamVjdDxJT3B0aW9uW10+KCk7XG4gIHZpZXdJbml0ZWQ6IGJvb2xlYW47XG4gIGZvcmNlUGF0Y2hlZDogYm9vbGVhbjtcblxuICAvLyBsYWJlbFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgnc2V0Q3VycmVudERhdGUnKSBzZXQgX3NldEN1cnJlbnREYXRlKHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodikgdGhpcy5jb250cm9sKCk/LnBhdGNoVmFsdWUobmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF0pO1xuICB9XG4gIEBJbnB1dCgnb3B0aW9ucycpIHNldCBfb3B0aW9ucyh2OiBUT3B0aW9uW10gfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuZGVidWcoKSkgZGVidWdnZXI7XG4gICAgdGhpcy5yYXdPcHRpb25zU2lnbmFsLnNldCh2IHx8IFtdKTtcbiAgICB0aGlzLm9wdGlvbnMkLm5leHQodGhpcy5vcHRpb25zKCkpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnbWF0U2VsZWN0VGFnJykgbWF0U2VsZWN0OiBNYXRTZWxlY3Q7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2V0Rm9ybWF0dGVkVmFsdWUoKSAmJiB0aGlzLmNvbnRyb2woKSAmJiB0aGlzLnR5cGVTaWduYWwoKSA9PSAnc2VsZWN0Jykge1xuICAgICAgICB0aGlzLmNvbnRyb2woKS5mb3JtYXR0ZWRWYWx1ZSA9ICg8TWF0T3B0aW9uPnRoaXMubWF0U2VsZWN0Py5zZWxlY3RlZCk/LnZpZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5tU2VsZWN0ZWRPcHRpb25MYWJlbC5lbWl0KCg8TWF0T3B0aW9uPnRoaXMubWF0U2VsZWN0Py5zZWxlY3RlZCk/LnZpZXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvUGlja1ZhbHVlRmllbGQpIHtcbiAgICAgIGlmICghdGhpcy5sYWJlbFR5cGUpIHRoaXMubGFiZWxUeXBlID0gJ2NkdCc7XG4gICAgICBpZiAoIXRoaXMudmFsdWVGaWVsZCkgdGhpcy52YWx1ZUZpZWxkID0gJ2NvZGUnIGFzIGFueTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWluU2lnbmFsKCkgPT0gMCAmJiB0aGlzLm1heFNpZ25hbCgpID09IDEwMCkgdGhpcy5vVHlwZVNpZ25hbC5zZXQoJ3BlcmNlbnRhZ2UnKTtcblxuICAgIC8vIGlmICh0aGlzLnR5cGUgPT0gJ3NlbGVjdCcgfHwgdGhpcy50eXBlID09ICdhdXRvY29tcGxldGUnKVxuICAgIC8vICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAvLyAgICAgdGhpcy5sYWJlbFZhbHVlID0gdGhpcy5vcHRpb25zLmZpbmQoKHgpID0+IHgudmFsdWUgPT0gcik/LmxhYmVsO1xuICAgIC8vICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pZClcbiAgICAvLyBpZiAodGhpcy5kaXNhYmxlZCkgdGhpcy5fZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIHRoaXMudmlld0luaXRlZCA9IHRydWU7XG4gIH1cblxuICBkaXNhYmxlQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgPSB0aGlzLmNvbnRyb2woKSkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZFNpZ25hbCgpKSByZXR1cm47XG4gICAgY29udHJvbD8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gIH1cblxuICBjaGFuZ2UoZTogeyB0YXJnZXQ6IHsgY2hlY2tlZD86IGJvb2xlYW47IHZhbHVlOiBhbnkgfSB9IHwgRXZlbnQpIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAodGhpcy5kZWJ1ZygpKSBkZWJ1Z2dlcjtcbiAgICBsZXQgdmFsO1xuICAgIGlmICh0aGlzLnR5cGVTaWduYWwoKSA9PSAnY2hlY2tib3gnKSB7XG4gICAgICB2YWwgPSBlLnRhcmdldD8uWydjaGVja2VkJ107XG4gICAgICB0aGlzLmNvbnRyb2woKS5zZXRWYWx1ZShlLnRhcmdldD8uWydjaGVja2VkJ10pO1xuICAgIH0gZWxzZSB2YWwgPSB0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKTtcbiAgICBpZiAodGhpcy50eXBlU2lnbmFsKCkgPT0gJ251bWJlcicpIHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgaWYgKHRoaXMub1R5cGVTaWduYWwoKSA9PSAncGVyY2VudGFnZScgJiYgIXRoaXMubWF4U2lnbmFsKCkpIHtcbiAgICAgICAgdGhpcy5tYXhTaWduYWwuc2V0KDEwMCk7XG4gICAgICAgIHRoaXMubWluU2lnbmFsLnNldCgwKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWwgIT0gbnVsbCAmJiB2YWwgIT0gJycpIHtcbiAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgIGlmICh0aGlzLm1heFNpZ25hbCgpICYmICt2YWwgPiArdGhpcy5tYXhTaWduYWwoKSkgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUodGhpcy5tYXhTaWduYWwoKSk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMubWluU2lnbmFsKCkgIT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMubWluU2lnbmFsKCkgIT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgK3ZhbCA8ICt0aGlzLm1pblNpZ25hbCgpXG4gICAgICAgIClcbiAgICAgICAgICB0aGlzLmNvbnRyb2woKS5zZXRWYWx1ZSh0aGlzLm1pblNpZ25hbCgpKTtcbiAgICAgICAgaWYgKHRoaXMuZGVjaW1hbFBvaW50cyAhPSB1bmRlZmluZWQgJiYgdGhpcy5kZWNpbWFsUG9pbnRzICE9IG51bGwpXG4gICAgICAgICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUoKygrdmFsKS50b0ZpeGVkKHRoaXMuZGVjaW1hbFBvaW50cykpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5tYXhMZW5ndGggJiYgdGhpcy5jb250cm9sKCk/LnZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKVxuICAgICAgdGhpcy5jb250cm9sKCkuc2V0VmFsdWUoXG4gICAgICAgIHRoaXMudHlwZVNpZ25hbCgpID09ICdudW1iZXInXG4gICAgICAgICAgPyArdGhpcy5jb250cm9sKCk/LmdldFJhd1ZhbHVlKCk/LnRvU3RyaW5nKCkuc2xpY2UoMCwgdGhpcy5tYXhMZW5ndGgpXG4gICAgICAgICAgOiB0aGlzLmNvbnRyb2woKT8uZ2V0UmF3VmFsdWUoKT8udG9TdHJpbmcoKS5zbGljZSgwLCB0aGlzLm1heExlbmd0aCksXG4gICAgICApO1xuICAgIHRoaXMubWNoYW5nZS5lbWl0KHRoaXMuY29udHJvbCgpPy5nZXRSYXdWYWx1ZSgpKTtcbiAgICAvLyBkZWJ1Z2dlclxuICB9XG5cbiAgdXBsb2FkKGUpIHtcbiAgICB0aGlzLmZpbGVzID0gZS50YXJnZXQuZmlsZXM7XG4gICAgdGhpcy5tY2hhbmdlLmVtaXQoZSk7XG4gIH1cbn1cbnR5cGUgSW5wdXRUaGVtZSA9IDEgfCAyO1xuZXhwb3J0IHR5cGUgT3B0aW9uTGFiZWxUeXBlID1cbiAgfCAnYWNkJ1xuICB8ICdibmsnXG4gIHwgJ2NjZCdcbiAgfCAnY2QnXG4gIHwgJ2NkdCdcbiAgfCAnY2YnXG4gIHwgJ2NnJ1xuICB8ICdjbCdcbiAgfCAnY21kJ1xuICB8ICdjbidcbiAgfCAnY3QnXG4gIHwgJ2N1J1xuICB8ICdnZCdcbiAgfCAnaGEnXG4gIHwgJ2lkJ1xuICB8ICdpZidcbiAgfCAnaWZsJ1xuICB8ICdpbCdcbiAgfCAnaXQnXG4gIHwgJ21kJ1xuICB8ICduYSdcbiAgfCAncGQnXG4gIHwgJ3BlcCdcbiAgfCAncGFtJ1xuICB8ICduZidcbiAgfCAndGQnXG4gIHwgJ3RpdGxlJ1xuICB8ICd1ZCdcbiAgfCAndWYnXG4gIHwgJ3ZsJ1xuICB8ICd2dic7XG5cbmV4cG9ydCB7IElPcHRpb24gfSBmcm9tICcuL2lucHV0LnNlcnZpY2UnO1xuIiwiPCEtLSA8ZGl2PmZvcm0oKS5nZXRSYXdWYWx1ZToge3tmZn19PC9kaXY+IC0tPlxuQGlmICh2ZXJib3NlKCkpIHtcbiAgPGRpdj5kaXNhYmxlZFNpZ25hbDoge3sgZGlzYWJsZWRTaWduYWwoKSB9fTwvZGl2PlxuICA8ZGl2PnZhbGlkU2lnbmFsOiB7eyB2YWxpZFNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+aW52YWxpZFNpZ25hbDoge3sgaW52YWxpZFNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+dmFsdWVTaWduYWw6IHt7IHZhbHVlU2lnbmFsKCkgfX08L2Rpdj5cbiAgPGRpdj5oYXNWYWx1ZToge3sgaGFzVmFsdWUoKSB9fTwvZGl2PlxuICA8ZGl2PmRpcnR5U2lnbmFsOiB7eyBkaXJ0eVNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+dG91Y2hlZFNpZ25hbDoge3sgdG91Y2hlZFNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+ZXJyb3JzU2lnbmFsOiB7eyBlcnJvcnNTaWduYWxqc29uKCkgfX08L2Rpdj5cbiAgPGRpdj5wZW5kaW5nU2lnbmFsOiB7eyBwZW5kaW5nU2lnbmFsKCkgfX08L2Rpdj5cbiAgPGRpdj5yZXF1aXJlZFNpZ25hbDoge3sgcmVxdWlyZWRTaWduYWwoKSB9fTwvZGl2PlxuICA8ZGl2PnByaXN0aW5lU2lnbmFsOiB7eyBwcmlzdGluZVNpZ25hbCgpIH19PC9kaXY+XG4gIDxkaXY+Y29udHJvbFJlcXVpcmVkU2lnbmFsOiB7eyBjb250cm9sUmVxdWlyZWRTaWduYWwoKSB9fTwvZGl2PlxuICA8ZGl2PmlzUmVxdWlyZWRTaWduYWw6IHt7IGlzUmVxdWlyZWRTaWduYWwoKSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiXCI+b25Db250cm9sT2J0YWluZWRMaXN0IExlbmd0aDoge3sgb25Db250cm9sT2J0YWluZWRMaXN0KCkubGVuZ3RoIH19PC9kaXY+XG59XG48ZGl2XG4gIGNsYXNzPVwiICBjdXN0b20taW5wdXQgYWxpZ24taXRlbXMtY2VudGVyIHt7IHR5cGVTaWduYWwoKSB9fSBneC0xXCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtKCkgfCB0b0FueVwiXG4gIFtuZ0NsYXNzXT1cInsgJ2QtZmxleCc6ICFzdGFja2VkU2lnbmFsKCkgfVwiPlxuICBAaWYgKGNvbXB1dGVkU2hvd0xhYmVsKCkpIHtcbiAgICA8YXBwLWlucHV0LWxhYmVsXG4gICAgICBbY29sb3JlZF09XCJjb2xvcmVkU2lnbmFsKClcIlxuICAgICAgW2Zvcm1dPVwiZm9ybSgpXCJcbiAgICAgIFtoaW50XT1cImhpbnRcIlxuICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgW2ludmFsaWRDaGVja2JveF09XCJpbnZhbGlkQ2hlY2tib3hTaWduYWwoKVwiXG4gICAgICBbaXNSZXF1aXJlZF09XCJpc1JlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgW2xhYmVsXT1cImxhYmVsU2lnbmFsKClcIlxuICAgICAgW2xibENsXT1cImxibENsXCJcbiAgICAgIFtsaWdodF09XCJsaWdodFwiXG4gICAgICBbbWluaV09XCJtaW5pU2lnbmFsKClcIlxuICAgICAgW25nQ2xhc3NdPVwieyAndy0xMDAnOiBzdGFja2VkU2lnbmFsKCkgfVwiXG4gICAgICBbaW5saW5lSGludF09XCJpbmxpbmVIaW50XCJcbiAgICAgIFtzaG93UmVxdWlyZWRUYWddPVwic2hvd1JlcXVpcmVkVGFnU2lnbmFsKClcIlxuICAgICAgW3Nob3dMYWJlbF09XCJzaG93TGFiZWxTaWduYWwoKVwiXG4gICAgICBbc21hbGxdPVwic21hbGxTaWduYWwoKVwiXG4gICAgICBbc3RhY2tlZF09XCJzdGFja2VkU2lnbmFsKClcIlxuICAgICAgW3RoZW1lXT1cInRoZW1lXCJcbiAgICAgIFt4c21hbGxdPVwieHNtYWxsXCI+PC9hcHAtaW5wdXQtbGFiZWw+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIge3sgaW5wdXRDb250Q2xhc3NTaWduYWwoKSB9fSBcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleCBpbnB1dC1jb250ZW50IHctMTAwXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ21zLTInOiAhc3RhY2tlZFNpZ25hbCgpLFxuICAgICAgICBzaG93VmFsaWRhdGlvbkljb246IHNob3dWYWxpZGF0aW9uU2lnbmFsKCkgfHwgc2hvd1ZhbGlkYXRpb25JY29uU2lnbmFsKCksXG4gICAgICAgIGRvbnRGb3JtYXRBc0lucHV0OiBkb250Rm9ybWF0QXNJbnB1dFNpZ25hbCgpXG4gICAgICB9XCI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RhdGU+XG4gICAgICAgIDxkYXRlLWlucHV0XG4gICAgICAgICAgI2RhdGVJbnB1dFxuICAgICAgICAgIFtkZWJ1Z109XCJkZWJ1ZygpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlTaWduYWwoKVwiXG4gICAgICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgICAgIGNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgIFt0eXBlXT1cInR5cGVTaWduYWwoKVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlZCk9XCJkYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbdmFsdWVdPVwidmFsdWVTaWduYWwoKVwiXG4gICAgICAgICAgW2lucHV0Q2xhc3NdPVwiaW5wdXRDbGFzc1NpZ25hbCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRTaWduYWwoKVwiXG4gICAgICAgICAgW21heF09XCJtYXhTaWduYWwoKVwiXG4gICAgICAgICAgW21pbl09XCJtaW5TaWduYWwoKVwiXG4gICAgICAgICAgW3ZhbGlkXT1cInZhbGlkU2lnbmFsKClcIlxuICAgICAgICAgIFtpbnZhbGlkXT1cImludmFsaWRTaWduYWwoKVwiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNob3dWYWxpZGF0aW9uU2lnbmFsKClcIiAvPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIEBzd2l0Y2ggKHR5cGVTaWduYWwoKSkge1xuICAgICAgICA8IS0tIERBVEUgLS0+XG4gICAgICAgIEBjYXNlICgnZGF0ZScpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBEQVRFVElNRS1MT0NBTCAtLT5cbiAgICAgICAgQGNhc2UgKCdkYXRldGltZS1sb2NhbCcpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBDSEVDS0JPWCAtLT5cbiAgICAgICAgQGNhc2UgKCdjaGVja2JveCcpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbaWRdPVwiaWRTaWduYWwoKVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVTdHJTaWduYWwoKVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW5vZm9ybWF0XT1cImNvbXB1dGVkTm9Gb3JtYXQoKVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRlYnVnXT1cImRlYnVnKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyBpbnBDbFNpZ25hbCgpIH19IGQtaW5saW5lLWJsb2NrIGZvcm0tY29udHJvbCB3aWR0aC11bnNldFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyKCkgfX1cIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5U2lnbmFsKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJjaGVja2VkU2lnbmFsKClcIlxuICAgICAgICAgICAgW2F0dHIuaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2NoZWNrZWRib3gnKSB7XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyBpbnBDbFNpZ25hbCgpIH19IGQtaW5saW5lLWJsb2NrIGZvcm0tY29udHJvbCB3aWR0aC11bnNldFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJjaGVja2VkU2lnbmFsKClcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kZWJ1Z109XCJkZWJ1ZygpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbm9mb3JtYXRdPVwiY29tcHV0ZWROb0Zvcm1hdCgpXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVNpZ25hbCgpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gRklMRSAtLT5cbiAgICAgICAgQGNhc2UgKCdmaWxlJykge1xuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImlucHV0Q2xhc3NTaWduYWwoKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcbiAgICAgICAgICAgIFthdHRyLm11bHRpcGxlXT1cIm11bHRpcGxlXCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIEZJTEUgQlVUVE9OLS0+XG4gICAgICAgIEBjYXNlICgnZmlsZUJ1dHRvbicpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzU2lnbmFsKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbYWNjZXB0XT1cImFjY2VwdFwiXG4gICAgICAgICAgICBbYXR0ci5tdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgICNmaWxlIC8+XG4gICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgIGNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgICAgKG1jbGljayk9XCJmaWxlLmNsaWNrKClcIlxuICAgICAgICAgICAgaWNvbj1cInVwbG9hZFwiXG4gICAgICAgICAgICBbdHlwZV09XCJmaWxlcyA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgIHRleHQ9XCJ7eyBwbGFjZWhvbGRlcigpIHx8IGxhYmVsU2lnbmFsKCkgfHwgJ1VwbG9hZCcgfX1cIj48L2FwcC1idG4+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBTRUxFQ1QgLS0+XG4gICAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xuICAgICAgICAgIDwhLS0gW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAtLT5cbiAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgI21hdFNlbGVjdFRhZ1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlcigpIH19XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IG5hbWVTdHJTaWduYWwoKSB9fVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRTaWduYWwoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInt7IGNscygpIH19IHt7IGlucHV0Q2xhc3NTaWduYWwoKSB9fVwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRTaWduYWwoKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImNoYW5nZSh7IHRhcmdldDogJGV2ZW50IH0pXCI+XG4gICAgICAgICAgICBAaWYgKHNob3dFbXB0eU9wdGlvblNpZ25hbCgpKSB7XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHNlbGVjdGVkIFt2YWx1ZV09XCJudWxsXCIgY2xhc3M9XCJlbXB0eS1vcHRpb25cIj5cbiAgICAgICAgICAgICAgICB7eyBwbGFjZWhvbGRlcigpIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygb3B0aW9ucygpOyB0cmFjayBpUy50cmFja0J5VmFsdWUoJGluZGV4LCBpdGVtKSkge1xuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaXRlbS52YWx1ZVwiIChvblNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RlZE9wdGlvbihpdGVtKVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiMTAwMFwiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cImVsZS5zY3JvbGxXaWR0aCA8PSBlbGUub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgI2VsZT5cbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGU6IHRyYW5zbGF0ZU9wdGlvbnMoKSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBURVhUQVJFQSAtLT5cbiAgICAgICAgQGNhc2UgKCd0ZXh0YXJlYScpIHtcbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVN0clNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzU2lnbmFsKClcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1ub2Zvcm1hdF09XCJjb21wdXRlZE5vRm9ybWF0KClcIlxuICAgICAgICAgICAgW3Jvd3NdPVwidGV4dGFyZWFSb3dzU2lnbmFsKClcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5U2lnbmFsKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiPjwvdGV4dGFyZWE+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBSYWRpbyAtLT5cbiAgICAgICAgQGNhc2UgKCdyYWRpbycpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVTdHJTaWduYWwoKVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRTaWduYWwoKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlTaWduYWwoKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbm9mb3JtYXRdPVwiY29tcHV0ZWROb0Zvcm1hdCgpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVNpZ25hbCgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIFZpZXdlciAtLT5cbiAgICAgICAgQGNhc2UgKCd2aWV3ZXInKSB7XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbaWRdPVwiaWRTaWduYWwoKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyKCkgfX1cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1ub2Zvcm1hdF09XCJjb21wdXRlZE5vRm9ybWF0KClcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImlucHV0Q2xhc3NTaWduYWwoKVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVTaWduYWwoKVwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBQQVNTV09SRCAtLT5cbiAgICAgICAgQGNhc2UgKCdwYXNzd29yZCcpIHtcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ7eyBzaG93UGFzc3dvcmRTaWduYWwoKSA/ICd0ZXh0JyA6ICdwYXNzd29yZCcgfX1cIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJuYW1lU3RyU2lnbmFsKClcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlcigpIH19XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbm9mb3JtYXRdPVwiY29tcHV0ZWROb0Zvcm1hdCgpXCJcbiAgICAgICAgICAgIFtpZF09XCJpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzU2lnbmFsKClcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkU2lnbmFsKClcIlxuICAgICAgICAgICAgW21heF09XCJtYXhTaWduYWwoKVwiXG4gICAgICAgICAgICBbbWluXT1cIm1pblNpZ25hbCgpXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVNpZ25hbCgpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlU2lnbmFsKClcIiAvPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicGFzc3dvcmQtaWNvbnMgcG9pbnRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd1Bhc3N3b3JkU2lnbmFsLnNldCghc2hvd1Bhc3N3b3JkU2lnbmFsKCkpXCI+XG4gICAgICAgICAgICBAaWYgKHNob3dQYXNzd29yZFNpZ25hbCgpKSB7XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXllLXNsYXNoXCI+PC9pPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXllXCI+PC9pPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gREVGQVVMVCAtLT5cbiAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtjbGFzc109XCJpbnB1dENsYXNzU2lnbmFsKClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaGFzLXByZWZpeCc6ICEhcHJlZml4U2lnbmFsKCksXG4gICAgICAgICAgICAgIGRpc2FibGVkOiByZWFkb25seVNpZ25hbCgpIHx8IGRpc2FibGVkU2lnbmFsKClcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIEBpZiAocHJlZml4U2lnbmFsKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZWZpeC12YWxcIiAjcHJlZml4VmFsPlxuICAgICAgICAgICAgICAgIHt7IHByZWZpeFNpZ25hbCgpIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIFt0eXBlXT1cInR5cGVTaWduYWwoKVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVN0clNpZ25hbCgpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlcigpIH19XCJcbiAgICAgICAgICAgICAgW2lkXT1cImlkU2lnbmFsKClcIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJlbGUuaW5uZXJUZXh0XCJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCJlbGUuc2Nyb2xsV2lkdGggPD0gZWxlLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgICAgI2VsZVxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWRlYnVnXT1cImRlYnVnKClcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLW5vZm9ybWF0XT1cImNvbXB1dGVkTm9Gb3JtYXQoKVwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtb3R5cGVdPVwib1R5cGVTaWduYWwoKVwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFNpZ25hbCgpXCJcbiAgICAgICAgICAgICAgW21heF09XCJtYXhTaWduYWwoKVwiXG4gICAgICAgICAgICAgIFttaW5dPVwibWluU2lnbmFsKClcIlxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlTaWduYWwoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBpZiAoZGlydHlTaWduYWwoKSAmJiAoc2hvd1ZhbGlkYXRpb25TaWduYWwoKSB8fCBzaG93VmFsaWRhdGlvbkljb25TaWduYWwoKSkpIHtcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHZhbGlkOiB2YWxpZFNpZ25hbCgpIH1cIiBjbGFzcz1cInZhbGlkaXR5LWljb25cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHBlbmRpbmc6IHBlbmRpbmdTaWduYWwoKSB9XCIgY2xhc3M9XCJ2YWxpZGl0eS1pY29uXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW5cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgaW52YWxpZDogaW52YWxpZFNpZ25hbCgpIH1cIiBjbGFzcz1cInZhbGlkaXR5LWljb25cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDwhLS0gPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaW5wdXRcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInt7aW5wLnR5cGV9fVwiIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJpbnAuZm9ybUNvbnRyb2xcIj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiBpbnAudm1zXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbGlkYXRpb258dmFsaWRhdG9yOmlucC5mb3JtQ29udHJvbDppbnAuZm9ybUNvbnRyb2w/LnZhbHVlXCI+XG4gICAgICAgICAgICB7e3ZhbGlkYXRpb24ubWVzc2FnZXx2YWxpZGF0aW9uTXNnOmlucC5wcmVmaXg6aW5wLnN1ZmZpeH19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG4gICAgPC9kaXY+XG4gICAgQGlmIChlbmRMYWJlbFNpZ25hbCgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLWF1dG8gdGV4dC1wcmltYXJ5IG1zLTJcIlxuICAgICAgICAoY2xpY2spPVwiaVMubG9nKGZvcm0oKSlcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCJlbmRMYWJlbFRvb2x0aXBTaWduYWwoKSB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jXCI+XG4gICAgICAgIHt7IGVuZExhYmVsU2lnbmFsKCkgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuQGlmIChzaG93VmFsaWRhdGlvbk1zZ1NpZ25hbCgpKSB7XG4gIDxhcHAtdmFsaWRhdGlvbi1tZXNzYWdlXG4gICAgW2xhYmVsXT1cImxhYmVsU2lnbmFsKClcIlxuICAgIFttaW5MZW5ndGhdPVwibWluTGVuZ3RoXCJcbiAgICBbbWF4TGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgW2NvbnRyb2xdPVwiY29udHJvbCgpXCIgLz5cbn1cbiJdfQ==