@pepperi-addons/ngx-lib 0.4.2-beta.9 → 0.4.2-beta.91

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 (196) hide show
  1. package/attachment/attachment.component.d.ts +11 -2
  2. package/button/button.component.d.ts +8 -8
  3. package/core/common/services/color.service.d.ts +1 -0
  4. package/core/common/services/file.service.d.ts +7 -2
  5. package/dialog/dialog.service.d.ts +1 -0
  6. package/draggable-items/draggable-items.component.d.ts +3 -3
  7. package/draggable-items/draggable-items.module.d.ts +1 -1
  8. package/esm2020/address/address.component.mjs +1 -1
  9. package/esm2020/attachment/attachment.component.mjs +38 -18
  10. package/esm2020/button/button.component.mjs +7 -7
  11. package/esm2020/chips/chips.component.mjs +2 -2
  12. package/esm2020/color/color-picker.component.mjs +1 -1
  13. package/esm2020/core/common/services/color.service.mjs +27 -1
  14. package/esm2020/core/common/services/file.service.mjs +57 -20
  15. package/esm2020/core/common/services/session.service.mjs +2 -1
  16. package/esm2020/core/customization/customization.model.mjs +7 -6
  17. package/esm2020/core/customization/customization.service.mjs +13 -4
  18. package/esm2020/core/http/services/http.service.mjs +1 -1
  19. package/esm2020/dialog/dialog.component.mjs +3 -3
  20. package/esm2020/dialog/dialog.service.mjs +22 -1
  21. package/esm2020/draggable-items/draggable-items.component.mjs +7 -7
  22. package/esm2020/draggable-items/draggable-items.module.mjs +6 -6
  23. package/esm2020/files-uploader/files-uploader.component.mjs +50 -45
  24. package/esm2020/form/field-generator.component.mjs +3 -3
  25. package/esm2020/form/form.component.mjs +4 -3
  26. package/esm2020/form/internal-field-generator.component.mjs +1 -1
  27. package/esm2020/form/internal-form.component.mjs +1 -1
  28. package/esm2020/form/internal-list.component.mjs +2 -2
  29. package/esm2020/image/image.component.mjs +32 -16
  30. package/esm2020/image/image.service.mjs +2 -4
  31. package/esm2020/images-filmstrip/images-filmstrip.component.mjs +2 -2
  32. package/esm2020/link/link.component.mjs +33 -58
  33. package/esm2020/list/list.component.mjs +109 -18
  34. package/esm2020/list/list.model.mjs +1 -1
  35. package/esm2020/menu/menu.component.mjs +3 -3
  36. package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +1 -1
  37. package/esm2020/quantity-selector/quantity-selector.component.mjs +20 -25
  38. package/esm2020/query-builder/common/model/operator.mjs +2 -2
  39. package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +1 -1
  40. package/esm2020/select/select.component.mjs +66 -40
  41. package/esm2020/select-panel/select-panel.component.mjs +2 -2
  42. package/esm2020/signature/public-api.mjs +2 -1
  43. package/esm2020/signature/signature-dialog.component.mjs +78 -0
  44. package/esm2020/signature/signature.component.mjs +117 -89
  45. package/esm2020/signature/signature.module.mjs +6 -5
  46. package/esm2020/skeleton-loader/pepperi-addons-ngx-lib-skeleton-loader.mjs +5 -0
  47. package/esm2020/skeleton-loader/public-api.mjs +6 -0
  48. package/esm2020/skeleton-loader/skeleton-loader.component.mjs +44 -0
  49. package/esm2020/skeleton-loader/skeleton-loader.module.mjs +24 -0
  50. package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +3 -3
  51. package/esm2020/smart-filters/date-filter/date-filter.component.mjs +1 -1
  52. package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +1 -1
  53. package/esm2020/smart-filters/number-filter/number-filter.component.mjs +3 -3
  54. package/esm2020/smart-filters/text-filter/text-filter.component.mjs +1 -1
  55. package/esm2020/textbox/textbox.component.mjs +9 -3
  56. package/esm2020/top-bar/top-bar.component.mjs +2 -2
  57. package/fesm2015/pepperi-addons-ngx-lib-address.mjs +1 -1
  58. package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  59. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs +37 -17
  60. package/fesm2015/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
  61. package/fesm2015/pepperi-addons-ngx-lib-button.mjs +6 -6
  62. package/fesm2015/pepperi-addons-ngx-lib-button.mjs.map +1 -1
  63. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +2 -2
  64. package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  65. package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  66. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +23 -2
  67. package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  68. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs +11 -11
  69. package/fesm2015/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  70. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs +49 -44
  71. package/fesm2015/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -1
  72. package/fesm2015/pepperi-addons-ngx-lib-form.mjs +8 -7
  73. package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  74. package/fesm2015/pepperi-addons-ngx-lib-image.mjs +32 -18
  75. package/fesm2015/pepperi-addons-ngx-lib-image.mjs.map +1 -1
  76. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs +1 -1
  77. package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
  78. package/fesm2015/pepperi-addons-ngx-lib-link.mjs +32 -57
  79. package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  80. package/fesm2015/pepperi-addons-ngx-lib-list.mjs +108 -18
  81. package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  82. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs +2 -2
  83. package/fesm2015/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  84. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
  85. package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  86. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +19 -24
  87. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  88. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
  89. package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  90. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +2 -2
  91. package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
  92. package/fesm2015/pepperi-addons-ngx-lib-select.mjs +64 -38
  93. package/fesm2015/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  94. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs +205 -102
  95. package/fesm2015/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  96. package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs +78 -0
  97. package/fesm2015/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -0
  98. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +7 -7
  99. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  100. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +8 -2
  101. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  102. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs +2 -2
  103. package/fesm2015/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  104. package/fesm2015/pepperi-addons-ngx-lib.mjs +101 -27
  105. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  106. package/fesm2020/pepperi-addons-ngx-lib-address.mjs +1 -1
  107. package/fesm2020/pepperi-addons-ngx-lib-address.mjs.map +1 -1
  108. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs +37 -17
  109. package/fesm2020/pepperi-addons-ngx-lib-attachment.mjs.map +1 -1
  110. package/fesm2020/pepperi-addons-ngx-lib-button.mjs +6 -6
  111. package/fesm2020/pepperi-addons-ngx-lib-button.mjs.map +1 -1
  112. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +2 -2
  113. package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
  114. package/fesm2020/pepperi-addons-ngx-lib-color.mjs.map +1 -1
  115. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +23 -2
  116. package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
  117. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs +11 -11
  118. package/fesm2020/pepperi-addons-ngx-lib-draggable-items.mjs.map +1 -1
  119. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs +49 -44
  120. package/fesm2020/pepperi-addons-ngx-lib-files-uploader.mjs.map +1 -1
  121. package/fesm2020/pepperi-addons-ngx-lib-form.mjs +8 -7
  122. package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
  123. package/fesm2020/pepperi-addons-ngx-lib-image.mjs +32 -18
  124. package/fesm2020/pepperi-addons-ngx-lib-image.mjs.map +1 -1
  125. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs +1 -1
  126. package/fesm2020/pepperi-addons-ngx-lib-images-filmstrip.mjs.map +1 -1
  127. package/fesm2020/pepperi-addons-ngx-lib-link.mjs +32 -57
  128. package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
  129. package/fesm2020/pepperi-addons-ngx-lib-list.mjs +108 -17
  130. package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
  131. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs +2 -2
  132. package/fesm2020/pepperi-addons-ngx-lib-menu.mjs.map +1 -1
  133. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
  134. package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
  135. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +19 -24
  136. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  137. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
  138. package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
  139. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs +2 -2
  140. package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -1
  141. package/fesm2020/pepperi-addons-ngx-lib-select.mjs +64 -38
  142. package/fesm2020/pepperi-addons-ngx-lib-select.mjs.map +1 -1
  143. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs +201 -102
  144. package/fesm2020/pepperi-addons-ngx-lib-signature.mjs.map +1 -1
  145. package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs +76 -0
  146. package/fesm2020/pepperi-addons-ngx-lib-skeleton-loader.mjs.map +1 -0
  147. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +7 -7
  148. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  149. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +8 -2
  150. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  151. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs +2 -2
  152. package/fesm2020/pepperi-addons-ngx-lib-top-bar.mjs.map +1 -1
  153. package/fesm2020/pepperi-addons-ngx-lib.mjs +101 -27
  154. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  155. package/files-uploader/files-uploader.component.d.ts +7 -4
  156. package/image/image.component.d.ts +11 -3
  157. package/link/link.component.d.ts +23 -27
  158. package/list/list.component.d.ts +10 -2
  159. package/list/list.model.d.ts +3 -1
  160. package/menu/menu.component.d.ts +1 -1
  161. package/package.json +10 -2
  162. package/quantity-selector/quantity-selector.component.d.ts +0 -2
  163. package/select/select.component.d.ts +10 -2
  164. package/signature/public-api.d.ts +1 -0
  165. package/signature/signature-dialog.component.d.ts +29 -0
  166. package/signature/signature.component.d.ts +7 -16
  167. package/signature/signature.module.d.ts +16 -15
  168. package/skeleton-loader/index.d.ts +5 -0
  169. package/skeleton-loader/public-api.d.ts +2 -0
  170. package/skeleton-loader/skeleton-loader.component.d.ts +20 -0
  171. package/skeleton-loader/skeleton-loader.component.theme.scss +15 -0
  172. package/skeleton-loader/skeleton-loader.module.d.ts +9 -0
  173. package/src/core/style/abstracts/AbstractsIntro.stories.mdx +7 -0
  174. package/src/core/style/abstracts/functions.scss +11 -11
  175. package/src/core/style/abstracts/mixins.scss +9 -6
  176. package/src/core/style/abstracts/variables.scss +38 -18
  177. package/src/core/style/base/BorderRadius.stories.mdx +59 -0
  178. package/src/core/style/base/Breakpoints.stories.mdx +36 -0
  179. package/src/core/style/base/Colors.stories.mdx +128 -0
  180. package/src/core/style/base/Shadows.stories.mdx +69 -0
  181. package/src/core/style/base/Spacing.stories.mdx +75 -0
  182. package/src/core/style/base/States.stories.mdx +62 -0
  183. package/src/core/style/base/Typography.stories.mdx +89 -0
  184. package/src/core/style/base/ZIndex.stories.mdx +47 -0
  185. package/src/core/style/base/base.scss +8 -10
  186. package/src/core/style/base/borderRadius.component.ts +27 -0
  187. package/src/core/style/base/breakpoints.component.ts +14 -0
  188. package/src/core/style/base/colors.component.ts +174 -0
  189. package/src/core/style/base/shadows.component.ts +90 -0
  190. package/src/core/style/base/spacing.component.ts +71 -0
  191. package/src/core/style/base/states.component.ts +84 -0
  192. package/src/core/style/base/typography.component.ts +94 -0
  193. package/src/core/style/base/typography.scss +52 -50
  194. package/src/core/style/base/zIndex.component.ts +25 -0
  195. package/src/core/style/components/file.scss +4 -4
  196. package/src/core/style/components/general.scss +5 -1
@@ -318,11 +318,11 @@ export class PepCustomizationService {
318
318
  }
319
319
  getUserSecondaryColorsVariables(themeVars) {
320
320
  themeVars[PepCustomizationService.COLOR_USER_SECONDARY_KEY + '-h'] =
321
- '77';
321
+ '36';
322
322
  themeVars[PepCustomizationService.COLOR_USER_SECONDARY_KEY + '-s'] =
323
- '87%';
323
+ '100%';
324
324
  themeVars[PepCustomizationService.COLOR_USER_SECONDARY_KEY + '-l'] =
325
- '42%';
325
+ '50%';
326
326
  }
327
327
  getWeakColorsVariables(themeVars) {
328
328
  themeVars[PepCustomizationService.COLOR_WEAK_KEY + '-h'] =
@@ -435,6 +435,10 @@ export class PepCustomizationService {
435
435
  themeVars[PepCustomizationService.COLOR_TOP_HEADER_KEY + '-s'] = '';
436
436
  themeVars[PepCustomizationService.COLOR_TOP_HEADER_KEY + '-l'] = '';
437
437
  }
438
+ // getDefaultThemeBrandingCustomizationVariables(themeVars: any): void {
439
+ // themeVars[PepCustomizationService.BRANDING_LOGO_SRC] = '/assets/images/Pepperi-Logo-HiRes.png';
440
+ // themeVars[PepCustomizationService.FAV_ICON_SRC] = '/assets/favicon.ico';
441
+ // }
438
442
  getDefaultThemeVariables() {
439
443
  const themeVars = {};
440
444
  // Declare default layout.
@@ -461,6 +465,8 @@ export class PepCustomizationService {
461
465
  this.getDefaultThemeQSCustomizationVariables(themeVars);
462
466
  // Declare default top header customization.
463
467
  this.getDefaultThemeTopHeaderCustomizationVariables(themeVars);
468
+ // // Declare default branding logo's customization
469
+ // this.getDefaultThemeBrandingCustomizationVariables(themeVars);
464
470
  return themeVars;
465
471
  }
466
472
  getThemeVariables() {
@@ -757,6 +763,9 @@ PepCustomizationService.CARD_BORDER_RADIUS_KEY = '--pep-card-border-radius';
757
763
  PepCustomizationService.TABLE_FIELD_HEIGHT_KEY = '--pep-table-field-height';
758
764
  PepCustomizationService.TABLE_SPACEING_KEY = '--pep-table-spacing';
759
765
  PepCustomizationService.TABLE_BORDER_RADIUS_KEY = '--pep-table-border-radius';
766
+ // // Branding keys
767
+ // static BRANDING_LOGO_SRC = '--pep-branding-logo-src';
768
+ // static FAV_ICON_SRC = '--pep-favicon-src';
760
769
  PepCustomizationService.DEFAULT_HEADER_HEIGHT = 64; // Default
761
770
  PepCustomizationService.DEFAULT_SPINNER_COLOR = '#78aa00';
762
771
  PepCustomizationService.DEFAULT_BRANDING_COLOR = '#fff';
@@ -768,4 +777,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
768
777
  providedIn: 'root',
769
778
  }]
770
779
  }], ctorParameters: function () { return [{ type: i1.PepSessionService }, { type: i2.PepFileService }, { type: i3.FormBuilder }]; } });
