@bnsights/bbsf-controls 1.0.193 → 1.0.194-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +331 -0
  2. package/esm2022/lib/Shared/Components/app-base-component.mjs +3 -3
  3. package/esm2022/lib/Shared/Components/ng-tag-input.mjs +12 -7
  4. package/esm2022/lib/Shared/Directives/appPreventDoubleClick.directive.mjs +3 -2
  5. package/esm2022/lib/Shared/Directives/template-name.directive.mjs +4 -3
  6. package/esm2022/lib/Shared/Models/DatePickerOptions.mjs +4 -4
  7. package/esm2022/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +4 -3
  8. package/esm2022/lib/Shared/Pipes/bbsf-date.pipe.mjs +4 -3
  9. package/esm2022/lib/Shared/default_intl.mjs +2 -2
  10. package/esm2022/lib/Shared/services/ControlUtility.mjs +2 -2
  11. package/esm2022/lib/Shared/services/file-upload.service.mjs +3 -3
  12. package/esm2022/lib/Shared/services/validationErrorMassage.service.mjs +2 -2
  13. package/esm2022/lib/Shared/utils/date-formatter.mjs +48 -0
  14. package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +24 -16
  15. package/esm2022/lib/controls/Calendar/Calendar.component.mjs +19 -12
  16. package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +14 -10
  17. package/esm2022/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +8 -5
  18. package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +21 -14
  19. package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +12 -6
  20. package/esm2022/lib/controls/FileUpload/FileUpload.component.mjs +15 -7
  21. package/esm2022/lib/controls/Form/Form.component.mjs +22 -6
  22. package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +14 -9
  23. package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +17 -9
  24. package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +22 -13
  25. package/esm2022/lib/controls/MarkdownEditor/markdown-editor.component.mjs +16 -8
  26. package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +14 -9
  27. package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +12 -7
  28. package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +18 -12
  29. package/esm2022/lib/controls/Paging/JwPagination.component.mjs +8 -4
  30. package/esm2022/lib/controls/Paging/Paging.component.mjs +25 -12
  31. package/esm2022/lib/controls/Phone/Phone.component.mjs +14 -9
  32. package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +17 -9
  33. package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +10 -6
  34. package/esm2022/lib/controls/Recaptcha/Recaptcha.component.mjs +13 -14
  35. package/esm2022/lib/controls/Repeater/repeater/repeater.component.mjs +13 -7
  36. package/esm2022/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +6 -4
  37. package/esm2022/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +5 -4
  38. package/esm2022/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +13 -7
  39. package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +19 -14
  40. package/esm2022/lib/controls/TextArea/TextArea.component.mjs +20 -12
  41. package/esm2022/lib/controls/TextBox/TextBox.component.mjs +16 -10
  42. package/esm2022/lib/controls/Toggleslide/Toggleslide.component.mjs +13 -7
  43. package/esm2022/lib/controls/bbsf-controls.module.mjs +70 -333
  44. package/esm2022/lib/controls/page-header-component/page-header-component.component.mjs +15 -11
  45. package/esm2022/lib/modules/bbsf-core.module.mjs +210 -0
  46. package/esm2022/lib/modules/bbsf-datetime.module.mjs +90 -0
  47. package/esm2022/lib/modules/bbsf-dropdown.module.mjs +57 -0
  48. package/esm2022/lib/modules/bbsf-editors.module.mjs +97 -0
  49. package/esm2022/lib/modules/bbsf-forms-basic.module.mjs +79 -0
  50. package/esm2022/lib/modules/bbsf-multilingual.module.mjs +60 -0
  51. package/esm2022/lib/modules/bbsf-phone.module.mjs +57 -0
  52. package/esm2022/lib/modules/bbsf-specialized.module.mjs +160 -0
  53. package/esm2022/lib/modules/bbsf-uploads.module.mjs +106 -0
  54. package/esm2022/lib/modules/bbsf-utility.module.mjs +103 -0
  55. package/esm2022/public-api.mjs +38 -2
  56. package/fesm2022/bnsights-bbsf-controls.mjs +8673 -7750
  57. package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -1
  58. package/lib/Shared/Components/app-base-component.d.ts +2 -2
  59. package/lib/Shared/Components/ng-tag-input.d.ts +2 -3
  60. package/lib/Shared/Directives/appPreventDoubleClick.directive.d.ts +1 -1
  61. package/lib/Shared/Directives/template-name.directive.d.ts +1 -1
  62. package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +1 -1
  63. package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +1 -1
  64. package/lib/Shared/default_intl.d.ts +1 -1
  65. package/lib/Shared/services/ControlUtility.d.ts +1 -1
  66. package/lib/Shared/services/file-upload.service.d.ts +1 -1
  67. package/lib/Shared/services/validationErrorMassage.service.d.ts +1 -1
  68. package/lib/Shared/utils/date-formatter.d.ts +23 -0
  69. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +5 -4
  70. package/lib/controls/Calendar/Calendar.component.d.ts +5 -4
  71. package/lib/controls/CheckBox/CheckBox.component.d.ts +3 -2
  72. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +2 -2
  73. package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +3 -3
  74. package/lib/controls/DropdownList/DropdownList.component.d.ts +2 -2
  75. package/lib/controls/FileUpload/FileUpload.component.d.ts +3 -4
  76. package/lib/controls/Form/Form.component.d.ts +2 -2
  77. package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +3 -3
  78. package/lib/controls/ImageUpload/ImageUpload.component.d.ts +4 -4
  79. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +5 -4
  80. package/lib/controls/MarkdownEditor/markdown-editor.component.d.ts +2 -2
  81. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +3 -3
  82. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +2 -2
  83. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +3 -2
  84. package/lib/controls/Paging/JwPagination.component.d.ts +1 -1
  85. package/lib/controls/Paging/Paging.component.d.ts +5 -4
  86. package/lib/controls/Phone/Phone.component.d.ts +2 -2
  87. package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +3 -3
  88. package/lib/controls/RadioButton/RadioButton.component.d.ts +2 -2
  89. package/lib/controls/Recaptcha/Recaptcha.component.d.ts +3 -2
  90. package/lib/controls/Repeater/repeater/repeater.component.d.ts +1 -1
  91. package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +1 -1
  92. package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +1 -1
  93. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +2 -2
  94. package/lib/controls/TagsInput/TagsInput.component.d.ts +5 -4
  95. package/lib/controls/TextArea/TextArea.component.d.ts +3 -2
  96. package/lib/controls/TextBox/TextBox.component.d.ts +2 -2
  97. package/lib/controls/Toggleslide/Toggleslide.component.d.ts +2 -2
  98. package/lib/controls/bbsf-controls.module.d.ts +35 -66
  99. package/lib/controls/page-header-component/page-header-component.component.d.ts +2 -2
  100. package/lib/modules/bbsf-core.module.d.ts +90 -0
  101. package/lib/modules/bbsf-datetime.module.d.ts +41 -0
  102. package/lib/modules/bbsf-dropdown.module.d.ts +33 -0
  103. package/lib/modules/bbsf-editors.module.d.ts +47 -0
  104. package/lib/modules/bbsf-forms-basic.module.d.ts +35 -0
  105. package/lib/modules/bbsf-multilingual.module.d.ts +31 -0
  106. package/lib/modules/bbsf-phone.module.d.ts +33 -0
  107. package/lib/modules/bbsf-specialized.module.d.ts +63 -0
  108. package/lib/modules/bbsf-uploads.module.d.ts +50 -0
  109. package/lib/modules/bbsf-utility.module.d.ts +45 -0
  110. package/package.json +2 -13
  111. package/public-api.d.ts +12 -0
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Lightweight date formatting utility
3
+ * Replaces moment.js for simple date formatting operations
4
+ */
5
+ export class DateFormatter {
6
+ /**
7
+ * Format date to ISO string with milliseconds
8
+ * Output: YYYY-MM-DDTHH:mm:ss.SSS
9
+ * @param date - Date object or string
10
+ * @returns Formatted date string
11
+ * @example
12
+ * DateFormatter.toISOWithMillis(new Date()) // '2024-10-27T10:30:45.123'
13
+ */
14
+ static toISOWithMillis(date) {
15
+ const d = new Date(date);
16
+ if (isNaN(d.getTime())) {
17
+ console.error('Invalid date provided to DateFormatter.toISOWithMillis:', date);
18
+ return '';
19
+ }
20
+ const year = d.getFullYear();
21
+ const month = String(d.getMonth() + 1).padStart(2, '0');
22
+ const day = String(d.getDate()).padStart(2, '0');
23
+ const hours = String(d.getHours()).padStart(2, '0');
24
+ const minutes = String(d.getMinutes()).padStart(2, '0');
25
+ const seconds = String(d.getSeconds()).padStart(2, '0');
26
+ const millis = String(d.getMilliseconds()).padStart(3, '0');
27
+ return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${millis}`;
28
+ }
29
+ /**
30
+ * Format date to DD-MM-YYYY
31
+ * @param date - Date object or string
32
+ * @returns Formatted date string
33
+ * @example
34
+ * DateFormatter.toDDMMYYYY(new Date()) // '27-10-2024'
35
+ */
36
+ static toDDMMYYYY(date) {
37
+ const d = new Date(date);
38
+ if (isNaN(d.getTime())) {
39
+ console.error('Invalid date provided to DateFormatter.toDDMMYYYY:', date);
40
+ return '';
41
+ }
42
+ const day = String(d.getDate()).padStart(2, '0');
43
+ const month = String(d.getMonth() + 1).padStart(2, '0');
44
+ const year = d.getFullYear();
45
+ return `${day}-${month}-${year}`;
46
+ }
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvU2hhcmVkL3V0aWxzL2RhdGUtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBRXRCOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQW1CO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0UsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFNUQsT0FBTyxHQUFHLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQW1CO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUUsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFN0IsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIExpZ2h0d2VpZ2h0IGRhdGUgZm9ybWF0dGluZyB1dGlsaXR5XHJcbiAqIFJlcGxhY2VzIG1vbWVudC5qcyBmb3Igc2ltcGxlIGRhdGUgZm9ybWF0dGluZyBvcGVyYXRpb25zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdHRlciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtYXQgZGF0ZSB0byBJU08gc3RyaW5nIHdpdGggbWlsbGlzZWNvbmRzXHJcbiAgICAgKiBPdXRwdXQ6IFlZWVktTU0tRERUSEg6bW06c3MuU1NTXHJcbiAgICAgKiBAcGFyYW0gZGF0ZSAtIERhdGUgb2JqZWN0IG9yIHN0cmluZ1xyXG4gICAgICogQHJldHVybnMgRm9ybWF0dGVkIGRhdGUgc3RyaW5nXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogRGF0ZUZvcm1hdHRlci50b0lTT1dpdGhNaWxsaXMobmV3IERhdGUoKSkgLy8gJzIwMjQtMTAtMjdUMTA6MzA6NDUuMTIzJ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9JU09XaXRoTWlsbGlzKGRhdGU6IERhdGUgfCBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGRhdGUgcHJvdmlkZWQgdG8gRGF0ZUZvcm1hdHRlci50b0lTT1dpdGhNaWxsaXM6JywgZGF0ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZC5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgY29uc3QgaG91cnMgPSBTdHJpbmcoZC5nZXRIb3VycygpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBTdHJpbmcoZC5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kcyA9IFN0cmluZyhkLmdldFNlY29uZHMoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgICBjb25zdCBtaWxsaXMgPSBTdHJpbmcoZC5nZXRNaWxsaXNlY29uZHMoKSkucGFkU3RhcnQoMywgJzAnKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fVQke2hvdXJzfToke21pbnV0ZXN9OiR7c2Vjb25kc30uJHttaWxsaXN9YDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCBkYXRlIHRvIERELU1NLVlZWVlcclxuICAgICAqIEBwYXJhbSBkYXRlIC0gRGF0ZSBvYmplY3Qgb3Igc3RyaW5nXHJcbiAgICAgKiBAcmV0dXJucyBGb3JtYXR0ZWQgZGF0ZSBzdHJpbmdcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBEYXRlRm9ybWF0dGVyLnRvRERNTVlZWVkobmV3IERhdGUoKSkgLy8gJzI3LTEwLTIwMjQnXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b0RETU1ZWVlZKGRhdGU6IERhdGUgfCBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIGRhdGUgcHJvdmlkZWQgdG8gRGF0ZUZvcm1hdHRlci50b0RETU1ZWVlZOicsIGRhdGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZC5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgICBjb25zdCB5ZWFyID0gZC5nZXRGdWxsWWVhcigpO1xyXG5cclxuICAgICAgICByZXR1cm4gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcclxuICAgIH1cclxufVxyXG5cclxuIl19
@@ -1,22 +1,24 @@
1
- import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
2
- import { FormControl, Validators } from '@angular/forms';
3
- import { AutocompleteDTO } from '../../Shared/Models/AutocompleteDTO';
1
+ import { Component, Input, Optional, Output, EventEmitter, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { HttpHeaders, HttpParams } from '@angular/common/http';
5
+ import { TypeaheadModule } from 'ngx-bootstrap/typeahead';
6
+ import { AutocompleteLibModule } from 'angular-ng-autocomplete';
4
7
  import { noop, Observable, of } from 'rxjs';
5
8
  import { map, switchMap, tap } from 'rxjs/operators';
6
- import { HttpHeaders, HttpParams } from '@angular/common/http';
7
- import { RequestOptionsModel } from '@bnsights/bbsf-utilities';
9
+ import { RequestOptionsModel } from '@bnsights/bbsf-utilities/http';
10
+ import { AutocompleteDTO } from '../../Shared/Models/AutocompleteDTO';
8
11
  import { CustomValidation } from '../../Shared/Models/CustomValidation';
9
12
  import * as i0 from "@angular/core";
10
13
  import * as i1 from "@angular/common/http";
11
14
  import * as i2 from "../../Shared/services/validationErrorMassage.service";
12
- import * as i3 from "@bnsights/bbsf-utilities";
15
+ import * as i3 from "@bnsights/bbsf-utilities/http";
13
16
  import * as i4 from "../../Shared/services/ControlUtility";
14
17
  import * as i5 from "@angular/forms";
15
- import * as i6 from "../../Shared/services/GlobalSettings.service";
16
- import * as i7 from "@angular/common";
17
- import * as i8 from "@angular/cdk/bidi";
18
- import * as i9 from "ngx-intl-tel-input";
19
- import * as i10 from "angular-ng-autocomplete";
18
+ import * as i6 from "@bnsights/bbsf-utilities/ui";
19
+ import * as i7 from "../../Shared/services/GlobalSettings.service";
20
+ import * as i8 from "@angular/common";
21
+ import * as i9 from "angular-ng-autocomplete";
20
22
  export class AutocompleteTextBoxComponent {
21
23
  static { this.controlContainerstatic = null; }
22
24
  // tslint:disable-next-line: max-line-length
@@ -269,15 +271,21 @@ export class AutocompleteTextBoxComponent {
269
271
  this.DropdownTemplateVariable.toggle();
270
272
  }
271
273
  }
272
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutocompleteTextBoxComponent, deps: [{ token: i1.HttpClient }, { token: i2.ErrorMassageValidation }, { token: i3.RequestHandlerService }, { token: i4.ControlUtility }, { token: i5.ControlContainer, optional: true }, { token: i5.FormGroupDirective }, { token: i3.UtilityService }, { token: i3.ControlValidationService }, { token: i6.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component }); }
273
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AutocompleteTextBoxComponent, selector: "BBSF-AutocompleteTextBox", inputs: { group: "group", name: "name", options: "options", DropdownTemplateVariable: "DropdownTemplateVariable" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-autocomplete-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{options.labelExtraClasses}}\">\r\n {{options.labelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.showAsterisk&&options.isRequired)||(options.isRequired))&&!options.isReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <!--Input container-->\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.isReadonly\">\r\n <!--input-->\r\n <ng-autocomplete class=\"form-control {{options.extraClasses}}\" *ngIf=\"!options.allowNewSelection\"\r\n [data]=\"dataList\" [initialValue]=\"SelectedValue\" [searchKeyword]=\"keyword\" placeholder=\"{{options.placeholder}}\"\r\n (selected)='selectEvent($event)' (inputChanged)='onChangeSearch($event)' \r\n [itemTemplate]=\"options.customTemplate?options.customTemplate:itemTemplate\" [dir]=\"textDir\" \r\n formControlName=\"{{name}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched\"\r\n (inputCleared)=\"onInputCleared()\" (closed)=\"checkIsAutocomplateInFilter()\">\r\n </ng-autocomplete>\r\n\r\n <ng-autocomplete class=\"form-control {{options.extraClasses}}\" *ngIf=\"options.allowNewSelection\" [data]=\"dataList\"\r\n [initialValue]=\"SelectedValue\" [searchKeyword]=\"keyword\" placeholder=\"{{options.placeholder}}\"\r\n (selected)='selectEvent($event)' (inputChanged)='onChangeSearch($event)' \r\n [itemTemplate]=\"options.customTemplate?options.customTemplate:itemTemplate\" [dir]=\"textDir\"\r\n (inputCleared)=\"onInputCleared()\" formControlName=\"{{name}}\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n (closed)=\"checkIsAutocomplateInFilter()\"\r\n [class.is-invalid]=\"autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n <ng-template #itemTemplate let-item>\r\n <img *ngIf=\"options.itemWithImage\" src=\"{{(item.image?item.image:avatarImage)}}\" />\r\n <a [innerHTML]=\"item.value\"></a>\r\n </ng-template>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.isReadonly\"><span class=\"readonly-view\">{{autoCompleteTextBoxControl.value.value}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- labelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription!=null\">{{options.labelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched)\">\r\n {{getErrorValidation(autoCompleteTextBoxControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty)\">\r\n {{resetError()}} </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i9.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i10.AutocompleteComponent, selector: "ng-autocomplete", inputs: ["data", "searchKeyword", "placeholder", "heading", "initialValue", "historyIdentifier", "historyHeading", "historyListMaxNumber", "notFoundText", "isLoading", "debounceTime", "disabled", "minQueryLength", "focusFirst", "customFilter", "selectedValueRender", "itemTemplate", "notFoundTemplate"], outputs: ["selected", "inputChanged", "inputFocused", "inputCleared", "opened", "closed", "scrolledToEnd"] }, { kind: "pipe", type: i7.KeyValuePipe, name: "keyvalue" }] }); }
274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutocompleteTextBoxComponent, deps: [{ token: i1.HttpClient }, { token: i2.ErrorMassageValidation }, { token: i3.RequestHandlerService }, { token: i4.ControlUtility }, { token: i5.ControlContainer, optional: true }, { token: i5.FormGroupDirective }, { token: i6.UtilityService }, { token: i6.ControlValidationService }, { token: i7.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component }); }
275
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AutocompleteTextBoxComponent, isStandalone: true, selector: "BBSF-AutocompleteTextBox", inputs: { group: "group", name: "name", options: "options", DropdownTemplateVariable: "DropdownTemplateVariable" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-autocomplete-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{options.labelExtraClasses}}\">\r\n {{options.labelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.showAsterisk&&options.isRequired)||(options.isRequired))&&!options.isReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <!--Input container-->\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.isReadonly\">\r\n <!--input-->\r\n <ng-autocomplete class=\"form-control {{options.extraClasses}}\" *ngIf=\"!options.allowNewSelection\"\r\n [data]=\"dataList\" [initialValue]=\"SelectedValue\" [searchKeyword]=\"keyword\" placeholder=\"{{options.placeholder}}\"\r\n (selected)='selectEvent($event)' (inputChanged)='onChangeSearch($event)' \r\n [itemTemplate]=\"options.customTemplate?options.customTemplate:itemTemplate\" [dir]=\"textDir\" \r\n formControlName=\"{{name}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched\"\r\n (inputCleared)=\"onInputCleared()\" (closed)=\"checkIsAutocomplateInFilter()\">\r\n </ng-autocomplete>\r\n\r\n <ng-autocomplete class=\"form-control {{options.extraClasses}}\" *ngIf=\"options.allowNewSelection\" [data]=\"dataList\"\r\n [initialValue]=\"SelectedValue\" [searchKeyword]=\"keyword\" placeholder=\"{{options.placeholder}}\"\r\n (selected)='selectEvent($event)' (inputChanged)='onChangeSearch($event)' \r\n [itemTemplate]=\"options.customTemplate?options.customTemplate:itemTemplate\" [dir]=\"textDir\"\r\n (inputCleared)=\"onInputCleared()\" formControlName=\"{{name}}\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n (closed)=\"checkIsAutocomplateInFilter()\"\r\n [class.is-invalid]=\"autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n <ng-template #itemTemplate let-item>\r\n <img *ngIf=\"options.itemWithImage\" src=\"{{(item.image?item.image:avatarImage)}}\" />\r\n <a [innerHTML]=\"item.value\"></a>\r\n </ng-template>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.isReadonly\"><span class=\"readonly-view\">{{autoCompleteTextBoxControl.value.value}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- labelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription!=null\">{{options.labelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched)\">\r\n {{getErrorValidation(autoCompleteTextBoxControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty)\">\r\n {{resetError()}} </div>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i8.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TypeaheadModule }, { kind: "ngmodule", type: AutocompleteLibModule }, { kind: "component", type: i9.AutocompleteComponent, selector: "ng-autocomplete", inputs: ["data", "searchKeyword", "placeholder", "heading", "initialValue", "historyIdentifier", "historyHeading", "historyListMaxNumber", "notFoundText", "isLoading", "debounceTime", "disabled", "minQueryLength", "focusFirst", "customFilter", "selectedValueRender", "itemTemplate", "notFoundTemplate"], outputs: ["selected", "inputChanged", "inputFocused", "inputCleared", "opened", "closed", "scrolledToEnd"] }] }); }
274
276
  }
275
277
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AutocompleteTextBoxComponent, decorators: [{
276
278
  type: Component,
277
- args: [{ selector: 'BBSF-AutocompleteTextBox', template: "<div class=\"form-group bbsf-control bbsf-autocomplete-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{options.labelExtraClasses}}\">\r\n {{options.labelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.showAsterisk&&options.isRequired)||(options.isRequired))&&!options.isReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <!--Input container-->\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.isReadonly\">\r\n <!--input-->\r\n <ng-autocomplete class=\"form-control {{options.extraClasses}}\" *ngIf=\"!options.allowNewSelection\"\r\n [data]=\"dataList\" [initialValue]=\"SelectedValue\" [searchKeyword]=\"keyword\" placeholder=\"{{options.placeholder}}\"\r\n (selected)='selectEvent($event)' (inputChanged)='onChangeSearch($event)' \r\n [itemTemplate]=\"options.customTemplate?options.customTemplate:itemTemplate\" [dir]=\"textDir\" \r\n formControlName=\"{{name}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched\"\r\n (inputCleared)=\"onInputCleared()\" (closed)=\"checkIsAutocomplateInFilter()\">\r\n </ng-autocomplete>\r\n\r\n <ng-autocomplete class=\"form-control {{options.extraClasses}}\" *ngIf=\"options.allowNewSelection\" [data]=\"dataList\"\r\n [initialValue]=\"SelectedValue\" [searchKeyword]=\"keyword\" placeholder=\"{{options.placeholder}}\"\r\n (selected)='selectEvent($event)' (inputChanged)='onChangeSearch($event)' \r\n [itemTemplate]=\"options.customTemplate?options.customTemplate:itemTemplate\" [dir]=\"textDir\"\r\n (inputCleared)=\"onInputCleared()\" formControlName=\"{{name}}\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n (closed)=\"checkIsAutocomplateInFilter()\"\r\n [class.is-invalid]=\"autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n <ng-template #itemTemplate let-item>\r\n <img *ngIf=\"options.itemWithImage\" src=\"{{(item.image?item.image:avatarImage)}}\" />\r\n <a [innerHTML]=\"item.value\"></a>\r\n </ng-template>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.isReadonly\"><span class=\"readonly-view\">{{autoCompleteTextBoxControl.value.value}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- labelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription!=null\">{{options.labelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched)\">\r\n {{getErrorValidation(autoCompleteTextBoxControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty)\">\r\n {{resetError()}} </div>\r\n</div>\r\n" }]
279
+ args: [{ selector: 'BBSF-AutocompleteTextBox', standalone: true, imports: [
280
+ CommonModule,
281
+ FormsModule,
282
+ ReactiveFormsModule,
283
+ TypeaheadModule,
284
+ AutocompleteLibModule
285
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], template: "<div class=\"form-group bbsf-control bbsf-autocomplete-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.viewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{options.labelExtraClasses}}\">\r\n {{options.labelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.showAsterisk&&options.isRequired)||(options.isRequired))&&!options.isReadonly\"\r\n class=\"text-danger\">*</span>\r\n </label>\r\n <!--Input container-->\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.isReadonly\">\r\n <!--input-->\r\n <ng-autocomplete class=\"form-control {{options.extraClasses}}\" *ngIf=\"!options.allowNewSelection\"\r\n [data]=\"dataList\" [initialValue]=\"SelectedValue\" [searchKeyword]=\"keyword\" placeholder=\"{{options.placeholder}}\"\r\n (selected)='selectEvent($event)' (inputChanged)='onChangeSearch($event)' \r\n [itemTemplate]=\"options.customTemplate?options.customTemplate:itemTemplate\" [dir]=\"textDir\" \r\n formControlName=\"{{name}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched\"\r\n (inputCleared)=\"onInputCleared()\" (closed)=\"checkIsAutocomplateInFilter()\">\r\n </ng-autocomplete>\r\n\r\n <ng-autocomplete class=\"form-control {{options.extraClasses}}\" *ngIf=\"options.allowNewSelection\" [data]=\"dataList\"\r\n [initialValue]=\"SelectedValue\" [searchKeyword]=\"keyword\" placeholder=\"{{options.placeholder}}\"\r\n (selected)='selectEvent($event)' (inputChanged)='onChangeSearch($event)' \r\n [itemTemplate]=\"options.customTemplate?options.customTemplate:itemTemplate\" [dir]=\"textDir\"\r\n (inputCleared)=\"onInputCleared()\" formControlName=\"{{name}}\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n (closed)=\"checkIsAutocomplateInFilter()\"\r\n [class.is-invalid]=\"autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n <ng-template #itemTemplate let-item>\r\n <img *ngIf=\"options.itemWithImage\" src=\"{{(item.image?item.image:avatarImage)}}\" />\r\n <a [innerHTML]=\"item.value\"></a>\r\n </ng-template>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.isReadonly\"><span class=\"readonly-view\">{{autoCompleteTextBoxControl.value.value}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.isReadonly\">\r\n <!-- labelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription!=null\">{{options.labelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(autoCompleteTextBoxControl.invalid && autoCompleteTextBoxControl.touched)\">\r\n {{getErrorValidation(autoCompleteTextBoxControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty)\">\r\n {{resetError()}} </div>\r\n</div>\r\n" }]
278
286
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ErrorMassageValidation }, { type: i3.RequestHandlerService }, { type: i4.ControlUtility }, { type: i5.ControlContainer, decorators: [{
279
287
  type: Optional
280
- }] }, { type: i5.FormGroupDirective }, { type: i3.UtilityService }, { type: i3.ControlValidationService }, { type: i6.GlobalSettings }], propDecorators: { group: [{
288
+ }] }, { type: i5.FormGroupDirective }, { type: i6.UtilityService }, { type: i6.ControlValidationService }, { type: i7.GlobalSettings }], propDecorators: { group: [{
281
289
  type: Input
282
290
  }], name: [{
283
291
  type: Input
@@ -288,4 +296,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
288
296
  }], OnChange: [{
289
297
  type: Output
290
298
  }] } });
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0b2NvbXBsZXRlVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvQXV0b2NvbXBsZXRlVGV4dEJveC9BdXRvY29tcGxldGVUZXh0Qm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9BdXRvY29tcGxldGVUZXh0Qm94L0F1dG9jb21wbGV0ZVRleHRCb3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVcsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW1HLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUosT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFZLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBbUQsbUJBQW1CLEVBQWtCLE1BQU0sMEJBQTBCLENBQUM7QUFFaEksT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7OztBQU94RSxNQUFNLE9BQU8sNEJBQTRCO2FBR2hDLDJCQUFzQixHQUFHLElBQUksQUFBUCxDQUFRO0lBQ3JDLDRDQUE0QztJQUM1QyxZQUFvQixJQUFnQixFQUFVLFlBQW9DLEVBQVUscUJBQTRD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QzsrR0FyVFUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsdU5DbEJ6QywrbkdBbURBOzs0RkRqQ2EsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUVFLDBCQUEwQjs7MEJBU08sUUFBUTsyS0FLMUMsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIERvQ2hlY2ssIE9wdGlvbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQXR0cmlidXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy92YWxpZGF0aW9uRXJyb3JNYXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IEF1dG9jb21wbGV0ZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0F1dG9jb21wbGV0ZU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBBdXRvY29tcGxldGVEVE8gfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0F1dG9jb21wbGV0ZURUTyc7XHJcbmltcG9ydCB7IG5vb3AsIE9ic2VydmFibGUsIE9ic2VydmVyLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsIFJlcXVlc3RPcHRpb25zTW9kZWwsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0N1c3RvbVZhbGlkYXRpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0F1dG9jb21wbGV0ZVRleHRCb3guY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXh0Qm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIHN0YXRpYyBjb250cm9sQ29udGFpbmVyc3RhdGljID0gbnVsbDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBFcnJvckhhbmRsZXI6IEVycm9yTWFzc2FnZVZhbGlkYXRpb24sIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOlxyXG4gICAgICBDb250cm9sQ29udGFpbmVyLCBwdWJsaWMgYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgcHJpdmF0ZSBnbG9iYWxTZXR0aW5nczogR2xvYmFsU2V0dGluZ3MpIHtcclxuICAgIEF1dG9jb21wbGV0ZVRleHRCb3hDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3B0aW9uczogQXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICBASW5wdXQoKSBEcm9wZG93blRlbXBsYXRlVmFyaWFibGU6IGFueTtcclxuICBAT3V0cHV0KCkgT25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAga2V5d29yZDogc3RyaW5nID0gJ3ZhbHVlJztcclxuICBhdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIFNlYXJjaDogc3RyaW5nID0gJyc7XHJcbiAgS2V5OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgYXBpOiBzdHJpbmcgPSAnaHR0cCc7XHJcbiAgVmFsdWU6IHN0cmluZyA9ICd2YWx1ZSc7XHJcbiAgbmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleTogc3RyaW5nID0gJyc7XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIHZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgZGF0YVNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgZGF0YUxpc3Q6IGFueVtdID0gW107XHJcbiAgU2VsZWN0ZWRWYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuICBhdmF0YXJJbWFnZTogc3RyaW5nID0gXCIuL3NyYy9hc3NldHMvaW1hZ2VzL3VzZXJpbWcucG5nXCI7XHJcbiAgdGV4dERpcjtcclxuICBuZXdTZWxlY3Rpb25WYWxpZGF0aW9uOiBDdXN0b21WYWxpZGF0aW9uID0gbmV3IEN1c3RvbVZhbGlkYXRpb24oKTtcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMubmFtZSlcclxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5vcHRpb25zLm5hbWU7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVhZG9ubHkgJiYgIXRoaXMub3B0aW9ucy52YWx1ZSlcclxuICAgICAgdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdOQScpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VEaXJlY3Rpb24pXHJcbiAgICAgIHRoaXMudGV4dERpciA9IHRoaXMub3B0aW9ucy5mb3JjZURpcmVjdGlvbiA9PSAyID8gJ3J0bCcgOiAnbHRyJztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy50ZXh0RGlyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykgPT0gJ2FyJyA/ICdydGwnIDogJ2x0cic7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5pc0NyZWF0ZWRCZWZvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMudmlld1R5cGUpXHJcbiAgICAgIHRoaXMub3B0aW9ucy52aWV3VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3Mudmlld1R5cGU7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5sYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICB0aGlzLm9wdGlvbnMubGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMubGFiZWxLZXkpO1xyXG5cclxuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlKTtcclxuXHJcblxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93TmV3U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZFZhbGlkYXRvcigpO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5wdXNoKHRoaXMubmV3U2VsZWN0aW9uVmFsaWRhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXNhc3luYyk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RlZFZhbHVlICE9IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuc2VsZWN0ZWRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRWYWx1ZSA9IHRoaXMub3B0aW9ucy5zZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogdGhpcy5vcHRpb25zLnZhbGlkYXRpb25Ub2tlblxyXG4gICAgICB9KSxcclxuICAgIH07XHJcblxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5zdWdnZXN0aW9ucyQgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPHN0cmluZz4pID0+IHtcclxuICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLlNlYXJjaCk7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAocXVlcnkpIHtcclxuICAgICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCh0aGlzLm9wdGlvbnMucXVlcnlQYXJhbSwgcXVlcnkpO1xyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRyYUZpbHRlclBhcmFtTmFtZSAmJiB0aGlzLm9wdGlvbnMuZXh0cmFGaWx0ZXIpXHJcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQodGhpcy5vcHRpb25zLmV4dHJhRmlsdGVyUGFyYW1OYW1lLCAodHlwZW9mIHRoaXMub3B0aW9ucy5leHRyYUZpbHRlciA9PT0gXCJzdHJpbmdcIikgPyB0aGlzLm9wdGlvbnMuZXh0cmFGaWx0ZXIgOiB0aGlzLm9wdGlvbnMuZXh0cmFGaWx0ZXIoKSk7XHJcbiAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNNb2RlbCA9IG5ldyBSZXF1ZXN0T3B0aW9uc01vZGVsKCk7XHJcbiAgICAgICAgICByZXF1ZXN0T3B0aW9uc01vZGVsLmRpc2FibGVCbG9ja1VJID0gdHJ1ZTtcclxuICAgICAgICAgIHJlcXVlc3RPcHRpb25zTW9kZWwuZGlzYWJsZVN1Y2Nlc3NOb3RpZmljYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gdXNpbmcgZ2l0aHViIHB1YmxpYyBhcGkgdG8gZ2V0IHVzZXJzIGJ5IG5hbWVcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5nZXQodGhpcy5vcHRpb25zLmFjdGlvblVSTCwgcGFyYW1zLCBudWxsLCByZXF1ZXN0T3B0aW9uc01vZGVsKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKGRhdGEpID0+IGRhdGEgYXMgQXR0cmlidXRlW10gfHwgW10pLFxyXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiBub29wLCBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBodHRwIGVycm9yXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSB8fCAnU29tZXRoaW5nIGdvZXMgd3JvbmcnO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvYWRWYWxpZGF0b3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm5ld1NlbGVjdGlvblZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5ID0gKGNvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKChjb250cm9sLnZhbHVlICYmIHR5cGVvZiBjb250cm9sLnZhbHVlID09PSBcInN0cmluZ1wiKSlcclxuICAgICAgICByZXR1cm4geyBjdXN0b21lckVycm9yOiB0cnVlIH07XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIHRoaXMubmV3U2VsZWN0aW9uVmFsaWRhdGlvbi5tYXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleVwiKTtcclxuICB9O1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNldEF0dHJpYnV0ZUZvckNvbnRyb2wodGhpcy5vcHRpb25zKTtcclxuICB9XHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLnJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfTtcclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24gPSAoRXJyb3JMaXN0KSA9PiB7XHJcblxyXG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zaG93R2xvYmFsRXJyb3IoKTtcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd05ld1NlbGVjdGlvbiAmJiAhdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb24uaW5jbHVkZXModGhpcy5uZXdTZWxlY3Rpb25WYWxpZGF0aW9uKSlcclxuICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ucHVzaCh0aGlzLm5ld1NlbGVjdGlvblZhbGlkYXRpb24pO1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfTtcclxuXHJcbiAgY29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQ29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIHNlbGVjdEV2ZW50KGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dOZXdTZWxlY3Rpb24gPT0gdHJ1ZSkge1xyXG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBBdXRvY29tcGxldGVNb2RlbCA9IG5ldyBBdXRvY29tcGxldGVEVE8oKTtcclxuICAgICAgICBBdXRvY29tcGxldGVNb2RlbC52YWx1ZSA9IGl0ZW07XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShBdXRvY29tcGxldGVNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlID09IGl0ZW0udmFsdWUpIHtcclxuICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldEVycm9ycyh7XHJcbiAgICAgICAgICBlcnJvck1hc3NhZ2U6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleScpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5pbnZhbGlkO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC52YWx1ZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucGF0Y2hGdW5jdGlvbiAmJlxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBhdGNoUGF0aCAmJlxyXG4gICAgICAgICAgdGhpcy5ncm91cC5nZXQodGhpcy5uYW1lKS52YWxpZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShcclxuICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBhdGNoRnVuY3Rpb24sXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaFBhdGhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBtb3ZlIHRoaXMgbGluZSBoZXJlIHRvIGVtaXQgdmFsdWUgbm8gbWF0dGVyIGlzIGZyb20gZGF0YWJhc2Ugb3Igbm90XHJcbiAgICB0aGlzLk9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC52YWx1ZSk7XHJcbiAgICAvL1VzZSB0aGlzIGxpbmUgdG8gZW5hYmxlIHR3byB3YXkgYmluZGluZy5cclxuICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNoYW5nZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhMZW5ndGggJiYgc2VhcmNoLmxlbmd0aCA+IHRoaXMub3B0aW9ucy5tYXhMZW5ndGgpIHtcclxuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sO1xyXG4gICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBlcnJvck1hc3NhZ2U6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1heExlbmdodFZhbGlkYXRpb25LZXlcIikgKyBcIiBcIiArIHRoaXMub3B0aW9ucy5tYXhMZW5ndGggfSk7XHJcbiAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5TZWFyY2ggPSBzZWFyY2g7XHJcbiAgICB0aGlzLlNlbGVjdGVkVmFsdWUgPSBcIlwiO1xyXG4gICAgYXdhaXQgdGhpcy5zdWdnZXN0aW9ucyQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKChyZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQubGVuZ3RoID09IDAgfHwgcmVzdWx0Lmxlbmd0aCA9PSAwKSAmJiB0aGlzLm9wdGlvbnMuYWxsb3dOZXdTZWxlY3Rpb24gPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YUxpc3QgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleTogMCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuU2VhcmNoXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGFMaXN0ID0gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRDbGVhcmVkKCkge1xyXG4gICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuT25DaGFuZ2UuZW1pdChudWxsKTtcclxuICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuICAvLyBvbkZvY3VzZWQoZSkge1xyXG4gIC8vICAgLy8gZG8gc29tZXRoaW5nXHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgLy8gb25CbHVyKFZhbHVlKSB7XHJcbiAgLy8gICBpZiAodGhpcy5vcHRpb25zLkFsbG93TmV3U2VsZWN0aW9uID09IHRydWUpIHtcclxuXHJcbiAgLy8gICAgIGlmICh0eXBlb2YgKFZhbHVlKSA9PSAnb2JqZWN0Jykge1xyXG4gIC8vICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUoVmFsdWUpO1xyXG4gIC8vICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXHJcblxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGVsc2Uge1xyXG4gIC8vICAgICAgIGxldCBBdXRvY29tcGxldGVNb2RlbCA9IG5ldyBBdXRvY29tcGxldGVEVE8oKTtcclxuICAvLyAgICAgICBBdXRvY29tcGxldGVNb2RlbC52YWx1ZSA9IFZhbHVlO1xyXG4gIC8vICAgICAgIGxldCBtb2RlbCA9IG5ldyBUeXBlYWhlYWRNYXRjaChBdXRvY29tcGxldGVNb2RlbCxWYWx1ZSk7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShtb2RlbCk7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcclxuXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICBlbHNlIHtcclxuXHJcbiAgLy8gICAgIGlmICh0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlID09IFZhbHVlKSB7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRFcnJvcnMoeyBOZXdTZWxlY3Rpb25WYWxpZGF0aW9uS2V5OiB0aGlzLk5ld1NlbGVjdGlvblZhbGlkYXRpb25LZXkgfSk7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5pbnZhbGlkO1xyXG4gIC8vICAgICAgIHJldHVybjtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICB9XHJcblxyXG5cclxuICAvLyBoYW5kbGVSZXN1bHRTZWxlY3RlZChyZXN1bHQpIHtcclxuXHJcbiAgLy8gICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKHJlc3VsdCk7XHJcbiAgLy8gICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxyXG4gIC8vICAgdGhpcy5PbkNoYW5nZS5lbWl0KHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUpXHJcbiAgLy8gICB0aGlzLlNlYXJjaCA9IHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUudmFsdWVcclxuXHJcblxyXG5cclxuICAvLyB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucyk7XHJcbiAgfTtcclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIGFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH07XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgcmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbiA9IChjdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnJlbW92ZUN1c3RvbVZhbGlkYXRpb24odGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIGN1c3RvbVZhbGlkYXRpb24pO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgY3VzdG9tVmFsaWRhdGlvbik7XHJcbiAgfTtcclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIGlzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmlzVmFsaWQodGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbCk7XHJcbiAgfTtcclxuXHJcbiAgY2hlY2tJc0F1dG9jb21wbGF0ZUluRmlsdGVyKCkge1xyXG4gICAgaWYgKHRoaXMuRHJvcGRvd25UZW1wbGF0ZVZhcmlhYmxlKSB7XHJcbiAgICAgIHRoaXMuRHJvcGRvd25UZW1wbGF0ZVZhcmlhYmxlLnRvZ2dsZSgpO1xyXG4gICAgICB0aGlzLkRyb3Bkb3duVGVtcGxhdGVWYXJpYWJsZS50b2dnbGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgYmJzZi1jb250cm9sIGJic2YtYXV0b2NvbXBsZXRlLXRleHRib3hcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCIob3B0aW9ucy52aWV3VHlwZT09MSk/J2Jic2YtdmVydGljYWwnOidiYnNmLWhvcml6b250YWwnXCI+XHJcbiAgICA8IS0tbGFiZWwtLT5cclxuICAgIDxsYWJlbCAqbmdJZj1cIiFvcHRpb25zLmhpZGVMYWJlbFwiIGNsYXNzPVwiYmJzZi1sYWJlbCB7e29wdGlvbnMubGFiZWxFeHRyYUNsYXNzZXN9fVwiPlxyXG4gICAgICB7e29wdGlvbnMubGFiZWxWYWx1ZX19XHJcbiAgICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIigob3B0aW9ucy5zaG93QXN0ZXJpc2smJm9wdGlvbnMuaXNSZXF1aXJlZCl8fChvcHRpb25zLmlzUmVxdWlyZWQpKSYmIW9wdGlvbnMuaXNSZWFkb25seVwiXHJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPCEtLUlucHV0IGNvbnRhaW5lci0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5pc1JlYWRvbmx5XCI+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8bmctYXV0b2NvbXBsZXRlIGNsYXNzPVwiZm9ybS1jb250cm9sICB7e29wdGlvbnMuZXh0cmFDbGFzc2VzfX1cIiAqbmdJZj1cIiFvcHRpb25zLmFsbG93TmV3U2VsZWN0aW9uXCJcclxuICAgICAgICBbZGF0YV09XCJkYXRhTGlzdFwiIFtpbml0aWFsVmFsdWVdPVwiU2VsZWN0ZWRWYWx1ZVwiIFtzZWFyY2hLZXl3b3JkXT1cImtleXdvcmRcIiBwbGFjZWhvbGRlcj1cInt7b3B0aW9ucy5wbGFjZWhvbGRlcn19XCJcclxuICAgICAgICAoc2VsZWN0ZWQpPSdzZWxlY3RFdmVudCgkZXZlbnQpJyAoaW5wdXRDaGFuZ2VkKT0nb25DaGFuZ2VTZWFyY2goJGV2ZW50KScgXHJcbiAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJvcHRpb25zLmN1c3RvbVRlbXBsYXRlP29wdGlvbnMuY3VzdG9tVGVtcGxhdGU6aXRlbVRlbXBsYXRlXCIgW2Rpcl09XCJ0ZXh0RGlyXCIgXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3tuYW1lfX1cIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJhdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5pbnZhbGlkICYmIGF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgIChpbnB1dENsZWFyZWQpPVwib25JbnB1dENsZWFyZWQoKVwiIChjbG9zZWQpPVwiY2hlY2tJc0F1dG9jb21wbGF0ZUluRmlsdGVyKClcIj5cclxuICAgICAgPC9uZy1hdXRvY29tcGxldGU+XHJcblxyXG4gICAgICA8bmctYXV0b2NvbXBsZXRlIGNsYXNzPVwiZm9ybS1jb250cm9sIHt7b3B0aW9ucy5leHRyYUNsYXNzZXN9fVwiICpuZ0lmPVwib3B0aW9ucy5hbGxvd05ld1NlbGVjdGlvblwiIFtkYXRhXT1cImRhdGFMaXN0XCJcclxuICAgICAgICBbaW5pdGlhbFZhbHVlXT1cIlNlbGVjdGVkVmFsdWVcIiBbc2VhcmNoS2V5d29yZF09XCJrZXl3b3JkXCIgcGxhY2Vob2xkZXI9XCJ7e29wdGlvbnMucGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgKHNlbGVjdGVkKT0nc2VsZWN0RXZlbnQoJGV2ZW50KScgKGlucHV0Q2hhbmdlZCk9J29uQ2hhbmdlU2VhcmNoKCRldmVudCknIFxyXG4gICAgICAgIFtpdGVtVGVtcGxhdGVdPVwib3B0aW9ucy5jdXN0b21UZW1wbGF0ZT9vcHRpb25zLmN1c3RvbVRlbXBsYXRlOml0ZW1UZW1wbGF0ZVwiIFtkaXJdPVwidGV4dERpclwiXHJcbiAgICAgICAgKGlucHV0Q2xlYXJlZCk9XCJvbklucHV0Q2xlYXJlZCgpXCIgZm9ybUNvbnRyb2xOYW1lPVwie3tuYW1lfX1cIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIlxyXG4gICAgICAgIGFyaWEtaW52YWxpZD1cInRydWVcIlxyXG4gICAgICAgIChjbG9zZWQpPVwiY2hlY2tJc0F1dG9jb21wbGF0ZUluRmlsdGVyKClcIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLmludmFsaWQgJiYgYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudG91Y2hlZFwiPlxyXG4gICAgICA8L25nLWF1dG9jb21wbGV0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJvcHRpb25zLml0ZW1XaXRoSW1hZ2VcIiBzcmM9XCJ7eyhpdGVtLmltYWdlP2l0ZW0uaW1hZ2U6YXZhdGFySW1hZ2UpfX1cIiAvPlxyXG4gICAgICAgIDxhIFtpbm5lckhUTUxdPVwiaXRlbS52YWx1ZVwiPjwvYT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSByZWFkb25seSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLmlzUmVhZG9ubHlcIj48c3BhbiBjbGFzcz1cInJlYWRvbmx5LXZpZXdcIj57e2F1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlLnZhbHVlfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic3VidGV4dC1jb250YWluZXJcIiAqbmdJZj1cIiFvcHRpb25zLmlzUmVhZG9ubHlcIj5cclxuICAgIDwhLS0gbGFiZWxEZXNjcmlwdGlvbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtY29udHJvbC1kZXNjXCIgKm5nSWY9XCJvcHRpb25zLmxhYmVsRGVzY3JpcHRpb24hPW51bGxcIj57e29wdGlvbnMubGFiZWxEZXNjcmlwdGlvbn19PC9kaXY+XHJcbiAgICA8IS0tIHJlcXVpcmVkVGV4dC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiICpuZ0lmPVwiKGF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLmludmFsaWQgJiYgYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudG91Y2hlZClcIj5cclxuICAgICAge3tnZXRFcnJvclZhbGlkYXRpb24oYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wuZXJyb3JzfGtleXZhbHVlKX19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwiKGdyb3VwLnZhbGlkJiZncm91cC5kaXJ0eSYmZ3JvdXAudG91Y2hlZCApfHwoZ3JvdXAudW50b3VjaGVkJiZncm91cC5pbnZhbGlkJiZncm91cC5kaXJ0eSlcIj5cclxuICAgIHt7cmVzZXRFcnJvcigpfX0gPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0b2NvbXBsZXRlVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvQXV0b2NvbXBsZXRlVGV4dEJveC9BdXRvY29tcGxldGVUZXh0Qm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9BdXRvY29tcGxldGVUZXh0Qm94L0F1dG9jb21wbGV0ZVRleHRCb3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVcsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkosT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFtRyxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1TCxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBWSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUF5QixtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSzNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxx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QyxzQkFBc0IsRUFBRSxDQUFDO0lBQzNELENBQUM7SUFxRUQsMkJBQTJCO1FBQ3pCLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDeEM7SUFDSCxDQUFDOytHQXJUVSw0QkFBNEI7bUdBQTVCLDRCQUE0QiwyT0MvQnpDLCtuR0FtREEsMkNENUJJLFlBQVksMlJBQ1osV0FBVyxrU0FDWCxtQkFBbUIsK1VBQ25CLGVBQWUsOEJBQ2YscUJBQXFCOzs0RkFJWiw0QkFBNEI7a0JBZHhDLFNBQVM7K0JBRUUsMEJBQTBCLGNBRXhCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLHFCQUFxQjtxQkFDdEIsV0FDUSxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDOzswQkFRUixRQUFROzJLQUsxQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgRG9DaGVjaywgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBBdHRyaWJ1dGUsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUEgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXBEaXJlY3RpdmUsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IFR5cGVhaGVhZE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdHlwZWFoZWFkJztcclxuaW1wb3J0IHsgQXV0b2NvbXBsZXRlTGliTW9kdWxlIH0gZnJvbSAnYW5ndWxhci1uZy1hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBub29wLCBPYnNlcnZhYmxlLCBPYnNlcnZlciwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBSZXF1ZXN0T3B0aW9uc01vZGVsIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzL2h0dHAnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzL3VpJztcclxuaW1wb3J0IHsgRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy92YWxpZGF0aW9uRXJyb3JNYXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IEF1dG9jb21wbGV0ZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0F1dG9jb21wbGV0ZU9wdGlvbnMnO1xyXG5pbXBvcnQgeyBBdXRvY29tcGxldGVEVE8gfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0F1dG9jb21wbGV0ZURUTyc7XHJcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21WYWxpZGF0aW9uIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9DdXN0b21WYWxpZGF0aW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdCQlNGLUF1dG9jb21wbGV0ZVRleHRCb3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9BdXRvY29tcGxldGVUZXh0Qm94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIFR5cGVhaGVhZE1vZHVsZSxcclxuICAgIEF1dG9jb21wbGV0ZUxpYk1vZHVsZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXh0Qm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIHN0YXRpYyBjb250cm9sQ29udGFpbmVyc3RhdGljID0gbnVsbDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBFcnJvckhhbmRsZXI6IEVycm9yTWFzc2FnZVZhbGlkYXRpb24sIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOlxyXG4gICAgICBDb250cm9sQ29udGFpbmVyLCBwdWJsaWMgYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgcHJpdmF0ZSBnbG9iYWxTZXR0aW5nczogR2xvYmFsU2V0dGluZ3MpIHtcclxuICAgIEF1dG9jb21wbGV0ZVRleHRCb3hDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3B0aW9uczogQXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICBASW5wdXQoKSBEcm9wZG93blRlbXBsYXRlVmFyaWFibGU6IGFueTtcclxuICBAT3V0cHV0KCkgT25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAga2V5d29yZDogc3RyaW5nID0gJ3ZhbHVlJztcclxuICBhdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIFNlYXJjaDogc3RyaW5nID0gJyc7XHJcbiAgS2V5OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgYXBpOiBzdHJpbmcgPSAnaHR0cCc7XHJcbiAgVmFsdWU6IHN0cmluZyA9ICd2YWx1ZSc7XHJcbiAgbmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleTogc3RyaW5nID0gJyc7XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIHZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgZGF0YVNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIHN1Z2dlc3Rpb25zJDogT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgZGF0YUxpc3Q6IGFueVtdID0gW107XHJcbiAgU2VsZWN0ZWRWYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuICBhdmF0YXJJbWFnZTogc3RyaW5nID0gXCIuL3NyYy9hc3NldHMvaW1hZ2VzL3VzZXJpbWcucG5nXCI7XHJcbiAgdGV4dERpcjtcclxuICBuZXdTZWxlY3Rpb25WYWxpZGF0aW9uOiBDdXN0b21WYWxpZGF0aW9uID0gbmV3IEN1c3RvbVZhbGlkYXRpb24oKTtcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMubmFtZSlcclxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5vcHRpb25zLm5hbWU7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVhZG9ubHkgJiYgIXRoaXMub3B0aW9ucy52YWx1ZSlcclxuICAgICAgdGhpcy5vcHRpb25zLnZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdOQScpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuZm9yY2VEaXJlY3Rpb24pXHJcbiAgICAgIHRoaXMudGV4dERpciA9IHRoaXMub3B0aW9ucy5mb3JjZURpcmVjdGlvbiA9PSAyID8gJ3J0bCcgOiAnbHRyJztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy50ZXh0RGlyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykgPT0gJ2FyJyA/ICdydGwnIDogJ2x0cic7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5pc0NyZWF0ZWRCZWZvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMudmlld1R5cGUpXHJcbiAgICAgIHRoaXMub3B0aW9ucy52aWV3VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3Mudmlld1R5cGU7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5sYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICB0aGlzLm9wdGlvbnMubGFiZWxWYWx1ZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMubGFiZWxLZXkpO1xyXG5cclxuICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlKTtcclxuXHJcblxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93TmV3U2VsZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMubG9hZFZhbGlkYXRvcigpO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tVmFsaWRhdGlvbi5wdXNoKHRoaXMubmV3U2VsZWN0aW9uVmFsaWRhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXNhc3luYyk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlY3RlZFZhbHVlICE9IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuc2VsZWN0ZWRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRWYWx1ZSA9IHRoaXMub3B0aW9ucy5zZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHtcclxuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogdGhpcy5vcHRpb25zLnZhbGlkYXRpb25Ub2tlblxyXG4gICAgICB9KSxcclxuICAgIH07XHJcblxyXG5cclxuXHJcblxyXG4gICAgdGhpcy5zdWdnZXN0aW9ucyQgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPHN0cmluZz4pID0+IHtcclxuICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLlNlYXJjaCk7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKHF1ZXJ5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAocXVlcnkpIHtcclxuICAgICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCh0aGlzLm9wdGlvbnMucXVlcnlQYXJhbSwgcXVlcnkpO1xyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHRyYUZpbHRlclBhcmFtTmFtZSAmJiB0aGlzLm9wdGlvbnMuZXh0cmFGaWx0ZXIpXHJcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQodGhpcy5vcHRpb25zLmV4dHJhRmlsdGVyUGFyYW1OYW1lLCAodHlwZW9mIHRoaXMub3B0aW9ucy5leHRyYUZpbHRlciA9PT0gXCJzdHJpbmdcIikgPyB0aGlzLm9wdGlvbnMuZXh0cmFGaWx0ZXIgOiB0aGlzLm9wdGlvbnMuZXh0cmFGaWx0ZXIoKSk7XHJcbiAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNNb2RlbCA9IG5ldyBSZXF1ZXN0T3B0aW9uc01vZGVsKCk7XHJcbiAgICAgICAgICByZXF1ZXN0T3B0aW9uc01vZGVsLmRpc2FibGVCbG9ja1VJID0gdHJ1ZTtcclxuICAgICAgICAgIHJlcXVlc3RPcHRpb25zTW9kZWwuZGlzYWJsZVN1Y2Nlc3NOb3RpZmljYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gdXNpbmcgZ2l0aHViIHB1YmxpYyBhcGkgdG8gZ2V0IHVzZXJzIGJ5IG5hbWVcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5nZXQodGhpcy5vcHRpb25zLmFjdGlvblVSTCwgcGFyYW1zLCBudWxsLCByZXF1ZXN0T3B0aW9uc01vZGVsKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKGRhdGEpID0+IGRhdGEgYXMgQXR0cmlidXRlW10gfHwgW10pLFxyXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiBub29wLCBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBodHRwIGVycm9yXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSB8fCAnU29tZXRoaW5nIGdvZXMgd3JvbmcnO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvYWRWYWxpZGF0b3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLm5ld1NlbGVjdGlvblZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5ID0gKGNvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKChjb250cm9sLnZhbHVlICYmIHR5cGVvZiBjb250cm9sLnZhbHVlID09PSBcInN0cmluZ1wiKSlcclxuICAgICAgICByZXR1cm4geyBjdXN0b21lckVycm9yOiB0cnVlIH07XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICAgIHRoaXMubmV3U2VsZWN0aW9uVmFsaWRhdGlvbi5tYXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleVwiKTtcclxuICB9O1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNldEF0dHJpYnV0ZUZvckNvbnRyb2wodGhpcy5vcHRpb25zKTtcclxuICB9XHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLnJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfTtcclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24gPSAoRXJyb3JMaXN0KSA9PiB7XHJcblxyXG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zaG93R2xvYmFsRXJyb3IoKTtcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5hbGxvd05ld1NlbGVjdGlvbiAmJiAhdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb24uaW5jbHVkZXModGhpcy5uZXdTZWxlY3Rpb25WYWxpZGF0aW9uKSlcclxuICAgICAgdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb24ucHVzaCh0aGlzLm5ld1NlbGVjdGlvblZhbGlkYXRpb24pO1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfTtcclxuXHJcbiAgY29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQ29weUlucHV0TWVzc2FnZShpbnB1dEVsZW1lbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIHNlbGVjdEV2ZW50KGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dOZXdTZWxlY3Rpb24gPT0gdHJ1ZSkge1xyXG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBBdXRvY29tcGxldGVNb2RlbCA9IG5ldyBBdXRvY29tcGxldGVEVE8oKTtcclxuICAgICAgICBBdXRvY29tcGxldGVNb2RlbC52YWx1ZSA9IGl0ZW07XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShBdXRvY29tcGxldGVNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlID09IGl0ZW0udmFsdWUpIHtcclxuICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldEVycm9ycyh7XHJcbiAgICAgICAgICBlcnJvck1hc3NhZ2U6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleScpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5pbnZhbGlkO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIGxldCBvcmlnaW5hbFZhbHVlID0gdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC52YWx1ZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucGF0Y2hGdW5jdGlvbiAmJlxyXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnBhdGNoUGF0aCAmJlxyXG4gICAgICAgICAgdGhpcy5ncm91cC5nZXQodGhpcy5uYW1lKS52YWxpZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShcclxuICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZSxcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBhdGNoRnVuY3Rpb24sXHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaFBhdGhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBtb3ZlIHRoaXMgbGluZSBoZXJlIHRvIGVtaXQgdmFsdWUgbm8gbWF0dGVyIGlzIGZyb20gZGF0YWJhc2Ugb3Igbm90XHJcbiAgICB0aGlzLk9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC52YWx1ZSk7XHJcbiAgICAvL1VzZSB0aGlzIGxpbmUgdG8gZW5hYmxlIHR3byB3YXkgYmluZGluZy5cclxuICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNoYW5nZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhMZW5ndGggJiYgc2VhcmNoLmxlbmd0aCA+IHRoaXMub3B0aW9ucy5tYXhMZW5ndGgpIHtcclxuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sO1xyXG4gICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBlcnJvck1hc3NhZ2U6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1heExlbmdodFZhbGlkYXRpb25LZXlcIikgKyBcIiBcIiArIHRoaXMub3B0aW9ucy5tYXhMZW5ndGggfSk7XHJcbiAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5TZWFyY2ggPSBzZWFyY2g7XHJcbiAgICB0aGlzLlNlbGVjdGVkVmFsdWUgPSBcIlwiO1xyXG4gICAgYXdhaXQgdGhpcy5zdWdnZXN0aW9ucyQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKChyZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQubGVuZ3RoID09IDAgfHwgcmVzdWx0Lmxlbmd0aCA9PSAwKSAmJiB0aGlzLm9wdGlvbnMuYWxsb3dOZXdTZWxlY3Rpb24gPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YUxpc3QgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleTogMCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuU2VhcmNoXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmRhdGFMaXN0ID0gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRDbGVhcmVkKCkge1xyXG4gICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuT25DaGFuZ2UuZW1pdChudWxsKTtcclxuICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuICAvLyBvbkZvY3VzZWQoZSkge1xyXG4gIC8vICAgLy8gZG8gc29tZXRoaW5nXHJcbiAgLy8gfVxyXG5cclxuXHJcbiAgLy8gb25CbHVyKFZhbHVlKSB7XHJcbiAgLy8gICBpZiAodGhpcy5vcHRpb25zLkFsbG93TmV3U2VsZWN0aW9uID09IHRydWUpIHtcclxuXHJcbiAgLy8gICAgIGlmICh0eXBlb2YgKFZhbHVlKSA9PSAnb2JqZWN0Jykge1xyXG4gIC8vICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUoVmFsdWUpO1xyXG4gIC8vICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXHJcblxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGVsc2Uge1xyXG4gIC8vICAgICAgIGxldCBBdXRvY29tcGxldGVNb2RlbCA9IG5ldyBBdXRvY29tcGxldGVEVE8oKTtcclxuICAvLyAgICAgICBBdXRvY29tcGxldGVNb2RlbC52YWx1ZSA9IFZhbHVlO1xyXG4gIC8vICAgICAgIGxldCBtb2RlbCA9IG5ldyBUeXBlYWhlYWRNYXRjaChBdXRvY29tcGxldGVNb2RlbCxWYWx1ZSk7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShtb2RlbCk7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcclxuXHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICBlbHNlIHtcclxuXHJcbiAgLy8gICAgIGlmICh0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlID09IFZhbHVlKSB7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRFcnJvcnMoeyBOZXdTZWxlY3Rpb25WYWxpZGF0aW9uS2V5OiB0aGlzLk5ld1NlbGVjdGlvblZhbGlkYXRpb25LZXkgfSk7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgLy8gICAgICAgdGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5pbnZhbGlkO1xyXG4gIC8vICAgICAgIHJldHVybjtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICB9XHJcblxyXG5cclxuICAvLyBoYW5kbGVSZXN1bHRTZWxlY3RlZChyZXN1bHQpIHtcclxuXHJcbiAgLy8gICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKHJlc3VsdCk7XHJcbiAgLy8gICB0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxyXG4gIC8vICAgdGhpcy5PbkNoYW5nZS5lbWl0KHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUpXHJcbiAgLy8gICB0aGlzLlNlYXJjaCA9IHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUudmFsdWVcclxuXHJcblxyXG5cclxuICAvLyB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucyk7XHJcbiAgfTtcclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIGFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH07XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgcmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbiA9IChjdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnJlbW92ZUN1c3RvbVZhbGlkYXRpb24odGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIGN1c3RvbVZhbGlkYXRpb24pO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLmF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgY3VzdG9tVmFsaWRhdGlvbik7XHJcbiAgfTtcclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIGlzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmlzVmFsaWQodGhpcy5hdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbCk7XHJcbiAgfTtcclxuXHJcbiAgY2hlY2tJc0F1dG9jb21wbGF0ZUluRmlsdGVyKCkge1xyXG4gICAgaWYgKHRoaXMuRHJvcGRvd25UZW1wbGF0ZVZhcmlhYmxlKSB7XHJcbiAgICAgIHRoaXMuRHJvcGRvd25UZW1wbGF0ZVZhcmlhYmxlLnRvZ2dsZSgpO1xyXG4gICAgICB0aGlzLkRyb3Bkb3duVGVtcGxhdGVWYXJpYWJsZS50b2dnbGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgYmJzZi1jb250cm9sIGJic2YtYXV0b2NvbXBsZXRlLXRleHRib3hcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCIob3B0aW9ucy52aWV3VHlwZT09MSk/J2Jic2YtdmVydGljYWwnOidiYnNmLWhvcml6b250YWwnXCI+XHJcbiAgICA8IS0tbGFiZWwtLT5cclxuICAgIDxsYWJlbCAqbmdJZj1cIiFvcHRpb25zLmhpZGVMYWJlbFwiIGNsYXNzPVwiYmJzZi1sYWJlbCB7e29wdGlvbnMubGFiZWxFeHRyYUNsYXNzZXN9fVwiPlxyXG4gICAgICB7e29wdGlvbnMubGFiZWxWYWx1ZX19XHJcbiAgICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIigob3B0aW9ucy5zaG93QXN0ZXJpc2smJm9wdGlvbnMuaXNSZXF1aXJlZCl8fChvcHRpb25zLmlzUmVxdWlyZWQpKSYmIW9wdGlvbnMuaXNSZWFkb25seVwiXHJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPCEtLUlucHV0IGNvbnRhaW5lci0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCIhb3B0aW9ucy5pc1JlYWRvbmx5XCI+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8bmctYXV0b2NvbXBsZXRlIGNsYXNzPVwiZm9ybS1jb250cm9sICB7e29wdGlvbnMuZXh0cmFDbGFzc2VzfX1cIiAqbmdJZj1cIiFvcHRpb25zLmFsbG93TmV3U2VsZWN0aW9uXCJcclxuICAgICAgICBbZGF0YV09XCJkYXRhTGlzdFwiIFtpbml0aWFsVmFsdWVdPVwiU2VsZWN0ZWRWYWx1ZVwiIFtzZWFyY2hLZXl3b3JkXT1cImtleXdvcmRcIiBwbGFjZWhvbGRlcj1cInt7b3B0aW9ucy5wbGFjZWhvbGRlcn19XCJcclxuICAgICAgICAoc2VsZWN0ZWQpPSdzZWxlY3RFdmVudCgkZXZlbnQpJyAoaW5wdXRDaGFuZ2VkKT0nb25DaGFuZ2VTZWFyY2goJGV2ZW50KScgXHJcbiAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJvcHRpb25zLmN1c3RvbVRlbXBsYXRlP29wdGlvbnMuY3VzdG9tVGVtcGxhdGU6aXRlbVRlbXBsYXRlXCIgW2Rpcl09XCJ0ZXh0RGlyXCIgXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3tuYW1lfX1cIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJhdXRvQ29tcGxldGVUZXh0Qm94Q29udHJvbC5pbnZhbGlkICYmIGF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgIChpbnB1dENsZWFyZWQpPVwib25JbnB1dENsZWFyZWQoKVwiIChjbG9zZWQpPVwiY2hlY2tJc0F1dG9jb21wbGF0ZUluRmlsdGVyKClcIj5cclxuICAgICAgPC9uZy1hdXRvY29tcGxldGU+XHJcblxyXG4gICAgICA8bmctYXV0b2NvbXBsZXRlIGNsYXNzPVwiZm9ybS1jb250cm9sIHt7b3B0aW9ucy5leHRyYUNsYXNzZXN9fVwiICpuZ0lmPVwib3B0aW9ucy5hbGxvd05ld1NlbGVjdGlvblwiIFtkYXRhXT1cImRhdGFMaXN0XCJcclxuICAgICAgICBbaW5pdGlhbFZhbHVlXT1cIlNlbGVjdGVkVmFsdWVcIiBbc2VhcmNoS2V5d29yZF09XCJrZXl3b3JkXCIgcGxhY2Vob2xkZXI9XCJ7e29wdGlvbnMucGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgKHNlbGVjdGVkKT0nc2VsZWN0RXZlbnQoJGV2ZW50KScgKGlucHV0Q2hhbmdlZCk9J29uQ2hhbmdlU2VhcmNoKCRldmVudCknIFxyXG4gICAgICAgIFtpdGVtVGVtcGxhdGVdPVwib3B0aW9ucy5jdXN0b21UZW1wbGF0ZT9vcHRpb25zLmN1c3RvbVRlbXBsYXRlOml0ZW1UZW1wbGF0ZVwiIFtkaXJdPVwidGV4dERpclwiXHJcbiAgICAgICAgKGlucHV0Q2xlYXJlZCk9XCJvbklucHV0Q2xlYXJlZCgpXCIgZm9ybUNvbnRyb2xOYW1lPVwie3tuYW1lfX1cIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIlxyXG4gICAgICAgIGFyaWEtaW52YWxpZD1cInRydWVcIlxyXG4gICAgICAgIChjbG9zZWQpPVwiY2hlY2tJc0F1dG9jb21wbGF0ZUluRmlsdGVyKClcIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLmludmFsaWQgJiYgYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudG91Y2hlZFwiPlxyXG4gICAgICA8L25nLWF1dG9jb21wbGV0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1pdGVtPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJvcHRpb25zLml0ZW1XaXRoSW1hZ2VcIiBzcmM9XCJ7eyhpdGVtLmltYWdlP2l0ZW0uaW1hZ2U6YXZhdGFySW1hZ2UpfX1cIiAvPlxyXG4gICAgICAgIDxhIFtpbm5lckhUTUxdPVwiaXRlbS52YWx1ZVwiPjwvYT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSByZWFkb25seSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLmlzUmVhZG9ubHlcIj48c3BhbiBjbGFzcz1cInJlYWRvbmx5LXZpZXdcIj57e2F1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlLnZhbHVlfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic3VidGV4dC1jb250YWluZXJcIiAqbmdJZj1cIiFvcHRpb25zLmlzUmVhZG9ubHlcIj5cclxuICAgIDwhLS0gbGFiZWxEZXNjcmlwdGlvbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtY29udHJvbC1kZXNjXCIgKm5nSWY9XCJvcHRpb25zLmxhYmVsRGVzY3JpcHRpb24hPW51bGxcIj57e29wdGlvbnMubGFiZWxEZXNjcmlwdGlvbn19PC9kaXY+XHJcbiAgICA8IS0tIHJlcXVpcmVkVGV4dC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiICpuZ0lmPVwiKGF1dG9Db21wbGV0ZVRleHRCb3hDb250cm9sLmludmFsaWQgJiYgYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wudG91Y2hlZClcIj5cclxuICAgICAge3tnZXRFcnJvclZhbGlkYXRpb24oYXV0b0NvbXBsZXRlVGV4dEJveENvbnRyb2wuZXJyb3JzfGtleXZhbHVlKX19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwiKGdyb3VwLnZhbGlkJiZncm91cC5kaXJ0eSYmZ3JvdXAudG91Y2hlZCApfHwoZ3JvdXAudW50b3VjaGVkJiZncm91cC5pbnZhbGlkJiZncm91cC5kaXJ0eSlcIj5cclxuICAgIHt7cmVzZXRFcnJvcigpfX0gPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,21 +1,23 @@
1
+ import { Component, Input, Optional, ViewChild, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { FullCalendarModule } from '@fullcalendar/angular';
1
5
  import dayGridPlugin from '@fullcalendar/daygrid';
2
6
  import timeGrigPlugin from '@fullcalendar/timegrid';
3
7
  import interactionPlugin from '@fullcalendar/interaction'; // for dateClick
4
8
  import timeGridPlugin from '@fullcalendar/timegrid';
5
9
  import listPlugin from '@fullcalendar/list';
6
- import { Component, Input, Optional, ViewChild } from '@angular/core';
7
- import { FormControl } from '@angular/forms';
8
- import { CalendarView } from '../../Shared/Enums/CalendarView';
9
10
  import enGbLocale from '@fullcalendar/core/locales/en-gb';
10
11
  import ArLocale from '@fullcalendar/core/locales/ar';
12
+ import { CalendarView } from '../../Shared/Enums/CalendarView';
11
13
  import * as i0 from "@angular/core";
12
14
  import * as i1 from "../../Shared/services/validationErrorMassage.service";
13
15
  import * as i2 from "../../Shared/services/ControlUtility";
14
16
  import * as i3 from "@angular/forms";
15
- import * as i4 from "@bnsights/bbsf-utilities";
16
- import * as i5 from "@angular/common";
17
- import * as i6 from "@fullcalendar/angular";
18
- import * as i7 from "ngx-intl-tel-input";
17
+ import * as i4 from "@bnsights/bbsf-utilities/ui";
18
+ import * as i5 from "@bnsights/bbsf-utilities/translate";
19
+ import * as i6 from "@angular/common";
20
+ import * as i7 from "@fullcalendar/angular";
19
21
  export class CalendarComponent {
20
22
  static { this.controlContainerstatic = null; }
21
23
  // tslint:disable-next-line: max-line-length
@@ -153,15 +155,20 @@ export class CalendarComponent {
153
155
  EventClickFunction(arg.event);
154
156
  }
155
157
  }
156
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CalendarComponent, deps: [{ token: i1.ErrorMassageValidation }, { token: i2.ControlUtility }, { token: i3.ControlContainer, optional: true }, { token: i3.FormGroupDirective }, { token: i4.UtilityService }, { token: i4.BBSFTranslateService }, { token: i4.ControlValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
157
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CalendarComponent, selector: "BBSF-Calendar", inputs: { group: "group", options: "options" }, viewQueries: [{ propertyName: "calendarComponent", first: true, predicate: ["calendar"], descendants: true }], ngImport: i0, template: "<div class=\"b-control b-calendar\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n <!-- <full-calendar #calendar\r\n [defaultDate]=\"options.DefaultDate\"\r\n [defaultView]=\"DefaultView\"\r\n [header]=\"{\r\n left: 'prev,next today',\r\n center: 'title',\r\n right: CalendarViews\r\n }\"\r\n ngDefaultControl\r\n formControlName=\"{{options.Name}}\"\r\n [locales]=\"locales\"\r\n [plugins]=\"calendarPlugins\"\r\n [weekends]=\"calendarWeekends\"\r\n [events]=\"calendarEvents\"\r\n (dateClick)=\"OnDayClickFunction($event)\"\r\n (eventClick)=\"OnEventClickFunction($event)\"\r\n id=\"{{options.Name}}\"></full-calendar> -->\r\n\r\n\r\n <full-calendar *ngIf=\"options.calendarVisible\" [options]='calendarOptions' id=\"{{options.name}}\" ngDefaultControl\r\n formControlName=\"{{options.name}}\"></full-calendar>\r\n\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.FullCalendarComponent, selector: "full-calendar", inputs: ["options", "deepChangeDetection", "events", "eventSources", "resources"] }, { kind: "directive", type: i7.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CalendarComponent, deps: [{ token: i1.ErrorMassageValidation }, { token: i2.ControlUtility }, { token: i3.ControlContainer, optional: true }, { token: i3.FormGroupDirective }, { token: i4.UtilityService }, { token: i5.BBSFTranslateService }, { token: i4.ControlValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CalendarComponent, isStandalone: true, selector: "BBSF-Calendar", inputs: { group: "group", options: "options" }, viewQueries: [{ propertyName: "calendarComponent", first: true, predicate: ["calendar"], descendants: true }], ngImport: i0, template: "<div class=\"b-control b-calendar\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n <!-- <full-calendar #calendar\r\n [defaultDate]=\"options.DefaultDate\"\r\n [defaultView]=\"DefaultView\"\r\n [header]=\"{\r\n left: 'prev,next today',\r\n center: 'title',\r\n right: CalendarViews\r\n }\"\r\n ngDefaultControl\r\n formControlName=\"{{options.Name}}\"\r\n [locales]=\"locales\"\r\n [plugins]=\"calendarPlugins\"\r\n [weekends]=\"calendarWeekends\"\r\n [events]=\"calendarEvents\"\r\n (dateClick)=\"OnDayClickFunction($event)\"\r\n (eventClick)=\"OnEventClickFunction($event)\"\r\n id=\"{{options.Name}}\"></full-calendar> -->\r\n\r\n\r\n <full-calendar *ngIf=\"options.calendarVisible\" [options]='calendarOptions' id=\"{{options.name}}\" ngDefaultControl\r\n formControlName=\"{{options.name}}\"></full-calendar>\r\n\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FullCalendarModule }, { kind: "component", type: i7.FullCalendarComponent, selector: "full-calendar", inputs: ["options", "deepChangeDetection", "events", "eventSources", "resources"] }] }); }
158
160
  }
159
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CalendarComponent, decorators: [{
160
162
  type: Component,
161
- args: [{ selector: 'BBSF-Calendar', template: "<div class=\"b-control b-calendar\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n <!-- <full-calendar #calendar\r\n [defaultDate]=\"options.DefaultDate\"\r\n [defaultView]=\"DefaultView\"\r\n [header]=\"{\r\n left: 'prev,next today',\r\n center: 'title',\r\n right: CalendarViews\r\n }\"\r\n ngDefaultControl\r\n formControlName=\"{{options.Name}}\"\r\n [locales]=\"locales\"\r\n [plugins]=\"calendarPlugins\"\r\n [weekends]=\"calendarWeekends\"\r\n [events]=\"calendarEvents\"\r\n (dateClick)=\"OnDayClickFunction($event)\"\r\n (eventClick)=\"OnEventClickFunction($event)\"\r\n id=\"{{options.Name}}\"></full-calendar> -->\r\n\r\n\r\n <full-calendar *ngIf=\"options.calendarVisible\" [options]='calendarOptions' id=\"{{options.name}}\" ngDefaultControl\r\n formControlName=\"{{options.name}}\"></full-calendar>\r\n\r\n </div>\r\n</div>" }]
163
+ args: [{ selector: 'BBSF-Calendar', standalone: true, imports: [
164
+ CommonModule,
165
+ FormsModule,
166
+ ReactiveFormsModule,
167
+ FullCalendarModule
168
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA], template: "<div class=\"b-control b-calendar\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n <!-- <full-calendar #calendar\r\n [defaultDate]=\"options.DefaultDate\"\r\n [defaultView]=\"DefaultView\"\r\n [header]=\"{\r\n left: 'prev,next today',\r\n center: 'title',\r\n right: CalendarViews\r\n }\"\r\n ngDefaultControl\r\n formControlName=\"{{options.Name}}\"\r\n [locales]=\"locales\"\r\n [plugins]=\"calendarPlugins\"\r\n [weekends]=\"calendarWeekends\"\r\n [events]=\"calendarEvents\"\r\n (dateClick)=\"OnDayClickFunction($event)\"\r\n (eventClick)=\"OnEventClickFunction($event)\"\r\n id=\"{{options.Name}}\"></full-calendar> -->\r\n\r\n\r\n <full-calendar *ngIf=\"options.calendarVisible\" [options]='calendarOptions' id=\"{{options.name}}\" ngDefaultControl\r\n formControlName=\"{{options.name}}\"></full-calendar>\r\n\r\n </div>\r\n</div>" }]
162
169
  }], ctorParameters: () => [{ type: i1.ErrorMassageValidation }, { type: i2.ControlUtility }, { type: i3.ControlContainer, decorators: [{
163
170
  type: Optional
164
- }] }, { type: i3.FormGroupDirective }, { type: i4.UtilityService }, { type: i4.BBSFTranslateService }, { type: i4.ControlValidationService }], propDecorators: { group: [{
171
+ }] }, { type: i3.FormGroupDirective }, { type: i4.UtilityService }, { type: i5.BBSFTranslateService }, { type: i4.ControlValidationService }], propDecorators: { group: [{
165
172
  type: Input
166
173
  }], options: [{
167
174
  type: Input
@@ -169,4 +176,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
169
176
  type: ViewChild,
170
177
  args: ['calendar', { static: false }]
171
178
  }] } });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL0NhbGVuZGFyL0NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9DYWxlbmRhci9DYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLGFBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLGNBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLGlCQUFpQixNQUFNLDJCQUEyQixDQUFDLENBQUMsZ0JBQWdCO0FBQzNFLE9BQU8sY0FBYyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sVUFBVSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBb0UsTUFBTSxnQkFBZ0IsQ0FBQztBQUkvRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxVQUFVLE1BQU0sa0NBQWtDLENBQUM7QUFDMUQsT0FBTyxRQUFRLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7OztBQVNyRCxNQUFNLE9BQU8saUJBQWlCO2FBR3JCLDJCQUFzQixHQUFHLElBQUksQUFBUCxDQUFRO0lBQ3JDLDRDQUE0QztJQUM1QyxZQUFvQixZQUFvQyxFQUFVLGNBQThCLEVBQXNCLGdCQUFrQyxFQUFTLGdCQUFvQyxFQUFVLGNBQThCLEVBQVUsU0FBK0IsRUFBVSx3QkFBa0Q7UUFBOVQsaUJBQVksR0FBWixZQUFZLENBQXdCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdC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LGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDM0Qsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBRUgsQ0FBQzsrR0E5SlUsaUJBQWlCO21HQUFqQixpQkFBaUIsb05DdkI5QixxcENBeUJNOzs0RkRGTyxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0UsZUFBZTs7MEJBUzBFLFFBQVE7aUxBR2xHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRW9DLGlCQUFpQjtzQkFBMUQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRnVsbENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bGxjYWxlbmRhci9hbmd1bGFyJztcclxuaW1wb3J0ICogYXMgY29yZSBmcm9tICdAZnVsbGNhbGVuZGFyL2NvcmUnO1xyXG5pbXBvcnQgZGF5R3JpZFBsdWdpbiBmcm9tICdAZnVsbGNhbGVuZGFyL2RheWdyaWQnO1xyXG5pbXBvcnQgdGltZUdyaWdQbHVnaW4gZnJvbSAnQGZ1bGxjYWxlbmRhci90aW1lZ3JpZCc7XHJcbmltcG9ydCBpbnRlcmFjdGlvblBsdWdpbiBmcm9tICdAZnVsbGNhbGVuZGFyL2ludGVyYWN0aW9uJzsgLy8gZm9yIGRhdGVDbGlja1xyXG5pbXBvcnQgdGltZUdyaWRQbHVnaW4gZnJvbSAnQGZ1bGxjYWxlbmRhci90aW1lZ3JpZCc7XHJcbmltcG9ydCBsaXN0UGx1Z2luIGZyb20gJ0BmdWxsY2FsZW5kYXIvbGlzdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy92YWxpZGF0aW9uRXJyb3JNYXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IENhbGVuZGFyT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvQ2FsZW5kYXJPcHRpb25zJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL0NhbGVuZGFyVmlldyc7XHJcbmltcG9ydCBlbkdiTG9jYWxlIGZyb20gJ0BmdWxsY2FsZW5kYXIvY29yZS9sb2NhbGVzL2VuLWdiJztcclxuaW1wb3J0IEFyTG9jYWxlIGZyb20gJ0BmdWxsY2FsZW5kYXIvY29yZS9sb2NhbGVzL2FyJztcclxuaW1wb3J0IHsgTGFuZ0NoYW5nZUV2ZW50IH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1DYWxlbmRhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9DYWxlbmRhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIEVycm9ySGFuZGxlcjogRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiwgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lciwgcHVibGljIHBob25lQ29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSwgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlOiBCQlNGVHJhbnNsYXRlU2VydmljZSwgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSkge1xyXG4gICAgQ2FsZW5kYXJDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBDYWxlbmRhck9wdGlvbnM7XHJcbiAgY2FsZW5kYXJGb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNhbGVuZGFyQ29tcG9uZW50OiBGdWxsQ2FsZW5kYXJDb21wb25lbnQ7IC8vIHRoZSAjY2FsZW5kYXIgaW4gdGhlIHRlbXBsYXRlXHJcblxyXG5cclxuXHJcbiAgY2FsZW5kYXJWaXNpYmxlID0gdHJ1ZTtcclxuICBjYWxlbmRhck9wdGlvbnM6IGNvcmUuQ2FsZW5kYXJPcHRpb25zO1xyXG4gIGN1cnJlbnRFdmVudHM6IGNvcmUuRXZlbnRBcGlbXSA9IFtdO1xyXG4gIGNhbGVuZGFyUGx1Z2lucyA9IFtkYXlHcmlkUGx1Z2luLCB0aW1lR3JpZ1BsdWdpbiwgaW50ZXJhY3Rpb25QbHVnaW4sIGxpc3RQbHVnaW5dO1xyXG4gIGNhbGVuZGFyV2Vla2VuZHMgPSB0cnVlO1xyXG4gIGNhbGVuZGFyRXZlbnRzOiBjb3JlLkV2ZW50SW5wdXRbXSA9IFtdO1xyXG4gIGRlZmF1bHRWaWV3ID0gXCJcIjtcclxuICBjYWxlbmRhclZpZXdzID0gJyc7XHJcbiAgbG9jYWxlcyA9IFtdO1xyXG4gIGN1cnJlbnRMYW5ndWFnZSA9IFwiXCI7XHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBzd2l0Y2ggKGF3YWl0IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCkpIHtcclxuICAgICAgY2FzZSAnYXInOlxyXG4gICAgICAgIHRoaXMubG9jYWxlcyA9IFtBckxvY2FsZV07XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBcIkFyXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VuJzpcclxuICAgICAgICB0aGlzLmxvY2FsZXMgPSBbZW5HYkxvY2FsZV07XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBcIkVuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGV2ZW50LmxhbmcpIHtcclxuICAgICAgICBjYXNlICdhcic6XHJcbiAgICAgICAgICB0aGlzLmxvY2FsZXMgPSBbQXJMb2NhbGVdO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBcIkFyXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdlbic6XHJcbiAgICAgICAgICB0aGlzLmxvY2FsZXMgPSBbZW5HYkxvY2FsZV07XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IFwiRW5cIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2FsZW5kYXJFdmVudHMgPSB0aGlzLm9wdGlvbnMuZXZlbnRMaXN0O1xyXG4gICAgdGhpcy5jYWxlbmRhcldlZWtlbmRzID0gdGhpcy5vcHRpb25zLmFsbG93Q2FsZW5kYXJXZWVrZW5kcztcclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmRlZmF1bHRWaWV3KSB7XHJcbiAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3Lk1vbnRoOlxyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZpZXcgPSBcImRheUdyaWRNb250aFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENhbGVuZGFyVmlldy5XZWVrbHk6XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VmlldyA9IFwidGltZUdyaWRXZWVrXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LkRhaWx5OlxyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZpZXcgPSBcInRpbWVHcmlkRGF5XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmNhbGVuZGFyVmlld3MgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuY2FsZW5kYXJWaWV3cy5sZW5ndGggPiAwKVxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLmNhbGVuZGFyVmlld3MubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMub3B0aW9ucy5jYWxlbmRhclZpZXdzW2luZGV4XTtcclxuICAgICAgICBzd2l0Y2ggKGVsZW1lbnQpIHtcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LkFnZW5kYTpcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclZpZXdzICs9IFwibGlzdFdlZWssXCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuRGFpbHk6XHJcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJWaWV3cyArPSBcInRpbWVHcmlkRGF5LFwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LldlZWtseTpcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclZpZXdzICs9IFwidGltZUdyaWRXZWVrLFwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3Lk1vbnRoOlxyXG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyVmlld3MgKz0gXCJkYXlHcmlkTW9udGgsXCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLmNhbGVuZGFyRm9ybUNvbnRyb2wgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMub3B0aW9ucy5uYW1lXTsgLy8gIG5ldyBGb3JtQ29udHJvbCgnJyx2YWxpZGF0aW9uUnVsZXMpO1xyXG5cclxuXHJcbiAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucyA9IHtcclxuICAgICAgcGx1Z2luczogW1xyXG4gICAgICAgIGRheUdyaWRQbHVnaW4sXHJcbiAgICAgICAgdGltZUdyaWRQbHVnaW4sXHJcbiAgICAgICAgbGlzdFBsdWdpbixcclxuICAgICAgICBpbnRlcmFjdGlvblBsdWdpblxyXG4gICAgICBdLFxyXG4gICAgICBoZWFkZXJUb29sYmFyOiB7XHJcbiAgICAgICAgbGVmdDogJ3ByZXYsbmV4dCB0b2RheScsXHJcbiAgICAgICAgY2VudGVyOiAndGl0bGUnLFxyXG4gICAgICAgIHJpZ2h0OiB0aGlzLmNhbGVuZGFyVmlld3Muc3Vic3RyaW5nKDAsIHRoaXMuY2FsZW5kYXJWaWV3cy5sZW5ndGggLSAxKVxyXG4gICAgICB9LFxyXG4gICAgICBsb2NhbGVzOiB0aGlzLmxvY2FsZXMsXHJcbiAgICAgIGxvY2FsZTogdGhpcy5jdXJyZW50TGFuZ3VhZ2UsXHJcbiAgICAgIGluaXRpYWxWaWV3OiB0aGlzLmNhbGVuZGFyVmlld3Muc3BsaXQoJywnKVswXSxcclxuICAgICAgaW5pdGlhbEV2ZW50czogdGhpcy5jYWxlbmRhckV2ZW50cyxcclxuICAgICAgaW5pdGlhbERhdGU6IHRoaXMub3B0aW9ucy5kZWZhdWx0RGF0ZSxcclxuICAgICAgd2Vla2VuZHM6IHRoaXMub3B0aW9ucy5hbGxvd0NhbGVuZGFyV2Vla2VuZHMsXHJcbiAgICAgIGVkaXRhYmxlOiB0aGlzLm9wdGlvbnMuZXZlbnRlZGl0YWJsZSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5vcHRpb25zLmV2ZW50c2VsZWN0YWJsZSxcclxuICAgICAgLy8gc2VsZWN0TWlycm9yOiB0cnVlLFxyXG4gICAgICBkYXlNYXhFdmVudHM6IHRoaXMub3B0aW9ucy5kYXlNYXhFdmVudHMsXHJcbiAgICAgIHNlbGVjdDogdGhpcy5PbkRheUNsaWNrRnVuY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgZXZlbnRDbGljazogdGhpcy5PbkV2ZW50Q2xpY2tGdW5jdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvLyBldmVudHNTZXQ6IHRoaXMuaGFuZGxlRXZlbnRzLmJpbmQodGhpcylcclxuICAgICAgLyogeW91IGNhbiB1cGRhdGUgYSByZW1vdGUgZGF0YWJhc2Ugd2hlbiB0aGVzZSBmaXJlOlxyXG4gICAgICBldmVudEFkZDpcclxuICAgICAgZXZlbnRDaGFuZ2U6XHJcbiAgICAgIGV2ZW50UmVtb3ZlOlxyXG4gICAgICAqL1xyXG4gICAgfTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UucmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9O1xyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JzaXRlbTogYW55W10pIHtcclxuICB9XHJcblxyXG5cclxuICBPbkRheUNsaWNrRnVuY3Rpb24oYXJnKSB7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vbkRheUNsaWNrRnVuY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICBsZXQgRGF5Q2xpY2tGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5vbkRheUNsaWNrRnVuY3Rpb247XHJcbiAgICAgIERheUNsaWNrRnVuY3Rpb24oYXJnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE9uRXZlbnRDbGlja0Z1bmN0aW9uKGFyZykge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vbkV2ZW50Q2xpY2tGdW5jdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBFdmVudENsaWNrRnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMub25FdmVudENsaWNrRnVuY3Rpb247XHJcbiAgICAgIEV2ZW50Q2xpY2tGdW5jdGlvbihhcmcuZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gaGFuZGxlRGF0ZVNlbGVjdChzZWxlY3RJbmZvOiBEYXRlU2VsZWN0QXJnKSB7XHJcbiAgLy8gICBjb25zdCB0aXRsZSA9IHByb21wdCgnUGxlYXNlIGVudGVyIGEgbmV3IHRpdGxlIGZvciB5b3VyIGV2ZW50Jyk7XHJcbiAgLy8gICBjb25zdCBjYWxlbmRhckFwaSA9IHNlbGVjdEluZm8udmlldy5jYWxlbmRhcjtcclxuXHJcbiAgLy8gICBjYWxlbmRhckFwaS51bnNlbGVjdCgpOyAvLyBjbGVhciBkYXRlIHNlbGVjdGlvblxyXG5cclxuICAvLyAgIGlmICh0aXRsZSkge1xyXG4gIC8vICAgICBjYWxlbmRhckFwaS5hZGRFdmVudCh7XHJcbiAgLy8gICAgICAgaWQ6IFwiMVwiLFxyXG4gIC8vICAgICAgIHRpdGxlLFxyXG4gIC8vICAgICAgIHN0YXJ0OiBzZWxlY3RJbmZvLnN0YXJ0U3RyLFxyXG4gIC8vICAgICAgIGVuZDogc2VsZWN0SW5mby5lbmRTdHIsXHJcbiAgLy8gICAgICAgYWxsRGF5OiBzZWxlY3RJbmZvLmFsbERheVxyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGhhbmRsZUV2ZW50Q2xpY2soY2xpY2tJbmZvOiBFdmVudENsaWNrQXJnKSB7XHJcbiAgLy8gICBpZiAoY29uZmlybShgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgZXZlbnQgJyR7Y2xpY2tJbmZvLmV2ZW50LnRpdGxlfSdgKSkge1xyXG4gIC8vICAgICBjbGlja0luZm8uZXZlbnQucmVtb3ZlKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBoYW5kbGVFdmVudHMoZXZlbnRzOiBFdmVudEFwaVtdKSB7XHJcbiAgLy8gICB0aGlzLmN1cnJlbnRFdmVudHMgPSBldmVudHM7XHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG5cclxufVxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJiLWNvbnRyb2wgYi1jYWxlbmRhclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHZhbGlkYXRlIGlzLWludmFsaWRcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgICA8IS0tIDxmdWxsLWNhbGVuZGFyICNjYWxlbmRhclxyXG4gICAgICAgICAgICAgICAgICAgW2RlZmF1bHREYXRlXT1cIm9wdGlvbnMuRGVmYXVsdERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWaWV3XT1cIkRlZmF1bHRWaWV3XCJcclxuICAgICAgICAgICAgICAgICAgIFtoZWFkZXJdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6ICdwcmV2LG5leHQgdG9kYXknLFxyXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlcjogJ3RpdGxlJyxcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogQ2FsZW5kYXJWaWV3c1xyXG4gICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgIG5nRGVmYXVsdENvbnRyb2xcclxuICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5OYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgW2xvY2FsZXNdPVwibG9jYWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICBbcGx1Z2luc109XCJjYWxlbmRhclBsdWdpbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgW3dlZWtlbmRzXT1cImNhbGVuZGFyV2Vla2VuZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgW2V2ZW50c109XCJjYWxlbmRhckV2ZW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAoZGF0ZUNsaWNrKT1cIk9uRGF5Q2xpY2tGdW5jdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgIChldmVudENsaWNrKT1cIk9uRXZlbnRDbGlja0Z1bmN0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgaWQ9XCJ7e29wdGlvbnMuTmFtZX19XCI+PC9mdWxsLWNhbGVuZGFyPiAtLT5cclxuXHJcblxyXG4gICAgPGZ1bGwtY2FsZW5kYXIgKm5nSWY9XCJvcHRpb25zLmNhbGVuZGFyVmlzaWJsZVwiIFtvcHRpb25zXT0nY2FsZW5kYXJPcHRpb25zJyBpZD1cInt7b3B0aW9ucy5uYW1lfX1cIiBuZ0RlZmF1bHRDb250cm9sXHJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5uYW1lfX1cIj48L2Z1bGwtY2FsZW5kYXI+XHJcblxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL0NhbGVuZGFyL0NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9DYWxlbmRhci9DYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFvRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqSixPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFFbEYsT0FBTyxhQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxjQUFjLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQyxDQUFDLGdCQUFnQjtBQUMzRSxPQUFPLGNBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLFVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLFVBQVUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRCxPQUFPLFFBQVEsTUFBTSwrQkFBK0IsQ0FBQztBQU9yRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7OztBQWUvRCxNQUFNLE9BQU8saUJBQWlCO2FBR3JCLDJCQUFzQixHQUFHLElBQUksQUFBUCxDQUFRO0lBQ3JDLDRDQUE0QztJQUM1QyxZ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O1lBQ3ZELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQUc7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixJQUFJLElBQUksRUFBRTtZQUM3QyxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDM0Qsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO0lBRUgsQ0FBQzsrR0E5SlUsaUJBQWlCO21HQUFqQixpQkFBaUIsd09DakM5QixxcENBeUJNLHlERERGLFlBQVksa0lBQ1osV0FBVyxrakJBQ1gsbUJBQW1CLCtVQUNuQixrQkFBa0I7OzRGQU1ULGlCQUFpQjtrQkFiN0IsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGtCQUFrQjtxQkFDbkIsV0FDUSxDQUFDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDOzswQkFTZ0QsUUFBUTtpTEFHbEcsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFb0MsaUJBQWlCO3NCQUExRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5PX0VSUk9SU19TQ0hFTUEgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXBEaXJlY3RpdmUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGdWxsQ2FsZW5kYXJNb2R1bGUsIEZ1bGxDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJ0BmdWxsY2FsZW5kYXIvYW5ndWxhcic7XHJcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnQGZ1bGxjYWxlbmRhci9jb3JlJztcclxuaW1wb3J0IGRheUdyaWRQbHVnaW4gZnJvbSAnQGZ1bGxjYWxlbmRhci9kYXlncmlkJztcclxuaW1wb3J0IHRpbWVHcmlnUGx1Z2luIGZyb20gJ0BmdWxsY2FsZW5kYXIvdGltZWdyaWQnO1xyXG5pbXBvcnQgaW50ZXJhY3Rpb25QbHVnaW4gZnJvbSAnQGZ1bGxjYWxlbmRhci9pbnRlcmFjdGlvbic7IC8vIGZvciBkYXRlQ2xpY2tcclxuaW1wb3J0IHRpbWVHcmlkUGx1Z2luIGZyb20gJ0BmdWxsY2FsZW5kYXIvdGltZWdyaWQnO1xyXG5pbXBvcnQgbGlzdFBsdWdpbiBmcm9tICdAZnVsbGNhbGVuZGFyL2xpc3QnO1xyXG5pbXBvcnQgZW5HYkxvY2FsZSBmcm9tICdAZnVsbGNhbGVuZGFyL2NvcmUvbG9jYWxlcy9lbi1nYic7XHJcbmltcG9ydCBBckxvY2FsZSBmcm9tICdAZnVsbGNhbGVuZGFyL2NvcmUvbG9jYWxlcy9hcic7XHJcbmltcG9ydCB7IExhbmdDaGFuZ2VFdmVudCB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBCQlNGVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcy90cmFuc2xhdGUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzL3VpJztcclxuaW1wb3J0IHsgRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy92YWxpZGF0aW9uRXJyb3JNYXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IENhbGVuZGFyT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvQ2FsZW5kYXJPcHRpb25zJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL0NhbGVuZGFyVmlldyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtQ2FsZW5kYXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgRnVsbENhbGVuZGFyTW9kdWxlXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTk9fRVJST1JTX1NDSEVNQV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9DYWxlbmRhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIEVycm9ySGFuZGxlcjogRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiwgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lciwgcHVibGljIHBob25lQ29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSwgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlOiBCQlNGVHJhbnNsYXRlU2VydmljZSwgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSkge1xyXG4gICAgQ2FsZW5kYXJDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBDYWxlbmRhck9wdGlvbnM7XHJcbiAgY2FsZW5kYXJGb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNhbGVuZGFyQ29tcG9uZW50OiBGdWxsQ2FsZW5kYXJDb21wb25lbnQ7IC8vIHRoZSAjY2FsZW5kYXIgaW4gdGhlIHRlbXBsYXRlXHJcblxyXG5cclxuXHJcbiAgY2FsZW5kYXJWaXNpYmxlID0gdHJ1ZTtcclxuICBjYWxlbmRhck9wdGlvbnM6IGNvcmUuQ2FsZW5kYXJPcHRpb25zO1xyXG4gIGN1cnJlbnRFdmVudHM6IGNvcmUuRXZlbnRBcGlbXSA9IFtdO1xyXG4gIGNhbGVuZGFyUGx1Z2lucyA9IFtkYXlHcmlkUGx1Z2luLCB0aW1lR3JpZ1BsdWdpbiwgaW50ZXJhY3Rpb25QbHVnaW4sIGxpc3RQbHVnaW5dO1xyXG4gIGNhbGVuZGFyV2Vla2VuZHMgPSB0cnVlO1xyXG4gIGNhbGVuZGFyRXZlbnRzOiBjb3JlLkV2ZW50SW5wdXRbXSA9IFtdO1xyXG4gIGRlZmF1bHRWaWV3ID0gXCJcIjtcclxuICBjYWxlbmRhclZpZXdzID0gJyc7XHJcbiAgbG9jYWxlcyA9IFtdO1xyXG4gIGN1cnJlbnRMYW5ndWFnZSA9IFwiXCI7XHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBzd2l0Y2ggKGF3YWl0IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCkpIHtcclxuICAgICAgY2FzZSAnYXInOlxyXG4gICAgICAgIHRoaXMubG9jYWxlcyA9IFtBckxvY2FsZV07XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBcIkFyXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VuJzpcclxuICAgICAgICB0aGlzLmxvY2FsZXMgPSBbZW5HYkxvY2FsZV07XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBcIkVuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGV2ZW50LmxhbmcpIHtcclxuICAgICAgICBjYXNlICdhcic6XHJcbiAgICAgICAgICB0aGlzLmxvY2FsZXMgPSBbQXJMb2NhbGVdO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSBcIkFyXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdlbic6XHJcbiAgICAgICAgICB0aGlzLmxvY2FsZXMgPSBbZW5HYkxvY2FsZV07XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSA9IFwiRW5cIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2FsZW5kYXJFdmVudHMgPSB0aGlzLm9wdGlvbnMuZXZlbnRMaXN0O1xyXG4gICAgdGhpcy5jYWxlbmRhcldlZWtlbmRzID0gdGhpcy5vcHRpb25zLmFsbG93Q2FsZW5kYXJXZWVrZW5kcztcclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLmRlZmF1bHRWaWV3KSB7XHJcbiAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3Lk1vbnRoOlxyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZpZXcgPSBcImRheUdyaWRNb250aFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENhbGVuZGFyVmlldy5XZWVrbHk6XHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VmlldyA9IFwidGltZUdyaWRXZWVrXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LkRhaWx5OlxyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZpZXcgPSBcInRpbWVHcmlkRGF5XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmNhbGVuZGFyVmlld3MgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuY2FsZW5kYXJWaWV3cy5sZW5ndGggPiAwKVxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLmNhbGVuZGFyVmlld3MubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMub3B0aW9ucy5jYWxlbmRhclZpZXdzW2luZGV4XTtcclxuICAgICAgICBzd2l0Y2ggKGVsZW1lbnQpIHtcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LkFnZW5kYTpcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclZpZXdzICs9IFwibGlzdFdlZWssXCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuRGFpbHk6XHJcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJWaWV3cyArPSBcInRpbWVHcmlkRGF5LFwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LldlZWtseTpcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclZpZXdzICs9IFwidGltZUdyaWRXZWVrLFwiO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3Lk1vbnRoOlxyXG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyVmlld3MgKz0gXCJkYXlHcmlkTW9udGgsXCI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLmNhbGVuZGFyRm9ybUNvbnRyb2wgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMub3B0aW9ucy5uYW1lXTsgLy8gIG5ldyBGb3JtQ29udHJvbCgnJyx2YWxpZGF0aW9uUnVsZXMpO1xyXG5cclxuXHJcbiAgICB0aGlzLmNhbGVuZGFyT3B0aW9ucyA9IHtcclxuICAgICAgcGx1Z2luczogW1xyXG4gICAgICAgIGRheUdyaWRQbHVnaW4sXHJcbiAgICAgICAgdGltZUdyaWRQbHVnaW4sXHJcbiAgICAgICAgbGlzdFBsdWdpbixcclxuICAgICAgICBpbnRlcmFjdGlvblBsdWdpblxyXG4gICAgICBdLFxyXG4gICAgICBoZWFkZXJUb29sYmFyOiB7XHJcbiAgICAgICAgbGVmdDogJ3ByZXYsbmV4dCB0b2RheScsXHJcbiAgICAgICAgY2VudGVyOiAndGl0bGUnLFxyXG4gICAgICAgIHJpZ2h0OiB0aGlzLmNhbGVuZGFyVmlld3Muc3Vic3RyaW5nKDAsIHRoaXMuY2FsZW5kYXJWaWV3cy5sZW5ndGggLSAxKVxyXG4gICAgICB9LFxyXG4gICAgICBsb2NhbGVzOiB0aGlzLmxvY2FsZXMsXHJcbiAgICAgIGxvY2FsZTogdGhpcy5jdXJyZW50TGFuZ3VhZ2UsXHJcbiAgICAgIGluaXRpYWxWaWV3OiB0aGlzLmNhbGVuZGFyVmlld3Muc3BsaXQoJywnKVswXSxcclxuICAgICAgaW5pdGlhbEV2ZW50czogdGhpcy5jYWxlbmRhckV2ZW50cyxcclxuICAgICAgaW5pdGlhbERhdGU6IHRoaXMub3B0aW9ucy5kZWZhdWx0RGF0ZSxcclxuICAgICAgd2Vla2VuZHM6IHRoaXMub3B0aW9ucy5hbGxvd0NhbGVuZGFyV2Vla2VuZHMsXHJcbiAgICAgIGVkaXRhYmxlOiB0aGlzLm9wdGlvbnMuZXZlbnRlZGl0YWJsZSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5vcHRpb25zLmV2ZW50c2VsZWN0YWJsZSxcclxuICAgICAgLy8gc2VsZWN0TWlycm9yOiB0cnVlLFxyXG4gICAgICBkYXlNYXhFdmVudHM6IHRoaXMub3B0aW9ucy5kYXlNYXhFdmVudHMsXHJcbiAgICAgIHNlbGVjdDogdGhpcy5PbkRheUNsaWNrRnVuY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgZXZlbnRDbGljazogdGhpcy5PbkV2ZW50Q2xpY2tGdW5jdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICAvLyBldmVudHNTZXQ6IHRoaXMuaGFuZGxlRXZlbnRzLmJpbmQodGhpcylcclxuICAgICAgLyogeW91IGNhbiB1cGRhdGUgYSByZW1vdGUgZGF0YWJhc2Ugd2hlbiB0aGVzZSBmaXJlOlxyXG4gICAgICBldmVudEFkZDpcclxuICAgICAgZXZlbnRDaGFuZ2U6XHJcbiAgICAgIGV2ZW50UmVtb3ZlOlxyXG4gICAgICAqL1xyXG4gICAgfTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UucmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9O1xyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JzaXRlbTogYW55W10pIHtcclxuICB9XHJcblxyXG5cclxuICBPbkRheUNsaWNrRnVuY3Rpb24oYXJnKSB7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vbkRheUNsaWNrRnVuY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICBsZXQgRGF5Q2xpY2tGdW5jdGlvbiA9IHRoaXMub3B0aW9ucy5vbkRheUNsaWNrRnVuY3Rpb247XHJcbiAgICAgIERheUNsaWNrRnVuY3Rpb24oYXJnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE9uRXZlbnRDbGlja0Z1bmN0aW9uKGFyZykge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vbkV2ZW50Q2xpY2tGdW5jdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIGxldCBFdmVudENsaWNrRnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMub25FdmVudENsaWNrRnVuY3Rpb247XHJcbiAgICAgIEV2ZW50Q2xpY2tGdW5jdGlvbihhcmcuZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gaGFuZGxlRGF0ZVNlbGVjdChzZWxlY3RJbmZvOiBEYXRlU2VsZWN0QXJnKSB7XHJcbiAgLy8gICBjb25zdCB0aXRsZSA9IHByb21wdCgnUGxlYXNlIGVudGVyIGEgbmV3IHRpdGxlIGZvciB5b3VyIGV2ZW50Jyk7XHJcbiAgLy8gICBjb25zdCBjYWxlbmRhckFwaSA9IHNlbGVjdEluZm8udmlldy5jYWxlbmRhcjtcclxuXHJcbiAgLy8gICBjYWxlbmRhckFwaS51bnNlbGVjdCgpOyAvLyBjbGVhciBkYXRlIHNlbGVjdGlvblxyXG5cclxuICAvLyAgIGlmICh0aXRsZSkge1xyXG4gIC8vICAgICBjYWxlbmRhckFwaS5hZGRFdmVudCh7XHJcbiAgLy8gICAgICAgaWQ6IFwiMVwiLFxyXG4gIC8vICAgICAgIHRpdGxlLFxyXG4gIC8vICAgICAgIHN0YXJ0OiBzZWxlY3RJbmZvLnN0YXJ0U3RyLFxyXG4gIC8vICAgICAgIGVuZDogc2VsZWN0SW5mby5lbmRTdHIsXHJcbiAgLy8gICAgICAgYWxsRGF5OiBzZWxlY3RJbmZvLmFsbERheVxyXG4gIC8vICAgICB9KTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vIGhhbmRsZUV2ZW50Q2xpY2soY2xpY2tJbmZvOiBFdmVudENsaWNrQXJnKSB7XHJcbiAgLy8gICBpZiAoY29uZmlybShgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgZXZlbnQgJyR7Y2xpY2tJbmZvLmV2ZW50LnRpdGxlfSdgKSkge1xyXG4gIC8vICAgICBjbGlja0luZm8uZXZlbnQucmVtb3ZlKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBoYW5kbGVFdmVudHMoZXZlbnRzOiBFdmVudEFwaVtdKSB7XHJcbiAgLy8gICB0aGlzLmN1cnJlbnRFdmVudHMgPSBldmVudHM7XHJcbiAgLy8gfVxyXG5cclxuXHJcblxyXG5cclxufVxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJiLWNvbnRyb2wgYi1jYWxlbmRhclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHZhbGlkYXRlIGlzLWludmFsaWRcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgICA8IS0tIDxmdWxsLWNhbGVuZGFyICNjYWxlbmRhclxyXG4gICAgICAgICAgICAgICAgICAgW2RlZmF1bHREYXRlXT1cIm9wdGlvbnMuRGVmYXVsdERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWaWV3XT1cIkRlZmF1bHRWaWV3XCJcclxuICAgICAgICAgICAgICAgICAgIFtoZWFkZXJdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6ICdwcmV2LG5leHQgdG9kYXknLFxyXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlcjogJ3RpdGxlJyxcclxuICAgICAgICAgICAgICAgICAgICByaWdodDogQ2FsZW5kYXJWaWV3c1xyXG4gICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgIG5nRGVmYXVsdENvbnRyb2xcclxuICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5OYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgW2xvY2FsZXNdPVwibG9jYWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICBbcGx1Z2luc109XCJjYWxlbmRhclBsdWdpbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgW3dlZWtlbmRzXT1cImNhbGVuZGFyV2Vla2VuZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgW2V2ZW50c109XCJjYWxlbmRhckV2ZW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAoZGF0ZUNsaWNrKT1cIk9uRGF5Q2xpY2tGdW5jdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgIChldmVudENsaWNrKT1cIk9uRXZlbnRDbGlja0Z1bmN0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgaWQ9XCJ7e29wdGlvbnMuTmFtZX19XCI+PC9mdWxsLWNhbGVuZGFyPiAtLT5cclxuXHJcblxyXG4gICAgPGZ1bGwtY2FsZW5kYXIgKm5nSWY9XCJvcHRpb25zLmNhbGVuZGFyVmlzaWJsZVwiIFtvcHRpb25zXT0nY2FsZW5kYXJPcHRpb25zJyBpZD1cInt7b3B0aW9ucy5uYW1lfX1cIiBuZ0RlZmF1bHRDb250cm9sXHJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5uYW1lfX1cIj48L2Z1bGwtY2FsZW5kYXI+XHJcblxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=