ng-tailwind 6.0.1 → 6.0.2

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 (165) hide show
  1. package/components/ngt-action/ngt-action.component.d.ts +1 -1
  2. package/components/ngt-button/ngt-button.component.d.ts +1 -1
  3. package/components/ngt-checkbox/ngt-checkbox.component.d.ts +1 -1
  4. package/components/ngt-content/ngt-content.component.d.ts +1 -1
  5. package/components/ngt-context-menu/ngt-context-menu.directive.d.ts +1 -1
  6. package/components/ngt-datatable/ngt-datatable.component.d.ts +1 -1
  7. package/components/ngt-datatable/ngt-td-check/ngt-td-check.component.d.ts +1 -1
  8. package/components/ngt-datatable/ngt-th/ngt-th.component.d.ts +1 -1
  9. package/components/ngt-datatable/ngt-tr/ngt-tr.component.d.ts +1 -1
  10. package/components/ngt-date/ngt-date.component.d.ts +3 -6
  11. package/components/ngt-date/ngt-date.module.d.ts +4 -5
  12. package/components/ngt-dropdown/ngt-dropdown.component.d.ts +1 -1
  13. package/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.d.ts +1 -3
  14. package/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.d.ts +1 -1
  15. package/components/ngt-dropzone/ngt-dropzone.component.d.ts +1 -1
  16. package/components/ngt-dropzone/ngt-dropzone.module.d.ts +2 -3
  17. package/components/ngt-floating-button/ngt-floating-button.component.d.ts +1 -1
  18. package/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.d.ts +1 -1
  19. package/components/ngt-form/ngt-form.component.d.ts +1 -1
  20. package/components/ngt-header-nav/ngt-header-nav.component.d.ts +1 -1
  21. package/components/ngt-helper/ngt-helper.component.d.ts +1 -1
  22. package/components/ngt-input/ngt-input.component.d.ts +1 -1
  23. package/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.d.ts +1 -1
  24. package/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.d.ts +1 -1
  25. package/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.d.ts +1 -1
  26. package/components/ngt-modal/ngt-modal.component.d.ts +1 -1
  27. package/components/ngt-multi-select/ngt-multi-select.component.d.ts +1 -1
  28. package/components/ngt-pagination/ngt-pagination.component.d.ts +1 -1
  29. package/components/ngt-popover/ngt-popover.component.d.ts +1 -1
  30. package/components/ngt-popover/ngt-popover.directive.d.ts +1 -1
  31. package/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.d.ts +1 -1
  32. package/components/ngt-portlet/ngt-portlet.component.d.ts +1 -1
  33. package/components/ngt-radio-button/ngt-radio-button.component.d.ts +1 -1
  34. package/components/ngt-section/ngt-section.component.d.ts +1 -1
  35. package/components/ngt-select/ngt-select.component.d.ts +1 -1
  36. package/components/ngt-shining/ngt-shining.component.d.ts +1 -1
  37. package/components/ngt-sidenav/ngt-sidenav.component.d.ts +1 -1
  38. package/components/ngt-slider/ngt-slider.component.d.ts +1 -1
  39. package/components/ngt-svg/ngt-svg.component.d.ts +1 -1
  40. package/components/ngt-tag/ngt-tag.component.d.ts +1 -1
  41. package/components/ngt-textarea/ngt-textarea.component.d.ts +1 -1
  42. package/components/ngt-validation/ngt-validation.component.d.ts +1 -1
  43. package/directives/ngt-stylizable/ngt-stylizable.directive.d.ts +1 -1
  44. package/{esm2020 → esm2022}/components/ngt-action/ngt-action.component.mjs +4 -4
  45. package/{esm2020 → esm2022}/components/ngt-action/ngt-action.module.mjs +9 -9
  46. package/{esm2020 → esm2022}/components/ngt-button/ngt-button.component.mjs +4 -4
  47. package/{esm2020 → esm2022}/components/ngt-button/ngt-button.module.mjs +9 -9
  48. package/esm2022/components/ngt-checkbox/ngt-checkbox.component.mjs +192 -0
  49. package/{esm2020 → esm2022}/components/ngt-checkbox/ngt-checkbox.module.mjs +9 -9
  50. package/{esm2020 → esm2022}/components/ngt-content/ngt-content.component.mjs +4 -4
  51. package/{esm2020 → esm2022}/components/ngt-content/ngt-content.module.mjs +5 -5
  52. package/{esm2020 → esm2022}/components/ngt-context-menu/ngt-context-menu.component.mjs +4 -4
  53. package/{esm2020 → esm2022}/components/ngt-context-menu/ngt-context-menu.directive.mjs +4 -4
  54. package/{esm2020 → esm2022}/components/ngt-context-menu/ngt-context-menu.module.mjs +9 -9
  55. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-datatable.component.mjs +4 -4
  56. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-datatable.module.mjs +39 -39
  57. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +4 -4
  58. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-td/ngt-td.component.mjs +4 -4
  59. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +4 -4
  60. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-th/ngt-th.component.mjs +4 -4
  61. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +4 -4
  63. package/{esm2020 → esm2022}/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +5 -5
  64. package/esm2022/components/ngt-date/ngt-date.component.mjs +425 -0
  65. package/esm2022/components/ngt-date/ngt-date.module.mjs +36 -0
  66. package/{esm2020 → esm2022}/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +4 -4
  67. package/esm2022/components/ngt-dropdown/ngt-dropdown.component.mjs +205 -0
  68. package/{esm2020 → esm2022}/components/ngt-dropdown/ngt-dropdown.module.mjs +5 -5
  69. package/esm2022/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +54 -0
  70. package/esm2022/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +61 -0
  71. package/{esm2020 → esm2022}/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +4 -4
  72. package/{esm2020 → esm2022}/components/ngt-dropzone/ngt-dropzone.component.mjs +8 -8
  73. package/esm2022/components/ngt-dropzone/ngt-dropzone.module.mjs +55 -0
  74. package/esm2022/components/ngt-floating-button/ngt-floating-button.component.mjs +119 -0
  75. package/{esm2020 → esm2022}/components/ngt-floating-button/ngt-floating-button.module.mjs +9 -9
  76. package/{esm2020 → esm2022}/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +4 -4
  77. package/esm2022/components/ngt-form/ngt-form.component.mjs +207 -0
  78. package/{esm2020 → esm2022}/components/ngt-form/ngt-form.module.mjs +7 -7
  79. package/{esm2020 → esm2022}/components/ngt-header-nav/ngt-header-nav.component.mjs +4 -4
  80. package/{esm2020 → esm2022}/components/ngt-header-nav/ngt-header-nav.module.mjs +5 -5
  81. package/{esm2020 → esm2022}/components/ngt-helper/ngt-helper.component.mjs +4 -4
  82. package/{esm2020 → esm2022}/components/ngt-helper/ngt-helper.module.mjs +9 -9
  83. package/{esm2020 → esm2022}/components/ngt-input/ngt-input.component.mjs +8 -8
  84. package/{esm2020 → esm2022}/components/ngt-input/ngt-input.module.mjs +19 -19
  85. package/{esm2020 → esm2022}/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +4 -4
  86. package/{esm2020 → esm2022}/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +4 -4
  87. package/{esm2020 → esm2022}/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +5 -5
  88. package/esm2022/components/ngt-modal/ngt-modal.component.mjs +122 -0
  89. package/{esm2020 → esm2022}/components/ngt-modal/ngt-modal.module.mjs +11 -11
  90. package/{esm2020 → esm2022}/components/ngt-multi-select/ngt-multi-select.component.mjs +8 -8
  91. package/{esm2020 → esm2022}/components/ngt-multi-select/ngt-multi-select.module.mjs +19 -19
  92. package/{esm2020 → esm2022}/components/ngt-pagination/ngt-pagination.component.mjs +4 -4
  93. package/{esm2020 → esm2022}/components/ngt-pagination/ngt-pagination.module.mjs +13 -13
  94. package/esm2022/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +59 -0
  95. package/{esm2020 → esm2022}/components/ngt-popover/ngt-popover.component.mjs +4 -4
  96. package/{esm2020 → esm2022}/components/ngt-popover/ngt-popover.directive.mjs +4 -4
  97. package/{esm2020 → esm2022}/components/ngt-popover/ngt-popover.module.mjs +10 -10
  98. package/{esm2020 → esm2022}/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +4 -4
  99. package/{esm2020 → esm2022}/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +4 -4
  100. package/{esm2020 → esm2022}/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +4 -4
  101. package/esm2022/components/ngt-portlet/ngt-portlet.component.mjs +74 -0
  102. package/{esm2020 → esm2022}/components/ngt-portlet/ngt-portlet.module.mjs +15 -15
  103. package/{esm2020 → esm2022}/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +4 -4
  104. package/{esm2020 → esm2022}/components/ngt-radio-button/ngt-radio-button.component.mjs +8 -8
  105. package/{esm2020 → esm2022}/components/ngt-radio-button/ngt-radio-button.module.mjs +9 -9
  106. package/esm2022/components/ngt-section/ngt-section.component.mjs +151 -0
  107. package/{esm2020 → esm2022}/components/ngt-section/ngt-section.module.mjs +11 -11
  108. package/{esm2020 → esm2022}/components/ngt-select/ngt-select.component.mjs +8 -8
  109. package/{esm2020 → esm2022}/components/ngt-select/ngt-select.directive.mjs +10 -10
  110. package/{esm2020 → esm2022}/components/ngt-select/ngt-select.module.mjs +25 -25
  111. package/{esm2020 → esm2022}/components/ngt-shining/ngt-shining.component.mjs +5 -5
  112. package/{esm2020 → esm2022}/components/ngt-shining/ngt-shining.module.mjs +5 -5
  113. package/{esm2020 → esm2022}/components/ngt-sidenav/ngt-sidenav.component.mjs +6 -6
  114. package/{esm2020 → esm2022}/components/ngt-sidenav/ngt-sidenav.module.mjs +5 -5
  115. package/{esm2020 → esm2022}/components/ngt-slider/ngt-slider.component.mjs +9 -9
  116. package/{esm2020 → esm2022}/components/ngt-slider/ngt-slider.module.mjs +7 -7
  117. package/{esm2020 → esm2022}/components/ngt-svg/ngt-svg.component.mjs +4 -4
  118. package/{esm2020 → esm2022}/components/ngt-svg/ngt-svg.module.mjs +8 -8
  119. package/{esm2020 → esm2022}/components/ngt-tag/ngt-tag.component.mjs +4 -4
  120. package/{esm2020 → esm2022}/components/ngt-tag/ngt-tag.module.mjs +7 -7
  121. package/{esm2020 → esm2022}/components/ngt-textarea/ngt-textarea.component.mjs +8 -8
  122. package/{esm2020 → esm2022}/components/ngt-textarea/ngt-textarea.module.mjs +17 -17
  123. package/{esm2020 → esm2022}/components/ngt-validation/ngt-validation.component.mjs +4 -4
  124. package/{esm2020 → esm2022}/components/ngt-validation/ngt-validation.module.mjs +5 -5
  125. package/{esm2020 → esm2022}/directives/ngt-stylizable/ngt-stylizable.directive.mjs +4 -4
  126. package/{esm2020 → esm2022}/directives/ngt-stylizable/ngt-stylizable.module.mjs +5 -5
  127. package/{fesm2020 → fesm2022}/ng-tailwind.mjs +631 -644
  128. package/fesm2022/ng-tailwind.mjs.map +1 -0
  129. package/package.json +6 -15
  130. package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +0 -192
  131. package/esm2020/components/ngt-date/ngt-date.component.mjs +0 -435
  132. package/esm2020/components/ngt-date/ngt-date.module.mjs +0 -40
  133. package/esm2020/components/ngt-dropdown/ngt-dropdown.component.mjs +0 -205
  134. package/esm2020/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +0 -54
  135. package/esm2020/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +0 -66
  136. package/esm2020/components/ngt-dropzone/ngt-dropzone.module.mjs +0 -55
  137. package/esm2020/components/ngt-floating-button/ngt-floating-button.component.mjs +0 -119
  138. package/esm2020/components/ngt-form/ngt-form.component.mjs +0 -207
  139. package/esm2020/components/ngt-modal/ngt-modal.component.mjs +0 -122
  140. package/esm2020/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +0 -59
  141. package/esm2020/components/ngt-portlet/ngt-portlet.component.mjs +0 -74
  142. package/esm2020/components/ngt-section/ngt-section.component.mjs +0 -151
  143. package/fesm2015/ng-tailwind.mjs +0 -8913
  144. package/fesm2015/ng-tailwind.mjs.map +0 -1
  145. package/fesm2020/ng-tailwind.mjs.map +0 -1
  146. /package/{esm2020 → esm2022}/animations/ngt-angular-animations.mjs +0 -0
  147. /package/{esm2020 → esm2022}/base/ngt-base-ng-model.mjs +0 -0
  148. /package/{esm2020 → esm2022}/components/ngt-dropzone/ngt-dropzone.meta.mjs +0 -0
  149. /package/{esm2020 → esm2022}/enums/size.enum.mjs +0 -0
  150. /package/{esm2020 → esm2022}/helpers/enum/enum.mjs +0 -0
  151. /package/{esm2020 → esm2022}/helpers/form/form.mjs +0 -0
  152. /package/{esm2020 → esm2022}/helpers/input-mask/input-mask.helper.mjs +0 -0
  153. /package/{esm2020 → esm2022}/helpers/promise/promise-helper.mjs +0 -0
  154. /package/{esm2020 → esm2022}/helpers/routing/route.mjs +0 -0
  155. /package/{esm2020 → esm2022}/helpers/uuid.mjs +0 -0
  156. /package/{esm2020 → esm2022}/ng-tailwind.mjs +0 -0
  157. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  158. /package/{esm2020 → esm2022}/services/http/ngt-attachment-http.service.mjs +0 -0
  159. /package/{esm2020 → esm2022}/services/http/ngt-http-form.service.mjs +0 -0
  160. /package/{esm2020 → esm2022}/services/http/ngt-http-resource.service.mjs +0 -0
  161. /package/{esm2020 → esm2022}/services/http/ngt-http-validation.service.mjs +0 -0
  162. /package/{esm2020 → esm2022}/services/http/ngt-http.service.mjs +0 -0
  163. /package/{esm2020 → esm2022}/services/http/ngt-translate.service.mjs +0 -0
  164. /package/{esm2020 → esm2022}/services/ngt-stylizable/ngt-stylizable.service.mjs +0 -0
  165. /package/{esm2020 → esm2022}/services/validation/ngt-ability-validation.service.mjs +0 -0
@@ -30,10 +30,10 @@ export class NgtHelperComponent {
30
30
  }
31
31
  });