771
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9taXphdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9jdXN0b21pemF0aW9uL2N1c3RvbWl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUXZDLE1BQU0sT0FBTyx1QkFBdUI7SUFpSmhDLFlBQ1ksY0FBaUMsRUFDakMsV0FBMkIsRUFDNUIsRUFBZTtRQUZkLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDNUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQVZuQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsdUJBQXVCLENBQUMscUJBQXFCLENBQUM7UUFDbkUsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBT2xELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixFQUFFO0lBQ04sQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQW1CLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDMUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNmLEVBQUUsS0FBSyxFQUFF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QixDQUFDO1lBQ25ELE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDakQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7SUFDakQsQ0FBQztJQUVELCtCQUErQixDQUFDLFNBQWM7UUFDMUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDakQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDN0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDN0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lB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RywwQkFBMEIsQ0FBQztBQUNwRCwwQ0FBa0IsR0FBRyxxQkFBcUIsQ0FBQztBQUMzQywrQ0FBdUIsR0FBRywyQkFBMkIsQ0FBQztBQUV0RCw2Q0FBcUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVO0FBRXRDLDZDQUFxQixHQUFHLFNBQVMsQ0FBQztBQUNsQyw4Q0FBc0IsR0FBRyxNQUFNLENBQUM7b0hBeEk5Qix1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZwQixNQUFNOzJGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGVwU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vc2VydmljZXMvc2Vzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL2ZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBQZXBTdHlsZVR5cGUsIFBlcEZpZWxkQmFzZSB9IGZyb20gJy4vY3VzdG9taXphdGlvbi5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlIHtcbiAgICBzdGF0aWMgU1RBTkRfQUxPTkVfRklFTERfQ0xBU1NfTkFNRSA9ICdwZXAtZmllbGQnO1xuICAgIHN0YXRpYyBTVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUUgPSAncGVwLWZpZWxkLW5vLXNwYWNpbmcnO1xuXG4gICAgc3RhdGljIFJFTV9TVFJJTkcgPSAncmVtJztcbiAgICBzdGF0aWMgUFhfU1RSSU5HID0gJ3B4JztcbiAgICBzdGF0aWMgVVNFUl9USEVNRSA9ICd1c2VyX3RoZW1lJztcbiAgICBzdGF0aWMgVVNFUl9DT0xPUiA9ICd1c2VyX2NvbG9yJztcbiAgICBzdGF0aWMgVVNFUl9USEVNRV9WQVJJQUJMRVMgPSAndXNlcl90aGVtZV92YXJpYWJsZXMnO1xuXG4gICAgLy8gSGVhZGVyIGhlaWdodFxuICAgIHN0YXRpYyBIRUFERVJfSEVJR0hUX0tFWSA9ICctLXBlcC1oZWFkZXItaGVpZ2h0JztcblxuICAgIC8vIFNpZGUgYmFyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIFNJREVfQkFSX1dJRFRIX0tFWSA9ICctLXBlcC1zaWRlLWJhci13aWR0aCc7XG5cbiAgICAvLyBTZXR0aW5ncyB3aWR0aFxuICAgIHN0YXRpYyBTRVRUSU5HU19XSURUSF9LRVkgPSAnLS1wZXAtc2V0dGluZ3MtYmFyLXdpZHRoJztcblxuICAgIC8vIFRvcCBiYXIgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgVE9QX0JBUl9TUEFDSU5HX1RPUF9LRVkgPSAnLS1wZXAtdG9wLWJhci1zcGFjaW5nLXRvcCc7XG4gICAgc3RhdGljIFRPUF9CQVJfU1BBQ0lOR19CT1RUT01fS0VZID0gJy0tcGVwLXRvcC1iYXItc3BhY2luZy1ib3R0b20nO1xuICAgIHN0YXRpYyBUT1BfQkFSX0ZJRUxEX0hFSUdIVF9LRVkgPSAnLS1wZXAtdG9wLWJhci1maWVsZC1oZWlnaHQnO1xuXG4gICAgLy8gRm9vdGVyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIEZPT1RFUl9IRUlHSFRfS0VZID0gJy0tcGVwLWZvb3Rlci1iYXItaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9PVEVSX0JBUl9TUEFDSU5HX1RPUF9LRVkgPSAnLS1wZXAtZm9vdGVyLWJhci1zcGFjaW5nLXRvcCc7XG4gICAgc3RhdGljIEZPT1RFUl9CQVJfU1BBQ0lOR19CT1RUT01fS0VZID0gJy0tcGVwLWZvb3Rlci1iYXItc3BhY2luZy1ib3R0b20nO1xuXG4gICAgLy8gTWFpbiBjb250YWluZXIgaGVpZ2h0XG4gICAgc3RhdGljIE1BSU5fSEVJR0hUX0tFWSA9ICctLXBlcC1tYWluLWhlaWdodCc7XG5cbiAgICAvLyBDb2xvcnMgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgQ09MT1JfVVNFUl9QUklNQVJZX0tFWSA9ICctLXBlcC1jb2xvci11c2VyLXByaW1hcnknO1xuICAgIHN0YXRpYyBDT0xPUl9VU0VSX1NFQ09OREFSWV9LRVkgPSAnLS1wZXAtY29sb3ItdXNlci1zZWNvbmRhcnknO1xuICAgIHN0YXRpYyBDT0xPUl9TWVNURU1fUFJJTUFSWV9JTlZFUlRfS0VZID1cbiAgICAgICAgJy0tcGVwLWNvbG9yLXN5c3RlbS1wcmltYXJ5LWludmVydCc7XG4gICAgc3RhdGljIENPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSA9ICctLXBlcC1jb2xvci1zeXN0ZW0tcHJpbWFyeSc7XG4gICAgc3RhdGljIENPTE9SX1RFWFRfTElOS19LRVkgPSAnLS1wZXAtY29sb3ItdGV4dC1saW5rJztcbiAgICBzdGF0aWMgQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZID0gJy0tcGVwLWNvbG9yLXN5c3RlbS1jYXV0aW9uJztcbiAgICBzdGF0aWMgQ09MT1JfU1lTVEVNX1NVQ0NFU1NfS0VZID0gJy0tcGVwLWNvbG9yLXN5c3RlbS1zdWNjZXNzJztcbiAgICBzdGF0aWMgQ09MT1JfU1RST05HX0tFWSA9ICctLXBlcC1jb2xvci1zdHJvbmcnO1xuICAgIHN0YXRpYyBDT0xPUl9SRUdVTEFSX0tFWSA9ICctLXBlcC1jb2xvci1yZWd1bGFyJztcbiAgICBzdGF0aWMgQ09MT1JfV0VBS19LRVkgPSAnLS1wZXAtY29sb3Itd2Vhayc7XG5cbiAgICAvLyBUb3AgaGVhZGVyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX1RPUF9IRUFERVJfS0VZID0gJy0tcGVwLWNvbG9yLXRvcC1oZWFkZXInO1xuICAgIHN0YXRpYyBTVFlMRV9UT1BfSEVBREVSX0tFWSA9ICctLXBlcC1zdHlsZS10b3AtaGVhZGVyJztcblxuICAgIC8vIFFTIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX1FTX0tFWSA9ICctLXBlcC1jb2xvci1xcyc7XG4gICAgc3RhdGljIFNUWUxFX1FTX0tFWSA9ICctLXBlcC1zdHlsZS1xcyc7XG5cbiAgICAvLyBGb250cyB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT05UX0ZBTUlMWV9USVRMRV9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktdGl0bGUnO1xuICAgIHN0YXRpYyBGT05UX0ZBTUlMWV9USVRMRV9OT1JNQUxfVVJMX0tFWSA9XG4gICAgICAgICctLXBlcC1mb250LWZhbWlseS10aXRsZS1ub3JtYWwtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfVElUTEVfQk9MRF9VUkxfS0VZID0gJy0tcGVwLWZvbnQtZmFtaWx5LXRpdGxlLWJvbGQtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfQk9EWV9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktYm9keSc7XG4gICAgc3RhdGljIEZPTlRfRkFNSUxZX0JPRFlfTk9STUFMX1VSTF9LRVkgPVxuICAgICAgICAnLS1wZXAtZm9udC1mYW1pbHktYm9keS1ub3JtYWwtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfQk9EWV9CT0xEX1VSTF9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktYm9keS1ib2xkLXVybCc7XG5cbiAgICAvLyBCb3JkZXIgcmFkaXVzIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIEJPUkRFUl9SQURJVVNfS0VZID0gJy0tcGVwLWJvcmRlci1yYWRpdXMnO1xuICAgIHN0YXRpYyBCT1JERVJfUkFESVVTX1NNX0tFWSA9XG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfS0VZICsgJy1zbSc7XG4gICAgc3RhdGljIEJPUkRFUl9SQURJVVNfTURfS0VZID1cbiAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19LRVkgKyAnLW1kJztcbiAgICBzdGF0aWMgQk9SREVSX1JBRElVU19MR19LRVkgPVxuICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX0tFWSArICctbGcnO1xuICAgIHN0YXRpYyBCT1JERVJfUkFESVVTX1hMX0tFWSA9XG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfS0VZICsgJy14bCc7XG5cbiAgICAvLyBGb250cyB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT05UX1NJWkVfMlhTX0tFWSA9ICctLXBlcC1mb250LXNpemUtMnhzJztcbiAgICBzdGF0aWMgRk9OVF9TSVpFX1hTX0tFWSA9ICctLXBlcC1mb250LXNpemUteHMnO1xuICAgIHN0YXRpYyBGT05UX1NJWkVfU01fS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS1zbSc7XG4gICAgc3RhdGljIEZPTlRfU0laRV9NRF9LRVkgPSAnLS1wZXAtZm9udC1zaXplLW1kJztcbiAgICBzdGF0aWMgRk9OVF9TSVpFX0xHX0tFWSA9ICctLXBlcC1mb250LXNpemUtbGcnO1xuICAgIHN0YXRpYyBGT05UX1NJWkVfWExfS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS14bCc7XG4gICAgc3RhdGljIEZPTlRfU0laRV8yWExfS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS0yeGwnO1xuXG4gICAgLy8gTGluZSBoZWlnaHQgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgTElORV9IRUlHSFRfMlhTX0tFWSA9ICctLXBlcC1saW5lLWhlaWdodC0yeHMnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9YU19LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQteHMnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9TTV9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtc20nO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9NRF9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtbWQnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9MR19LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtbGcnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9YTF9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQteGwnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF8yWExfS0VZID0gJy0tcGVwLWxpbmUtaGVpZ2h0LTJ4bCc7XG5cbiAgICAvLyBTaGFkb3dzIG9mZnNldCB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBTSEFET1dfTk9ORV9PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy1ub25lLW9mZnNldCc7XG4gICAgc3RhdGljIFNIQURPV19YU19PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy14cy1vZmZzZXQnO1xuICAgIHN0YXRpYyBTSEFET1dfU01fT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3ctc20tb2Zmc2V0JztcbiAgICBzdGF0aWMgU0hBRE9XX01EX09GRlNFVF9LRVkgPSAnLS1wZXAtc2hhZG93LW1kLW9mZnNldCc7XG4gICAgc3RhdGljIFNIQURPV19MR19PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy1sZy1vZmZzZXQnO1xuICAgIHN0YXRpYyBTSEFET1dfWExfT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3cteGwtb2Zmc2V0JztcblxuICAgIC8vIFNwYWNpbmcgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzJYU19LRVkgPSAnLS1wZXAtc3BhY2luZy0yeHMnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfWFNfS0VZID0gJy0tcGVwLXNwYWNpbmcteHMnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfU01fS0VZID0gJy0tcGVwLXNwYWNpbmctc20nO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfTURfS0VZID0gJy0tcGVwLXNwYWNpbmctbWQnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfTEdfS0VZID0gJy0tcGVwLXNwYWNpbmctbGcnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfWExfS0VZID0gJy0tcGVwLXNwYWNpbmcteGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfMlhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTJ4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV8zWExfS0VZID0gJy0tcGVwLXNwYWNpbmctM3hsJztcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzRYTF9LRVkgPSAnLS1wZXAtc3BhY2luZy00eGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfNVhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTV4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV82WExfS0VZID0gJy0tcGVwLXNwYWNpbmctNnhsJztcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzdYTF9LRVkgPSAnLS1wZXAtc3BhY2luZy03eGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfOFhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTh4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV85WExfS0VZID0gJy0tcGVwLXNwYWNpbmctOXhsJztcblxuICAgIC8vIEZvcm0gdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLWZvcm0tZmllbGQtaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9USVRMRV9IRUlHSFRfS0VZID0gJy0tcGVwLWZvcm0tZmllbGQtdGl0bGUtaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9TUEFDRUlOR19LRVkgPSAnLS1wZXAtZm9ybS1maWVsZC1zcGFjaW5nJztcbiAgICBzdGF0aWMgRk9STV9TUEFDRUlOR19LRVkgPSAnLS1wZXAtZm9ybS1zcGFjaW5nJztcblxuICAgIC8vIENhcmQgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgQ0FSRF9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLWNhcmQtZmllbGQtaGVpZ2h0JztcbiAgICBzdGF0aWMgQ0FSRF9TUEFDRUlOR19LRVkgPSAnLS1wZXAtY2FyZC1zcGFjaW5nJztcbiAgICBzdGF0aWMgQ0FSRF9TSEFET1dfT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3ctY2FyZC1vZmZzZXQnO1xuICAgIHN0YXRpYyBDQVJEX0JPUkRFUl9SQURJVVNfS0VZID0gJy0tcGVwLWNhcmQtYm9yZGVyLXJhZGl1cyc7XG5cbiAgICAvLyBUYWJsZSB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBUQUJMRV9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLXRhYmxlLWZpZWxkLWhlaWdodCc7XG4gICAgc3RhdGljIFRBQkxFX1NQQUNFSU5HX0tFWSA9ICctLXBlcC10YWJsZS1zcGFjaW5nJztcbiAgICBzdGF0aWMgVEFCTEVfQk9SREVSX1JBRElVU19LRVkgPSAnLS1wZXAtdGFibGUtYm9yZGVyLXJhZGl1cyc7XG5cbiAgICBzdGF0aWMgREVGQVVMVF9IRUFERVJfSEVJR0hUID0gNjQ7IC8vIERlZmF1bHRcblxuICAgIHN0YXRpYyBERUZBVUxUX1NQSU5ORVJfQ09MT1IgPSAnIzc4YWEwMCc7XG4gICAgc3RhdGljIERFRkFVTFRfQlJBTkRJTkdfQ09MT1IgPSAnI2ZmZic7XG5cbiAgICBwdWJsaWMgaGFzQ3VzdG9tSG9tZXBhZ2U6IGJvb2xlYW4gPSBudWxsO1xuICAgIHB1YmxpYyBoYXNDdXN0b21IZWFkZXI6IGJvb2xlYW4gPSBudWxsO1xuICAgIHB1YmxpYyBjdXN0b21IZWFkZXJIZWlnaHQgPSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5ERUZBVUxUX0hFQURFUl9IRUlHSFQ7XG4gICAgcHVibGljIG1haW5Db250SGVpZ2h0ID0gMDtcbiAgICBwdWJsaWMgZm9vdGVySGVpZ2h0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHB1YmxpYyBzZXR0aW5nc1dpZHRoID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFBlcFNlc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZpbGVTZXJ2aWNlOiBQZXBGaWxlU2VydmljZSxcbiAgICAgICAgcHVibGljIGZiOiBGb3JtQnVpbGRlclxuICAgICkge1xuICAgICAgICB0aGlzLmhpZGVGb290ZXIoKTtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RnJvbUdyb3VwKGZpZWxkOiBQZXBGaWVsZEJhc2UsIHdpdGhWYWxpZGF0b3JzID0gdHJ1ZSk6IEZvcm1Hcm91cCB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB3aXRoVmFsaWRhdG9ycyA/IGZpZWxkLmdldFZhbGlkYXRvcnMoKSA6IFtdO1xuICAgICAgICBjb25zdCBncm91cCA9IHt9O1xuICAgICAgICBncm91cFtmaWVsZC5rZXldID0gW1xuICAgICAgICAgICAgeyB2YWx1ZTogZmllbGQudmFsdWUsIGRpc2FibGVkOiBmaWVsZC5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZ3JvdXApO1xuICAgIH1cblxuICAgIGdldEZvcm1Db250cm9sKFxuICAgICAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgICAgIGZpZWxkS2V5OiBzdHJpbmcsXG4gICAgICAgIHBhcmVudEZpZWxkS2V5OiBzdHJpbmcgPSBudWxsXG4gICAgKTogYW55IHtcbiAgICAgICAgbGV0IGZvcm1Db250cm9sID0gbnVsbDtcblxuICAgICAgICBpZiAoZm9ybSAmJiBmb3JtLmNvbnRyb2xzKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50RmllbGRLZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbCA9IGZvcm0uY29udHJvbHNbZmllbGRLZXldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbCA9IGZvcm0uY29udHJvbHNbcGFyZW50RmllbGRLZXldPy5nZXQoZmllbGRLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHVwZGF0ZUZvcm1GaWVsZFZhbHVlKFxuICAgICAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgICAgIGZpZWxkS2V5OiBzdHJpbmcsXG4gICAgICAgIHZhbHVlID0gJycsXG4gICAgICAgIHBhcmVudEZpZWxkS2V5OiBzdHJpbmcgPSBudWxsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbChmb3JtLCBmaWVsZEtleSwgcGFyZW50RmllbGRLZXkpO1xuICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUZvcm1GaWVsZChcbiAgICAgICAgZm9ybTogRm9ybUdyb3VwLFxuICAgICAgICBmaWVsZDogUGVwRmllbGRCYXNlLFxuICAgICAgICB2YWx1ZSA9ICcnLFxuICAgICAgICBwYXJlbnRGaWVsZDogUGVwRmllbGRCYXNlID0gbnVsbFxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKFxuICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgIGZpZWxkLmtleSxcbiAgICAgICAgICAgIHBhcmVudEZpZWxkPy5rZXlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIElmIGRpc2FibGVkIGhhcyBjaGFuZ2VkLlxuICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sLmRpc2FibGVkICE9PSBmaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmRpc2FibGVkID8gZm9ybUNvbnRyb2wuZGlzYWJsZSgpIDogZm9ybUNvbnRyb2wuZW5hYmxlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gZmllbGQuZ2V0VmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxjdWxhdGVGb3JtRmllbGRIZWlnaHQoXG4gICAgICAgIHdpdGhUaXRsZSA9IHRydWUsXG4gICAgICAgIHJvd1NwYW4gPSAxLFxuICAgICAgICBzdGFuZEFsb25lID0gZmFsc2VcbiAgICApOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG4gICAgICAgIGNvbnN0IHJvd0ZpZWxkSGVpZ2h0ID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9GSUVMRF9IRUlHSFRfS0VZXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJvd0ZpZWxkVGl0bGVIZWlnaHQgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX0ZJRUxEX1RJVExFX0hFSUdIVF9LRVlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgcm93RmllbGRTcGFjaW5nQm90dG9tID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9TUEFDRUlOR19LRVlcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgZmllbGRIZWlnaHQgPSAwO1xuICAgICAgICBpZiAocm93U3BhbiA9PT0gMSkge1xuICAgICAgICAgICAgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgICAgICh3aXRoVGl0bGUgPyByb3dGaWVsZFRpdGxlSGVpZ2h0IDogMCkgKyByb3dGaWVsZEhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYW5DYWxjID0gd2l0aFRpdGxlID8gcm93U3BhbiA6IHJvd1NwYW4gLSAxO1xuICAgICAgICAgICAgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgICAgIHJvd1NwYW4gKiByb3dGaWVsZEhlaWdodCArXG4gICAgICAgICAgICAgICAgcm93U3BhbkNhbGMgKiByb3dGaWVsZFRpdGxlSGVpZ2h0ICtcbiAgICAgICAgICAgICAgICAoc3RhbmRBbG9uZSA/IDAgOiByb3dTcGFuQ2FsYyAqIHJvd0ZpZWxkU3BhY2luZ0JvdHRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGRIZWlnaHQ7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ2FyZFJvd3NIZWlnaHQocm93c0NvdW50ID0gMSwgd2l0aFNwYWNpbmcgPSB0cnVlKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuICAgICAgICBjb25zdCBjYXJkRmllbGRIZWlnaHQgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DQVJEX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2FyZEZpZWxkU3BhY2luZyA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfU1BBQ0VJTkdfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgcm93c0NvdW50ICogY2FyZEZpZWxkSGVpZ2h0ICtcbiAgICAgICAgICAgIChyb3dzQ291bnQgLSAxKSAqICh3aXRoU3BhY2luZyA/IGNhcmRGaWVsZFNwYWNpbmcgOiAwKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkSGVpZ2h0O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVRhYmxlUm93c0hlaWdodChyb3dzQ291bnQgPSAxLCB3aXRoU3BhY2luZyA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG4gICAgICAgIGNvbnN0IHRhYmxlRmllbGRIZWlnaHQgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9GSUVMRF9IRUlHSFRfS0VZXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHRhYmxlRmllbGRTcGFjaW5nID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVEFCTEVfU1BBQ0VJTkdfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZmllbGRIZWlnaHQgPVxuICAgICAgICAgICAgcm93c0NvdW50ICpcbiAgICAgICAgICAgICh0YWJsZUZpZWxkSGVpZ2h0ICsgKHdpdGhTcGFjaW5nID8gdGFibGVGaWVsZFNwYWNpbmcgKiAyIDogMCkpO1xuICAgICAgICByZXR1cm4gZmllbGRIZWlnaHQ7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlRmllbGRIZWlnaHQobGF5b3V0VHlwZSA9ICdmb3JtJywgcm93U3Bhbiwgc3RhbmRBbG9uZSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBmaWVsZEhlaWdodCA9ICdpbmhlcml0JzsgLy8gRGVmYXVsdCBmb3IgY2FyZCAod2l0aCBubyB0aXRsZSlcbiAgICAgICAgaWYgKGxheW91dFR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgICAgIGZpZWxkSGVpZ2h0ID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRBQkxFX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAobGF5b3V0VHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgICAgICBmaWVsZEhlaWdodCA9XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDYXJkUm93c0hlaWdodChyb3dTcGFuLCAhc3RhbmRBbG9uZSkgK1xuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGb3JtXG4gICAgICAgICAgICBmaWVsZEhlaWdodCA9XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVGb3JtRmllbGRIZWlnaHQoZmFsc2UsIHJvd1NwYW4sIHN0YW5kQWxvbmUpICtcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkSGVpZ2h0O1xuICAgIH1cblxuICAgIGdldEJyYW5kaW5nVGhlbWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdGhlbWVPYmogPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldE9iamVjdChcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlVTRVJfVEhFTUVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuICh0aGVtZU9iaiAmJiB0aGVtZU9iai5UaGVtZSkgfHwgJ2RlZmF1bHQtdGhlbWUnOyAvLyAnbGlnaHQtdGhlbWUnO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUxheW91dFZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgc2NyZWVuIHNpemVzLlxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLXNjcmVlbi1tYXgtc2l6ZS0yeHMnXSA9XG4gICAgICAgICAgICAnNDYwJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUteHMnXSA9XG4gICAgICAgICAgICAnNzY3JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUtc20nXSA9XG4gICAgICAgICAgICAnOTkxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUtbWQnXSA9XG4gICAgICAgICAgICAnMTE5OScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5QWF9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtc2NyZWVuLW1heC1zaXplLWxnJ10gPVxuICAgICAgICAgICAgJzEzNjYnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUFhfU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLXNjcmVlbi1tYXgtc2l6ZS14bCddID1cbiAgICAgICAgICAgICcxOTIwJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgdG9wIGJhci5cbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNJREVfQkFSX1dJRFRIX0tFWV0gPVxuICAgICAgICAgICAgJzE2JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHRvcCBiYXIuXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX1NQQUNJTkdfVE9QX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9TUEFDSU5HX0JPVFRPTV9LRVldID1cbiAgICAgICAgICAgICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfRklFTERfSEVJR0hUX0tFWV0gPVxuICAgICAgICAgICAgJzIuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBmb290ZXIuXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT09URVJfQkFSX1NQQUNJTkdfVE9QX0tFWV0gPVxuICAgICAgICAgICAgJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPT1RFUl9CQVJfU1BBQ0lOR19CT1RUT01fS0VZXSA9XG4gICAgICAgICAgICAnMS4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUJvcmRlclJhZGl1c1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19TTV9LRVldID1cbiAgICAgICAgICAgICcwLjEyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19NRF9LRVldID1cbiAgICAgICAgICAgICcwLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX0xHX0tFWV0gPVxuICAgICAgICAgICAgJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19YTF9LRVldID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lU3BhY2luZ1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzJYU19LRVldID1cbiAgICAgICAgICAgICcwLjEyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFX1hTX0tFWV0gPVxuICAgICAgICAgICAgJzAuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9TTV9LRVldID1cbiAgICAgICAgICAgICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9NRF9LRVldID1cbiAgICAgICAgICAgICcwLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfTEdfS0VZXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFX1hMX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzJYTF9LRVldID1cbiAgICAgICAgICAgICcyJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfM1hMX0tFWV0gPVxuICAgICAgICAgICAgJzIuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzRYTF9LRVldID1cbiAgICAgICAgICAgICczJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfNVhMX0tFWV0gPVxuICAgICAgICAgICAgJzMuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzZYTF9LRVldID1cbiAgICAgICAgICAgICc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfN1hMX0tFWV0gPVxuICAgICAgICAgICAgJzYnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV84WExfS0VZXSA9XG4gICAgICAgICAgICAnOCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzlYTF9LRVldID1cbiAgICAgICAgICAgICcxNicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZUZvbnRzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFRpdGxlIGZvbnQgZmFtaWx5XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX0ZBTUlMWV9USVRMRV9LRVldID0gJ05leGEnO1xuXG4gICAgICAgIC8vIEJvZHkgZm9udCBmYW1pbHlcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfRkFNSUxZX0JPRFlfS0VZXSA9ICdJbnRlcic7XG5cbiAgICAgICAgLy8gRm9udCBzaXplc1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFXzJYU19LRVldID1cbiAgICAgICAgICAgICcwLjYyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1hTX0tFWV0gPVxuICAgICAgICAgICAgJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9TTV9LRVldID1cbiAgICAgICAgICAgICcwLjg3NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX01EX0tFWV0gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9MR19LRVldID1cbiAgICAgICAgICAgICcxLjEyNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1hMX0tFWV0gPVxuICAgICAgICAgICAgJzEuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV8yWExfS0VZXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgLy8gTGluZSBoZWlnaHRcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUXzJYU19LRVldID1cbiAgICAgICAgICAgICcwLjc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF9YU19LRVldID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF9TTV9LRVldID1cbiAgICAgICAgICAgICcxLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5MSU5FX0hFSUdIVF9NRF9LRVldID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUX0xHX0tFWV0gPVxuICAgICAgICAgICAgJzEuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUX1hMX0tFWV0gPVxuICAgICAgICAgICAgJzInICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUXzJYTF9LRVldID1cbiAgICAgICAgICAgICcyLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgLy8gRm9udCB3ZWlnaHRcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1mb250LXdlaWdodC1ub3JtYWwnXSA9IDQwMDtcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1mb250LXdlaWdodC1ib2xkJ10gPSA2MDA7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtZm9udC13ZWlnaHQtYm9sZGVyJ10gPSA4MDA7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lQnV0dG9uc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi0yeHMtaG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzAuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tMnhzLW1pbi13aWR0aCddID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLTJ4cy1oZWlnaHQnXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi0yeHMtZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFXzJYU19LRVkgKyAnKSc7XG4gICAgICAgIC8vIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLTJ4cy1pY29uLWhvcml6b250YWwtc3BhY2luZyddID0gJzAuMTI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teHMtaG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14cy1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhzLWhlaWdodCddID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teHMtZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1hTX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24teHMtaWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcwLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20taG9yaXpvbnRhbC1zcGFjaW5nJ10gPVxuICAgICAgICAgICAgJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20tbWluLXdpZHRoJ10gPVxuICAgICAgICAgICAgJzInICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20taGVpZ2h0J10gPVxuICAgICAgICAgICAgJzInICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20tZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1NNX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24tc20taWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1tZC1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1tZC1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnMi41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLW1kLWhlaWdodCddID1cbiAgICAgICAgICAgICcyLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbWQtZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX01EX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbWQtaWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcwLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnMycgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1oZWlnaHQnXSA9XG4gICAgICAgICAgICAnMycgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1mb250LXNpemUnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfTEdfS0VZICsgJyknO1xuICAgICAgICAvLyB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1sZy1pY29uLWhvcml6b250YWwtc3BhY2luZyddID0gJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14bC1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLW1pbi13aWR0aCddID1cbiAgICAgICAgICAgICc0JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLWhlaWdodCddID1cbiAgICAgICAgICAgICc0JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLWZvbnQtc2l6ZSddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9YTF9LRVkgKyAnKSc7XG4gICAgICAgIC8vIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLWljb24taG9yaXpvbnRhbC1zcGFjaW5nJ10gPSAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgIH1cblxuICAgIGdldFN5c3RlbVByaW1hcnlJbnZlcnRDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1xuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfSU5WRVJUX0tFWSArICctaCdcbiAgICAgICAgXSA9ICcyNTUnO1xuICAgICAgICB0aGVtZVZhcnNbXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9JTlZFUlRfS0VZICsgJy1zJ1xuICAgICAgICBdID0gJzEwMCUnO1xuICAgICAgICB0aGVtZVZhcnNbXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9JTlZFUlRfS0VZICsgJy1sJ1xuICAgICAgICBdID0gJzEwMCUnO1xuICAgIH1cblxuICAgIGdldFN5c3RlbVByaW1hcnlDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctaCddID1cbiAgICAgICAgICAgICcwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctcyddID1cbiAgICAgICAgICAgICcwJSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAnMTAlJztcbiAgICB9XG5cbiAgICBnZXRTeXN0ZW1TdWNjZXNzQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fU1VDQ0VTU19LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAnMTAwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9TVUNDRVNTX0tFWSArICctcyddID1cbiAgICAgICAgICAgICcxMDAlJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9TVUNDRVNTX0tFWSArICctbCddID1cbiAgICAgICAgICAgICcyNSUnO1xuICAgIH1cblxuICAgIGdldFN5c3RlbUNhdXRpb25Db2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9DQVVUSU9OX0tFWSArICctaCddID1cbiAgICAgICAgICAgICczNjAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJzEwMCUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJzQwJSc7XG4gICAgfVxuXG4gICAgZ2V0VXNlclByaW1hcnlDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfUFJJTUFSWV9LRVkgKyAnLWgnXSA9ICc3OCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJzg3JSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJzI3JSc7XG4gICAgfVxuXG4gICAgZ2V0VXNlclNlY29uZGFyeUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9TRUNPTkRBUllfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJzc3JztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfU0VDT05EQVJZX0tFWSArICctcyddID1cbiAgICAgICAgICAgICc4NyUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9TRUNPTkRBUllfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJzQyJSc7XG4gICAgfVxuXG4gICAgZ2V0V2Vha0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfV0VBS19LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWgpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1dFQUtfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1zKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9XRUFLX0tFWSArICctbCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctbCknO1xuICAgIH1cblxuICAgIGdldFJlZ3VsYXJDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1JFR1VMQVJfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1oKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9SRUdVTEFSX0tFWSArICctcyddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctcyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfUkVHVUxBUl9LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWwpJztcbiAgICB9XG5cbiAgICBnZXRTdHJvbmdDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NUUk9OR19LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1oKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TVFJPTkdfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9QUklNQVJZX0tFWSArICctcyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1RST05HX0tFWSArICctbCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfUFJJTUFSWV9LRVkgKyAnLWwpJztcbiAgICB9XG5cbiAgICBnZXRUZXh0Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9URVhUX0xJTktfS0VZICsgJy1oJ10gPSAnMjA3JztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RFWFRfTElOS19LRVkgKyAnLXMnXSA9ICc3NiUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVEVYVF9MSU5LX0tFWSArICctbCddID0gJzM3JSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFN5c3RlbSBwcmltYXJ5IGludmVydCBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtUHJpbWFyeUludmVydENvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBTeXN0ZW0gcHJpbWFyeSBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtUHJpbWFyeUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBTeXN0ZW0gc3VjY2VzcyBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtU3VjY2Vzc0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBTeXN0ZW0gY2F1dGlvbiBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtQ2F1dGlvbkNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBVc2VyIHByaW1hcnkgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFVzZXJQcmltYXJ5Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFVzZXIgc2Vjb25kYXJ5IGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRVc2VyU2Vjb25kYXJ5Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gV2VhayBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0V2Vha0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBSZWd1bGFyIGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRSZWd1bGFyQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFN0cm9uZyBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3Ryb25nQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gVGV4dCBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0VGV4dENvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZVNoYWRvd3NWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9uZU9mZnNldCA9ICcwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19OT05FX09GRlNFVF9LRVldID0gbm9uZU9mZnNldDtcblxuICAgICAgICBjb25zdCB4c09mZnNldCA9ICcwIDAuMTI1cmVtIDAuMjVyZW0gMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfWFNfT0ZGU0VUX0tFWV0gPSB4c09mZnNldDtcblxuICAgICAgICBjb25zdCBzbU9mZnNldCA9ICcwIDAuMjVyZW0gMC41cmVtIDAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX1NNX09GRlNFVF9LRVldID0gc21PZmZzZXQ7XG5cbiAgICAgICAgY29uc3QgbWRPZmZzZXQgPSAnMCAwLjVyZW0gMXJlbSAwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19NRF9PRkZTRVRfS0VZXSA9IG1kT2Zmc2V0O1xuXG4gICAgICAgIGNvbnN0IGxnT2Zmc2V0ID0gJzAgMXJlbSAycmVtIDAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX0xHX09GRlNFVF9LRVldID0gbGdPZmZzZXQ7XG5cbiAgICAgICAgY29uc3QgeGxPZmZzZXQgPSAnMCAycmVtIDRyZW0gMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfWExfT0ZGU0VUX0tFWV0gPSB4bE9mZnNldDtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVGb3JtQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtRmllbGRTcGFjaW5nID0gMTtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfSEVJR0hUX0tFWV0gPVxuICAgICAgICAgICAgJzIuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9GSUVMRF9USVRMRV9IRUlHSFRfS0VZXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX1NQQUNFSU5HX0tFWV0gPVxuICAgICAgICAgICAgZm9ybUZpZWxkU3BhY2luZyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX0ZJRUxEX1NQQUNFSU5HX0tFWV0gPVxuICAgICAgICAgICAgZm9ybUZpZWxkU3BhY2luZyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lQ2FyZEN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfRklFTERfSEVJR0hUX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9TUEFDRUlOR19LRVldID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9YU19LRVkgKyAnKSc7XG5cbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfQk9SREVSX1JBRElVU19LRVldID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfTURfS0VZICsgJyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9TSEFET1dfT0ZGU0VUX0tFWV0gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX01EX09GRlNFVF9LRVkgKyAnKSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lVGFibGVDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9GSUVMRF9IRUlHSFRfS0VZXSA9XG4gICAgICAgICAgICAnMicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVEFCTEVfU1BBQ0VJTkdfS0VZXSA9XG4gICAgICAgICAgICAnMC41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9CT1JERVJfUkFESVVTX0tFWV0gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19NRF9LRVkgKyAnKSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lUVNDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHFzU3RhdGU6IFBlcFN0eWxlVHlwZSA9ICdyZWd1bGFyJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUWUxFX1FTX0tFWV0gPSBxc1N0YXRlO1xuXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9RU19LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWgpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1FTX0tFWSArICctcyddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctcyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfUVNfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1sKSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lVG9wSGVhZGVyQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b3BIZWFkZXJTdGF0ZTogUGVwU3R5bGVUeXBlID0gJ3N0cm9uZyc7XG4gICAgICAgIHRoZW1lVmFyc1tcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUWUxFX1RPUF9IRUFERVJfS0VZXG4gICAgICAgIF0gPSB0b3BIZWFkZXJTdGF0ZTtcblxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWgnXSA9ICcnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLXMnXSA9ICcnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWwnXSA9ICcnO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZVZhcmlhYmxlcygpOiBhbnkge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB7fTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgbGF5b3V0LlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUxheW91dFZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBib3JkZXIgcmFkaXVzLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUJvcmRlclJhZGl1c1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBzcGFjaW5nLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVNwYWNpbmdWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgZm9udHMgc2l6ZSAmIGxpbmUgaGVpZ2h0LlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUZvbnRzVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGJ1dHRvbnMuXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lQnV0dG9uc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHNoYWRvd3MuXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lU2hhZG93c1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBmb3JtIGN1c3RvbWl6YXRpb24uXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lRm9ybUN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgY2FyZCBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUNhcmRDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHRhYmxlIGN1c3RvbWl6YXRpb24uXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lVGFibGVDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHFzIGN1c3RvbWl6YXRpb24uXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lUVNDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IHRvcCBoZWFkZXIgY3VzdG9taXphdGlvbi5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVUb3BIZWFkZXJDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoZW1lVmFycztcbiAgICB9XG5cbiAgICBnZXRUaGVtZVZhcmlhYmxlcygpOiBhbnkge1xuICAgICAgICBjb25zdCByZXQgPSB0aGlzLmdldERlZmF1bHRUaGVtZVZhcmlhYmxlcygpO1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldE9iamVjdChcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlVTRVJfVEhFTUVfVkFSSUFCTEVTXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdHMuXG4gICAgICAgIGlmICh0aGVtZVZhcnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoZW1lVmFycykge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gdGhlbWVWYXJzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHNldFRoZW1lVmFyaWFibGVzKHRoZW1lVmFyaWFibGVzVG9TZXQgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFyaWFibGVzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzLlxuICAgICAgICBpZiAodGhlbWVWYXJpYWJsZXNUb1NldCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhlbWVWYXJpYWJsZXNUb1NldCkge1xuICAgICAgICAgICAgICAgIHRoZW1lVmFyaWFibGVzW2tleV0gPSB0aGVtZVZhcmlhYmxlc1RvU2V0W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnNldE9iamVjdChcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlVTRVJfVEhFTUVfVkFSSUFCTEVTLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhlbWVWYXJpYWJsZXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhlbWVWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRm9udFVybEtleShrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlU2VydmljZS5sb2FkRm9udFN0eWxlKGtleSwgdGhlbWVWYXJpYWJsZXNba2V5XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICB0aGVtZVZhcmlhYmxlc1trZXldXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRm9udFVybEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAga2V5ID09PSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX0ZBTUlMWV9USVRMRV9OT1JNQUxfVVJMX0tFWSB8fFxuICAgICAgICAgICAga2V5ID09PSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX0ZBTUlMWV9USVRMRV9CT0xEX1VSTF9LRVkgfHxcbiAgICAgICAgICAgIGtleSA9PT0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfQk9EWV9OT1JNQUxfVVJMX0tFWSB8fFxuICAgICAgICAgICAga2V5ID09PSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX0ZBTUlMWV9CT0RZX0JPTERfVVJMX0tFWVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGdldFRoZW1lVmFyaWFibGUoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG5cbiAgICAgICAgaWYgKHRoZW1lVmFycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhlbWVWYXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXROdW1iZXJUaGVtZVZhcmlhYmxlKHRoZW1lVmFycywga2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhlbWVWYXJzICYmIHRoZW1lVmFycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHJlZmVyZW5jZSB0byBhbm90aGVyIGtleS5cbiAgICAgICAgICAgIGlmICh0aGVtZVZhcnNba2V5XS5pbmRleE9mKCd2YXIoJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICBrZXkgPSB0aGVtZVZhcnNba2V5XS5zdWJzdHIoNCkuc3BsaXQoJyknKVswXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdG1wID0gTnVtYmVyKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFyc1trZXldLnJlcGxhY2UoUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORywgJycpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHRtcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb290ZXJIZWlnaHQoaGVpZ2h0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvb3RlckhlaWdodC5nZXRWYWx1ZSgpICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICAgIC8vIGl0IGlzIHB1Ymxpc2hpbmcgdGhpcyB2YWx1ZSB0byBhbGwgdGhlIHN1YnNjcmliZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IHN1YnNjcmliZWQgdG8gdGhpcyBtZXNzYWdlXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvb3RlckhlaWdodC5uZXh0KGhlaWdodCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT09URVJfSEVJR0hUX0tFWSxcbiAgICAgICAgICAgIGhlaWdodCArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBoaWRlRm9vdGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEZvb3RlckhlaWdodCgwKTtcbiAgICB9XG5cbiAgICBzaG93Rm9vdGVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG5cbiAgICAgICAgY29uc3QgcmVzID1cbiAgICAgICAgICAgIHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9PVEVSX0JBUl9TUEFDSU5HX1RPUF9LRVlcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT09URVJfQkFSX1NQQUNJTkdfQk9UVE9NX0tFWVxuICAgICAgICAgICAgKSArXG4gICAgICAgICAgICB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfRklFTERfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNldEZvb3RlckhlaWdodChyZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2V0dGluZ3NXaWR0aCh3aWR0aCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc1dpZHRoLmdldFZhbHVlKCkgIT09IHdpZHRoKSB7XG4gICAgICAgICAgICAvLyBpdCBpcyBwdWJsaXNoaW5nIHRoaXMgdmFsdWUgdG8gYWxsIHRoZSBzdWJzY3JpYmVycyB0aGF0IGhhdmUgYWxyZWFkeSBzdWJzY3JpYmVkIHRvIHRoaXMgbWVzc2FnZVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nc1dpZHRoLm5leHQod2lkdGgpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0VUVElOR1NfV0lEVEhfS0VZLFxuICAgICAgICAgICAgd2lkdGggKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaGlkZVNldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFNldHRpbmdzV2lkdGgoMCk7XG4gICAgfVxuXG4gICAgc2hvd1NldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0lERV9CQVJfV0lEVEhfS0VZXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZXRTZXR0aW5nc1dpZHRoKHJlcyk7XG4gICAgfVxuXG4gICAgZ2V0VG9wQmFySGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcblxuICAgICAgICBjb25zdCByZXMgPVxuICAgICAgICAgICAgdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX1NQQUNJTkdfVE9QX0tFWVxuICAgICAgICAgICAgKSArXG4gICAgICAgICAgICB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfU1BBQ0lOR19CT1RUT01fS0VZXG4gICAgICAgICAgICApICtcbiAgICAgICAgICAgIHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9GSUVMRF9IRUlHSFRfS0VZXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgc2V0T2xkVXNlclRoZW1lKHJlczogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIEFkZGVkIHVzZXIgdGhlbWUuXG4gICAgICAgIGNvbnN0IHRoZW1lT2JqID0ge1xuICAgICAgICAgICAgVGhlbWU6IHJlcy5UaGVtZSB8fCAnZGVmYXVsdC10aGVtZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRPYmplY3QoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX1RIRU1FLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhlbWVPYmopXG4gICAgICAgICk7XG5cbiAgICAgICAgbGV0IHNwaW5uZXJDb2xvcjtcbiAgICAgICAgbGV0IGJyYW5kaW5nRm9udENvbG9yO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTGlnaHRDb2xvcihyZXMuQnJhbmRpbmdNYWluQ29sb3IpKSB7XG4gICAgICAgICAgICBzcGlubmVyQ29sb3IgPSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5ERUZBVUxUX1NQSU5ORVJfQ09MT1I7XG4gICAgICAgICAgICBicmFuZGluZ0ZvbnRDb2xvciA9ICcjMjIyJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNwaW5uZXJDb2xvciA9IHJlcy5CcmFuZGluZ01haW5Db2xvcjtcbiAgICAgICAgICAgIGJyYW5kaW5nRm9udENvbG9yID0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuREVGQVVMVF9CUkFORElOR19DT0xPUjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbG9yID0ge1xuICAgICAgICAgICAgQnJhbmRpbmdTZWNvbmRhcnlDb2xvcjogcmVzLkJyYW5kaW5nU2Vjb25kYXJ5Q29sb3IsXG4gICAgICAgICAgICBCcmFuZGluZ01haW5Db2xvcjogcmVzLkJyYW5kaW5nTWFpbkNvbG9yLFxuICAgICAgICAgICAgQnJhbmRpbmdGb250Q29sb3I6IGJyYW5kaW5nRm9udENvbG9yLFxuICAgICAgICAgICAgU3Bpbm5lckNvbG9yOiBzcGlubmVyQ29sb3IsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRPYmplY3QoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX0NPTE9SLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29sb3IpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5oYXNDdXN0b21IZWFkZXIgPVxuICAgICAgICAgICAgcmVzLlRvcEhlYWRlckZpbGVzICYmXG4gICAgICAgICAgICAgICAgcmVzLlRvcEhlYWRlckZpbGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICByZXMuVG9wSGVhZGVyRmlsZXNbMF0gIT09ICcnXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNDdXN0b21Ib21lcGFnZSA9XG4gICAgICAgICAgICByZXMuVXNlclJvbGUgPT09ICdCdXllcicgJiZcbiAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlcyAmJlxuICAgICAgICAgICAgcmVzLlRvcEhlYWRlckZpbGVzLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlc1sxXSAhPT0gJyc7XG4gICAgfVxuXG4gICAgaXNMZWdhY3lDb2xvcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWgnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHMgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9IRUFERVJfS0VZICsgJy1zJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9UT1BfSEVBREVSX0tFWSArICctbCdcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gIShoICYmIHMgJiYgbCk7XG4gICAgfVxuXG4gICAgZ2V0TG9hZGluZ1NwaW5uZXJDb2xvcigpOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3Bpbm5lckNvbG9yID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDb2xvcigpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0T2JqZWN0KFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlVTRVJfQ09MT1JcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChjb2xvciAmJiBjb2xvci5TcGlubmVyQ29sb3IpIHtcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3IgPSBjb2xvci5TcGlubmVyQ29sb3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNwaW5uZXJDb2xvciA9IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfU1BJTk5FUl9DT0xPUjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzcGlubmVyQ29sb3I7XG4gICAgfVxuXG4gICAgZ2V0QnJhbmRpbmdNYWluQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGJyYW5kaW5nTWFpbkNvbG9yID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMZWdhY3lDb2xvcigpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0T2JqZWN0KFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlVTRVJfQ09MT1JcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChjb2xvciAmJiBjb2xvci5CcmFuZGluZ01haW5Db2xvcikge1xuICAgICAgICAgICAgICAgIGJyYW5kaW5nTWFpbkNvbG9yID0gY29sb3IuQnJhbmRpbmdNYWluQ29sb3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyYW5kaW5nTWFpbkNvbG9yID1cbiAgICAgICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuREVGQVVMVF9CUkFORElOR19DT0xPUjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBicmFuZGluZ01haW5Db2xvcjtcbiAgICB9XG5cbiAgICBpc0xpZ2h0Q29sb3IoaGV4Q29sb3IpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFoZXhDb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlzQnJpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBjb25zdCBjID0gaGV4Q29sb3IucmVwbGFjZSgvXiMvLCAnJyk7XG5cbiAgICAgICAgc3VtID0gcGFyc2VJbnQoY1swXSArIGNbMV0sIDE2KTtcbiAgICAgICAgc3VtICs9IHBhcnNlSW50KGNbMl0gKyBjWzNdLCAxNik7XG4gICAgICAgIHN1bSArPSBwYXJzZUludChjWzRdICsgY1s1XSwgMTYpO1xuXG4gICAgICAgIGlmIChzdW0gPiAzODIuNikge1xuICAgICAgICAgICAgLy8gaXQncyBicmlnaHQgY29sb3JcbiAgICAgICAgICAgIGlzQnJpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0JyaWdodDtcbiAgICB9XG59XG4iXX0=
780
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9taXphdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9jdXN0b21pemF0aW9uL2N1c3RvbWl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBUXZDLE1BQU0sT0FBTyx1QkFBdUI7SUFxSmhDLFlBQ1ksY0FBaUMsRUFDakMsV0FBMkIsRUFDNUIsRUFBZTtRQUZkLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDNUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQVZuQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsdUJBQXVCLENBQUMscUJBQXFCLENBQUM7UUFDbkUsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBT2xELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixFQUFFO0lBQ04sQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQW1CLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDMUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztZQUNmLEVBQUUsS0FBSyxFQUFF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QixDQUFDO1lBQ25ELE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDakQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7SUFDakQsQ0FBQztJQUVELCtCQUErQixDQUFDLFNBQWM7UUFDMUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDakQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDaEQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDN0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDL0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lBQ25ELEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7UUFDN0MsU0FBUyxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1lB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QUFHLDBCQUEwQixDQUFDO0FBQ3BELDhDQUFzQixHQUFHLDBCQUEwQixDQUFDO0FBRTNELHVCQUF1QjtBQUNoQiw4Q0FBc0IsR0FBRywwQkFBMEIsQ0FBQztBQUNwRCwwQ0FBa0IsR0FBRyxxQkFBcUIsQ0FBQztBQUMzQywrQ0FBdUIsR0FBRywyQkFBMkIsQ0FBQztBQUU3RCxtQkFBbUI7QUFDbkIsd0RBQXdEO0FBQ3hELDZDQUE2QztBQUV0Qyw2Q0FBcUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVO0FBRXRDLDZDQUFxQixHQUFHLFNBQVMsQ0FBQztBQUNsQyw4Q0FBc0IsR0FBRyxNQUFNLENBQUM7b0hBNUk5Qix1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZwQixNQUFNOzJGQUVULHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGVwU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vc2VydmljZXMvc2Vzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3NlcnZpY2VzL2ZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBQZXBTdHlsZVR5cGUsIFBlcEZpZWxkQmFzZSB9IGZyb20gJy4vY3VzdG9taXphdGlvbi5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlIHtcbiAgICBzdGF0aWMgU1RBTkRfQUxPTkVfRklFTERfQ0xBU1NfTkFNRSA9ICdwZXAtZmllbGQnO1xuICAgIHN0YXRpYyBTVEFORF9BTE9ORV9GSUVMRF9OT19TUEFDSU5HX0NMQVNTX05BTUUgPSAncGVwLWZpZWxkLW5vLXNwYWNpbmcnO1xuXG4gICAgc3RhdGljIFJFTV9TVFJJTkcgPSAncmVtJztcbiAgICBzdGF0aWMgUFhfU1RSSU5HID0gJ3B4JztcbiAgICBzdGF0aWMgVVNFUl9USEVNRSA9ICd1c2VyX3RoZW1lJztcbiAgICBzdGF0aWMgVVNFUl9DT0xPUiA9ICd1c2VyX2NvbG9yJztcbiAgICBzdGF0aWMgVVNFUl9USEVNRV9WQVJJQUJMRVMgPSAndXNlcl90aGVtZV92YXJpYWJsZXMnO1xuXG4gICAgLy8gSGVhZGVyIGhlaWdodFxuICAgIHN0YXRpYyBIRUFERVJfSEVJR0hUX0tFWSA9ICctLXBlcC1oZWFkZXItaGVpZ2h0JztcblxuICAgIC8vIFNpZGUgYmFyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIFNJREVfQkFSX1dJRFRIX0tFWSA9ICctLXBlcC1zaWRlLWJhci13aWR0aCc7XG5cbiAgICAvLyBTZXR0aW5ncyB3aWR0aFxuICAgIHN0YXRpYyBTRVRUSU5HU19XSURUSF9LRVkgPSAnLS1wZXAtc2V0dGluZ3MtYmFyLXdpZHRoJztcblxuICAgIC8vIFRvcCBiYXIgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgVE9QX0JBUl9TUEFDSU5HX1RPUF9LRVkgPSAnLS1wZXAtdG9wLWJhci1zcGFjaW5nLXRvcCc7XG4gICAgc3RhdGljIFRPUF9CQVJfU1BBQ0lOR19CT1RUT01fS0VZID0gJy0tcGVwLXRvcC1iYXItc3BhY2luZy1ib3R0b20nO1xuICAgIHN0YXRpYyBUT1BfQkFSX0ZJRUxEX0hFSUdIVF9LRVkgPSAnLS1wZXAtdG9wLWJhci1maWVsZC1oZWlnaHQnO1xuXG4gICAgLy8gRm9vdGVyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIEZPT1RFUl9IRUlHSFRfS0VZID0gJy0tcGVwLWZvb3Rlci1iYXItaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9PVEVSX0JBUl9TUEFDSU5HX1RPUF9LRVkgPSAnLS1wZXAtZm9vdGVyLWJhci1zcGFjaW5nLXRvcCc7XG4gICAgc3RhdGljIEZPT1RFUl9CQVJfU1BBQ0lOR19CT1RUT01fS0VZID0gJy0tcGVwLWZvb3Rlci1iYXItc3BhY2luZy1ib3R0b20nO1xuXG4gICAgLy8gTWFpbiBjb250YWluZXIgaGVpZ2h0XG4gICAgc3RhdGljIE1BSU5fSEVJR0hUX0tFWSA9ICctLXBlcC1tYWluLWhlaWdodCc7XG5cbiAgICAvLyBDb2xvcnMgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgQ09MT1JfVVNFUl9QUklNQVJZX0tFWSA9ICctLXBlcC1jb2xvci11c2VyLXByaW1hcnknO1xuICAgIHN0YXRpYyBDT0xPUl9VU0VSX1NFQ09OREFSWV9LRVkgPSAnLS1wZXAtY29sb3ItdXNlci1zZWNvbmRhcnknO1xuICAgIHN0YXRpYyBDT0xPUl9TWVNURU1fUFJJTUFSWV9JTlZFUlRfS0VZID1cbiAgICAgICAgJy0tcGVwLWNvbG9yLXN5c3RlbS1wcmltYXJ5LWludmVydCc7XG4gICAgc3RhdGljIENPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSA9ICctLXBlcC1jb2xvci1zeXN0ZW0tcHJpbWFyeSc7XG4gICAgc3RhdGljIENPTE9SX1RFWFRfTElOS19LRVkgPSAnLS1wZXAtY29sb3ItdGV4dC1saW5rJztcbiAgICBzdGF0aWMgQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZID0gJy0tcGVwLWNvbG9yLXN5c3RlbS1jYXV0aW9uJztcbiAgICBzdGF0aWMgQ09MT1JfU1lTVEVNX1NVQ0NFU1NfS0VZID0gJy0tcGVwLWNvbG9yLXN5c3RlbS1zdWNjZXNzJztcbiAgICBzdGF0aWMgQ09MT1JfU1RST05HX0tFWSA9ICctLXBlcC1jb2xvci1zdHJvbmcnO1xuICAgIHN0YXRpYyBDT0xPUl9SRUdVTEFSX0tFWSA9ICctLXBlcC1jb2xvci1yZWd1bGFyJztcbiAgICBzdGF0aWMgQ09MT1JfV0VBS19LRVkgPSAnLS1wZXAtY29sb3Itd2Vhayc7XG5cbiAgICAvLyBUb3AgaGVhZGVyIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX1RPUF9IRUFERVJfS0VZID0gJy0tcGVwLWNvbG9yLXRvcC1oZWFkZXInO1xuICAgIHN0YXRpYyBTVFlMRV9UT1BfSEVBREVSX0tFWSA9ICctLXBlcC1zdHlsZS10b3AtaGVhZGVyJztcblxuICAgIC8vIFFTIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIENPTE9SX1FTX0tFWSA9ICctLXBlcC1jb2xvci1xcyc7XG4gICAgc3RhdGljIFNUWUxFX1FTX0tFWSA9ICctLXBlcC1zdHlsZS1xcyc7XG5cbiAgICAvLyBGb250cyB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT05UX0ZBTUlMWV9USVRMRV9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktdGl0bGUnO1xuICAgIHN0YXRpYyBGT05UX0ZBTUlMWV9USVRMRV9OT1JNQUxfVVJMX0tFWSA9XG4gICAgICAgICctLXBlcC1mb250LWZhbWlseS10aXRsZS1ub3JtYWwtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfVElUTEVfQk9MRF9VUkxfS0VZID0gJy0tcGVwLWZvbnQtZmFtaWx5LXRpdGxlLWJvbGQtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfQk9EWV9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktYm9keSc7XG4gICAgc3RhdGljIEZPTlRfRkFNSUxZX0JPRFlfTk9STUFMX1VSTF9LRVkgPVxuICAgICAgICAnLS1wZXAtZm9udC1mYW1pbHktYm9keS1ub3JtYWwtdXJsJztcbiAgICBzdGF0aWMgRk9OVF9GQU1JTFlfQk9EWV9CT0xEX1VSTF9LRVkgPSAnLS1wZXAtZm9udC1mYW1pbHktYm9keS1ib2xkLXVybCc7XG5cbiAgICAvLyBCb3JkZXIgcmFkaXVzIHZhcmlhYmxlcyBrZXlzXG4gICAgc3RhdGljIEJPUkRFUl9SQURJVVNfS0VZID0gJy0tcGVwLWJvcmRlci1yYWRpdXMnO1xuICAgIHN0YXRpYyBCT1JERVJfUkFESVVTX1NNX0tFWSA9XG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfS0VZICsgJy1zbSc7XG4gICAgc3RhdGljIEJPUkRFUl9SQURJVVNfTURfS0VZID1cbiAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19LRVkgKyAnLW1kJztcbiAgICBzdGF0aWMgQk9SREVSX1JBRElVU19MR19LRVkgPVxuICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX0tFWSArICctbGcnO1xuICAgIHN0YXRpYyBCT1JERVJfUkFESVVTX1hMX0tFWSA9XG4gICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfS0VZICsgJy14bCc7XG5cbiAgICAvLyBGb250cyB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBGT05UX1NJWkVfMlhTX0tFWSA9ICctLXBlcC1mb250LXNpemUtMnhzJztcbiAgICBzdGF0aWMgRk9OVF9TSVpFX1hTX0tFWSA9ICctLXBlcC1mb250LXNpemUteHMnO1xuICAgIHN0YXRpYyBGT05UX1NJWkVfU01fS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS1zbSc7XG4gICAgc3RhdGljIEZPTlRfU0laRV9NRF9LRVkgPSAnLS1wZXAtZm9udC1zaXplLW1kJztcbiAgICBzdGF0aWMgRk9OVF9TSVpFX0xHX0tFWSA9ICctLXBlcC1mb250LXNpemUtbGcnO1xuICAgIHN0YXRpYyBGT05UX1NJWkVfWExfS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS14bCc7XG4gICAgc3RhdGljIEZPTlRfU0laRV8yWExfS0VZID0gJy0tcGVwLWZvbnQtc2l6ZS0yeGwnO1xuXG4gICAgLy8gTGluZSBoZWlnaHQgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgTElORV9IRUlHSFRfMlhTX0tFWSA9ICctLXBlcC1saW5lLWhlaWdodC0yeHMnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9YU19LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQteHMnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9TTV9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtc20nO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9NRF9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtbWQnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9MR19LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQtbGcnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF9YTF9LRVkgPSAnLS1wZXAtbGluZS1oZWlnaHQteGwnO1xuICAgIHN0YXRpYyBMSU5FX0hFSUdIVF8yWExfS0VZID0gJy0tcGVwLWxpbmUtaGVpZ2h0LTJ4bCc7XG5cbiAgICAvLyBTaGFkb3dzIG9mZnNldCB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBTSEFET1dfTk9ORV9PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy1ub25lLW9mZnNldCc7XG4gICAgc3RhdGljIFNIQURPV19YU19PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy14cy1vZmZzZXQnO1xuICAgIHN0YXRpYyBTSEFET1dfU01fT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3ctc20tb2Zmc2V0JztcbiAgICBzdGF0aWMgU0hBRE9XX01EX09GRlNFVF9LRVkgPSAnLS1wZXAtc2hhZG93LW1kLW9mZnNldCc7XG4gICAgc3RhdGljIFNIQURPV19MR19PRkZTRVRfS0VZID0gJy0tcGVwLXNoYWRvdy1sZy1vZmZzZXQnO1xuICAgIHN0YXRpYyBTSEFET1dfWExfT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3cteGwtb2Zmc2V0JztcblxuICAgIC8vIFNwYWNpbmcgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzJYU19LRVkgPSAnLS1wZXAtc3BhY2luZy0yeHMnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfWFNfS0VZID0gJy0tcGVwLXNwYWNpbmcteHMnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfU01fS0VZID0gJy0tcGVwLXNwYWNpbmctc20nO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfTURfS0VZID0gJy0tcGVwLXNwYWNpbmctbWQnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfTEdfS0VZID0gJy0tcGVwLXNwYWNpbmctbGcnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfWExfS0VZID0gJy0tcGVwLXNwYWNpbmcteGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfMlhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTJ4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV8zWExfS0VZID0gJy0tcGVwLXNwYWNpbmctM3hsJztcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzRYTF9LRVkgPSAnLS1wZXAtc3BhY2luZy00eGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfNVhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTV4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV82WExfS0VZID0gJy0tcGVwLXNwYWNpbmctNnhsJztcbiAgICBzdGF0aWMgU1BBQ0lOR19TSVpFXzdYTF9LRVkgPSAnLS1wZXAtc3BhY2luZy03eGwnO1xuICAgIHN0YXRpYyBTUEFDSU5HX1NJWkVfOFhMX0tFWSA9ICctLXBlcC1zcGFjaW5nLTh4bCc7XG4gICAgc3RhdGljIFNQQUNJTkdfU0laRV85WExfS0VZID0gJy0tcGVwLXNwYWNpbmctOXhsJztcblxuICAgIC8vIEZvcm0gdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLWZvcm0tZmllbGQtaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9USVRMRV9IRUlHSFRfS0VZID0gJy0tcGVwLWZvcm0tZmllbGQtdGl0bGUtaGVpZ2h0JztcbiAgICBzdGF0aWMgRk9STV9GSUVMRF9TUEFDRUlOR19LRVkgPSAnLS1wZXAtZm9ybS1maWVsZC1zcGFjaW5nJztcbiAgICBzdGF0aWMgRk9STV9TUEFDRUlOR19LRVkgPSAnLS1wZXAtZm9ybS1zcGFjaW5nJztcblxuICAgIC8vIENhcmQgdmFyaWFibGVzIGtleXNcbiAgICBzdGF0aWMgQ0FSRF9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLWNhcmQtZmllbGQtaGVpZ2h0JztcbiAgICBzdGF0aWMgQ0FSRF9TUEFDRUlOR19LRVkgPSAnLS1wZXAtY2FyZC1zcGFjaW5nJztcbiAgICBzdGF0aWMgQ0FSRF9TSEFET1dfT0ZGU0VUX0tFWSA9ICctLXBlcC1zaGFkb3ctY2FyZC1vZmZzZXQnO1xuICAgIHN0YXRpYyBDQVJEX0JPUkRFUl9SQURJVVNfS0VZID0gJy0tcGVwLWNhcmQtYm9yZGVyLXJhZGl1cyc7XG5cbiAgICAvLyBUYWJsZSB2YXJpYWJsZXMga2V5c1xuICAgIHN0YXRpYyBUQUJMRV9GSUVMRF9IRUlHSFRfS0VZID0gJy0tcGVwLXRhYmxlLWZpZWxkLWhlaWdodCc7XG4gICAgc3RhdGljIFRBQkxFX1NQQUNFSU5HX0tFWSA9ICctLXBlcC10YWJsZS1zcGFjaW5nJztcbiAgICBzdGF0aWMgVEFCTEVfQk9SREVSX1JBRElVU19LRVkgPSAnLS1wZXAtdGFibGUtYm9yZGVyLXJhZGl1cyc7XG5cbiAgICAvLyAvLyBCcmFuZGluZyBrZXlzXG4gICAgLy8gc3RhdGljIEJSQU5ESU5HX0xPR09fU1JDID0gJy0tcGVwLWJyYW5kaW5nLWxvZ28tc3JjJztcbiAgICAvLyBzdGF0aWMgRkFWX0lDT05fU1JDID0gJy0tcGVwLWZhdmljb24tc3JjJztcblxuICAgIHN0YXRpYyBERUZBVUxUX0hFQURFUl9IRUlHSFQgPSA2NDsgLy8gRGVmYXVsdFxuXG4gICAgc3RhdGljIERFRkFVTFRfU1BJTk5FUl9DT0xPUiA9ICcjNzhhYTAwJztcbiAgICBzdGF0aWMgREVGQVVMVF9CUkFORElOR19DT0xPUiA9ICcjZmZmJztcblxuICAgIHB1YmxpYyBoYXNDdXN0b21Ib21lcGFnZTogYm9vbGVhbiA9IG51bGw7XG4gICAgcHVibGljIGhhc0N1c3RvbUhlYWRlcjogYm9vbGVhbiA9IG51bGw7XG4gICAgcHVibGljIGN1c3RvbUhlYWRlckhlaWdodCA9IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfSEVBREVSX0hFSUdIVDtcbiAgICBwdWJsaWMgbWFpbkNvbnRIZWlnaHQgPSAwO1xuICAgIHB1YmxpYyBmb290ZXJIZWlnaHQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgcHVibGljIHNldHRpbmdzV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZTogUGVwU2Vzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IFBlcEZpbGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZmI6IEZvcm1CdWlsZGVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaGlkZUZvb3RlcigpO1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIGdldERlZmF1bHRGcm9tR3JvdXAoZmllbGQ6IFBlcEZpZWxkQmFzZSwgd2l0aFZhbGlkYXRvcnMgPSB0cnVlKTogRm9ybUdyb3VwIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHdpdGhWYWxpZGF0b3JzID8gZmllbGQuZ2V0VmFsaWRhdG9ycygpIDogW107XG4gICAgICAgIGNvbnN0IGdyb3VwID0ge307XG4gICAgICAgIGdyb3VwW2ZpZWxkLmtleV0gPSBbXG4gICAgICAgICAgICB7IHZhbHVlOiBmaWVsZC52YWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkIH0sXG4gICAgICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfVxuXG4gICAgZ2V0Rm9ybUNvbnRyb2woXG4gICAgICAgIGZvcm06IEZvcm1Hcm91cCxcbiAgICAgICAgZmllbGRLZXk6IHN0cmluZyxcbiAgICAgICAgcGFyZW50RmllbGRLZXk6IHN0cmluZyA9IG51bGxcbiAgICApOiBhbnkge1xuICAgICAgICBsZXQgZm9ybUNvbnRyb2wgPSBudWxsO1xuXG4gICAgICAgIGlmIChmb3JtICYmIGZvcm0uY29udHJvbHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnRGaWVsZEtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sID0gZm9ybS5jb250cm9sc1tmaWVsZEtleV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sID0gZm9ybS5jb250cm9sc1twYXJlbnRGaWVsZEtleV0/LmdldChmaWVsZEtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybUNvbnRyb2w7XG4gICAgfVxuXG4gICAgdXBkYXRlRm9ybUZpZWxkVmFsdWUoXG4gICAgICAgIGZvcm06IEZvcm1Hcm91cCxcbiAgICAgICAgZmllbGRLZXk6IHN0cmluZyxcbiAgICAgICAgdmFsdWUgPSAnJyxcbiAgICAgICAgcGFyZW50RmllbGRLZXk6IHN0cmluZyA9IG51bGxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKGZvcm0sIGZpZWxkS2V5LCBwYXJlbnRGaWVsZEtleSk7XG4gICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlRm9ybUZpZWxkKFxuICAgICAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgICAgIGZpZWxkOiBQZXBGaWVsZEJhc2UsXG4gICAgICAgIHZhbHVlID0gJycsXG4gICAgICAgIHBhcmVudEZpZWxkOiBQZXBGaWVsZEJhc2UgPSBudWxsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woXG4gICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgZmllbGQua2V5LFxuICAgICAgICAgICAgcGFyZW50RmllbGQ/LmtleVxuICAgICAgICApO1xuICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcblxuICAgICAgICAgICAgLy8gSWYgZGlzYWJsZWQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wuZGlzYWJsZWQgIT09IGZpZWxkLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuZGlzYWJsZWQgPyBmb3JtQ29udHJvbC5kaXNhYmxlKCkgOiBmb3JtQ29udHJvbC5lbmFibGUoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBmaWVsZC5nZXRWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZUZvcm1GaWVsZEhlaWdodChcbiAgICAgICAgd2l0aFRpdGxlID0gdHJ1ZSxcbiAgICAgICAgcm93U3BhbiA9IDEsXG4gICAgICAgIHN0YW5kQWxvbmUgPSBmYWxzZVxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcbiAgICAgICAgY29uc3Qgcm93RmllbGRIZWlnaHQgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgcm93RmllbGRUaXRsZUhlaWdodCA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfVElUTEVfSEVJR0hUX0tFWVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByb3dGaWVsZFNwYWNpbmdCb3R0b20gPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX1NQQUNFSU5HX0tFWVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBmaWVsZEhlaWdodCA9IDA7XG4gICAgICAgIGlmIChyb3dTcGFuID09PSAxKSB7XG4gICAgICAgICAgICBmaWVsZEhlaWdodCA9XG4gICAgICAgICAgICAgICAgKHdpdGhUaXRsZSA/IHJvd0ZpZWxkVGl0bGVIZWlnaHQgOiAwKSArIHJvd0ZpZWxkSGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm93U3BhbkNhbGMgPSB3aXRoVGl0bGUgPyByb3dTcGFuIDogcm93U3BhbiAtIDE7XG4gICAgICAgICAgICBmaWVsZEhlaWdodCA9XG4gICAgICAgICAgICAgICAgcm93U3BhbiAqIHJvd0ZpZWxkSGVpZ2h0ICtcbiAgICAgICAgICAgICAgICByb3dTcGFuQ2FsYyAqIHJvd0ZpZWxkVGl0bGVIZWlnaHQgK1xuICAgICAgICAgICAgICAgIChzdGFuZEFsb25lID8gMCA6IHJvd1NwYW5DYWxjICogcm93RmllbGRTcGFjaW5nQm90dG9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZEhlaWdodDtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVDYXJkUm93c0hlaWdodChyb3dzQ291bnQgPSAxLCB3aXRoU3BhY2luZyA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG4gICAgICAgIGNvbnN0IGNhcmRGaWVsZEhlaWdodCA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfRklFTERfSEVJR0hUX0tFWVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjYXJkRmllbGRTcGFjaW5nID0gdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9TUEFDRUlOR19LRVlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmaWVsZEhlaWdodCA9XG4gICAgICAgICAgICByb3dzQ291bnQgKiBjYXJkRmllbGRIZWlnaHQgK1xuICAgICAgICAgICAgKHJvd3NDb3VudCAtIDEpICogKHdpdGhTcGFjaW5nID8gY2FyZEZpZWxkU3BhY2luZyA6IDApO1xuICAgICAgICByZXR1cm4gZmllbGRIZWlnaHQ7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlVGFibGVSb3dzSGVpZ2h0KHJvd3NDb3VudCA9IDEsIHdpdGhTcGFjaW5nID0gdHJ1ZSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHRoZW1lVmFycyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcbiAgICAgICAgY29uc3QgdGFibGVGaWVsZEhlaWdodCA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRBQkxFX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdGFibGVGaWVsZFNwYWNpbmcgPSB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9TUEFDRUlOR19LRVlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmaWVsZEhlaWdodCA9XG4gICAgICAgICAgICByb3dzQ291bnQgKlxuICAgICAgICAgICAgKHRhYmxlRmllbGRIZWlnaHQgKyAod2l0aFNwYWNpbmcgPyB0YWJsZUZpZWxkU3BhY2luZyAqIDIgOiAwKSk7XG4gICAgICAgIHJldHVybiBmaWVsZEhlaWdodDtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVGaWVsZEhlaWdodChsYXlvdXRUeXBlID0gJ2Zvcm0nLCByb3dTcGFuLCBzdGFuZEFsb25lKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGZpZWxkSGVpZ2h0ID0gJ2luaGVyaXQnOyAvLyBEZWZhdWx0IGZvciBjYXJkICh3aXRoIG5vIHRpdGxlKVxuICAgICAgICBpZiAobGF5b3V0VHlwZSA9PT0gJ3RhYmxlJykge1xuICAgICAgICAgICAgZmllbGRIZWlnaHQgPSB0aGlzLmdldFRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVEFCTEVfRklFTERfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRUeXBlID09PSAnY2FyZCcpIHtcbiAgICAgICAgICAgIGZpZWxkSGVpZ2h0ID1cbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNhcmRSb3dzSGVpZ2h0KHJvd1NwYW4sICFzdGFuZEFsb25lKSArXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZvcm1cbiAgICAgICAgICAgIGZpZWxkSGVpZ2h0ID1cbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUZvcm1GaWVsZEhlaWdodChmYWxzZSwgcm93U3Bhbiwgc3RhbmRBbG9uZSkgK1xuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGRIZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0QnJhbmRpbmdUaGVtZSgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB0aGVtZU9iaiA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0T2JqZWN0KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9USEVNRVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gKHRoZW1lT2JqICYmIHRoZW1lT2JqLlRoZW1lKSB8fCAnZGVmYXVsdC10aGVtZSc7IC8vICdsaWdodC10aGVtZSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lTGF5b3V0VmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBzY3JlZW4gc2l6ZXMuXG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtc2NyZWVuLW1heC1zaXplLTJ4cyddID1cbiAgICAgICAgICAgICc0NjAnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUFhfU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLXNjcmVlbi1tYXgtc2l6ZS14cyddID1cbiAgICAgICAgICAgICc3NjcnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUFhfU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLXNjcmVlbi1tYXgtc2l6ZS1zbSddID1cbiAgICAgICAgICAgICc5OTEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUFhfU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLXNjcmVlbi1tYXgtc2l6ZS1tZCddID1cbiAgICAgICAgICAgICcxMTk5JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlBYX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1zY3JlZW4tbWF4LXNpemUtbGcnXSA9XG4gICAgICAgICAgICAnMTM2NicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5QWF9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtc2NyZWVuLW1heC1zaXplLXhsJ10gPVxuICAgICAgICAgICAgJzE5MjAnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUFhfU1RSSU5HO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCB0b3AgYmFyLlxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0lERV9CQVJfV0lEVEhfS0VZXSA9XG4gICAgICAgICAgICAnMTYnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgdG9wIGJhci5cbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfU1BBQ0lOR19UT1BfS0VZXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX1NQQUNJTkdfQk9UVE9NX0tFWV0gPVxuICAgICAgICAgICAgJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9GSUVMRF9IRUlHSFRfS0VZXSA9XG4gICAgICAgICAgICAnMi41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGZvb3Rlci5cbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPT1RFUl9CQVJfU1BBQ0lOR19UT1BfS0VZXSA9XG4gICAgICAgICAgICAnMC43NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9PVEVSX0JBUl9TUEFDSU5HX0JPVFRPTV9LRVldID1cbiAgICAgICAgICAgICcxLjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lQm9yZGVyUmFkaXVzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX1NNX0tFWV0gPVxuICAgICAgICAgICAgJzAuMTI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX01EX0tFWV0gPVxuICAgICAgICAgICAgJzAuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfTEdfS0VZXSA9XG4gICAgICAgICAgICAnMC41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5CT1JERVJfUkFESVVTX1hMX0tFWV0gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVTcGFjaW5nVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfMlhTX0tFWV0gPVxuICAgICAgICAgICAgJzAuMTI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfWFNfS0VZXSA9XG4gICAgICAgICAgICAnMC4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFX1NNX0tFWV0gPVxuICAgICAgICAgICAgJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFX01EX0tFWV0gPVxuICAgICAgICAgICAgJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9MR19LRVldID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfWExfS0VZXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfMlhMX0tFWV0gPVxuICAgICAgICAgICAgJzInICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV8zWExfS0VZXSA9XG4gICAgICAgICAgICAnMi41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfNFhMX0tFWV0gPVxuICAgICAgICAgICAgJzMnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV81WExfS0VZXSA9XG4gICAgICAgICAgICAnMy41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfNlhMX0tFWV0gPVxuICAgICAgICAgICAgJzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV83WExfS0VZXSA9XG4gICAgICAgICAgICAnNicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU1BBQ0lOR19TSVpFXzhYTF9LRVldID1cbiAgICAgICAgICAgICc4JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TUEFDSU5HX1NJWkVfOVhMX0tFWV0gPVxuICAgICAgICAgICAgJzE2JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lRm9udHNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gVGl0bGUgZm9udCBmYW1pbHlcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfRkFNSUxZX1RJVExFX0tFWV0gPSAnTmV4YSc7XG5cbiAgICAgICAgLy8gQm9keSBmb250IGZhbWlseVxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfQk9EWV9LRVldID0gJ0ludGVyJztcblxuICAgICAgICAvLyBGb250IHNpemVzXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfMlhTX0tFWV0gPVxuICAgICAgICAgICAgJzAuNjI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfWFNfS0VZXSA9XG4gICAgICAgICAgICAnMC43NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1NNX0tFWV0gPVxuICAgICAgICAgICAgJzAuODc1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfTURfS0VZXSA9XG4gICAgICAgICAgICAnMScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX0xHX0tFWV0gPVxuICAgICAgICAgICAgJzEuMTI1JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfWExfS0VZXSA9XG4gICAgICAgICAgICAnMS4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFXzJYTF9LRVldID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICAvLyBMaW5lIGhlaWdodFxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuTElORV9IRUlHSFRfMlhTX0tFWV0gPVxuICAgICAgICAgICAgJzAuNzUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUX1hTX0tFWV0gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUX1NNX0tFWV0gPVxuICAgICAgICAgICAgJzEuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkxJTkVfSEVJR0hUX01EX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuTElORV9IRUlHSFRfTEdfS0VZXSA9XG4gICAgICAgICAgICAnMS43NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuTElORV9IRUlHSFRfWExfS0VZXSA9XG4gICAgICAgICAgICAnMicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuTElORV9IRUlHSFRfMlhMX0tFWV0gPVxuICAgICAgICAgICAgJzIuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICAvLyBGb250IHdlaWdodFxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWZvbnQtd2VpZ2h0LW5vcm1hbCddID0gNDAwO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWZvbnQtd2VpZ2h0LWJvbGQnXSA9IDYwMDtcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1mb250LXdlaWdodC1ib2xkZXInXSA9IDgwMDtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVCdXR0b25zVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLTJ4cy1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMC4yNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi0yeHMtbWluLXdpZHRoJ10gPVxuICAgICAgICAgICAgJzEnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tMnhzLWhlaWdodCddID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLTJ4cy1mb250LXNpemUnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfMlhTX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24tMnhzLWljb24taG9yaXpvbnRhbC1zcGFjaW5nJ10gPSAnMC4xMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14cy1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMC41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhzLW1pbi13aWR0aCddID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teHMtaGVpZ2h0J10gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14cy1mb250LXNpemUnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfWFNfS0VZICsgJyknO1xuICAgICAgICAvLyB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi14cy1pY29uLWhvcml6b250YWwtc3BhY2luZyddID0gJzAuMjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcblxuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1zbS1ob3Jpem9udGFsLXNwYWNpbmcnXSA9XG4gICAgICAgICAgICAnMC43NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1zbS1taW4td2lkdGgnXSA9XG4gICAgICAgICAgICAnMicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1zbS1oZWlnaHQnXSA9XG4gICAgICAgICAgICAnMicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1zbS1mb250LXNpemUnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfU01fS0VZICsgJyknO1xuICAgICAgICAvLyB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1zbS1pY29uLWhvcml6b250YWwtc3BhY2luZyddID0gJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLW1kLWhvcml6b250YWwtc3BhY2luZyddID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLW1kLW1pbi13aWR0aCddID1cbiAgICAgICAgICAgICcyLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24tbWQtaGVpZ2h0J10gPVxuICAgICAgICAgICAgJzIuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1tZC1mb250LXNpemUnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT05UX1NJWkVfTURfS0VZICsgJyknO1xuICAgICAgICAvLyB0aGVtZVZhcnNbJy0tcGVwLWJ1dHRvbi1tZC1pY29uLWhvcml6b250YWwtc3BhY2luZyddID0gJzAuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLWxnLWhvcml6b250YWwtc3BhY2luZyddID1cbiAgICAgICAgICAgICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLWxnLW1pbi13aWR0aCddID1cbiAgICAgICAgICAgICczJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLWxnLWhlaWdodCddID1cbiAgICAgICAgICAgICczJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLWxnLWZvbnQtc2l6ZSddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfU0laRV9MR19LRVkgKyAnKSc7XG4gICAgICAgIC8vIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLWxnLWljb24taG9yaXpvbnRhbC1zcGFjaW5nJ10gPSAnMC43NScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuXG4gICAgICAgIHRoZW1lVmFyc1snLS1wZXAtYnV0dG9uLXhsLWhvcml6b250YWwtc3BhY2luZyddID1cbiAgICAgICAgICAgICcxLjUnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teGwtbWluLXdpZHRoJ10gPVxuICAgICAgICAgICAgJzQnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teGwtaGVpZ2h0J10gPVxuICAgICAgICAgICAgJzQnICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklORztcbiAgICAgICAgdGhlbWVWYXJzWyctLXBlcC1idXR0b24teGwtZm9udC1zaXplJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9TSVpFX1hMX0tFWSArICcpJztcbiAgICAgICAgLy8gdGhlbWVWYXJzWyctLXBlcC1idXR0b24teGwtaWNvbi1ob3Jpem9udGFsLXNwYWNpbmcnXSA9ICcxJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgfVxuXG4gICAgZ2V0U3lzdGVtUHJpbWFyeUludmVydENvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9JTlZFUlRfS0VZICsgJy1oJ1xuICAgICAgICBdID0gJzI1NSc7XG4gICAgICAgIHRoZW1lVmFyc1tcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0lOVkVSVF9LRVkgKyAnLXMnXG4gICAgICAgIF0gPSAnMTAwJSc7XG4gICAgICAgIHRoZW1lVmFyc1tcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0lOVkVSVF9LRVkgKyAnLWwnXG4gICAgICAgIF0gPSAnMTAwJSc7XG4gICAgfVxuXG4gICAgZ2V0U3lzdGVtUHJpbWFyeUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJzAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJzAlJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctbCddID1cbiAgICAgICAgICAgICcxMCUnO1xuICAgIH1cblxuICAgIGdldFN5c3RlbVN1Y2Nlc3NDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9TVUNDRVNTX0tFWSArICctaCddID1cbiAgICAgICAgICAgICcxMDAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1NVQ0NFU1NfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJzEwMCUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1NVQ0NFU1NfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJzI1JSc7XG4gICAgfVxuXG4gICAgZ2V0U3lzdGVtQ2F1dGlvbkNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX0NBVVRJT05fS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJzM2MCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fQ0FVVElPTl9LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAnMTAwJSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fQ0FVVElPTl9LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAnNDAlJztcbiAgICB9XG5cbiAgICBnZXRVc2VyUHJpbWFyeUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9QUklNQVJZX0tFWSArICctaCddID0gJzc4JztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfUFJJTUFSWV9LRVkgKyAnLXMnXSA9XG4gICAgICAgICAgICAnODclJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfUFJJTUFSWV9LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAnMjclJztcbiAgICB9XG5cbiAgICBnZXRVc2VyU2Vjb25kYXJ5Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1NFQ09OREFSWV9LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAnMzYnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9TRUNPTkRBUllfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJzEwMCUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9TRUNPTkRBUllfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJzUwJSc7XG4gICAgfVxuXG4gICAgZ2V0V2Vha0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfV0VBS19LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWgpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1dFQUtfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1zKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9XRUFLX0tFWSArICctbCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctbCknO1xuICAgIH1cblxuICAgIGdldFJlZ3VsYXJDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1JFR1VMQVJfS0VZICsgJy1oJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1oKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9SRUdVTEFSX0tFWSArICctcyddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctcyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfUkVHVUxBUl9LRVkgKyAnLWwnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWwpJztcbiAgICB9XG5cbiAgICBnZXRTdHJvbmdDb2xvcnNWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NUUk9OR19LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9VU0VSX1BSSU1BUllfS0VZICsgJy1oKSc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TVFJPTkdfS0VZICsgJy1zJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVVNFUl9QUklNQVJZX0tFWSArICctcyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1RST05HX0tFWSArICctbCddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1VTRVJfUFJJTUFSWV9LRVkgKyAnLWwpJztcbiAgICB9XG5cbiAgICBnZXRUZXh0Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9URVhUX0xJTktfS0VZICsgJy1oJ10gPSAnMjA3JztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RFWFRfTElOS19LRVkgKyAnLXMnXSA9ICc3NiUnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVEVYVF9MSU5LX0tFWSArICctbCddID0gJzM3JSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFN5c3RlbSBwcmltYXJ5IGludmVydCBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtUHJpbWFyeUludmVydENvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBTeXN0ZW0gcHJpbWFyeSBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtUHJpbWFyeUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBTeXN0ZW0gc3VjY2VzcyBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtU3VjY2Vzc0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBTeXN0ZW0gY2F1dGlvbiBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtQ2F1dGlvbkNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBVc2VyIHByaW1hcnkgY29sb3JzLlxuICAgICAgICB0aGlzLmdldFVzZXJQcmltYXJ5Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFVzZXIgc2Vjb25kYXJ5IGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRVc2VyU2Vjb25kYXJ5Q29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gV2VhayBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0V2Vha0NvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgICAgICAvLyBSZWd1bGFyIGNvbG9ycy5cbiAgICAgICAgdGhpcy5nZXRSZWd1bGFyQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG4gICAgICAgIC8vIFN0cm9uZyBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0U3Ryb25nQ29sb3JzVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gVGV4dCBjb2xvcnMuXG4gICAgICAgIHRoaXMuZ2V0VGV4dENvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRUaGVtZVNoYWRvd3NWYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9uZU9mZnNldCA9ICcwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19OT05FX09GRlNFVF9LRVldID0gbm9uZU9mZnNldDtcblxuICAgICAgICBjb25zdCB4c09mZnNldCA9ICcwIDAuMTI1cmVtIDAuMjVyZW0gMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfWFNfT0ZGU0VUX0tFWV0gPSB4c09mZnNldDtcblxuICAgICAgICBjb25zdCBzbU9mZnNldCA9ICcwIDAuMjVyZW0gMC41cmVtIDAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX1NNX09GRlNFVF9LRVldID0gc21PZmZzZXQ7XG5cbiAgICAgICAgY29uc3QgbWRPZmZzZXQgPSAnMCAwLjVyZW0gMXJlbSAwJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNIQURPV19NRF9PRkZTRVRfS0VZXSA9IG1kT2Zmc2V0O1xuXG4gICAgICAgIGNvbnN0IGxnT2Zmc2V0ID0gJzAgMXJlbSAycmVtIDAnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX0xHX09GRlNFVF9LRVldID0gbGdPZmZzZXQ7XG5cbiAgICAgICAgY29uc3QgeGxPZmZzZXQgPSAnMCAycmVtIDRyZW0gMCc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5TSEFET1dfWExfT0ZGU0VUX0tFWV0gPSB4bE9mZnNldDtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVGb3JtQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtRmllbGRTcGFjaW5nID0gMTtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPUk1fRklFTERfSEVJR0hUX0tFWV0gPVxuICAgICAgICAgICAgJzIuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9STV9GSUVMRF9USVRMRV9IRUlHSFRfS0VZXSA9XG4gICAgICAgICAgICAnMS41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX1NQQUNFSU5HX0tFWV0gPVxuICAgICAgICAgICAgZm9ybUZpZWxkU3BhY2luZyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5GT1JNX0ZJRUxEX1NQQUNFSU5HX0tFWV0gPVxuICAgICAgICAgICAgZm9ybUZpZWxkU3BhY2luZyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lQ2FyZEN1c3RvbWl6YXRpb25WYXJpYWJsZXModGhlbWVWYXJzOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfRklFTERfSEVJR0hUX0tFWV0gPVxuICAgICAgICAgICAgJzEuNScgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9TUEFDRUlOR19LRVldID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNQQUNJTkdfU0laRV9YU19LRVkgKyAnKSc7XG5cbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNBUkRfQk9SREVSX1JBRElVU19LRVldID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkJPUkRFUl9SQURJVVNfTURfS0VZICsgJyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ0FSRF9TSEFET1dfT0ZGU0VUX0tFWV0gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuU0hBRE9XX01EX09GRlNFVF9LRVkgKyAnKSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lVGFibGVDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9GSUVMRF9IRUlHSFRfS0VZXSA9XG4gICAgICAgICAgICAnMicgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVEFCTEVfU1BBQ0VJTkdfS0VZXSA9XG4gICAgICAgICAgICAnMC41JyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkc7XG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5UQUJMRV9CT1JERVJfUkFESVVTX0tFWV0gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQk9SREVSX1JBRElVU19NRF9LRVkgKyAnKSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lUVNDdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFyczogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHFzU3RhdGU6IFBlcFN0eWxlVHlwZSA9ICdyZWd1bGFyJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUWUxFX1FTX0tFWV0gPSBxc1N0YXRlO1xuXG4gICAgICAgIHRoZW1lVmFyc1tQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9RU19LRVkgKyAnLWgnXSA9XG4gICAgICAgICAgICAndmFyKCcgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9TWVNURU1fUFJJTUFSWV9LRVkgKyAnLWgpJztcbiAgICAgICAgdGhlbWVWYXJzW1BlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1FTX0tFWSArICctcyddID1cbiAgICAgICAgICAgICd2YXIoJyArIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1NZU1RFTV9QUklNQVJZX0tFWSArICctcyknO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfUVNfS0VZICsgJy1sJ10gPVxuICAgICAgICAgICAgJ3ZhcignICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfU1lTVEVNX1BSSU1BUllfS0VZICsgJy1sKSc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFRoZW1lVG9wSGVhZGVyQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b3BIZWFkZXJTdGF0ZTogUGVwU3R5bGVUeXBlID0gJ3N0cm9uZyc7XG4gICAgICAgIHRoZW1lVmFyc1tcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNUWUxFX1RPUF9IRUFERVJfS0VZXG4gICAgICAgIF0gPSB0b3BIZWFkZXJTdGF0ZTtcblxuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWgnXSA9ICcnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLXMnXSA9ICcnO1xuICAgICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWwnXSA9ICcnO1xuICAgIH1cblxuICAgIC8vIGdldERlZmF1bHRUaGVtZUJyYW5kaW5nQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnM6IGFueSk6IHZvaWQge1xuICAgIC8vICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQlJBTkRJTkdfTE9HT19TUkNdID0gJy9hc3NldHMvaW1hZ2VzL1BlcHBlcmktTG9nby1IaVJlcy5wbmcnO1xuICAgIC8vICAgICB0aGVtZVZhcnNbUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRkFWX0lDT05fU1JDXSA9ICcvYXNzZXRzL2Zhdmljb24uaWNvJztcbiAgICAvLyB9XG5cbiAgICBnZXREZWZhdWx0VGhlbWVWYXJpYWJsZXMoKTogYW55IHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0ge307XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGxheW91dC5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVMYXlvdXRWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgYm9yZGVyIHJhZGl1cy5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVCb3JkZXJSYWRpdXNWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgc3BhY2luZy5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVTcGFjaW5nVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGZvbnRzIHNpemUgJiBsaW5lIGhlaWdodC5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVGb250c1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBidXR0b25zLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUJ1dHRvbnNWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgY29sb3JzLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUNvbG9yc1ZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBzaGFkb3dzLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVNoYWRvd3NWYXJpYWJsZXModGhlbWVWYXJzKTtcblxuICAgICAgICAvLyBEZWNsYXJlIGRlZmF1bHQgZm9ybSBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZUZvcm1DdXN0b21pemF0aW9uVmFyaWFibGVzKHRoZW1lVmFycyk7XG5cbiAgICAgICAgLy8gRGVjbGFyZSBkZWZhdWx0IGNhcmQgY3VzdG9taXphdGlvbi5cbiAgICAgICAgdGhpcy5nZXREZWZhdWx0VGhlbWVDYXJkQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCB0YWJsZSBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVRhYmxlQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCBxcyBjdXN0b21pemF0aW9uLlxuICAgICAgICB0aGlzLmdldERlZmF1bHRUaGVtZVFTQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIERlY2xhcmUgZGVmYXVsdCB0b3AgaGVhZGVyIGN1c3RvbWl6YXRpb24uXG4gICAgICAgIHRoaXMuZ2V0RGVmYXVsdFRoZW1lVG9wSGVhZGVyQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIC8vIC8vIERlY2xhcmUgZGVmYXVsdCBicmFuZGluZyBsb2dvJ3MgY3VzdG9taXphdGlvblxuICAgICAgICAvLyB0aGlzLmdldERlZmF1bHRUaGVtZUJyYW5kaW5nQ3VzdG9taXphdGlvblZhcmlhYmxlcyh0aGVtZVZhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGVtZVZhcnM7XG4gICAgfVxuXG4gICAgZ2V0VGhlbWVWYXJpYWJsZXMoKTogYW55IHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5nZXREZWZhdWx0VGhlbWVWYXJpYWJsZXMoKTtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRPYmplY3QoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX1RIRU1FX1ZBUklBQkxFU1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzLlxuICAgICAgICBpZiAodGhlbWVWYXJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGVtZVZhcnMpIHtcbiAgICAgICAgICAgICAgICByZXRba2V5XSA9IHRoZW1lVmFyc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBzZXRUaGVtZVZhcmlhYmxlcyh0aGVtZVZhcmlhYmxlc1RvU2V0ID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0aGVtZVZhcmlhYmxlcyA9IHRoaXMuZ2V0VGhlbWVWYXJpYWJsZXMoKTtcblxuICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0cy5cbiAgICAgICAgaWYgKHRoZW1lVmFyaWFibGVzVG9TZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoZW1lVmFyaWFibGVzVG9TZXQpIHtcbiAgICAgICAgICAgICAgICB0aGVtZVZhcmlhYmxlc1trZXldID0gdGhlbWVWYXJpYWJsZXNUb1NldFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5zZXRPYmplY3QoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX1RIRU1FX1ZBUklBQkxFUyxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoZW1lVmFyaWFibGVzKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoZW1lVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZvbnRVcmxLZXkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZVNlcnZpY2UubG9hZEZvbnRTdHlsZShrZXksIHRoZW1lVmFyaWFibGVzW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgdGhlbWVWYXJpYWJsZXNba2V5XVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ZvbnRVcmxLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGtleSA9PT0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfVElUTEVfTk9STUFMX1VSTF9LRVkgfHxcbiAgICAgICAgICAgIGtleSA9PT0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfVElUTEVfQk9MRF9VUkxfS0VZIHx8XG4gICAgICAgICAgICBrZXkgPT09IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPTlRfRkFNSUxZX0JPRFlfTk9STUFMX1VSTF9LRVkgfHxcbiAgICAgICAgICAgIGtleSA9PT0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9OVF9GQU1JTFlfQk9EWV9CT0xEX1VSTF9LRVlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRUaGVtZVZhcmlhYmxlKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIGlmICh0aGVtZVZhcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoZW1lVmFyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZSh0aGVtZVZhcnMsIGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoZW1lVmFycyAmJiB0aGVtZVZhcnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgLy8gSWYgaXQncyByZWZlcmVuY2UgdG8gYW5vdGhlciBrZXkuXG4gICAgICAgICAgICBpZiAodGhlbWVWYXJzW2tleV0uaW5kZXhPZigndmFyKCcpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gdGhlbWVWYXJzW2tleV0uc3Vic3RyKDQpLnNwbGl0KCcpJylbMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IE51bWJlcihcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnNba2V5XS5yZXBsYWNlKFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlJFTV9TVFJJTkcsICcnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB0bXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9vdGVySGVpZ2h0KGhlaWdodCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb290ZXJIZWlnaHQuZ2V0VmFsdWUoKSAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBpdCBpcyBwdWJsaXNoaW5nIHRoaXMgdmFsdWUgdG8gYWxsIHRoZSBzdWJzY3JpYmVycyB0aGF0IGhhdmUgYWxyZWFkeSBzdWJzY3JpYmVkIHRvIHRoaXMgbWVzc2FnZVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJIZWlnaHQubmV4dChoZWlnaHQpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9PVEVSX0hFSUdIVF9LRVksXG4gICAgICAgICAgICBoZWlnaHQgKyBQZXBDdXN0b21pemF0aW9uU2VydmljZS5SRU1fU1RSSU5HXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaGlkZUZvb3RlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRGb290ZXJIZWlnaHQoMCk7XG4gICAgfVxuXG4gICAgc2hvd0Zvb3RlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9XG4gICAgICAgICAgICB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkZPT1RFUl9CQVJfU1BBQ0lOR19UT1BfS0VZXG4gICAgICAgICAgICApICtcbiAgICAgICAgICAgIHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuRk9PVEVSX0JBUl9TUEFDSU5HX0JPVFRPTV9LRVlcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX0ZJRUxEX0hFSUdIVF9LRVlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zZXRGb290ZXJIZWlnaHQocmVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNldHRpbmdzV2lkdGgod2lkdGgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NXaWR0aC5nZXRWYWx1ZSgpICE9PSB3aWR0aCkge1xuICAgICAgICAgICAgLy8gaXQgaXMgcHVibGlzaGluZyB0aGlzIHZhbHVlIHRvIGFsbCB0aGUgc3Vic2NyaWJlcnMgdGhhdCBoYXZlIGFscmVhZHkgc3Vic2NyaWJlZCB0byB0aGlzIG1lc3NhZ2VcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NXaWR0aC5uZXh0KHdpZHRoKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNFVFRJTkdTX1dJRFRIX0tFWSxcbiAgICAgICAgICAgIHdpZHRoICsgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuUkVNX1NUUklOR1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGhpZGVTZXR0aW5ncygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRTZXR0aW5nc1dpZHRoKDApO1xuICAgIH1cblxuICAgIHNob3dTZXR0aW5ncygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhlbWVWYXJzID0gdGhpcy5nZXRUaGVtZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlNJREVfQkFSX1dJRFRIX0tFWVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2V0U2V0dGluZ3NXaWR0aChyZXMpO1xuICAgIH1cblxuICAgIGdldFRvcEJhckhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB0aGVtZVZhcnMgPSB0aGlzLmdldFRoZW1lVmFyaWFibGVzKCk7XG5cbiAgICAgICAgY29uc3QgcmVzID1cbiAgICAgICAgICAgIHRoaXMuZ2V0TnVtYmVyVGhlbWVWYXJpYWJsZShcbiAgICAgICAgICAgICAgICB0aGVtZVZhcnMsXG4gICAgICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVE9QX0JBUl9TUEFDSU5HX1RPUF9LRVlcbiAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgdGhpcy5nZXROdW1iZXJUaGVtZVZhcmlhYmxlKFxuICAgICAgICAgICAgICAgIHRoZW1lVmFycyxcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5UT1BfQkFSX1NQQUNJTkdfQk9UVE9NX0tFWVxuICAgICAgICAgICAgKSArXG4gICAgICAgICAgICB0aGlzLmdldE51bWJlclRoZW1lVmFyaWFibGUoXG4gICAgICAgICAgICAgICAgdGhlbWVWYXJzLFxuICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLlRPUF9CQVJfRklFTERfSEVJR0hUX0tFWVxuICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHNldE9sZFVzZXJUaGVtZShyZXM6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBBZGRlZCB1c2VyIHRoZW1lLlxuICAgICAgICBjb25zdCB0aGVtZU9iaiA9IHtcbiAgICAgICAgICAgIFRoZW1lOiByZXMuVGhlbWUgfHwgJ2RlZmF1bHQtdGhlbWUnLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0T2JqZWN0KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9USEVNRSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoZW1lT2JqKVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBzcGlubmVyQ29sb3I7XG4gICAgICAgIGxldCBicmFuZGluZ0ZvbnRDb2xvcjtcblxuICAgICAgICBpZiAodGhpcy5pc0xpZ2h0Q29sb3IocmVzLkJyYW5kaW5nTWFpbkNvbG9yKSkge1xuICAgICAgICAgICAgc3Bpbm5lckNvbG9yID0gUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuREVGQVVMVF9TUElOTkVSX0NPTE9SO1xuICAgICAgICAgICAgYnJhbmRpbmdGb250Q29sb3IgPSAnIzIyMic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzcGlubmVyQ29sb3IgPSByZXMuQnJhbmRpbmdNYWluQ29sb3I7XG4gICAgICAgICAgICBicmFuZGluZ0ZvbnRDb2xvciA9IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfQlJBTkRJTkdfQ09MT1I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xvciA9IHtcbiAgICAgICAgICAgIEJyYW5kaW5nU2Vjb25kYXJ5Q29sb3I6IHJlcy5CcmFuZGluZ1NlY29uZGFyeUNvbG9yLFxuICAgICAgICAgICAgQnJhbmRpbmdNYWluQ29sb3I6IHJlcy5CcmFuZGluZ01haW5Db2xvcixcbiAgICAgICAgICAgIEJyYW5kaW5nRm9udENvbG9yOiBicmFuZGluZ0ZvbnRDb2xvcixcbiAgICAgICAgICAgIFNwaW5uZXJDb2xvcjogc3Bpbm5lckNvbG9yLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2Uuc2V0T2JqZWN0KFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuVVNFUl9DT0xPUixcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNvbG9yKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tSGVhZGVyID1cbiAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlcyAmJlxuICAgICAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcmVzLlRvcEhlYWRlckZpbGVzWzBdICE9PSAnJ1xuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzQ3VzdG9tSG9tZXBhZ2UgPVxuICAgICAgICAgICAgcmVzLlVzZXJSb2xlID09PSAnQnV5ZXInICYmXG4gICAgICAgICAgICByZXMuVG9wSGVhZGVyRmlsZXMgJiZcbiAgICAgICAgICAgIHJlcy5Ub3BIZWFkZXJGaWxlcy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICByZXMuVG9wSGVhZGVyRmlsZXNbMV0gIT09ICcnO1xuICAgIH1cblxuICAgIGlzTGVnYWN5Q29sb3IoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkNPTE9SX1RPUF9IRUFERVJfS0VZICsgJy1oJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoXG4gICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5DT0xPUl9UT1BfSEVBREVSX0tFWSArICctcydcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgICAgICAgUGVwQ3VzdG9taXphdGlvblNlcnZpY2UuQ09MT1JfVE9QX0hFQURFUl9LRVkgKyAnLWwnXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuICEoaCAmJiBzICYmIGwpO1xuICAgIH1cblxuICAgIGdldExvYWRpbmdTcGlubmVyQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHNwaW5uZXJDb2xvciA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q29sb3IoKSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldE9iamVjdChcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX0NPTE9SXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoY29sb3IgJiYgY29sb3IuU3Bpbm5lckNvbG9yKSB7XG4gICAgICAgICAgICAgICAgc3Bpbm5lckNvbG9yID0gY29sb3IuU3Bpbm5lckNvbG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGlubmVyQ29sb3IgPSBQZXBDdXN0b21pemF0aW9uU2VydmljZS5ERUZBVUxUX1NQSU5ORVJfQ09MT1I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3Bpbm5lckNvbG9yO1xuICAgIH1cblxuICAgIGdldEJyYW5kaW5nTWFpbkNvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCBicmFuZGluZ01haW5Db2xvciA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTGVnYWN5Q29sb3IoKSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldE9iamVjdChcbiAgICAgICAgICAgICAgICBQZXBDdXN0b21pemF0aW9uU2VydmljZS5VU0VSX0NPTE9SXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoY29sb3IgJiYgY29sb3IuQnJhbmRpbmdNYWluQ29sb3IpIHtcbiAgICAgICAgICAgICAgICBicmFuZGluZ01haW5Db2xvciA9IGNvbG9yLkJyYW5kaW5nTWFpbkNvbG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmFuZGluZ01haW5Db2xvciA9XG4gICAgICAgICAgICAgICAgICAgIFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLkRFRkFVTFRfQlJBTkRJTkdfQ09MT1I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnJhbmRpbmdNYWluQ29sb3I7XG4gICAgfVxuXG4gICAgaXNMaWdodENvbG9yKGhleENvbG9yKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghaGV4Q29sb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc0JyaWdodCA9IGZhbHNlO1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgY29uc3QgYyA9IGhleENvbG9yLnJlcGxhY2UoL14jLywgJycpO1xuXG4gICAgICAgIHN1bSA9IHBhcnNlSW50KGNbMF0gKyBjWzFdLCAxNik7XG4gICAgICAgIHN1bSArPSBwYXJzZUludChjWzJdICsgY1szXSwgMTYpO1xuICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY1s0XSArIGNbNV0sIDE2KTtcblxuICAgICAgICBpZiAoc3VtID4gMzgyLjYpIHtcbiAgICAgICAgICAgIC8vIGl0J3MgYnJpZ2h0IGNvbG9yXG4gICAgICAgICAgICBpc0JyaWdodCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNCcmlnaHQ7XG4gICAgfVxufVxuIl19
@@ -152,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
152
152
  providedIn: 'root',
