@bnsights/bbsf-controls 1.0.86 → 1.0.87
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.
- package/README.md +5 -0
- package/bnsights-bbsf-controls-1.0.87.tgz +0 -0
- package/bnsights-bbsf-controls.d.ts +1 -1
- package/esm2020/bnsights-bbsf-controls.mjs +5 -0
- package/esm2020/lib/Shared/Directives/template-name.directive.mjs +18 -0
- package/{esm2015/lib/Shared/Enums/CalendarView.js → esm2020/lib/Shared/Enums/CalendarView.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/ControlLayout.js → esm2020/lib/Shared/Enums/ControlLayout.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Countries.js → esm2020/lib/Shared/Enums/Countries.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Enums.js → esm2020/lib/Shared/Enums/Enums.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/FileType.js → esm2020/lib/Shared/Enums/FileType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/FilterType.js → esm2020/lib/Shared/Enums/FilterType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/FontSize.js → esm2020/lib/Shared/Enums/FontSize.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/ForceDirection.js → esm2020/lib/Shared/Enums/ForceDirection.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/IconPosition.js → esm2020/lib/Shared/Enums/IconPosition.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/ImageType.js → esm2020/lib/Shared/Enums/ImageType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/InputType.js → esm2020/lib/Shared/Enums/InputType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Insert.js → esm2020/lib/Shared/Enums/Insert.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/LanguageMode.js → esm2020/lib/Shared/Enums/LanguageMode.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/LanguageValidation.js → esm2020/lib/Shared/Enums/LanguageValidation.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Misc.js → esm2020/lib/Shared/Enums/Misc.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/PagingActionMode.js → esm2020/lib/Shared/Enums/PagingActionMode.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Para.js → esm2020/lib/Shared/Enums/Para.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/PickerType.js → esm2020/lib/Shared/Enums/PickerType.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/SelectMode.js → esm2020/lib/Shared/Enums/SelectMode.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/StartView.js → esm2020/lib/Shared/Enums/StartView.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/Style.js → esm2020/lib/Shared/Enums/Style.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/StyleConfirmationMode.js → esm2020/lib/Shared/Enums/StyleConfirmationMode.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/TagInputView.js → esm2020/lib/Shared/Enums/TagInputView.mjs} +0 -0
- package/{esm2015/lib/Shared/Enums/menu-list-enum.js → esm2020/lib/Shared/Enums/menu-list-enum.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/Attribute.js → esm2020/lib/Shared/Models/Attribute.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/AutocompleteDTO.js → esm2020/lib/Shared/Models/AutocompleteDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/AutocompleteOptions.js → esm2020/lib/Shared/Models/AutocompleteOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CalendarEventDTO.js → esm2020/lib/Shared/Models/CalendarEventDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CalendarOptions.js → esm2020/lib/Shared/Models/CalendarOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CancelDTO.js → esm2020/lib/Shared/Models/CancelDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CaptchaStyle.js → esm2020/lib/Shared/Models/CaptchaStyle.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CheckBoxOptions.js → esm2020/lib/Shared/Models/CheckBoxOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ConfirmationModalOptions.js → esm2020/lib/Shared/Models/ConfirmationModalOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ControlOptionsBase.js → esm2020/lib/Shared/Models/ControlOptionsBase.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/CustomValidation.js → esm2020/lib/Shared/Models/CustomValidation.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/DropdownListItem.js → esm2020/lib/Shared/Models/DropdownListItem.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/DropdownOptions.js → esm2020/lib/Shared/Models/DropdownOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/EditPersonalImage.js → esm2020/lib/Shared/Models/EditPersonalImage.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/EnglishArabicDTO.js → esm2020/lib/Shared/Models/EnglishArabicDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FileDTO.js → esm2020/lib/Shared/Models/FileDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FileUploadModel.js → esm2020/lib/Shared/Models/FileUploadModel.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FileUploadOptions.js → esm2020/lib/Shared/Models/FileUploadOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FilterItem.js → esm2020/lib/Shared/Models/FilterItem.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/FormOptions.js → esm2020/lib/Shared/Models/FormOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/HtmlEditorOptions.js → esm2020/lib/Shared/Models/HtmlEditorOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ImageUploadOptions.js → esm2020/lib/Shared/Models/ImageUploadOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MapAutoCompleteOptions.js → esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MapAutocompleteDTO.js → esm2020/lib/Shared/Models/MapAutocompleteDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js → esm2020/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js → esm2020/lib/Shared/Models/MultiLingualTextAreaOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultilingualControlOptionsBase.js → esm2020/lib/Shared/Models/MultilingualControlOptionsBase.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js → esm2020/lib/Shared/Models/MultilingualTextBoxOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/MultipleFileUploadModel.js → esm2020/lib/Shared/Models/MultipleFileUploadModel.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/PagingDTO.js → esm2020/lib/Shared/Models/PagingDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/PagingOptions.js → esm2020/lib/Shared/Models/PagingOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/PagingPayload.js → esm2020/lib/Shared/Models/PagingPayload.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/PhoneOptions.js → esm2020/lib/Shared/Models/PhoneOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ProfileImageUploadOptions.js → esm2020/lib/Shared/Models/ProfileImageUploadOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ProfilePictureDTO.js → esm2020/lib/Shared/Models/ProfilePictureDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RadioButtonItem.js → esm2020/lib/Shared/Models/RadioButtonItem.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RadioButtonOptions.js → esm2020/lib/Shared/Models/RadioButtonOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RangeNumber.js → esm2020/lib/Shared/Models/RangeNumber.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/Recaptcha.js → esm2020/lib/Shared/Models/Recaptcha.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RecaptchaOptions.js → esm2020/lib/Shared/Models/RecaptchaOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RepeaterField.js → esm2020/lib/Shared/Models/RepeaterField.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/RepeaterOptions.js → esm2020/lib/Shared/Models/RepeaterOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/SaveDTO.js → esm2020/lib/Shared/Models/SaveDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/TagsInputDTO.js → esm2020/lib/Shared/Models/TagsInputDTO.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/TagsInputOptions.js → esm2020/lib/Shared/Models/TagsInputOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/TextAreaOptions.js → esm2020/lib/Shared/Models/TextAreaOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/TextBoxOptions.js → esm2020/lib/Shared/Models/TextBoxOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/ToggleslideOptions.js → esm2020/lib/Shared/Models/ToggleslideOptions.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/UploadPersonalImage.js → esm2020/lib/Shared/Models/UploadPersonalImage.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/bread-crumb.js → esm2020/lib/Shared/Models/bread-crumb.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/control-filter-Item.js → esm2020/lib/Shared/Models/control-filter-Item.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/datePickerOptions.js → esm2020/lib/Shared/Models/datePickerOptions.mjs} +1 -1
- package/{esm2015/lib/Shared/Models/filter-options.js → esm2020/lib/Shared/Models/filter-options.mjs} +0 -0
- package/{esm2015/lib/Shared/Models/page-header-options.js → esm2020/lib/Shared/Models/page-header-options.mjs} +0 -0
- package/esm2020/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +21 -0
- package/esm2020/lib/Shared/Pipes/bbsf-date.pipe.mjs +21 -0
- package/esm2020/lib/Shared/components/app-base-component.mjs +198 -0
- package/esm2020/lib/Shared/components/ng-tag-input.mjs +336 -0
- package/{esm2015/lib/Shared/config/environment.js → esm2020/lib/Shared/config/environment.mjs} +0 -0
- package/esm2020/lib/Shared/default_intl.mjs +29 -0
- package/esm2020/lib/Shared/services/ControlUtility.mjs +162 -0
- package/esm2020/lib/Shared/services/GlobalSettings.service.mjs +30 -0
- package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +24 -0
- package/esm2020/lib/Shared/services/render-component-service.service.mjs +30 -0
- package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +137 -0
- package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +245 -0
- package/esm2020/lib/controls/Calendar/Calendar.component.mjs +172 -0
- package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +114 -0
- package/esm2020/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +136 -0
- package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +217 -0
- package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +179 -0
- package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +453 -0
- package/esm2020/lib/controls/Form/Form.component.mjs +101 -0
- package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +223 -0
- package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +350 -0
- package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +325 -0
- package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +427 -0
- package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +427 -0
- package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +426 -0
- package/esm2020/lib/controls/Paging/JwPagination.component.mjs +156 -0
- package/esm2020/lib/controls/Paging/Paging.component.mjs +312 -0
- package/esm2020/lib/controls/Phone/Phone.component.mjs +124 -0
- package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +354 -0
- package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +106 -0
- package/esm2020/lib/controls/Recaptcha/Recaptcha.component.mjs +132 -0
- package/esm2020/lib/controls/Repeater/repeater/repeater.component.mjs +125 -0
- package/esm2020/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +750 -0
- package/esm2020/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +21 -0
- package/esm2020/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +108 -0
- package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +268 -0
- package/esm2020/lib/controls/TextArea/TextArea.component.mjs +192 -0
- package/esm2020/lib/controls/TextBox/TextBox.component.mjs +266 -0
- package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +84 -0
- package/esm2020/lib/controls/bbsf-controls.module.mjs +401 -0
- package/esm2020/lib/controls/page-header-component/page-header-component.component.mjs +37 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{bnsights-bbsf-controls.js → bnsights-bbsf-controls.mjs} +1787 -1644
- package/fesm2015/bnsights-bbsf-controls.mjs.map +1 -0
- package/fesm2020/bnsights-bbsf-controls.mjs +8938 -0
- package/fesm2020/bnsights-bbsf-controls.mjs.map +1 -0
- package/lib/Shared/Directives/template-name.directive.d.ts +3 -0
- package/lib/Shared/Models/datePickerOptions.d.ts +1 -1
- package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +3 -0
- package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +3 -0
- package/lib/Shared/components/app-base-component.d.ts +3 -0
- package/lib/Shared/components/ng-tag-input.d.ts +3 -0
- package/lib/Shared/default_intl.d.ts +3 -0
- package/lib/Shared/services/ControlUtility.d.ts +3 -0
- package/lib/Shared/services/GlobalSettings.service.d.ts +3 -0
- package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +3 -0
- package/lib/Shared/services/render-component-service.service.d.ts +3 -0
- package/lib/Shared/services/validationErrorMassage.service.d.ts +3 -0
- package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +4 -0
- package/lib/controls/Calendar/Calendar.component.d.ts +3 -0
- package/lib/controls/CheckBox/CheckBox.component.d.ts +4 -0
- package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +3 -0
- package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +8 -2
- package/lib/controls/DropdownList/DropdownList.component.d.ts +4 -0
- package/lib/controls/FileUplaod/FileUplaod.component.d.ts +3 -0
- package/lib/controls/Form/Form.component.d.ts +3 -0
- package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +4 -0
- package/lib/controls/ImageUpload/ImageUpload.component.d.ts +3 -0
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +3 -0
- package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +3 -0
- package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +3 -0
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +3 -0
- package/lib/controls/Paging/JwPagination.component.d.ts +3 -0
- package/lib/controls/Paging/Paging.component.d.ts +3 -0
- package/lib/controls/Phone/Phone.component.d.ts +7 -1
- package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +3 -0
- package/lib/controls/RadioButton/RadioButton.component.d.ts +3 -0
- package/lib/controls/Recaptcha/Recaptcha.component.d.ts +4 -0
- package/lib/controls/Repeater/repeater/repeater.component.d.ts +3 -0
- package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +3 -0
- package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +3 -0
- package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +3 -0
- package/lib/controls/TagsInput/TagsInput.component.d.ts +4 -0
- package/lib/controls/TextArea/TextArea.component.d.ts +4 -0
- package/lib/controls/TextBox/TextBox.component.d.ts +4 -0
- package/lib/controls/Toggleslide/toggleslide.component.d.ts +4 -0
- package/lib/controls/bbsf-controls.module.d.ts +74 -0
- package/lib/controls/page-header-component/page-header-component.component.d.ts +3 -0
- package/package.json +20 -8
- package/bnsights-bbsf-controls-1.0.86.tgz +0 -0
- package/bnsights-bbsf-controls.metadata.json +0 -1
- package/bundles/bnsights-bbsf-controls.umd.js +0 -9430
- package/bundles/bnsights-bbsf-controls.umd.js.map +0 -1
- package/esm2015/bnsights-bbsf-controls.js +0 -6
- package/esm2015/lib/Shared/Directives/template-name.directive.js +0 -18
- package/esm2015/lib/Shared/Pipes/bbsf-date-time.pipe.js +0 -20
- package/esm2015/lib/Shared/Pipes/bbsf-date.pipe.js +0 -20
- package/esm2015/lib/Shared/components/app-base-component.js +0 -198
- package/esm2015/lib/Shared/components/ng-tag-input.js +0 -323
- package/esm2015/lib/Shared/default_intl.js +0 -29
- package/esm2015/lib/Shared/services/ControlUtility.js +0 -164
- package/esm2015/lib/Shared/services/GlobalSettings.service.js +0 -28
- package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +0 -22
- package/esm2015/lib/Shared/services/render-component-service.service.js +0 -30
- package/esm2015/lib/Shared/services/validationErrorMassage.service.js +0 -137
- package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +0 -248
- package/esm2015/lib/controls/Calendar/Calendar.component.js +0 -176
- package/esm2015/lib/controls/CheckBox/CheckBox.component.js +0 -114
- package/esm2015/lib/controls/ConfirmationModal/ConfirmationModal.component.js +0 -139
- package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +0 -215
- package/esm2015/lib/controls/DropdownList/DropdownList.component.js +0 -178
- package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +0 -451
- package/esm2015/lib/controls/Form/Form.component.js +0 -106
- package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +0 -222
- package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +0 -347
- package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +0 -325
- package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +0 -429
- package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +0 -430
- package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +0 -429
- package/esm2015/lib/controls/Paging/JwPagination.component.js +0 -129
- package/esm2015/lib/controls/Paging/Paging.component.js +0 -312
- package/esm2015/lib/controls/Phone/Phone.component.js +0 -119
- package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +0 -349
- package/esm2015/lib/controls/RadioButton/RadioButton.component.js +0 -108
- package/esm2015/lib/controls/Recaptcha/Recaptcha.component.js +0 -131
- package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +0 -117
- package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +0 -748
- package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +0 -19
- package/esm2015/lib/controls/Repeater/repeater-table/repeater-table.component.js +0 -108
- package/esm2015/lib/controls/TagsInput/TagsInput.component.js +0 -268
- package/esm2015/lib/controls/TextArea/TextArea.component.js +0 -191
- package/esm2015/lib/controls/TextBox/TextBox.component.js +0 -262
- package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +0 -83
- package/esm2015/lib/controls/bbsf-controls.module.js +0 -243
- package/esm2015/lib/controls/page-header-component/page-header-component.component.js +0 -32
- package/fesm2015/bnsights-bbsf-controls.js.map +0 -1
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { FormControl, Validators, FormGroup } from '@angular/forms';
|
|
3
|
+
import { InputType } from '../../Shared/Enums/InputType';
|
|
4
|
+
import { EnglishArabicDTO } from '../../Shared/Models/EnglishArabicDTO';
|
|
5
|
+
import { LanguageMode } from '../../Shared/Enums/LanguageMode';
|
|
6
|
+
import { ControlLayout } from '../../Shared/Enums/ControlLayout';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/forms";
|
|
9
|
+
import * as i2 from "../../Shared/services/ControlUtility";
|
|
10
|
+
import * as i3 from "@bnsights/bbsf-utilities";
|
|
11
|
+
import * as i4 from "../../Shared/services/GlobalSettings.service";
|
|
12
|
+
import * as i5 from "@angular/common";
|
|
13
|
+
import * as i6 from "ng-inline-svg";
|
|
14
|
+
import * as i7 from "@angular/cdk/bidi";
|
|
15
|
+
import * as i8 from "ngx-intl-tel-input";
|
|
16
|
+
export class MultiLingualTextBoxComponent {
|
|
17
|
+
constructor(MultiLingualTextBoxFormControlHost, controlContainer, controlUtility, UtilityService, translate, controlValidationService, globalSettings) {
|
|
18
|
+
this.MultiLingualTextBoxFormControlHost = MultiLingualTextBoxFormControlHost;
|
|
19
|
+
this.controlContainer = controlContainer;
|
|
20
|
+
this.controlUtility = controlUtility;
|
|
21
|
+
this.UtilityService = UtilityService;
|
|
22
|
+
this.translate = translate;
|
|
23
|
+
this.controlValidationService = controlValidationService;
|
|
24
|
+
this.globalSettings = globalSettings;
|
|
25
|
+
this.OnChange = new EventEmitter();
|
|
26
|
+
this.ArabicWordCount = 0;
|
|
27
|
+
this.ArabicWordCountArray = 0;
|
|
28
|
+
this.EnglishWordCount = 0;
|
|
29
|
+
this.EnglishWordCountArray = 0;
|
|
30
|
+
this.CurrentLanguage = "";
|
|
31
|
+
this.ArabicValidationRules = [];
|
|
32
|
+
this.ArabicValidationRulesasync = [];
|
|
33
|
+
this.EnglishValidationRules = [];
|
|
34
|
+
this.EnglishValidationRulesasync = [];
|
|
35
|
+
this.IsShowArabicWordCount = false;
|
|
36
|
+
this.IsShowEnglishWordCount = false;
|
|
37
|
+
this.IsShowAsteriskInArabic = false;
|
|
38
|
+
this.IsShowAsteriskInEnglish = false;
|
|
39
|
+
this.markAllAsTouched = false;
|
|
40
|
+
this.ArabicLetterOnly = "";
|
|
41
|
+
this.EnglishLetterOnly = "";
|
|
42
|
+
//For Show warning message of max length limit
|
|
43
|
+
this.minCharsLimit = -1; //To disable chars limit feature by default
|
|
44
|
+
this.englishCurrentCharsCount = 0;
|
|
45
|
+
this.arabicCurrentCharsCount = 0;
|
|
46
|
+
this.showEnglishCharsLimitMsg = false;
|
|
47
|
+
this.showArabicCharsLimitMsg = false;
|
|
48
|
+
this.hasEnglishCharsLimitValidationError = false;
|
|
49
|
+
this.hasArabicCharsLimitValidationError = false;
|
|
50
|
+
this.englishMaxLimitWarningMsg = "";
|
|
51
|
+
this.arabicMaxLimitWarningMsg = "";
|
|
52
|
+
//External Method
|
|
53
|
+
this.RemoveRequiredValidation = () => {
|
|
54
|
+
this.controlUtility.RemoveRequiredValidation(this.ArabicFormControl, this.EnglishValidationRules, this.options);
|
|
55
|
+
this.controlUtility.RemoveRequiredValidation(this.EnglishFormControl, this.ArabicValidationRules, this.options);
|
|
56
|
+
};
|
|
57
|
+
//External Method
|
|
58
|
+
this.AddRequiredValidation = () => {
|
|
59
|
+
this.controlUtility.AddRequiredValidation(this.ArabicFormControl, this.EnglishValidationRules, this.options);
|
|
60
|
+
this.controlUtility.AddRequiredValidation(this.EnglishFormControl, this.ArabicValidationRules, this.options);
|
|
61
|
+
};
|
|
62
|
+
//External Method
|
|
63
|
+
this.RemoveCustomValidation = (CustomValidation) => {
|
|
64
|
+
this.controlUtility.RemoveCustomValidation(this.ArabicFormControl, this.EnglishValidationRules, CustomValidation);
|
|
65
|
+
this.controlUtility.RemoveCustomValidation(this.EnglishFormControl, this.ArabicValidationRules, CustomValidation);
|
|
66
|
+
};
|
|
67
|
+
//External Method
|
|
68
|
+
this.AddCustomValidation = (CustomValidation) => {
|
|
69
|
+
this.controlUtility.AddCustomValidation(this.ArabicFormControl, this.EnglishValidationRules, CustomValidation);
|
|
70
|
+
this.controlUtility.AddCustomValidation(this.EnglishFormControl, this.ArabicValidationRules, CustomValidation);
|
|
71
|
+
};
|
|
72
|
+
//External Method
|
|
73
|
+
this.IsValid = () => {
|
|
74
|
+
this.controlUtility.IsValid(this.ArabicFormControl);
|
|
75
|
+
this.controlUtility.IsValid(this.EnglishFormControl);
|
|
76
|
+
};
|
|
77
|
+
MultiLingualTextBoxComponent.controlContainerstatic = this.controlContainer;
|
|
78
|
+
this.CurrentLanguage = translate.currentLang != undefined ? translate.currentLang : translate.defaultLang;
|
|
79
|
+
}
|
|
80
|
+
getCustomErrorsMassages() {
|
|
81
|
+
this.ArabicLetterOnly = this.UtilityService.getResourceValue("ArabicIsRequiredAndOnly50CharactersEnglish");
|
|
82
|
+
this.EnglishLetterOnly = this.UtilityService.getResourceValue("EnglishLetterOnly");
|
|
83
|
+
}
|
|
84
|
+
async ngOnInit() {
|
|
85
|
+
this.controlValidationService.isCreatedBefor = false;
|
|
86
|
+
this.CurrentLanguage = await this.UtilityService.getCurrentLanguage();
|
|
87
|
+
// this.translate.onLangChange.subscribe((event: LangChangeEvent) => {
|
|
88
|
+
// this.CurrentLanguage = event.lang;
|
|
89
|
+
// this.showInputUsingLanguageMode()
|
|
90
|
+
// });
|
|
91
|
+
this.MultiLanguagegroup = new FormGroup({});
|
|
92
|
+
;
|
|
93
|
+
this.MultiLanguagegroup.addControl("Arabic", new FormControl(''));
|
|
94
|
+
this.MultiLanguagegroup.addControl("English", new FormControl(''));
|
|
95
|
+
this.ArabicFormControl = this.MultiLanguagegroup.controls["Arabic"]; // new FormControl('',validationRules);
|
|
96
|
+
this.EnglishFormControl = this.MultiLanguagegroup.controls["English"]; // new FormControl('',validationRules);
|
|
97
|
+
this.group.addControl(this.options.Name, new FormGroup(this.MultiLanguagegroup.controls));
|
|
98
|
+
this.getCustomErrorsMassages();
|
|
99
|
+
if (!this.options.ViewType)
|
|
100
|
+
this.options.ViewType = this.globalSettings.ViewType;
|
|
101
|
+
if (!this.options.LanguageMode)
|
|
102
|
+
this.options.LanguageMode = this.globalSettings.LanguageMode;
|
|
103
|
+
if (!this.options.MultiControlPlacementType)
|
|
104
|
+
this.options.MultiControlPlacementType = this.globalSettings.MultiControlPlacementType;
|
|
105
|
+
if (!this.options.MaxLength)
|
|
106
|
+
this.options.MaxLength = this.globalSettings.MaxLengthTextBox;
|
|
107
|
+
if (this.options.LabelKey != null && this.options.LabelKey != "") {
|
|
108
|
+
this.options.ArabicLabelValue = this.UtilityService.getResourceValue(this.options.LabelKey) + " " + this.UtilityService.getResourceValue("InArabic");
|
|
109
|
+
this.options.EnglishLabelValue = this.UtilityService.getResourceValue(this.options.LabelKey) + " " + this.UtilityService.getResourceValue("InEnglish");
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
if (this.options.ArabicLabelKey != null && this.options.ArabicLabelKey != "")
|
|
113
|
+
this.options.ArabicLabelValue = this.UtilityService.getResourceValue(this.options.ArabicLabelKey);
|
|
114
|
+
if (this.options.EnglishLabelKey != null && this.options.EnglishLabelKey != "")
|
|
115
|
+
this.options.EnglishLabelValue = this.UtilityService.getResourceValue(this.options.EnglishLabelKey);
|
|
116
|
+
}
|
|
117
|
+
if (this.options.CustomValidation.length > 0) {
|
|
118
|
+
let Validations = this.options.CustomValidation;
|
|
119
|
+
for (let index = 0; index < Validations.length; index++) {
|
|
120
|
+
const Validation = Validations[index];
|
|
121
|
+
this.EnglishValidationRules.push(Validation.functionBody);
|
|
122
|
+
this.ArabicValidationRules.push(Validation.functionBody);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (this.options.MinLength > 0) {
|
|
126
|
+
this.ArabicValidationRules.push(Validators.minLength(this.options.MinLength));
|
|
127
|
+
this.EnglishValidationRules.push(Validators.minLength(this.options.MinLength));
|
|
128
|
+
}
|
|
129
|
+
if (this.options.MaxLength > 0) {
|
|
130
|
+
this.EnglishValidationRules.push(Validators.maxLength(this.options.MaxLength));
|
|
131
|
+
this.ArabicValidationRules.push(Validators.maxLength(this.options.MaxLength));
|
|
132
|
+
if (!this.options.MaxLengthWarningLimit)
|
|
133
|
+
this.options.MaxLengthWarningLimit = this.globalSettings.MaxLengthWarningLimit;
|
|
134
|
+
this.minCharsLimit = this.options.MaxLength - this.options.MaxLengthWarningLimit;
|
|
135
|
+
}
|
|
136
|
+
this.showInputUsingLanguageMode();
|
|
137
|
+
this.ArabicValidationRules.push(Validators.compose([
|
|
138
|
+
this.controlUtility.arabicValidator({ ArabicIsRequiredAndOnly50CharactersEnglish: this.ArabicLetterOnly }),
|
|
139
|
+
]));
|
|
140
|
+
this.EnglishValidationRules.push(Validators.compose([
|
|
141
|
+
this.controlUtility.patternValidator(/^[~`!@#$%^&*()‘’“”_+=[\]\\{}|;':",.\/<>?a-zA-Z0-9- ]*$/, { EnglishLetterOnly: this.EnglishLetterOnly }),
|
|
142
|
+
]));
|
|
143
|
+
this.ArabicFormControl.setValidators(this.ArabicValidationRules);
|
|
144
|
+
this.ArabicFormControl.setAsyncValidators(this.ArabicValidationRulesasync);
|
|
145
|
+
this.EnglishFormControl.setValidators(this.EnglishValidationRules);
|
|
146
|
+
this.EnglishFormControl.setAsyncValidators(this.EnglishValidationRulesasync);
|
|
147
|
+
if (this.options.IsDisabled) {
|
|
148
|
+
this.EnglishFormControl.disable();
|
|
149
|
+
this.ArabicFormControl.disable();
|
|
150
|
+
}
|
|
151
|
+
this.ArabicFormControl.setValue(this.options.Value.Arabic);
|
|
152
|
+
this.EnglishFormControl.setValue(this.options.Value.English);
|
|
153
|
+
this.MultiLingualTextBoxFormControlHost.ngSubmit.subscribe((value) => {
|
|
154
|
+
this.group.markAllAsTouched();
|
|
155
|
+
this.markAllAsTouched = true;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
onTextChange() {
|
|
159
|
+
// this.trimControlValue(type)
|
|
160
|
+
let arabicValue = "";
|
|
161
|
+
let englishValue = "";
|
|
162
|
+
if (this.EnglishFormControl.value == "") {
|
|
163
|
+
this.EnglishWordCountArray = 0;
|
|
164
|
+
this.EnglishWordCount = 0;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
if (this.EnglishFormControl.value != null && this.EnglishFormControl.value != undefined) {
|
|
168
|
+
this.EnglishWordCountArray = this.EnglishFormControl.value.split(" ").length;
|
|
169
|
+
if (this.EnglishWordCountArray > 0) {
|
|
170
|
+
if (this.EnglishWordCountArray > this.options.MaxWordCount) {
|
|
171
|
+
this.EnglishWordCount = this.options.MaxWordCount;
|
|
172
|
+
this.MultiLanguagegroup.controls["English"].setErrors({ MaxWordCountValidationKey: this.options.MaxWordCount });
|
|
173
|
+
this.MultiLanguagegroup.controls["English"].markAsTouched();
|
|
174
|
+
this.MultiLanguagegroup.controls["English"].invalid;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.EnglishWordCount = this.EnglishWordCountArray;
|
|
178
|
+
}
|
|
179
|
+
englishValue = this.EnglishFormControl.value;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//Check for maxlength limit count
|
|
183
|
+
//MaxLength should be gretaer than or equals chars limit so that minCharsLimit would be >= 0
|
|
184
|
+
if (this.options.MaxLength && this.minCharsLimit >= 0) {
|
|
185
|
+
this.englishCurrentCharsCount = this.EnglishFormControl.value.length;
|
|
186
|
+
if (this.englishCurrentCharsCount > this.minCharsLimit) {
|
|
187
|
+
this.showEnglishCharsLimitMsg = true;
|
|
188
|
+
this.hasEnglishCharsLimitValidationError = true;
|
|
189
|
+
if (this.englishCurrentCharsCount == this.options.MaxLength)
|
|
190
|
+
this.englishCharsLimitMsgClass = "danger";
|
|
191
|
+
else
|
|
192
|
+
this.englishCharsLimitMsgClass = "warning";
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
this.showEnglishCharsLimitMsg = false;
|
|
196
|
+
this.hasEnglishCharsLimitValidationError = false;
|
|
197
|
+
}
|
|
198
|
+
var max = this.options.MaxLength;
|
|
199
|
+
var current = this.englishCurrentCharsCount;
|
|
200
|
+
var resource = this.UtilityService.getResourceValue("MaxLengthLimitWarning");
|
|
201
|
+
this.englishMaxLimitWarningMsg = eval('`' + resource + '`');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (this.ArabicFormControl.value == "") {
|
|
205
|
+
this.ArabicWordCountArray = 0;
|
|
206
|
+
this.ArabicWordCount = 0;
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
if (this.ArabicFormControl.value != null && this.ArabicFormControl.value != undefined) {
|
|
210
|
+
this.ArabicWordCountArray = this.ArabicFormControl.value.split(" ").length;
|
|
211
|
+
if (this.ArabicWordCountArray > 0) {
|
|
212
|
+
if (this.ArabicWordCountArray > this.options.MaxWordCount) {
|
|
213
|
+
this.ArabicWordCount = this.options.MaxWordCount;
|
|
214
|
+
this.MultiLanguagegroup.controls["Arabic"].setErrors({ MaxWordCountValidationKey: this.options.MaxWordCount });
|
|
215
|
+
this.MultiLanguagegroup.controls["Arabic"].markAsTouched();
|
|
216
|
+
this.MultiLanguagegroup.controls["Arabic"].invalid;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
this.ArabicWordCount = this.ArabicWordCountArray;
|
|
220
|
+
}
|
|
221
|
+
arabicValue = this.ArabicFormControl.value;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//Check for maxlength limit count
|
|
225
|
+
//MaxLength should be gretaer than or equals chars limit so that minCharsLimit would be >= 0
|
|
226
|
+
if (this.options.MaxLength && this.minCharsLimit >= 0) {
|
|
227
|
+
this.arabicCurrentCharsCount = this.ArabicFormControl.value.length;
|
|
228
|
+
if (this.arabicCurrentCharsCount > this.minCharsLimit) {
|
|
229
|
+
this.showArabicCharsLimitMsg = true;
|
|
230
|
+
this.hasArabicCharsLimitValidationError = true;
|
|
231
|
+
if (this.arabicCurrentCharsCount == this.options.MaxLength)
|
|
232
|
+
this.arabicCharsLimitMsgClass = "danger";
|
|
233
|
+
else
|
|
234
|
+
this.arabicCharsLimitMsgClass = "warning";
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
this.showArabicCharsLimitMsg = false;
|
|
238
|
+
this.hasArabicCharsLimitValidationError = false;
|
|
239
|
+
}
|
|
240
|
+
var max = this.options.MaxLength;
|
|
241
|
+
var current = this.arabicCurrentCharsCount;
|
|
242
|
+
var resource = this.UtilityService.getResourceValue("MaxLengthLimitWarning");
|
|
243
|
+
this.arabicMaxLimitWarningMsg = eval('`' + resource + '`');
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
let mulitLangModel = new EnglishArabicDTO();
|
|
247
|
+
mulitLangModel.Arabic = arabicValue;
|
|
248
|
+
mulitLangModel.English = englishValue;
|
|
249
|
+
// this.ArabicFormControl = arabicValue;
|
|
250
|
+
// this.EnglishFormControl = englishValue;
|
|
251
|
+
this.OnChange.emit(mulitLangModel);
|
|
252
|
+
this.group.get(this.options.Name).setValue(mulitLangModel);
|
|
253
|
+
//Use this line to enable two way binding.
|
|
254
|
+
this.options.Value = mulitLangModel;
|
|
255
|
+
this.MultiLingualTextBoxFormControlHost.ngSubmit.subscribe((value) => {
|
|
256
|
+
this.group.markAllAsTouched();
|
|
257
|
+
this.markAllAsTouched = true;
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
resetError() {
|
|
261
|
+
this.controlValidationService.RemoveGlobalError();
|
|
262
|
+
}
|
|
263
|
+
showGlobalError() {
|
|
264
|
+
this.controlUtility.showGlobalError();
|
|
265
|
+
}
|
|
266
|
+
getErrorValidation(ErrorList) {
|
|
267
|
+
if (this.markAllAsTouched && this.group.invalid) {
|
|
268
|
+
this.showGlobalError();
|
|
269
|
+
this.markAllAsTouched = false;
|
|
270
|
+
}
|
|
271
|
+
return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
|
|
272
|
+
}
|
|
273
|
+
getInputType(type) {
|
|
274
|
+
return InputType[type];
|
|
275
|
+
}
|
|
276
|
+
trimControlValue(type) {
|
|
277
|
+
const whitespace = ' ';
|
|
278
|
+
if (type == "En") {
|
|
279
|
+
let originalValue = this.controlUtility.trimControlValue(this.EnglishFormControl.value);
|
|
280
|
+
this.EnglishFormControl.patchValue(originalValue);
|
|
281
|
+
if (this.options.PatchFunction && this.options.PatchPath && this.EnglishFormControl.valid) {
|
|
282
|
+
this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
|
|
283
|
+
}
|
|
284
|
+
if (this.EnglishFormControl.value.startsWith(whitespace) || this.EnglishFormControl.value.endsWith(whitespace)) {
|
|
285
|
+
this.EnglishFormControl.patchValue(originalValue);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
if (type == "Ar") {
|
|
289
|
+
let originalValue = this.controlUtility.trimControlValue(this.ArabicFormControl.value);
|
|
290
|
+
this.ArabicFormControl.patchValue(originalValue);
|
|
291
|
+
if (this.options.PatchFunction && this.options.PatchPath && this.ArabicFormControl.valid) {
|
|
292
|
+
this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
|
|
293
|
+
}
|
|
294
|
+
if (this.ArabicFormControl.value.startsWith(whitespace) || this.ArabicFormControl.value.endsWith(whitespace)) {
|
|
295
|
+
this.ArabicFormControl.patchValue(originalValue);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
copyInputMessage(inputElement) {
|
|
300
|
+
this.controlUtility.CopyInputMessage(inputElement);
|
|
301
|
+
}
|
|
302
|
+
showInputUsingLanguageMode() {
|
|
303
|
+
this.ArabicValidationRules = this.ArabicValidationRules.filter(item => item !== Validators.required);
|
|
304
|
+
this.EnglishValidationRules = this.EnglishValidationRules.filter(item => item !== Validators.required);
|
|
305
|
+
this.ArabicFormControl.clearValidators();
|
|
306
|
+
this.EnglishFormControl.clearValidators();
|
|
307
|
+
this.ArabicFormControl.updateValueAndValidity();
|
|
308
|
+
this.EnglishFormControl.updateValueAndValidity();
|
|
309
|
+
switch (this.options.LanguageMode) {
|
|
310
|
+
case LanguageMode.Both_Languages_are_visible:
|
|
311
|
+
this.ShowArabicTextBox = true;
|
|
312
|
+
this.ShowEnglishTextBox = true;
|
|
313
|
+
if (this.options.IsRequired == true) {
|
|
314
|
+
this.EnglishValidationRules.push(Validators.required);
|
|
315
|
+
this.ArabicValidationRules.push(Validators.required);
|
|
316
|
+
this.IsShowAsteriskInArabic = true;
|
|
317
|
+
this.IsShowAsteriskInEnglish = true;
|
|
318
|
+
}
|
|
319
|
+
break;
|
|
320
|
+
case LanguageMode.Arabic_Language_only_is_visible:
|
|
321
|
+
this.ShowArabicTextBox = true;
|
|
322
|
+
this.options.MultiControlPlacementType = ControlLayout.Vertical;
|
|
323
|
+
break;
|
|
324
|
+
case LanguageMode.English_Language_only_is_visible:
|
|
325
|
+
this.ShowEnglishTextBox = true;
|
|
326
|
+
this.options.MultiControlPlacementType = ControlLayout.Vertical;
|
|
327
|
+
break;
|
|
328
|
+
case LanguageMode.Both_Languages_are_visible_but_only_current_language_is_required:
|
|
329
|
+
this.ShowArabicTextBox = true;
|
|
330
|
+
this.ShowEnglishTextBox = true;
|
|
331
|
+
this.options.MultiControlPlacementType = this.globalSettings.MultiControlPlacementType;
|
|
332
|
+
if (this.CurrentLanguage == 'ar') {
|
|
333
|
+
if (this.options.IsRequired == true) {
|
|
334
|
+
this.ArabicValidationRules.push(Validators.required);
|
|
335
|
+
this.IsShowAsteriskInArabic = true;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (this.CurrentLanguage == 'en') {
|
|
339
|
+
if (this.options.IsRequired == true) {
|
|
340
|
+
this.EnglishValidationRules.push(Validators.required);
|
|
341
|
+
this.IsShowAsteriskInEnglish = true;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
break;
|
|
345
|
+
case LanguageMode.Both_Languages_but_only_Arabic_is_required:
|
|
346
|
+
this.ShowArabicTextBox = true;
|
|
347
|
+
this.ShowEnglishTextBox = true;
|
|
348
|
+
this.options.MultiControlPlacementType = this.globalSettings.MultiControlPlacementType;
|
|
349
|
+
if (this.options.IsRequired == true) {
|
|
350
|
+
this.ArabicValidationRules.push(Validators.required);
|
|
351
|
+
this.IsShowAsteriskInArabic = true;
|
|
352
|
+
}
|
|
353
|
+
break;
|
|
354
|
+
case LanguageMode.Both_Languages_but_only_English_is_required:
|
|
355
|
+
this.ShowArabicTextBox = true;
|
|
356
|
+
this.ShowEnglishTextBox = true;
|
|
357
|
+
this.options.MultiControlPlacementType = this.globalSettings.MultiControlPlacementType;
|
|
358
|
+
if (this.options.IsRequired == true) {
|
|
359
|
+
this.EnglishValidationRules.push(Validators.required);
|
|
360
|
+
this.IsShowAsteriskInEnglish = true;
|
|
361
|
+
}
|
|
362
|
+
break;
|
|
363
|
+
case LanguageMode.Current_Language_only_is_visible_and_required:
|
|
364
|
+
this.options.MultiControlPlacementType = ControlLayout.Vertical;
|
|
365
|
+
if (this.CurrentLanguage == 'ar') {
|
|
366
|
+
this.ShowArabicTextBox = true;
|
|
367
|
+
this.ShowEnglishTextBox = false;
|
|
368
|
+
if (this.options.IsRequired == true) {
|
|
369
|
+
this.ArabicValidationRules.push(Validators.required);
|
|
370
|
+
this.IsShowAsteriskInArabic = true;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
if (this.CurrentLanguage == 'en') {
|
|
374
|
+
this.ShowArabicTextBox = false;
|
|
375
|
+
this.ShowEnglishTextBox = true;
|
|
376
|
+
if (this.options.IsRequired == true) {
|
|
377
|
+
this.EnglishValidationRules.push(Validators.required);
|
|
378
|
+
this.IsShowAsteriskInEnglish = true;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
break;
|
|
382
|
+
default:
|
|
383
|
+
break;
|
|
384
|
+
}
|
|
385
|
+
this.ArabicFormControl.setValidators(this.ArabicValidationRules);
|
|
386
|
+
this.EnglishFormControl.setValidators(this.EnglishValidationRules);
|
|
387
|
+
this.ArabicFormControl.updateValueAndValidity();
|
|
388
|
+
this.EnglishFormControl.updateValueAndValidity();
|
|
389
|
+
}
|
|
390
|
+
onArabicFocus(isFocus) {
|
|
391
|
+
this.IsShowArabicWordCount = isFocus;
|
|
392
|
+
//onFocus
|
|
393
|
+
if (isFocus) {
|
|
394
|
+
if (this.hasArabicCharsLimitValidationError) //check if there was previous validation error
|
|
395
|
+
this.showArabicCharsLimitMsg = true;
|
|
396
|
+
}
|
|
397
|
+
else //onFocusOut
|
|
398
|
+
this.showArabicCharsLimitMsg = false;
|
|
399
|
+
}
|
|
400
|
+
onEnglishFocus(isFocus) {
|
|
401
|
+
this.IsShowEnglishWordCount = isFocus;
|
|
402
|
+
//onFocus
|
|
403
|
+
if (isFocus) {
|
|
404
|
+
if (this.hasEnglishCharsLimitValidationError) //check if there was previous validation error
|
|
405
|
+
this.showEnglishCharsLimitMsg = true;
|
|
406
|
+
}
|
|
407
|
+
else //onFocusOut
|
|
408
|
+
this.showEnglishCharsLimitMsg = false;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
MultiLingualTextBoxComponent.controlContainerstatic = null;
|
|
412
|
+
MultiLingualTextBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiLingualTextBoxComponent, deps: [{ token: i1.FormGroupDirective }, { token: i1.ControlContainer, optional: true }, { token: i2.ControlUtility }, { token: i3.UtilityService }, { token: i3.BBSFTranslateService }, { token: i3.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component });
|
|
413
|
+
MultiLingualTextBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "\r\n<div [formGroup]=\"group\">\r\n <div class=\"bbsf-control bbsf-multilang-textbox form-group mb-0\" [formGroup]=\"MultiLanguagegroup\">\r\n <div class=\"row\">\r\n <!--English textbox-->\r\n <div [ngClass]=\"(options.MultiControlPlacementType==1)?'col-md-12':'col-md-6'\" *ngIf=\"ShowEnglishTextBox\" class=\"bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.LabelExtraClasses}}\" [hidden]=\"options.IsHideEnglishLabel\">\r\n {{(options.EnglishLabelValue!=null&&options.EnglishLabelValue!=\"\")?options.EnglishLabelValue:options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)&&IsShowAsteriskInEnglish)\" class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.EnableCopyToClipboard? 'p-40px' : '' \">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\" [ngClass]=\"(options.IconPositionEN==1)?'left-icon':'right-icon'\" *ngIf=\"options.Icon!=null\">\r\n <span [inlineSVG]=\"options.Icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control\" dir=\"ltr\"\r\n (focus)=\"onEnglishFocus(true)\" (focusout)=\"onEnglishFocus(false)\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"English\"\r\n [hidden]=\"options.IsHideEnglishFields\" maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\"\r\n [class.is-invalid]=\"EnglishFormControl.invalid && EnglishFormControl.touched\"\r\n placeholder=\"{{options.EnglishPlaceholder}}\" (change)=\"trimControlValue('En')\"\r\n (keyup)=\"onTextChange()\"\r\n (keydown)=\"EnglishWordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\"\r\n autocomplete=\"{{options.AutoComplete}}\"\r\n id=\"{{options.Name}}.English\" [(ngModel)]=\"options.Value.English\"\r\n #userinputEnglish>\r\n <!--CopyToClipboard-->\r\n <div class=\"copy-clipboard\" [hidden]=\"options.IsHideEnglishFields\" *ngIf=\"options.EnableCopyToClipboard\" (click)=\"copyInputMessage(userinputEnglish)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowEnglishWordCount\">{{EnglishWordCount}}/{{options.MaxWordCount}} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showEnglishCharsLimitMsg\" [ngClass]=\"{'badge-light-warning': englishCharsLimitMsgClass === 'warning', 'badge-light-danger' : englishCharsLimitMsgClass === 'danger' }\">\r\n {{englishMaxLimitWarningMsg}}\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='') ||(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!='')\">\r\n {{(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!=\"\")?options.EnglishLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(EnglishFormControl.invalid && EnglishFormControl.touched)\">\r\n {{getErrorValidation(EnglishFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"group.valid\">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n\r\n <!--Arabic textbox-->\r\n <div [ngClass]=\"(options.MultiControlPlacementType==1)?'col-md-12':'col-md-6'\" *ngIf=\"ShowArabicTextBox\" class=\"bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.LabelExtraClasses}}\" [hidden]=\"options.IsHideArabicLabel\">\r\n {{(options.ArabicLabelValue!=null&&options.ArabicLabelValue!=\"\")?options.ArabicLabelValue:options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&IsShowAsteriskInArabic\" class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.EnableCopyToClipboard? 'p-40px' : '' \">\r\n <!--Icon-->\r\n <div *ngIf=\"options.Icon!=null\" class=\"svg svg-icon-grey bbsf-icon\" [ngClass]=\"(options.IconPositionEN==1)?'right-icon':'left-icon'\">\r\n <span [inlineSVG]=\"options.Icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control\" dir=\"rtl\"\r\n (focus)=\"onArabicFocus(true)\" (focusout)=\"onArabicFocus(false)\"\r\n [hidden]=\"options.IsHideArabicFields\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"Arabic\" maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\"\r\n [class.is-invalid]=\"ArabicFormControl.invalid && ArabicFormControl.touched\"\r\n placeholder=\"{{options.ArabicPlaceholder}}\" (keyup)=\"onTextChange()\"\r\n (keydown)=\"ArabicWordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\"\r\n autocomplete=\"{{options.AutoComplete}}\"\r\n id=\"{{options.Name}}.Arabic\"\r\n (change)=\"trimControlValue('Ar')\" #userinputArabic>\r\n <!--CopyToClipboard-->\r\n <div class=\"copy-clipboard\" [hidden]=\"options.IsHideArabicFields\" *ngIf=\"options.EnableCopyToClipboard\"(click)=\"copyInputMessage(userinputArabic)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowArabicWordCount\">{{ArabicWordCount}}/{{options.MaxWordCount}} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showArabicCharsLimitMsg\" [ngClass]=\"{'badge-light-warning': arabicCharsLimitMsgClass === 'warning', 'badge-light-danger' : arabicCharsLimitMsgClass === 'danger' }\">\r\n {{arabicMaxLimitWarningMsg}}\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='')||(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!='')\">\r\n {{(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!=\"\")?options.ArabicLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(ArabicFormControl.invalid && ArabicFormControl.touched)\">\r\n {{getErrorValidation(ArabicFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"group.valid\">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", directives: [{ type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i8.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }], pipes: { "keyvalue": i5.KeyValuePipe } });
|
|
414
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiLingualTextBoxComponent, decorators: [{
|
|
415
|
+
type: Component,
|
|
416
|
+
args: [{ selector: 'BBSF-MultiLingualTextBox', template: "\r\n<div [formGroup]=\"group\">\r\n <div class=\"bbsf-control bbsf-multilang-textbox form-group mb-0\" [formGroup]=\"MultiLanguagegroup\">\r\n <div class=\"row\">\r\n <!--English textbox-->\r\n <div [ngClass]=\"(options.MultiControlPlacementType==1)?'col-md-12':'col-md-6'\" *ngIf=\"ShowEnglishTextBox\" class=\"bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.LabelExtraClasses}}\" [hidden]=\"options.IsHideEnglishLabel\">\r\n {{(options.EnglishLabelValue!=null&&options.EnglishLabelValue!=\"\")?options.EnglishLabelValue:options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)&&IsShowAsteriskInEnglish)\" class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.EnableCopyToClipboard? 'p-40px' : '' \">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\" [ngClass]=\"(options.IconPositionEN==1)?'left-icon':'right-icon'\" *ngIf=\"options.Icon!=null\">\r\n <span [inlineSVG]=\"options.Icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control\" dir=\"ltr\"\r\n (focus)=\"onEnglishFocus(true)\" (focusout)=\"onEnglishFocus(false)\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"English\"\r\n [hidden]=\"options.IsHideEnglishFields\" maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\"\r\n [class.is-invalid]=\"EnglishFormControl.invalid && EnglishFormControl.touched\"\r\n placeholder=\"{{options.EnglishPlaceholder}}\" (change)=\"trimControlValue('En')\"\r\n (keyup)=\"onTextChange()\"\r\n (keydown)=\"EnglishWordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\"\r\n autocomplete=\"{{options.AutoComplete}}\"\r\n id=\"{{options.Name}}.English\" [(ngModel)]=\"options.Value.English\"\r\n #userinputEnglish>\r\n <!--CopyToClipboard-->\r\n <div class=\"copy-clipboard\" [hidden]=\"options.IsHideEnglishFields\" *ngIf=\"options.EnableCopyToClipboard\" (click)=\"copyInputMessage(userinputEnglish)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowEnglishWordCount\">{{EnglishWordCount}}/{{options.MaxWordCount}} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showEnglishCharsLimitMsg\" [ngClass]=\"{'badge-light-warning': englishCharsLimitMsgClass === 'warning', 'badge-light-danger' : englishCharsLimitMsgClass === 'danger' }\">\r\n {{englishMaxLimitWarningMsg}}\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='') ||(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!='')\">\r\n {{(options.EnglishLabelDescription!=null&&options.EnglishLabelDescription!=\"\")?options.EnglishLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(EnglishFormControl.invalid && EnglishFormControl.touched)\">\r\n {{getErrorValidation(EnglishFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"group.valid\">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n\r\n <!--Arabic textbox-->\r\n <div [ngClass]=\"(options.MultiControlPlacementType==1)?'col-md-12':'col-md-6'\" *ngIf=\"ShowArabicTextBox\" class=\"bbsf-multilang-form-group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label class=\"bbsf-label {{options.LabelExtraClasses}}\" [hidden]=\"options.IsHideArabicLabel\">\r\n {{(options.ArabicLabelValue!=null&&options.ArabicLabelValue!=\"\")?options.ArabicLabelValue:options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&IsShowAsteriskInArabic\" class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.EnableCopyToClipboard? 'p-40px' : '' \">\r\n <!--Icon-->\r\n <div *ngIf=\"options.Icon!=null\" class=\"svg svg-icon-grey bbsf-icon\" [ngClass]=\"(options.IconPositionEN==1)?'right-icon':'left-icon'\">\r\n <span [inlineSVG]=\"options.Icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control\" dir=\"rtl\"\r\n (focus)=\"onArabicFocus(true)\" (focusout)=\"onArabicFocus(false)\"\r\n [hidden]=\"options.IsHideArabicFields\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"Arabic\" maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\"\r\n [class.is-invalid]=\"ArabicFormControl.invalid && ArabicFormControl.touched\"\r\n placeholder=\"{{options.ArabicPlaceholder}}\" (keyup)=\"onTextChange()\"\r\n (keydown)=\"ArabicWordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\"\r\n autocomplete=\"{{options.AutoComplete}}\"\r\n id=\"{{options.Name}}.Arabic\"\r\n (change)=\"trimControlValue('Ar')\" #userinputArabic>\r\n <!--CopyToClipboard-->\r\n <div class=\"copy-clipboard\" [hidden]=\"options.IsHideArabicFields\" *ngIf=\"options.EnableCopyToClipboard\"(click)=\"copyInputMessage(userinputArabic)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowArabicWordCount\">{{ArabicWordCount}}/{{options.MaxWordCount}} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showArabicCharsLimitMsg\" [ngClass]=\"{'badge-light-warning': arabicCharsLimitMsgClass === 'warning', 'badge-light-danger' : arabicCharsLimitMsgClass === 'danger' }\">\r\n {{arabicMaxLimitWarningMsg}}\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"(options.LabelDescription!=null&&options.LabelDescription!='')||(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!='')\">\r\n {{(options.ArabicLabelDescription!=null&&options.ArabicLabelDescription!=\"\")?options.ArabicLabelDescription:options.LabelDescription}}\r\n </div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(ArabicFormControl.invalid && ArabicFormControl.touched)\">\r\n {{getErrorValidation(ArabicFormControl.errors|keyvalue)}}\r\n </div>\r\n <div *ngIf=\"group.valid\">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n" }]
|
|
417
|
+
}], ctorParameters: function () { return [{ type: i1.FormGroupDirective }, { type: i1.ControlContainer, decorators: [{
|
|
418
|
+
type: Optional
|
|
419
|
+
}] }, { type: i2.ControlUtility }, { type: i3.UtilityService }, { type: i3.BBSFTranslateService }, { type: i3.ControlValidationService }, { type: i4.GlobalSettings }]; }, propDecorators: { group: [{
|
|
420
|
+
type: Input
|
|
421
|
+
}], options: [{
|
|
422
|
+
type: Input
|
|
423
|
+
}], OnChange: [{
|
|
424
|
+
type: Output
|
|
425
|
+
}] } });
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXVsdGlMaW5ndWFsVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvTXVsdGlMaW5ndWFsVGV4dEJveC9NdWx0aUxpbmd1YWxUZXh0Qm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9NdWx0aUxpbmd1YWxUZXh0Qm94L011bHRpTGluZ3VhbFRleHRCb3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUF5RCxNQUFNLGdCQUFnQixDQUFDO0FBRTNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7O0FBTWpFLE1BQU0sT0FBTyw0QkFBNEI7SUFJdkMsWUFBbUIsa0NBQXNELEVBQXNCLGdCQUFrQyxFQUN2SCxjQUE4QixFQUFVLGNBQThCLEVBQVUsU0FBK0IsRUFDL0csd0JBQWtELEVBQVUsY0FBOEI7UUFGakYsdUNBQWtDLEdBQWxDLGtDQUFrQyxDQUFvQjtRQUFzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3ZILG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLGNB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LDRCQUE0Qjs4R0FBNUIsNEJBQTRCLG1KQ2hCekMsaTlPQTRHQTs0RkQ1RmEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLDBCQUEwQjs7MEJBT3dDLFFBQVE7Nk1BTTNFLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvTXVsdGlsaW5ndWFsVGV4dEJveE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgRW5nbGlzaEFyYWJpY0RUTyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvRW5nbGlzaEFyYWJpY0RUTyc7XHJcbmltcG9ydCB7IENvbnRyb2xVdGlsaXR5IH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VNb2RlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL0xhbmd1YWdlTW9kZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29udHJvbExheW91dCB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9Db250cm9sTGF5b3V0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vTXVsdGlMaW5ndWFsVGV4dEJveC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpTGluZ3VhbFRleHRCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBNdWx0aUxpbmd1YWxUZXh0Qm94Rm9ybUNvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgIHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5LCBwcml2YXRlIFV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGU6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgcHJpdmF0ZSBnbG9iYWxTZXR0aW5nczogR2xvYmFsU2V0dGluZ3MpIHtcclxuICAgIE11bHRpTGluZ3VhbFRleHRCb3hDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gdHJhbnNsYXRlLmN1cnJlbnRMYW5nICE9IHVuZGVmaW5lZCA/IHRyYW5zbGF0ZS5jdXJyZW50TGFuZyA6IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZ1xyXG4gIH1cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIEBPdXRwdXQoKSBPbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQXJhYmljRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBFbmdsaXNoRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBNdWx0aUZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgTXVsdGlMYW5ndWFnZWdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQXJhYmljV29yZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIEFyYWJpY1dvcmRDb3VudEFycmF5OiBudW1iZXIgPSAwO1xyXG4gIEVuZ2xpc2hXb3JkQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgRW5nbGlzaFdvcmRDb3VudEFycmF5OiBudW1iZXIgPSAwO1xyXG4gIEN1cnJlbnRMYW5ndWFnZTogc3RyaW5nID0gXCJcIjtcclxuICBTaG93QXJhYmljVGV4dEJveDogYm9vbGVhblxyXG4gIFNob3dFbmdsaXNoVGV4dEJveDogYm9vbGVhblxyXG4gIEFyYWJpY1ZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIEFyYWJpY1ZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgRW5nbGlzaFZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIEVuZ2xpc2hWYWxpZGF0aW9uUnVsZXNhc3luYyA9IFtdO1xyXG5cclxuICBJc1Nob3dBcmFiaWNXb3JkQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc1Nob3dFbmdsaXNoV29yZENvdW50OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIElzU2hvd0FzdGVyaXNrSW5BcmFiaWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc1Nob3dBc3Rlcmlza0luRW5nbGlzaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIEFyYWJpY0xldHRlck9ubHk6IHN0cmluZyA9IFwiXCJcclxuICBFbmdsaXNoTGV0dGVyT25seTogc3RyaW5nID0gXCJcIlxyXG5cclxuICAvL0ZvciBTaG93IHdhcm5pbmcgbWVzc2FnZSBvZiBtYXggbGVuZ3RoIGxpbWl0XHJcbiAgbWluQ2hhcnNMaW1pdDogbnVtYmVyID0gLTE7IC8vVG8gZGlzYWJsZSBjaGFycyBsaW1pdCBmZWF0dXJlIGJ5IGRlZmF1bHRcclxuICBlbmdsaXNoQ3VycmVudENoYXJzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgYXJhYmljQ3VycmVudENoYXJzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgc2hvd0VuZ2xpc2hDaGFyc0xpbWl0TXNnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0FyYWJpY0NoYXJzTGltaXRNc2c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNFbmdsaXNoQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc0FyYWJpY0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmdsaXNoQ2hhcnNMaW1pdE1zZ0NsYXNzOiBzdHJpbmc7XHJcbiAgYXJhYmljQ2hhcnNMaW1pdE1zZ0NsYXNzOiBzdHJpbmc7XHJcbiAgZW5nbGlzaE1heExpbWl0V2FybmluZ01zZzogc3RyaW5nID0gXCJcIjtcclxuICBhcmFiaWNNYXhMaW1pdFdhcm5pbmdNc2c6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIGdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCkge1xyXG4gICAgdGhpcy5BcmFiaWNMZXR0ZXJPbmx5ID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQXJhYmljSXNSZXF1aXJlZEFuZE9ubHk1MENoYXJhY3RlcnNFbmdsaXNoXCIpO1xyXG4gICAgdGhpcy5FbmdsaXNoTGV0dGVyT25seSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVuZ2xpc2hMZXR0ZXJPbmx5XCIpO1xyXG5cclxuXHJcbiAgfVxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuaXNDcmVhdGVkQmVmb3IgPSBmYWxzZVxyXG4gICAgdGhpcy5DdXJyZW50TGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG5cclxuICAgIC8vIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBMYW5nQ2hhbmdlRXZlbnQpID0+IHtcclxuICAgIC8vICAgdGhpcy5DdXJyZW50TGFuZ3VhZ2UgPSBldmVudC5sYW5nO1xyXG4gICAgLy8gICB0aGlzLnNob3dJbnB1dFVzaW5nTGFuZ3VhZ2VNb2RlKClcclxuICAgIC8vIH0pO1xyXG4gICAgdGhpcy5NdWx0aUxhbmd1YWdlZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTs7XHJcbiAgICB0aGlzLk11bHRpTGFuZ3VhZ2Vncm91cC5hZGRDb250cm9sKFwiQXJhYmljXCIsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgdGhpcy5NdWx0aUxhbmd1YWdlZ3JvdXAuYWRkQ29udHJvbChcIkVuZ2xpc2hcIiwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLkFyYWJpY0Zvcm1Db250cm9sID0gdGhpcy5NdWx0aUxhbmd1YWdlZ3JvdXAuY29udHJvbHNbXCJBcmFiaWNcIl07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sID0gdGhpcy5NdWx0aUxhbmd1YWdlZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIG5ldyBGb3JtR3JvdXAodGhpcy5NdWx0aUxhbmd1YWdlZ3JvdXAuY29udHJvbHMpKTtcclxuICAgIHRoaXMuZ2V0Q3VzdG9tRXJyb3JzTWFzc2FnZXMoKVxyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLlZpZXdUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuVmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLlZpZXdUeXBlO1xyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuTGFuZ3VhZ2VNb2RlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuTGFuZ3VhZ2VNb2RlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5MYW5ndWFnZU1vZGU7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5NdWx0aUNvbnRyb2xQbGFjZW1lbnRUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuTXVsdGlDb250cm9sUGxhY2VtZW50VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuTXVsdGlDb250cm9sUGxhY2VtZW50VHlwZTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLk1heExlbmd0aClcclxuICAgICAgdGhpcy5vcHRpb25zLk1heExlbmd0aCA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuTWF4TGVuZ3RoVGV4dEJveDtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IFwiXCIpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLkFyYWJpY0xhYmVsVmFsdWUgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUodGhpcy5vcHRpb25zLkxhYmVsS2V5KSArIFwiIFwiICsgdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSW5BcmFiaWNcIik7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5FbmdsaXNoTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuTGFiZWxLZXkpICsgXCIgXCIgKyB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJJbkVuZ2xpc2hcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5BcmFiaWNMYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5BcmFiaWNMYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5BcmFiaWNMYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5BcmFiaWNMYWJlbEtleSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLkVuZ2xpc2hMYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5FbmdsaXNoTGFiZWxLZXkgIT0gXCJcIilcclxuICAgICAgICB0aGlzLm9wdGlvbnMuRW5nbGlzaExhYmVsVmFsdWUgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUodGhpcy5vcHRpb25zLkVuZ2xpc2hMYWJlbEtleSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgVmFsaWRhdGlvbnMgPSB0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvblxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgVmFsaWRhdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgVmFsaWRhdGlvbiA9IFZhbGlkYXRpb25zW2luZGV4XTtcclxuICAgICAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0aW9uLmZ1bmN0aW9uQm9keSk7XHJcbiAgICAgICAgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0aW9uLmZ1bmN0aW9uQm9keSk7XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTWluTGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMub3B0aW9ucy5NaW5MZW5ndGgpKTtcclxuICAgICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5vcHRpb25zLk1pbkxlbmd0aCkpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLk1heExlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5vcHRpb25zLk1heExlbmd0aCkpO1xyXG4gICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMub3B0aW9ucy5NYXhMZW5ndGgpKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLk1heExlbmd0aFdhcm5pbmdMaW1pdClcclxuICAgICAgICB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoV2FybmluZ0xpbWl0ID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5NYXhMZW5ndGhXYXJuaW5nTGltaXQ7XHJcblxyXG4gICAgICB0aGlzLm1pbkNoYXJzTGltaXQgPSB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoIC0gdGhpcy5vcHRpb25zLk1heExlbmd0aFdhcm5pbmdMaW1pdDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dJbnB1dFVzaW5nTGFuZ3VhZ2VNb2RlKCk7XHJcblxyXG4gICAgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmFyYWJpY1ZhbGlkYXRvcih7IEFyYWJpY0lzUmVxdWlyZWRBbmRPbmx5NTBDaGFyYWN0ZXJzRW5nbGlzaDogdGhpcy5BcmFiaWNMZXR0ZXJPbmx5IH0pLFxyXG5cclxuICAgIF0pKTtcclxuICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvXlt+YCFAIyQlXiYqKCnigJjigJnigJzigJ1fKz1bXFxdXFxcXHt9fDsnOlwiLC5cXC88Pj9hLXpBLVowLTktIF0qJC8sIHsgRW5nbGlzaExldHRlck9ubHk6IHRoaXMuRW5nbGlzaExldHRlck9ubHkgfSksXHJcblxyXG4gICAgXSkpO1xyXG5cclxuICAgIHRoaXMuQXJhYmljRm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkFyYWJpY0Zvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXNhc3luYyk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5FbmdsaXNoRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICB0aGlzLkFyYWJpY0Zvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuQXJhYmljRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlLkFyYWJpYylcclxuICAgIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMub3B0aW9ucy5WYWx1ZS5FbmdsaXNoKVxyXG5cclxuICAgIHRoaXMuTXVsdGlMaW5ndWFsVGV4dEJveEZvcm1Db250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgb25UZXh0Q2hhbmdlKCkge1xyXG4gICAgLy8gdGhpcy50cmltQ29udHJvbFZhbHVlKHR5cGUpXHJcbiAgICBsZXQgYXJhYmljVmFsdWUgPSBcIlwiO1xyXG4gICAgbGV0IGVuZ2xpc2hWYWx1ZSA9IFwiXCI7XHJcbiAgICBpZiAodGhpcy5FbmdsaXNoRm9ybUNvbnRyb2wudmFsdWUgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLkVuZ2xpc2hXb3JkQ291bnRBcnJheSA9IDA7XHJcbiAgICAgIHRoaXMuRW5nbGlzaFdvcmRDb3VudCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnZhbHVlICE9IG51bGwgJiYgdGhpcy5FbmdsaXNoRm9ybUNvbnRyb2wudmFsdWUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5FbmdsaXNoV29yZENvdW50QXJyYXkgPSB0aGlzLkVuZ2xpc2hGb3JtQ29udHJvbC52YWx1ZS5zcGxpdChcIiBcIikubGVuZ3RoO1xyXG4gICAgICAgIGlmICh0aGlzLkVuZ2xpc2hXb3JkQ291bnRBcnJheSA+IDApIHtcclxuICAgICAgICAgIGlmICh0aGlzLkVuZ2xpc2hXb3JkQ291bnRBcnJheSA+IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy5FbmdsaXNoV29yZENvdW50ID0gdGhpcy5vcHRpb25zLk1heFdvcmRDb3VudDtcclxuICAgICAgICAgICAgdGhpcy5NdWx0aUxhbmd1YWdlZ3JvdXAuY29udHJvbHNbXCJFbmdsaXNoXCJdLnNldEVycm9ycyh7IE1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZWdyb3VwLmNvbnRyb2xzW1wiRW5nbGlzaFwiXS5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZWdyb3VwLmNvbnRyb2xzW1wiRW5nbGlzaFwiXS5pbnZhbGlkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFdvcmRDb3VudCA9IHRoaXMuRW5nbGlzaFdvcmRDb3VudEFycmF5O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZW5nbGlzaFZhbHVlID0gdGhpcy5FbmdsaXNoRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvL0NoZWNrIGZvciBtYXhsZW5ndGggbGltaXQgY291bnRcclxuICAgICAgLy9NYXhMZW5ndGggc2hvdWxkIGJlIGdyZXRhZXIgdGhhbiBvciBlcXVhbHMgY2hhcnMgbGltaXQgc28gdGhhdCBtaW5DaGFyc0xpbWl0IHdvdWxkIGJlID49IDBcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5NYXhMZW5ndGggJiYgdGhpcy5taW5DaGFyc0xpbWl0ID49IDApIHtcclxuICAgICAgICB0aGlzLmVuZ2xpc2hDdXJyZW50Q2hhcnNDb3VudCA9IHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5lbmdsaXNoQ3VycmVudENoYXJzQ291bnQgPiB0aGlzLm1pbkNoYXJzTGltaXQpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0VuZ2xpc2hDaGFyc0xpbWl0TXNnID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaGFzRW5nbGlzaENoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZW5nbGlzaEN1cnJlbnRDaGFyc0NvdW50ID09IHRoaXMub3B0aW9ucy5NYXhMZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuZW5nbGlzaENoYXJzTGltaXRNc2dDbGFzcyA9IFwiZGFuZ2VyXCI7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuZW5nbGlzaENoYXJzTGltaXRNc2dDbGFzcyA9IFwid2FybmluZ1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0VuZ2xpc2hDaGFyc0xpbWl0TXNnID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmhhc0VuZ2xpc2hDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtYXg6IG51bWJlciA9IHRoaXMub3B0aW9ucy5NYXhMZW5ndGg7XHJcbiAgICAgICAgdmFyIGN1cnJlbnQ6IG51bWJlciA9IHRoaXMuZW5nbGlzaEN1cnJlbnRDaGFyc0NvdW50O1xyXG5cclxuICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNYXhMZW5ndGhMaW1pdFdhcm5pbmdcIik7XHJcbiAgICAgICAgdGhpcy5lbmdsaXNoTWF4TGltaXRXYXJuaW5nTXNnID0gZXZhbCgnYCcgKyByZXNvdXJjZSArICdgJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5BcmFiaWNGb3JtQ29udHJvbC52YWx1ZSA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuQXJhYmljV29yZENvdW50QXJyYXkgPSAwO1xyXG4gICAgICB0aGlzLkFyYWJpY1dvcmRDb3VudCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuQXJhYmljRm9ybUNvbnRyb2wudmFsdWUgIT0gbnVsbCAmJiB0aGlzLkFyYWJpY0Zvcm1Db250cm9sLnZhbHVlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuQXJhYmljV29yZENvdW50QXJyYXkgPSB0aGlzLkFyYWJpY0Zvcm1Db250cm9sLnZhbHVlLnNwbGl0KFwiIFwiKS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHRoaXMuQXJhYmljV29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5BcmFiaWNXb3JkQ291bnRBcnJheSA+IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy5BcmFiaWNXb3JkQ291bnQgPSB0aGlzLm9wdGlvbnMuTWF4V29yZENvdW50O1xyXG4gICAgICAgICAgICB0aGlzLk11bHRpTGFuZ3VhZ2Vncm91cC5jb250cm9sc1tcIkFyYWJpY1wiXS5zZXRFcnJvcnMoeyBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMuTWF4V29yZENvdW50IH0pO1xyXG4gICAgICAgICAgICB0aGlzLk11bHRpTGFuZ3VhZ2Vncm91cC5jb250cm9sc1tcIkFyYWJpY1wiXS5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuTXVsdGlMYW5ndWFnZWdyb3VwLmNvbnRyb2xzW1wiQXJhYmljXCJdLmludmFsaWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5BcmFiaWNXb3JkQ291bnQgPSB0aGlzLkFyYWJpY1dvcmRDb3VudEFycmF5O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXJhYmljVmFsdWUgPSB0aGlzLkFyYWJpY0Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy9DaGVjayBmb3IgbWF4bGVuZ3RoIGxpbWl0IGNvdW50XHJcbiAgICAgIC8vTWF4TGVuZ3RoIHNob3VsZCBiZSBncmV0YWVyIHRoYW4gb3IgZXF1YWxzIGNoYXJzIGxpbWl0IHNvIHRoYXQgbWluQ2hhcnNMaW1pdCB3b3VsZCBiZSA+PSAwXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoICYmIHRoaXMubWluQ2hhcnNMaW1pdCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5hcmFiaWNDdXJyZW50Q2hhcnNDb3VudCA9IHRoaXMuQXJhYmljRm9ybUNvbnRyb2wudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGlmICh0aGlzLmFyYWJpY0N1cnJlbnRDaGFyc0NvdW50ID4gdGhpcy5taW5DaGFyc0xpbWl0KSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBcmFiaWNDaGFyc0xpbWl0TXNnID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaGFzQXJhYmljQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5hcmFiaWNDdXJyZW50Q2hhcnNDb3VudCA9PSB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmFyYWJpY0NoYXJzTGltaXRNc2dDbGFzcyA9IFwiZGFuZ2VyXCI7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuYXJhYmljQ2hhcnNMaW1pdE1zZ0NsYXNzID0gXCJ3YXJuaW5nXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXJhYmljQ2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5oYXNBcmFiaWNDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbWF4OiBudW1iZXIgPSB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoO1xyXG4gICAgICAgIHZhciBjdXJyZW50OiBudW1iZXIgPSB0aGlzLmFyYWJpY0N1cnJlbnRDaGFyc0NvdW50O1xyXG5cclxuICAgICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNYXhMZW5ndGhMaW1pdFdhcm5pbmdcIik7XHJcbiAgICAgICAgdGhpcy5hcmFiaWNNYXhMaW1pdFdhcm5pbmdNc2cgPSBldmFsKCdgJyArIHJlc291cmNlICsgJ2AnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG11bGl0TGFuZ01vZGVsID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgIG11bGl0TGFuZ01vZGVsLkFyYWJpYyA9IGFyYWJpY1ZhbHVlO1xyXG4gICAgbXVsaXRMYW5nTW9kZWwuRW5nbGlzaCA9IGVuZ2xpc2hWYWx1ZTtcclxuICAgIC8vIHRoaXMuQXJhYmljRm9ybUNvbnRyb2wgPSBhcmFiaWNWYWx1ZTtcclxuICAgIC8vIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sID0gZW5nbGlzaFZhbHVlO1xyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KG11bGl0TGFuZ01vZGVsKVxyXG4gICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnNldFZhbHVlKG11bGl0TGFuZ01vZGVsKTtcclxuICAgIC8vVXNlIHRoaXMgbGluZSB0byBlbmFibGUgdHdvIHdheSBiaW5kaW5nLlxyXG4gICAgdGhpcy5vcHRpb25zLlZhbHVlID0gbXVsaXRMYW5nTW9kZWw7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbFRleHRCb3hGb3JtQ29udHJvbEhvc3QubmdTdWJtaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSB0cnVlXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICByZXNldEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuUmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLkFyYWJpY0Zvcm1Db250cm9sLCB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLCB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuQXJhYmljRm9ybUNvbnRyb2wsIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5FbmdsaXNoRm9ybUNvbnRyb2wsIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuQXJhYmljRm9ybUNvbnRyb2wsIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkVuZ2xpc2hGb3JtQ29udHJvbCwgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkQ3VzdG9tVmFsaWRhdGlvbiA9IChDdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZEN1c3RvbVZhbGlkYXRpb24odGhpcy5BcmFiaWNGb3JtQ29udHJvbCwgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRDdXN0b21WYWxpZGF0aW9uKHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLCB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgSXNWYWxpZCA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuSXNWYWxpZCh0aGlzLkFyYWJpY0Zvcm1Db250cm9sKVxyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuRW5nbGlzaEZvcm1Db250cm9sKVxyXG4gIH1cclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKVxyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JWYWxpZGF0aW9uKEVycm9yTGlzdCkge1xyXG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zaG93R2xvYmFsRXJyb3IoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0SW5wdXRUeXBlKHR5cGU6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIElucHV0VHlwZVt0eXBlXVxyXG4gIH1cclxuXHJcbiAgdHJpbUNvbnRyb2xWYWx1ZSh0eXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHdoaXRlc3BhY2U6IHN0cmluZyA9ICcgJztcclxuICAgIGlmICh0eXBlID09IFwiRW5cIikge1xyXG4gICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuY29udHJvbFV0aWxpdHkudHJpbUNvbnRyb2xWYWx1ZSh0aGlzLkVuZ2xpc2hGb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgICAgIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnBhdGNoVmFsdWUob3JpZ2luYWxWYWx1ZSlcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiAmJiB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoICYmIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShvcmlnaW5hbFZhbHVlLCB0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiwgdGhpcy5vcHRpb25zLlBhdGNoUGF0aClcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5FbmdsaXNoRm9ybUNvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCh3aGl0ZXNwYWNlKSB8fCB0aGlzLkVuZ2xpc2hGb3JtQ29udHJvbC52YWx1ZS5lbmRzV2l0aCh3aGl0ZXNwYWNlKSkge1xyXG4gICAgICAgIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnBhdGNoVmFsdWUob3JpZ2luYWxWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0eXBlID09IFwiQXJcIikge1xyXG4gICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuY29udHJvbFV0aWxpdHkudHJpbUNvbnRyb2xWYWx1ZSggdGhpcy5BcmFiaWNGb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgICAgIHRoaXMuQXJhYmljRm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShvcmlnaW5hbFZhbHVlKVxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gJiYgdGhpcy5vcHRpb25zLlBhdGNoUGF0aCAmJiB0aGlzLkFyYWJpY0Zvcm1Db250cm9sLnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShvcmlnaW5hbFZhbHVlLCB0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiwgdGhpcy5vcHRpb25zLlBhdGNoUGF0aClcclxuXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuQXJhYmljRm9ybUNvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCh3aGl0ZXNwYWNlKSB8fCB0aGlzLkFyYWJpY0Zvcm1Db250cm9sLnZhbHVlLmVuZHNXaXRoKHdoaXRlc3BhY2UpKSB7XHJcbiAgICAgICAgdGhpcy5BcmFiaWNGb3JtQ29udHJvbC5wYXRjaFZhbHVlKG9yaWdpbmFsVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQ29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpXHJcbiAgfVxyXG5cclxuICBzaG93SW5wdXRVc2luZ0xhbmd1YWdlTW9kZSgpIHtcclxuICAgIHRoaXMuQXJhYmljVmFsaWRhdGlvblJ1bGVzID0gdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMgPSB0aGlzLkVuZ2xpc2hWYWxpZGF0aW9uUnVsZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgdGhpcy5BcmFiaWNGb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG5cclxuICAgIHRoaXMuQXJhYmljRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5FbmdsaXNoRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLkxhbmd1YWdlTW9kZSkge1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19hcmVfdmlzaWJsZTpcclxuICAgICAgICB0aGlzLlNob3dBcmFiaWNUZXh0Qm94ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlNob3dFbmdsaXNoVGV4dEJveCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5BcmFiaWNWYWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgIHRoaXMuSXNTaG93QXN0ZXJpc2tJbkFyYWJpYyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5FbmdsaXNoID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkFyYWJpY19MYW5ndWFnZV9vbmx5X2lzX3Zpc2libGU6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEJveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBMYW5ndWFnZU1vZGUuRW5nbGlzaF9MYW5ndWFnZV9vbmx5X2lzX3Zpc2libGU6XHJcbiAgICAgICAgdGhpcy5TaG93RW5nbGlzaFRleHRCb3ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5NdWx0aUNvbnRyb2xQbGFjZW1lbnRUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTGFuZ3VhZ2VNb2RlLkJvdGhfTGFuZ3VhZ2VzX2FyZV92aXNpYmxlX2J1dF9vbmx5X2N1cnJlbnRfbGFuZ3VhZ2VfaXNfcmVxdWlyZWQ6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEJveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93RW5nbGlzaFRleHRCb3ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5NdWx0aUNvbnRyb2xQbGFjZW1lbnRUeXBlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5NdWx0aUNvbnRyb2xQbGFjZW1lbnRUeXBlXHJcblxyXG4gICAgICAgIGlmICh0aGlzLkN1cnJlbnRMYW5ndWFnZSA9PSAnYXInKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5BcmFiaWMgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuQ3VycmVudExhbmd1YWdlID09ICdlbicpIHtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5FbmdsaXNoID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19idXRfb25seV9BcmFiaWNfaXNfcmVxdWlyZWQ6XHJcbiAgICAgICAgdGhpcy5TaG93QXJhYmljVGV4dEJveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5TaG93RW5nbGlzaFRleHRCb3ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5NdWx0aUNvbnRyb2xQbGFjZW1lbnRUeXBlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5NdWx0aUNvbnRyb2xQbGFjZW1lbnRUeXBlXHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgdGhpcy5Jc1Nob3dBc3Rlcmlza0luQXJhYmljID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5Cb3RoX0xhbmd1YWdlc19idXRfb25seV9FbmdsaXNoX2lzX3JlcXVpcmVkOlxyXG4gICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRCb3ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuU2hvd0VuZ2xpc2hUZXh0Qm94ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuTXVsdGlDb250cm9sUGxhY2VtZW50VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuTXVsdGlDb250cm9sUGxhY2VtZW50VHlwZVxyXG5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5FbmdsaXNoVmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5FbmdsaXNoID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIExhbmd1YWdlTW9kZS5DdXJyZW50X0xhbmd1YWdlX29ubHlfaXNfdmlzaWJsZV9hbmRfcmVxdWlyZWQ6XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICAgIGlmICh0aGlzLkN1cnJlbnRMYW5ndWFnZSA9PSAnYXInKSB7XHJcbiAgICAgICAgICB0aGlzLlNob3dBcmFiaWNUZXh0Qm94ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuU2hvd0VuZ2xpc2hUZXh0Qm94ID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5BcmFiaWMgPSB0cnVlO1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuQ3VycmVudExhbmd1YWdlID09ICdlbicpIHtcclxuICAgICAgICAgIHRoaXMuU2hvd0FyYWJpY1RleHRCb3ggPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuU2hvd0VuZ2xpc2hUZXh0Qm94ID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLklzU2hvd0FzdGVyaXNrSW5FbmdsaXNoID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuQXJhYmljRm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLkFyYWJpY1ZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkVuZ2xpc2hGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuRW5nbGlzaFZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkFyYWJpY0Zvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuRW5nbGlzaEZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgfVxyXG5cclxuICBvbkFyYWJpY0ZvY3VzKGlzRm9jdXM6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuSXNTaG93QXJhYmljV29yZENvdW50ID0gaXNGb2N1c1xyXG5cclxuICAgIC8vb25Gb2N1c1xyXG4gICAgaWYgKGlzRm9jdXMpIHtcclxuICAgICAgaWYgKHRoaXMuaGFzQXJhYmljQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcikgLy9jaGVjayBpZiB0aGVyZSB3YXMgcHJldmlvdXMgdmFsaWRhdGlvbiBlcnJvclxyXG4gICAgICAgIHRoaXMuc2hvd0FyYWJpY0NoYXJzTGltaXRNc2cgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSAvL29uRm9jdXNPdXRcclxuICAgICAgdGhpcy5zaG93QXJhYmljQ2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25FbmdsaXNoRm9jdXMoaXNGb2N1czogYm9vbGVhbikge1xyXG4gICAgdGhpcy5Jc1Nob3dFbmdsaXNoV29yZENvdW50ID0gaXNGb2N1c1xyXG5cclxuICAgIC8vb25Gb2N1c1xyXG4gICAgaWYgKGlzRm9jdXMpIHtcclxuICAgICAgaWYgKHRoaXMuaGFzRW5nbGlzaENoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IpIC8vY2hlY2sgaWYgdGhlcmUgd2FzIHByZXZpb3VzIHZhbGlkYXRpb24gZXJyb3JcclxuICAgICAgICB0aGlzLnNob3dFbmdsaXNoQ2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIC8vb25Gb2N1c091dFxyXG4gICAgICB0aGlzLnNob3dFbmdsaXNoQ2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG59XHJcblxyXG4iLCJcclxuPGRpdiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJic2YtY29udHJvbCBiYnNmLW11bHRpbGFuZy10ZXh0Ym94IGZvcm0tZ3JvdXAgbWItMFwiIFtmb3JtR3JvdXBdPVwiTXVsdGlMYW5ndWFnZWdyb3VwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDwhLS1FbmdsaXNoIHRleHRib3gtLT5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCIob3B0aW9ucy5NdWx0aUNvbnRyb2xQbGFjZW1lbnRUeXBlPT0xKT8nY29sLW1kLTEyJzonY29sLW1kLTYnXCIgKm5nSWY9XCJTaG93RW5nbGlzaFRleHRCb3hcIiBjbGFzcz1cImJic2YtbXVsdGlsYW5nLWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIihvcHRpb25zLlZpZXdUeXBlPT0xKT8nYmJzZi12ZXJ0aWNhbCc6J2Jic2YtaG9yaXpvbnRhbCdcIj5cclxuICAgICAgICAgIDwhLS1sYWJlbC0tPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmJzZi1sYWJlbCB7e29wdGlvbnMuTGFiZWxFeHRyYUNsYXNzZXN9fVwiIFtoaWRkZW5dPVwib3B0aW9ucy5Jc0hpZGVFbmdsaXNoTGFiZWxcIj5cclxuICAgICAgICAgICAge3sob3B0aW9ucy5FbmdsaXNoTGFiZWxWYWx1ZSE9bnVsbCYmb3B0aW9ucy5FbmdsaXNoTGFiZWxWYWx1ZSE9XCJcIik/b3B0aW9ucy5FbmdsaXNoTGFiZWxWYWx1ZTpvcHRpb25zLkxhYmVsVmFsdWV9fVxyXG4gICAgICAgICAgICA8IS0tQXN0ZXJpc2stLT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoKG9wdGlvbnMuU2hvd0FzdGVyaXNrJiZvcHRpb25zLklzUmVxdWlyZWQpfHwob3B0aW9ucy5Jc1JlcXVpcmVkKSYmSXNTaG93QXN0ZXJpc2tJbkVuZ2xpc2gpXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwib3B0aW9ucy5FbmFibGVDb3B5VG9DbGlwYm9hcmQ/ICdwLTQwcHgnIDogJycgXCI+XHJcbiAgICAgICAgICAgIDwhLS1JY29uLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdmcgc3ZnLWljb24tZ3JleSBiYnNmLWljb25cIiBbbmdDbGFzc109XCIob3B0aW9ucy5JY29uUG9zaXRpb25FTj09MSk/J2xlZnQtaWNvbic6J3JpZ2h0LWljb24nXCIgKm5nSWY9XCJvcHRpb25zLkljb24hPW51bGxcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIm9wdGlvbnMuSWNvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkaXI9XCJsdHJcIlxyXG4gICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRW5nbGlzaEZvY3VzKHRydWUpXCIgKGZvY3Vzb3V0KT1cIm9uRW5nbGlzaEZvY3VzKGZhbHNlKVwiXHJcbiAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiRW5nbGlzaFwiXHJcbiAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIm9wdGlvbnMuSXNIaWRlRW5nbGlzaEZpZWxkc1wiIG1heGxlbmd0aD1cInt7b3B0aW9ucy5NYXhMZW5ndGh9fVwiIG1pbmxlbmd0aD1cInt7b3B0aW9ucy5NaW5MZW5ndGh9fVwiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJFbmdsaXNoRm9ybUNvbnRyb2wuaW52YWxpZCAmJiBFbmdsaXNoRm9ybUNvbnRyb2wudG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7b3B0aW9ucy5FbmdsaXNoUGxhY2Vob2xkZXJ9fVwiIChjaGFuZ2UpPVwidHJpbUNvbnRyb2xWYWx1ZSgnRW4nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25UZXh0Q2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiRW5nbGlzaFdvcmRDb3VudEFycmF5Pm9wdGlvbnMuTWF4V29yZENvdW50JiYkZXZlbnQua2V5Q29kZSAhPTg/JGV2ZW50LnByZXZlbnREZWZhdWx0KCk6bnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJ7e29wdGlvbnMuQXV0b0NvbXBsZXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgaWQ9XCJ7e29wdGlvbnMuTmFtZX19LkVuZ2xpc2hcIiBbKG5nTW9kZWwpXT1cIm9wdGlvbnMuVmFsdWUuRW5nbGlzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAjdXNlcmlucHV0RW5nbGlzaD5cclxuICAgICAgICAgICAgPCEtLUNvcHlUb0NsaXBib2FyZC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIiBbaGlkZGVuXT1cIm9wdGlvbnMuSXNIaWRlRW5nbGlzaEZpZWxkc1wiICpuZ0lmPVwib3B0aW9ucy5FbmFibGVDb3B5VG9DbGlwYm9hcmRcIiAoY2xpY2spPVwiY29weUlucHV0TWVzc2FnZSh1c2VyaW5wdXRFbmdsaXNoKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvcHlcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8IS0td29yZENvdW50LS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi13b3JkLWNvdW50XCIgKm5nSWY9XCJvcHRpb25zLk1heFdvcmRDb3VudD4wJiZJc1Nob3dFbmdsaXNoV29yZENvdW50XCI+e3tFbmdsaXNoV29yZENvdW50fX0ve3tvcHRpb25zLk1heFdvcmRDb3VudH19IFdvcmRzPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIENoYXJzTGltaXRNc2ctLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNoYXJhY3Rlci1jb3VudFwiICpuZ0lmPVwic2hvd0VuZ2xpc2hDaGFyc0xpbWl0TXNnXCIgW25nQ2xhc3NdPVwieydiYWRnZS1saWdodC13YXJuaW5nJzogZW5nbGlzaENoYXJzTGltaXRNc2dDbGFzcyA9PT0gJ3dhcm5pbmcnLCAnYmFkZ2UtbGlnaHQtZGFuZ2VyJyA6IGVuZ2xpc2hDaGFyc0xpbWl0TXNnQ2xhc3MgPT09ICdkYW5nZXInIH1cIj5cclxuICAgICAgICAgICAge3tlbmdsaXNoTWF4TGltaXRXYXJuaW5nTXNnfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBMYWJlbERlc2NyaXB0aW9uLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIiAqbmdJZj1cIihvcHRpb25zLkxhYmVsRGVzY3JpcHRpb24hPW51bGwmJm9wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbiE9JycpIHx8KG9wdGlvbnMuRW5nbGlzaExhYmVsRGVzY3JpcHRpb24hPW51bGwmJm9wdGlvbnMuRW5nbGlzaExhYmVsRGVzY3JpcHRpb24hPScnKVwiPlxyXG4gICAgICAgICAgICB7eyhvcHRpb25zLkVuZ2xpc2hMYWJlbERlc2NyaXB0aW9uIT1udWxsJiZvcHRpb25zLkVuZ2xpc2hMYWJlbERlc2NyaXB0aW9uIT1cIlwiKT9vcHRpb25zLkVuZ2xpc2hMYWJlbERlc2NyaXB0aW9uOm9wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbn19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gcmVxdWlyZWRUZXh0LS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi12YWxpZGF0aW9uXCIgKm5nSWY9XCIoRW5nbGlzaEZvcm1Db250cm9sLmludmFsaWQgJiYgRW5nbGlzaEZvcm1Db250cm9sLnRvdWNoZWQpXCI+XHJcbiAgICAgICAgICAgIHt7Z2V0RXJyb3JWYWxpZGF0aW9uKEVuZ2xpc2hGb3JtQ29udHJvbC5lcnJvcnN8a2V5dmFsdWUpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLnZhbGlkXCI+e3tyZXNldEVycm9yKCl9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS1BcmFiaWMgdGV4dGJveC0tPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cIihvcHRpb25zLk11bHRpQ29udHJvbFBsYWNlbWVudFR5cGU9PTEpPydjb2wtbWQtMTInOidjb2wtbWQtNidcIiAqbmdJZj1cIlNob3dBcmFiaWNUZXh0Qm94XCIgY2xhc3M9XCJiYnNmLW11bHRpbGFuZy1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCIob3B0aW9ucy5WaWV3VHlwZT09MSk/J2Jic2YtdmVydGljYWwnOidiYnNmLWhvcml6b250YWwnXCI+XHJcbiAgICAgICAgICA8IS0tbGFiZWwtLT5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJic2YtbGFiZWwge3tvcHRpb25zLkxhYmVsRXh0cmFDbGFzc2VzfX1cIiBbaGlkZGVuXT1cIm9wdGlvbnMuSXNIaWRlQXJhYmljTGFiZWxcIj5cclxuICAgICAgICAgICAge3sob3B0aW9ucy5BcmFiaWNMYWJlbFZhbHVlIT1udWxsJiZvcHRpb25zLkFyYWJpY0xhYmVsVmFsdWUhPVwiXCIpP29wdGlvbnMuQXJhYmljTGFiZWxWYWx1ZTpvcHRpb25zLkxhYmVsVmFsdWV9fVxyXG4gICAgICAgICAgICA8IS0tQXN0ZXJpc2stLT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoKG9wdGlvbnMuU2hvd0FzdGVyaXNrJiZvcHRpb25zLklzUmVxdWlyZWQpfHwob3B0aW9ucy5Jc1JlcXVpcmVkKSkmJklzU2hvd0FzdGVyaXNrSW5BcmFiaWNcIiAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCIgW25nQ2xhc3NdPVwib3B0aW9ucy5FbmFibGVDb3B5VG9DbGlwYm9hcmQ/ICdwLTQwcHgnIDogJycgXCI+XHJcbiAgICAgICAgICAgIDwhLS1JY29uLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLkljb24hPW51bGxcIiBjbGFzcz1cInN2ZyBzdmctaWNvbi1ncmV5IGJic2YtaWNvblwiICBbbmdDbGFzc109XCIob3B0aW9ucy5JY29uUG9zaXRpb25FTj09MSk/J3JpZ2h0LWljb24nOidsZWZ0LWljb24nXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCJvcHRpb25zLkljb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0taW5wdXQtLT5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGlyPVwicnRsXCJcclxuICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkFyYWJpY0ZvY3VzKHRydWUpXCIgKGZvY3Vzb3V0KT1cIm9uQXJhYmljRm9jdXMoZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwib3B0aW9ucy5Jc0hpZGVBcmFiaWNGaWVsZHNcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIkFyYWJpY1wiIG1heGxlbmd0aD1cInt7b3B0aW9ucy5NYXhMZW5ndGh9fVwiIG1pbmxlbmd0aD1cInt7b3B0aW9ucy5NaW5MZW5ndGh9fVwiXHJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJBcmFiaWNGb3JtQ29udHJvbC5pbnZhbGlkICYmIEFyYWJpY0Zvcm1Db250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e29wdGlvbnMuQXJhYmljUGxhY2Vob2xkZXJ9fVwiIChrZXl1cCk9XCJvblRleHRDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJBcmFiaWNXb3JkQ291bnRBcnJheT5vcHRpb25zLk1heFdvcmRDb3VudCYmJGV2ZW50LmtleUNvZGUgIT04PyRldmVudC5wcmV2ZW50RGVmYXVsdCgpOm51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwie3tvcHRpb25zLkF1dG9Db21wbGV0ZX19XCJcclxuICAgICAgICAgICAgICAgICAgIGlkPVwie3tvcHRpb25zLk5hbWV9fS5BcmFiaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0cmltQ29udHJvbFZhbHVlKCdBcicpXCIgI3VzZXJpbnB1dEFyYWJpYz5cclxuICAgICAgICAgICAgPCEtLUNvcHlUb0NsaXBib2FyZC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIiBbaGlkZGVuXT1cIm9wdGlvbnMuSXNIaWRlQXJhYmljRmllbGRzXCIgKm5nSWY9XCJvcHRpb25zLkVuYWJsZUNvcHlUb0NsaXBib2FyZFwiKGNsaWNrKT1cImNvcHlJbnB1dE1lc3NhZ2UodXNlcmlucHV0QXJhYmljKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvcHlcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8IS0td29yZENvdW50LS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi13b3JkLWNvdW50XCIgKm5nSWY9XCJvcHRpb25zLk1heFdvcmRDb3VudD4wJiZJc1Nob3dBcmFiaWNXb3JkQ291bnRcIj57e0FyYWJpY1dvcmRDb3VudH19L3t7b3B0aW9ucy5NYXhXb3JkQ291bnR9fSBXb3JkczwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBDaGFyc0xpbWl0TXNnLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jaGFyYWN0ZXItY291bnRcIiAqbmdJZj1cInNob3dBcmFiaWNDaGFyc0xpbWl0TXNnXCIgW25nQ2xhc3NdPVwieydiYWRnZS1saWdodC13YXJuaW5nJzogYXJhYmljQ2hhcnNMaW1pdE1zZ0NsYXNzID09PSAnd2FybmluZycsICdiYWRnZS1saWdodC1kYW5nZXInIDogYXJhYmljQ2hhcnNMaW1pdE1zZ0NsYXNzID09PSAnZGFuZ2VyJyB9XCI+XHJcbiAgICAgICAgICAgIHt7YXJhYmljTWF4TGltaXRXYXJuaW5nTXNnfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBMYWJlbERlc2NyaXB0aW9uLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIiAqbmdJZj1cIihvcHRpb25zLkxhYmVsRGVzY3JpcHRpb24hPW51bGwmJm9wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbiE9JycpfHwob3B0aW9ucy5BcmFiaWNMYWJlbERlc2NyaXB0aW9uIT1udWxsJiZvcHRpb25zLkFyYWJpY0xhYmVsRGVzY3JpcHRpb24hPScnKVwiPlxyXG4gICAgICAgICAgICB7eyhvcHRpb25zLkFyYWJpY0xhYmVsRGVzY3JpcHRpb24hPW51bGwmJm9wdGlvbnMuQXJhYmljTGFiZWxEZXNjcmlwdGlvbiE9XCJcIik/b3B0aW9ucy5BcmFiaWNMYWJlbERlc2NyaXB0aW9uOm9wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbn19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gcmVxdWlyZWRUZXh0LS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi12YWxpZGF0aW9uXCIgKm5nSWY9XCIoQXJhYmljRm9ybUNvbnRyb2wuaW52YWxpZCAmJiBBcmFiaWNGb3JtQ29udHJvbC50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgICB7e2dldEVycm9yVmFsaWRhdGlvbihBcmFiaWNGb3JtQ29udHJvbC5lcnJvcnN8a2V5dmFsdWUpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLnZhbGlkXCI+e3tyZXNldEVycm9yKCl9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
|