32
32
  }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgtHelperComponent, deps: [{ token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.NgtTranslateService, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgtHelperComponent, selector: "ngt-helper", inputs: { helpTextColor: "helpTextColor", helpText: "helpText", helpTitle: "helpTitle", icon: "icon", iconSize: "iconSize", iconColor: "iconColor", iconTitle: "iconTitle", tooltipSize: "tooltipSize", autoXReverse: "autoXReverse", helperReverseYPosition: "helperReverseYPosition" }, viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: ["dropdownRef"], descendants: true, static: true }], ngImport: i0, template: "<ngt-dropdown class=\"flex w-full hover:opacity-100\" [closeOnClick]=\"true\" [autoXReverse]=\"autoXReverse\" [reverseYPosition]=\"helperReverseYPosition\" #dropdownRef>\n <div class=\"flex rounded-full {{ iconColor ?? 'text-green-500'}} {{ ngtStyle.compile(['px', 'text', 'gap']) }}\" style=\"cursor: help;\"\n host>\n <ngt-svg *ngIf=\"icon\" [class]=\"iconSize\" [src]=\"icon\" style=\"cursor: help;\"></ngt-svg>\n\n <div *ngIf=\"!icon\" style=\"cursor: help;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path class=\"fill-current\"\n d=\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\" />\n </svg>\n </div>\n\n <p *ngIf=\"helpText\" class=\"cursor-pointer {{helpTextColor}}\" style=\"margin-left: 2px\">{{helpText}}</p>\n </div>\n\n <div class=\"bg-gray-100 rounded-lg hover:opacity-100 text-gray-800 {{tooltipSize}} shadow-lg {{ ngtStyle.compile(['text', 'fontCase']) }}\"\n [class.-mb-4]='dropdownRef.isYPositionReversed' container>\n <div\n class=\"{{ ngtStyle.compile(['color.bg', 'color.text']) }} flex justify-center rounded-t-lg hover:opacity-100 font-semibold border-b border-dashed border-gray-400 text-center px-6 py-1\">\n <ngt-svg *ngIf=\"iconTitle\" [src]=\"iconTitle\" style=\"margin-right: 3px\"></ngt-svg>\n <span class=\"text-xs\">{{ helpTitle || ngtTranslateService.ngtStandardHelperTitle }}</span>\n </div>\n <div class=\"px-2 py-1 text-center hover:opacity-100\">\n <ng-content></ng-content>\n </div>\n </div>\n</ngt-dropdown>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "component", type: i5.NgtDropdownComponent, selector: "ngt-dropdown", inputs: ["scrollable", "autoXReverse", "autoYReverse", "reverseXPosition", "reverseYPosition", "closeOnClick", "closeTimeout", "openMethod"], outputs: ["onToggle", "onHostClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
33
35
  }
34
- NgtHelperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtHelperComponent, deps: [{ token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.NgtTranslateService, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
35
- NgtHelperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtHelperComponent, selector: "ngt-helper", inputs: { helpTextColor: "helpTextColor", helpText: "helpText", helpTitle: "helpTitle", icon: "icon", iconSize: "iconSize", iconColor: "iconColor", iconTitle: "iconTitle", tooltipSize: "tooltipSize", autoXReverse: "autoXReverse", helperReverseYPosition: "helperReverseYPosition" }, viewQueries: [{ propertyName: "dropdownRef", first: true, predicate: ["dropdownRef"], descendants: true, static: true }], ngImport: i0, template: "<ngt-dropdown class=\"flex w-full hover:opacity-100\" [closeOnClick]=\"true\" [autoXReverse]=\"autoXReverse\" [reverseYPosition]=\"helperReverseYPosition\" #dropdownRef>\n <div class=\"flex rounded-full {{ iconColor ?? 'text-green-500'}} {{ ngtStyle.compile(['px', 'text', 'gap']) }}\" style=\"cursor: help;\"\n host>\n <ngt-svg *ngIf=\"icon\" [class]=\"iconSize\" [src]=\"icon\" style=\"cursor: help;\"></ngt-svg>\n\n <div *ngIf=\"!icon\" style=\"cursor: help;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path class=\"fill-current\"\n d=\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\" />\n </svg>\n </div>\n\n <p *ngIf=\"helpText\" class=\"cursor-pointer {{helpTextColor}}\" style=\"margin-left: 2px\">{{helpText}}</p>\n </div>\n\n <div class=\"bg-gray-100 rounded-lg hover:opacity-100 text-gray-800 {{tooltipSize}} shadow-lg {{ ngtStyle.compile(['text', 'fontCase']) }}\"\n [class.-mb-4]='dropdownRef.isYPositionReversed' container>\n <div\n class=\"{{ ngtStyle.compile(['color.bg', 'color.text']) }} flex justify-center rounded-t-lg hover:opacity-100 font-semibold border-b border-dashed border-gray-400 text-center px-6 py-1\">\n <ngt-svg *ngIf=\"iconTitle\" [src]=\"iconTitle\" style=\"margin-right: 3px\"></ngt-svg>\n <span class=\"text-xs\">{{ helpTitle || ngtTranslateService.ngtStandardHelperTitle }}</span>\n </div>\n <div class=\"px-2 py-1 text-center hover:opacity-100\">\n <ng-content></ng-content>\n </div>\n </div>\n</ngt-dropdown>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "component", type: i5.NgtDropdownComponent, selector: "ngt-dropdown", inputs: ["scrollable", "autoXReverse", "autoYReverse", "reverseXPosition", "reverseYPosition", "closeOnClick", "closeTimeout", "openMethod"], outputs: ["onToggle", "onHostClick"] }], encapsulation: i0.ViewEncapsulation.None });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtHelperComponent, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgtHelperComponent, decorators: [{
37
37
  type: Component,
38
38
  args: [{ selector: 'ngt-helper', encapsulation: ViewEncapsulation.None, template: "<ngt-dropdown class=\"flex w-full hover:opacity-100\" [closeOnClick]=\"true\" [autoXReverse]=\"autoXReverse\" [reverseYPosition]=\"helperReverseYPosition\" #dropdownRef>\n <div class=\"flex rounded-full {{ iconColor ?? 'text-green-500'}} {{ ngtStyle.compile(['px', 'text', 'gap']) }}\" style=\"cursor: help;\"\n host>\n <ngt-svg *ngIf=\"icon\" [class]=\"iconSize\" [src]=\"icon\" style=\"cursor: help;\"></ngt-svg>\n\n <div *ngIf=\"!icon\" style=\"cursor: help;\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n <path class=\"fill-current\"\n d=\"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z\" />\n </svg>\n </div>\n\n <p *ngIf=\"helpText\" class=\"cursor-pointer {{helpTextColor}}\" style=\"margin-left: 2px\">{{helpText}}</p>\n </div>\n\n <div class=\"bg-gray-100 rounded-lg hover:opacity-100 text-gray-800 {{tooltipSize}} shadow-lg {{ ngtStyle.compile(['text', 'fontCase']) }}\"\n [class.-mb-4]='dropdownRef.isYPositionReversed' container>\n <div\n class=\"{{ ngtStyle.compile(['color.bg', 'color.text']) }} flex justify-center rounded-t-lg hover:opacity-100 font-semibold border-b border-dashed border-gray-400 text-center px-6 py-1\">\n <ngt-svg *ngIf=\"iconTitle\" [src]=\"iconTitle\" style=\"margin-right: 3px\"></ngt-svg>\n <span class=\"text-xs\">{{ helpTitle || ngtTranslateService.ngtStandardHelperTitle }}</span>\n </div>\n <div class=\"px-2 py-1 text-center hover:opacity-100\">\n <ng-content></ng-content>\n </div>\n </div>\n</ngt-dropdown>\n" }]
39
39
  }], ctorParameters: function () { return [{ type: i1.NgtStylizableDirective, decorators: [{
@@ -66,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
66
66
  }], helperReverseYPosition: [{
67
67
  type: Input
68
68
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWhlbHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtaGVscGVyL25ndC1oZWxwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWhlbHBlci9uZ3QtaGVscGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXdCLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlySCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7OztBQU81RixNQUFNLE9BQU8sa0JBQWtCO0lBZ0IzQixZQUVXLHNCQUE4QyxFQUU5QyxtQkFBd0MsRUFDdkMsUUFBa0I7UUFIbkIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3ZDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFYZCxnQkFBVyxHQUFXLFVBQVUsQ0FBQztRQUNqQyxpQkFBWSxHQUFZLElBQUksQ0FBQztRQVl6QyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ3pFO2FBQU07WUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFO1lBQzNDLElBQUksRUFBRSxTQUFTO1lBQ2YsUUFBUSxFQUFFLEVBQUU7WUFDWixFQUFFLEVBQUUsTUFBTTtZQUNWLEdBQUcsRUFBRSxFQUFFO1lBQ1AsS0FBSyxFQUFFO2dCQUNILElBQUksRUFBRSxZQUFZO2dCQUNsQixFQUFFLEVBQUUsYUFBYTthQUNwQjtTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7OytHQXZDUSxrQkFBa0I7bUdBQWxCLGtCQUFrQixzY0NYL0Isa3NFQTJCQTsyRkRoQmEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNJLFlBQVksaUJBRVAsaUJBQWlCLENBQUMsSUFBSTs7MEJBbUJoQyxRQUFROzswQkFBSSxJQUFJOzswQkFFaEIsUUFBUTttRUFsQnNDLFdBQVc7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFMUIsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1Usc0JBQXNCO3NCQUFyQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBTZWxmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtaGVscGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWhlbHBlci5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RIZWxwZXJDb21wb25lbnQge1xuICAgIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duUmVmJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIGRyb3Bkb3duUmVmOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGljb246IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvblNpemU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbkNvbG9yOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGljb25UaXRsZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0b29sdGlwU2l6ZTogc3RyaW5nID0gJ21heC13LXhzJztcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b1hSZXZlcnNlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscGVyUmV2ZXJzZVlQb3NpdGlvbjogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKClcbiAgICAgICAgcHVibGljIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RIZWxwZXInLCB7XG4gICAgICAgICAgICB0ZXh0OiAndGV4dC14cycsXG4gICAgICAgICAgICBmb250Q2FzZTogJycsXG4gICAgICAgICAgICBweDogJ3B4LTInLFxuICAgICAgICAgICAgZ2FwOiAnJyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtYmxhY2snLFxuICAgICAgICAgICAgICAgIGJnOiAnYmctZ3JheS0yMDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZ3QtZHJvcGRvd24gY2xhc3M9XCJmbGV4IHctZnVsbCBob3ZlcjpvcGFjaXR5LTEwMFwiIFtjbG9zZU9uQ2xpY2tdPVwidHJ1ZVwiIFthdXRvWFJldmVyc2VdPVwiYXV0b1hSZXZlcnNlXCIgW3JldmVyc2VZUG9zaXRpb25dPVwiaGVscGVyUmV2ZXJzZVlQb3NpdGlvblwiICNkcm9wZG93blJlZj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCByb3VuZGVkLWZ1bGwge3sgaWNvbkNvbG9yID8/ICd0ZXh0LWdyZWVuLTUwMCd9fSB7eyBuZ3RTdHlsZS5jb21waWxlKFsncHgnLCAndGV4dCcsICdnYXAnXSkgfX1cIiBzdHlsZT1cImN1cnNvcjogaGVscDtcIlxuICAgICAgICBob3N0PlxuICAgICAgICA8bmd0LXN2ZyAqbmdJZj1cImljb25cIiBbY2xhc3NdPVwiaWNvblNpemVcIiBbc3JjXT1cImljb25cIiBzdHlsZT1cImN1cnNvcjogaGVscDtcIj48L25ndC1zdmc+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpY29uXCIgc3R5bGU9XCJjdXJzb3I6IGhlbHA7XCI+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGwtY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4ek0yNjIuNjU1IDkwYy01NC40OTcgMC04OS4yNTUgMjIuOTU3LTExNi41NDkgNjMuNzU4LTMuNTM2IDUuMjg2LTIuMzUzIDEyLjQxNSAyLjcxNSAxNi4yNThsMzQuNjk5IDI2LjMxYzUuMjA1IDMuOTQ3IDEyLjYyMSAzLjAwOCAxNi42NjUtMi4xMjIgMTcuODY0LTIyLjY1OCAzMC4xMTMtMzUuNzk3IDU3LjMwMy0zNS43OTcgMjAuNDI5IDAgNDUuNjk4IDEzLjE0OCA0NS42OTggMzIuOTU4IDAgMTQuOTc2LTEyLjM2MyAyMi42NjctMzIuNTM0IDMzLjk3NkMyNDcuMTI4IDIzOC41MjggMjE2IDI1NC45NDEgMjE2IDI5NnY0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNTZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtMS4zMzNjMC0yOC40NjIgODMuMTg2LTI5LjY0NyA4My4xODYtMTA2LjY2NyAwLTU4LjAwMi02MC4xNjUtMTAyLTExNi41MzEtMTAyek0yNTYgMzM4Yy0yNS4zNjUgMC00NiAyMC42MzUtNDYgNDYgMCAyNS4zNjQgMjAuNjM1IDQ2IDQ2IDQ2czQ2LTIwLjYzNiA0Ni00NmMwLTI1LjM2NS0yMC42MzUtNDYtNDYtNDZ6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cCAqbmdJZj1cImhlbHBUZXh0XCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB7e2hlbHBUZXh0Q29sb3J9fVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJweFwiPnt7aGVscFRleHR9fTwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJiZy1ncmF5LTEwMCByb3VuZGVkLWxnIGhvdmVyOm9wYWNpdHktMTAwIHRleHQtZ3JheS04MDAge3t0b29sdGlwU2l6ZX19IHNoYWRvdy1sZyB7eyBuZ3RTdHlsZS5jb21waWxlKFsndGV4dCcsICdmb250Q2FzZSddKSB9fVwiXG4gICAgICAgIFtjbGFzcy4tbWItNF09J2Ryb3Bkb3duUmVmLmlzWVBvc2l0aW9uUmV2ZXJzZWQnIGNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyBuZ3RTdHlsZS5jb21waWxlKFsnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKSB9fSBmbGV4IGp1c3RpZnktY2VudGVyIHJvdW5kZWQtdC1sZyBob3ZlcjpvcGFjaXR5LTEwMCBmb250LXNlbWlib2xkIGJvcmRlci1iIGJvcmRlci1kYXNoZWQgYm9yZGVyLWdyYXktNDAwIHRleHQtY2VudGVyIHB4LTYgcHktMVwiPlxuICAgICAgICAgICAgPG5ndC1zdmcgKm5nSWY9XCJpY29uVGl0bGVcIiBbc3JjXT1cImljb25UaXRsZVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAzcHhcIj48L25ndC1zdmc+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHNcIj57eyBoZWxwVGl0bGUgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTdGFuZGFyZEhlbHBlclRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMSB0ZXh0LWNlbnRlciBob3ZlcjpvcGFjaXR5LTEwMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmd0LWRyb3Bkb3duPlxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWhlbHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtaGVscGVyL25ndC1oZWxwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWhlbHBlci9uZ3QtaGVscGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXdCLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlySCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7OztBQU81RixNQUFNLE9BQU8sa0JBQWtCO0lBZ0IzQixZQUVXLHNCQUE4QyxFQUU5QyxtQkFBd0MsRUFDdkMsUUFBa0I7UUFIbkIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3ZDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFYZCxnQkFBVyxHQUFXLFVBQVUsQ0FBQztRQUNqQyxpQkFBWSxHQUFZLElBQUksQ0FBQztRQVl6QyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ3pFO2FBQU07WUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztTQUM5QztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFO1lBQzNDLElBQUksRUFBRSxTQUFTO1lBQ2YsUUFBUSxFQUFFLEVBQUU7WUFDWixFQUFFLEVBQUUsTUFBTTtZQUNWLEdBQUcsRUFBRSxFQUFFO1lBQ1AsS0FBSyxFQUFFO2dCQUNILElBQUksRUFBRSxZQUFZO2dCQUNsQixFQUFFLEVBQUUsYUFBYTthQUNwQjtTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBdkNRLGtCQUFrQjttR0FBbEIsa0JBQWtCLHNjQ1gvQixrc0VBMkJBOzs0RkRoQmEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNJLFlBQVksaUJBRVAsaUJBQWlCLENBQUMsSUFBSTs7MEJBbUJoQyxRQUFROzswQkFBSSxJQUFJOzswQkFFaEIsUUFBUTttRUFsQnNDLFdBQVc7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFMUIsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1Usc0JBQXNCO3NCQUFyQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBTZWxmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3QtaGVscGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWhlbHBlci5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RIZWxwZXJDb21wb25lbnQge1xuICAgIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duUmVmJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIGRyb3Bkb3duUmVmOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGljb246IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvblNpemU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaWNvbkNvbG9yOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGljb25UaXRsZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0b29sdGlwU2l6ZTogc3RyaW5nID0gJ21heC13LXhzJztcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b1hSZXZlcnNlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscGVyUmV2ZXJzZVlQb3NpdGlvbjogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKClcbiAgICAgICAgcHVibGljIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RIZWxwZXInLCB7XG4gICAgICAgICAgICB0ZXh0OiAndGV4dC14cycsXG4gICAgICAgICAgICBmb250Q2FzZTogJycsXG4gICAgICAgICAgICBweDogJ3B4LTInLFxuICAgICAgICAgICAgZ2FwOiAnJyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogJ3RleHQtYmxhY2snLFxuICAgICAgICAgICAgICAgIGJnOiAnYmctZ3JheS0yMDAnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZ3QtZHJvcGRvd24gY2xhc3M9XCJmbGV4IHctZnVsbCBob3ZlcjpvcGFjaXR5LTEwMFwiIFtjbG9zZU9uQ2xpY2tdPVwidHJ1ZVwiIFthdXRvWFJldmVyc2VdPVwiYXV0b1hSZXZlcnNlXCIgW3JldmVyc2VZUG9zaXRpb25dPVwiaGVscGVyUmV2ZXJzZVlQb3NpdGlvblwiICNkcm9wZG93blJlZj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCByb3VuZGVkLWZ1bGwge3sgaWNvbkNvbG9yID8/ICd0ZXh0LWdyZWVuLTUwMCd9fSB7eyBuZ3RTdHlsZS5jb21waWxlKFsncHgnLCAndGV4dCcsICdnYXAnXSkgfX1cIiBzdHlsZT1cImN1cnNvcjogaGVscDtcIlxuICAgICAgICBob3N0PlxuICAgICAgICA8bmd0LXN2ZyAqbmdJZj1cImljb25cIiBbY2xhc3NdPVwiaWNvblNpemVcIiBbc3JjXT1cImljb25cIiBzdHlsZT1cImN1cnNvcjogaGVscDtcIj48L25ndC1zdmc+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpY29uXCIgc3R5bGU9XCJjdXJzb3I6IGhlbHA7XCI+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGwtY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNTA0IDI1NmMwIDEzNi45OTctMTExLjA0MyAyNDgtMjQ4IDI0OFM4IDM5Mi45OTcgOCAyNTZDOCAxMTkuMDgzIDExOS4wNDMgOCAyNTYgOHMyNDggMTExLjA4MyAyNDggMjQ4ek0yNjIuNjU1IDkwYy01NC40OTcgMC04OS4yNTUgMjIuOTU3LTExNi41NDkgNjMuNzU4LTMuNTM2IDUuMjg2LTIuMzUzIDEyLjQxNSAyLjcxNSAxNi4yNThsMzQuNjk5IDI2LjMxYzUuMjA1IDMuOTQ3IDEyLjYyMSAzLjAwOCAxNi42NjUtMi4xMjIgMTcuODY0LTIyLjY1OCAzMC4xMTMtMzUuNzk3IDU3LjMwMy0zNS43OTcgMjAuNDI5IDAgNDUuNjk4IDEzLjE0OCA0NS42OTggMzIuOTU4IDAgMTQuOTc2LTEyLjM2MyAyMi42NjctMzIuNTM0IDMzLjk3NkMyNDcuMTI4IDIzOC41MjggMjE2IDI1NC45NDEgMjE2IDI5NnY0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoNTZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnYtMS4zMzNjMC0yOC40NjIgODMuMTg2LTI5LjY0NyA4My4xODYtMTA2LjY2NyAwLTU4LjAwMi02MC4xNjUtMTAyLTExNi41MzEtMTAyek0yNTYgMzM4Yy0yNS4zNjUgMC00NiAyMC42MzUtNDYgNDYgMCAyNS4zNjQgMjAuNjM1IDQ2IDQ2IDQ2czQ2LTIwLjYzNiA0Ni00NmMwLTI1LjM2NS0yMC42MzUtNDYtNDYtNDZ6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cCAqbmdJZj1cImhlbHBUZXh0XCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB7e2hlbHBUZXh0Q29sb3J9fVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJweFwiPnt7aGVscFRleHR9fTwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJiZy1ncmF5LTEwMCByb3VuZGVkLWxnIGhvdmVyOm9wYWNpdHktMTAwIHRleHQtZ3JheS04MDAge3t0b29sdGlwU2l6ZX19IHNoYWRvdy1sZyB7eyBuZ3RTdHlsZS5jb21waWxlKFsndGV4dCcsICdmb250Q2FzZSddKSB9fVwiXG4gICAgICAgIFtjbGFzcy4tbWItNF09J2Ryb3Bkb3duUmVmLmlzWVBvc2l0aW9uUmV2ZXJzZWQnIGNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ7eyBuZ3RTdHlsZS5jb21waWxlKFsnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKSB9fSBmbGV4IGp1c3RpZnktY2VudGVyIHJvdW5kZWQtdC1sZyBob3ZlcjpvcGFjaXR5LTEwMCBmb250LXNlbWlib2xkIGJvcmRlci1iIGJvcmRlci1kYXNoZWQgYm9yZGVyLWdyYXktNDAwIHRleHQtY2VudGVyIHB4LTYgcHktMVwiPlxuICAgICAgICAgICAgPG5ndC1zdmcgKm5nSWY9XCJpY29uVGl0bGVcIiBbc3JjXT1cImljb25UaXRsZVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAzcHhcIj48L25ndC1zdmc+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHNcIj57eyBoZWxwVGl0bGUgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTdGFuZGFyZEhlbHBlclRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMSB0ZXh0LWNlbnRlciBob3ZlcjpvcGFjaXR5LTEwMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmd0LWRyb3Bkb3duPlxuIl19
@@ -5,15 +5,15 @@ import { NgtHelperComponent } from "./ngt-helper.component";
5
5
  import { NgtDropdownModule } from '../ngt-dropdown/ngt-dropdown.module';
6
6
  import * as i0 from "@angular/core";
7
7
  export class NgtHelperModule {
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgtHelperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgtHelperModule, declarations: [NgtHelperComponent], imports: [CommonModule,
10
+ NgtSvgModule,
11
+ NgtDropdownModule], exports: [NgtHelperComponent] }); }
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgtHelperModule, imports: [CommonModule,
13
+ NgtSvgModule,
14
+ NgtDropdownModule] }); }
8
15
  }