153
153
  }]
154
154
  }], ctorParameters: function () { return [{ type: i1.PepSessionService }, { type: i2.PepCookieService }, { type: i3.HttpClient }]; } });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9odHRwL3NlcnZpY2VzL2h0dHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFJSCxXQUFXLEdBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBUyxVQUFVLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPeEQsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFDWSxjQUFpQyxFQUNqQyxhQUErQixFQUMvQixJQUFnQjtRQUZoQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQVk7UUFSWCxnQkFBVyxHQUFHLGVBQWUsQ0FBQztRQUM5Qix5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztRQUM3QyxtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztJQU0zRCxDQUFDO0lBRUksV0FBVyxDQUFDLFFBQTJCO1FBQzNDLElBQUksWUFBWSxHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLElBQUksUUFBUSxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDdEMscUJBQXFCO1lBQ3JCLFlBQVksR0FBRyxVQUFVLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckQ7YUFBTTtZQUNILHFCQUFxQjtZQUNyQixZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVP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QUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBIdHRwQ2xpZW50LFxuICAgIEh0dHBFcnJvclJlc3BvbnNlLFxuICAgIEh0dHBQYXJhbXMsXG4gICAgSHR0cEhlYWRlcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRocm93RXJyb3IsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHJldHJ5LCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQZXBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVwQ29va2llU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9jb29raWUuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEh0dHBTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IEFVVEhfSEVBREVSID0gJ0F1dGhvcml6YXRpb24nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUEVQUEVSSV9UT0tFTl9IRUFERVIgPSAnUGVwcGVyaVNlc3Npb25Ub2tlbic7XG4gICAgcHJpdmF0ZSByZWFkb25seSBXQVBJX1RPS0VOX0tFWSA9ICdhdXRoX3Rva2VuJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFBFUFBFUklfVE9LRU5fQ09PS0lFID0gJ1BlcHBlcmlVc2VyU2V0dGluZ3MnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFBlcFNlc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IFBlcENvb2tpZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICAgICkge31cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3IocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ1Vua25vd24gZXJyb3IhJztcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xuICAgICAgICAgICAgLy8gQ2xpZW50LXNpZGUgZXJyb3JzXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRXJyb3I6ICR7cmVzcG9uc2UuZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2VydmVyLXNpZGUgZXJyb3JzXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB0aGlzLmdldFNlcnZlckVycm9yTWVzc2FnZShyZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3I/LmZhdWx0Py5mYXVsdHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Jlc3BvbnNlLmVycm9yLmZhdWx0LmZhdWx0c3RyaW5nfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgNDA0OiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTm90IEZvdW5kOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0MDM6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBBY2Nlc3MgRGVuaWVkOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1MDA6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3I6ICR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVW5rbm93biBTZXJ2ZXIgRXJyb3JcXG5FcnJvciBDb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31cXG5NZXNzYWdlOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYXV0aG9yaXphdGlvbiB0b2tlbiBpZiB0aGUgdG9rZW4gZXhpc3QuXG4gICAgcHJpdmF0ZSBhZGRBdXRob3JpemF0aW9uVG9rZW4oaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzLmhhcyh0aGlzLkFVVEhfSEVBREVSKSkge1xuICAgICAgICAgICAgY29uc3QgaWRwVG9rZW4gPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldElkcFRva2VuKCk7XG5cbiAgICAgICAgICAgIGlmIChpZHBUb2tlbikge1xuICAgICAgICAgICAgICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBodHRwT3B0aW9ucy5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5BVVRIX0hFQURFUixcbiAgICAgICAgICAgICAgICAgICAgYEJlYXJlciAke2lkcFRva2VufWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0dHBPcHRpb25zO1xuICAgIH1cblxuICAgIC8vIEFkZCB3ZWIgYXBpIHRva2VuIGlmIGNhbGxpbmcgdG8gd2FwaSBkb21haW4uXG4gICAgcHJpdmF0ZSBhZGRXZWJBcGlUb2tlbih1cmw6IHN0cmluZywgaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzLmhhcyh0aGlzLlBFUFBFUklfVE9LRU5fSEVBREVSKSkge1xuICAgICAgICAgICAgY29uc3Qgd2FwaUJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFdhcGlCYXNlVXJsKCk7XG5cbiAgICAgICAgICAgIGlmICh3YXBpQmFzZVVybCAmJiB1cmwubWF0Y2gobmV3IFJlZ0V4cCh3YXBpQmFzZVVybCwgJ2cnKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOlxuICAgICAgICAgICAgICAgIC8vIGNvbnN0IHdlYkFwaVRva2VuID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRXYXBpVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyU2V0dGluZ0Nvb2tpZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlBFUFBFUklfVE9LRU5fQ09PS0lFXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdlYkFwaVRva2VuID0gSlNPTi5wYXJzZSh1c2VyU2V0dGluZ0Nvb2tpZSkudmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAuaXRlbXNbdGhpcy5XQVBJX1RPS0VOX0tFWV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh3ZWJBcGlUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IGh0dHBPcHRpb25zLmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUEVQUEVSSV9UT0tFTl9IRUFERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViQXBpVG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaHR0cE9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0SGVhZGVyT3B0aW9ucyh1cmw6IHN0cmluZywgaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgY29udGVudCB0eXBlXG4gICAgICAgIGlmICghaHR0cE9wdGlvbnMuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICAgICAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gaHR0cE9wdGlvbnMuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaHR0cE9wdGlvbnMgPSB0aGlzLmFkZEF1dGhvcml6YXRpb25Ub2tlbihodHRwT3B0aW9ucyk7XG4gICAgICAgIGh0dHBPcHRpb25zID0gdGhpcy5hZGRXZWJBcGlUb2tlbih1cmwsIGh0dHBPcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gaHR0cE9wdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gZ2V0VGV4dEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vICAgICAvLyBUaGUgT2JzZXJ2YWJsZSByZXR1cm5lZCBieSBnZXQoKSBpcyBvZiB0eXBlIE9ic2VydmFibGU8c3RyaW5nPlxuICAgIC8vICAgICAvLyBiZWNhdXNlIGEgdGV4dCByZXNwb25zZSB3YXMgc3BlY2lmaWVkLlxuICAgIC8vICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gcGFzcyBhIDxzdHJpbmc+IHR5cGUgcGFyYW1ldGVyIHRvIGdldCgpLlxuICAgIC8vICAgICAvLyByZXR1cm4gdGhpcy5odHRwLmdldChmaWxlbmFtZSwge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcbiAgICAvLyAgICAgLy8gICAgIC5waXBlKFxuICAgIC8vICAgICAvLyAgICAgICAgIHRhcCggLy8gTG9nIHRoZSByZXN1bHQgb3IgZXJyb3JcbiAgICAvLyAgICAgLy8gICAgICAgICBkYXRhID0+IHRoaXMubG9nKGZpbGVuYW1lLCBkYXRhKSxcbiAgICAvLyAgICAgLy8gICAgICAgICBlcnJvciA9PiB0aGlzLmxvZ0Vycm9yKGZpbGVuYW1lLCBlcnJvcilcbiAgICAvLyAgICAgLy8gICAgICAgICApXG4gICAgLy8gICAgIC8vICk7XG4gICAgLy8gfVxuXG4gICAgZ2V0SHR0cENhbGwodXJsOiBzdHJpbmcsIGh0dHBPcHRpb25zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGh0dHBPcHRpb25zID0gdGhpcy5zZXREZWZhdWx0SGVhZGVyT3B0aW9ucyh1cmwsIGh0dHBPcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0KHVybCwgaHR0cE9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKSkpO1xuICAgICAgICAvLyAgICAgLnN1YnNjcmliZShcbiAgICAgICAgLy8gICAgICAgICAocmVzKSA9PiBjb25zb2xlLmxvZygnJyksXG4gICAgICAgIC8vICAgICAgICAgKGVycm9yKSA9PiBjb25zb2xlLmxvZygnJyksXG4gICAgICAgIC8vICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgLy8gKTtcbiAgICB9XG5cbiAgICBwb3N0SHR0cENhbGwoXG4gICAgICAgIHVybDogc3RyaW5nLFxuICAgICAgICBib2R5OiBhbnkgfCBudWxsLFxuICAgICAgICBodHRwT3B0aW9uczogYW55ID0ge31cbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBodHRwT3B0aW9ucyA9IHRoaXMuc2V0RGVmYXVsdEhlYWRlck9wdGlvbnModXJsLCBodHRwT3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3QodXJsLCBib2R5LCBodHRwT3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIC8vICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAvLyAgICAgICAgIChyZXMpID0+IGNvbnNvbGUubG9nKCcnKSxcbiAgICAgICAgLy8gICAgICAgICAoZXJyb3IpID0+IGNvbnNvbGUubG9nKCcnKSxcbiAgICAgICAgLy8gICAgICAgICAoKSA9PiB7fVxuICAgICAgICAvLyApO1xuICAgIH1cblxuICAgIGdldFdhcGlBcGlDYWxsKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB3YXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0V2FwaUJhc2VVcmwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHR0cENhbGwoYCR7d2FwaUJhc2VVcmx9JHt1cmx9YCwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHBvc3RXYXBpQXBpQ2FsbChcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGJvZHk6IGFueSB8IG51bGwsXG4gICAgICAgIGh0dHBPcHRpb25zOiBhbnkgPSB7fVxuICAgICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHdhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRXYXBpQmFzZVVybCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0SHR0cENhbGwoYCR7d2FwaUJhc2VVcmx9JHt1cmx9YCwgYm9keSwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldFBhcGlBcGlDYWxsKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBwYXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0UGFwaUJhc2VVcmwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHR0cENhbGwoYCR7cGFwaUJhc2VVcmx9JHt1cmx9YCwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHBvc3RQYXBpQXBpQ2FsbChcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGJvZHk6IGFueSB8IG51bGwsXG4gICAgICAgIGh0dHBPcHRpb25zOiBhbnkgPSB7fVxuICAgICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHBhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRQYXBpQmFzZVVybCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0SHR0cENhbGwoYCR7cGFwaUJhc2VVcmx9JHt1cmx9YCwgYm9keSwgaHR0cE9wdGlvbnMpO1xuICAgIH1cbn1cbiJdfQ==
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9odHRwL3NlcnZpY2VzL2h0dHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFJSCxXQUFXLEdBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBUyxVQUFVLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPeEQsTUFBTSxPQUFPLGNBQWM7SUFNdkIsWUFDWSxjQUFpQyxFQUNqQyxhQUErQixFQUMvQixJQUFnQjtRQUZoQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFNBQUksR0FBSixJQUFJLENBQVk7UUFSWCxnQkFBVyxHQUFHLGVBQWUsQ0FBQztRQUM5Qix5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztRQUM3QyxtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUM5Qix5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztJQU0zRCxDQUFDO0lBRUksV0FBVyxDQUFDLFFBQTJCO1FBQzNDLElBQUksWUFBWSxHQUFHLGdCQUFnQixDQUFDO1FBQ3BDLElBQUksUUFBUSxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDdEMscUJBQXFCO1lBQ3JCLFlBQVksR0FBRyxVQUFVLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckQ7YUFBTTtZQUNILHFCQUFxQjtZQUNyQixZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVP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QUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBIdHRwQ2xpZW50LFxuICAgIEh0dHBFcnJvclJlc3BvbnNlLFxuICAgIEh0dHBQYXJhbXMsXG4gICAgSHR0cEhlYWRlcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRocm93RXJyb3IsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHJldHJ5LCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQZXBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9zZXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVwQ29va2llU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9zZXJ2aWNlcy9jb29raWUuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcEh0dHBTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IEFVVEhfSEVBREVSID0gJ0F1dGhvcml6YXRpb24nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUEVQUEVSSV9UT0tFTl9IRUFERVIgPSAnUGVwcGVyaVNlc3Npb25Ub2tlbic7XG4gICAgcHJpdmF0ZSByZWFkb25seSBXQVBJX1RPS0VOX0tFWSA9ICdhdXRoX3Rva2VuJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IFBFUFBFUklfVE9LRU5fQ09PS0lFID0gJ1BlcHBlcmlVc2VyU2V0dGluZ3MnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFBlcFNlc3Npb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IFBlcENvb2tpZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICAgICkge31cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3IocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJ1Vua25vd24gZXJyb3IhJztcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xuICAgICAgICAgICAgLy8gQ2xpZW50LXNpZGUgZXJyb3JzXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBgRXJyb3I6ICR7cmVzcG9uc2UuZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2VydmVyLXNpZGUgZXJyb3JzXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB0aGlzLmdldFNlcnZlckVycm9yTWVzc2FnZShyZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uZXJyb3I/LmZhdWx0Py5mYXVsdHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGAke3Jlc3BvbnNlLmVycm9yLmZhdWx0LmZhdWx0c3RyaW5nfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgIGNhc2UgNDA0OiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTm90IEZvdW5kOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA0MDM6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBBY2Nlc3MgRGVuaWVkOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSA1MDA6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3I6ICR7cmVzcG9uc2UubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVW5rbm93biBTZXJ2ZXIgRXJyb3JcXG5FcnJvciBDb2RlOiAke3Jlc3BvbnNlLnN0YXR1c31cXG5NZXNzYWdlOiAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYXV0aG9yaXphdGlvbiB0b2tlbiBpZiB0aGUgdG9rZW4gZXhpc3QuXG4gICAgcHJpdmF0ZSBhZGRBdXRob3JpemF0aW9uVG9rZW4oaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzLmhhcyh0aGlzLkFVVEhfSEVBREVSKSkge1xuICAgICAgICAgICAgY29uc3QgaWRwVG9rZW4gPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldElkcFRva2VuKCk7XG5cbiAgICAgICAgICAgIGlmIChpZHBUb2tlbikge1xuICAgICAgICAgICAgICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBodHRwT3B0aW9ucy5oZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5BVVRIX0hFQURFUixcbiAgICAgICAgICAgICAgICAgICAgYEJlYXJlciAke2lkcFRva2VufWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0dHBPcHRpb25zO1xuICAgIH1cblxuICAgIC8vIEFkZCB3ZWIgYXBpIHRva2VuIGlmIGNhbGxpbmcgdG8gd2FwaSBkb21haW4uXG4gICAgcHJpdmF0ZSBhZGRXZWJBcGlUb2tlbih1cmw6IHN0cmluZywgaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzLmhhcyh0aGlzLlBFUFBFUklfVE9LRU5fSEVBREVSKSkge1xuICAgICAgICAgICAgY29uc3Qgd2FwaUJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldFdhcGlCYXNlVXJsKCk7XG5cbiAgICAgICAgICAgIGlmICh3YXBpQmFzZVVybCAmJiB1cmwubWF0Y2gobmV3IFJlZ0V4cCh3YXBpQmFzZVVybCwgJ2cnKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOlxuICAgICAgICAgICAgICAgIC8vIGNvbnN0IHdlYkFwaVRva2VuID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRXYXBpVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyU2V0dGluZ0Nvb2tpZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlBFUFBFUklfVE9LRU5fQ09PS0lFXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdlYkFwaVRva2VuID0gSlNPTi5wYXJzZSh1c2VyU2V0dGluZ0Nvb2tpZSkudmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAuaXRlbXNbdGhpcy5XQVBJX1RPS0VOX0tFWV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh3ZWJBcGlUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IGh0dHBPcHRpb25zLmhlYWRlcnMuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUEVQUEVSSV9UT0tFTl9IRUFERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViQXBpVG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaHR0cE9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0SGVhZGVyT3B0aW9ucyh1cmw6IHN0cmluZywgaHR0cE9wdGlvbnM6IGFueSA9IHt9KTogYW55IHtcbiAgICAgICAgaWYgKCFodHRwT3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgY29udGVudCB0eXBlXG4gICAgICAgIGlmICghaHR0cE9wdGlvbnMuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpKSB7XG4gICAgICAgICAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gaHR0cE9wdGlvbnMuaGVhZGVycy5zZXQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaHR0cE9wdGlvbnMgPSB0aGlzLmFkZEF1dGhvcml6YXRpb25Ub2tlbihodHRwT3B0aW9ucyk7XG4gICAgICAgIGh0dHBPcHRpb25zID0gdGhpcy5hZGRXZWJBcGlUb2tlbih1cmwsIGh0dHBPcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gaHR0cE9wdGlvbnM7XG4gICAgfVxuXG4gICAgLy8gZ2V0VGV4dEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vICAgICAvLyBUaGUgT2JzZXJ2YWJsZSByZXR1cm5lZCBieSBnZXQoKSBpcyBvZiB0eXBlIE9ic2VydmFibGU8c3RyaW5nPlxuICAgIC8vICAgICAvLyBiZWNhdXNlIGEgdGV4dCByZXNwb25zZSB3YXMgc3BlY2lmaWVkLlxuICAgIC8vICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gcGFzcyBhIDxzdHJpbmc+IHR5cGUgcGFyYW1ldGVyIHRvIGdldCgpLlxuICAgIC8vICAgICAvLyByZXR1cm4gdGhpcy5odHRwLmdldChmaWxlbmFtZSwge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcbiAgICAvLyAgICAgLy8gICAgIC5waXBlKFxuICAgIC8vICAgICAvLyAgICAgICAgIHRhcCggLy8gTG9nIHRoZSByZXN1bHQgb3IgZXJyb3JcbiAgICAvLyAgICAgLy8gICAgICAgICBkYXRhID0+IHRoaXMubG9nKGZpbGVuYW1lLCBkYXRhKSxcbiAgICAvLyAgICAgLy8gICAgICAgICBlcnJvciA9PiB0aGlzLmxvZ0Vycm9yKGZpbGVuYW1lLCBlcnJvcilcbiAgICAvLyAgICAgLy8gICAgICAgICApXG4gICAgLy8gICAgIC8vICk7XG4gICAgLy8gfVxuXG4gICAgZ2V0SHR0cENhbGwodXJsOiBzdHJpbmcsIGh0dHBPcHRpb25zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGh0dHBPcHRpb25zID0gdGhpcy5zZXREZWZhdWx0SGVhZGVyT3B0aW9ucyh1cmwsIGh0dHBPcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0KHVybCwgaHR0cE9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKSkpO1xuICAgICAgICAvLyAgICAgLnN1YnNjcmliZShcbiAgICAgICAgLy8gICAgICAgICAocmVzKSA9PiBjb25zb2xlLmxvZygnJyksXG4gICAgICAgIC8vICAgICAgICAgKGVycm9yKSA9PiBjb25zb2xlLmxvZygnJyksXG4gICAgICAgIC8vICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgLy8gKTtcbiAgICB9XG5cbiAgICBwb3N0SHR0cENhbGwoXG4gICAgICAgIHVybDogc3RyaW5nLFxuICAgICAgICBib2R5OiBhbnkgfCBudWxsLFxuICAgICAgICBodHRwT3B0aW9uczogYW55ID0ge31cbiAgICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBodHRwT3B0aW9ucyA9IHRoaXMuc2V0RGVmYXVsdEhlYWRlck9wdGlvbnModXJsLCBodHRwT3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3QodXJsLCBib2R5LCBodHRwT3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIC8vICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAvLyAgICAgICAgIChyZXMpID0+IGNvbnNvbGUubG9nKCcnKSxcbiAgICAgICAgLy8gICAgICAgICAoZXJyb3IpID0+IGNvbnNvbGUubG9nKCcnKSxcbiAgICAgICAgLy8gICAgICAgICAoKSA9PiB7fVxuICAgICAgICAvLyApO1xuICAgIH1cblxuICAgIGdldFdhcGlBcGlDYWxsKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCB3YXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0V2FwaUJhc2VVcmwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHR0cENhbGwoYCR7d2FwaUJhc2VVcmx9JHt1cmx9YCwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHBvc3RXYXBpQXBpQ2FsbChcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGJvZHk6IGFueSB8IG51bGwsXG4gICAgICAgIGh0dHBPcHRpb25zOiBhbnkgPSB7fVxuICAgICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHdhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRXYXBpQmFzZVVybCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0SHR0cENhbGwoYCR7d2FwaUJhc2VVcmx9JHt1cmx9YCwgYm9keSwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldFBhcGlBcGlDYWxsKHVybDogc3RyaW5nLCBodHRwT3B0aW9uczogYW55ID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBjb25zdCBwYXBpQmFzZVVybCA9IHRoaXMuc2Vzc2lvblNlcnZpY2UuZ2V0UGFwaUJhc2VVcmwoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHR0cENhbGwoYCR7cGFwaUJhc2VVcmx9JHt1cmx9YCwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHBvc3RQYXBpQXBpQ2FsbChcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGJvZHk6IGFueSB8IG51bGwsXG4gICAgICAgIGh0dHBPcHRpb25zOiBhbnkgPSB7fVxuICAgICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIGNvbnN0IHBhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRQYXBpQmFzZVVybCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0SHR0cENhbGwoYCR7cGFwaUJhc2VVcmx9JHt1cmx9YCwgYm9keSwgaHR0cE9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIGdldEFwaUNhbGwodXJsOiBzdHJpbmcsIGh0dHBPcHRpb25zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgLy8gICAgIGNvbnN0IGFwaUJhc2VVcmwgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLmdldEFwaUJhc2VVcmwoKTtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0SHR0cENhbGwoYCR7YXBpQmFzZVVybH0ke3VybH1gLCBodHRwT3B0aW9ucyk7XG4gICAgLy8gfVxuXG4gICAgLy8gcG9zdEFwaUNhbGwoXG4gICAgLy8gICAgIHVybDogc3RyaW5nLFxuICAgIC8vICAgICBib2R5OiBhbnkgfCBudWxsLFxuICAgIC8vICAgICBodHRwT3B0aW9uczogYW55ID0ge31cbiAgICAvLyApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vICAgICBjb25zdCBhcGlCYXNlVXJsID0gdGhpcy5zZXNzaW9uU2VydmljZS5nZXRBcGlCYXNlVXJsKCk7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLnBvc3RIdHRwQ2FsbChgJHthcGlCYXNlVXJsfSR7dXJsfWAsIGJvZHksIGh0dHBPcHRpb25zKTtcbiAgICAvLyB9XG59XG4iXX0=
@@ -18,10 +18,10 @@ export class PepDialogComponent {
18
18
  }
19
19
  }
20
20
  PepDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- PepDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepDialogComponent, selector: "pep-dialog", inputs: { title: "title", showClose: "showClose", showHeader: "showHeader", showFooter: "showFooter" }, outputs: { close: "close" }, ngImport: i0, template: "<div mat-dialog-title *ngIf=\"showHeader\" class=\"dialog-header-container\">\n <span class=\"dialog-title\" *ngIf=\"title?.length\">\n {{ title }}\n </span>\n <button mat-button *ngIf=\"showClose\" (click)=\"closeDialog()\" class=\"pep-button icon-button md weak dialog-close\">\n <mat-icon>\n <pep-icon name=\"system_close\">\n </pep-icon>\n </mat-icon>\n </button>\n</div>\n<div mat-dialog-content>\n <ng-content select=\"[pep-dialog-content]\"></ng-content>\n</div>\n<div mat-dialog-actions *ngIf=\"showFooter\" class=\"pep-border-top\">\n <ng-content select=\"[pep-dialog-actions]\"></ng-content>\n</div>", styles: ["", ".pepperi-dialog,.pep-dialog{box-shadow:var(--pep-shadow-sm-offset, 0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.32)!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }] });
21
+ PepDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepDialogComponent, selector: "pep-dialog", inputs: { title: "title", showClose: "showClose", showHeader: "showHeader", showFooter: "showFooter" }, outputs: { close: "close" }, ngImport: i0, template: "<div> <!-- This div is for the css grid rows -->\n <div mat-dialog-title *ngIf=\"showHeader\" class=\"dialog-header-container\">\n <span class=\"dialog-title\" *ngIf=\"title?.length\">\n {{ title }}\n </span>\n <button mat-button *ngIf=\"showClose\" (click)=\"closeDialog()\" class=\"pep-button icon-button md weak dialog-close\">\n <mat-icon>\n <pep-icon name=\"system_close\">\n </pep-icon>\n </mat-icon>\n </button>\n </div>\n</div>\n<div mat-dialog-content>\n <ng-content select=\"[pep-dialog-content]\"></ng-content>\n</div>\n<div> <!-- This div is for the css grid rows -->\n <div mat-dialog-actions *ngIf=\"showFooter\" class=\"pep-border-top\">\n <ng-content select=\"[pep-dialog-actions]\"></ng-content>\n </div>\n</div>", styles: [":host{height:100%;display:grid;grid-auto-rows:auto 1fr auto}\n", ".pepperi-dialog,.pep-dialog{box-shadow:var(--pep-shadow-sm-offset, 0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.32)!important}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i5.PepIconComponent, selector: "pep-icon", inputs: ["spin", "name", "fill"] }] });
22
22
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepDialogComponent, decorators: [{
23
23
  type: Component,
24
- args: [{ selector: 'pep-dialog', template: "<div mat-dialog-title *ngIf=\"showHeader\" class=\"dialog-header-container\">\n <span class=\"dialog-title\" *ngIf=\"title?.length\">\n {{ title }}\n </span>\n <button mat-button *ngIf=\"showClose\" (click)=\"closeDialog()\" class=\"pep-button icon-button md weak dialog-close\">\n <mat-icon>\n <pep-icon name=\"system_close\">\n </pep-icon>\n </mat-icon>\n </button>\n</div>\n<div mat-dialog-content>\n <ng-content select=\"[pep-dialog-content]\"></ng-content>\n</div>\n<div mat-dialog-actions *ngIf=\"showFooter\" class=\"pep-border-top\">\n <ng-content select=\"[pep-dialog-actions]\"></ng-content>\n</div>", styles: [".pepperi-dialog,.pep-dialog{box-shadow:var(--pep-shadow-sm-offset, 0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.32)!important}\n"] }]
24
+ args: [{ selector: 'pep-dialog', template: "<div> <!-- This div is for the css grid rows -->\n <div mat-dialog-title *ngIf=\"showHeader\" class=\"dialog-header-container\">\n <span class=\"dialog-title\" *ngIf=\"title?.length\">\n {{ title }}\n </span>\n <button mat-button *ngIf=\"showClose\" (click)=\"closeDialog()\" class=\"pep-button icon-button md weak dialog-close\">\n <mat-icon>\n <pep-icon name=\"system_close\">\n </pep-icon>\n </mat-icon>\n </button>\n </div>\n</div>\n<div mat-dialog-content>\n <ng-content select=\"[pep-dialog-content]\"></ng-content>\n</div>\n<div> <!-- This div is for the css grid rows -->\n <div mat-dialog-actions *ngIf=\"showFooter\" class=\"pep-border-top\">\n <ng-content select=\"[pep-dialog-actions]\"></ng-content>\n </div>\n</div>", styles: [":host{height:100%;display:grid;grid-auto-rows:auto 1fr auto}\n", ".pepperi-dialog,.pep-dialog{box-shadow:var(--pep-shadow-sm-offset, 0 .25rem .5rem 0) hsla(var(--pep-color-system-primary-h, 0),var(--pep-color-system-primary-s, 0%),var(--pep-color-system-primary-l, 10%),.32)!important}\n"] }]
25
25
  }], ctorParameters: function () { return []; }, propDecorators: { title: [{
26
26
  type: Input
27
27
  }], showClose: [{
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
33
33
  }], close: [{
34
34
  type: Output
35
35
  }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQU92RSxNQUFNLE9BQU8sa0JBQWtCO0lBUTNCO1FBTlMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFakIsVUFBSyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBR3pELEVBQUU7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7OytHQWRRLGtCQUFrQjttR0FBbEIsa0JBQWtCLHVMQ1AvQixncUJBZ0JNOzJGRFRPLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZOzBFQUtiLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1kaWFsb2cnLFxuICAgIHN0eWxlVXJsczogWycuL2RpYWxvZy5jb21wb25lbnQuc2NzcycsICcuL2RpYWxvZy5jb21wb25lbnQudGhlbWUuc2NzcyddLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBEaWFsb2dDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvd0Nsb3NlID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0hlYWRlciA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0Zvb3RlciA9IHRydWU7XG5cbiAgICBAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgXG4gICAgY2xvc2VEaWFsb2coKSB7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdChudWxsKTtcbiAgICB9XG59XG4iLCI8ZGl2IG1hdC1kaWFsb2ctdGl0bGUgKm5nSWY9XCJzaG93SGVhZGVyXCIgY2xhc3M9XCJkaWFsb2ctaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGlhbG9nLXRpdGxlXCIgKm5nSWY9XCJ0aXRsZT8ubGVuZ3RoXCI+XG4gICAgICAgIHt7IHRpdGxlIH19XG4gICAgPC9zcGFuPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdJZj1cInNob3dDbG9zZVwiIChjbGljayk9XCJjbG9zZURpYWxvZygpXCIgY2xhc3M9XCJwZXAtYnV0dG9uIGljb24tYnV0dG9uIG1kIHdlYWsgZGlhbG9nLWNsb3NlXCI+XG4gICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwic3lzdGVtX2Nsb3NlXCI+XG4gICAgICAgICAgICA8L3BlcC1pY29uPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcGVwLWRpYWxvZy1jb250ZW50XVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgKm5nSWY9XCJzaG93Rm9vdGVyXCIgY2xhc3M9XCJwZXAtYm9yZGVyLXRvcFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltwZXAtZGlhbG9nLWFjdGlvbnNdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+Il19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQU92RSxNQUFNLE9BQU8sa0JBQWtCO0lBUTNCO1FBTlMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFFakIsVUFBSyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBR3pELEVBQUU7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7OytHQWRRLGtCQUFrQjttR0FBbEIsa0JBQWtCLHVMQ1AvQiw0MEJBb0JNOzJGRGJPLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZOzBFQUtiLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1kaWFsb2cnLFxuICAgIHN0eWxlVXJsczogWycuL2RpYWxvZy5jb21wb25lbnQuc2NzcycsICcuL2RpYWxvZy5jb21wb25lbnQudGhlbWUuc2NzcyddLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBEaWFsb2dDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvd0Nsb3NlID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0hlYWRlciA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0Zvb3RlciA9IHRydWU7XG5cbiAgICBAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgXG4gICAgY2xvc2VEaWFsb2coKSB7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdChudWxsKTtcbiAgICB9XG59XG4iLCI8ZGl2PiA8IS0tIFRoaXMgZGl2IGlzIGZvciB0aGUgY3NzIGdyaWQgcm93cyAtLT5cbiAgICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGUgKm5nSWY9XCJzaG93SGVhZGVyXCIgY2xhc3M9XCJkaWFsb2ctaGVhZGVyLWNvbnRhaW5lclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpYWxvZy10aXRsZVwiICpuZ0lmPVwidGl0bGU/Lmxlbmd0aFwiPlxuICAgICAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCJzaG93Q2xvc2VcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiIGNsYXNzPVwicGVwLWJ1dHRvbiBpY29uLWJ1dHRvbiBtZCB3ZWFrIGRpYWxvZy1jbG9zZVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxwZXAtaWNvbiBuYW1lPVwic3lzdGVtX2Nsb3NlXCI+XG4gICAgICAgICAgICAgICAgPC9wZXAtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcGVwLWRpYWxvZy1jb250ZW50XVwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuPGRpdj4gPCEtLSBUaGlzIGRpdiBpcyBmb3IgdGhlIGNzcyBncmlkIHJvd3MgLS0+XG4gICAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgKm5nSWY9XCJzaG93Rm9vdGVyXCIgY2xhc3M9XCJwZXAtYm9yZGVyLXRvcFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcGVwLWRpYWxvZy1hY3Rpb25zXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==