9
- NgtHelperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtHelperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- NgtHelperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: NgtHelperModule, declarations: [NgtHelperComponent], imports: [CommonModule,
11
- NgtSvgModule,
12
- NgtDropdownModule], exports: [NgtHelperComponent] });
13
- NgtHelperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtHelperModule, imports: [CommonModule,
14
- NgtSvgModule,
15
- NgtDropdownModule] });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtHelperModule, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgtHelperModule, decorators: [{
17
17
  type: NgModule,
18
18
  args: [{
19
19
  declarations: [NgtHelperComponent],
@@ -25,4 +25,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
25
25
  ]
26
26
  }]
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWhlbHBlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtaGVscGVyL25ndC1oZWxwZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFXeEUsTUFBTSxPQUFPLGVBQWU7OzRHQUFmLGVBQWU7NkdBQWYsZUFBZSxpQkFSVCxrQkFBa0IsYUFHN0IsWUFBWTtRQUNaLFlBQVk7UUFDWixpQkFBaUIsYUFKWCxrQkFBa0I7NkdBT25CLGVBQWUsWUFMcEIsWUFBWTtRQUNaLFlBQVk7UUFDWixpQkFBaUI7MkZBR1osZUFBZTtrQkFUM0IsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7b0JBQzdCLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osaUJBQWlCO3FCQUNwQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5ndFN2Z01vZHVsZSB9IGZyb20gXCIuLi9uZ3Qtc3ZnL25ndC1zdmcubW9kdWxlXCI7XG5pbXBvcnQgeyBOZ3RIZWxwZXJDb21wb25lbnQgfSBmcm9tIFwiLi9uZ3QtaGVscGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTmd0RHJvcGRvd25Nb2R1bGUgfSBmcm9tICcuLi9uZ3QtZHJvcGRvd24vbmd0LWRyb3Bkb3duLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbTmd0SGVscGVyQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbTmd0SGVscGVyQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTmd0U3ZnTW9kdWxlLFxuICAgICAgICBOZ3REcm9wZG93bk1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd0SGVscGVyTW9kdWxlIHsgfVxuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWhlbHBlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtaGVscGVyL25ndC1oZWxwZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFXeEUsTUFBTSxPQUFPLGVBQWU7K0dBQWYsZUFBZTtnSEFBZixlQUFlLGlCQVJULGtCQUFrQixhQUc3QixZQUFZO1lBQ1osWUFBWTtZQUNaLGlCQUFpQixhQUpYLGtCQUFrQjtnSEFPbkIsZUFBZSxZQUxwQixZQUFZO1lBQ1osWUFBWTtZQUNaLGlCQUFpQjs7NEZBR1osZUFBZTtrQkFUM0IsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7b0JBQzdCLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFlBQVk7d0JBQ1osaUJBQWlCO3FCQUNwQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE5ndFN2Z01vZHVsZSB9IGZyb20gXCIuLi9uZ3Qtc3ZnL25ndC1zdmcubW9kdWxlXCI7XG5pbXBvcnQgeyBOZ3RIZWxwZXJDb21wb25lbnQgfSBmcm9tIFwiLi9uZ3QtaGVscGVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTmd0RHJvcGRvd25Nb2R1bGUgfSBmcm9tICcuLi9uZ3QtZHJvcGRvd24vbmd0LWRyb3Bkb3duLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbTmd0SGVscGVyQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbTmd0SGVscGVyQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTmd0U3ZnTW9kdWxlLFxuICAgICAgICBOZ3REcm9wZG93bk1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd0SGVscGVyTW9kdWxlIHsgfVxuIl19
@@ -697,14 +697,14 @@ export class NgtInputComponent extends NgtBaseNgModel {
697
697
  this.subscriptions.forEach(subscription => subscription.unsubscribe());
698
698
  this.subscriptions = [];
699
699
  }
700
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgtInputComponent, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i4.NgtHttpValidationService, optional: true, skipSelf: true }, { token: i5.NgtHttpResourceService, optional: true, skipSelf: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i6.NgtSectionComponent, optional: true, skipSelf: true }, { token: i7.NgtModalComponent, optional: true, skipSelf: true }, { token: i8.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
701
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgtInputComponent, selector: "ngt-input", inputs: { label: "label", placeholder: "placeholder", shining: "shining", loading: "loading", helpTitle: "helpTitle", helpTextColor: "helpTextColor", helpText: "helpText", innerLeftIcon: "innerLeftIcon", innerLeftIconColor: "innerLeftIconColor", innerRightIcon: "innerRightIcon", innerRightIconColor: "innerRightIconColor", decimalMaskPrecision: "decimalMaskPrecision", showCharactersLength: "showCharactersLength", uppercase: "uppercase", customInnerContentTemplate: "customInnerContentTemplate", helperReverseYPosition: "helperReverseYPosition", helperAutoXReverse: "helperAutoXReverse", isDisabled: "isDisabled", isReadonly: "isReadonly", showRoundedIcon: "showRoundedIcon", type: "type", name: "name", mask: "mask", focus: "focus", allowClear: "allowClear", jit: "jit", useInputEvent: "useInputEvent", findExistingResource: "findExistingResource", allowPhoneValidation: "allowPhoneValidation", validatePassword: "validatePassword", passwordableId: "passwordableId", passwordPolicyId: "passwordPolicyId", isRequired: "isRequired", uniqueResource: "uniqueResource", minValue: "minValue", maxValue: "maxValue", maxLength: "maxLength", minLength: "minLength", match: "match", multipleOf: "multipleOf", validateMinValueOnMask: "validateMinValueOnMask", externalServerDependency: "externalServerDependency", customValidator: "customValidator" }, outputs: { onClickLeftIcon: "onClickLeftIcon", onClickRightIcon: "onClickRightIcon", validatePhoneResult: "validatePhoneResult" }, providers: [
702
+ NgtMakeProvider(NgtInputComponent),
703
+ ], viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" class=\"mb-2 flex {{ ngtStyle.compile(['color.text', 'text', 'font']) }}\" [hidden]='shining'>\n {{ label }}:\n\n <span *ngIf=\"isRequired\" class=\"text-red-500 font-bold text-md ml-1\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n <span [innerHtml]=\"helpText\"></span>\n </ngt-helper>\n</label>\n\n<div class=\"{{ shining ? 'hidden' : 'flex relative'}}\">\n <input autocomplete=\"new-password\"\n class=\"flex border appearance-none focus:outline-none leading-tight w-full {{ getInputPaddings() }} {{ ngtStyle.compile(['h', 'text', 'color.border', 'color.bg', 'color.text', 'rounded', 'cursor']) }}\"\n [disabled]=\"disabled()\" [readonly]=\"isReadonly || loading\" [placeholder]=\"placeholder\"\n [style]=\"uppercase ? 'text-transform: uppercase!important':''\"\n [ngClass]=\"{'input-has-error border-red-700': formControl?.errors && (formControl?.dirty || (formContainer && formContainer['submitted']))}\"\n [attr.type]=\"inputProperties.htmlType\" (mouseleave)=\"restorePlaceholder()\" (focusout)=\"restorePlaceholder()\"\n (input)=\"useInputEvent ? onNativeChange() : null\" (change)=\"!useInputEvent ? onNativeChange() : null\" #element>\n <span *ngIf=\"innerLeftIcon\"\n class=\"absolute self-center px-2 {{ innerLeftIconColor }} {{ onClickLeftIcon ? 'cursor-pointer' : '' }}\"\n (click)=\"onClickLeftIcon.emit()\">\n\n <ngt-svg *ngIf=\"!showRoundedIcon\" class=\"text-xs fill-current\" [src]='innerLeftIcon'></ngt-svg>\n <img *ngIf=\"showRoundedIcon\" class=\"rounded-full h-4\" [src]='innerLeftIcon'>\n </span>\n\n <div *ngIf=\"customInnerContentTemplate\" class=\"absolute self-center px-2\">\n <ng-container [ngTemplateOutlet]=\"customInnerContentTemplate\"></ng-container>\n </div>\n\n <div class=\"flex absolute h-full justify-end right-0 w-auto\">\n <span *ngIf=\"!disabled() && allowClear && value && !loading\"\n class=\"self-center right-0 px-2 text-red-400 cursor-pointer\" (click)='clearInput($event)'>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </span>\n\n <span *ngIf=\"loading\" class=\"self-center right-0 px-2 text-gray-500\">\n <div class=\"div-loader\"></div>\n </span>\n\n <span *ngIf=\"type == 'password' && value\" class=\"self-center px-2 cursor-pointer\">\n <svg *ngIf=\"element.type == 'password'\" class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\" (click)='showPassword()'>\n <path\n d=\"M.2 10a11 11 0 0 1 19.6 0A11 11 0 0 1 .2 10zm9.8 4a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0-2a2 2 0 1 1 0-4 2 2 0 0 1 0 4z\" />\n </svg>\n\n <svg *ngIf=\"element.type == 'text'\" class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\" (click)='hidePassword()'>\n <path\n d=\"M12.81 4.36l-1.77 1.78a4 4 0 0 0-4.9 4.9l-2.76 2.75C2.06 12.79.96 11.49.2 10a11 11 0 0 1 12.6-5.64zm3.8 1.85c1.33 1 2.43 2.3 3.2 3.79a11 11 0 0 1-12.62 5.64l1.77-1.78a4 4 0 0 0 4.9-4.9l2.76-2.75zm-.25-3.99l1.42 1.42L3.64 17.78l-1.42-1.42L16.36 2.22z\" />\n </svg>\n </span>\n\n <span *ngIf=\"innerRightIcon && type != 'password'\"\n class=\"self-center px-2 {{ innerRightIconColor }} {{ onClickRightIcon ? 'cursor-pointer' : '' }}\"\n (click)=\"onClickRightIcon.emit()\">\n <ngt-svg class=\"text-xxs fill-current\" [src]='innerRightIcon'></ngt-svg>\n </span>\n </div>\n</div>\n\n<ng-container *ngIf=\"showCharactersLength && maxTotalCharsCount && !shining\">\n <p class=\"text-xxs mt-1\">\n {{ ngtTranslateService.ngtTextAreaRemainingCharacters }}:\n <span class=\"font-semibold\">{{ getRemainingCharacters() }}</span>\n </p>\n</ng-container>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<input *ngIf='componentReady' type=\"hidden\" [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n\n<ng-content></ng-content>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\" [minValue]='minValue' [minLength]='minLength'>\n</ngt-validation>\n", styles: [".div-loader{width:20px;height:20px;border:3px solid #a0aec038;border-top-color:#a0aec0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i11.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i12.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "component", type: i13.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }], viewProviders: [
704
+ { provide: ControlContainer, useExisting: NgForm }
705
+ ] }); }
700
706
  }
701
- NgtInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtInputComponent, deps: [{ token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i4.NgtHttpValidationService, optional: true, skipSelf: true }, { token: i5.NgtHttpResourceService, optional: true, skipSelf: true }, { token: i3.NgtFormComponent, optional: true, skipSelf: true }, { token: i6.NgtSectionComponent, optional: true, skipSelf: true }, { token: i7.NgtModalComponent, optional: true, skipSelf: true }, { token: i8.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
702
- NgtInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtInputComponent, selector: "ngt-input", inputs: { label: "label", placeholder: "placeholder", shining: "shining", loading: "loading", helpTitle: "helpTitle", helpTextColor: "helpTextColor", helpText: "helpText", innerLeftIcon: "innerLeftIcon", innerLeftIconColor: "innerLeftIconColor", innerRightIcon: "innerRightIcon", innerRightIconColor: "innerRightIconColor", decimalMaskPrecision: "decimalMaskPrecision", showCharactersLength: "showCharactersLength", uppercase: "uppercase", customInnerContentTemplate: "customInnerContentTemplate", helperReverseYPosition: "helperReverseYPosition", helperAutoXReverse: "helperAutoXReverse", isDisabled: "isDisabled", isReadonly: "isReadonly", showRoundedIcon: "showRoundedIcon", type: "type", name: "name", mask: "mask", focus: "focus", allowClear: "allowClear", jit: "jit", useInputEvent: "useInputEvent", findExistingResource: "findExistingResource", allowPhoneValidation: "allowPhoneValidation", validatePassword: "validatePassword", passwordableId: "passwordableId", passwordPolicyId: "passwordPolicyId", isRequired: "isRequired", uniqueResource: "uniqueResource", minValue: "minValue", maxValue: "maxValue", maxLength: "maxLength", minLength: "minLength", match: "match", multipleOf: "multipleOf", validateMinValueOnMask: "validateMinValueOnMask", externalServerDependency: "externalServerDependency", customValidator: "customValidator" }, outputs: { onClickLeftIcon: "onClickLeftIcon", onClickRightIcon: "onClickRightIcon", validatePhoneResult: "validatePhoneResult" }, providers: [
703
- NgtMakeProvider(NgtInputComponent),
704
- ], viewQueries: [{ propertyName: "element", first: true, predicate: ["element"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" class=\"mb-2 flex {{ ngtStyle.compile(['color.text', 'text', 'font']) }}\" [hidden]='shining'>\n {{ label }}:\n\n <span *ngIf=\"isRequired\" class=\"text-red-500 font-bold text-md ml-1\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n <span [innerHtml]=\"helpText\"></span>\n </ngt-helper>\n</label>\n\n<div class=\"{{ shining ? 'hidden' : 'flex relative'}}\">\n <input autocomplete=\"new-password\"\n class=\"flex border appearance-none focus:outline-none leading-tight w-full {{ getInputPaddings() }} {{ ngtStyle.compile(['h', 'text', 'color.border', 'color.bg', 'color.text', 'rounded', 'cursor']) }}\"\n [disabled]=\"disabled()\" [readonly]=\"isReadonly || loading\" [placeholder]=\"placeholder\"\n [style]=\"uppercase ? 'text-transform: uppercase!important':''\"\n [ngClass]=\"{'input-has-error border-red-700': formControl?.errors && (formControl?.dirty || (formContainer && formContainer['submitted']))}\"\n [attr.type]=\"inputProperties.htmlType\" (mouseleave)=\"restorePlaceholder()\" (focusout)=\"restorePlaceholder()\"\n (input)=\"useInputEvent ? onNativeChange() : null\" (change)=\"!useInputEvent ? onNativeChange() : null\" #element>\n <span *ngIf=\"innerLeftIcon\"\n class=\"absolute self-center px-2 {{ innerLeftIconColor }} {{ onClickLeftIcon ? 'cursor-pointer' : '' }}\"\n (click)=\"onClickLeftIcon.emit()\">\n\n <ngt-svg *ngIf=\"!showRoundedIcon\" class=\"text-xs fill-current\" [src]='innerLeftIcon'></ngt-svg>\n <img *ngIf=\"showRoundedIcon\" class=\"rounded-full h-4\" [src]='innerLeftIcon'>\n </span>\n\n <div *ngIf=\"customInnerContentTemplate\" class=\"absolute self-center px-2\">\n <ng-container [ngTemplateOutlet]=\"customInnerContentTemplate\"></ng-container>\n </div>\n\n <div class=\"flex absolute h-full justify-end right-0 w-auto\">\n <span *ngIf=\"!disabled() && allowClear && value && !loading\"\n class=\"self-center right-0 px-2 text-red-400 cursor-pointer\" (click)='clearInput($event)'>\n <svg class=\"fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </span>\n\n <span *ngIf=\"loading\" class=\"self-center right-0 px-2 text-gray-500\">\n <div class=\"div-loader\"></div>\n </span>\n\n <span *ngIf=\"type == 'password' && value\" class=\"self-center px-2 cursor-pointer\">\n <svg *ngIf=\"element.type == 'password'\" class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\" (click)='showPassword()'>\n <path\n d=\"M.2 10a11 11 0 0 1 19.6 0A11 11 0 0 1 .2 10zm9.8 4a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0-2a2 2 0 1 1 0-4 2 2 0 0 1 0 4z\" />\n </svg>\n\n <svg *ngIf=\"element.type == 'text'\" class=\"fill-current\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\" (click)='hidePassword()'>\n <path\n d=\"M12.81 4.36l-1.77 1.78a4 4 0 0 0-4.9 4.9l-2.76 2.75C2.06 12.79.96 11.49.2 10a11 11 0 0 1 12.6-5.64zm3.8 1.85c1.33 1 2.43 2.3 3.2 3.79a11 11 0 0 1-12.62 5.64l1.77-1.78a4 4 0 0 0 4.9-4.9l2.76-2.75zm-.25-3.99l1.42 1.42L3.64 17.78l-1.42-1.42L16.36 2.22z\" />\n </svg>\n </span>\n\n <span *ngIf=\"innerRightIcon && type != 'password'\"\n class=\"self-center px-2 {{ innerRightIconColor }} {{ onClickRightIcon ? 'cursor-pointer' : '' }}\"\n (click)=\"onClickRightIcon.emit()\">\n <ngt-svg class=\"text-xxs fill-current\" [src]='innerRightIcon'></ngt-svg>\n </span>\n </div>\n</div>\n\n<ng-container *ngIf=\"showCharactersLength && maxTotalCharsCount && !shining\">\n <p class=\"text-xxs mt-1\">\n {{ ngtTranslateService.ngtTextAreaRemainingCharacters }}:\n <span class=\"font-semibold\">{{ getRemainingCharacters() }}</span>\n </p>\n</ng-container>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<input *ngIf='componentReady' type=\"hidden\" [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n\n<ng-content></ng-content>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\" [minValue]='minValue' [minLength]='minLength'>\n</ngt-validation>\n", styles: [".div-loader{width:20px;height:20px;border:3px solid #a0aec038;border-top-color:#a0aec0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i11.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i12.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "component", type: i13.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }], viewProviders: [
705
- { provide: ControlContainer, useExisting: NgForm }
706
- ] });
707
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtInputComponent, decorators: [{
707
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgtInputComponent, decorators: [{
708
708
  type: Component,
709
709
  args: [{ selector: 'ngt-input', providers: [
710
710
  NgtMakeProvider(NgtInputComponent),
@@ -841,4 +841,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
841
841
  }], validatePhoneResult: [{
842
842
  type: Output
843
843
  }] } });
844
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1pbnB1dC9uZ3QtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWlucHV0L25ndC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sSUFBSSxFQUVKLFFBQVEsRUFFUixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVE1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZ0I1RixNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQXlFakQsWUFDWSxRQUFrQixFQUNsQixRQUFtQixFQUNuQixjQUFpQyxFQUdqQyxzQkFBOEMsRUFHL0MsYUFBK0IsRUFHOUIsZ0JBQWtDLEVBR2xDLG9CQUE4QyxFQUc5QyxrQkFBMEMsRUFHMUMsT0FBeUIsRUFHekIsVUFBK0IsRUFHL0IsUUFBMkIsRUFHNUIsbUJBQXdDO1FBRS9DLEtBQUssRUFBRSxDQUFDO1FBL0JBLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixt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O3NCQUFyQyxLQUFLO2dCQUNVLGtCQUFrQjtzQkFBakMsS0FBSztnQkFHVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsR0FBRztzQkFBbEIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUdVLG9CQUFvQjtzQkFBbkMsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBQ1Usd0JBQXdCO3NCQUF2QyxLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBRVcsZUFBZTtzQkFBL0IsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsbUJBQW1CO3NCQUFuQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIENvbnRyb2xDb250YWluZXIsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RCYXNlTmdNb2RlbCwgTmd0TWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYmFzZS9uZ3QtYmFzZS1uZy1tb2RlbCc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgYXBwbHlJbnB1dE1hc2ssIElucHV0TWFza0VudW0sIHJlbW92ZUlucHV0TWFzayB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5wdXQtbWFzay9pbnB1dC1tYXNrLmhlbHBlcic7XG5pbXBvcnQge1xuICAgIE5ndEh0dHBGaW5kRXhpc3RpbmdSZXNvdXJjZUludGVyZmFjZSxcbiAgICBOZ3RIdHRwRmluZEV4aXN0aW5nUmVzb3VyY2VSZXNwb25zZSxcbiAgICBOZ3RIdHRwUmVzb3VyY2VTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSwgTmd0SHR0cFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtaHR0cC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0VHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5ndFNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9uZ3Qtc2VjdGlvbi9uZ3Qtc2VjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtbW9kYWwvbmd0LW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3QtaW5wdXQuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0SW5wdXRDb21wb25lbnQpLFxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd0SW5wdXRDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKFwiZWxlbWVudFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8vIFZpc3VhbFxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIHNoaW5pbmc6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUaXRsZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dENvbG9yOiBzdHJpbmcgPSAndGV4dC1ncmVlbi01MDAnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbm5lckxlZnRJY29uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlubmVyTGVmdEljb25Db2xvcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbm5lclJpZ2h0SWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbm5lclJpZ2h0SWNvbkNvbG9yOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGRlY2ltYWxNYXNrUHJlY2lzaW9uOiBudW1iZXIgPSAyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Q2hhcmFjdGVyc0xlbmd0aDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB1cHBlcmNhc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tSW5uZXJDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlclJldmVyc2VZUG9zaXRpb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlckF1dG9YUmV2ZXJzZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvL0JlaGF2aW9yXG4gICAgQElucHV0KCkgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHNob3dSb3VuZGVkSWNvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIG1hc2s6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgZm9jdXM6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93Q2xlYXI6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGppdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdXNlSW5wdXRFdmVudDogYm9vbGVhbjtcblxuICAgIC8vVmFsaWRhdGlvbnNcbiAgICBASW5wdXQoKSBwdWJsaWMgZmluZEV4aXN0aW5nUmVzb3VyY2U6IE5ndEh0dHBGaW5kRXhpc3RpbmdSZXNvdXJjZUludGVyZmFjZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dQaG9uZVZhbGlkYXRpb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRlUGFzc3dvcmQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHBhc3N3b3JkYWJsZUlkOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBhc3N3b3JkUG9saWN5SWQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdW5pcXVlUmVzb3VyY2U6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWluVmFsdWU6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4VmFsdWU6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIG1pbkxlbmd0aDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXRjaDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZU9mOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRlTWluVmFsdWVPbk1hc2s6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGV4dGVybmFsU2VydmVyRGVwZW5kZW5jeTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tVmFsaWRhdG9yOiAoKSA9PiBBc3luY1ZhbGlkYXRvckZuO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsaWNrTGVmdEljb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsaWNrUmlnaHRJY29uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgdmFsaWRhdGVQaG9uZVJlc3VsdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHB1YmxpYyBtYXhUb3RhbENoYXJzQ291bnQ6IG51bWJlcjtcbiAgICBwdWJsaWMgZXhpc3RpbmdSZXNvdXJjZUlkOiBzdHJpbmc7XG4gICAgcHVibGljIGNvbXBvbmVudFJlYWR5OiBib29sZWFuO1xuICAgIHB1YmxpYyBpbnB1dFByb3BlcnRpZXM6IHtcbiAgICAgICAgaHRtbFR5cGU/OiBzdHJpbmc7XG4gICAgICAgIGxlbmd0aD86IG51bWJlcjtcbiAgICB9ID0ge307XG5cbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBlbWFpbFZhbGlkYXRvclRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIHBhc3N3b3JkVmFsaWRhdG9yVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgcGhvbmVWYWxpZGF0b3JUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSB1bmlxdWVWYWxpZGF0b3JUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSBzZWFyY2hFeGlzdGluZ1Jlc291cmNlVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcblxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpXG4gICAgICAgIHByaXZhdGUgbmd0U3R5bGl6YWJsZURpcmVjdGl2ZTogTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSxcblxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0Rm9ybUNvbXBvbmVudDogTmd0Rm9ybUNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFZhbGlkYXRpb25TZXJ2aWNlOiBOZ3RIdHRwVmFsaWRhdGlvblNlcnZpY2UsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RSZXNvdXJjZVNlcnZpY2U6IE5ndEh0dHBSZXNvdXJjZVNlcnZpY2UsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RGb3JtOiBOZ3RGb3JtQ29tcG9uZW50LFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0U2VjdGlvbjogTmd0U2VjdGlvbkNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndE1vZGFsOiBOZ3RNb2RhbENvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLm5ndEZvcm1Db21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hpbmluZyA9IHRoaXMubmd0Rm9ybUNvbXBvbmVudC5pc1NoaW5pbmcoKTtcblxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RGb3JtQ29tcG9uZW50Lm9uU2hpbmluZ0NoYW5nZS5zdWJzY3JpYmUoKHNoaW5pbmc6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUuZ2V0Tmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSBuZXcgTmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmd0U3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0SW5wdXQnLCB7XG4gICAgICAgICAgICBoOiAnaC0xMicsXG4gICAgICAgICAgICByb3VuZGVkOiAncm91bmRlZCcsXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXG4gICAgICAgICAgICBmb250OiAnZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICBib3JkZXI6ICdib3JkZXItZ3JheS00MDAgZm9jdXM6Ym9yZGVyLWdyYXktNzAwJyxcbiAgICAgICAgICAgICAgICBiZzogJ2JnLWJnLXdoaXRlIGZvY3VzOmJnLXdoaXRlJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiAndGV4dC1ncmF5LTgwMCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgYmUgaW5zaWRlIGEgPGZvcm0gI2Zvcm09J25nRm9ybSc+IHRhZyFcIiwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGNvbnRhaW4gYSBuYW1lIGF0dHJpYnV0ZSFcIiwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5nZXRFbGVtZW50VGl0bGUoKSB8fCB0aGlzLmdldEVsZW1lbnRUaXRsZSgpID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zZXR1cE1hc2tzKGNoYW5nZXMubWFzayA/IGNoYW5nZXMubWFzay5wcmV2aW91c1ZhbHVlIDogbnVsbCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubWF0Y2ggfHwgY2hhbmdlcy5pc1JlcXVpcmVkIHx8IGNoYW5nZXMudHlwZSB8fCBjaGFuZ2VzLm1hc2sgfHwgY2hhbmdlcy5taW5WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscygpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5yZW1vdmVNYXNrcyh0aGlzLmdldE5hdGl2ZVZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMubWFzayA9PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZ2V0TmF0aXZlVmFsdWUoKSB8fCAodGhpcy52YWxpZGF0ZU1pblZhbHVlT25NYXNrKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5hdGl2ZVZhbHVlID0gdGhpcy5nZXROYXRpdmVWYWx1ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIGxldCBuZ01vZGVsVmFsdWUgPSB0aGlzLnJlbW92ZU1hc2tzKG5hdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKG5hdGl2ZVZhbHVlICYmIG5nTW9kZWxWYWx1ZSAhPSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5DRUxMUEhPTkUgfHwgdGhpcy5tYXNrID09IElucHV0TWFza0VudW0uSU5URVJOQVRJT05BTF9QSE9ORSlcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmFsbG93UGhvbmVWYWxpZGF0aW9uICYmIHRoaXMudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQaG9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5nTW9kZWxWYWx1ZSA9IHRoaXMucmVtb3ZlTWFza3ModmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgbmdNb2RlbFZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgIT0gbmF0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlYWR5KSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0UmVzb3VyY2VTZXJ2aWNlICYmIHRoaXMuZmluZEV4aXN0aW5nUmVzb3VyY2UgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJJbnB1dChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XG5cbiAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXN0b3JlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1Bhc3N3b3JkKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC50eXBlID0gJ3RleHQnO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZVBhc3N3b3JkKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC50eXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldElucHV0UGFkZGluZ3MoKSB7XG4gICAgICAgIGxldCBwYWRkaW5nQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmlubmVyTGVmdEljb24gfHwgdGhpcy5jdXN0b21Jbm5lckNvbnRlbnRUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcGFkZGluZ0NsYXNzICs9ICdwbC0xMCBwci00ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWRkaW5nQ2xhc3MgKz0gJ3B4LTQgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlubmVyUmlnaHRJY29uIHx8IHRoaXMuYWxsb3dDbGVhciB8fCB0aGlzLnR5cGUgPT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dDbGVhciAmJiB0aGlzLnZhbHVlICYmICh0aGlzLmlubmVyUmlnaHRJY29uIHx8IHRoaXMudHlwZSA9PSAncGFzc3dvcmQnKSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdDbGFzcyArPSAncHItMTAgJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0NsYXNzICs9ICdwci04ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFkZGluZ0NsYXNzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmdDaGFyYWN0ZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubWF4VG90YWxDaGFyc0NvdW50IC0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhUb3RhbENoYXJzQ291bnQgLSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWF4VG90YWxDaGFyc0NvdW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNGb2N1cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzRGlzYWJsZWRCeVBhcmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbCAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB3YXRjaCA9IFwiY2hhbmdlXCI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmppdCkge1xuICAgICAgICAgICAgICAgIHdhdGNoICs9IFwiIGtleXVwIGtleWRvd24ga2V5cHJlc3NcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2F0Y2guc3BsaXQoJyAnKS5mb3JFYWNoKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZXZ0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVWYWx1ZSA9IHRoaXMucmVtb3ZlTWFza3ModGhpcy5nZXROYXRpdmVWYWx1ZSgpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSBuYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5hdGl2ZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID49IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhY2tzcGFjZSBhbmQgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9IDggJiYgZXZlbnQua2V5Q29kZSAhPSA0Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMubWF4VG90YWxDaGFyc0NvdW50ID0gdGhpcy5tYXhMZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5cHJlc3NcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoVmFsaWRhdG9yKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwUHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy50eXBlID09ICdlbWFpbCcpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5MZW5ndGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gJ2NucGotY3BmJyB8fCB0aGlzLm1hc2sgPT0gJ2NucGotY3BmLXJ1dCcgfHwgdGhpcy5tYXNrID09ICdjcGYnKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuY25wakNwZlZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gJ3RpbWUnKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMudGltZVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubWF0Y2hWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubWluVmFsdWVWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZU9mKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubXVsdGlwbGVPZlZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmV4dGVybmFsU2VydmVyRGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmV4dGVybmFsU2VydmVyRGVwZW5kZW5jeVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnVuaXF1ZVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy51bmlxdWVWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ2VtYWlsJyAmJiB0aGlzLmhhc0VtYWlsU2VydmljZVZhbGlkYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuZW1haWxWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ2xvZ2luJyAmJiB0aGlzLmhhc0VtYWlsU2VydmljZVZhbGlkYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuZW1haWxWYWxpZGF0b3IodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09ICdwYXNzd29yZCcgJiYgdGhpcy52YWxpZGF0ZVBhc3N3b3JkICYmIHRoaXMuaGFzUGFzc3dvcmRWYWxpZGF0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLnBhc3N3b3JkVmFsaWRhdG9yKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXN0b21WYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmN1c3RvbVZhbGlkYXRvcigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwTWFza3MocHJldmlvdXNNYXNrPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2sgIT0gcHJldmlvdXNNYXNrICYmICF0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIHJlbW92ZUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXNrcyA9IHtcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLkNQRl06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJzk5OS45OTkuOTk5LTk5J10sXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkhvdmVyOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLkNOUEpdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWyc5OS45OTkuOTk5Lzk5OTktOTknXSxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ1VJVF06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJzk5LTk5OTk5OTk5LTknXSxcbiAgICAgICAgICAgICAgICBjbGVhck1hc2tPbkxvc3RGb2N1czogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5SVVRdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWyc5OTk5OTk5OTk5OTknXSxcbiAgICAgICAgICAgICAgICBjbGVhck1hc2tPbkxvc3RGb2N1czogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5DUEZfQ05QSl9SVVRdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWyc5OTkuOTk5Ljk5OS05OScsICc5OTk5OTk5OTk5OTknLCAnOTkuOTk5Ljk5OS85OTk5LTk5J10sXG4gICAgICAgICAgICAgICAga2VlcFN0YXRpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ1BGX0NOUEpdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWyc5OTkuOTk5Ljk5OS05OScsICc5OS45OTkuOTk5Lzk5OTktOTknXSxcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3dNYXNrT25Ib3ZlcjogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5ERUNJTUFMXToge1xuICAgICAgICAgICAgICAgIGRpZ2l0czogdGhpcy5kZWNpbWFsTWFza1ByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogJy4nLFxuICAgICAgICAgICAgICAgIHJhZGl4UG9pbnQ6ICcsJyxcbiAgICAgICAgICAgICAgICBhdXRvR3JvdXA6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVwZWF0OiAxNixcbiAgICAgICAgICAgICAgICByaWdodEFsaWduOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtYXg6IHRoaXMubWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkhvdmVyOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLkNFTExQSE9ORV06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJyg5OSkgOTk5LTk5OScsICcoOTkpIDk5OTktOTk5OScsICcoOTkpIDk5OTk5LTk5OTknXSxcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3dNYXNrT25Ib3ZlcjogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5JTlRFUk5BVElPTkFMX1BIT05FXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnKzk5OSA5OSA5OTktOTk5JywgJys5OSAoOTkpIDk5OTktOTk5OScsICcrOTkgKDk5KSA5OTk5OS05OTk5JywgJys5OTkgKDk5KSA5OTk5LTk5OTknLCAnKzk5OSAoOTkpIDk5OTk5LTk5OTknXSxcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3dNYXNrT25Ib3ZlcjogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5QTEFURV06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJ0FBQS05Jjk5J10sXG4gICAgICAgICAgICAgICAga2VlcFN0YXRpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ0VQXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnOTk5OTktOTk5J10sXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkhvdmVyOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLklOVEVHRVJdOiB7XG4gICAgICAgICAgICAgICAgbWF4OiB0aGlzLm1heFZhbHVlLFxuICAgICAgICAgICAgICAgIG1pbjogdGhpcy52YWxpZGF0ZU1pblZhbHVlT25NYXNrID8gdGhpcy5taW5WYWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByaWdodEFsaWduOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uTlVNRVJJQ19TVFJJTkddOiB7XG4gICAgICAgICAgICAgICAgcmVnZXg6IFwiWzAtOV0qXCIsXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkhvdmVyOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLlRJTUVdOiAnOTk6OTknLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5ERUNJTUFMKSB7XG4gICAgICAgICAgICBhcHBseUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgSW5wdXRNYXNrRW51bS5ERUNJTUFMLCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5JTlRFR0VSKSB7XG4gICAgICAgICAgICBhcHBseUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgSW5wdXRNYXNrRW51bS5JTlRFR0VSLCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5SW5wdXRNYXNrKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBQcm9wZXJ0aWVzKCkge1xuICAgICAgICBsZXQgcHJvcHMgPSB7XG4gICAgICAgICAgICBzaG9ydFRleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAzMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAxMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb25nVGV4dDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDE1MFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4dHJhTG9uZ1RleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAzMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXN0b21UZXh0OiB7XG4gICAgICAgICAgICAgICAgaHRtbFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogdGhpcy5tYXhMZW5ndGhcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAxNTBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbWFpbDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDEwMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgaHRtbFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogOSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy50eXBlIGluIHByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0UHJvcGVydGllcyA9IHByb3BzW3RoaXMudHlwZV07XG4gICAgICAgICAgICB0aGlzLm1heExlbmd0aCA9IHRoaXMuaW5wdXRQcm9wZXJ0aWVzLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlR5cGUgW1wiICsgdGhpcy50eXBlICsgXCJdIGlzIG5vdCBhIHZhbGlkIHRhaWwtZm9ybS1pbnB1dCB0eXBlIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1pblZhbHVlVmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKSA8IHRoaXMubWluVmFsdWUgPyB7ICdtaW5WYWx1ZSc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtdWx0aXBsZU9mVmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNvbnRyb2wudmFsdWUgJSB0aGlzLm11bHRpcGxlT2YgIT09IDApID8geyAnbXVsdGlwbGVPZic6IHRydWUgfSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlcm5hbFNlcnZlckRlcGVuZGVuY3lWYWxpZGF0b3IoKSB7XG4gICAgICAgIC8vIFRPRE86IFZhbGlkYXIgdGVtcG8gZGUgcmVxdWlzacOnw6NvXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiAhY29udHJvbC52YWx1ZSA/IHsgJ2V4dGVybmFsU2VydmVyRGVwZW5kZW5jeSc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0aW1lVmFsaWRhdG9yKCkge1xuICAgICAgICBjb25zdCByZWdleEV4cCA9IG5ldyBSZWdFeHAoJ14oMFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kJyk7XG5cbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2V4RXhwLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ3RpbWUnOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY25wakNwZlZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA8PSAxMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRvckNQRihjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAnY3BmJzogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA9PSAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiB0aGlzLnZhbGlkYXRvckNOUEooY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2NucGonOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWF0Y2hWYWxpZGF0b3IoKSB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSB0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJ21hdGNoJzogdHJ1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtYWlsVmFsaWRhdG9yKGlzTG9naW5WYWxpZGF0aW9uOiBib29sZWFuID0gZmFsc2UpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVtYWlsVmFsaWRhdG9yVGltZW91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmVtYWlsVmFsaWRhdG9yVGltZW91dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1haWxWYWxpZGF0b3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ndFZhbGlkYXRpb25TZXJ2aWNlLmVtYWlsVmFsaWRhdGlvbih0aGlzLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZTogTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dpblZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UudmFsaWQgPyB7ICdsb2dpbic6IHRydWUgfSA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS52YWxpZCA/IG51bGwgOiB7ICdlbWFpbCc6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhc3N3b3JkVmFsaWRhdG9yKCk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFzc3dvcmRWYWxpZGF0b3JUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucGFzc3dvcmRWYWxpZGF0b3JUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZFZhbGlkYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2UucGFzc3dvcmRWYWxpZGF0aW9uKHRoaXMudmFsdWUsIHRoaXMucGFzc3dvcmRhYmxlSWQsIHRoaXMucGFzc3dvcmRQb2xpY3lJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IE5ndEh0dHBWYWxpZGF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS52YWxpZCA/IG51bGwgOiB7ICdpbnZhbGlkX3Bhc3N3b3JkJzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZWFyY2hFeGlzdGluZ1Jlc291cmNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoRXhpc3RpbmdSZXNvdXJjZVRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmluZEV4aXN0aW5nUmVzb3VyY2UudmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgICAgICB0aGlzLm5ndFJlc291cmNlU2VydmljZS5maW5kRXhpc3RpbmcodGhpcy5maW5kRXhpc3RpbmdSZXNvdXJjZSlcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IE5ndEh0dHBGaW5kRXhpc3RpbmdSZXNvdXJjZVJlc3BvbnNlKSA9PiB0aGlzLmV4aXN0aW5nUmVzb3VyY2VJZCA9IHJlc3BvbnNlLmlkKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLmV4aXN0aW5nUmVzb3VyY2VJZCA9IG51bGwpXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVQaG9uZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMucGhvbmVWYWxpZGF0b3JUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5waG9uZVZhbGlkYXRvclRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5waG9uZVZhbGlkYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2UucGhvbmVWYWxpZGF0aW9uKHRoaXMudmFsdWUpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHRoaXMudmFsaWRhdGVQaG9uZVJlc3VsdC5lbWl0KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5pcXVlVmFsaWRhdG9yKCk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICBpZiAoIXRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluIG9yZGVyIHRvIHVzZSB1bmlxdWUgdmFsaWRhdGlvbiB5b3UgbXVzdCBwcm92aWRlIGEgaW1wbGVtZW50YXRpb24gZm9yIE5ndEh0dHBWYWxpZGF0aW9uU2VydmljZSBjbGFzcyFcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudW5pcXVlVmFsaWRhdG9yVGltZW91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnVuaXF1ZVZhbGlkYXRvclRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnVuaXF1ZVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsaWRhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZS51bmlxdWUodGhpcy51bmlxdWVSZXNvdXJjZSwgdGhpcy52YWx1ZSkudGhlbigocmVzcG9uc2U6IE5ndEh0dHBWYWxpZGF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UudmFsaWQgPyBudWxsIDogeyAndW5pcXVlJzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3JDTlBKKHZhbHVlKSB7XG4gICAgICAgIGxldCBiID0gWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xuXG4gICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZF0vZywgXCJcIikpLmxlbmd0aCAhPSAxNCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKC8wezE0fS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBuICs9IHZhbHVlW2ldICogYlsrK2ldKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWVbMTJdICE9ICgoKG4gJT0gMTEpIDwgMikgPyAwIDogMTEgLSBuKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbiA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTI7IG4gKz0gdmFsdWVbaV0gKiBiW2krK10pIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZVsxM10gIT0gKCgobiAlPSAxMSkgPCAyKSA/IDAgOiAxMSAtIG4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3JDUEYodmFsdWUpIHtcbiAgICAgICAgbGV0IG51bWVyb3MsIGRpZ2l0b3MsIHNvbWEsIGksIHJlc3VsdGFkbywgZGlnaXRvc19pZ3VhaXM7XG5cbiAgICAgICAgZGlnaXRvc19pZ3VhaXMgPSAxO1xuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmNoYXJBdChpKSAhPSB2YWx1ZS5jaGFyQXQoaSArIDEpKSB7XG4gICAgICAgICAgICAgICAgZGlnaXRvc19pZ3VhaXMgPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWdpdG9zX2lndWFpcykge1xuICAgICAgICAgICAgbnVtZXJvcyA9IHZhbHVlLnN1YnN0cmluZygwLCA5KTtcbiAgICAgICAgICAgIGRpZ2l0b3MgPSB2YWx1ZS5zdWJzdHJpbmcoOSk7XG4gICAgICAgICAgICBzb21hID0gMDtcblxuICAgICAgICAgICAgZm9yIChpID0gMTA7IGkgPiAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzb21hICs9IG51bWVyb3MuY2hhckF0KDEwIC0gaSkgKiBpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHRhZG8gPSBzb21hICUgMTEgPCAyID8gMCA6IDExIC0gc29tYSAlIDExO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0YWRvICE9IGRpZ2l0b3MuY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBudW1lcm9zID0gdmFsdWUuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgICAgIHNvbWEgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxMTsgaSA+IDE7IGktLSkge1xuICAgICAgICAgICAgICAgIHNvbWEgKz0gbnVtZXJvcy5jaGFyQXQoMTEgLSBpKSAqIGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHRhZG8gIT0gZGlnaXRvcy5jaGFyQXQoMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROYXRpdmVWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RWxlbWVudFRpdGxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGl0bGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVNYXNrcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gXCJkZWNpbWFsXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlICsgXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwuL2csICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hc2sgPT0gXCJjbnBqLWNwZlwiIHx8IHRoaXMubWFzayA9PSBcImNwZlwiIHx8IHRoaXMubWFzayA9PSBcImNucGpcIiB8fCB0aGlzLm1hc2sgPT0gXCJjbnBqLWNwZi1ydXRcIiB8fCB0aGlzLm1hc2sgPT0gXCJjdWl0XCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlICsgXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW15cXGRdL2csICcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMubWFzayA9PSBJbnB1dE1hc2tFbnVtLkNFTExQSE9ORVxuICAgICAgICAgICAgfHwgdGhpcy5tYXNrID09IElucHV0TWFza0VudW0uSU5URVJOQVRJT05BTF9QSE9ORVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlICsgXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnKCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcpJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJyAnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnICcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCctJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJysnLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNFbWFpbFNlcnZpY2VWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2U/LmVtYWlsVmFsaWRhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1Bhc3N3b3JkVmFsaWRhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLm5ndFZhbGlkYXRpb25TZXJ2aWNlPy5wYXNzd29yZFZhbGlkYXRpb24gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Rpc2FibGVkQnlQYXJlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ndEZvcm0/LmlzRGlzYWJsZWRcbiAgICAgICAgICAgIHx8IHRoaXMubmd0U2VjdGlvbj8uaXNEaXNhYmxlZFxuICAgICAgICAgICAgfHwgdGhpcy5uZ3RNb2RhbD8uaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVNYXNrcyh0aGlzLmdldE5hdGl2ZVZhbHVlKCkpICE9PSB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJtYi0yIGZsZXgge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAndGV4dCcsICdmb250J10pIH19XCIgW2hpZGRlbl09J3NoaW5pbmcnPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gKm5nSWY9XCJpc1JlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIlxuICAgICAgICBbaGVscGVyUmV2ZXJzZVlQb3NpdGlvbl09XCJoZWxwZXJSZXZlcnNlWVBvc2l0aW9uXCIgW2F1dG9YUmV2ZXJzZV09XCJoZWxwZXJBdXRvWFJldmVyc2VcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJoZWxwVGV4dFwiPjwvc3Bhbj5cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48ZGl2IGNsYXNzPVwie3sgc2hpbmluZyA/ICdoaWRkZW4nIDogJ2ZsZXggcmVsYXRpdmUnfX1cIj5cbiAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGJvcmRlciBhcHBlYXJhbmNlLW5vbmUgZm9jdXM6b3V0bGluZS1ub25lIGxlYWRpbmctdGlnaHQgdy1mdWxsIHt7IGdldElucHV0UGFkZGluZ3MoKSB9fSB7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCcsICd0ZXh0JywgJ2NvbG9yLmJvcmRlcicsICdjb2xvci5iZycsICdjb2xvci50ZXh0JywgJ3JvdW5kZWQnLCAnY3Vyc29yJ10pIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIiBbcmVhZG9ubHldPVwiaXNSZWFkb25seSB8fCBsb2FkaW5nXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3N0eWxlXT1cInVwcGVyY2FzZSA/ICd0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIWltcG9ydGFudCc6JydcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2lucHV0LWhhcy1lcnJvciBib3JkZXItcmVkLTcwMCc6IGZvcm1Db250cm9sPy5lcnJvcnMgJiYgKGZvcm1Db250cm9sPy5kaXJ0eSB8fCAoZm9ybUNvbnRhaW5lciAmJiBmb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSkpfVwiXG4gICAgICAgIFthdHRyLnR5cGVdPVwiaW5wdXRQcm9wZXJ0aWVzLmh0bWxUeXBlXCIgKG1vdXNlbGVhdmUpPVwicmVzdG9yZVBsYWNlaG9sZGVyKClcIiAoZm9jdXNvdXQpPVwicmVzdG9yZVBsYWNlaG9sZGVyKClcIlxuICAgICAgICAoaW5wdXQpPVwidXNlSW5wdXRFdmVudCA/IG9uTmF0aXZlQ2hhbmdlKCkgOiBudWxsXCIgKGNoYW5nZSk9XCIhdXNlSW5wdXRFdmVudCA/IG9uTmF0aXZlQ2hhbmdlKCkgOiBudWxsXCIgI2VsZW1lbnQ+XG4gICAgPHNwYW4gKm5nSWY9XCJpbm5lckxlZnRJY29uXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBzZWxmLWNlbnRlciBweC0yIHt7IGlubmVyTGVmdEljb25Db2xvciB9fSB7eyBvbkNsaWNrTGVmdEljb24gPyAnY3Vyc29yLXBvaW50ZXInIDogJycgfX1cIlxuICAgICAgICAoY2xpY2spPVwib25DbGlja0xlZnRJY29uLmVtaXQoKVwiPlxuXG4gICAgICAgIDxuZ3Qtc3ZnICpuZ0lmPVwiIXNob3dSb3VuZGVkSWNvblwiIGNsYXNzPVwidGV4dC14cyBmaWxsLWN1cnJlbnRcIiBbc3JjXT0naW5uZXJMZWZ0SWNvbic+PC9uZ3Qtc3ZnPlxuICAgICAgICA8aW1nICpuZ0lmPVwic2hvd1JvdW5kZWRJY29uXCIgY2xhc3M9XCJyb3VuZGVkLWZ1bGwgaC00XCIgW3NyY109J2lubmVyTGVmdEljb24nPlxuICAgIDwvc3Bhbj5cblxuICAgIDxkaXYgKm5nSWY9XCJjdXN0b21Jbm5lckNvbnRlbnRUZW1wbGF0ZVwiIGNsYXNzPVwiYWJzb2x1dGUgc2VsZi1jZW50ZXIgcHgtMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbUlubmVyQ29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBhYnNvbHV0ZSBoLWZ1bGwganVzdGlmeS1lbmQgcmlnaHQtMCB3LWF1dG9cIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhZGlzYWJsZWQoKSAmJiBhbGxvd0NsZWFyICYmIHZhbHVlICYmICFsb2FkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXIgcmlnaHQtMCBweC0yIHRleHQtcmVkLTQwMCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9J2NsZWFySW5wdXQoJGV2ZW50KSc+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50IHNlbGYtY2VudGVyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjEgMTcuMmwtNS4zLTUuMyA1LjMtNS4zLTEuOC0xLjgtNS4zIDUuNC01LjMtNS4zLTEuOCAxLjcgNS4zIDUuMy01LjMgNS4zTDYuNyAxOWw1LjMtNS4zIDUuMyA1LjMgMS44LTEuOHpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInNlbGYtY2VudGVyIHJpZ2h0LTAgcHgtMiB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWxvYWRlclwiPjwvZGl2PlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlID09ICdwYXNzd29yZCcgJiYgdmFsdWVcIiBjbGFzcz1cInNlbGYtY2VudGVyIHB4LTIgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJlbGVtZW50LnR5cGUgPT0gJ3Bhc3N3b3JkJ1wiIGNsYXNzPVwiZmlsbC1jdXJyZW50XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIChjbGljayk9J3Nob3dQYXNzd29yZCgpJz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTS4yIDEwYTExIDExIDAgMCAxIDE5LjYgMEExMSAxMSAwIDAgMSAuMiAxMHptOS44IDRhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4em0wLTJhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0elwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImVsZW1lbnQudHlwZSA9PSAndGV4dCdcIiBjbGFzcz1cImZpbGwtY3VycmVudFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiAoY2xpY2spPSdoaWRlUGFzc3dvcmQoKSc+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi44MSA0LjM2bC0xLjc3IDEuNzhhNCA0IDAgMCAwLTQuOSA0LjlsLTIuNzYgMi43NUMyLjA2IDEyLjc5Ljk2IDExLjQ5LjIgMTBhMTEgMTEgMCAwIDEgMTIuNi01LjY0em0zLjggMS44NWMxLjMzIDEgMi40MyAyLjMgMy4yIDMuNzlhMTEgMTEgMCAwIDEtMTIuNjIgNS42NGwxLjc3LTEuNzhhNCA0IDAgMCAwIDQuOS00LjlsMi43Ni0yLjc1em0tLjI1LTMuOTlsMS40MiAxLjQyTDMuNjQgMTcuNzhsLTEuNDItMS40MkwxNi4zNiAyLjIyelwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaW5uZXJSaWdodEljb24gJiYgdHlwZSAhPSAncGFzc3dvcmQnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXIgcHgtMiB7eyBpbm5lclJpZ2h0SWNvbkNvbG9yIH19ICB7eyBvbkNsaWNrUmlnaHRJY29uID8gJ2N1cnNvci1wb2ludGVyJyA6ICcnIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUmlnaHRJY29uLmVtaXQoKVwiPlxuICAgICAgICAgICAgPG5ndC1zdmcgY2xhc3M9XCJ0ZXh0LXh4cyBmaWxsLWN1cnJlbnRcIiBbc3JjXT0naW5uZXJSaWdodEljb24nPjwvbmd0LXN2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q2hhcmFjdGVyc0xlbmd0aCAmJiBtYXhUb3RhbENoYXJzQ291bnQgJiYgIXNoaW5pbmdcIj5cbiAgICA8cCBjbGFzcz1cInRleHQteHhzIG10LTFcIj5cbiAgICAgICAge3sgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RUZXh0QXJlYVJlbWFpbmluZ0NoYXJhY3RlcnMgfX06XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IGdldFJlbWFpbmluZ0NoYXJhY3RlcnMoKSB9fTwvc3Bhbj5cbiAgICA8L3A+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnXSkgfX0gdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48aW5wdXQgKm5nSWY9J2NvbXBvbmVudFJlYWR5JyB0eXBlPVwiaGlkZGVuXCIgW25nTW9kZWxdPVwidmFsdWVcIiBbbmFtZV09XCJuYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCIgW21pblZhbHVlXT0nbWluVmFsdWUnIFttaW5MZW5ndGhdPSdtaW5MZW5ndGgnPlxuPC9uZ3QtdmFsaWRhdGlvbj5cbiJdfQ==
844
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1pbnB1dC9uZ3QtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWlucHV0L25ndC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRU4sSUFBSSxFQUVKLFFBQVEsRUFFUixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHekcsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVE1RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZ0I1RixNQUFNLE9BQU8saUJBQWtCLFNBQVEsY0FBYztJQXlFakQsWUFDWSxRQUFrQixFQUNsQixRQUFtQixFQUNuQixjQUFpQyxFQUdqQyxzQkFBOEMsRUFHL0MsYUFBK0IsRUFHOUIsZ0JBQWtDLEVBR2xDLG9CQUE4QyxFQUc5QyxrQkFBMEMsRUFHMUMsT0FBeUIsRUFHekIsVUFBK0IsRUFHL0IsUUFBMkIsRUFHNUIsbUJBQXdDO1FBRS9DLEtBQUssRUFBRSxDQUFDO1FBL0JBLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixt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O3NCQUFyQyxLQUFLO2dCQUNVLGtCQUFrQjtzQkFBakMsS0FBSztnQkFHVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsR0FBRztzQkFBbEIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUdVLG9CQUFvQjtzQkFBbkMsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBQ1Usd0JBQXdCO3NCQUF2QyxLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBRVcsZUFBZTtzQkFBL0IsTUFBTTtnQkFDVSxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsbUJBQW1CO3NCQUFuQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIENvbnRyb2xDb250YWluZXIsIE5nRm9ybSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RCYXNlTmdNb2RlbCwgTmd0TWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYmFzZS9uZ3QtYmFzZS1uZy1tb2RlbCc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgYXBwbHlJbnB1dE1hc2ssIElucHV0TWFza0VudW0sIHJlbW92ZUlucHV0TWFzayB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5wdXQtbWFzay9pbnB1dC1tYXNrLmhlbHBlcic7XG5pbXBvcnQge1xuICAgIE5ndEh0dHBGaW5kRXhpc3RpbmdSZXNvdXJjZUludGVyZmFjZSxcbiAgICBOZ3RIdHRwRmluZEV4aXN0aW5nUmVzb3VyY2VSZXNwb25zZSxcbiAgICBOZ3RIdHRwUmVzb3VyY2VTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSwgTmd0SHR0cFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtaHR0cC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0VHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd0LXN0eWxpemFibGUvbmd0LXN0eWxpemFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5ndFNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9uZ3Qtc2VjdGlvbi9uZ3Qtc2VjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtbW9kYWwvbmd0LW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3QtaW5wdXQuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0SW5wdXRDb21wb25lbnQpLFxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd0SW5wdXRDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKFwiZWxlbWVudFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8vIFZpc3VhbFxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIHNoaW5pbmc6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUaXRsZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dENvbG9yOiBzdHJpbmcgPSAndGV4dC1ncmVlbi01MDAnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbm5lckxlZnRJY29uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGlubmVyTGVmdEljb25Db2xvcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbm5lclJpZ2h0SWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbm5lclJpZ2h0SWNvbkNvbG9yOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGRlY2ltYWxNYXNrUHJlY2lzaW9uOiBudW1iZXIgPSAyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Q2hhcmFjdGVyc0xlbmd0aDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB1cHBlcmNhc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tSW5uZXJDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlclJldmVyc2VZUG9zaXRpb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlckF1dG9YUmV2ZXJzZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvL0JlaGF2aW9yXG4gICAgQElucHV0KCkgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHNob3dSb3VuZGVkSWNvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIG1hc2s6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgZm9jdXM6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93Q2xlYXI6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGppdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdXNlSW5wdXRFdmVudDogYm9vbGVhbjtcblxuICAgIC8vVmFsaWRhdGlvbnNcbiAgICBASW5wdXQoKSBwdWJsaWMgZmluZEV4aXN0aW5nUmVzb3VyY2U6IE5ndEh0dHBGaW5kRXhpc3RpbmdSZXNvdXJjZUludGVyZmFjZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dQaG9uZVZhbGlkYXRpb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRlUGFzc3dvcmQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIHBhc3N3b3JkYWJsZUlkOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBhc3N3b3JkUG9saWN5SWQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgdW5pcXVlUmVzb3VyY2U6IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWluVmFsdWU6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4VmFsdWU6IG51bWJlcjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIG1pbkxlbmd0aDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXRjaDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZU9mOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIHZhbGlkYXRlTWluVmFsdWVPbk1hc2s6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGV4dGVybmFsU2VydmVyRGVwZW5kZW5jeTogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tVmFsaWRhdG9yOiAoKSA9PiBBc3luY1ZhbGlkYXRvckZuO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsaWNrTGVmdEljb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsaWNrUmlnaHRJY29uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgdmFsaWRhdGVQaG9uZVJlc3VsdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHB1YmxpYyBtYXhUb3RhbENoYXJzQ291bnQ6IG51bWJlcjtcbiAgICBwdWJsaWMgZXhpc3RpbmdSZXNvdXJjZUlkOiBzdHJpbmc7XG4gICAgcHVibGljIGNvbXBvbmVudFJlYWR5OiBib29sZWFuO1xuICAgIHB1YmxpYyBpbnB1dFByb3BlcnRpZXM6IHtcbiAgICAgICAgaHRtbFR5cGU/OiBzdHJpbmc7XG4gICAgICAgIGxlbmd0aD86IG51bWJlcjtcbiAgICB9ID0ge307XG5cbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBlbWFpbFZhbGlkYXRvclRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIHBhc3N3b3JkVmFsaWRhdG9yVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgcGhvbmVWYWxpZGF0b3JUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSB1bmlxdWVWYWxpZGF0b3JUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSBzZWFyY2hFeGlzdGluZ1Jlc291cmNlVGltZW91dDogYW55O1xuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcblxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpXG4gICAgICAgIHByaXZhdGUgbmd0U3R5bGl6YWJsZURpcmVjdGl2ZTogTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSxcblxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0Rm9ybUNvbXBvbmVudDogTmd0Rm9ybUNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFZhbGlkYXRpb25TZXJ2aWNlOiBOZ3RIdHRwVmFsaWRhdGlvblNlcnZpY2UsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RSZXNvdXJjZVNlcnZpY2U6IE5ndEh0dHBSZXNvdXJjZVNlcnZpY2UsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RGb3JtOiBOZ3RGb3JtQ29tcG9uZW50LFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0U2VjdGlvbjogTmd0U2VjdGlvbkNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndE1vZGFsOiBOZ3RNb2RhbENvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLm5ndEZvcm1Db21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hpbmluZyA9IHRoaXMubmd0Rm9ybUNvbXBvbmVudC5pc1NoaW5pbmcoKTtcblxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RGb3JtQ29tcG9uZW50Lm9uU2hpbmluZ0NoYW5nZS5zdWJzY3JpYmUoKHNoaW5pbmc6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUuZ2V0Tmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSBuZXcgTmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmd0U3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0SW5wdXQnLCB7XG4gICAgICAgICAgICBoOiAnaC0xMicsXG4gICAgICAgICAgICByb3VuZGVkOiAncm91bmRlZCcsXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXG4gICAgICAgICAgICBmb250OiAnZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgICAgICBib3JkZXI6ICdib3JkZXItZ3JheS00MDAgZm9jdXM6Ym9yZGVyLWdyYXktNzAwJyxcbiAgICAgICAgICAgICAgICBiZzogJ2JnLWJnLXdoaXRlIGZvY3VzOmJnLXdoaXRlJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiAndGV4dC1ncmF5LTgwMCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgYmUgaW5zaWRlIGEgPGZvcm0gI2Zvcm09J25nRm9ybSc+IHRhZyFcIiwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGNvbnRhaW4gYSBuYW1lIGF0dHJpYnV0ZSFcIiwgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5nZXRFbGVtZW50VGl0bGUoKSB8fCB0aGlzLmdldEVsZW1lbnRUaXRsZSgpID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zZXR1cE1hc2tzKGNoYW5nZXMubWFzayA/IGNoYW5nZXMubWFzay5wcmV2aW91c1ZhbHVlIDogbnVsbCk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubWF0Y2ggfHwgY2hhbmdlcy5pc1JlcXVpcmVkIHx8IGNoYW5nZXMudHlwZSB8fCBjaGFuZ2VzLm1hc2sgfHwgY2hhbmdlcy5taW5WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscygpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5yZW1vdmVNYXNrcyh0aGlzLmdldE5hdGl2ZVZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMubWFzayA9PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZ2V0TmF0aXZlVmFsdWUoKSB8fCAodGhpcy52YWxpZGF0ZU1pblZhbHVlT25NYXNrKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5hdGl2ZVZhbHVlID0gdGhpcy5nZXROYXRpdmVWYWx1ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIGxldCBuZ01vZGVsVmFsdWUgPSB0aGlzLnJlbW92ZU1hc2tzKG5hdGl2ZVZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKG5hdGl2ZVZhbHVlICYmIG5nTW9kZWxWYWx1ZSAhPSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5DRUxMUEhPTkUgfHwgdGhpcy5tYXNrID09IElucHV0TWFza0VudW0uSU5URVJOQVRJT05BTF9QSE9ORSlcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmFsbG93UGhvbmVWYWxpZGF0aW9uICYmIHRoaXMudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQaG9uZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5nTW9kZWxWYWx1ZSA9IHRoaXMucmVtb3ZlTWFza3ModmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgbmdNb2RlbFZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgIT0gbmF0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5nTW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlYWR5KSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0UmVzb3VyY2VTZXJ2aWNlICYmIHRoaXMuZmluZEV4aXN0aW5nUmVzb3VyY2UgJiYgdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJJbnB1dChldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XG5cbiAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXN0b3JlUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1Bhc3N3b3JkKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC50eXBlID0gJ3RleHQnO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZVBhc3N3b3JkKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC50eXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldElucHV0UGFkZGluZ3MoKSB7XG4gICAgICAgIGxldCBwYWRkaW5nQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmlubmVyTGVmdEljb24gfHwgdGhpcy5jdXN0b21Jbm5lckNvbnRlbnRUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcGFkZGluZ0NsYXNzICs9ICdwbC0xMCBwci00ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWRkaW5nQ2xhc3MgKz0gJ3B4LTQgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlubmVyUmlnaHRJY29uIHx8IHRoaXMuYWxsb3dDbGVhciB8fCB0aGlzLnR5cGUgPT0gJ3Bhc3N3b3JkJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dDbGVhciAmJiB0aGlzLnZhbHVlICYmICh0aGlzLmlubmVyUmlnaHRJY29uIHx8IHRoaXMudHlwZSA9PSAncGFzc3dvcmQnKSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmdDbGFzcyArPSAncHItMTAgJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZ0NsYXNzICs9ICdwci04ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFkZGluZ0NsYXNzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSZW1haW5pbmdDaGFyYWN0ZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubWF4VG90YWxDaGFyc0NvdW50IC0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhUb3RhbENoYXJzQ291bnQgLSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWF4VG90YWxDaGFyc0NvdW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNGb2N1cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzRGlzYWJsZWRCeVBhcmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbXBvbmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbCAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB3YXRjaCA9IFwiY2hhbmdlXCI7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmppdCkge1xuICAgICAgICAgICAgICAgIHdhdGNoICs9IFwiIGtleXVwIGtleWRvd24ga2V5cHJlc3NcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2F0Y2guc3BsaXQoJyAnKS5mb3JFYWNoKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZXZ0LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuYXRpdmVWYWx1ZSA9IHRoaXMucmVtb3ZlTWFza3ModGhpcy5nZXROYXRpdmVWYWx1ZSgpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSBuYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5hdGl2ZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiYgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoID49IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJhY2tzcGFjZSBhbmQgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlICE9IDggJiYgZXZlbnQua2V5Q29kZSAhPSA0Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMubWF4VG90YWxDaGFyc0NvdW50ID0gdGhpcy5tYXhMZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5cHJlc3NcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoVmFsaWRhdG9yKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwUHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy50eXBlID09ICdlbWFpbCcpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5lbWFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4TGVuZ3RoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGgpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5MZW5ndGgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gJ2NucGotY3BmJyB8fCB0aGlzLm1hc2sgPT0gJ2NucGotY3BmLXJ1dCcgfHwgdGhpcy5tYXNrID09ICdjcGYnKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuY25wakNwZlZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gJ3RpbWUnKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMudGltZVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubWF0Y2hWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubWluVmFsdWVWYWxpZGF0b3IoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZU9mKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMubXVsdGlwbGVPZlZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmV4dGVybmFsU2VydmVyRGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmV4dGVybmFsU2VydmVyRGVwZW5kZW5jeVZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcblxuICAgICAgICAgICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnVuaXF1ZVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy51bmlxdWVWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ2VtYWlsJyAmJiB0aGlzLmhhc0VtYWlsU2VydmljZVZhbGlkYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuZW1haWxWYWxpZGF0b3IoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ2xvZ2luJyAmJiB0aGlzLmhhc0VtYWlsU2VydmljZVZhbGlkYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuZW1haWxWYWxpZGF0b3IodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09ICdwYXNzd29yZCcgJiYgdGhpcy52YWxpZGF0ZVBhc3N3b3JkICYmIHRoaXMuaGFzUGFzc3dvcmRWYWxpZGF0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLnBhc3N3b3JkVmFsaWRhdG9yKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXN0b21WYWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmN1c3RvbVZhbGlkYXRvcigpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwTWFza3MocHJldmlvdXNNYXNrPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2sgIT0gcHJldmlvdXNNYXNrICYmICF0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIHJlbW92ZUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXNrcyA9IHtcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLkNQRl06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJzk5OS45OTkuOTk5LTk5J10sXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkhvdmVyOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLkNOUEpdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWyc5OS45OTkuOTk5Lzk5OTktOTknXSxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ1VJVF06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJzk5LTk5OTk5OTk5LTknXSxcbiAgICAgICAgICAgICAgICBjbGVhck1hc2tPbkxvc3RGb2N1czogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5SVVRdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWyc5OTk5OTk5OTk5OTknXSxcbiAgICAgICAgICAgICAgICBjbGVhck1hc2tPbkxvc3RGb2N1czogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5DUEZfQ05QSl9SVVRdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWyc5OTkuOTk5Ljk5OS05OScsICc5OTk5OTk5OTk5OTknLCAnOTkuOTk5Ljk5OS85OTk5LTk5J10sXG4gICAgICAgICAgICAgICAga2VlcFN0YXRpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ1BGX0NOUEpdOiB7XG4gICAgICAgICAgICAgICAgbWFzazogWyc5OTkuOTk5Ljk5OS05OScsICc5OS45OTkuOTk5Lzk5OTktOTknXSxcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3dNYXNrT25Ib3ZlcjogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5ERUNJTUFMXToge1xuICAgICAgICAgICAgICAgIGRpZ2l0czogdGhpcy5kZWNpbWFsTWFza1ByZWNpc2lvbixcbiAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogJy4nLFxuICAgICAgICAgICAgICAgIHJhZGl4UG9pbnQ6ICcsJyxcbiAgICAgICAgICAgICAgICBhdXRvR3JvdXA6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVwZWF0OiAxNixcbiAgICAgICAgICAgICAgICByaWdodEFsaWduOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtYXg6IHRoaXMubWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkhvdmVyOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLkNFTExQSE9ORV06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJyg5OSkgOTk5LTk5OScsICcoOTkpIDk5OTktOTk5OScsICcoOTkpIDk5OTk5LTk5OTknXSxcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3dNYXNrT25Ib3ZlcjogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5JTlRFUk5BVElPTkFMX1BIT05FXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnKzk5OSA5OSA5OTktOTk5JywgJys5OSAoOTkpIDk5OTktOTk5OScsICcrOTkgKDk5KSA5OTk5OS05OTk5JywgJys5OTkgKDk5KSA5OTk5LTk5OTknLCAnKzk5OSAoOTkpIDk5OTk5LTk5OTknXSxcbiAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNob3dNYXNrT25Ib3ZlcjogZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbSW5wdXRNYXNrRW51bS5QTEFURV06IHtcbiAgICAgICAgICAgICAgICBtYXNrOiBbJ0FBQS05Jjk5J10sXG4gICAgICAgICAgICAgICAga2VlcFN0YXRpYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uQ0VQXToge1xuICAgICAgICAgICAgICAgIG1hc2s6IFsnOTk5OTktOTk5J10sXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkhvdmVyOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLklOVEVHRVJdOiB7XG4gICAgICAgICAgICAgICAgbWF4OiB0aGlzLm1heFZhbHVlLFxuICAgICAgICAgICAgICAgIG1pbjogdGhpcy52YWxpZGF0ZU1pblZhbHVlT25NYXNrID8gdGhpcy5taW5WYWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByaWdodEFsaWduOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzaG93TWFza09uSG92ZXI6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW0lucHV0TWFza0VudW0uTlVNRVJJQ19TVFJJTkddOiB7XG4gICAgICAgICAgICAgICAgcmVnZXg6IFwiWzAtOV0qXCIsXG4gICAgICAgICAgICAgICAgc2hvd01hc2tPbkhvdmVyOiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtJbnB1dE1hc2tFbnVtLlRJTUVdOiAnOTk6OTknLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5ERUNJTUFMKSB7XG4gICAgICAgICAgICBhcHBseUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgSW5wdXRNYXNrRW51bS5ERUNJTUFMLCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hc2sgPT0gSW5wdXRNYXNrRW51bS5JTlRFR0VSKSB7XG4gICAgICAgICAgICBhcHBseUlucHV0TWFzayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgSW5wdXRNYXNrRW51bS5JTlRFR0VSLCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5SW5wdXRNYXNrKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBtYXNrc1t0aGlzLm1hc2tdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBQcm9wZXJ0aWVzKCkge1xuICAgICAgICBsZXQgcHJvcHMgPSB7XG4gICAgICAgICAgICBzaG9ydFRleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAzMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAxMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb25nVGV4dDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDE1MFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4dHJhTG9uZ1RleHQ6IHtcbiAgICAgICAgICAgICAgICBodG1sVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAzMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjdXN0b21UZXh0OiB7XG4gICAgICAgICAgICAgICAgaHRtbFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogdGhpcy5tYXhMZW5ndGhcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiAxNTBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbWFpbDoge1xuICAgICAgICAgICAgICAgIGh0bWxUeXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICBsZW5ndGg6IDEwMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgaHRtbFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgIGxlbmd0aDogOSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy50eXBlIGluIHByb3BzKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0UHJvcGVydGllcyA9IHByb3BzW3RoaXMudHlwZV07XG4gICAgICAgICAgICB0aGlzLm1heExlbmd0aCA9IHRoaXMuaW5wdXRQcm9wZXJ0aWVzLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlR5cGUgW1wiICsgdGhpcy50eXBlICsgXCJdIGlzIG5vdCBhIHZhbGlkIHRhaWwtZm9ybS1pbnB1dCB0eXBlIVwiLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1pblZhbHVlVmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKSA8IHRoaXMubWluVmFsdWUgPyB7ICdtaW5WYWx1ZSc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtdWx0aXBsZU9mVmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNvbnRyb2wudmFsdWUgJSB0aGlzLm11bHRpcGxlT2YgIT09IDApID8geyAnbXVsdGlwbGVPZic6IHRydWUgfSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlcm5hbFNlcnZlckRlcGVuZGVuY3lWYWxpZGF0b3IoKSB7XG4gICAgICAgIC8vIFRPRE86IFZhbGlkYXIgdGVtcG8gZGUgcmVxdWlzacOnw6NvXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiAhY29udHJvbC52YWx1ZSA/IHsgJ2V4dGVybmFsU2VydmVyRGVwZW5kZW5jeSc6IHRydWUgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0aW1lVmFsaWRhdG9yKCkge1xuICAgICAgICBjb25zdCByZWdleEV4cCA9IG5ldyBSZWdFeHAoJ14oMFswLTldfDFbMC05XXwyWzAtM10pOlswLTVdWzAtOV0kJyk7XG5cbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2V4RXhwLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ3RpbWUnOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY25wakNwZlZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA8PSAxMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRvckNQRihjb250cm9sLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAnY3BmJzogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA9PSAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiB0aGlzLnZhbGlkYXRvckNOUEooY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgJ2NucGonOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWF0Y2hWYWxpZGF0b3IoKSB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPSB0aGlzLm1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgJ21hdGNoJzogdHJ1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtYWlsVmFsaWRhdG9yKGlzTG9naW5WYWxpZGF0aW9uOiBib29sZWFuID0gZmFsc2UpOiBBc3luY1ZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVtYWlsVmFsaWRhdG9yVGltZW91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmVtYWlsVmFsaWRhdG9yVGltZW91dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1haWxWYWxpZGF0b3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ndFZhbGlkYXRpb25TZXJ2aWNlLmVtYWlsVmFsaWRhdGlvbih0aGlzLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZTogTmd0SHR0cFZhbGlkYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNMb2dpblZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UudmFsaWQgPyB7ICdsb2dpbic6IHRydWUgfSA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS52YWxpZCA/IG51bGwgOiB7ICdlbWFpbCc6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhc3N3b3JkVmFsaWRhdG9yKCk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFzc3dvcmRWYWxpZGF0b3JUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucGFzc3dvcmRWYWxpZGF0b3JUaW1lb3V0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzd29yZFZhbGlkYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2UucGFzc3dvcmRWYWxpZGF0aW9uKHRoaXMudmFsdWUsIHRoaXMucGFzc3dvcmRhYmxlSWQsIHRoaXMucGFzc3dvcmRQb2xpY3lJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IE5ndEh0dHBWYWxpZGF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS52YWxpZCA/IG51bGwgOiB7ICdpbnZhbGlkX3Bhc3N3b3JkJzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZWFyY2hFeGlzdGluZ1Jlc291cmNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoRXhpc3RpbmdSZXNvdXJjZVRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hFeGlzdGluZ1Jlc291cmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmluZEV4aXN0aW5nUmVzb3VyY2UudmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgICAgICB0aGlzLm5ndFJlc291cmNlU2VydmljZS5maW5kRXhpc3RpbmcodGhpcy5maW5kRXhpc3RpbmdSZXNvdXJjZSlcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcG9uc2U6IE5ndEh0dHBGaW5kRXhpc3RpbmdSZXNvdXJjZVJlc3BvbnNlKSA9PiB0aGlzLmV4aXN0aW5nUmVzb3VyY2VJZCA9IHJlc3BvbnNlLmlkKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB0aGlzLmV4aXN0aW5nUmVzb3VyY2VJZCA9IG51bGwpXG4gICAgICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVQaG9uZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMucGhvbmVWYWxpZGF0b3JUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5waG9uZVZhbGlkYXRvclRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5waG9uZVZhbGlkYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2UucGhvbmVWYWxpZGF0aW9uKHRoaXMudmFsdWUpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHRoaXMudmFsaWRhdGVQaG9uZVJlc3VsdC5lbWl0KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5pcXVlVmFsaWRhdG9yKCk6IEFzeW5jVmFsaWRhdG9yRm4ge1xuICAgICAgICBpZiAoIXRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluIG9yZGVyIHRvIHVzZSB1bmlxdWUgdmFsaWRhdGlvbiB5b3UgbXVzdCBwcm92aWRlIGEgaW1wbGVtZW50YXRpb24gZm9yIE5ndEh0dHBWYWxpZGF0aW9uU2VydmljZSBjbGFzcyFcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudW5pcXVlVmFsaWRhdG9yVGltZW91dCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnVuaXF1ZVZhbGlkYXRvclRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnVuaXF1ZVJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlVmFsaWRhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ3RWYWxpZGF0aW9uU2VydmljZS51bmlxdWUodGhpcy51bmlxdWVSZXNvdXJjZSwgdGhpcy52YWx1ZSkudGhlbigocmVzcG9uc2U6IE5ndEh0dHBWYWxpZGF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UudmFsaWQgPyBudWxsIDogeyAndW5pcXVlJzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3JDTlBKKHZhbHVlKSB7XG4gICAgICAgIGxldCBiID0gWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xuXG4gICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcZF0vZywgXCJcIikpLmxlbmd0aCAhPSAxNCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKC8wezE0fS8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEyOyBuICs9IHZhbHVlW2ldICogYlsrK2ldKSB7XG4gICAgICAgICAgICA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWVbMTJdICE9ICgoKG4gJT0gMTEpIDwgMikgPyAwIDogMTEgLSBuKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbiA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTI7IG4gKz0gdmFsdWVbaV0gKiBiW2krK10pIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZVsxM10gIT0gKCgobiAlPSAxMSkgPCAyKSA/IDAgOiAxMSAtIG4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB2YWxpZGF0b3JDUEYodmFsdWUpIHtcbiAgICAgICAgbGV0IG51bWVyb3MsIGRpZ2l0b3MsIHNvbWEsIGksIHJlc3VsdGFkbywgZGlnaXRvc19pZ3VhaXM7XG5cbiAgICAgICAgZGlnaXRvc19pZ3VhaXMgPSAxO1xuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbHVlLmNoYXJBdChpKSAhPSB2YWx1ZS5jaGFyQXQoaSArIDEpKSB7XG4gICAgICAgICAgICAgICAgZGlnaXRvc19pZ3VhaXMgPSAwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWdpdG9zX2lndWFpcykge1xuICAgICAgICAgICAgbnVtZXJvcyA9IHZhbHVlLnN1YnN0cmluZygwLCA5KTtcbiAgICAgICAgICAgIGRpZ2l0b3MgPSB2YWx1ZS5zdWJzdHJpbmcoOSk7XG4gICAgICAgICAgICBzb21hID0gMDtcblxuICAgICAgICAgICAgZm9yIChpID0gMTA7IGkgPiAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBzb21hICs9IG51bWVyb3MuY2hhckF0KDEwIC0gaSkgKiBpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHRhZG8gPSBzb21hICUgMTEgPCAyID8gMCA6IDExIC0gc29tYSAlIDExO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0YWRvICE9IGRpZ2l0b3MuY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBudW1lcm9zID0gdmFsdWUuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgICAgIHNvbWEgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxMTsgaSA+IDE7IGktLSkge1xuICAgICAgICAgICAgICAgIHNvbWEgKz0gbnVtZXJvcy5jaGFyQXQoMTEgLSBpKSAqIGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHRhZG8gIT0gZGlnaXRvcy5jaGFyQXQoMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROYXRpdmVWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RWxlbWVudFRpdGxlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGl0bGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVNYXNrcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2sgPT0gXCJkZWNpbWFsXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlICsgXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwuL2csICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1hc2sgPT0gXCJjbnBqLWNwZlwiIHx8IHRoaXMubWFzayA9PSBcImNwZlwiIHx8IHRoaXMubWFzayA9PSBcImNucGpcIiB8fCB0aGlzLm1hc2sgPT0gXCJjbnBqLWNwZi1ydXRcIiB8fCB0aGlzLm1hc2sgPT0gXCJjdWl0XCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlICsgXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW15cXGRdL2csICcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMubWFzayA9PSBJbnB1dE1hc2tFbnVtLkNFTExQSE9ORVxuICAgICAgICAgICAgfHwgdGhpcy5tYXNrID09IElucHV0TWFza0VudW0uSU5URVJOQVRJT05BTF9QSE9ORVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlICsgXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnKCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcpJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJyAnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnICcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCctJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJysnLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNFbWFpbFNlcnZpY2VWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMubmd0VmFsaWRhdGlvblNlcnZpY2U/LmVtYWlsVmFsaWRhdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1Bhc3N3b3JkVmFsaWRhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLm5ndFZhbGlkYXRpb25TZXJ2aWNlPy5wYXNzd29yZFZhbGlkYXRpb24gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Rpc2FibGVkQnlQYXJlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ndEZvcm0/LmlzRGlzYWJsZWRcbiAgICAgICAgICAgIHx8IHRoaXMubmd0U2VjdGlvbj8uaXNEaXNhYmxlZFxuICAgICAgICAgICAgfHwgdGhpcy5uZ3RNb2RhbD8uaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVNYXNrcyh0aGlzLmdldE5hdGl2ZVZhbHVlKCkpICE9PSB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJtYi0yIGZsZXgge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAndGV4dCcsICdmb250J10pIH19XCIgW2hpZGRlbl09J3NoaW5pbmcnPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gKm5nSWY9XCJpc1JlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtbWQgbWwtMVwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIlxuICAgICAgICBbaGVscGVyUmV2ZXJzZVlQb3NpdGlvbl09XCJoZWxwZXJSZXZlcnNlWVBvc2l0aW9uXCIgW2F1dG9YUmV2ZXJzZV09XCJoZWxwZXJBdXRvWFJldmVyc2VcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJoZWxwVGV4dFwiPjwvc3Bhbj5cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48ZGl2IGNsYXNzPVwie3sgc2hpbmluZyA/ICdoaWRkZW4nIDogJ2ZsZXggcmVsYXRpdmUnfX1cIj5cbiAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGJvcmRlciBhcHBlYXJhbmNlLW5vbmUgZm9jdXM6b3V0bGluZS1ub25lIGxlYWRpbmctdGlnaHQgdy1mdWxsIHt7IGdldElucHV0UGFkZGluZ3MoKSB9fSB7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCcsICd0ZXh0JywgJ2NvbG9yLmJvcmRlcicsICdjb2xvci5iZycsICdjb2xvci50ZXh0JywgJ3JvdW5kZWQnLCAnY3Vyc29yJ10pIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIiBbcmVhZG9ubHldPVwiaXNSZWFkb25seSB8fCBsb2FkaW5nXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3N0eWxlXT1cInVwcGVyY2FzZSA/ICd0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIWltcG9ydGFudCc6JydcIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2lucHV0LWhhcy1lcnJvciBib3JkZXItcmVkLTcwMCc6IGZvcm1Db250cm9sPy5lcnJvcnMgJiYgKGZvcm1Db250cm9sPy5kaXJ0eSB8fCAoZm9ybUNvbnRhaW5lciAmJiBmb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSkpfVwiXG4gICAgICAgIFthdHRyLnR5cGVdPVwiaW5wdXRQcm9wZXJ0aWVzLmh0bWxUeXBlXCIgKG1vdXNlbGVhdmUpPVwicmVzdG9yZVBsYWNlaG9sZGVyKClcIiAoZm9jdXNvdXQpPVwicmVzdG9yZVBsYWNlaG9sZGVyKClcIlxuICAgICAgICAoaW5wdXQpPVwidXNlSW5wdXRFdmVudCA/IG9uTmF0aXZlQ2hhbmdlKCkgOiBudWxsXCIgKGNoYW5nZSk9XCIhdXNlSW5wdXRFdmVudCA/IG9uTmF0aXZlQ2hhbmdlKCkgOiBudWxsXCIgI2VsZW1lbnQ+XG4gICAgPHNwYW4gKm5nSWY9XCJpbm5lckxlZnRJY29uXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBzZWxmLWNlbnRlciBweC0yIHt7IGlubmVyTGVmdEljb25Db2xvciB9fSB7eyBvbkNsaWNrTGVmdEljb24gPyAnY3Vyc29yLXBvaW50ZXInIDogJycgfX1cIlxuICAgICAgICAoY2xpY2spPVwib25DbGlja0xlZnRJY29uLmVtaXQoKVwiPlxuXG4gICAgICAgIDxuZ3Qtc3ZnICpuZ0lmPVwiIXNob3dSb3VuZGVkSWNvblwiIGNsYXNzPVwidGV4dC14cyBmaWxsLWN1cnJlbnRcIiBbc3JjXT0naW5uZXJMZWZ0SWNvbic+PC9uZ3Qtc3ZnPlxuICAgICAgICA8aW1nICpuZ0lmPVwic2hvd1JvdW5kZWRJY29uXCIgY2xhc3M9XCJyb3VuZGVkLWZ1bGwgaC00XCIgW3NyY109J2lubmVyTGVmdEljb24nPlxuICAgIDwvc3Bhbj5cblxuICAgIDxkaXYgKm5nSWY9XCJjdXN0b21Jbm5lckNvbnRlbnRUZW1wbGF0ZVwiIGNsYXNzPVwiYWJzb2x1dGUgc2VsZi1jZW50ZXIgcHgtMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbUlubmVyQ29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBhYnNvbHV0ZSBoLWZ1bGwganVzdGlmeS1lbmQgcmlnaHQtMCB3LWF1dG9cIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhZGlzYWJsZWQoKSAmJiBhbGxvd0NsZWFyICYmIHZhbHVlICYmICFsb2FkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXIgcmlnaHQtMCBweC0yIHRleHQtcmVkLTQwMCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9J2NsZWFySW5wdXQoJGV2ZW50KSc+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiZmlsbC1jdXJyZW50IHNlbGYtY2VudGVyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjEgMTcuMmwtNS4zLTUuMyA1LjMtNS4zLTEuOC0xLjgtNS4zIDUuNC01LjMtNS4zLTEuOCAxLjcgNS4zIDUuMy01LjMgNS4zTDYuNyAxOWw1LjMtNS4zIDUuMyA1LjMgMS44LTEuOHpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInNlbGYtY2VudGVyIHJpZ2h0LTAgcHgtMiB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWxvYWRlclwiPjwvZGl2PlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlID09ICdwYXNzd29yZCcgJiYgdmFsdWVcIiBjbGFzcz1cInNlbGYtY2VudGVyIHB4LTIgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJlbGVtZW50LnR5cGUgPT0gJ3Bhc3N3b3JkJ1wiIGNsYXNzPVwiZmlsbC1jdXJyZW50XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIChjbGljayk9J3Nob3dQYXNzd29yZCgpJz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICBkPVwiTS4yIDEwYTExIDExIDAgMCAxIDE5LjYgMEExMSAxMSAwIDAgMSAuMiAxMHptOS44IDRhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4em0wLTJhMiAyIDAgMSAxIDAtNCAyIDIgMCAwIDEgMCA0elwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImVsZW1lbnQudHlwZSA9PSAndGV4dCdcIiBjbGFzcz1cImZpbGwtY3VycmVudFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiAoY2xpY2spPSdoaWRlUGFzc3dvcmQoKSc+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi44MSA0LjM2bC0xLjc3IDEuNzhhNCA0IDAgMCAwLTQuOSA0LjlsLTIuNzYgMi43NUMyLjA2IDEyLjc5Ljk2IDExLjQ5LjIgMTBhMTEgMTEgMCAwIDEgMTIuNi01LjY0em0zLjggMS44NWMxLjMzIDEgMi40MyAyLjMgMy4yIDMuNzlhMTEgMTEgMCAwIDEtMTIuNjIgNS42NGwxLjc3LTEuNzhhNCA0IDAgMCAwIDQuOS00LjlsMi43Ni0yLjc1em0tLjI1LTMuOTlsMS40MiAxLjQyTDMuNjQgMTcuNzhsLTEuNDItMS40MkwxNi4zNiAyLjIyelwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaW5uZXJSaWdodEljb24gJiYgdHlwZSAhPSAncGFzc3dvcmQnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXIgcHgtMiB7eyBpbm5lclJpZ2h0SWNvbkNvbG9yIH19ICB7eyBvbkNsaWNrUmlnaHRJY29uID8gJ2N1cnNvci1wb2ludGVyJyA6ICcnIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUmlnaHRJY29uLmVtaXQoKVwiPlxuICAgICAgICAgICAgPG5ndC1zdmcgY2xhc3M9XCJ0ZXh0LXh4cyBmaWxsLWN1cnJlbnRcIiBbc3JjXT0naW5uZXJSaWdodEljb24nPjwvbmd0LXN2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q2hhcmFjdGVyc0xlbmd0aCAmJiBtYXhUb3RhbENoYXJzQ291bnQgJiYgIXNoaW5pbmdcIj5cbiAgICA8cCBjbGFzcz1cInRleHQteHhzIG10LTFcIj5cbiAgICAgICAge3sgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RUZXh0QXJlYVJlbWFpbmluZ0NoYXJhY3RlcnMgfX06XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IGdldFJlbWFpbmluZ0NoYXJhY3RlcnMoKSB9fTwvc3Bhbj5cbiAgICA8L3A+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XG4gICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwie3sgbmd0U3R5bGUuY29tcGlsZShbJ2gnXSkgfX0gdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48aW5wdXQgKm5nSWY9J2NvbXBvbmVudFJlYWR5JyB0eXBlPVwiaGlkZGVuXCIgW25nTW9kZWxdPVwidmFsdWVcIiBbbmFtZV09XCJuYW1lXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCIgW21pblZhbHVlXT0nbWluVmFsdWUnIFttaW5MZW5ndGhdPSdtaW5MZW5ndGgnPlxuPC9uZ3QtdmFsaWRhdGlvbj5cbiJdfQ==