simpo-component-library 3.5.43 → 3.5.45

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 (226) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/delete-hover-element/delete-hover-element.component.mjs +5 -5
  3. package/esm2022/lib/components/document/document.component.mjs +5 -5
  4. package/esm2022/lib/components/hover-elements/hover-elements.component.mjs +4 -4
  5. package/esm2022/lib/components/image-loading/image-loading.component.mjs +5 -5
  6. package/esm2022/lib/components/index.mjs +5 -5
  7. package/esm2022/lib/components/input-fields/input-fields.component.mjs +4 -4
  8. package/esm2022/lib/components/payment-details/payment-details.component.mjs +5 -5
  9. package/esm2022/lib/constants/business.constant.mjs +1 -1
  10. package/esm2022/lib/directive/animation-directive.mjs +4 -4
  11. package/esm2022/lib/directive/background-directive.mjs +4 -4
  12. package/esm2022/lib/directive/banner-content-fit-directive.mjs +4 -4
  13. package/esm2022/lib/directive/blur-content.directive.mjs +4 -4
  14. package/esm2022/lib/directive/border-directive.mjs +4 -4
  15. package/esm2022/lib/directive/borderlessImage.directive.mjs +4 -4
  16. package/esm2022/lib/directive/button-directive.directive.mjs +4 -4
  17. package/esm2022/lib/directive/button-editor.directive.mjs +4 -4
  18. package/esm2022/lib/directive/color.directive.mjs +4 -4
  19. package/esm2022/lib/directive/column-directive.directive.mjs +4 -4
  20. package/esm2022/lib/directive/container-alignment.directive.mjs +4 -4
  21. package/esm2022/lib/directive/container-fir.directive.mjs +4 -4
  22. package/esm2022/lib/directive/content-alignment-directive.mjs +4 -4
  23. package/esm2022/lib/directive/content-fit-directive.mjs +4 -4
  24. package/esm2022/lib/directive/content-title-spacing.directive.mjs +4 -4
  25. package/esm2022/lib/directive/contenteditable.directive.mjs +4 -4
  26. package/esm2022/lib/directive/corner-directive.mjs +4 -4
  27. package/esm2022/lib/directive/footer-layout-directive.mjs +4 -4
  28. package/esm2022/lib/directive/hover-animation.directive.mjs +133 -0
  29. package/esm2022/lib/directive/hover-element-directive.mjs +4 -4
  30. package/esm2022/lib/directive/hoverborder.directive.mjs +4 -4
  31. package/esm2022/lib/directive/image-container.directive.mjs +4 -4
  32. package/esm2022/lib/directive/image-directive.directive.mjs +4 -4
  33. package/esm2022/lib/directive/image-editor.directive.mjs +4 -4
  34. package/esm2022/lib/directive/image-position.directive.mjs +4 -4
  35. package/esm2022/lib/directive/overlay-directive.mjs +4 -4
  36. package/esm2022/lib/directive/position-layout-directive.directive.mjs +4 -4
  37. package/esm2022/lib/directive/removeCarousel-directive.mjs +4 -4
  38. package/esm2022/lib/directive/spacing-around.directive.mjs +4 -4
  39. package/esm2022/lib/directive/spacing-horizontal.directive.mjs +4 -4
  40. package/esm2022/lib/directive/sticky-directive.mjs +4 -4
  41. package/esm2022/lib/directive/text-background-directive.directive.mjs +4 -4
  42. package/esm2022/lib/directive/text-size.directive.mjs +4 -4
  43. package/esm2022/lib/directive/wrap-containers.directive.mjs +4 -4
  44. package/esm2022/lib/ecommerce/sections/address/address.component.mjs +5 -5
  45. package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +5 -5
  46. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +5 -5
  47. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
  48. package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +5 -5
  49. package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
  50. package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +5 -5
  51. package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
  52. package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +5 -5
  53. package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
  54. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +5 -5
  55. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
  56. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +5 -5
  57. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
  58. package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +5 -5
  59. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +5 -5
  60. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
  61. package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +5 -5
  62. package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +5 -5
  63. package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +5 -5
  64. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +5 -5
  65. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
  66. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +11 -10
  67. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
  68. package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +6 -6
  69. package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
  70. package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +5 -5
  71. package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +5 -5
  72. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +5 -5
  73. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
  74. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +5 -5
  75. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
  76. package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +5 -5
  77. package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
  78. package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +1 -1
  79. package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
  80. package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
  81. package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
  82. package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
  83. package/esm2022/lib/ecommerce/styles/category.modal.mjs +1 -1
  84. package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
  85. package/esm2022/lib/ecommerce/styles/product.modal.mjs +1 -1
  86. package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
  87. package/esm2022/lib/ecommerce/styles/user.modal.mjs +1 -1
  88. package/esm2022/lib/elements/add-section/add-section.component.mjs +5 -5
  89. package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +5 -5
  90. package/esm2022/lib/elements/button/button.component.mjs +5 -5
  91. package/esm2022/lib/elements/button/button.model.mjs +1 -1
  92. package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +5 -5
  93. package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +5 -5
  94. package/esm2022/lib/elements/editor-service.service.mjs +4 -4
  95. package/esm2022/lib/elements/heading-element/heading-element.component.mjs +5 -5
  96. package/esm2022/lib/elements/image-editor/image-editor.component.mjs +5 -5
  97. package/esm2022/lib/elements/index.mjs +5 -5
  98. package/esm2022/lib/elements/link-editor/link-editor.component.mjs +5 -5
  99. package/esm2022/lib/elements/media-selector/media-selector.component.mjs +5 -5
  100. package/esm2022/lib/elements/navbar-button-element/navbar-button-element.component.mjs +4 -4
  101. package/esm2022/lib/elements/portfolio/portfolio.component.mjs +5 -5
  102. package/esm2022/lib/elements/property/property.component.mjs +5 -5
  103. package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +5 -5
  104. package/esm2022/lib/elements/socia-icons/socia-icons.component.mjs +4 -4
  105. package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +5 -5
  106. package/esm2022/lib/elements/text/text.component.mjs +5 -5
  107. package/esm2022/lib/elements/text-editor/text-editor.component.mjs +5 -5
  108. package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +9 -5
  109. package/esm2022/lib/pipes/amount.pipe.mjs +4 -4
  110. package/esm2022/lib/pipes/gender.pipe.mjs +4 -4
  111. package/esm2022/lib/sections/BaseSection.mjs +1 -1
  112. package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +5 -5
  113. package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +5 -5
  114. package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
  115. package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +5 -5
  116. package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
  117. package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +5 -5
  118. package/esm2022/lib/sections/banner-section/banner-section.component.mjs +4 -4
  119. package/esm2022/lib/sections/blog-list/blog-list.component.mjs +6 -6
  120. package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
  121. package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +4 -4
  122. package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +5 -5
  123. package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
  124. package/esm2022/lib/sections/contact-us/contact-us.component.mjs +4 -4
  125. package/esm2022/lib/sections/faq-section/faq-section.component.mjs +5 -5
  126. package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
  127. package/esm2022/lib/sections/features-section/features-section.component.mjs +5 -5
  128. package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
  129. package/esm2022/lib/sections/footer/footer.component.mjs +5 -5
  130. package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
  131. package/esm2022/lib/sections/footer-section/footer-section.component.mjs +4 -4
  132. package/esm2022/lib/sections/header-section/header-section.component.mjs +8 -6
  133. package/esm2022/lib/sections/header-section/header-section.model.mjs +1 -1
  134. package/esm2022/lib/sections/header-text/header-text.component.mjs +5 -5
  135. package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
  136. package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +5 -5
  137. package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
  138. package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +5 -5
  139. package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
  140. package/esm2022/lib/sections/image-section/image-section.component.mjs +5 -5
  141. package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
  142. package/esm2022/lib/sections/location-section/location-section.component.mjs +5 -5
  143. package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
  144. package/esm2022/lib/sections/logo-gallery/logo-gallery.component.mjs +4 -4
  145. package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +5 -5
  146. package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
  147. package/esm2022/lib/sections/moving-text/moving-text.component.mjs +110 -0
  148. package/esm2022/lib/sections/moving-text/moving-text.modal.mjs +2 -0
  149. package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +4 -4
  150. package/esm2022/lib/sections/new-services/new-services.component.mjs +5 -5
  151. package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
  152. package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +5 -5
  153. package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
  154. package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +5 -5
  155. package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
  156. package/esm2022/lib/sections/process-modern/process-modern.component.mjs +5 -5
  157. package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
  158. package/esm2022/lib/sections/process-section/process-section.component.mjs +5 -5
  159. package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
  160. package/esm2022/lib/sections/property-component/property-component.component.mjs +5 -5
  161. package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
  162. package/esm2022/lib/sections/property-list/property-list.component.mjs +5 -5
  163. package/esm2022/lib/sections/property-list/property-list.modal.mjs +1 -1
  164. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +5 -5
  165. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
  166. package/esm2022/lib/sections/registration-form/registration-form.component.mjs +6 -6
  167. package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
  168. package/esm2022/lib/sections/service-section/service-section.component.mjs +5 -5
  169. package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
  170. package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +5 -5
  171. package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +5 -5
  172. package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
  173. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +5 -5
  174. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
  175. package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +5 -5
  176. package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
  177. package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +5 -5
  178. package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
  179. package/esm2022/lib/sections/text-image-section/text-image-section.component.mjs +4 -4
  180. package/esm2022/lib/sections/text-section/text-section.component.mjs +4 -4
  181. package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
  182. package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +5 -5
  183. package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
  184. package/esm2022/lib/sections/video-section/video-section.component.mjs +5 -5
  185. package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
  186. package/esm2022/lib/sections/view-blog/view-blog.component.mjs +5 -5
  187. package/esm2022/lib/services/cart.service.mjs +4 -4
  188. package/esm2022/lib/services/endUser.service.mjs +4 -4
  189. package/esm2022/lib/services/events.service.mjs +5 -4
  190. package/esm2022/lib/services/image-upload-service.service.mjs +4 -4
  191. package/esm2022/lib/services/rest.service.mjs +4 -4
  192. package/esm2022/lib/services/sanitizeHtml.mjs +4 -4
  193. package/esm2022/lib/services/storage.service.mjs +4 -4
  194. package/esm2022/lib/styles/index.mjs +7 -1
  195. package/esm2022/lib/styles/style.model.mjs +1 -1
  196. package/esm2022/lib/styles/types.mjs +1 -1
  197. package/esm2022/lib/tokens/api-token.mjs +1 -1
  198. package/esm2022/public-api.mjs +3 -2
  199. package/fesm2022/simpo-component-library.mjs +717 -479
  200. package/fesm2022/simpo-component-library.mjs.map +1 -1
  201. package/lib/components/input-fields/input-fields.component.d.ts +1 -1
  202. package/lib/directive/background-directive.d.ts +1 -1
  203. package/lib/directive/button-directive.directive.d.ts +1 -1
  204. package/lib/directive/color.directive.d.ts +1 -1
  205. package/lib/directive/hover-animation.directive.d.ts +19 -0
  206. package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +1 -1
  207. package/lib/elements/top-of-image-card/top-of-image-card.component.d.ts +3 -0
  208. package/lib/sections/banner-carousel/banner-carousel.component.d.ts +2 -2
  209. package/lib/sections/carousel-banner/carousel-banner.component.d.ts +1 -1
  210. package/lib/sections/header-section/header-section.component.d.ts +2 -0
  211. package/lib/sections/header-section/header-section.model.d.ts +10 -2
  212. package/lib/sections/image-section/image-section.component.d.ts +2 -2
  213. package/lib/sections/logo-showcase/logo-showcase.component.d.ts +1 -1
  214. package/lib/sections/moving-text/moving-text.component.d.ts +26 -0
  215. package/lib/sections/moving-text/moving-text.modal.d.ts +19 -0
  216. package/lib/sections/pricing-section/pricing-section.component.d.ts +1 -1
  217. package/lib/sections/service-section/service-section.model.d.ts +3 -1
  218. package/lib/services/events.service.d.ts +1 -0
  219. package/lib/styles/index.d.ts +5 -0
  220. package/lib/styles/style.model.d.ts +5 -1
  221. package/lib/styles/types.d.ts +1 -0
  222. package/package.json +1 -1
  223. package/public-api.d.ts +2 -0
  224. package/simpo-component-library-3.5.45.tgz +0 -0
  225. package/src/lib/styles/global-styles.css +191 -191
  226. package/simpo-component-library-3.5.43.tgz +0 -0
@@ -795,12 +795,12 @@ export class RegistrationFormComponent extends BaseSection {
795
795
  }
796
796
  });
797
797
  }
798
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegistrationFormComponent, deps: [{ token: i1.RestService }, { token: i2.MatSnackBar }, { token: i3.EventsService }, { token: i4.ActivatedRoute }, { token: i5.DomSanitizer }, { token: i6.ImageUplaodService }], target: i0.ɵɵFactoryTarget.Component }); }
799
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RegistrationFormComponent, isStandalone: true, selector: "simpo-registration-form", inputs: { data: "data", index: "index", edit: "edit", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section simpoHover (hovering)=\"showEditTabs($event)\" class=\"total-container\">\n <div [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\n <div #mainContainer class=\"rowFlex\" [id]=\"data?.id\" [simpoOverlay]=\"styles?.background\"\n [simpoBorder]=\"styles?.border\">\n <div class=\"main-section\"\n [ngClass]=\"{'justify-content-md-start': styles?.layout?.align === 'left' , 'justify-content-md-end': styles?.layout?.align === 'right'}\"\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\n <div class=\"body-section\">\n <div [simpoAnimation]=\"styles?.animation\" [id]=\"data?.id\">\n <div>\n <simpo-text-element [textData]=\"content?.inputText?.[0]?.value\" [textLabel]=\"content?.inputText?.[0]?.label\"></simpo-text-element>\n </div>\n <div class=\"d-flex gap-2 d-md-flex mt-15\" *ngIf=\"data?.action?.display\" [ngClass]=\"[\n styles?.layout?.align === 'left' ? 'justify-content-md-start' : '',\n styles?.layout?.align === 'center' ? 'justify-content-md-center' : '',\n styles?.layout?.align === 'right' ? 'justify-content-md-end' : ''\n ]\">\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n <section class=\"main-section\">\n <div *ngIf=\"formStatus != 'REGISTERED' && formStatus != 'ADMITTED'\">\n <div class=\"subTabs_section\">\n <div class=\"list_tabs d-flex align-items-center\">\n <ng-container *ngFor=\"let key of Object.keys(fieldData)\">\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = key\"\n [ngClass]=\"selectedKey === key ? 'single_tab_active' : 'single_tab'\">\n {{key | titlecase}}\n </div>\n </ng-container>\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = 'Document'\" *ngIf=\"data?.sectionType === 'admissionForm'\"\n [ngClass]=\"selectedKey === 'Document' ? 'single_tab_active' : 'single_tab'\">\n Document\n </div>\n <div class=\"single_tab cursor-pointer\" (click)=\"redirectToPayment()\"\n *ngIf=\"data?.sectionType === 'admissionForm'\"\n [ngClass]=\"selectedKey === 'Payment' ? 'single_tab_active' : 'single_tab'\">\n Payment\n </div>\n </div>\n </div>\n\n <div class=\"main-content\">\n <ng-container *ngFor=\"let group of fieldData[selectedKey] ? Object.keys(fieldData[selectedKey]) : [];let groupIndex = index\">\n <div class=\"body\" *ngIf=\"group !== 'Backup Contact'\">\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\n {{group}}\n </div>\n\n <ng-container *ngIf=\"groupIndex == 0 && Object.keys(fieldData)[0] === selectedKey\">\n <div class=\"image-box\" *ngIf=\"!payload.imgUrl\">\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\n (click)=\"fileInput.click()\" alt=\"\">\n <div class=\"image_box\">\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput.click()\">Click to\n upload</span>\n </div>\n </div>\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\"\n accept=\"image/x-png,image/jpeg,image/jpg\" (change)=\"updateAdmissionImage($event)\" class=\"pc-btn\"\n id=\"browse_contact_image\" #fileInput />\n\n <div *ngIf=\"payload.imgUrl\" class=\"addedImg\">\n <div class=\"uploadedImg\">\n <img alt=\"\" [src]=\"ds.bypassSecurityTrustUrl(payload.imgUrl)\">\n </div>\n <div class=\"image-buttons\">\n <div class=\"button\" (click)=\"fileInput.click()\">\n <img src=\"../../../../../../../../../assets/images/blogs/change_image.svg\" alt=\"\">\n Change Image\n </div>\n <div class=\"button delete-change\" (click)=\"deleteImg()\">\n\n <div class=\"delete\">\n <img src=\"./../../../../../../../../../assets/images/blogs/delete_image.svg\" alt=\"\">\n <div>Delete</div>\n </div>\n\n </div>\n </div>\n\n </div>\n </ng-container>\n\n <!-- <div class=\"row mt-1\">\n <ng-container *ngFor=\"let info of fieldData[selectedKey][group]\">\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\n <label for=\"\" class=\"label-text\">{{info.displayText || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\" *ngIf=\"info.required\">*</span> <br>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\n </div>\n </ng-container>\n </div> -->\n <div class=\"row mt-1\" *ngIf=\"group != 'Siblings Details' && group != 'Past school Details'\">\n <ng-container *ngFor=\"let info of fieldData[selectedKey][group]\">\n <div\n [ngClass]=\"(info.type === 'FATHER_IMAGE' || info.type === 'MOTHER_IMAGE' || info.type === 'GUARDIAN_IMAGE') ? 'col-md-12 col-12' : 'col-md-4 col-12 mt-1'\"\n *ngIf=\"info.isDisplay\">\n <div class=\"d-flex\">\n <label for=\"\" class=\"label-text\"\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{returnDisplayText(info.displayText || info.fieldLabel)}}</label>&nbsp; <span style=\"color: red;\"\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\n </div>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"\" *ngIf=\"group === 'Siblings Details'\">\n <ng-container\n *ngFor=\"let key of objectKeys(groupOfSiblings(fieldData['Family Details']['Siblings Details']));let i = index\">\n <div class=\"row mt-2\">\n <ng-container *ngFor=\"let info of groupOfSiblings(fieldData['Family Details']['Siblings Details'])[key]\">\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\n <div class=\"d-flex\">\n <label for=\"\" class=\"label-text\"\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{info.displayText\n || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\n </div>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\n </div>\n </ng-container>\n </div>\n <!-- <div class=\"border_bottom\" *ngIf=\"i >= 1\"></div> -->\n </ng-container>\n <div class=\"add_more_siblings d-flex justify-content-end\"\n *ngIf=\"group === 'Siblings Details' && showAddSiblingsButton()\">\n <button (click)=\"addSibling(nextSiblingNumber)\" class=\"add_sibling\" style=\"width:max-content !important\">+ Add Sibling {{ nextSiblingNumber\n }}</button>\n </div>\n </div>\n <div class=\"\" *ngIf=\"group === 'Past school Details'\">\n <ng-container\n *ngFor=\"let key of objectKeys(groupOfPastSchoolDetails(fieldData['Student Details']['Past school Details']));let i = index\">\n <div class=\"row mt-2\">\n <ng-container *ngFor=\"let info of groupOfPastSchoolDetails(fieldData['Student Details']['Past school Details'])[key]\">\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\n <div class=\"d-flex\">\n <label for=\"\" class=\"label-text\"\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{info.displayText\n || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\n </div>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"add_more_siblings d-flex justify-content-end\"\n *ngIf=\"group === 'Past school Details' && showAddPastSchoolButton()\">\n <button (click)=\"addPastSchool(nextPastSchoolNumber)\" class=\"add_sibling\"\n style=\"width:max-content !important\">+ Add Past School {{ nextPastSchoolNumber}}</button>\n </div>\n </div>\n </div>\n\n <div class=\"body\" *ngIf=\"fieldData[selectedKey].hasOwnProperty('Backup Contact') && studentLiveWith === 'single parent' && groupIndex == 0 && Object.keys(fieldData)[0] === selectedKey\">\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\n Backup Contact (Optional)\n </div>\n\n <div class=\"row mt-1\">\n <div class=\"col-md-12\">\n <label class=\"mtb-15 checkbox-label\">\n <input type=\"checkbox\" name=\"\" id=\"\" [(ngModel)]=\"payload.parentAuthorization\">\n I authorize the school to release the child only to the parent listed above\n </label>\n </div>\n <div class=\"col-md-4 col-12 mt-1\" *ngFor=\"let info of fieldData[selectedKey]['Backup Contact']\">\n <label for=\"\" class=\"label-text\">{{info.displayText || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\n *ngIf=\"info.required\">*</span> <br>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info}\"></ng-container>\n </div>\n <div class=\"col-md-4 col-12 mt-1\">\n <label for=\"\" class=\"label-text\">Upload Supporting Document (Optional)</label>\n <div class=\"input-text upload-file\" (click)=\"backUpDocInput.click()\">\n <p>{{backupDocFile ? 'File Uploaded' : 'Upload File'}}</p>\n <mat-icon>cloud_upload</mat-icon>\n </div>\n <input id=\"vendorImage\" type=\"file\" name=\"myfile\" hidden\n accept=\".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/x-png,image/jpeg,image/jpg,.pdf, video/mp4,video/x-matroska,video/x-msvideo,video/quicktime\"\n (change)=\"uploadBackUpDocument($event)\" class=\"pc-btn\"\n id=\"browse_contact_image\" #backUpDocInput />\n </div>\n </div>\n </div>\n\n </ng-container>\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Document' && data?.sectionType === 'admissionForm'\">\n <simpo-document [documentList]=\"documentList\"></simpo-document>\n </div>\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Payment' && data?.sectionType === 'admissionForm'\">\n <simpo-payment-details [admissionData]=\"payload\"\n [subscriptionsData]=\"subscriptionsData\" [termPaymentList]=\"termPaymentList\"></simpo-payment-details>\n </div>\n </div>\n\n <div class=\"button-parent\">\n <ng-container *ngFor=\"let button of data?.action?.buttons\">\n <button class=\"button\" (click)=\"submitForm()\" simpoButtonDirective [id]=\"data?.id+button.id\"\n [buttonStyle]=\"button.styles\" *ngIf=\"(data?.sectionType === 'admissionForm' && selectedKey == 'Payment') ||\n (data?.sectionType === 'registrationForm' &&\n (Object.keys(fieldData)[Object.keys(fieldData).length - 1] == selectedKey))\"\n [color]=\"data?.styles?.background?.accentColor\">{{button?.content?.label}}</button>\n\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\n [buttonStyle]=\"button.styles\" *ngIf=\"selectedKey != 'Payment' && data?.sectionType === 'admissionForm'\"\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\n\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\n [buttonStyle]=\"button.styles\"\n *ngIf=\"data?.sectionType === 'registrationForm' && (Object.keys(fieldData)[Object.keys(fieldData).length - 1] != selectedKey)\"\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\n </ng-container>\n </div>\n </div>\n\n <div class=\"emptyText\" *ngIf=\"formStatus == 'REGISTERED' || formStatus == 'ADMITTED'\">\n <img [src]=\"content?.image?.url\" alt=\"\" *ngIf=\"content?.image?.showImage\">\n <div class=\"heading-large\" [innerHtml]=\"content?.inputText?.[1]?.value\"></div>\n </div>\n </section>\n\n <ng-template #inputData let-field=\"data\" let-group=\"group\">\n <div *ngIf=\"field.dataType == 'IMAGE'\">\n <div class=\"image-box\" *ngIf=\"!field.fieldImageUrl\">\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\n (click)=\"fileInput2.click()\" alt=\"\">\n <div class=\"d-flex align-items-center\">\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput2.click()\">Click to\n upload</span>\n </div>\n </div>\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\" accept=\"image/x-png,image/jpeg,image/jpg\"\n (change)=\"uploadParentGuardinaImages($event,field)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput2 />\n <div *ngIf=\"field.fieldImageUrl\" class=\"addedImg\">\n <div class=\"uploadedImg\">\n <img alt=\"\" [src]=\"ds.bypassSecurityTrustUrl(field.fieldImageUrl)\">\n </div>\n <div class=\"image-buttons\">\n <div class=\"button\" (click)=\"fileInput2.click()\">\n <img src=\"../../../../../../../../../assets/images/blogs/change_image.svg\" alt=\"\">\n Change Image\n </div>\n <div class=\"button delete-change\" (click)=\"deleteImg()\">\n \n <div class=\"delete\">\n <img src=\"./../../../../../../../../../assets/images/blogs/delete_image.svg\" alt=\"\">\n <div>Delete</div>\n </div>\n \n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"field.dataType === 'TEXT' && field.isDisplay\">\n <input type=\"text\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\n <div class=\"error\" *ngIf=\"field.fieldValue && !getFieldValidation(field)\">\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('phone number')\">\n Please enter a valid 10-digit Indian mobile number.\n </ng-container>\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('email')\">\n Please enter a valid email address.\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"field.dataType === 'NUMBER' && field.isDisplay\">\n <input type=\"number\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\n <div class=\"error\" *ngIf=\"field.fieldValue && !getFieldValidation(field)\">\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('phone number')\">\n Please enter a valid 10-digit Indian mobile number.\n </ng-container>\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('email')\">\n Please enter a valid email address.\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"field.dataType === 'MONEY' && field.isDisplay\">\n <input type=\"text\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\n </div>\n <div *ngIf=\"field.dataType === 'DATE' && field.isDisplay\">\n <input type=\"date\" class=\"input-text\" [(ngModel)]=\"field.fieldValue\" [placeholder]=\"'Select '+field.fieldLabel\" [max]=\"getMaxDate(field)\"\n (input)=\"checkDob(field)\">\n </div>\n <div class=\"input-container\" *ngIf=\"field.dataType === 'TEXT_FILE' && field.isDisplay\">\n <input matInput class=\"input-text-1\" [(ngModel)]=\"field.fieldValue\" style=\"width:90%\">\n <div class=\"image-box-1 d-flex justify-content-center align-items-center\" *ngIf=\"!field.fieldImageUrl\"\n style=\"width:10%\">\n <mat-icon (click)=\"fileInput1.click()\"\n class=\"dummy-image-1 w-100 d-flex justify-content-center\">cloud_upload</mat-icon>\n </div>\n <div class=\"image-box-1 d-flex justify-content-center align-items-center\" *ngIf=\"field.fieldImageUrl\" style=\"width:10%\">\n <!-- If the uploaded file is an image, show the preview -->\n <img\n *ngIf=\"isImage(field.fieldImageUrl)\"\n alt=\"\"\n class=\"w-100 h-100\"\n [src]=\"ds.bypassSecurityTrustUrl(field.fieldImageUrl)\"\n (click)=\"fileInput1.click()\" />\n \n <!-- If the uploaded file is not an image, show a file icon -->\n <mat-icon\n *ngIf=\"!isImage(field.fieldImageUrl)\"\n class=\"w-100 d-flex justify-content-center align-items-center dummy-image-1\"\n (click)=\"fileInput1.click()\">insert_drive_file</mat-icon>\n </div>\n \n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\"\n accept=\".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/x-png,image/jpeg,image/jpg,.pdf, video/mp4,video/x-matroska,video/x-msvideo,video/quicktime\"\n (change)=\"updateSelectedImage($event,field)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput1 />\n </div>\n <div *ngIf=\"field.dataType === 'DROPDOWN' && field.isDisplay\" class=\"admission\">\n <mat-form-field class=\"input-text-1 input_card\" appearance=\"outline\" style=\"width:100%\">\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" [(ngModel)]=\"field.fieldValue\" [multiple]=\"field.multipleSelection\">\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\n <mat-option *ngFor=\"let item of field.value\" [value]=\"item?.value\" (click)=\"masterDropdownValueChange(item, field)\">{{item.label}}</mat-option>\n </ng-container>\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\n <mat-option *ngFor=\"let item of field.sourceData[field.dataSourceType]\"\n (click)=\"inputFieldChange(item, field)\" [value]=\"item?.name\">{{item.name}}</mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <div *ngIf=\"field.dataType === 'CHECKBOX' && field.isDisplay\">\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.value\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckChecked\" [(ngModel)]=\"data.checked\">\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\n {{data.label}}\n </label>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.sourceData[field.dataSourceType]\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckChecked\" [(ngModel)]=\"data.checked\">\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\n {{data.name}}\n </label>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"field.dataType === 'RADIOBUTTON' && field.isDisplay\">\n <div style=\"display: flex; gap: 20px; margin-top: 10px; height: 35px;align-items: center;\">\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\n <!-- <div class=\" mb-5\" *ngFor=\"let data of field.value\">\n <mat-radio-button [value]=\"data.value\" [(ngModel)]=\"field.fieldValue\">{{data.label}}</mat-radio-button>\n </div> -->\n <mat-radio-group [(ngModel)]=\"field.fieldValue\" (change)=\"radioButtonChanged(field,selectedKey,group)\">\n <mat-radio-button *ngFor=\"let data of field.value\" [value]=\"data.value\">\n {{ data.label }}\n </mat-radio-button>\n </mat-radio-group>\n </ng-container>\n \n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.value\">\n <input class=\"form-check-input\" type=\"radio\" [value]=\"data.name\" [(ngModel)]=\"field.fieldValue\" />\n \n <label class=\"form-check-label\" [for]=\"'radio_' + data.name\">\n {{ data.name }}\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n\n\n <ng-container *ngIf=\"styles?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n", styles: [".total_container{height:auto;position:relative}.body-section{padding:4% 15px}.button-section{margin-top:15px}.clipPath{clip-path:polygon(0% 100%,50% 0%,100% 100%);height:100px;background-color:#00f}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.mt-15{margin-top:15px}@media only screen and (max-width: 475px){.d-flex{justify-content:center;margin-bottom:25px}}.main-section{width:100%;overflow-y:hidden}.subTabs_section{padding:1rem 5rem;height:12vh}.active_route_section{height:89%;border:1px solid #0000000F;padding:15px 20px;background-color:#fff;border-radius:6px}.active_route_section_normal{background-color:#f6f6f6;border:none;padding:10px 4rem}.list_tabs{border:1px solid #0000001A;background-color:#ffffffe5;padding:10px;border-radius:6px;gap:10px;height:50px}.single_tab{color:#0e233c99;font-size:14px;font-weight:500;font-family:interReg;padding:10px 20px}.single_tab_active{width:max-content;height:32px;background-color:#0015800a;display:flex;align-items:center;font-weight:600;padding:10px 20px;border-radius:4px;color:#0e233c}.align-items-center{align-items:center}.header{height:8vh;padding:10px;border-bottom:2px solid rgba(0,0,0,.06);display:flex}.p-5{padding:5rem}.backToLeads{color:#000!important}.body{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;padding:2rem;border-radius:10px}.profile-img{display:flex;align-items:center;gap:2rem}.mt-2{margin-top:2rem!important}.mt-1{margin-top:1rem!important}.image-box{display:flex;gap:1rem;margin-top:3rem;cursor:pointer}.image-box span{color:#0189ea;font-size:14px;font-weight:500;padding:11px 7rem;border:2px solid rgba(0,0,0,.06);height:47px;border-radius:10px}.image_box{display:flex;align-items:center}.dummy-image{height:55px}.label-text{font-weight:400;font-family:Inter;font-size:14px;color:#434443}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.footer{display:flex;gap:1rem;align-items:center;justify-content:flex-end;height:8vh;padding:10px;border-top:2px solid rgba(0,0,0,.06);position:absolute;bottom:0;width:100%}.footer .continue{font-size:13px;font-family:interMedium;color:#242424;font-weight:500;border:none;background-color:#f6c318;padding:10px 20px;border-radius:8px;width:max-content}.footer .cancel{font-size:13px;font-family:interMedium;color:#f6c318;font-weight:500;border:1px solid #F6C318;background-color:#fff;padding:10px 20px;border-radius:8px;width:max-content}.main-content{overflow:scroll;padding-top:5px;padding-bottom:10px}.button-parent{padding:1rem 5rem 1rem 2rem;align-items:center;display:flex;justify-content:flex-end}.button{font-size:16px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.payment-details{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;border-radius:10px}.mb-5{margin-bottom:5px!important}.addedImg{display:flex;gap:5%;width:95%;margin-top:2rem}.addedImg .uploadedImg img{height:65px;width:65px;border-radius:50%}.addedImg .image-buttons{display:flex;gap:3%;padding-top:20px}.addedImg .image-buttons .button{display:flex;gap:8px;width:142px;height:40px;padding:12px 8px;font-family:lexandMedium;color:#3f3b3b;font-style:normal;font-weight:500;font-size:12px!important;border:1px dashed #E4E7EC;border-radius:12px;cursor:pointer}.addedImg .image-buttons .button img{width:20px}.addedImg .image-buttons .button .delete{display:flex;gap:15%;width:60%;margin:auto}.addedImg .image-buttons .button .delete img{width:12px}.emptyText{height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:50px}.emptyText img{height:200px}@media screen and (max-width: 475px){.body{margin:0rem}.emptyText{padding:1rem}.emptyText img{width:100%}.subTabs_section{padding:1rem .5rem}.list_tabs{white-space:nowrap;overflow:scroll;justify-content:flex-start}.payment-details{margin:0rem}}.mtb-15{margin-top:15px;margin-bottom:15px}.checkbox-label{display:flex;align-items:center;gap:15px}.checkbox-label input{height:16px;width:16px}.upload-file{display:flex;align-items:center;justify-content:space-between;padding-right:10px}.upload-file mat-icon{color:#4caf50}.upload-file p{margin-bottom:0}@media only screen and (min-width: 320px) and (max-width : 500px){.image-box span{padding:11px 4rem}}mat-form-field{border:1px solid 2px solid rgba(208,213,221,1);border-radius:8px}.input-container{display:flex;border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.input-container input:focus{outline:none}.input-text-1{border:none}.image-box-1{display:flex;cursor:pointer;border-left:1px solid rgba(208,213,221,1)}.dummy-image-1{font-size:20px;color:green}.error{font-size:12px;font-family:var(--primary-font-family);color:red;margin-top:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i7.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatGridListModule }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i8.TextElementComponent, selector: "simpo-text-element", inputs: ["textData", "textLabel"] }, { kind: "component", type: i9.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i10.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i11.PaymentDetailsComponent, selector: "simpo-payment-details", inputs: ["admissionData", "subscriptionsData", "termPaymentList"] }, { kind: "component", type: i12.DocumentComponent, selector: "simpo-document", inputs: ["documentList"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type:
798
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: RegistrationFormComponent, deps: [{ token: i1.RestService }, { token: i2.MatSnackBar }, { token: i3.EventsService }, { token: i4.ActivatedRoute }, { token: i5.DomSanitizer }, { token: i6.ImageUplaodService }], target: i0.ɵɵFactoryTarget.Component }); }
799
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: RegistrationFormComponent, isStandalone: true, selector: "simpo-registration-form", inputs: { data: "data", index: "index", edit: "edit", nextComponentColor: "nextComponentColor" }, usesInheritance: true, ngImport: i0, template: "<section simpoHover (hovering)=\"showEditTabs($event)\" class=\"total-container\">\r\n <div [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <div #mainContainer class=\"rowFlex\" [id]=\"data?.id\" [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\">\r\n <div class=\"main-section\"\r\n [ngClass]=\"{'justify-content-md-start': styles?.layout?.align === 'left' , 'justify-content-md-end': styles?.layout?.align === 'right'}\"\r\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"body-section\">\r\n <div [simpoAnimation]=\"styles?.animation\" [id]=\"data?.id\">\r\n <div>\r\n <simpo-text-element [textData]=\"content?.inputText?.[0]?.value\" [textLabel]=\"content?.inputText?.[0]?.label\"></simpo-text-element>\r\n </div>\r\n <div class=\"d-flex gap-2 d-md-flex mt-15\" *ngIf=\"data?.action?.display\" [ngClass]=\"[\r\n styles?.layout?.align === 'left' ? 'justify-content-md-start' : '',\r\n styles?.layout?.align === 'center' ? 'justify-content-md-center' : '',\r\n styles?.layout?.align === 'right' ? 'justify-content-md-end' : ''\r\n ]\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <section class=\"main-section\">\r\n <div *ngIf=\"formStatus != 'REGISTERED' && formStatus != 'ADMITTED'\">\r\n <div class=\"subTabs_section\">\r\n <div class=\"list_tabs d-flex align-items-center\">\r\n <ng-container *ngFor=\"let key of Object.keys(fieldData)\">\r\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = key\"\r\n [ngClass]=\"selectedKey === key ? 'single_tab_active' : 'single_tab'\">\r\n {{key | titlecase}}\r\n </div>\r\n </ng-container>\r\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = 'Document'\" *ngIf=\"data?.sectionType === 'admissionForm'\"\r\n [ngClass]=\"selectedKey === 'Document' ? 'single_tab_active' : 'single_tab'\">\r\n Document\r\n </div>\r\n <div class=\"single_tab cursor-pointer\" (click)=\"redirectToPayment()\"\r\n *ngIf=\"data?.sectionType === 'admissionForm'\"\r\n [ngClass]=\"selectedKey === 'Payment' ? 'single_tab_active' : 'single_tab'\">\r\n Payment\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"main-content\">\r\n <ng-container *ngFor=\"let group of fieldData[selectedKey] ? Object.keys(fieldData[selectedKey]) : [];let groupIndex = index\">\r\n <div class=\"body\" *ngIf=\"group !== 'Backup Contact'\">\r\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\r\n {{group}}\r\n </div>\r\n\r\n <ng-container *ngIf=\"groupIndex == 0 && Object.keys(fieldData)[0] === selectedKey\">\r\n <div class=\"image-box\" *ngIf=\"!payload.imgUrl\">\r\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\r\n (click)=\"fileInput.click()\" alt=\"\">\r\n <div class=\"image_box\">\r\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput.click()\">Click to\r\n upload</span>\r\n </div>\r\n </div>\r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\"\r\n accept=\"image/x-png,image/jpeg,image/jpg\" (change)=\"updateAdmissionImage($event)\" class=\"pc-btn\"\r\n id=\"browse_contact_image\" #fileInput />\r\n\r\n <div *ngIf=\"payload.imgUrl\" class=\"addedImg\">\r\n <div class=\"uploadedImg\">\r\n <img alt=\"\" [src]=\"ds.bypassSecurityTrustUrl(payload.imgUrl)\">\r\n </div>\r\n <div class=\"image-buttons\">\r\n <div class=\"button\" (click)=\"fileInput.click()\">\r\n <img src=\"../../../../../../../../../assets/images/blogs/change_image.svg\" alt=\"\">\r\n Change Image\r\n </div>\r\n <div class=\"button delete-change\" (click)=\"deleteImg()\">\r\n\r\n <div class=\"delete\">\r\n <img src=\"./../../../../../../../../../assets/images/blogs/delete_image.svg\" alt=\"\">\r\n <div>Delete</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n <!-- <div class=\"row mt-1\">\r\n <ng-container *ngFor=\"let info of fieldData[selectedKey][group]\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\r\n <label for=\"\" class=\"label-text\">{{info.displayText || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\" *ngIf=\"info.required\">*</span> <br>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n <div class=\"row mt-1\" *ngIf=\"group != 'Siblings Details' && group != 'Past school Details'\">\r\n <ng-container *ngFor=\"let info of fieldData[selectedKey][group]\">\r\n <div\r\n [ngClass]=\"(info.type === 'FATHER_IMAGE' || info.type === 'MOTHER_IMAGE' || info.type === 'GUARDIAN_IMAGE') ? 'col-md-12 col-12' : 'col-md-4 col-12 mt-1'\"\r\n *ngIf=\"info.isDisplay\">\r\n <div class=\"d-flex\">\r\n <label for=\"\" class=\"label-text\"\r\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\r\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{returnDisplayText(info.displayText || info.fieldLabel)}}</label>&nbsp; <span style=\"color: red;\"\r\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"\" *ngIf=\"group === 'Siblings Details'\">\r\n <ng-container\r\n *ngFor=\"let key of objectKeys(groupOfSiblings(fieldData['Family Details']['Siblings Details']));let i = index\">\r\n <div class=\"row mt-2\">\r\n <ng-container *ngFor=\"let info of groupOfSiblings(fieldData['Family Details']['Siblings Details'])[key]\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\r\n <div class=\"d-flex\">\r\n <label for=\"\" class=\"label-text\"\r\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\r\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{info.displayText\r\n || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\r\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- <div class=\"border_bottom\" *ngIf=\"i >= 1\"></div> -->\r\n </ng-container>\r\n <div class=\"add_more_siblings d-flex justify-content-end\"\r\n *ngIf=\"group === 'Siblings Details' && showAddSiblingsButton()\">\r\n <button (click)=\"addSibling(nextSiblingNumber)\" class=\"add_sibling\" style=\"width:max-content !important\">+ Add Sibling {{ nextSiblingNumber\r\n }}</button>\r\n </div>\r\n </div>\r\n <div class=\"\" *ngIf=\"group === 'Past school Details'\">\r\n <ng-container\r\n *ngFor=\"let key of objectKeys(groupOfPastSchoolDetails(fieldData['Student Details']['Past school Details']));let i = index\">\r\n <div class=\"row mt-2\">\r\n <ng-container *ngFor=\"let info of groupOfPastSchoolDetails(fieldData['Student Details']['Past school Details'])[key]\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\r\n <div class=\"d-flex\">\r\n <label for=\"\" class=\"label-text\"\r\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\r\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{info.displayText\r\n || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\r\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <div class=\"add_more_siblings d-flex justify-content-end\"\r\n *ngIf=\"group === 'Past school Details' && showAddPastSchoolButton()\">\r\n <button (click)=\"addPastSchool(nextPastSchoolNumber)\" class=\"add_sibling\"\r\n style=\"width:max-content !important\">+ Add Past School {{ nextPastSchoolNumber}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"body\" *ngIf=\"fieldData[selectedKey].hasOwnProperty('Backup Contact') && studentLiveWith === 'single parent' && groupIndex == 0 && Object.keys(fieldData)[0] === selectedKey\">\r\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\r\n Backup Contact (Optional)\r\n </div>\r\n\r\n <div class=\"row mt-1\">\r\n <div class=\"col-md-12\">\r\n <label class=\"mtb-15 checkbox-label\">\r\n <input type=\"checkbox\" name=\"\" id=\"\" [(ngModel)]=\"payload.parentAuthorization\">\r\n I authorize the school to release the child only to the parent listed above\r\n </label>\r\n </div>\r\n <div class=\"col-md-4 col-12 mt-1\" *ngFor=\"let info of fieldData[selectedKey]['Backup Contact']\">\r\n <label for=\"\" class=\"label-text\">{{info.displayText || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\r\n *ngIf=\"info.required\">*</span> <br>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info}\"></ng-container>\r\n </div>\r\n <div class=\"col-md-4 col-12 mt-1\">\r\n <label for=\"\" class=\"label-text\">Upload Supporting Document (Optional)</label>\r\n <div class=\"input-text upload-file\" (click)=\"backUpDocInput.click()\">\r\n <p>{{backupDocFile ? 'File Uploaded' : 'Upload File'}}</p>\r\n <mat-icon>cloud_upload</mat-icon>\r\n </div>\r\n <input id=\"vendorImage\" type=\"file\" name=\"myfile\" hidden\r\n accept=\".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/x-png,image/jpeg,image/jpg,.pdf, video/mp4,video/x-matroska,video/x-msvideo,video/quicktime\"\r\n (change)=\"uploadBackUpDocument($event)\" class=\"pc-btn\"\r\n id=\"browse_contact_image\" #backUpDocInput />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Document' && data?.sectionType === 'admissionForm'\">\r\n <simpo-document [documentList]=\"documentList\"></simpo-document>\r\n </div>\r\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Payment' && data?.sectionType === 'admissionForm'\">\r\n <simpo-payment-details [admissionData]=\"payload\"\r\n [subscriptionsData]=\"subscriptionsData\" [termPaymentList]=\"termPaymentList\"></simpo-payment-details>\r\n </div>\r\n </div>\r\n\r\n <div class=\"button-parent\">\r\n <ng-container *ngFor=\"let button of data?.action?.buttons\">\r\n <button class=\"button\" (click)=\"submitForm()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"(data?.sectionType === 'admissionForm' && selectedKey == 'Payment') ||\r\n (data?.sectionType === 'registrationForm' &&\r\n (Object.keys(fieldData)[Object.keys(fieldData).length - 1] == selectedKey))\"\r\n [color]=\"data?.styles?.background?.accentColor\">{{button?.content?.label}}</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"selectedKey != 'Payment' && data?.sectionType === 'admissionForm'\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\"\r\n *ngIf=\"data?.sectionType === 'registrationForm' && (Object.keys(fieldData)[Object.keys(fieldData).length - 1] != selectedKey)\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"emptyText\" *ngIf=\"formStatus == 'REGISTERED' || formStatus == 'ADMITTED'\">\r\n <img [src]=\"content?.image?.url\" alt=\"\" *ngIf=\"content?.image?.showImage\">\r\n <div class=\"heading-large\" [innerHtml]=\"content?.inputText?.[1]?.value\"></div>\r\n </div>\r\n </section>\r\n\r\n <ng-template #inputData let-field=\"data\" let-group=\"group\">\r\n <div *ngIf=\"field.dataType == 'IMAGE'\">\r\n <div class=\"image-box\" *ngIf=\"!field.fieldImageUrl\">\r\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\r\n (click)=\"fileInput2.click()\" alt=\"\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput2.click()\">Click to\r\n upload</span>\r\n </div>\r\n </div>\r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\" accept=\"image/x-png,image/jpeg,image/jpg\"\r\n (change)=\"uploadParentGuardinaImages($event,field)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput2 />\r\n <div *ngIf=\"field.fieldImageUrl\" class=\"addedImg\">\r\n <div class=\"uploadedImg\">\r\n <img alt=\"\" [src]=\"ds.bypassSecurityTrustUrl(field.fieldImageUrl)\">\r\n </div>\r\n <div class=\"image-buttons\">\r\n <div class=\"button\" (click)=\"fileInput2.click()\">\r\n <img src=\"../../../../../../../../../assets/images/blogs/change_image.svg\" alt=\"\">\r\n Change Image\r\n </div>\r\n <div class=\"button delete-change\" (click)=\"deleteImg()\">\r\n \r\n <div class=\"delete\">\r\n <img src=\"./../../../../../../../../../assets/images/blogs/delete_image.svg\" alt=\"\">\r\n <div>Delete</div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'TEXT' && field.isDisplay\">\r\n <input type=\"text\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\r\n <div class=\"error\" *ngIf=\"field.fieldValue && !getFieldValidation(field)\">\r\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('phone number')\">\r\n Please enter a valid 10-digit Indian mobile number.\r\n </ng-container>\r\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('email')\">\r\n Please enter a valid email address.\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'NUMBER' && field.isDisplay\">\r\n <input type=\"number\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\r\n <div class=\"error\" *ngIf=\"field.fieldValue && !getFieldValidation(field)\">\r\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('phone number')\">\r\n Please enter a valid 10-digit Indian mobile number.\r\n </ng-container>\r\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('email')\">\r\n Please enter a valid email address.\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'MONEY' && field.isDisplay\">\r\n <input type=\"text\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DATE' && field.isDisplay\">\r\n <input type=\"date\" class=\"input-text\" [(ngModel)]=\"field.fieldValue\" [placeholder]=\"'Select '+field.fieldLabel\" [max]=\"getMaxDate(field)\"\r\n (input)=\"checkDob(field)\">\r\n </div>\r\n <div class=\"input-container\" *ngIf=\"field.dataType === 'TEXT_FILE' && field.isDisplay\">\r\n <input matInput class=\"input-text-1\" [(ngModel)]=\"field.fieldValue\" style=\"width:90%\">\r\n <div class=\"image-box-1 d-flex justify-content-center align-items-center\" *ngIf=\"!field.fieldImageUrl\"\r\n style=\"width:10%\">\r\n <mat-icon (click)=\"fileInput1.click()\"\r\n class=\"dummy-image-1 w-100 d-flex justify-content-center\">cloud_upload</mat-icon>\r\n </div>\r\n <div class=\"image-box-1 d-flex justify-content-center align-items-center\" *ngIf=\"field.fieldImageUrl\" style=\"width:10%\">\r\n <!-- If the uploaded file is an image, show the preview -->\r\n <img\r\n *ngIf=\"isImage(field.fieldImageUrl)\"\r\n alt=\"\"\r\n class=\"w-100 h-100\"\r\n [src]=\"ds.bypassSecurityTrustUrl(field.fieldImageUrl)\"\r\n (click)=\"fileInput1.click()\" />\r\n \r\n <!-- If the uploaded file is not an image, show a file icon -->\r\n <mat-icon\r\n *ngIf=\"!isImage(field.fieldImageUrl)\"\r\n class=\"w-100 d-flex justify-content-center align-items-center dummy-image-1\"\r\n (click)=\"fileInput1.click()\">insert_drive_file</mat-icon>\r\n </div>\r\n \r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\"\r\n accept=\".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/x-png,image/jpeg,image/jpg,.pdf, video/mp4,video/x-matroska,video/x-msvideo,video/quicktime\"\r\n (change)=\"updateSelectedImage($event,field)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput1 />\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DROPDOWN' && field.isDisplay\" class=\"admission\">\r\n <mat-form-field class=\"input-text-1 input_card\" appearance=\"outline\" style=\"width:100%\">\r\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" [(ngModel)]=\"field.fieldValue\" [multiple]=\"field.multipleSelection\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <mat-option *ngFor=\"let item of field.value\" [value]=\"item?.value\" (click)=\"masterDropdownValueChange(item, field)\">{{item.label}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <mat-option *ngFor=\"let item of field.sourceData[field.dataSourceType]\"\r\n (click)=\"inputFieldChange(item, field)\" [value]=\"item?.name\">{{item.name}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'CHECKBOX' && field.isDisplay\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.value\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckChecked\" [(ngModel)]=\"data.checked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n {{data.label}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.sourceData[field.dataSourceType]\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckChecked\" [(ngModel)]=\"data.checked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n {{data.name}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'RADIOBUTTON' && field.isDisplay\">\r\n <div style=\"display: flex; gap: 20px; margin-top: 10px; height: 35px;align-items: center;\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <!-- <div class=\" mb-5\" *ngFor=\"let data of field.value\">\r\n <mat-radio-button [value]=\"data.value\" [(ngModel)]=\"field.fieldValue\">{{data.label}}</mat-radio-button>\r\n </div> -->\r\n <mat-radio-group [(ngModel)]=\"field.fieldValue\" (change)=\"radioButtonChanged(field,selectedKey,group)\">\r\n <mat-radio-button *ngFor=\"let data of field.value\" [value]=\"data.value\">\r\n {{ data.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.value\">\r\n <input class=\"form-check-input\" type=\"radio\" [value]=\"data.name\" [(ngModel)]=\"field.fieldValue\" />\r\n \r\n <label class=\"form-check-label\" [for]=\"'radio_' + data.name\">\r\n {{ data.name }}\r\n </label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n</section>\r\n", styles: [".total_container{height:auto;position:relative}.body-section{padding:4% 15px}.button-section{margin-top:15px}.clipPath{clip-path:polygon(0% 100%,50% 0%,100% 100%);height:100px;background-color:#00f}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.mt-15{margin-top:15px}@media only screen and (max-width: 475px){.d-flex{justify-content:center;margin-bottom:25px}}.main-section{width:100%;overflow-y:hidden}.subTabs_section{padding:1rem 5rem;height:12vh}.active_route_section{height:89%;border:1px solid #0000000F;padding:15px 20px;background-color:#fff;border-radius:6px}.active_route_section_normal{background-color:#f6f6f6;border:none;padding:10px 4rem}.list_tabs{border:1px solid #0000001A;background-color:#ffffffe5;padding:10px;border-radius:6px;gap:10px;height:50px}.single_tab{color:#0e233c99;font-size:14px;font-weight:500;font-family:interReg;padding:10px 20px}.single_tab_active{width:max-content;height:32px;background-color:#0015800a;display:flex;align-items:center;font-weight:600;padding:10px 20px;border-radius:4px;color:#0e233c}.align-items-center{align-items:center}.header{height:8vh;padding:10px;border-bottom:2px solid rgba(0,0,0,.06);display:flex}.p-5{padding:5rem}.backToLeads{color:#000!important}.body{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;padding:2rem;border-radius:10px}.profile-img{display:flex;align-items:center;gap:2rem}.mt-2{margin-top:2rem!important}.mt-1{margin-top:1rem!important}.image-box{display:flex;gap:1rem;margin-top:3rem;cursor:pointer}.image-box span{color:#0189ea;font-size:14px;font-weight:500;padding:11px 7rem;border:2px solid rgba(0,0,0,.06);height:47px;border-radius:10px}.image_box{display:flex;align-items:center}.dummy-image{height:55px}.label-text{font-weight:400;font-family:Inter;font-size:14px;color:#434443}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.footer{display:flex;gap:1rem;align-items:center;justify-content:flex-end;height:8vh;padding:10px;border-top:2px solid rgba(0,0,0,.06);position:absolute;bottom:0;width:100%}.footer .continue{font-size:13px;font-family:interMedium;color:#242424;font-weight:500;border:none;background-color:#f6c318;padding:10px 20px;border-radius:8px;width:max-content}.footer .cancel{font-size:13px;font-family:interMedium;color:#f6c318;font-weight:500;border:1px solid #F6C318;background-color:#fff;padding:10px 20px;border-radius:8px;width:max-content}.main-content{overflow:scroll;padding-top:5px;padding-bottom:10px}.button-parent{padding:1rem 5rem 1rem 2rem;align-items:center;display:flex;justify-content:flex-end}.button{font-size:16px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.payment-details{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;border-radius:10px}.mb-5{margin-bottom:5px!important}.addedImg{display:flex;gap:5%;width:95%;margin-top:2rem}.addedImg .uploadedImg img{height:65px;width:65px;border-radius:50%}.addedImg .image-buttons{display:flex;gap:3%;padding-top:20px}.addedImg .image-buttons .button{display:flex;gap:8px;width:142px;height:40px;padding:12px 8px;font-family:lexandMedium;color:#3f3b3b;font-style:normal;font-weight:500;font-size:12px!important;border:1px dashed #E4E7EC;border-radius:12px;cursor:pointer}.addedImg .image-buttons .button img{width:20px}.addedImg .image-buttons .button .delete{display:flex;gap:15%;width:60%;margin:auto}.addedImg .image-buttons .button .delete img{width:12px}.emptyText{height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:50px}.emptyText img{height:200px}@media screen and (max-width: 475px){.body{margin:0rem}.emptyText{padding:1rem}.emptyText img{width:100%}.subTabs_section{padding:1rem .5rem}.list_tabs{white-space:nowrap;overflow:scroll;justify-content:flex-start}.payment-details{margin:0rem}}.mtb-15{margin-top:15px;margin-bottom:15px}.checkbox-label{display:flex;align-items:center;gap:15px}.checkbox-label input{height:16px;width:16px}.upload-file{display:flex;align-items:center;justify-content:space-between;padding-right:10px}.upload-file mat-icon{color:#4caf50}.upload-file p{margin-bottom:0}@media only screen and (min-width: 320px) and (max-width : 500px){.image-box span{padding:11px 4rem}}mat-form-field{border:1px solid 2px solid rgba(208,213,221,1);border-radius:8px}.input-container{display:flex;border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.input-container input:focus{outline:none}.input-text-1{border:none}.image-box-1{display:flex;cursor:pointer;border-left:1px solid rgba(208,213,221,1)}.dummy-image-1{font-size:20px;color:green}.error{font-size:12px;font-family:var(--primary-font-family);color:red;margin-top:4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i7.TitleCasePipe, name: "titlecase" }, { kind: "ngmodule", type: MatGridListModule }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i8.TextElementComponent, selector: "simpo-text-element", inputs: ["textData", "textLabel"] }, { kind: "component", type: i9.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i10.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i11.PaymentDetailsComponent, selector: "simpo-payment-details", inputs: ["admissionData", "subscriptionsData", "termPaymentList"] }, { kind: "component", type: i12.DocumentComponent, selector: "simpo-document", inputs: ["documentList"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type:
800
800
  //directive
801
- AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i15.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i16.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: i16.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i16.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i16.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i17.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i18.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i18.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
801
+ AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i15.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i16.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: i16.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i16.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i16.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i17.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i18.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i18.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
802
802
  }
803
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RegistrationFormComponent, decorators: [{
803
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: RegistrationFormComponent, decorators: [{
804
804
  type: Component,
805
805
  args: [{ selector: 'simpo-registration-form', standalone: true, imports: [
806
806
  CommonModule,
@@ -821,7 +821,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
821
821
  FormsModule,
822
822
  MatIconModule,
823
823
  MatRadioModule
824
- ], template: "<section simpoHover (hovering)=\"showEditTabs($event)\" class=\"total-container\">\n <div [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\n <div #mainContainer class=\"rowFlex\" [id]=\"data?.id\" [simpoOverlay]=\"styles?.background\"\n [simpoBorder]=\"styles?.border\">\n <div class=\"main-section\"\n [ngClass]=\"{'justify-content-md-start': styles?.layout?.align === 'left' , 'justify-content-md-end': styles?.layout?.align === 'right'}\"\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\n <div class=\"body-section\">\n <div [simpoAnimation]=\"styles?.animation\" [id]=\"data?.id\">\n <div>\n <simpo-text-element [textData]=\"content?.inputText?.[0]?.value\" [textLabel]=\"content?.inputText?.[0]?.label\"></simpo-text-element>\n </div>\n <div class=\"d-flex gap-2 d-md-flex mt-15\" *ngIf=\"data?.action?.display\" [ngClass]=\"[\n styles?.layout?.align === 'left' ? 'justify-content-md-start' : '',\n styles?.layout?.align === 'center' ? 'justify-content-md-center' : '',\n styles?.layout?.align === 'right' ? 'justify-content-md-end' : ''\n ]\">\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n <section class=\"main-section\">\n <div *ngIf=\"formStatus != 'REGISTERED' && formStatus != 'ADMITTED'\">\n <div class=\"subTabs_section\">\n <div class=\"list_tabs d-flex align-items-center\">\n <ng-container *ngFor=\"let key of Object.keys(fieldData)\">\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = key\"\n [ngClass]=\"selectedKey === key ? 'single_tab_active' : 'single_tab'\">\n {{key | titlecase}}\n </div>\n </ng-container>\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = 'Document'\" *ngIf=\"data?.sectionType === 'admissionForm'\"\n [ngClass]=\"selectedKey === 'Document' ? 'single_tab_active' : 'single_tab'\">\n Document\n </div>\n <div class=\"single_tab cursor-pointer\" (click)=\"redirectToPayment()\"\n *ngIf=\"data?.sectionType === 'admissionForm'\"\n [ngClass]=\"selectedKey === 'Payment' ? 'single_tab_active' : 'single_tab'\">\n Payment\n </div>\n </div>\n </div>\n\n <div class=\"main-content\">\n <ng-container *ngFor=\"let group of fieldData[selectedKey] ? Object.keys(fieldData[selectedKey]) : [];let groupIndex = index\">\n <div class=\"body\" *ngIf=\"group !== 'Backup Contact'\">\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\n {{group}}\n </div>\n\n <ng-container *ngIf=\"groupIndex == 0 && Object.keys(fieldData)[0] === selectedKey\">\n <div class=\"image-box\" *ngIf=\"!payload.imgUrl\">\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\n (click)=\"fileInput.click()\" alt=\"\">\n <div class=\"image_box\">\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput.click()\">Click to\n upload</span>\n </div>\n </div>\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\"\n accept=\"image/x-png,image/jpeg,image/jpg\" (change)=\"updateAdmissionImage($event)\" class=\"pc-btn\"\n id=\"browse_contact_image\" #fileInput />\n\n <div *ngIf=\"payload.imgUrl\" class=\"addedImg\">\n <div class=\"uploadedImg\">\n <img alt=\"\" [src]=\"ds.bypassSecurityTrustUrl(payload.imgUrl)\">\n </div>\n <div class=\"image-buttons\">\n <div class=\"button\" (click)=\"fileInput.click()\">\n <img src=\"../../../../../../../../../assets/images/blogs/change_image.svg\" alt=\"\">\n Change Image\n </div>\n <div class=\"button delete-change\" (click)=\"deleteImg()\">\n\n <div class=\"delete\">\n <img src=\"./../../../../../../../../../assets/images/blogs/delete_image.svg\" alt=\"\">\n <div>Delete</div>\n </div>\n\n </div>\n </div>\n\n </div>\n </ng-container>\n\n <!-- <div class=\"row mt-1\">\n <ng-container *ngFor=\"let info of fieldData[selectedKey][group]\">\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\n <label for=\"\" class=\"label-text\">{{info.displayText || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\" *ngIf=\"info.required\">*</span> <br>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\n </div>\n </ng-container>\n </div> -->\n <div class=\"row mt-1\" *ngIf=\"group != 'Siblings Details' && group != 'Past school Details'\">\n <ng-container *ngFor=\"let info of fieldData[selectedKey][group]\">\n <div\n [ngClass]=\"(info.type === 'FATHER_IMAGE' || info.type === 'MOTHER_IMAGE' || info.type === 'GUARDIAN_IMAGE') ? 'col-md-12 col-12' : 'col-md-4 col-12 mt-1'\"\n *ngIf=\"info.isDisplay\">\n <div class=\"d-flex\">\n <label for=\"\" class=\"label-text\"\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{returnDisplayText(info.displayText || info.fieldLabel)}}</label>&nbsp; <span style=\"color: red;\"\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\n </div>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"\" *ngIf=\"group === 'Siblings Details'\">\n <ng-container\n *ngFor=\"let key of objectKeys(groupOfSiblings(fieldData['Family Details']['Siblings Details']));let i = index\">\n <div class=\"row mt-2\">\n <ng-container *ngFor=\"let info of groupOfSiblings(fieldData['Family Details']['Siblings Details'])[key]\">\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\n <div class=\"d-flex\">\n <label for=\"\" class=\"label-text\"\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{info.displayText\n || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\n </div>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\n </div>\n </ng-container>\n </div>\n <!-- <div class=\"border_bottom\" *ngIf=\"i >= 1\"></div> -->\n </ng-container>\n <div class=\"add_more_siblings d-flex justify-content-end\"\n *ngIf=\"group === 'Siblings Details' && showAddSiblingsButton()\">\n <button (click)=\"addSibling(nextSiblingNumber)\" class=\"add_sibling\" style=\"width:max-content !important\">+ Add Sibling {{ nextSiblingNumber\n }}</button>\n </div>\n </div>\n <div class=\"\" *ngIf=\"group === 'Past school Details'\">\n <ng-container\n *ngFor=\"let key of objectKeys(groupOfPastSchoolDetails(fieldData['Student Details']['Past school Details']));let i = index\">\n <div class=\"row mt-2\">\n <ng-container *ngFor=\"let info of groupOfPastSchoolDetails(fieldData['Student Details']['Past school Details'])[key]\">\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\n <div class=\"d-flex\">\n <label for=\"\" class=\"label-text\"\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{info.displayText\n || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\n </div>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"add_more_siblings d-flex justify-content-end\"\n *ngIf=\"group === 'Past school Details' && showAddPastSchoolButton()\">\n <button (click)=\"addPastSchool(nextPastSchoolNumber)\" class=\"add_sibling\"\n style=\"width:max-content !important\">+ Add Past School {{ nextPastSchoolNumber}}</button>\n </div>\n </div>\n </div>\n\n <div class=\"body\" *ngIf=\"fieldData[selectedKey].hasOwnProperty('Backup Contact') && studentLiveWith === 'single parent' && groupIndex == 0 && Object.keys(fieldData)[0] === selectedKey\">\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\n Backup Contact (Optional)\n </div>\n\n <div class=\"row mt-1\">\n <div class=\"col-md-12\">\n <label class=\"mtb-15 checkbox-label\">\n <input type=\"checkbox\" name=\"\" id=\"\" [(ngModel)]=\"payload.parentAuthorization\">\n I authorize the school to release the child only to the parent listed above\n </label>\n </div>\n <div class=\"col-md-4 col-12 mt-1\" *ngFor=\"let info of fieldData[selectedKey]['Backup Contact']\">\n <label for=\"\" class=\"label-text\">{{info.displayText || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\n *ngIf=\"info.required\">*</span> <br>\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info}\"></ng-container>\n </div>\n <div class=\"col-md-4 col-12 mt-1\">\n <label for=\"\" class=\"label-text\">Upload Supporting Document (Optional)</label>\n <div class=\"input-text upload-file\" (click)=\"backUpDocInput.click()\">\n <p>{{backupDocFile ? 'File Uploaded' : 'Upload File'}}</p>\n <mat-icon>cloud_upload</mat-icon>\n </div>\n <input id=\"vendorImage\" type=\"file\" name=\"myfile\" hidden\n accept=\".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/x-png,image/jpeg,image/jpg,.pdf, video/mp4,video/x-matroska,video/x-msvideo,video/quicktime\"\n (change)=\"uploadBackUpDocument($event)\" class=\"pc-btn\"\n id=\"browse_contact_image\" #backUpDocInput />\n </div>\n </div>\n </div>\n\n </ng-container>\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Document' && data?.sectionType === 'admissionForm'\">\n <simpo-document [documentList]=\"documentList\"></simpo-document>\n </div>\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Payment' && data?.sectionType === 'admissionForm'\">\n <simpo-payment-details [admissionData]=\"payload\"\n [subscriptionsData]=\"subscriptionsData\" [termPaymentList]=\"termPaymentList\"></simpo-payment-details>\n </div>\n </div>\n\n <div class=\"button-parent\">\n <ng-container *ngFor=\"let button of data?.action?.buttons\">\n <button class=\"button\" (click)=\"submitForm()\" simpoButtonDirective [id]=\"data?.id+button.id\"\n [buttonStyle]=\"button.styles\" *ngIf=\"(data?.sectionType === 'admissionForm' && selectedKey == 'Payment') ||\n (data?.sectionType === 'registrationForm' &&\n (Object.keys(fieldData)[Object.keys(fieldData).length - 1] == selectedKey))\"\n [color]=\"data?.styles?.background?.accentColor\">{{button?.content?.label}}</button>\n\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\n [buttonStyle]=\"button.styles\" *ngIf=\"selectedKey != 'Payment' && data?.sectionType === 'admissionForm'\"\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\n\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\n [buttonStyle]=\"button.styles\"\n *ngIf=\"data?.sectionType === 'registrationForm' && (Object.keys(fieldData)[Object.keys(fieldData).length - 1] != selectedKey)\"\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\n </ng-container>\n </div>\n </div>\n\n <div class=\"emptyText\" *ngIf=\"formStatus == 'REGISTERED' || formStatus == 'ADMITTED'\">\n <img [src]=\"content?.image?.url\" alt=\"\" *ngIf=\"content?.image?.showImage\">\n <div class=\"heading-large\" [innerHtml]=\"content?.inputText?.[1]?.value\"></div>\n </div>\n </section>\n\n <ng-template #inputData let-field=\"data\" let-group=\"group\">\n <div *ngIf=\"field.dataType == 'IMAGE'\">\n <div class=\"image-box\" *ngIf=\"!field.fieldImageUrl\">\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\n (click)=\"fileInput2.click()\" alt=\"\">\n <div class=\"d-flex align-items-center\">\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput2.click()\">Click to\n upload</span>\n </div>\n </div>\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\" accept=\"image/x-png,image/jpeg,image/jpg\"\n (change)=\"uploadParentGuardinaImages($event,field)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput2 />\n <div *ngIf=\"field.fieldImageUrl\" class=\"addedImg\">\n <div class=\"uploadedImg\">\n <img alt=\"\" [src]=\"ds.bypassSecurityTrustUrl(field.fieldImageUrl)\">\n </div>\n <div class=\"image-buttons\">\n <div class=\"button\" (click)=\"fileInput2.click()\">\n <img src=\"../../../../../../../../../assets/images/blogs/change_image.svg\" alt=\"\">\n Change Image\n </div>\n <div class=\"button delete-change\" (click)=\"deleteImg()\">\n \n <div class=\"delete\">\n <img src=\"./../../../../../../../../../assets/images/blogs/delete_image.svg\" alt=\"\">\n <div>Delete</div>\n </div>\n \n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"field.dataType === 'TEXT' && field.isDisplay\">\n <input type=\"text\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\n <div class=\"error\" *ngIf=\"field.fieldValue && !getFieldValidation(field)\">\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('phone number')\">\n Please enter a valid 10-digit Indian mobile number.\n </ng-container>\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('email')\">\n Please enter a valid email address.\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"field.dataType === 'NUMBER' && field.isDisplay\">\n <input type=\"number\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\n <div class=\"error\" *ngIf=\"field.fieldValue && !getFieldValidation(field)\">\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('phone number')\">\n Please enter a valid 10-digit Indian mobile number.\n </ng-container>\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('email')\">\n Please enter a valid email address.\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"field.dataType === 'MONEY' && field.isDisplay\">\n <input type=\"text\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\n </div>\n <div *ngIf=\"field.dataType === 'DATE' && field.isDisplay\">\n <input type=\"date\" class=\"input-text\" [(ngModel)]=\"field.fieldValue\" [placeholder]=\"'Select '+field.fieldLabel\" [max]=\"getMaxDate(field)\"\n (input)=\"checkDob(field)\">\n </div>\n <div class=\"input-container\" *ngIf=\"field.dataType === 'TEXT_FILE' && field.isDisplay\">\n <input matInput class=\"input-text-1\" [(ngModel)]=\"field.fieldValue\" style=\"width:90%\">\n <div class=\"image-box-1 d-flex justify-content-center align-items-center\" *ngIf=\"!field.fieldImageUrl\"\n style=\"width:10%\">\n <mat-icon (click)=\"fileInput1.click()\"\n class=\"dummy-image-1 w-100 d-flex justify-content-center\">cloud_upload</mat-icon>\n </div>\n <div class=\"image-box-1 d-flex justify-content-center align-items-center\" *ngIf=\"field.fieldImageUrl\" style=\"width:10%\">\n <!-- If the uploaded file is an image, show the preview -->\n <img\n *ngIf=\"isImage(field.fieldImageUrl)\"\n alt=\"\"\n class=\"w-100 h-100\"\n [src]=\"ds.bypassSecurityTrustUrl(field.fieldImageUrl)\"\n (click)=\"fileInput1.click()\" />\n \n <!-- If the uploaded file is not an image, show a file icon -->\n <mat-icon\n *ngIf=\"!isImage(field.fieldImageUrl)\"\n class=\"w-100 d-flex justify-content-center align-items-center dummy-image-1\"\n (click)=\"fileInput1.click()\">insert_drive_file</mat-icon>\n </div>\n \n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\"\n accept=\".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/x-png,image/jpeg,image/jpg,.pdf, video/mp4,video/x-matroska,video/x-msvideo,video/quicktime\"\n (change)=\"updateSelectedImage($event,field)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput1 />\n </div>\n <div *ngIf=\"field.dataType === 'DROPDOWN' && field.isDisplay\" class=\"admission\">\n <mat-form-field class=\"input-text-1 input_card\" appearance=\"outline\" style=\"width:100%\">\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" [(ngModel)]=\"field.fieldValue\" [multiple]=\"field.multipleSelection\">\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\n <mat-option *ngFor=\"let item of field.value\" [value]=\"item?.value\" (click)=\"masterDropdownValueChange(item, field)\">{{item.label}}</mat-option>\n </ng-container>\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\n <mat-option *ngFor=\"let item of field.sourceData[field.dataSourceType]\"\n (click)=\"inputFieldChange(item, field)\" [value]=\"item?.name\">{{item.name}}</mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <div *ngIf=\"field.dataType === 'CHECKBOX' && field.isDisplay\">\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.value\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckChecked\" [(ngModel)]=\"data.checked\">\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\n {{data.label}}\n </label>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.sourceData[field.dataSourceType]\">\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckChecked\" [(ngModel)]=\"data.checked\">\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\n {{data.name}}\n </label>\n </div>\n </ng-container>\n </div>\n <div *ngIf=\"field.dataType === 'RADIOBUTTON' && field.isDisplay\">\n <div style=\"display: flex; gap: 20px; margin-top: 10px; height: 35px;align-items: center;\">\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\n <!-- <div class=\" mb-5\" *ngFor=\"let data of field.value\">\n <mat-radio-button [value]=\"data.value\" [(ngModel)]=\"field.fieldValue\">{{data.label}}</mat-radio-button>\n </div> -->\n <mat-radio-group [(ngModel)]=\"field.fieldValue\" (change)=\"radioButtonChanged(field,selectedKey,group)\">\n <mat-radio-button *ngFor=\"let data of field.value\" [value]=\"data.value\">\n {{ data.label }}\n </mat-radio-button>\n </mat-radio-group>\n </ng-container>\n \n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.value\">\n <input class=\"form-check-input\" type=\"radio\" [value]=\"data.name\" [(ngModel)]=\"field.fieldValue\" />\n \n <label class=\"form-check-label\" [for]=\"'radio_' + data.name\">\n {{ data.name }}\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </ng-template>\n\n\n <ng-container *ngIf=\"styles?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n</section>\n", styles: [".total_container{height:auto;position:relative}.body-section{padding:4% 15px}.button-section{margin-top:15px}.clipPath{clip-path:polygon(0% 100%,50% 0%,100% 100%);height:100px;background-color:#00f}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.mt-15{margin-top:15px}@media only screen and (max-width: 475px){.d-flex{justify-content:center;margin-bottom:25px}}.main-section{width:100%;overflow-y:hidden}.subTabs_section{padding:1rem 5rem;height:12vh}.active_route_section{height:89%;border:1px solid #0000000F;padding:15px 20px;background-color:#fff;border-radius:6px}.active_route_section_normal{background-color:#f6f6f6;border:none;padding:10px 4rem}.list_tabs{border:1px solid #0000001A;background-color:#ffffffe5;padding:10px;border-radius:6px;gap:10px;height:50px}.single_tab{color:#0e233c99;font-size:14px;font-weight:500;font-family:interReg;padding:10px 20px}.single_tab_active{width:max-content;height:32px;background-color:#0015800a;display:flex;align-items:center;font-weight:600;padding:10px 20px;border-radius:4px;color:#0e233c}.align-items-center{align-items:center}.header{height:8vh;padding:10px;border-bottom:2px solid rgba(0,0,0,.06);display:flex}.p-5{padding:5rem}.backToLeads{color:#000!important}.body{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;padding:2rem;border-radius:10px}.profile-img{display:flex;align-items:center;gap:2rem}.mt-2{margin-top:2rem!important}.mt-1{margin-top:1rem!important}.image-box{display:flex;gap:1rem;margin-top:3rem;cursor:pointer}.image-box span{color:#0189ea;font-size:14px;font-weight:500;padding:11px 7rem;border:2px solid rgba(0,0,0,.06);height:47px;border-radius:10px}.image_box{display:flex;align-items:center}.dummy-image{height:55px}.label-text{font-weight:400;font-family:Inter;font-size:14px;color:#434443}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.footer{display:flex;gap:1rem;align-items:center;justify-content:flex-end;height:8vh;padding:10px;border-top:2px solid rgba(0,0,0,.06);position:absolute;bottom:0;width:100%}.footer .continue{font-size:13px;font-family:interMedium;color:#242424;font-weight:500;border:none;background-color:#f6c318;padding:10px 20px;border-radius:8px;width:max-content}.footer .cancel{font-size:13px;font-family:interMedium;color:#f6c318;font-weight:500;border:1px solid #F6C318;background-color:#fff;padding:10px 20px;border-radius:8px;width:max-content}.main-content{overflow:scroll;padding-top:5px;padding-bottom:10px}.button-parent{padding:1rem 5rem 1rem 2rem;align-items:center;display:flex;justify-content:flex-end}.button{font-size:16px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.payment-details{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;border-radius:10px}.mb-5{margin-bottom:5px!important}.addedImg{display:flex;gap:5%;width:95%;margin-top:2rem}.addedImg .uploadedImg img{height:65px;width:65px;border-radius:50%}.addedImg .image-buttons{display:flex;gap:3%;padding-top:20px}.addedImg .image-buttons .button{display:flex;gap:8px;width:142px;height:40px;padding:12px 8px;font-family:lexandMedium;color:#3f3b3b;font-style:normal;font-weight:500;font-size:12px!important;border:1px dashed #E4E7EC;border-radius:12px;cursor:pointer}.addedImg .image-buttons .button img{width:20px}.addedImg .image-buttons .button .delete{display:flex;gap:15%;width:60%;margin:auto}.addedImg .image-buttons .button .delete img{width:12px}.emptyText{height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:50px}.emptyText img{height:200px}@media screen and (max-width: 475px){.body{margin:0rem}.emptyText{padding:1rem}.emptyText img{width:100%}.subTabs_section{padding:1rem .5rem}.list_tabs{white-space:nowrap;overflow:scroll;justify-content:flex-start}.payment-details{margin:0rem}}.mtb-15{margin-top:15px;margin-bottom:15px}.checkbox-label{display:flex;align-items:center;gap:15px}.checkbox-label input{height:16px;width:16px}.upload-file{display:flex;align-items:center;justify-content:space-between;padding-right:10px}.upload-file mat-icon{color:#4caf50}.upload-file p{margin-bottom:0}@media only screen and (min-width: 320px) and (max-width : 500px){.image-box span{padding:11px 4rem}}mat-form-field{border:1px solid 2px solid rgba(208,213,221,1);border-radius:8px}.input-container{display:flex;border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.input-container input:focus{outline:none}.input-text-1{border:none}.image-box-1{display:flex;cursor:pointer;border-left:1px solid rgba(208,213,221,1)}.dummy-image-1{font-size:20px;color:green}.error{font-size:12px;font-family:var(--primary-font-family);color:red;margin-top:4px}\n"] }]
824
+ ], template: "<section simpoHover (hovering)=\"showEditTabs($event)\" class=\"total-container\">\r\n <div [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <div #mainContainer class=\"rowFlex\" [id]=\"data?.id\" [simpoOverlay]=\"styles?.background\"\r\n [simpoBorder]=\"styles?.border\">\r\n <div class=\"main-section\"\r\n [ngClass]=\"{'justify-content-md-start': styles?.layout?.align === 'left' , 'justify-content-md-end': styles?.layout?.align === 'right'}\"\r\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"body-section\">\r\n <div [simpoAnimation]=\"styles?.animation\" [id]=\"data?.id\">\r\n <div>\r\n <simpo-text-element [textData]=\"content?.inputText?.[0]?.value\" [textLabel]=\"content?.inputText?.[0]?.label\"></simpo-text-element>\r\n </div>\r\n <div class=\"d-flex gap-2 d-md-flex mt-15\" *ngIf=\"data?.action?.display\" [ngClass]=\"[\r\n styles?.layout?.align === 'left' ? 'justify-content-md-start' : '',\r\n styles?.layout?.align === 'center' ? 'justify-content-md-center' : '',\r\n styles?.layout?.align === 'right' ? 'justify-content-md-end' : ''\r\n ]\">\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <section class=\"main-section\">\r\n <div *ngIf=\"formStatus != 'REGISTERED' && formStatus != 'ADMITTED'\">\r\n <div class=\"subTabs_section\">\r\n <div class=\"list_tabs d-flex align-items-center\">\r\n <ng-container *ngFor=\"let key of Object.keys(fieldData)\">\r\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = key\"\r\n [ngClass]=\"selectedKey === key ? 'single_tab_active' : 'single_tab'\">\r\n {{key | titlecase}}\r\n </div>\r\n </ng-container>\r\n <div class=\"single_tab cursor-pointer\" (click)=\"selectedKey = 'Document'\" *ngIf=\"data?.sectionType === 'admissionForm'\"\r\n [ngClass]=\"selectedKey === 'Document' ? 'single_tab_active' : 'single_tab'\">\r\n Document\r\n </div>\r\n <div class=\"single_tab cursor-pointer\" (click)=\"redirectToPayment()\"\r\n *ngIf=\"data?.sectionType === 'admissionForm'\"\r\n [ngClass]=\"selectedKey === 'Payment' ? 'single_tab_active' : 'single_tab'\">\r\n Payment\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"main-content\">\r\n <ng-container *ngFor=\"let group of fieldData[selectedKey] ? Object.keys(fieldData[selectedKey]) : [];let groupIndex = index\">\r\n <div class=\"body\" *ngIf=\"group !== 'Backup Contact'\">\r\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\r\n {{group}}\r\n </div>\r\n\r\n <ng-container *ngIf=\"groupIndex == 0 && Object.keys(fieldData)[0] === selectedKey\">\r\n <div class=\"image-box\" *ngIf=\"!payload.imgUrl\">\r\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\r\n (click)=\"fileInput.click()\" alt=\"\">\r\n <div class=\"image_box\">\r\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput.click()\">Click to\r\n upload</span>\r\n </div>\r\n </div>\r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\"\r\n accept=\"image/x-png,image/jpeg,image/jpg\" (change)=\"updateAdmissionImage($event)\" class=\"pc-btn\"\r\n id=\"browse_contact_image\" #fileInput />\r\n\r\n <div *ngIf=\"payload.imgUrl\" class=\"addedImg\">\r\n <div class=\"uploadedImg\">\r\n <img alt=\"\" [src]=\"ds.bypassSecurityTrustUrl(payload.imgUrl)\">\r\n </div>\r\n <div class=\"image-buttons\">\r\n <div class=\"button\" (click)=\"fileInput.click()\">\r\n <img src=\"../../../../../../../../../assets/images/blogs/change_image.svg\" alt=\"\">\r\n Change Image\r\n </div>\r\n <div class=\"button delete-change\" (click)=\"deleteImg()\">\r\n\r\n <div class=\"delete\">\r\n <img src=\"./../../../../../../../../../assets/images/blogs/delete_image.svg\" alt=\"\">\r\n <div>Delete</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n <!-- <div class=\"row mt-1\">\r\n <ng-container *ngFor=\"let info of fieldData[selectedKey][group]\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\r\n <label for=\"\" class=\"label-text\">{{info.displayText || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\" *ngIf=\"info.required\">*</span> <br>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div> -->\r\n <div class=\"row mt-1\" *ngIf=\"group != 'Siblings Details' && group != 'Past school Details'\">\r\n <ng-container *ngFor=\"let info of fieldData[selectedKey][group]\">\r\n <div\r\n [ngClass]=\"(info.type === 'FATHER_IMAGE' || info.type === 'MOTHER_IMAGE' || info.type === 'GUARDIAN_IMAGE') ? 'col-md-12 col-12' : 'col-md-4 col-12 mt-1'\"\r\n *ngIf=\"info.isDisplay\">\r\n <div class=\"d-flex\">\r\n <label for=\"\" class=\"label-text\"\r\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\r\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{returnDisplayText(info.displayText || info.fieldLabel)}}</label>&nbsp; <span style=\"color: red;\"\r\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"\" *ngIf=\"group === 'Siblings Details'\">\r\n <ng-container\r\n *ngFor=\"let key of objectKeys(groupOfSiblings(fieldData['Family Details']['Siblings Details']));let i = index\">\r\n <div class=\"row mt-2\">\r\n <ng-container *ngFor=\"let info of groupOfSiblings(fieldData['Family Details']['Siblings Details'])[key]\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\r\n <div class=\"d-flex\">\r\n <label for=\"\" class=\"label-text\"\r\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\r\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{info.displayText\r\n || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\r\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- <div class=\"border_bottom\" *ngIf=\"i >= 1\"></div> -->\r\n </ng-container>\r\n <div class=\"add_more_siblings d-flex justify-content-end\"\r\n *ngIf=\"group === 'Siblings Details' && showAddSiblingsButton()\">\r\n <button (click)=\"addSibling(nextSiblingNumber)\" class=\"add_sibling\" style=\"width:max-content !important\">+ Add Sibling {{ nextSiblingNumber\r\n }}</button>\r\n </div>\r\n </div>\r\n <div class=\"\" *ngIf=\"group === 'Past school Details'\">\r\n <ng-container\r\n *ngFor=\"let key of objectKeys(groupOfPastSchoolDetails(fieldData['Student Details']['Past school Details']));let i = index\">\r\n <div class=\"row mt-2\">\r\n <ng-container *ngFor=\"let info of groupOfPastSchoolDetails(fieldData['Student Details']['Past school Details'])[key]\">\r\n <div class=\"col-md-4 col-12 mt-1\" *ngIf=\"info.isDisplay\">\r\n <div class=\"d-flex\">\r\n <label for=\"\" class=\"label-text\"\r\n *ngIf=\"(info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\"\r\n [title]=\"returnDisplayText(info.displayText || info.fieldLabel)\">{{info.displayText\r\n || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\r\n *ngIf=\"info.required && (info.type != 'FATHER_IMAGE' && info.type != 'MOTHER_IMAGE' && info.type != 'GUARDIAN_IMAGE')\">*</span>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info, group:group}\"></ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <div class=\"add_more_siblings d-flex justify-content-end\"\r\n *ngIf=\"group === 'Past school Details' && showAddPastSchoolButton()\">\r\n <button (click)=\"addPastSchool(nextPastSchoolNumber)\" class=\"add_sibling\"\r\n style=\"width:max-content !important\">+ Add Past School {{ nextPastSchoolNumber}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"body\" *ngIf=\"fieldData[selectedKey].hasOwnProperty('Backup Contact') && studentLiveWith === 'single parent' && groupIndex == 0 && Object.keys(fieldData)[0] === selectedKey\">\r\n <div class=\"list_tabs backToLeads d-flex align-items-center\">\r\n Backup Contact (Optional)\r\n </div>\r\n\r\n <div class=\"row mt-1\">\r\n <div class=\"col-md-12\">\r\n <label class=\"mtb-15 checkbox-label\">\r\n <input type=\"checkbox\" name=\"\" id=\"\" [(ngModel)]=\"payload.parentAuthorization\">\r\n I authorize the school to release the child only to the parent listed above\r\n </label>\r\n </div>\r\n <div class=\"col-md-4 col-12 mt-1\" *ngFor=\"let info of fieldData[selectedKey]['Backup Contact']\">\r\n <label for=\"\" class=\"label-text\">{{info.displayText || info.fieldLabel}}</label>&nbsp; <span style=\"color: red;\"\r\n *ngIf=\"info.required\">*</span> <br>\r\n <ng-container *ngTemplateOutlet=\"inputData; context: {data: info}\"></ng-container>\r\n </div>\r\n <div class=\"col-md-4 col-12 mt-1\">\r\n <label for=\"\" class=\"label-text\">Upload Supporting Document (Optional)</label>\r\n <div class=\"input-text upload-file\" (click)=\"backUpDocInput.click()\">\r\n <p>{{backupDocFile ? 'File Uploaded' : 'Upload File'}}</p>\r\n <mat-icon>cloud_upload</mat-icon>\r\n </div>\r\n <input id=\"vendorImage\" type=\"file\" name=\"myfile\" hidden\r\n accept=\".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/x-png,image/jpeg,image/jpg,.pdf, video/mp4,video/x-matroska,video/x-msvideo,video/quicktime\"\r\n (change)=\"uploadBackUpDocument($event)\" class=\"pc-btn\"\r\n id=\"browse_contact_image\" #backUpDocInput />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Document' && data?.sectionType === 'admissionForm'\">\r\n <simpo-document [documentList]=\"documentList\"></simpo-document>\r\n </div>\r\n <div class=\"payment-details\" *ngIf=\"selectedKey === 'Payment' && data?.sectionType === 'admissionForm'\">\r\n <simpo-payment-details [admissionData]=\"payload\"\r\n [subscriptionsData]=\"subscriptionsData\" [termPaymentList]=\"termPaymentList\"></simpo-payment-details>\r\n </div>\r\n </div>\r\n\r\n <div class=\"button-parent\">\r\n <ng-container *ngFor=\"let button of data?.action?.buttons\">\r\n <button class=\"button\" (click)=\"submitForm()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"(data?.sectionType === 'admissionForm' && selectedKey == 'Payment') ||\r\n (data?.sectionType === 'registrationForm' &&\r\n (Object.keys(fieldData)[Object.keys(fieldData).length - 1] == selectedKey))\"\r\n [color]=\"data?.styles?.background?.accentColor\">{{button?.content?.label}}</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\" *ngIf=\"selectedKey != 'Payment' && data?.sectionType === 'admissionForm'\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n\r\n <button class=\"button\" (click)=\"continueAdmission()\" simpoButtonDirective [id]=\"data?.id+button.id\"\r\n [buttonStyle]=\"button.styles\"\r\n *ngIf=\"data?.sectionType === 'registrationForm' && (Object.keys(fieldData)[Object.keys(fieldData).length - 1] != selectedKey)\"\r\n [color]=\"data?.styles?.background?.accentColor\">Continue</button>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"emptyText\" *ngIf=\"formStatus == 'REGISTERED' || formStatus == 'ADMITTED'\">\r\n <img [src]=\"content?.image?.url\" alt=\"\" *ngIf=\"content?.image?.showImage\">\r\n <div class=\"heading-large\" [innerHtml]=\"content?.inputText?.[1]?.value\"></div>\r\n </div>\r\n </section>\r\n\r\n <ng-template #inputData let-field=\"data\" let-group=\"group\">\r\n <div *ngIf=\"field.dataType == 'IMAGE'\">\r\n <div class=\"image-box\" *ngIf=\"!field.fieldImageUrl\">\r\n <img class=\"dummy-image\" src=\"../../../../../../../../../assets/images/master/add-image.svg\"\r\n (click)=\"fileInput2.click()\" alt=\"\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"fc_browse_btn\" id=\"display_browse_btn\" (click)=\"fileInput2.click()\">Click to\r\n upload</span>\r\n </div>\r\n </div>\r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\" accept=\"image/x-png,image/jpeg,image/jpg\"\r\n (change)=\"uploadParentGuardinaImages($event,field)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput2 />\r\n <div *ngIf=\"field.fieldImageUrl\" class=\"addedImg\">\r\n <div class=\"uploadedImg\">\r\n <img alt=\"\" [src]=\"ds.bypassSecurityTrustUrl(field.fieldImageUrl)\">\r\n </div>\r\n <div class=\"image-buttons\">\r\n <div class=\"button\" (click)=\"fileInput2.click()\">\r\n <img src=\"../../../../../../../../../assets/images/blogs/change_image.svg\" alt=\"\">\r\n Change Image\r\n </div>\r\n <div class=\"button delete-change\" (click)=\"deleteImg()\">\r\n \r\n <div class=\"delete\">\r\n <img src=\"./../../../../../../../../../assets/images/blogs/delete_image.svg\" alt=\"\">\r\n <div>Delete</div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'TEXT' && field.isDisplay\">\r\n <input type=\"text\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\r\n <div class=\"error\" *ngIf=\"field.fieldValue && !getFieldValidation(field)\">\r\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('phone number')\">\r\n Please enter a valid 10-digit Indian mobile number.\r\n </ng-container>\r\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('email')\">\r\n Please enter a valid email address.\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'NUMBER' && field.isDisplay\">\r\n <input type=\"number\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\r\n <div class=\"error\" *ngIf=\"field.fieldValue && !getFieldValidation(field)\">\r\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('phone number')\">\r\n Please enter a valid 10-digit Indian mobile number.\r\n </ng-container>\r\n <ng-container *ngIf=\"field.fieldLabel?.toLowerCase().includes('email')\">\r\n Please enter a valid email address.\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'MONEY' && field.isDisplay\">\r\n <input type=\"text\" class=\"input-text\" [placeholder]=\"'Enter '+field.fieldLabel\" [(ngModel)]=\"field.fieldValue\">\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DATE' && field.isDisplay\">\r\n <input type=\"date\" class=\"input-text\" [(ngModel)]=\"field.fieldValue\" [placeholder]=\"'Select '+field.fieldLabel\" [max]=\"getMaxDate(field)\"\r\n (input)=\"checkDob(field)\">\r\n </div>\r\n <div class=\"input-container\" *ngIf=\"field.dataType === 'TEXT_FILE' && field.isDisplay\">\r\n <input matInput class=\"input-text-1\" [(ngModel)]=\"field.fieldValue\" style=\"width:90%\">\r\n <div class=\"image-box-1 d-flex justify-content-center align-items-center\" *ngIf=\"!field.fieldImageUrl\"\r\n style=\"width:10%\">\r\n <mat-icon (click)=\"fileInput1.click()\"\r\n class=\"dummy-image-1 w-100 d-flex justify-content-center\">cloud_upload</mat-icon>\r\n </div>\r\n <div class=\"image-box-1 d-flex justify-content-center align-items-center\" *ngIf=\"field.fieldImageUrl\" style=\"width:10%\">\r\n <!-- If the uploaded file is an image, show the preview -->\r\n <img\r\n *ngIf=\"isImage(field.fieldImageUrl)\"\r\n alt=\"\"\r\n class=\"w-100 h-100\"\r\n [src]=\"ds.bypassSecurityTrustUrl(field.fieldImageUrl)\"\r\n (click)=\"fileInput1.click()\" />\r\n \r\n <!-- If the uploaded file is not an image, show a file icon -->\r\n <mat-icon\r\n *ngIf=\"!isImage(field.fieldImageUrl)\"\r\n class=\"w-100 d-flex justify-content-center align-items-center dummy-image-1\"\r\n (click)=\"fileInput1.click()\">insert_drive_file</mat-icon>\r\n </div>\r\n \r\n <input style=\"display: none;\" id=\"vendorImage\" type=\"file\" name=\"myfile\"\r\n accept=\".doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/x-png,image/jpeg,image/jpg,.pdf, video/mp4,video/x-matroska,video/x-msvideo,video/quicktime\"\r\n (change)=\"updateSelectedImage($event,field)\" class=\"pc-btn\" id=\"browse_contact_image\" #fileInput1 />\r\n </div>\r\n <div *ngIf=\"field.dataType === 'DROPDOWN' && field.isDisplay\" class=\"admission\">\r\n <mat-form-field class=\"input-text-1 input_card\" appearance=\"outline\" style=\"width:100%\">\r\n <mat-select class=\"inputStyle\" placeholder=\"--Select--\" [(ngModel)]=\"field.fieldValue\" [multiple]=\"field.multipleSelection\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <mat-option *ngFor=\"let item of field.value\" [value]=\"item?.value\" (click)=\"masterDropdownValueChange(item, field)\">{{item.label}}</mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <mat-option *ngFor=\"let item of field.sourceData[field.dataSourceType]\"\r\n (click)=\"inputFieldChange(item, field)\" [value]=\"item?.name\">{{item.name}}</mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'CHECKBOX' && field.isDisplay\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.value\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckChecked\" [(ngModel)]=\"data.checked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n {{data.label}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.sourceData[field.dataSourceType]\">\r\n <input class=\"form-check-input\" type=\"checkbox\" value=\"\" id=\"flexCheckChecked\" [(ngModel)]=\"data.checked\">\r\n <label class=\"form-check-label\" for=\"flexCheckChecked\">\r\n {{data.name}}\r\n </label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"field.dataType === 'RADIOBUTTON' && field.isDisplay\">\r\n <div style=\"display: flex; gap: 20px; margin-top: 10px; height: 35px;align-items: center;\">\r\n <ng-container *ngIf=\"(field?.value?.length || 0) > 0\">\r\n <!-- <div class=\" mb-5\" *ngFor=\"let data of field.value\">\r\n <mat-radio-button [value]=\"data.value\" [(ngModel)]=\"field.fieldValue\">{{data.label}}</mat-radio-button>\r\n </div> -->\r\n <mat-radio-group [(ngModel)]=\"field.fieldValue\" (change)=\"radioButtonChanged(field,selectedKey,group)\">\r\n <mat-radio-button *ngFor=\"let data of field.value\" [value]=\"data.value\">\r\n {{ data.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"(field?.value?.length || 0) == 0\">\r\n <div class=\"form-check mb-5\" *ngFor=\"let data of field.value\">\r\n <input class=\"form-check-input\" type=\"radio\" [value]=\"data.name\" [(ngModel)]=\"field.fieldValue\" />\r\n \r\n <label class=\"form-check-label\" [for]=\"'radio_' + data.name\">\r\n {{ data.name }}\r\n </label>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n</section>\r\n", styles: [".total_container{height:auto;position:relative}.body-section{padding:4% 15px}.button-section{margin-top:15px}.clipPath{clip-path:polygon(0% 100%,50% 0%,100% 100%);height:100px;background-color:#00f}.hover_effect{position:absolute;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.mt-15{margin-top:15px}@media only screen and (max-width: 475px){.d-flex{justify-content:center;margin-bottom:25px}}.main-section{width:100%;overflow-y:hidden}.subTabs_section{padding:1rem 5rem;height:12vh}.active_route_section{height:89%;border:1px solid #0000000F;padding:15px 20px;background-color:#fff;border-radius:6px}.active_route_section_normal{background-color:#f6f6f6;border:none;padding:10px 4rem}.list_tabs{border:1px solid #0000001A;background-color:#ffffffe5;padding:10px;border-radius:6px;gap:10px;height:50px}.single_tab{color:#0e233c99;font-size:14px;font-weight:500;font-family:interReg;padding:10px 20px}.single_tab_active{width:max-content;height:32px;background-color:#0015800a;display:flex;align-items:center;font-weight:600;padding:10px 20px;border-radius:4px;color:#0e233c}.align-items-center{align-items:center}.header{height:8vh;padding:10px;border-bottom:2px solid rgba(0,0,0,.06);display:flex}.p-5{padding:5rem}.backToLeads{color:#000!important}.body{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;padding:2rem;border-radius:10px}.profile-img{display:flex;align-items:center;gap:2rem}.mt-2{margin-top:2rem!important}.mt-1{margin-top:1rem!important}.image-box{display:flex;gap:1rem;margin-top:3rem;cursor:pointer}.image-box span{color:#0189ea;font-size:14px;font-weight:500;padding:11px 7rem;border:2px solid rgba(0,0,0,.06);height:47px;border-radius:10px}.image_box{display:flex;align-items:center}.dummy-image{height:55px}.label-text{font-weight:400;font-family:Inter;font-size:14px;color:#434443}.input-text{border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.footer{display:flex;gap:1rem;align-items:center;justify-content:flex-end;height:8vh;padding:10px;border-top:2px solid rgba(0,0,0,.06);position:absolute;bottom:0;width:100%}.footer .continue{font-size:13px;font-family:interMedium;color:#242424;font-weight:500;border:none;background-color:#f6c318;padding:10px 20px;border-radius:8px;width:max-content}.footer .cancel{font-size:13px;font-family:interMedium;color:#f6c318;font-weight:500;border:1px solid #F6C318;background-color:#fff;padding:10px 20px;border-radius:8px;width:max-content}.main-content{overflow:scroll;padding-top:5px;padding-bottom:10px}.button-parent{padding:1rem 5rem 1rem 2rem;align-items:center;display:flex;justify-content:flex-end}.button{font-size:16px!important;padding:1rem 2rem;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important}.payment-details{margin:1rem 5rem 0rem;box-shadow:#00000029 0 1px 4px;border-radius:10px}.mb-5{margin-bottom:5px!important}.addedImg{display:flex;gap:5%;width:95%;margin-top:2rem}.addedImg .uploadedImg img{height:65px;width:65px;border-radius:50%}.addedImg .image-buttons{display:flex;gap:3%;padding-top:20px}.addedImg .image-buttons .button{display:flex;gap:8px;width:142px;height:40px;padding:12px 8px;font-family:lexandMedium;color:#3f3b3b;font-style:normal;font-weight:500;font-size:12px!important;border:1px dashed #E4E7EC;border-radius:12px;cursor:pointer}.addedImg .image-buttons .button img{width:20px}.addedImg .image-buttons .button .delete{display:flex;gap:15%;width:60%;margin:auto}.addedImg .image-buttons .button .delete img{width:12px}.emptyText{height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:50px}.emptyText img{height:200px}@media screen and (max-width: 475px){.body{margin:0rem}.emptyText{padding:1rem}.emptyText img{width:100%}.subTabs_section{padding:1rem .5rem}.list_tabs{white-space:nowrap;overflow:scroll;justify-content:flex-start}.payment-details{margin:0rem}}.mtb-15{margin-top:15px;margin-bottom:15px}.checkbox-label{display:flex;align-items:center;gap:15px}.checkbox-label input{height:16px;width:16px}.upload-file{display:flex;align-items:center;justify-content:space-between;padding-right:10px}.upload-file mat-icon{color:#4caf50}.upload-file p{margin-bottom:0}@media only screen and (min-width: 320px) and (max-width : 500px){.image-box span{padding:11px 4rem}}mat-form-field{border:1px solid 2px solid rgba(208,213,221,1);border-radius:8px}.input-container{display:flex;border-radius:7px;border:2px solid rgba(208,213,221,1);height:42px;width:100%;margin-top:5px;padding-left:10px}.input-container input:focus{outline:none}.input-text-1{border:none}.image-box-1{display:flex;cursor:pointer;border-left:1px solid rgba(208,213,221,1)}.dummy-image-1{font-size:20px;color:green}.error{font-size:12px;font-family:var(--primary-font-family);color:red;margin-top:4px}\n"] }]
825
825
  }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.MatSnackBar }, { type: i3.EventsService }, { type: i4.ActivatedRoute }, { type: i5.DomSanitizer }, { type: i6.ImageUplaodService }], propDecorators: { data: [{
826
826
  type: Input
827
827
  }], index: [{
@@ -831,4 +831,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
831
831
  }], nextComponentColor: [{
832
832
  type: Input
833
833
  }] } });
834
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZWN0aW9ucy9yZWdpc3RyYXRpb24tZm9ybS9yZWdpc3RyYXRpb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3JlZ2lzdHJhdGlvbi1mb3JtL3JlZ2lzdHJhdGlvbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUcsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVy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OlsiaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0R3JpZExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ncmlkLWxpc3QnO1xuaW1wb3J0IHsgU2ltcG9FbGVtZW50c01vZHVsZSB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL2luZGV4JztcbmltcG9ydCB7IEJhY2tncm91bmRNb2RlbCwgU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2luZGV4JztcbmltcG9ydCB7ICBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBBbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYW5pbWF0aW9uLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi9CYXNlU2VjdGlvbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEltYWdlVXBsYW9kU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ltYWdlLXVwbG9hZC1zZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVnaXN0cmF0aW9uRm9ybUNvbnRlbnRNb2RlbCwgUmVnaXN0cmF0aW9uRm9ybU1vZGVsIH0gZnJvbSAnLi9yZWdpc3RyYXRpb25Gb3JtLm1vZGVsJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaW1wby1yZWdpc3RyYXRpb24tZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0R3JpZExpc3RNb2R1bGUsXG4gICAgU2ltcG9FbGVtZW50c01vZHVsZSxcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgLy9kaXJlY3RpdmVcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcbiAgICBCb3JkZXJEaXJlY3RpdmUsXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXG4gICAgSG92ZXJEaXJlY3RpdmUsXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBNYXRPcHRpb25Nb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0UmFkaW9Nb2R1bGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lzdHJhdGlvbi1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3JlZ2lzdHJhdGlvbi1mb3JtLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lzdHJhdGlvbkZvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95e1xuICBASW5wdXQoKSBkYXRhPzogUmVnaXN0cmF0aW9uRm9ybU1vZGVsO1xuICBASW5wdXQoKSBpbmRleD8gOiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/IDogYm9vbGVhbjtcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xuICBjb250ZW50OiBSZWdpc3RyYXRpb25Gb3JtQ29udGVudE1vZGVsIHwgdW5kZWZpbmVkO1xuICBzdHlsZXM6IFN0eWxlc01vZGVsIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZSA6IEV2ZW50c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHB1YmxpYyBkczogRG9tU2FuaXRpemVyLFxuICAgIHB1YmxpYyBpbWFnZVVwbG9hZFNlcnZpY2U6IEltYWdlVXBsYW9kU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgT2JqZWN0ID0gT2JqZWN0O1xuICBwYXlsb2FkOiBhbnkgPSB7XG4gICAgXCJidXNpbmVzc0RldGFpbHNcIjoge1xuICAgICAgXCJpZFwiOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIiksXG4gICAgICBcIm5hbWVcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiTmFtZVwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzTmFtZVwiKVxuICAgIH0sXG4gICAgXCJmaWVsZEl0ZW1zXCI6IFtdLFxuICAgIFwiaW1nVXJsXCI6ICcnLFxuICAgICdkb2N1bWVudHMnOiBbXSxcbiAgICBcInBhcmVudEF1dGhvcml6YXRpb25cIjogZmFsc2UsXG4gICAgXCJiYWNrdXBEb2NcIiA6ICcnLFxuICAgIFwicGF5bWVudFBsYW5UeXBlXCIgOiAnQU5OVUFMTFknLFxuICAgIFwic3Vic2NyaXB0aW9uUGxhbnNcIjogW10sXG4gICAgXCJhZG1pc3Npb25QYXltZW50RGV0YWlsXCI6IHtcbiAgICAgIFwiYW1vdW50XCI6IDAsXG4gICAgICBcInBheW1lbnREYXRlXCI6IG5ldyBEYXRlKCksXG4gICAgICBcInBheW1lbnRTdGF0dXNcIjogXCJQRU5ESU5HXCIsXG4gICAgICBcImZhaWxlZFJlYXNvblwiOiBcIlwiLFxuICAgICAgXCJwYXltZW50TGlua1wiOiBcIlwiLFxuICAgICAgXCJvZmZsaW5lUGF5bWVudE1vZGVcIjogbnVsbCxcbiAgICAgIFwiY2hlcXVlSXNzdWVkQnlcIjogXCJcIixcbiAgICAgIFwiYWNjb3VudE51bWJlclwiOiBcIlwiLFxuICAgICAgXCJjaGVxdWVCYW5rXCI6IFwiXCIsXG4gICAgICBcInJlbWFya3NcIjogXCJcIixcbiAgICAgIFwicmVmZXJlbmNlTnVtYmVyXCI6IFwiXCIsXG4gICAgICBcIm9mZmxpbmVQYXltZW50XCI6IGZhbHNlLFxuICAgICAgXCJhdHRhY2hlbWVudFVybFwiOiBcIlwiXG4gICAgfVxuICB9XG5cbiAgc2VsZWN0ZWRLZXk6IGFueTtcbiAgZmllbGREYXRhOiBhbnkgPSB7fVxuICBidXNpbmVzc0lkOiBhbnkgPSAnMWVmZGQzZjAtZmM5My02NjhmLWI2ZDAtZmQ2MGEyNTQyNDYzJztcbiAgc2VsZWN0ZWRHcmFkZUlkOiBhbnk7XG4gIHNlbGVjdGVkQWNhZGVtaWNZZWFyOiBhbnk7XG4gIGRvY3VtZW50TGlzdDogYW55W10gPSBbXTtcbiAgZm9ybVN0YXR1czogc3RyaW5nID0gJydcbiAgc3R1ZGVudExpdmVXaXRoOiBhbnkgPSAnJ1xuICBiYWNrdXBEb2NGaWxlPzogRmlsZTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJvdXRlci5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtOiBhbnkpID0+IHtcbiAgICAgIGlmKHBhcmFtWydlSWQnXSlcbiAgICAgICAgdGhpcy5wYXlsb2FkWydlbnF1aXJ5SWQnXSA9IHBhcmFtWydlSWQnXTtcblxuICAgICAgaWYocGFyYW1bJ3JJZCddKVxuICAgICAgICB0aGlzLnBheWxvYWRbJ3JlZ2lzdHJhdGlvbklkJ10gPSBwYXJhbVsncklkJ107XG5cbiAgICAgIGlmKHBhcmFtWydiSWQnXSlcbiAgICAgICAgdGhpcy5idXNpbmVzc0lkID0gcGFyYW1bJ2JJZCddO1xuXG4gICAgICBpZihwYXJhbVsndElkJ10pXG4gICAgICAgIHRoaXMucGF5bG9hZFsndGVtcGxhdGVJZCddID0gcGFyYW1bJ3RJZCddO1xuXG4gICAgICB0aGlzLnBheWxvYWQuYnVzaW5lc3NEZXRhaWxzLmlkID0gdGhpcy5idXNpbmVzc0lkO1xuXG4gICAgICBpZih0aGlzLnBheWxvYWRbJ3JlZ2lzdHJhdGlvbklkJ10gfHwgdGhpcy5wYXlsb2FkWydlbnF1aXJ5SWQnXSkge1xuICAgICAgICB0aGlzLmdldEZvcm1kYXRhKHRoaXMucGF5bG9hZFsncmVnaXN0cmF0aW9uSWQnXSB8fCB0aGlzLnBheWxvYWRbJ2VucXVpcnlJZCddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0QWxsRmllbGRzKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2V0QUxMRG9jdW1lbnRMaXN0KCk7XG5cbiAgICB9KVxuXG4gICAgLy8gdGhpcy5idXNpbmVzc0lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpO1xuXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmZvcm1GaWVsZENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldEZvcm1kYXRhKGFkbWlzc2lvbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXJ2ZXJDYWxsID0gZm9ya0pvaW4oe1xuICAgICAgYWRtaXNzaW9uRGF0YTogdGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nID8gdGhpcy5yZXN0U2VydmljZS5nZXRMZWFkQnlJZChhZG1pc3Npb25JZCkgOiB0aGlzLnJlc3RTZXJ2aWNlLmdldFJlZ2lzdHJhdGlvbkxpc3Qoe2lkOiBhZG1pc3Npb25JZCwgcGFnZU5vOiAwLCBwYWdlU2l6ZTogMX0pLFxuICAgICAgZmllbGREYXRhOiB0aGlzLnJlc3RTZXJ2aWNlLmdldFNlbGVjdGVkTGlzdEZpZWxkcyh0aGlzLmJ1c2luZXNzSWQsIHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyA/ICdSRUdJU1RSQVRJT04nIDogJ0FETUlTU0lPTicsICB0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgPyAnUkVHSVNUUkFUSU9OJyA6ICdBRE1JU1NJT04nKVxuICAgIH0pXG5cblxuICAgIHNlcnZlckNhbGwuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgbGV0IGFkbWlzc2lvbkRhdGEgPSB0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgPyByZXN1bHQuYWRtaXNzaW9uRGF0YS5kYXRhIDogcmVzdWx0LmFkbWlzc2lvbkRhdGEuZGF0YS5kYXRhWzBdO1xuICAgICAgbGV0IGZpZWxkRGF0YSA9IHJlc3VsdC5maWVsZERhdGEuZGF0YTtcbiAgICAgIGZpZWxkRGF0YT8uZGF0YS5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xuICAgICAgICBpZiAoKGVsZW1lbnQuZmllbGRMYWJlbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygncGFzc3BvcnQnKSAmJiBlbGVtZW50LmRhdGFUeXBlICE9ICdSQURJT0JVVFRPTicpIHtcbiAgICAgICAgICBlbGVtZW50LmlzRGlzcGxheSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGZpZWxkRGF0YT8uZGF0YS5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xuICAgICAgICBpZihlbGVtZW50LmRhdGFTb3VyY2VUeXBlID09PSAnQ09VTlRSWScpe1xuICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmaWVsZERhdGE/LmRhdGEuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcbiAgICAgICAgY29uc3QgaGFzU2libGluZ3NHcm91cCA9IEFycmF5LmlzQXJyYXkoZWxlbWVudC5maWVsZEdyb3VwKSAmJiBlbGVtZW50LmZpZWxkR3JvdXAuc29tZShcbiAgICAgICAgICAoZ3JvdXA6YW55KSA9PiBncm91cC5maWVsZEdyb3VwTmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInNpYmxpbmdzIGRldGFpbHNcIilcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGhhc1NpYmxpbmdzR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBsYWJlbENoZWNrID0gZWxlbWVudC5maWVsZExhYmVsPy5pbmNsdWRlcygnMScpO1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ2hlY2sgPSAhIWVsZW1lbnQuZmllbGRWYWx1ZTtcbiAgICAgICAgICBlbGVtZW50LmlzRGlzcGxheSA9IGxhYmVsQ2hlY2sgfHwgdmFsdWVDaGVjaztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGZpZWxkRGF0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc1NpYmxpbmdzR3JvdXAgPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmllbGRHcm91cCkgJiYgZWxlbWVudC5maWVsZEdyb3VwLnNvbWUoXG4gICAgICAgICAgKGdyb3VwOmFueSkgPT4gZ3JvdXAuZmllbGRHcm91cE5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJwYXN0IHNjaG9vbCBkZXRhaWxzXCIpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChoYXNTaWJsaW5nc0dyb3VwKSB7XG4gICAgICAgICAgY29uc3QgbGFiZWxDaGVjayA9IGVsZW1lbnQuZmllbGRMYWJlbD8uaW5jbHVkZXMoJzEnKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZUNoZWNrID0gISFlbGVtZW50LmZpZWxkVmFsdWU7XG4gICAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSBsYWJlbENoZWNrIHx8IHZhbHVlQ2hlY2s7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtU3RhdHVzID0gYWRtaXNzaW9uRGF0YS5zdGF0dXNcblxuICAgICAgLy8gdGhpcy5wYXlsb2FkID0gYWRtaXNzaW9uRGF0YTtcbiAgICAgIHRoaXMucGF5bG9hZFsnZG9jdW1lbnRzJ10gPSBbXTtcbiAgICAgIHRoaXMucGF5bG9hZC5idXNpbmVzc0RldGFpbHMuaWQgPSB0aGlzLmJ1c2luZXNzSWQ7XG4gICAgICB0aGlzLnBheWxvYWQuaW1nVXJsID0gYWRtaXNzaW9uRGF0YS5pbWdVcmxcblxuICAgICAgYWRtaXNzaW9uRGF0YVsnZmllbGRNYXAnXSA9IHt9O1xuICAgICAgZm9yKGxldCBmaWVsZEl0ZW0gb2YgdGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nID8gKGFkbWlzc2lvbkRhdGE/LmZpZWxkRGF0YSB8fCBbXSkgOiAoYWRtaXNzaW9uRGF0YT8uZmllbGRJdGVtcyB8fCBbXSkpIHtcbiAgICAgICAgaWYoZmllbGRJdGVtLmZpZWxkTmFtZSA9PT0gJ0FjYWRlbWljIFllYXInKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhciA9IGZpZWxkSXRlbS5maWVsZFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmKGZpZWxkSXRlbS50eXBlID09PSAnRkFUSEVSX0lNQUdFJyB8fCBmaWVsZEl0ZW0udHlwZSA9PT0gJ01PVEhFUl9JTUFHRScgfHwgZmllbGRJdGVtLnR5cGUgPT09ICdHVUFSRElBTl9JTUFHRScpe1xuICAgICAgICAgIGFkbWlzc2lvbkRhdGFbJ2ZpZWxkTWFwJ11bZmllbGRJdGVtLnR5cGVdID0gZmllbGRJdGVtLmZpZWxkSW1hZ2VVcmw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBmaWVsZEl0ZW0udHlwZSAhPSBudWxsICYmIGZpZWxkSXRlbS50eXBlICE9PSAnRkFUSEVSX0lNQUdFJyAmJiBmaWVsZEl0ZW0udHlwZSAhPT0gJ01PVEhFUl9JTUFHRScgJiYgZmllbGRJdGVtLnR5cGUgIT09ICdHVUFSRElBTl9JTUFHRScpIHtcbiAgICAgICAgICBhZG1pc3Npb25EYXRhWydmaWVsZE1hcCddW2ZpZWxkSXRlbS50eXBlXSA9IGZpZWxkSXRlbS5maWVsZFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpZCA9IGZpZWxkSXRlbS5maWVsZE5hbWUgKyBmaWVsZEl0ZW0uZmllbGRHcm91cE5hbWU7XG4gICAgICAgIGFkbWlzc2lvbkRhdGFbJ2ZpZWxkTWFwJ11baWRdID0gZmllbGRJdGVtLmZpZWxkVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmllbGREYXRhID0gdGhpcy5yZXN0U2VydmljZS5nZXRGaWVsZHNUb0Rpc3BsYXkoZmllbGREYXRhLmRhdGEpO1xuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IHRoaXMuT2JqZWN0LmtleXModGhpcy5maWVsZERhdGEpWzBdXG5cbiAgICAgIGZvcihsZXQgc3RlcCBvZiB0aGlzLk9iamVjdC5rZXlzKHRoaXMuZmllbGREYXRhKSkge1xuICAgICAgICBmb3IobGV0IGdyb3VwIG9mIE9iamVjdC5rZXlzKHRoaXMuZmllbGREYXRhW3N0ZXBdKSkge1xuICAgICAgICAgIGZvcihsZXQgZmllbGQgb2YgdGhpcy5maWVsZERhdGFbc3RlcF1bZ3JvdXBdKSB7XG4gICAgICAgICAgICBpZiAoZmllbGQudHlwZSAhPSBudWxsICYmIGZpZWxkLnR5cGUgIT09ICdGQVRIRVJfSU1BR0UnICYmIGZpZWxkLnR5cGUgIT09ICdNT1RIRVJfSU1BR0UnICYmIGZpZWxkLnR5cGUgIT09ICdHVUFSRElBTl9JTUFHRScpIHtcbiAgICAgICAgICAgICAgZmllbGQuZmllbGRWYWx1ZSA9IGFkbWlzc2lvbkRhdGFbJ2ZpZWxkTWFwJ11bZmllbGQudHlwZV07XG4gICAgICAgICAgICB9IFxuICAgICAgICAgICAgaWYoZmllbGQudHlwZSA9PT0gJ0ZBVEhFUl9JTUFHRScgfHwgZmllbGQudHlwZSA9PT0gJ01PVEhFUl9JTUFHRScgfHwgZmllbGQudHlwZSA9PT0gJ0dVQVJESUFOX0lNQUdFJyl7XG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkSW1hZ2VVcmwgPSBhZG1pc3Npb25EYXRhWydmaWVsZE1hcCddW2ZpZWxkLnR5cGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkVmFsdWUgPSBhZG1pc3Npb25EYXRhWydmaWVsZE1hcCddW2ZpZWxkLmZpZWxkTGFiZWwgKyBncm91cF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGZpZWxkPy50eXBlID09PSAnR1JBREUnKVxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyYWRlKGZpZWxkLnNvdXJjZURhdGFbZmllbGQuZGF0YVNvdXJjZVR5cGVdLCBmaWVsZC5maWVsZFZhbHVlKTtcblxuICAgICAgICAgICAgaWYoZmllbGQudHlwZSA9PT0gJ0FDQURFTUlDX1lFQVInKVxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjYWRlbWljWWVhcihmaWVsZC5zb3VyY2VEYXRhW2ZpZWxkLmRhdGFTb3VyY2VUeXBlXSwgZmllbGQuZmllbGRWYWx1ZSlcblxuICAgICAgICAgICAgaWYoZmllbGQuZGF0YVR5cGUgPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtYXRDaGVja0JveFZhbHVlKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5nZXRGZWVTdHJ1Y3R1cmUoKTtcbiAgICB9KVxuXG4gIH1cblxuICB1cGRhdGVHcmFkZShncmFkZUxpc3QgOmFueVtdLCBncmFkZU5hbWU6IGFueSkge1xuICAgIGZvcihsZXQgZ3JhZGUgb2YgZ3JhZGVMaXN0KSB7XG4gICAgICBpZihncmFkZS5uYW1lID09PSBncmFkZU5hbWUpe1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JhZGVJZCA9IGdyYWRlLmlkO1xuICAgICAgICB0aGlzLmlucHV0RmllbGRDaGFuZ2Uoe30sZ3JhZGUpXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUFjYWRlbWljWWVhcihhY1llYXJMaXN0OmFueVtdLGFjeU5hbWU6IGFueSl7XG4gICAgZm9yIChsZXQgYXkgb2YgYWNZZWFyTGlzdCkge1xuICAgICAgaWYoYXkubmFtZSA9PT0gYWN5TmFtZSl7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBY2FkZW1pY1llYXIgPSBheVxuICAgICAgICB0aGlzLmlucHV0RmllbGRDaGFuZ2Uoe30sYXkpXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgXG4gICAgfSBcbiAgfVxuXG4gIGZvcm1hdENoZWNrQm94VmFsdWUoZmllbGQ6IGFueSkge1xuICAgIGlmKGZpZWxkLnZhbHVlKSB7XG4gICAgICBmb3IobGV0IGZpZWxkVmFsdWUgb2YgZmllbGQudmFsdWUpIHtcbiAgICAgICAgaWYoZmllbGQuZmllbGRWYWx1ZT8uaW5jbHVkZXMoZmllbGRWYWx1ZS52YWx1ZSkpIHtcbiAgICAgICAgICBmaWVsZFZhbHVlLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKGxldCBmaWVsZFZhbHVlIG9mIGZpZWxkLnNvdXJjZURhdGE/LltmaWVsZC5kYXRhU291cmNlVHlwZV0gfHwgW10pIHtcbiAgICAgICAgaWYoZmllbGQuZmllbGRWYWx1ZT8uaW5jbHVkZXMoZmllbGRWYWx1ZS5uYW1lKSkge1xuICAgICAgICAgIGZpZWxkVmFsdWUuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIGdldEFsbEZpZWxkcygpIHtcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldFNlbGVjdGVkTGlzdEZpZWxkcyh0aGlzLmJ1c2luZXNzSWQsIHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyA/ICdSRUdJU1RSQVRJT04nIDogJ0FETUlTU0lPTicsICB0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgPyAnUkVHSVNUUkFUSU9OJyA6ICdBRE1JU1NJT04nKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgIHJlcy5kYXRhLmRhdGEuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcbiAgICAgICAgaWYgKChlbGVtZW50LmZpZWxkTGFiZWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Bhc3Nwb3J0JykgJiYgZWxlbWVudC5kYXRhVHlwZSAhPSAnUkFESU9CVVRUT04nKSB7XG4gICAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBlbGVtZW50LmlzRGlzcGxheSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXMuZGF0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgIGlmKGVsZW1lbnQuZGF0YVNvdXJjZVR5cGUgPT09ICdDT1VOVFJZJyl7XG4gICAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgbmV4dFllYXIgPSBjdXJyZW50WWVhciArIDE7XG5cbiAgICAgIHJlcy5kYXRhLmRhdGEuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZGF0YVR5cGUgIT09ICdEUk9QRE9XTicpIHJldHVybjtcblxuICAgICAgICBpZiAoZWxlbWVudC52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgZWxlbWVudC5maWVsZFZhbHVlID0gZWxlbWVudC52YWx1ZVswXS52YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VMaXN0ID0gZWxlbWVudC5zb3VyY2VEYXRhW2VsZW1lbnQuZGF0YVNvdXJjZVR5cGVdO1xuICAgICAgICAgIGlmIChlbGVtZW50LmZpZWxkTGFiZWwgPT09ICdBY2FkZW1pYyBZZWFyJykge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBzb3VyY2VMaXN0LmZpbmQoKGU6YW55KSA9PiBlLm5hbWUgPT09IGAke2N1cnJlbnRZZWFyfS0ke25leHRZZWFyfWApO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQuZmllbGRWYWx1ZSA9IG1hdGNoLm5hbWU7XG4gICAgICAgICAgICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZShtYXRjaCwgZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VMaXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuZmllbGRWYWx1ZSA9IHNvdXJjZUxpc3RbMF0ubmFtZTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZShzb3VyY2VMaXN0WzBdLCBlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXMuZGF0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc1NpYmxpbmdzR3JvdXAgPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmllbGRHcm91cCkgJiYgZWxlbWVudC5maWVsZEdyb3VwLnNvbWUoXG4gICAgICAgICAgKGdyb3VwOmFueSkgPT4gZ3JvdXAuZmllbGRHcm91cE5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJzaWJsaW5ncyBkZXRhaWxzXCIpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChoYXNTaWJsaW5nc0dyb3VwKSB7XG4gICAgICAgICAgY29uc3QgbGFiZWxDaGVjayA9IGVsZW1lbnQuZmllbGRMYWJlbD8uaW5jbHVkZXMoJzEnKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZUNoZWNrID0gISFlbGVtZW50LmZpZWxkVmFsdWU7XG4gICAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSBsYWJlbENoZWNrIHx8IHZhbHVlQ2hlY2s7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXMuZGF0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc1NpYmxpbmdzR3JvdXAgPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmllbGRHcm91cCkgJiYgZWxlbWVudC5maWVsZEdyb3VwLnNvbWUoXG4gICAgICAgICAgKGdyb3VwOmFueSkgPT4gZ3JvdXAuZmllbGRHcm91cE5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJwYXN0IHNjaG9vbCBkZXRhaWxzXCIpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChoYXNTaWJsaW5nc0dyb3VwKSB7XG4gICAgICAgICAgY29uc3QgbGFiZWxDaGVjayA9IGVsZW1lbnQuZmllbGRMYWJlbD8uaW5jbHVkZXMoJzEnKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZUNoZWNrID0gISFlbGVtZW50LmZpZWxkVmFsdWU7XG4gICAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSBsYWJlbENoZWNrIHx8IHZhbHVlQ2hlY2s7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmZpZWxkRGF0YSA9IHRoaXMucmVzdFNlcnZpY2UuZ2V0RmllbGRzVG9EaXNwbGF5KHJlcy5kYXRhLmRhdGEpO1xuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IHRoaXMuT2JqZWN0LmtleXModGhpcy5maWVsZERhdGEpWzBdO1xuICAgIH0pXG4gIH1cblxuICBnZXRBTExEb2N1bWVudExpc3QoKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIFwiYnVzaW5lc3NJZFwiOiB0aGlzLmJ1c2luZXNzSWQsXG4gICAgICBcInNvcnRCeVwiOiBcIlwiLFxuICAgICAgXCJzb3J0T3JkZXJcIjogXCJcIixcbiAgICAgIFwic3RhdHVzXCI6IHRydWUsXG4gICAgICBcImlzRGVsZXRlZFwiOiBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0QWxsRG9jdW1lbnQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudExpc3QgPSByZXMuZGF0YS5kYXRhO1xuICAgIH0pXG4gIH1cblxuICBmb3JtRmllbGRDaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIGZvcm1GaWVsZENoYW5nZWQoKSB7XG4gICAgdGhpcy5mb3JtRmllbGRDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9ldmVudFNlcnZpY2UuZm9ybUZpZWxkQ2hhbmdlZC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLmdldEFsbEZpZWxkcygpO1xuICAgIH0pXG4gIH1cblxuXG5cbiAgYXN5bmMgc3VibWl0Rm9ybSgpIHtcbiAgICB0aGlzLnBheWxvYWQuZmllbGRJdGVtcyA9IHRoaXMuY29udmVydFRvTGlzdE9mRmllbGRzKCk7XG4gICAgaWYodGhpcy5wYXlsb2FkLmZpZWxkSXRlbXMubGVuZ3RoID09IDApXG4gICAgICByZXR1cm47XG5cbiAgICBpZih0aGlzLmZpbGVEYXRhKSB7XG4gICAgICBsZXQgaW1hZ2VEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmltYWdlVXBsb2FkU2VydmljZS51cGxvYWRGaWxlSW5BenVyZSh0aGlzLmZpbGVEYXRhKTtcbiAgICAgIHRoaXMucGF5bG9hZC5pbWdVcmwgPSBpbWFnZURhdGEudXJsIHx8IGltYWdlRGF0YS5fcmVzcG9uc2U/LnJlcXVlc3Q/LnVybFxuICAgIH1cblxuICAgIHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyA/IHRoaXMuY3JlYXRlUmVnaXN0cmF0aW9uKCkgOiB0aGlzLmNyZWF0ZUFkbWlzc2lvbigpO1xuICB9XG5cbiAgcmVnaXN0cmF0aW9uU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBhc3luYyBjcmVhdGVSZWdpc3RyYXRpb24oKSB7XG4gICAgLy8gdGhpcy5wYXlsb2FkWydyZXR1cm5VcmwnXSA9IGBodHRwczovL2NtaXMudGVqc29mdC5jb20vdmVyaWZ5LXBheW1lbnQvP3VybD10cnVlJnR5cGU9UkVHSVNUUkFUSU9OJmJJZD0ke3RoaXMuYnVzaW5lc3NJZH1gIC8vcHJvZHVjdGlvblxuICAgIHRoaXMucGF5bG9hZFsncmV0dXJuVXJsJ10gPSBgaHR0cHM6Ly9zdGFnZS1wb3J0YWwuY21pcy5hYy5pbi92ZXJpZnktcGF5bWVudC8/dXJsPXRydWUmdHlwZT1SRUdJU1RSQVRJT04mYklkPSR7dGhpcy5idXNpbmVzc0lkfWAgLy9kZXZcbiAgICAvLyB0aGlzLnBheWxvYWRbJ3JldHVyblVybCddID0gYGh0dHBzOi8vc3RhZ2UuY21pcy50ZWpzb2Z0LmNvbS92ZXJpZnktcGF5bWVudC8/dXJsPXRydWUmdHlwZT1SRUdJU1RSQVRJT04mYklkPSR7dGhpcy5idXNpbmVzc0lkfWAgLy9zdGFnZVxuICAgIGZvcihsZXQgaW5maWVsZERvY3VtZW50IG9mIHRoaXMucGF5bG9hZC5maWVsZEl0ZW1zKXtcbiAgICAgIGlmKGluZmllbGREb2N1bWVudC5maWVsZEltYWdlVXJsKXtcbiAgICAgICAgbGV0IGltYWdlRGF0YSA6IGFueSA9IGF3YWl0IHRoaXMuaW1hZ2VVcGxvYWRTZXJ2aWNlLnVwbG9hZEZpbGVJbkF6dXJlKGluZmllbGREb2N1bWVudC5zZWxlY3RlZEltYWdlRGF0YSk7XG4gICAgICAgIGluZmllbGREb2N1bWVudC5maWVsZEltYWdlVXJsID0gaW1hZ2VEYXRhLnVybCB8fCBpbWFnZURhdGEuX3Jlc3BvbnNlPy5yZXF1ZXN0Py51cmw7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVnaXN0cmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5yZXN0U2VydmljZS5jcmVhdGVSZWdpc3RyYXRpb25Gb3JQYXltZW50KHRoaXMucGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgLy8gdGhpcy5zbmFja0Jhci5vcGVuKCdSZWdpc3RyYXRpb24gY3JlYXRlZCBzdWNjZXNzZnVsbHknLCAnY2xvc2UnLCB7ZHVyYXRpb246IDIwMDB9KTtcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5jYXNoRnJlZUV2ZW50LmVtaXQoe3Jlc3BvbnNlOiByZXMsIHBheW1lbnRUeXBlOidSRUdJU1RSQVRJT04nfSk7XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFkbWlzc2lvbigpIHtcbiAgICAvLyBpZih0aGlzLnBheWxvYWQucGF5bWVudFBsYW5UeXBlID09PSAnVEVSTScgJiYgKHRoaXMucGF5bG9hZD8uc3R1ZGVudEZlZVN0cnVjdHVyZT8udGVybVBheW1lbnRMaXN0Py5sZW5ndGggfHwgMCkgPT0gMCl7XG4gICAgLy8gICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1BsZWFzZSBzZWxlY3QgdGVybScpO1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cblxuICAgIC8vIHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlWydwYXltZW50UGxhblR5cGUnXSA9IHRoaXMucGF5bG9hZC5wYXltZW50UGxhblR5cGU7XG4gICAgLy8gdGhpcy5wYXlsb2FkWydyZXR1cm5VcmwnXSA9IGBodHRwczovL2NtaXMudGVqc29mdC5jb20vdmVyaWZ5LXBheW1lbnQvP3VybD10cnVlJnR5cGU9QURNSVNTSU9OJmJJZD0ke3RoaXMuYnVzaW5lc3NJZH1gOyAvL3Byb2R1Y3Rpb25cbiAgICB0aGlzLnBheWxvYWRbJ3JldHVyblVybCddID0gYGh0dHBzOi8vc3RhZ2UtcG9ydGFsLmNtaXMuYWMuaW4vdmVyaWZ5LXBheW1lbnQvP3VybD10cnVlJnR5cGU9QURNSVNTSU9OJmJJZD0ke3RoaXMuYnVzaW5lc3NJZH1gOyAvL2RldlxuICAgIC8vIHRoaXMucGF5bG9hZFsncmV0dXJuVXJsJ10gPSBgaHR0cHM6Ly9zdGFnZS5jbWlzLnRlanNvZnQuY29tL3ZlcmlmeS1wYXltZW50Lz91cmw9dHJ1ZSZ0eXBlPUFETUlTU0lPTiZiSWQ9JHt0aGlzLmJ1c2luZXNzSWR9YDsgLy9zdGFnZVxuXG4gICAgaWYodGhpcy5iYWNrdXBEb2NGaWxlKSB7XG4gICAgICBsZXQgaW1hZ2VEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmltYWdlVXBsb2FkU2VydmljZS51cGxvYWRGaWxlSW5BenVyZSh0aGlzLmJhY2t1cERvY0ZpbGUpO1xuICAgICAgLy8gdGhpcy5wYXlsb2FkLmJhY2t1cERvYyA9IGltYWdlRGF0YS51cmxcbiAgICAgIHRoaXMucGF5bG9hZC5iYWNrdXBEb2MgPSBpbWFnZURhdGEudXJsIHx8IGltYWdlRGF0YS5fcmVzcG9uc2U/LnJlcXVlc3Q/LnVybDtcbiAgICB9XG5cbiAgICBmb3IobGV0IGRvY3VtZW50IG9mIHRoaXMuZG9jdW1lbnRMaXN0KSB7XG4gICAgICBpZihkb2N1bWVudC5maWxlKSB7XG4gICAgICAgIGxldCBpbWFnZURhdGE6IGFueSA9IGF3YWl0IHRoaXMuaW1hZ2VVcGxvYWRTZXJ2aWNlLnVwbG9hZEZpbGVJbkF6dXJlKGRvY3VtZW50LmZpbGUpO1xuXG4gICAgICAgIHRoaXMucGF5bG9hZFsnZG9jdW1lbnRzJ10ucHVzaChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBkb2N1bWVudC5kaXNwbGF5VGV4dCxcbiAgICAgICAgICAgIHVybDogaW1hZ2VEYXRhLnVybCB8fCBpbWFnZURhdGEuX3Jlc3BvbnNlPy5yZXF1ZXN0Py51cmwsXG4gICAgICAgICAgICBkb2NUeXBlOiBkb2N1bWVudC5uYW1lLFxuICAgICAgICAgICAgYXR0YWNobWVudFR5cGU6IGRvY3VtZW50LnR5cGVcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IobGV0IGluZmllbGREb2N1bWVudCBvZiB0aGlzLnBheWxvYWQuZmllbGRJdGVtcyl7XG4gICAgICBpZihpbmZpZWxkRG9jdW1lbnQuZmllbGRJbWFnZVVybCl7XG4gICAgICAgIGlmKCFpbmZpZWxkRG9jdW1lbnQuZmllbGRJbWFnZVVybC5pbmNsdWRlcygnaHR0cHM6Jykpe1xuICAgICAgICAgIGxldCBpbWFnZURhdGEgOiBhbnkgPSBhd2FpdCB0aGlzLmltYWdlVXBsb2FkU2VydmljZS51cGxvYWRGaWxlSW5BenVyZShpbmZpZWxkRG9jdW1lbnQuc2VsZWN0ZWRJbWFnZURhdGEpO1xuICAgICAgICAgIGluZmllbGREb2N1bWVudC5maWVsZEltYWdlVXJsID0gaW1hZ2VEYXRhLnVybCB8fCBpbWFnZURhdGEuX3Jlc3BvbnNlPy5yZXF1ZXN0Py51cmw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5wYXlsb2FkKVxuICAgIHRoaXMucGF5bG9hZC5hZG1pc3Npb25QYXltZW50RGV0YWlsLmFtb3VudCA9IHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlVjIudG90YWxGZWU7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnJlc3RTZXJ2aWNlLmNyZWF0ZUFkbWlzc2lvbih0aGlzLnBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIC8vIHRoaXMuc25hY2tCYXIub3BlbignQWRtaXNzaW9uIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5JywgJ2Nsb3NlJywge2R1cmF0aW9uOiAyMDAwfSk7XG4gICAgICBsZXQgYWRtaXNzaW9uRGF0YSA9IHJlcy5kYXRhXG4gICAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgXCJtYWlsUGF5bWVudExpbmtcIjp3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgXCJmZWVTdW1tYXJ5SWRcIjogYWRtaXNzaW9uRGF0YS5pZCxcbiAgICAgICAgXCJuYW1lXCI6IHRoaXMuZmV0Y2hTdHVkZW50RGV0YWlscyhhZG1pc3Npb25EYXRhLmZpZWxkSXRlbXMsJ1NUVURFTlRfTkFNRScpLFxuICAgICAgICBcImFtb3VudFwiOiBhZG1pc3Npb25EYXRhLnN0dWRlbnRGZWVTdHJ1Y3R1cmVWMi50b3RhbEZlZSxcbiAgICAgICAgXCJtb2JpbGVcIjogdGhpcy5mZXRjaFN0dWRlbnREZXRhaWxzKGFkbWlzc2lvbkRhdGEuZmllbGRJdGVtcywnQ09OVEFDVF9NT0JJTEUnKSxcbiAgICAgICAgXCJlbWFpbFwiOiB0aGlzLmZldGNoU3R1ZGVudERldGFpbHMoYWRtaXNzaW9uRGF0YS5maWVsZEl0ZW1zLCdDT05UQUNUX0VNQUlMJyksXG4gICAgICAgIFwiZmVlQ29uZmlnXCI6IGFkbWlzc2lvbkRhdGEuc3R1ZGVudEZlZVN0cnVjdHVyZVYyLmZlZUNvbmZpZyxcbiAgICAgICAgXCJwcmVBZG1pc3Npb25JZFwiOmFkbWlzc2lvbkRhdGEuaWQsXG4gICAgICAgIFwic2VsZWN0ZWRTdG9wRGV0YWlsXCI6YWRtaXNzaW9uRGF0YS5zZWxlY3RlZFN0b3BEZXRhaWwsXG4gICAgICAgIFwic3Vic2NyaXB0aW9uUGxhbnNcIjphZG1pc3Npb25EYXRhLnN1YnNjcmlwdGlvblBsYW5zXG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVzdFNlcnZpY2UuY3JlYXRlUGF5bWVudExpbmsocGF5bG9hZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOmFueSkgPT4ge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzZWxlY3RlZFN0b3AnKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnc2VsZWN0ZWRWZWhpY2xlJyk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmNhc2hGcmVlRXZlbnQuZW1pdCh7cmVzcG9uc2U6IHJlcywgcGF5bWVudFR5cGU6J0FETUlTU0lPTid9KTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0pXG4gIH1cblxuICBmZXRjaFN0dWRlbnREZXRhaWxzKGFycmF5OmFueSxnZXRUeXBlOiBhbnkpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXkuZmluZCgoZWw6YW55KSA9PiBlbC50eXBlID09PSBnZXRUeXBlKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuZmllbGRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29udmVydFRvTGlzdE9mRmllbGRzKCkge1xuICAgIGxldCBmaWVsZExpc3Q6IGFueVtdID0gW107XG5cbiAgICBmb3IobGV0IHN0ZXAgb2YgdGhpcy5PYmplY3Qua2V5cyh0aGlzLmZpZWxkRGF0YSkpIHtcbiAgICAgIGZvcihsZXQgZ3JvdXAgb2YgT2JqZWN0LmtleXModGhpcy5maWVsZERhdGFbc3RlcF0pKSB7XG5cbiAgICAgICAgaWYoZ3JvdXAgPT0gJ0JhY2t1cCBDb250YWN0JyAmJiB0aGlzLnN0dWRlbnRMaXZlV2l0aCAhPSAnc2luZ2xlIHBhcmVudCcpXG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgZm9yKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkRGF0YVtzdGVwXVtncm91cF0pIHtcbiAgICAgICAgICBpZihmaWVsZC5yZXF1aXJlZCAmJiAhZmllbGQuZmllbGRWYWx1ZSAmJiBmaWVsZC5kYXRhVHlwZSAhPSAnQ0hFQ0tCT1gnICYmICFmaWVsZC5maWVsZEltYWdlVXJsKSB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oYFBsZWFzZSBlbnRlciAke2ZpZWxkLmZpZWxkTGFiZWx9YCwgJ2Nsb3NlJywge2R1cmF0aW9uOiAyMDAwfSk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNoZWNrQm94VmFsdWU6IGFueVtdID0gW107XG4gICAgICAgICAgaWYoZmllbGQuZGF0YVR5cGUgPT09ICdDSEVDS0JPWCcpIHtcbiAgICAgICAgICAgIGNoZWNrQm94VmFsdWUgPSB0aGlzLmdldENoZWNrQm94VmFsdWUoZmllbGQpO1xuXG4gICAgICAgICAgICBpZihjaGVja0JveFZhbHVlLmxlbmd0aCAgPT0gMCAmJiBmaWVsZC5yZXF1aXJlZCl7XG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihgUGxlYXNlIGVudGVyICR7ZmllbGQuZmllbGRMYWJlbH1gLCAnY2xvc2UnLCB7ZHVyYXRpb246IDIwMDB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkTGlzdC5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLmZpZWxkSWQsXG4gICAgICAgICAgICBmaWVsZE5hbWU6IGZpZWxkLmZpZWxkTGFiZWwsXG4gICAgICAgICAgICBmaWVsZFZhbHVlOiBmaWVsZC5kYXRhVHlwZSAhPT0gJ0NIRUNLQk9YJyA/IGZpZWxkLmZpZWxkVmFsdWUgOiBjaGVja0JveFZhbHVlLFxuICAgICAgICAgICAgZmllbGRHcm91cElkOiBmaWVsZC5maWVsZEdyb3VwSWQsXG4gICAgICAgICAgICBmaWVsZEdyb3VwTmFtZTogZ3JvdXAsXG4gICAgICAgICAgICBmaWVsZFN0ZXBJZDogZmllbGQuZmllbGRTdGVwSWQsXG4gICAgICAgICAgICBmaWVsZFN0ZXBOYW1lOiBzdGVwLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGZpZWxkSW1hZ2VVcmwgOiBmaWVsZC5maWVsZEltYWdlVXJsLFxuICAgICAgICAgICAgc2VsZWN0ZWRJbWFnZURhdGEgOiBmaWVsZC5zZWxlY3RlZEltYWdlRGF0YSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiBmaWVsZD8uZGF0YVR5cGVcbiAgICAgICAgICB9KVxuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGRMaXN0O1xuICB9XG5cbiAgZ2V0Q2hlY2tCb3hWYWx1ZShmaWVsZDogYW55KSB7XG4gICAgbGV0IHJlc3BvbnNlOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYoZmllbGQudmFsdWUpIHtcbiAgICAgIGZvcihsZXQgZmllbGRWYWx1ZSBvZiBmaWVsZC52YWx1ZSkge1xuICAgICAgICBpZihmaWVsZFZhbHVlLmNoZWNrZWQpIHtcbiAgICAgICAgICByZXNwb25zZS5wdXNoKGZpZWxkVmFsdWUudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcihsZXQgZmllbGRWYWx1ZSBvZiBmaWVsZC5zb3VyY2VEYXRhPy5bZmllbGQuZGF0YVNvdXJjZVR5cGVdIHx8IFtdKSB7XG4gICAgICAgIGlmKGZpZWxkVmFsdWUuY2hlY2tlZCkge1xuICAgICAgICAgIHJlc3BvbnNlLnB1c2goZmllbGRWYWx1ZS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGZpbGVEYXRhPzogRmlsZTtcbiAgdXBkYXRlQWRtaXNzaW9uSW1hZ2UoZXY6IGFueSkge1xuICAgIGxldCBmaWxlSW5wdXQgOiBhbnkgPSBldi50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLmZpbGVEYXRhID0gZmlsZUlucHV0LmZpbGVzWzBdO1xuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5vbmxvYWQgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgdGhpcy5wYXlsb2FkLmltZ1VybCA9IHJlc3BvbnNlLnRhcmdldC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgdGhpcy5maWxlRGF0YSA/IHJlYWRlci5yZWFkQXNEYXRhVVJMKHRoaXMuZmlsZURhdGEpIDogbnVsbDtcblxuICAgIGZpbGVJbnB1dC52YWx1ZSA9ICcnXG4gIH1cblxuICBkZWxldGVJbWcoKSB7XG4gICAgdGhpcy5wYXlsb2FkLmltZ1VybCA9ICcnO1xuICAgIHRoaXMuZmlsZURhdGEgPSB1bmRlZmluZWQ7XG4gIH0gIHJlZGlyZWN0VG9QYXltZW50KCkge1xuICAgIGlmKCEodGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhciAmJiAgdGhpcy5zZWxlY3RlZEdyYWRlSWQpKXtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignU2VsZWN0ZWQgR3JhZGUgYW5kIEFjYWRlbWljIFllYXIgZmlyc3QnLCdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSAnUGF5bWVudCdcbiAgfVxuXG4gIGNvbnRpbnVlQWRtaXNzaW9uKCkge1xuICAgIGxldCBzdGVwcyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGREYXRhKTtcbiAgICBsZXQgaW5kZXggPSBzdGVwcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRLZXkpO1xuXG4gICAgaWYodGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nICYmIHRoaXMuc2VsZWN0ZWRLZXkgPT09ICdEb2N1bWVudCcgJiYgISh0aGlzLnNlbGVjdGVkQWNhZGVtaWNZZWFyICYmICB0aGlzLnNlbGVjdGVkR3JhZGVJZCkpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignU2VsZWN0ZWQgR3JhZGUgYW5kIEFjYWRlbWljIFllYXIgZmlyc3QnLCAnY2xvc2UnLCB7ZHVyYXRpb246IDIwMDB9KVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdhZG1pc3Npb25Gb3JtJylcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSBpbmRleCA9PT0gc3RlcHMubGVuZ3RoIC0gMSA/ICdEb2N1bWVudCcgOiB0aGlzLnNlbGVjdGVkS2V5ID09PSAnRG9jdW1lbnQnID8gJ1BheW1lbnQnIDogc3RlcHNbaW5kZXggKyAxXTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5ID0gc3RlcHNbaW5kZXggKyAxXVxuICB9XG5cbiAgc3Vic2NyaXB0aW9uc0RhdGE6IGFueVtdID0gW11cbiAgdGVybVBheW1lbnRMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIGdldEZlZVN0cnVjdHVyZSgpIHtcbiAgICBpZighdGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhciB8fCAhdGhpcy5zZWxlY3RlZEdyYWRlSWQpXG4gICAgICByZXR1cm47XG4gICAgXG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICAvLyBcImJ1c2luZXNzSWRcIjogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgLy8gXCJzdGFydFllYXJcIjogTnVtYmVyKHllYXJbMF0pLFxuICAgICAgLy8gXCJlbmRZZWFyXCI6IE51bWJlcih5ZWFyWzFdKSxcbiAgICAgIC8vIFwicGFnZU5vXCI6IDAsXG4gICAgICAvLyBcInNpemVcIjogMSxcbiAgICAgIC8vIFwiZ3JhZGVJZHNcIjogW3RoaXMuc2VsZWN0ZWRHcmFkZUlkXSxcbiAgICAgIC8vIFwic2VhcmNoVGV4dFwiOiBcIlwiXG4gICAgICBhY2FkZW1pY1llYXJJZCA6IFt0aGlzLnNlbGVjdGVkQWNhZGVtaWNZZWFyLmlkXSxcbiAgICAgIGJ1c2luZXNzSWQgOiB0aGlzLmJ1c2luZXNzSWQsXG4gICAgICBncmFkZUlkcyA6IFt0aGlzLnNlbGVjdGVkR3JhZGVJZF0sXG4gICAgICBwYWdlTm8gOiAwLFxuICAgICAgcGFnZVNpemUgOiAxMDAwLFxuICAgICAgc2VhcmNoVGV4dCA6IFwiXCJcbiAgICB9XG5cbiAgICB0aGlzLnJlc3RTZXJ2aWNlLm5ld0ZlZVN0cnVjdHVyZUdldExpc3QocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5wYXlsb2FkLnN0dWRlbnRGZWVTdHJ1Y3R1cmVWMiA9IHJlcy5kYXRhLmRhdGFbMF07XG4gICAgICB0aGlzLmdldEFsbFN1YmNyaXB0aW9uKCk7XG4gICAgICAvLyB0aGlzLnBheWxvYWQuc3R1ZGVudEZlZVN0cnVjdHVyZSA9IHJlcy5kYXRhLmRhdGFbMF07XG4gICAgICAvLyB0aGlzLnN1YnNjcmlwdGlvbnNEYXRhID0gIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wYXlsb2FkLnN0dWRlbnRGZWVTdHJ1Y3R1cmUuc3Vic2NyaXB0aW9uUGxhbnMpKTtcbiAgICAgIC8vIHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zID0gW107XG4gICAgICAvLyB0aGlzLnRlcm1QYXltZW50TGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wYXlsb2FkLnN0dWRlbnRGZWVTdHJ1Y3R1cmU/LnRlcm1QYXltZW50TGlzdCB8fCAnJykpO1xuICAgICAgLy8gdGhpcy5wYXlsb2FkLnN0dWRlbnRGZWVTdHJ1Y3R1cmUudGVybVBheW1lbnRMaXN0ID0gW107XG4gICAgfSlcbiAgfVxuXG4gIGdldEFsbFN1YmNyaXB0aW9uKCl7XG4gICAgY29uc3Qgc2VydmVyQ2FsbCA9IGZvcmtKb2luKHtcbiAgICAgIGFsbFN1YnNjcmlwdGlvbnMgOiB0aGlzLnJlc3RTZXJ2aWNlLmdldEFjdGl2ZVN1YnNjcmlwdGlvbkZvckZlZVN0cnVjdHVyZSh0aGlzLmJ1c2luZXNzSWQsdGhpcy5zZWxlY3RlZEdyYWRlSWQpXG4gICAgfSlcbiAgICBzZXJ2ZXJDYWxsLnN1YnNjcmliZSgocmVzOmFueSk9PntcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc0RhdGEgPSByZXMuYWxsU3Vic2NyaXB0aW9ucy5kYXRhLmRhdGFcbiAgICAgIHJlcy5hbGxTdWJzY3JpcHRpb25zLmRhdGEuZGF0YS5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xuICAgICAgICBpZiAoIWVsZW1lbnQubmV3UHJpY2luZ0xpc3QpIHtcbiAgICAgICAgICBlbGVtZW50Lm5ld1ByaWNpbmdMaXN0ID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3Qua2V5cyhlbGVtZW50LnByaWNpbmcpLmZvckVhY2goKHByaWNlOiBhbnkpID0+IHtcbiAgICAgICAgICBlbGVtZW50Lm5ld1ByaWNpbmdMaXN0LnB1c2goe1xuICAgICAgICAgICAgbmFtZTogcHJpY2UsXG4gICAgICAgICAgICBhbW91bnQ6IGVsZW1lbnQucHJpY2luZ1twcmljZV0sXG4gICAgICAgICAgICBzZWxlY3RlU3RhdHVzOiBmYWxzZSxcbiAgICAgICAgICAgIHBhaWQ6ZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KVxuICB9XG5cbiAgaW5wdXRGaWVsZENoYW5nZShpdGVtOiBhbnksIGZpZWxkOiBhbnkpIHtcbiAgICBpZihmaWVsZC5maWVsZExhYmVsID09PSAnQWNhZGVtaWMgWWVhcicpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBY2FkZW1pY1llYXIgPSBpdGVtO1xuICAgICAgdGhpcy5nZXRGZWVTdHJ1Y3R1cmUoKTtcbiAgICB9XG4gICAgaWYoZmllbGQuZmllbGRMYWJlbCA9PT0gJ0dyYWRlJykge1xuICAgICAgdGhpcy5zZWxlY3RlZEdyYWRlSWQgPSBpdGVtLmlkO1xuICAgICAgdGhpcy5nZXRGZWVTdHJ1Y3R1cmUoKTtcbiAgICB9XG4gIH1cblxuICBtYXN0ZXJEcm9wZG93blZhbHVlQ2hhbmdlKGl0ZW06IGFueSwgZmllbGQ6IGFueSkge1xuICAgIGlmKGZpZWxkLmZpZWxkTGFiZWwgPT09ICdTdHVkZW50IGxpdmUgd2l0aCcpIHtcbiAgICAgIHRoaXMuc3R1ZGVudExpdmVXaXRoID0gaXRlbS52YWx1ZVxuICAgIH1cbiAgICBpZihmaWVsZC50eXBlID09PSAnTkFUSU9OQUxJVFknKXtcbiAgICAgIGlmKGZpZWxkLmZpZWxkVmFsdWUgPT09ICdOUkknKXtcbiAgICAgICAgdGhpcy5maWVsZERhdGFbJ1N0dWRlbnQgRGV0YWlscyddWydJZGVudGl0eSBpbmZvcm1hdGlvbiddLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgICAgaWYoZWxlbWVudC5kYXRhU291cmNlVHlwZSA9PT0gJ0NPVU5UUlknKXtcbiAgICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYoZmllbGQuZmllbGRWYWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpbmRpYW4nKSl7XG4gICAgICAgIHRoaXMuZmllbGREYXRhWydTdHVkZW50IERldGFpbHMnXVsnSWRlbnRpdHkgaW5mb3JtYXRpb24nXS5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xuICAgICAgICAgIGlmKGVsZW1lbnQuZGF0YVNvdXJjZVR5cGUgPT09ICdDT1VOVFJZJyl7XG4gICAgICAgICAgICBlbGVtZW50LmlzRGlzcGxheSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBsb2FkQmFja1VwRG9jdW1lbnQoZXY6IGFueSkge1xuICAgIHRoaXMuYmFja3VwRG9jRmlsZSA9IGV2LnNyY0VsZW1lbnQuZmlsZXNbMF07XG4gIH1cblxuXG4gIGFycmFuZ2VTdWJzY3JpcHRpb25Gb3JBZG1pc3Npb24oc3Vic2NyaXB0aW9uTGlzdDogYW55W10pIHtcbiAgICBsZXQgcmVzcG9uc2U6IGFueSA9IHt9O1xuXG4gICAgZm9yKGxldCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9uTGlzdCkge1xuICAgICAgaWYoIXJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXSkge1xuICAgICAgICByZXNwb25zZVtzdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uVHlwZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHJlc3BvbnNlW3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25UeXBlXS5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgYXJyYW5nZUZlZUNvbmZpZyhmZWVDb25maWdMaXN0OiBhbnlbXSkge1xuICAgIGxldCByZXNwb25zZTogYW55ID0ge307XG5cbiAgICBmb3IobGV0IGNvbmZpZyBvZiBmZWVDb25maWdMaXN0KSB7XG4gICAgICBpZighcmVzcG9uc2VbY29uZmlnLmZlZVR5cGVdKVxuICAgICAgICByZXNwb25zZVtjb25maWcuZmVlVHlwZV0gPSBbXTtcblxuICAgICAgcmVzcG9uc2VbY29uZmlnLmZlZVR5cGVdLnB1c2goY29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBnZXRNYXhEYXRlKGl0ZW06YW55KSB7XG4gICAgY29uc3QgZm9ybWF0dGVkTGFiZWwgPSAoaXRlbS5maWVsZExhYmVsIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBmaWVsZEdyb3VwTmFtZSA9IChpdGVtLmZpZWxkR3JvdXAgfHwgW10pLmZsYXRNYXAoKGc6YW55KSA9PiBbXG4gICAgICAoZy5maWVsZEdyb3VwTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSxcbiAgICAgIChnLmZpZWxkU3RlcE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICBdKTtcbiAgXG4gICAgaWYgKGZvcm1hdHRlZExhYmVsLmluY2x1ZGVzKCdkb2InKSkge1xuICAgICAgY29uc3QgdGVtcERhdGUgPSBuZXcgRGF0ZSgpO1xuICBcbiAgICAgIGlmIChmaWVsZEdyb3VwTmFtZS5zb21lKChuYW1lOmFueSkgPT4gbmFtZS5pbmNsdWRlcygnc3R1ZGVudCcpKSkge1xuICAgICAgICB0ZW1wRGF0ZS5zZXRGdWxsWWVhcih0ZW1wRGF0ZS5nZXRGdWxsWWVhcigpIC0gMyk7XG4gICAgICAgIHJldHVybiB0ZW1wRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgICB9XG4gIFxuICAgICAgaWYgKGZpZWxkR3JvdXBOYW1lLnNvbWUoKG5hbWU6YW55KSA9PiBuYW1lLmluY2x1ZGVzKCdtb3RoZXInKSkpIHtcbiAgICAgICAgdGVtcERhdGUuc2V0RnVsbFllYXIodGVtcERhdGUuZ2V0RnVsbFllYXIoKSAtIDE4KTtcbiAgICAgICAgcmV0dXJuIHRlbXBEYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgIH1cbiAgXG4gICAgICBpZiAoZmllbGRHcm91cE5hbWUuc29tZSgobmFtZTphbnkpID0+IG5hbWUuaW5jbHVkZXMoJ2ZhdGhlcicpIHx8IG5hbWUuaW5jbHVkZXMoJ2d1YXJkaWFuJykpKSB7XG4gICAgICAgIHRlbXBEYXRlLnNldEZ1bGxZZWFyKHRlbXBEYXRlLmdldEZ1bGxZZWFyKCkgLSAyMSk7XG4gICAgICAgIHJldHVybiB0ZW1wRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgICB9XG4gICAgfVxuICBcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJhZGlvQnV0dG9uQ2hhbmdlZChpdGVtOiBhbnksIHNlbGVjdGVkS2V5OiBhbnksIGdyb3VwOiBhbnkpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnUEFTU1BPUlRfQVZBSUxBQkxFJykge1xuICAgICAgdGhpcy5zaG93T3JIaWRlRmllbGRzKGl0ZW0uZmllbGRWYWx1ZSwgc2VsZWN0ZWRLZXksIGdyb3VwKVxuICAgIH1cbiAgICBlbHNlIGlmKGl0ZW0udHlwZSA9PT0gJ1BSSU1BUllfQ09OVEFDVCcpe1xuICAgICAgdGhpcy5jb252ZXJ0T3RoZXJzQXNTZWNvbmRhcnkoaXRlbS5maWVsZFZhbHVlLHNlbGVjdGVkS2V5LGdyb3VwKTsgIFxuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRPdGhlcnNBc1NlY29uZGFyeSh2YWx1ZTphbnksc2VsZWN0ZWRLZXk6YW55LGdyb3VwOmFueSl7XG4gICAgY29uc3QgZm9ybWF0dGVkR3JvdXAgPSBncm91cC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykuam9pbignXycpO1xuICAgIGNvbnN0IGdyb3VwcyA9IFt7bmFtZTonZmF0aGVyX2RldGFpbHMnLGFWYWx1ZTonRmF0aGVyIGRldGFpbHMnfSx7bmFtZTonbW90aGVyX2RldGFpbHMnLGFWYWx1ZTonTW90aGVyIGRldGFpbHMnfSx7bmFtZTonZ3VhcmRpYW5fZGV0YWlscycsYVZhbHVlOidHdWFyZGlhbiBEZXRhaWxzJ31dO1xuICAgIGNvbnN0IG90aGVyR3JvdXBzID0gZ3JvdXBzLmZpbHRlcihnID0+IGcubmFtZSAhPT0gZm9ybWF0dGVkR3JvdXApO1xuICAgIGNvbnN0IFtzZWNvbmRhcnlHcm91cDEsIHNlY29uZGFyeUdyb3VwMl0gPSBvdGhlckdyb3VwcztcbiAgICB0aGlzLmZpZWxkRGF0YVtzZWxlY3RlZEtleV1bc2Vjb25kYXJ5R3JvdXAxLmFWYWx1ZV0uZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PT0gJ1BSSU1BUllfQ09OVEFDVCcpe1xuICAgICAgICBlbGVtZW50LmZpZWxkVmFsdWUgPSAnTm8nXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5maWVsZERhdGFbc2VsZWN0ZWRLZXldW3NlY29uZGFyeUdyb3VwMi5hVmFsdWVdLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICBpZihlbGVtZW50LnR5cGUgPT09ICdQUklNQVJZX0NPTlRBQ1QnKXtcbiAgICAgICAgZWxlbWVudC5maWVsZFZhbHVlID0gJ05vJ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBzaG93UmVsYXRpdmVGaWVsZHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd09ySGlkZUZpZWxkcyh2YWx1ZTogYW55LCBzZWxlY3RlZEtleTogYW55LCBncm91cDogYW55KSB7XG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3llcycpO1xuICAgIHRoaXMuZmllbGREYXRhW3NlbGVjdGVkS2V5XVtncm91cF0uZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmRhdGFUeXBlICE9PSAnUkFESU9CVVRUT04nICYmIGVsZW1lbnQuZmllbGRMYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdwYXNzcG9ydCcpKSB7XG4gICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gc2hvdWxkU2hvdztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwbG9hZFBhcmVudEd1YXJkaW5hSW1hZ2VzKGV2OmFueSxmaWVsZDphbnkpe1xuICAgIGxldCBzZWxlY3RlZEltYWdlRGF0YSA6IEZpbGUgO1xuICAgIHNlbGVjdGVkSW1hZ2VEYXRhID0gZXYuc3JjRWxlbWVudC5maWxlc1swXTtcblxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICByZWFkZXIub25sb2FkID0gKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIGZpZWxkLmZpZWxkSW1hZ2VVcmwgPSByZXNwb25zZS50YXJnZXQucmVzdWx0O1xuICAgIH1cblxuICAgIHNlbGVjdGVkSW1hZ2VEYXRhID8gcmVhZGVyLnJlYWRBc0RhdGFVUkwoc2VsZWN0ZWRJbWFnZURhdGEpIDogbnVsbDtcbiAgICBmaWVsZC5zZWxlY3RlZEltYWdlRGF0YSA9IHNlbGVjdGVkSW1hZ2VEYXRhO1xuICB9XG5cbiAgdXBkYXRlU2VsZWN0ZWRJbWFnZShldjphbnksZmllbGQ6YW55KSB7XG4gICAgbGV0IHNlbGVjdGVkSW1hZ2VEYXRhIDogRmlsZSA7XG4gICAgc2VsZWN0ZWRJbWFnZURhdGEgPSBldi5zcmNFbGVtZW50LmZpbGVzWzBdO1xuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5vbmxvYWQgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgZmllbGQuZmllbGRJbWFnZVVybCA9IHJlc3BvbnNlLnRhcmdldC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgc2VsZWN0ZWRJbWFnZURhdGEgPyByZWFkZXIucmVhZEFzRGF0YVVSTChzZWxlY3RlZEltYWdlRGF0YSkgOiBudWxsO1xuICAgIGZpZWxkLnNlbGVjdGVkSW1hZ2VEYXRhID0gc2VsZWN0ZWRJbWFnZURhdGE7XG4gIH1cblxuICBpc0ltYWdlKGZpbGVVcmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgZmlsZVVybCA9PT0gJ3N0cmluZycgJiYgKFxuICAgICAgZmlsZVVybC5zdGFydHNXaXRoKCdkYXRhOmltYWdlJykgfHwgL1xcLihqcGd8anBlZ3xwbmd8Z2lmKSQvaS50ZXN0KGZpbGVVcmwpXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpZWxkVmFsaWRhdGlvbihpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBsYWJlbCA9IChpdGVtLmZpZWxkTGFiZWwgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIFxuICAgIGNvbnN0IGlzUGhvbmUgPSBsYWJlbC5pbmNsdWRlcygncGhvbmUgbnVtYmVyJyk7XG4gICAgY29uc3QgaXNFbWFpbCA9IGxhYmVsLmluY2x1ZGVzKCdlbWFpbCcpO1xuICBcbiAgICBjb25zdCB2YWx1ZVN0ciA9IGl0ZW0uZmllbGRWYWx1ZT8udG9TdHJpbmcoKSB8fCAnJztcbiAgXG4gICAgaWYgKGlzUGhvbmUpIHtcbiAgICAgIGNvbnN0IG1vYmlsZVBhdHRlcm4gPSAvXls2LTldXFxkezl9JC87XG4gICAgICByZXR1cm4gbW9iaWxlUGF0dGVybi50ZXN0KHZhbHVlU3RyKSAmJiB2YWx1ZVN0ci5sZW5ndGggPT09IDEwO1xuICAgIH1cbiAgICBcbiAgICBpZiAoaXNFbWFpbCkge1xuICAgICAgY29uc3QgZW1haWxQYXR0ZXJuID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG4gICAgICByZXR1cm4gZW1haWxQYXR0ZXJuLnRlc3QodmFsdWVTdHIpO1xuICAgIH1cbiAgXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gIFxuXG4gIGNoZWNrRG9iKGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGZvcm1hdHRlZExhYmVsID0gKGl0ZW0uZmllbGRMYWJlbCB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZmllbGRHcm91cE5hbWUgPSAoaXRlbS5maWVsZEdyb3VwIHx8IFtdKS5mbGF0TWFwKChnOmFueSkgPT4gW1xuICAgICAgKGcuZmllbGRHcm91cE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCksXG4gICAgICAoZy5maWVsZFN0ZXBOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgXSk7XG4gIFxuICAgIGlmIChmb3JtYXR0ZWRMYWJlbC5pbmNsdWRlcygnZG9iJykgJiYgaXRlbS5maWVsZFZhbHVlKSB7XG4gICAgICBjb25zdCBlbnRlcmVkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0uZmllbGRWYWx1ZSk7XG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIFxuICAgICAgaWYgKGZpZWxkR3JvdXBOYW1lLnNvbWUoKG5hbWU6YW55KSA9PiBuYW1lLmluY2x1ZGVzKCdzdHVkZW50JykpKSB7XG4gICAgICAgIGNvbnN0IGFnZSA9IHRvZGF5LmdldEZ1bGxZZWFyKCkgLSBlbnRlcmVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBoYXNCaXJ0aGRheVBhc3NlZCA9XG4gICAgICAgICAgdG9kYXkuZ2V0TW9udGgoKSA+IGVudGVyZWREYXRlLmdldE1vbnRoKCkgfHxcbiAgICAgICAgICAodG9kYXkuZ2V0TW9udGgoKSA9PT0gZW50ZXJlZERhdGUuZ2V0TW9udGgoKSAmJiB0b2RheS5nZXREYXRlKCkgPj0gZW50ZXJlZERhdGUuZ2V0RGF0ZSgpKTtcbiAgXG4gICAgICAgIGNvbnN0IGV4YWN0QWdlID0gaGFzQmlydGhkYXlQYXNzZWQgPyBhZ2UgOiBhZ2UgLSAxO1xuICBcbiAgICAgICAgaWYgKGV4YWN0QWdlIDwgMykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgICdTdHVkZW50IG11c3QgYmUgYXQgbGVhc3QgMyB5ZWFycyBvbGQuJyxcbiAgICAgICAgICAgICdPaycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOjM1MDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgICAgaXRlbS5maWVsZFZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkR3JvdXBOYW1lLnNvbWUoKG5hbWU6YW55KSA9PiBuYW1lLmluY2x1ZGVzKCdtb3RoZXInKSkpIHtcbiAgICAgICAgY29uc3QgYWdlID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIGVudGVyZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IGhhc0JpcnRoZGF5UGFzc2VkID1cbiAgICAgICAgICB0b2RheS5nZXRNb250aCgpID4gZW50ZXJlZERhdGUuZ2V0TW9udGgoKSB8fFxuICAgICAgICAgICh0b2RheS5nZXRNb250aCgpID09PSBlbnRlcmVkRGF0ZS5nZXRNb250aCgpICYmIHRvZGF5LmdldERhdGUoKSA+PSBlbnRlcmVkRGF0ZS5nZXREYXRlKCkpO1xuICBcbiAgICAgICAgY29uc3QgZXhhY3RBZ2UgPSBoYXNCaXJ0aGRheVBhc3NlZCA/IGFnZSA6IGFnZSAtIDE7XG4gIFxuICAgICAgICBpZiAoZXhhY3RBZ2UgPCAxOCkge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgICdNb3RoZXIgbXVzdCBiZSBhdCBsZWFzdCAxOCB5ZWFycyBvbGQuJyxcbiAgICAgICAgICAgICdPaycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOjM1MDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgICAgaXRlbS5maWVsZFZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkR3JvdXBOYW1lLnNvbWUoKG5hbWU6YW55KSA9PiBuYW1lLmluY2x1ZGVzKCdmYXRoZXInKSB8fCBuYW1lLmluY2x1ZGVzKCdndWFyZGlhbicpKSkge1xuICAgICAgICBjb25zdCBhZ2UgPSB0b2RheS5nZXRGdWxsWWVhcigpIC0gZW50ZXJlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgY29uc3QgaGFzQmlydGhkYXlQYXNzZWQgPVxuICAgICAgICAgIHRvZGF5LmdldE1vbnRoKCkgPiBlbnRlcmVkRGF0ZS5nZXRNb250aCgpIHx8XG4gICAgICAgICAgKHRvZGF5LmdldE1vbnRoKCkgPT09IGVudGVyZWREYXRlLmdldE1vbnRoKCkgJiYgdG9kYXkuZ2V0RGF0ZSgpID49IGVudGVyZWREYXRlLmdldERhdGUoKSk7XG4gIFxuICAgICAgICBjb25zdCBleGFjdEFnZSA9IGhhc0JpcnRoZGF5UGFzc2VkID8gYWdlIDogYWdlIC0gMTtcbiAgXG4gICAgICAgIGlmIChleGFjdEFnZSA8IDIxKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgJ0ZhdGhlciBtdXN0IGJlIGF0IGxlYXN0IDIxIHllYXJzIG9sZC4nLFxuICAgICAgICAgICAgJ09rJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246MzUwMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgICBpdGVtLmZpZWxkVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gIFxuICB9XG5cbiAgbmV4dFNpYmxpbmdOdW1iZXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBzaG93QWRkU2libGluZ3NCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2libGluZ3MgPSB0aGlzLmZpZWxkRGF0YVsnRmFtaWx5IERldGFpbHMnXVsnU2libGluZ3MgRGV0YWlscyddO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gNTsgaSsrKSB7XG4gICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3MuZmluZCgoZWw6IGFueSkgPT5cbiAgICAgICAgZWwuZmllbGRMYWJlbD8uaW5jbHVkZXMoaS50b1N0cmluZygpKVxuICAgICAgKTtcbiAgICAgIGlmICghc2libGluZyB8fCAhc2libGluZy5pc0Rpc3BsYXkpIHtcbiAgICAgICAgdGhpcy5uZXh0U2libGluZ051bWJlciA9IGk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubmV4dFNpYmxpbmdOdW1iZXIgPSBudWxsO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG5cbiAgYWRkU2libGluZyhzaWJsaW5nTnVtYmVyOiBhbnkpIHtcbiAgICBjb25zdCBzaWJsaW5ncyA9IHRoaXMuZmllbGREYXRhWydGYW1pbHkgRGV0YWlscyddWydTaWJsaW5ncyBEZXRhaWxzJ107XG4gICAgc2libGluZ3MuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmZpZWxkTGFiZWw/LmluY2x1ZGVzKHNpYmxpbmdOdW1iZXIpKSB7XG4gICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XG5cbiAgZ3JvdXBPZlNpYmxpbmdzKGl0ZW06YW55KTphbnl7XG4gICAgY29uc3QgZ3JvdXBlZEZpZWxkczogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9ID0ge307XG5cbiAgICBpdGVtLmZvckVhY2goKGZpZWxkOmFueSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2ggPSBmaWVsZC5maWVsZExhYmVsLm1hdGNoKC9cXGQrJC8pOyAvLyBFeHRyYWN0IHRyYWlsaW5nIG51bWJlciBmcm9tIGZpZWxkTGFiZWxcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBzaWJsaW5nTnVtYmVyID0gbWF0Y2hbMF07XG4gIFxuICAgICAgICBpZiAoIWdyb3VwZWRGaWVsZHNbc2libGluZ051bWJlcl0pIHtcbiAgICAgICAgICBncm91cGVkRmllbGRzW3NpYmxpbmdOdW1iZXJdID0gW107XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGdyb3VwZWRGaWVsZHNbc2libGluZ051bWJlcl0ucHVzaChmaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3JvdXBlZEZpZWxkcztcbiAgfVxuXG4gIHJldHVybkRpc3BsYXlUZXh0KGl0ZW06YW55KXtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGdyb3VwT2ZQYXN0U2Nob29sRGV0YWlscyhpdGVtOmFueSk6YW55e1xuICAgIGNvbnN0IGdyb3VwZWRGaWVsZHM6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSA9IHt9O1xuXG4gICAgaXRlbS5mb3JFYWNoKChmaWVsZDphbnkpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZmllbGQuZmllbGRMYWJlbC5tYXRjaCgvXFxkKyQvKTsgLy8gRXh0cmFjdCB0cmFpbGluZyBudW1iZXIgZnJvbSBmaWVsZExhYmVsXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3Qgc2libGluZ051bWJlciA9IG1hdGNoWzBdO1xuICBcbiAgICAgICAgaWYgKCFncm91cGVkRmllbGRzW3NpYmxpbmdOdW1iZXJdKSB7XG4gICAgICAgICAgZ3JvdXBlZEZpZWxkc1tzaWJsaW5nTnVtYmVyXSA9IFtdO1xuICAgICAgICB9XG4gIFxuICAgICAgICBncm91cGVkRmllbGRzW3NpYmxpbmdOdW1iZXJdLnB1c2goZmllbGQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdyb3VwZWRGaWVsZHM7XG4gIH1cblxuICBuZXh0UGFzdFNjaG9vbE51bWJlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHNob3dBZGRQYXN0U2Nob29sQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNpYmxpbmdzID0gdGhpcy5maWVsZERhdGFbJ1N0dWRlbnQgRGV0YWlscyddWydQYXN0IHNjaG9vbCBEZXRhaWxzJ107XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5ncy5maW5kKChlbDogYW55KSA9PlxuICAgICAgICBlbC5maWVsZExhYmVsPy5pbmNsdWRlcyhpLnRvU3RyaW5nKCkpXG4gICAgICApO1xuICAgICAgaWYgKCFzaWJsaW5nIHx8ICFzaWJsaW5nLmlzRGlzcGxheSkge1xuICAgICAgICB0aGlzLm5leHRQYXN0U2Nob29sTnVtYmVyID0gaTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5uZXh0UGFzdFNjaG9vbE51bWJlciA9IG51bGw7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYWRkUGFzdFNjaG9vbChwYXN0U2Nob29sTnVtYmVyOiBhbnkpIHtcbiAgICBjb25zdCBzaWJsaW5ncyA9IHRoaXMuZmllbGREYXRhWydTdHVkZW50IERldGFpbHMnXVsnUGFzdCBzY2hvb2wgRGV0YWlscyddO1xuICAgIHNpYmxpbmdzLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5maWVsZExhYmVsPy5pbmNsdWRlcyhwYXN0U2Nob29sTnVtYmVyKSkge1xuICAgICAgICBlbGVtZW50LmlzRGlzcGxheSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPHNlY3Rpb24gc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiPlxuICA8ZGl2IFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCI+XG4gICAgPGRpdiAjbWFpbkNvbnRhaW5lciBjbGFzcz1cInJvd0ZsZXhcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiXG4gICAgICBbc2ltcG9Cb3JkZXJdPVwic3R5bGVzPy5ib3JkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLXNlY3Rpb25cIlxuICAgICAgICBbbmdDbGFzc109XCJ7J2p1c3RpZnktY29udGVudC1tZC1zdGFydCc6IHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ2xlZnQnICwgJ2p1c3RpZnktY29udGVudC1tZC1lbmQnOiBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdyaWdodCd9XCJcbiAgICAgICAgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJib2R5LXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiIFtpZF09XCJkYXRhPy5pZFwiPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHNpbXBvLXRleHQtZWxlbWVudCBbdGV4dERhdGFdPVwiY29udGVudD8uaW5wdXRUZXh0Py5bMF0/LnZhbHVlXCIgW3RleHRMYWJlbF09XCJjb250ZW50Py5pbnB1dFRleHQ/LlswXT8ubGFiZWxcIj48L3NpbXBvLXRleHQtZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBkLW1kLWZsZXggbXQtMTVcIiAqbmdJZj1cImRhdGE/LmFjdGlvbj8uZGlzcGxheVwiIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICAgc3R5bGVzPy5sYXlvdXQ/LmFsaWduID09PSAnbGVmdCcgPyAnanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0JyA6ICcnLFxuICAgICAgICAgICAgICBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdjZW50ZXInID8gJ2p1c3RpZnktY29udGVudC1tZC1jZW50ZXInIDogJycsXG4gICAgICAgICAgICAgIHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ3JpZ2h0JyA/ICdqdXN0aWZ5LWNvbnRlbnQtbWQtZW5kJyA6ICcnXG4gICAgICAgICAgICBdXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cblxuICA8c2VjdGlvbiBjbGFzcz1cIm1haW4tc2VjdGlvblwiPlxuICAgIDxkaXYgKm5nSWY9XCJmb3JtU3RhdHVzICE9ICdSRUdJU1RFUkVEJyAmJiBmb3JtU3RhdHVzICE9ICdBRE1JVFRFRCdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdWJUYWJzX3NlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxpc3RfdGFicyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkRGF0YSlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGVfdGFiIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNlbGVjdGVkS2V5ID0ga2V5XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRLZXkgPT09IGtleSA/ICdzaW5nbGVfdGFiX2FjdGl2ZScgOiAnc2luZ2xlX3RhYidcIj5cbiAgICAgICAgICAgICAge3trZXkgfCB0aXRsZWNhc2V9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZV90YWIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic2VsZWN0ZWRLZXkgPSAnRG9jdW1lbnQnXCIgKm5nSWY9XCJkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkS2V5ID09PSAnRG9jdW1lbnQnID8gJ3NpbmdsZV90YWJfYWN0aXZlJyA6ICdzaW5nbGVfdGFiJ1wiPlxuICAgICAgICAgICAgRG9jdW1lbnRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlX3RhYiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZWRpcmVjdFRvUGF5bWVudCgpXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YT8uc2VjdGlvblR5cGUgPT09ICdhZG1pc3Npb25Gb3JtJ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZEtleSA9PT0gJ1BheW1lbnQnID8gJ3NpbmdsZV90YWJfYWN0aXZlJyA6ICdzaW5nbGVfdGFiJ1wiPlxuICAgICAgICAgICAgUGF5bWVudFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZpZWxkRGF0YVtzZWxlY3RlZEtleV0gPyBPYmplY3Qua2V5cyhmaWVsZERhdGFbc2VsZWN0ZWRLZXldKSA6IFtdO2xldCBncm91cEluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJvZHlcIiAqbmdJZj1cImdyb3VwICE9PSAnQmFja3VwIENvbnRhY3QnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3RfdGFicyBiYWNrVG9MZWFkcyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICB7e2dyb3VwfX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cEluZGV4ID09IDAgJiYgT2JqZWN0LmtleXMoZmllbGREYXRhKVswXSA9PT0gc2VsZWN0ZWRLZXlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1ib3hcIiAqbmdJZj1cIiFwYXlsb2FkLmltZ1VybFwiPlxuICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiZHVtbXktaW1hZ2VcIiBzcmM9XCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL21hc3Rlci9hZGQtaW1hZ2Uuc3ZnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlX2JveFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmNfYnJvd3NlX2J0blwiIGlkPVwiZGlzcGxheV9icm93c2VfYnRuXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+Q2xpY2sgdG9cbiAgICAgICAgICAgICAgICAgIHVwbG9hZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgaWQ9XCJ2ZW5kb3JJbWFnZVwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cIm15ZmlsZVwiXG4gICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL3gtcG5nLGltYWdlL2pwZWcsaW1hZ2UvanBnXCIgKGNoYW5nZSk9XCJ1cGRhdGVBZG1pc3Npb25JbWFnZSgkZXZlbnQpXCIgY2xhc3M9XCJwYy1idG5cIlxuICAgICAgICAgICAgICBpZD1cImJyb3dzZV9jb250YWN0X2ltYWdlXCIgI2ZpbGVJbnB1dCAvPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGF5bG9hZC5pbWdVcmxcIiBjbGFzcz1cImFkZGVkSW1nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRlZEltZ1wiPlxuICAgICAgICAgICAgICAgIDxpbWcgIGFsdD1cIlwiIFtzcmNdPVwiZHMuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChwYXlsb2FkLmltZ1VybClcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2Jsb2dzL2NoYW5nZV9pbWFnZS5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgIENoYW5nZSBJbWFnZVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24gZGVsZXRlLWNoYW5nZVwiIChjbGljayk9XCJkZWxldGVJbWcoKVwiPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2Jsb2dzL2RlbGV0ZV9pbWFnZS5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5EZWxldGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInJvdyBtdC0xXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbmZvIG9mIGZpZWxkRGF0YVtzZWxlY3RlZEtleV1bZ3JvdXBdXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBjb2wtMTIgbXQtMVwiICpuZ0lmPVwiaW5mby5pc0Rpc3BsYXlcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJsYWJlbC10ZXh0XCI+e3tpbmZvLmRpc3BsYXlUZXh0IHx8IGluZm8uZmllbGRMYWJlbH19PC9sYWJlbD4mbmJzcDsgPHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkO1wiICpuZ0lmPVwiaW5mby5yZXF1aXJlZFwiPio8L3NwYW4+IDxicj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXREYXRhOyBjb250ZXh0OiB7ZGF0YTogaW5mbywgZ3JvdXA6Z3JvdXB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMVwiICpuZ0lmPVwiZ3JvdXAgIT0gJ1NpYmxpbmdzIERldGFpbHMnICYmIGdyb3VwICE9ICdQYXN0IHNjaG9vbCBEZXRhaWxzJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW5mbyBvZiBmaWVsZERhdGFbc2VsZWN0ZWRLZXldW2dyb3VwXVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiKGluZm8udHlwZSA9PT0gJ0ZBVEhFUl9JTUFHRScgfHwgaW5mby50eXBlID09PSAnTU9USEVSX0lNQUdFJyB8fCBpbmZvLnR5cGUgPT09ICdHVUFSRElBTl9JTUFHRScpID8gJ2NvbC1tZC0xMiBjb2wtMTInIDogJ2NvbC1tZC00IGNvbC0xMiBtdC0xJ1wiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbmZvLmlzRGlzcGxheVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImxhYmVsLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihpbmZvLnR5cGUgIT0gJ0ZBVEhFUl9JTUFHRScgJiYgaW5mby50eXBlICE9ICdNT1RIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnR1VBUkRJQU5fSU1BR0UnKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJyZXR1cm5EaXNwbGF5VGV4dChpbmZvLmRpc3BsYXlUZXh0IHx8IGluZm8uZmllbGRMYWJlbClcIj57e3JldHVybkRpc3BsYXlUZXh0KGluZm8uZGlzcGxheVRleHQgfHwgaW5mby5maWVsZExhYmVsKX19PC9sYWJlbD4mbmJzcDsgPHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkO1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5mby5yZXF1aXJlZCAmJiAoaW5mby50eXBlICE9ICdGQVRIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnTU9USEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ0dVQVJESUFOX0lNQUdFJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dERhdGE7IGNvbnRleHQ6IHtkYXRhOiBpbmZvLCBncm91cDpncm91cH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJncm91cCA9PT0gJ1NpYmxpbmdzIERldGFpbHMnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBrZXkgb2Ygb2JqZWN0S2V5cyhncm91cE9mU2libGluZ3MoZmllbGREYXRhWydGYW1pbHkgRGV0YWlscyddWydTaWJsaW5ncyBEZXRhaWxzJ10pKTtsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMlwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGluZm8gb2YgZ3JvdXBPZlNpYmxpbmdzKGZpZWxkRGF0YVsnRmFtaWx5IERldGFpbHMnXVsnU2libGluZ3MgRGV0YWlscyddKVtrZXldXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgY29sLTEyIG10LTFcIiAqbmdJZj1cImluZm8uaXNEaXNwbGF5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJsYWJlbC10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGluZm8udHlwZSAhPSAnRkFUSEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ01PVEhFUl9JTUFHRScgJiYgaW5mby50eXBlICE9ICdHVUFSRElBTl9JTUFHRScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJyZXR1cm5EaXNwbGF5VGV4dChpbmZvLmRpc3BsYXlUZXh0IHx8IGluZm8uZmllbGRMYWJlbClcIj57e2luZm8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGluZm8uZmllbGRMYWJlbH19PC9sYWJlbD4mbmJzcDsgPHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImluZm8ucmVxdWlyZWQgJiYgKGluZm8udHlwZSAhPSAnRkFUSEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ01PVEhFUl9JTUFHRScgJiYgaW5mby50eXBlICE9ICdHVUFSRElBTl9JTUFHRScpXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dERhdGE7IGNvbnRleHQ6IHtkYXRhOiBpbmZvLCBncm91cDpncm91cH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYm9yZGVyX2JvdHRvbVwiICpuZ0lmPVwiaSA+PSAxXCI+PC9kaXY+IC0tPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkX21vcmVfc2libGluZ3MgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwID09PSAnU2libGluZ3MgRGV0YWlscycgJiYgc2hvd0FkZFNpYmxpbmdzQnV0dG9uKClcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkU2libGluZyhuZXh0U2libGluZ051bWJlcilcIiBjbGFzcz1cImFkZF9zaWJsaW5nXCIgc3R5bGU9XCJ3aWR0aDptYXgtY29udGVudCAhaW1wb3J0YW50XCI+KyBBZGQgU2libGluZyB7eyBuZXh0U2libGluZ051bWJlclxuICAgICAgICAgICAgICAgIH19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJncm91cCA9PT0gJ1Bhc3Qgc2Nob29sIERldGFpbHMnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBrZXkgb2Ygb2JqZWN0S2V5cyhncm91cE9mUGFzdFNjaG9vbERldGFpbHMoZmllbGREYXRhWydTdHVkZW50IERldGFpbHMnXVsnUGFzdCBzY2hvb2wgRGV0YWlscyddKSk7bGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbmZvIG9mIGdyb3VwT2ZQYXN0U2Nob29sRGV0YWlscyhmaWVsZERhdGFbJ1N0dWRlbnQgRGV0YWlscyddWydQYXN0IHNjaG9vbCBEZXRhaWxzJ10pW2tleV1cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBjb2wtMTIgbXQtMVwiICpuZ0lmPVwiaW5mby5pc0Rpc3BsYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImxhYmVsLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoaW5mby50eXBlICE9ICdGQVRIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnTU9USEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ0dVQVJESUFOX0lNQUdFJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInJldHVybkRpc3BsYXlUZXh0KGluZm8uZGlzcGxheVRleHQgfHwgaW5mby5maWVsZExhYmVsKVwiPnt7aW5mby5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW5mby5maWVsZExhYmVsfX08L2xhYmVsPiZuYnNwOyA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5mby5yZXF1aXJlZCAmJiAoaW5mby50eXBlICE9ICdGQVRIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnTU9USEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ0dVQVJESUFOX0lNQUdFJylcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0RGF0YTsgY29udGV4dDoge2RhdGE6IGluZm8sIGdyb3VwOmdyb3VwfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkX21vcmVfc2libGluZ3MgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwID09PSAnUGFzdCBzY2hvb2wgRGV0YWlscycgJiYgc2hvd0FkZFBhc3RTY2hvb2xCdXR0b24oKVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRQYXN0U2Nob29sKG5leHRQYXN0U2Nob29sTnVtYmVyKVwiIGNsYXNzPVwiYWRkX3NpYmxpbmdcIlxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOm1heC1jb250ZW50ICFpbXBvcnRhbnRcIj4rIEFkZCBQYXN0IFNjaG9vbCB7eyBuZXh0UGFzdFNjaG9vbE51bWJlcn19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJvZHlcIiAqbmdJZj1cImZpZWxkRGF0YVtzZWxlY3RlZEtleV0uaGFzT3duUHJvcGVydHkoJ0JhY2t1cCBDb250YWN0JykgJiYgc3R1ZGVudExpdmVXaXRoID09PSAnc2luZ2xlIHBhcmVudCcgJiYgZ3JvdXBJbmRleCA9PSAwICYmIE9iamVjdC5rZXlzKGZpZWxkRGF0YSlbMF0gPT09IHNlbGVjdGVkS2V5XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3RfdGFicyBiYWNrVG9MZWFkcyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICBCYWNrdXAgQ29udGFjdCAoT3B0aW9uYWwpXG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibXRiLTE1IGNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJcIiBpZD1cIlwiIFsobmdNb2RlbCldPVwicGF5bG9hZC5wYXJlbnRBdXRob3JpemF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICBJIGF1dGhvcml6ZSB0aGUgc2Nob29sIHRvIHJlbGVhc2UgdGhlIGNoaWxkIG9ubHkgdG8gdGhlIHBhcmVudCBsaXN0ZWQgYWJvdmVcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC0xMiBtdC0xXCIgKm5nRm9yPVwibGV0IGluZm8gb2YgZmllbGREYXRhW3NlbGVjdGVkS2V5XVsnQmFja3VwIENvbnRhY3QnXVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJsYWJlbC10ZXh0XCI+e3tpbmZvLmRpc3BsYXlUZXh0IHx8IGluZm8uZmllbGRMYWJlbH19PC9sYWJlbD4mbmJzcDsgPHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkO1wiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbmZvLnJlcXVpcmVkXCI+Kjwvc3Bhbj4gPGJyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXREYXRhOyBjb250ZXh0OiB7ZGF0YTogaW5mb31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC0xMiBtdC0xXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImxhYmVsLXRleHRcIj5VcGxvYWQgU3VwcG9ydGluZyBEb2N1bWVudCAoT3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHQgdXBsb2FkLWZpbGVcIiAoY2xpY2spPVwiYmFja1VwRG9jSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICAgICAgICAgIDxwPnt7YmFja3VwRG9jRmlsZSA/ICdGaWxlIFVwbG9hZGVkJyA6ICdVcGxvYWQgRmlsZSd9fTwvcD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvdWRfdXBsb2FkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cInZlbmRvckltYWdlXCIgdHlwZT1cImZpbGVcIiBuYW1lPVwibXlmaWxlXCIgaGlkZGVuXG4gICAgICAgICAgICAgICAgYWNjZXB0PVwiLmRvYywuZG9jeCxhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQsaW1hZ2UveC1wbmcsaW1hZ2UvanBlZyxpbWFnZS9qcGcsLnBkZiwgdmlkZW8vbXA0LHZpZGVvL3gtbWF0cm9za2EsdmlkZW8veC1tc3ZpZGVvLHZpZGVvL3F1aWNrdGltZVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWRCYWNrVXBEb2N1bWVudCgkZXZlbnQpXCIgY2xhc3M9XCJwYy1idG5cIlxuICAgICAgICAgICAgICAgIGlkPVwiYnJvd3NlX2NvbnRhY3RfaW1hZ2VcIiAjYmFja1VwRG9jSW5wdXQgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBheW1lbnQtZGV0YWlsc1wiICpuZ0lmPVwic2VsZWN0ZWRLZXkgPT09ICdEb2N1bWVudCcgJiYgZGF0YT8uc2VjdGlvblR5cGUgPT09ICdhZG1pc3Npb25Gb3JtJ1wiPlxuICAgICAgICAgIDxzaW1wby1kb2N1bWVudCBbZG9jdW1lbnRMaXN0XT1cImRvY3VtZW50TGlzdFwiPjwvc2ltcG8tZG9jdW1lbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGF5bWVudC1kZXRhaWxzXCIgKm5nSWY9XCJzZWxlY3RlZEtleSA9PT0gJ1BheW1lbnQnICYmIGRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybSdcIj5cbiAgICAgICAgICA8c2ltcG8tcGF5bWVudC1kZXRhaWxzIFthZG1pc3Npb25EYXRhXT1cInBheWxvYWRcIlxuICAgICAgICAgICAgW3N1YnNjcmlwdGlvbnNEYXRhXT1cInN1YnNjcmlwdGlvbnNEYXRhXCIgW3Rlcm1QYXltZW50TGlzdF09XCJ0ZXJtUGF5bWVudExpc3RcIj48L3NpbXBvLXBheW1lbnQtZGV0YWlscz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1wYXJlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRhdGE/LmFjdGlvbj8uYnV0dG9uc1wiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkK2J1dHRvbi5pZFwiXG4gICAgICAgICAgICBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uLnN0eWxlc1wiICpuZ0lmPVwiKGRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybScgJiYgc2VsZWN0ZWRLZXkgPT0gJ1BheW1lbnQnKSB8fFxuICAgICAgICAgICAgKGRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgJiZcbiAgICAgICAgICAgICAgKE9iamVjdC5rZXlzKGZpZWxkRGF0YSlbT2JqZWN0LmtleXMoZmllbGREYXRhKS5sZW5ndGggLSAxXSA9PSBzZWxlY3RlZEtleSkpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+e3tidXR0b24/LmNvbnRlbnQ/LmxhYmVsfX08L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY29udGludWVBZG1pc3Npb24oKVwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJkYXRhPy5pZCtidXR0b24uaWRcIlxuICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIiAqbmdJZj1cInNlbGVjdGVkS2V5ICE9ICdQYXltZW50JyAmJiBkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+Q29udGludWU8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY29udGludWVBZG1pc3Npb24oKVwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtpZF09XCJkYXRhPy5pZCtidXR0b24uaWRcIlxuICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIlxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nICYmIChPYmplY3Qua2V5cyhmaWVsZERhdGEpW09iamVjdC5rZXlzKGZpZWxkRGF0YSkubGVuZ3RoIC0gMV0gIT0gc2VsZWN0ZWRLZXkpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+Q29udGludWU8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJlbXB0eVRleHRcIiAqbmdJZj1cImZvcm1TdGF0dXMgPT0gJ1JFR0lTVEVSRUQnIHx8IGZvcm1TdGF0dXMgPT0gJ0FETUlUVEVEJ1wiPlxuICAgICAgPGltZyBbc3JjXT1cImNvbnRlbnQ/LmltYWdlPy51cmxcIiBhbHQ9XCJcIiAqbmdJZj1cImNvbnRlbnQ/LmltYWdlPy5zaG93SW1hZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCIgW2lubmVySHRtbF09XCJjb250ZW50Py5pbnB1dFRleHQ/LlsxXT8udmFsdWVcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuXG4gIDxuZy10ZW1wbGF0ZSAjaW5wdXREYXRhIGxldC1maWVsZD1cImRhdGFcIiBsZXQtZ3JvdXA9XCJncm91cFwiPlxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PSAnSU1BR0UnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtYm94XCIgKm5nSWY9XCIhZmllbGQuZmllbGRJbWFnZVVybFwiPlxuICAgICAgICA8aW1nIGNsYXNzPVwiZHVtbXktaW1hZ2VcIiBzcmM9XCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL21hc3Rlci9hZGQtaW1hZ2Uuc3ZnXCJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsZUlucHV0Mi5jbGljaygpXCIgYWx0PVwiXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmY19icm93c2VfYnRuXCIgaWQ9XCJkaXNwbGF5X2Jyb3dzZV9idG5cIiAoY2xpY2spPVwiZmlsZUlucHV0Mi5jbGljaygpXCI+Q2xpY2sgdG9cbiAgICAgICAgICAgIHVwbG9hZDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgaWQ9XCJ2ZW5kb3JJbWFnZVwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cIm15ZmlsZVwiIGFjY2VwdD1cImltYWdlL3gtcG5nLGltYWdlL2pwZWcsaW1hZ2UvanBnXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWRQYXJlbnRHdWFyZGluYUltYWdlcygkZXZlbnQsZmllbGQpXCIgY2xhc3M9XCJwYy1idG5cIiBpZD1cImJyb3dzZV9jb250YWN0X2ltYWdlXCIgI2ZpbGVJbnB1dDIgLz5cbiAgICAgICAgPGRpdiAqbmdJZj1cImZpZWxkLmZpZWxkSW1hZ2VVcmxcIiBjbGFzcz1cImFkZGVkSW1nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZGVkSW1nXCI+XG4gICAgICAgICAgICA8aW1nIGFsdD1cIlwiIFtzcmNdPVwiZHMuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChmaWVsZC5maWVsZEltYWdlVXJsKVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1idXR0b25zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZpbGVJbnB1dDIuY2xpY2soKVwiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvYmxvZ3MvY2hhbmdlX2ltYWdlLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICBDaGFuZ2UgSW1hZ2VcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbiBkZWxldGUtY2hhbmdlXCIgKGNsaWNrKT1cImRlbGV0ZUltZygpXCI+XG4gIFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvYmxvZ3MvZGVsZXRlX2ltYWdlLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgIDxkaXY+RGVsZXRlPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdURVhUJyAmJiBmaWVsZC5pc0Rpc3BsYXlcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIFtwbGFjZWhvbGRlcl09XCInRW50ZXIgJytmaWVsZC5maWVsZExhYmVsXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXJyb3JcIiAqbmdJZj1cImZpZWxkLmZpZWxkVmFsdWUgJiYgIWdldEZpZWxkVmFsaWRhdGlvbihmaWVsZClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkTGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Bob25lIG51bWJlcicpXCI+XG4gICAgICAgICAgUGxlYXNlIGVudGVyIGEgdmFsaWQgMTAtZGlnaXQgSW5kaWFuIG1vYmlsZSBudW1iZXIuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuZmllbGRMYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZW1haWwnKVwiPlxuICAgICAgICAgIFBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImZpZWxkLmRhdGFUeXBlID09PSAnTlVNQkVSJyAmJiBmaWVsZC5pc0Rpc3BsYXlcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIidFbnRlciAnK2ZpZWxkLmZpZWxkTGFiZWxcIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiZmllbGQuZmllbGRWYWx1ZSAmJiAhZ2V0RmllbGRWYWxpZGF0aW9uKGZpZWxkKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuZmllbGRMYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygncGhvbmUgbnVtYmVyJylcIj5cbiAgICAgICAgICBQbGVhc2UgZW50ZXIgYSB2YWxpZCAxMC1kaWdpdCBJbmRpYW4gbW9iaWxlIG51bWJlci5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZC5maWVsZExhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlbWFpbCcpXCI+XG4gICAgICAgICAgUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdNT05FWScgJiYgZmllbGQuaXNEaXNwbGF5XCI+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyICcrZmllbGQuZmllbGRMYWJlbFwiIFsobmdNb2RlbCldPVwiZmllbGQuZmllbGRWYWx1ZVwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ0RBVEUnICYmIGZpZWxkLmlzRGlzcGxheVwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCIgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgJytmaWVsZC5maWVsZExhYmVsXCIgW21heF09XCJnZXRNYXhEYXRlKGZpZWxkKVwiXG4gICAgICAoaW5wdXQpPVwiY2hlY2tEb2IoZmllbGQpXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdURVhUX0ZJTEUnICYmIGZpZWxkLmlzRGlzcGxheVwiPlxuICAgICAgPGlucHV0IG1hdElucHV0IGNsYXNzPVwiaW5wdXQtdGV4dC0xXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCIgc3R5bGU9XCJ3aWR0aDo5MCVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1ib3gtMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cIiFmaWVsZC5maWVsZEltYWdlVXJsXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMCVcIj5cbiAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJmaWxlSW5wdXQxLmNsaWNrKClcIlxuICAgICAgICAgIGNsYXNzPVwiZHVtbXktaW1hZ2UtMSB3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPmNsb3VkX3VwbG9hZDwvbWF0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1ib3gtMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImZpZWxkLmZpZWxkSW1hZ2VVcmxcIiBzdHlsZT1cIndpZHRoOjEwJVwiPlxuICAgICAgICA8IS0tIElmIHRoZSB1cGxvYWRlZCBmaWxlIGlzIGFuIGltYWdlLCBzaG93IHRoZSBwcmV2aWV3IC0tPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJpc0ltYWdlKGZpZWxkLmZpZWxkSW1hZ2VVcmwpXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgIGNsYXNzPVwidy0xMDAgaC0xMDBcIlxuICAgICAgICAgIFtzcmNdPVwiZHMuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChmaWVsZC5maWVsZEltYWdlVXJsKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dDEuY2xpY2soKVwiIC8+XG4gICAgICBcbiAgICAgICAgPCEtLSBJZiB0aGUgdXBsb2FkZWQgZmlsZSBpcyBub3QgYW4gaW1hZ2UsIHNob3cgYSBmaWxlIGljb24gLS0+XG4gICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICpuZ0lmPVwiIWlzSW1hZ2UoZmllbGQuZmllbGRJbWFnZVVybClcIlxuICAgICAgICAgIGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGR1bW15LWltYWdlLTFcIlxuICAgICAgICAgIChjbGljayk9XCJmaWxlSW5wdXQxLmNsaWNrKClcIj5pbnNlcnRfZHJpdmVfZmlsZTwvbWF0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBpZD1cInZlbmRvckltYWdlXCIgdHlwZT1cImZpbGVcIiBuYW1lPVwibXlmaWxlXCJcbiAgICAgICAgYWNjZXB0PVwiLmRvYywuZG9jeCxhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQsaW1hZ2UveC1wbmcsaW1hZ2UvanBlZyxpbWFnZS9qcGcsLnBkZiwgdmlkZW8vbXA0LHZpZGVvL3gtbWF0cm9za2EsdmlkZW8veC1tc3ZpZGVvLHZpZGVvL3F1aWNrdGltZVwiXG4gICAgICAgIChjaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRJbWFnZSgkZXZlbnQsZmllbGQpXCIgY2xhc3M9XCJwYy1idG5cIiBpZD1cImJyb3dzZV9jb250YWN0X2ltYWdlXCIgI2ZpbGVJbnB1dDEgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdEUk9QRE9XTicgJiYgZmllbGQuaXNEaXNwbGF5XCIgY2xhc3M9XCJhZG1pc3Npb25cIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlucHV0LXRleHQtMSBpbnB1dF9jYXJkXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cIndpZHRoOjEwMCVcIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJpbnB1dFN0eWxlXCIgcGxhY2Vob2xkZXI9XCItLVNlbGVjdC0tXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCIgW211bHRpcGxlXT1cImZpZWxkLm11bHRpcGxlU2VsZWN0aW9uXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWVsZD8udmFsdWU/Lmxlbmd0aCB8fCAwKSA+IDBcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkLnZhbHVlXCIgW3ZhbHVlXT1cIml0ZW0/LnZhbHVlXCIgKGNsaWNrKT1cIm1hc3RlckRyb3Bkb3duVmFsdWVDaGFuZ2UoaXRlbSwgZmllbGQpXCI+e3tpdGVtLmxhYmVsfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWVsZD8udmFsdWU/Lmxlbmd0aCB8fCAwKSA9PSAwXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWVsZC5zb3VyY2VEYXRhW2ZpZWxkLmRhdGFTb3VyY2VUeXBlXVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbnB1dEZpZWxkQ2hhbmdlKGl0ZW0sIGZpZWxkKVwiIFt2YWx1ZV09XCJpdGVtPy5uYW1lXCI+e3tpdGVtLm5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdDSEVDS0JPWCcgJiYgZmllbGQuaXNEaXNwbGF5XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGZpZWxkPy52YWx1ZT8ubGVuZ3RoIHx8IDApID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi01XCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmllbGQudmFsdWVcIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJcIiBpZD1cImZsZXhDaGVja0NoZWNrZWRcIiBbKG5nTW9kZWwpXT1cImRhdGEuY2hlY2tlZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmbGV4Q2hlY2tDaGVja2VkXCI+XG4gICAgICAgICAgICB7e2RhdGEubGFiZWx9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZmllbGQ/LnZhbHVlPy5sZW5ndGggfHwgMCkgPT0gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi01XCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmllbGQuc291cmNlRGF0YVtmaWVsZC5kYXRhU291cmNlVHlwZV1cIj5cbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJcIiBpZD1cImZsZXhDaGVja0NoZWNrZWRcIiBbKG5nTW9kZWwpXT1cImRhdGEuY2hlY2tlZFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmbGV4Q2hlY2tDaGVja2VkXCI+XG4gICAgICAgICAgICB7e2RhdGEubmFtZX19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdSQURJT0JVVFRPTicgJiYgZmllbGQuaXNEaXNwbGF5XCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZ2FwOiAyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyBoZWlnaHQ6IDM1cHg7YWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWVsZD8udmFsdWU/Lmxlbmd0aCB8fCAwKSA+IDBcIj5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCIgbWItNVwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpZWxkLnZhbHVlXCI+XG4gICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBbdmFsdWVdPVwiZGF0YS52YWx1ZVwiIFsobmdNb2RlbCldPVwiZmllbGQuZmllbGRWYWx1ZVwiPnt7ZGF0YS5sYWJlbH19PC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIFsobmdNb2RlbCldPVwiZmllbGQuZmllbGRWYWx1ZVwiIChjaGFuZ2UpPVwicmFkaW9CdXR0b25DaGFuZ2VkKGZpZWxkLHNlbGVjdGVkS2V5LGdyb3VwKVwiPlxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nRm9yPVwibGV0IGRhdGEgb2YgZmllbGQudmFsdWVcIiBbdmFsdWVdPVwiZGF0YS52YWx1ZVwiPlxuICAgICAgICAgICAgICB7eyBkYXRhLmxhYmVsIH19XG4gICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICBcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWVsZD8udmFsdWU/Lmxlbmd0aCB8fCAwKSA9PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItNVwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpZWxkLnZhbHVlXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgW3ZhbHVlXT1cImRhdGEubmFtZVwiIFsobmdNb2RlbCldPVwiZmllbGQuZmllbGRWYWx1ZVwiIC8+XG4gIFxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiJ3JhZGlvXycgKyBkYXRhLm5hbWVcIj5cbiAgICAgICAgICAgICAge3sgZGF0YS5uYW1lIH19XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlcz8uZGV2aWRlcj8uZGlzcGxheVwiPlxuICAgIDxzaW1wby1zdmctZGl2aWRlciBbZGl2aWRlclR5cGVdPVwic3R5bGVzPy5kZXZpZGVyPy5kZXZpZGVyVHlwZVwiXG4gICAgICBbY29sb3JdPVwibmV4dENvbXBvbmVudENvbG9yPy5jb2xvclwiPjwvc2ltcG8tc3ZnLWRpdmlkZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
834
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZWN0aW9ucy9yZWdpc3RyYXRpb24tZm9ybS9yZWdpc3RyYXRpb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3JlZ2lzdHJhdGlvbi1mb3JtL3JlZ2lzdHJhdGlvbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUcsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVy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OlsiaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRHcmlkTGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2dyaWQtbGlzdCc7XHJcbmltcG9ydCB7IFNpbXBvRWxlbWVudHNNb2R1bGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IEJhY2tncm91bmRNb2RlbCwgU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyAgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuXHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgSW1hZ2VVcGxhb2RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW1hZ2UtdXBsb2FkLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlZ2lzdHJhdGlvbkZvcm1Db250ZW50TW9kZWwsIFJlZ2lzdHJhdGlvbkZvcm1Nb2RlbCB9IGZyb20gJy4vcmVnaXN0cmF0aW9uRm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0UmFkaW9Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXJlZ2lzdHJhdGlvbi1mb3JtJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdEdyaWRMaXN0TW9kdWxlLFxyXG4gICAgU2ltcG9FbGVtZW50c01vZHVsZSxcclxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgLy9kaXJlY3RpdmVcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBCb3JkZXJEaXJlY3RpdmUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxyXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0UmFkaW9Nb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWdpc3RyYXRpb24tZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3JlZ2lzdHJhdGlvbi1mb3JtLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RyYXRpb25Gb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveXtcclxuICBASW5wdXQoKSBkYXRhPzogUmVnaXN0cmF0aW9uRm9ybU1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PyA6IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PyA6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xyXG4gIGNvbnRlbnQ6IFJlZ2lzdHJhdGlvbkZvcm1Db250ZW50TW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgc3R5bGVzOiBTdHlsZXNNb2RlbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZSA6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwdWJsaWMgZHM6IERvbVNhbml0aXplcixcclxuICAgIHB1YmxpYyBpbWFnZVVwbG9hZFNlcnZpY2U6IEltYWdlVXBsYW9kU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIE9iamVjdCA9IE9iamVjdDtcclxuICBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICBcImJ1c2luZXNzRGV0YWlsc1wiOiB7XHJcbiAgICAgIFwiaWRcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICBcIm5hbWVcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiTmFtZVwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzTmFtZVwiKVxyXG4gICAgfSxcclxuICAgIFwiZmllbGRJdGVtc1wiOiBbXSxcclxuICAgIFwiaW1nVXJsXCI6ICcnLFxyXG4gICAgJ2RvY3VtZW50cyc6IFtdLFxyXG4gICAgXCJwYXJlbnRBdXRob3JpemF0aW9uXCI6IGZhbHNlLFxyXG4gICAgXCJiYWNrdXBEb2NcIiA6ICcnLFxyXG4gICAgXCJwYXltZW50UGxhblR5cGVcIiA6ICdBTk5VQUxMWScsXHJcbiAgICBcInN1YnNjcmlwdGlvblBsYW5zXCI6IFtdLFxyXG4gICAgXCJhZG1pc3Npb25QYXltZW50RGV0YWlsXCI6IHtcclxuICAgICAgXCJhbW91bnRcIjogMCxcclxuICAgICAgXCJwYXltZW50RGF0ZVwiOiBuZXcgRGF0ZSgpLFxyXG4gICAgICBcInBheW1lbnRTdGF0dXNcIjogXCJQRU5ESU5HXCIsXHJcbiAgICAgIFwiZmFpbGVkUmVhc29uXCI6IFwiXCIsXHJcbiAgICAgIFwicGF5bWVudExpbmtcIjogXCJcIixcclxuICAgICAgXCJvZmZsaW5lUGF5bWVudE1vZGVcIjogbnVsbCxcclxuICAgICAgXCJjaGVxdWVJc3N1ZWRCeVwiOiBcIlwiLFxyXG4gICAgICBcImFjY291bnROdW1iZXJcIjogXCJcIixcclxuICAgICAgXCJjaGVxdWVCYW5rXCI6IFwiXCIsXHJcbiAgICAgIFwicmVtYXJrc1wiOiBcIlwiLFxyXG4gICAgICBcInJlZmVyZW5jZU51bWJlclwiOiBcIlwiLFxyXG4gICAgICBcIm9mZmxpbmVQYXltZW50XCI6IGZhbHNlLFxyXG4gICAgICBcImF0dGFjaGVtZW50VXJsXCI6IFwiXCJcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdGVkS2V5OiBhbnk7XHJcbiAgZmllbGREYXRhOiBhbnkgPSB7fVxyXG4gIGJ1c2luZXNzSWQ6IGFueSA9ICcxZWZkZDNmMC1mYzkzLTY2OGYtYjZkMC1mZDYwYTI1NDI0NjMnO1xyXG4gIHNlbGVjdGVkR3JhZGVJZDogYW55O1xyXG4gIHNlbGVjdGVkQWNhZGVtaWNZZWFyOiBhbnk7XHJcbiAgZG9jdW1lbnRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGZvcm1TdGF0dXM6IHN0cmluZyA9ICcnXHJcbiAgc3R1ZGVudExpdmVXaXRoOiBhbnkgPSAnJ1xyXG4gIGJhY2t1cERvY0ZpbGU/OiBGaWxlO1xyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucm91dGVyLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZihwYXJhbVsnZUlkJ10pXHJcbiAgICAgICAgdGhpcy5wYXlsb2FkWydlbnF1aXJ5SWQnXSA9IHBhcmFtWydlSWQnXTtcclxuXHJcbiAgICAgIGlmKHBhcmFtWydySWQnXSlcclxuICAgICAgICB0aGlzLnBheWxvYWRbJ3JlZ2lzdHJhdGlvbklkJ10gPSBwYXJhbVsncklkJ107XHJcblxyXG4gICAgICBpZihwYXJhbVsnYklkJ10pXHJcbiAgICAgICAgdGhpcy5idXNpbmVzc0lkID0gcGFyYW1bJ2JJZCddO1xyXG5cclxuICAgICAgaWYocGFyYW1bJ3RJZCddKVxyXG4gICAgICAgIHRoaXMucGF5bG9hZFsndGVtcGxhdGVJZCddID0gcGFyYW1bJ3RJZCddO1xyXG5cclxuICAgICAgdGhpcy5wYXlsb2FkLmJ1c2luZXNzRGV0YWlscy5pZCA9IHRoaXMuYnVzaW5lc3NJZDtcclxuXHJcbiAgICAgIGlmKHRoaXMucGF5bG9hZFsncmVnaXN0cmF0aW9uSWQnXSB8fCB0aGlzLnBheWxvYWRbJ2VucXVpcnlJZCddKSB7XHJcbiAgICAgICAgdGhpcy5nZXRGb3JtZGF0YSh0aGlzLnBheWxvYWRbJ3JlZ2lzdHJhdGlvbklkJ10gfHwgdGhpcy5wYXlsb2FkWydlbnF1aXJ5SWQnXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbGxGaWVsZHMoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5nZXRBTExEb2N1bWVudExpc3QoKTtcclxuXHJcbiAgICB9KVxyXG5cclxuICAgIC8vIHRoaXMuYnVzaW5lc3NJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYklkXCIpID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKTtcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmZvcm1GaWVsZENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1kYXRhKGFkbWlzc2lvbklkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHNlcnZlckNhbGwgPSBmb3JrSm9pbih7XHJcbiAgICAgIGFkbWlzc2lvbkRhdGE6IHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyA/IHRoaXMucmVzdFNlcnZpY2UuZ2V0TGVhZEJ5SWQoYWRtaXNzaW9uSWQpIDogdGhpcy5yZXN0U2VydmljZS5nZXRSZWdpc3RyYXRpb25MaXN0KHtpZDogYWRtaXNzaW9uSWQsIHBhZ2VObzogMCwgcGFnZVNpemU6IDF9KSxcclxuICAgICAgZmllbGREYXRhOiB0aGlzLnJlc3RTZXJ2aWNlLmdldFNlbGVjdGVkTGlzdEZpZWxkcyh0aGlzLmJ1c2luZXNzSWQsIHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyA/ICdSRUdJU1RSQVRJT04nIDogJ0FETUlTU0lPTicsICB0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgPyAnUkVHSVNUUkFUSU9OJyA6ICdBRE1JU1NJT04nKVxyXG4gICAgfSlcclxuXHJcblxyXG4gICAgc2VydmVyQ2FsbC5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIGxldCBhZG1pc3Npb25EYXRhID0gdGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nID8gcmVzdWx0LmFkbWlzc2lvbkRhdGEuZGF0YSA6IHJlc3VsdC5hZG1pc3Npb25EYXRhLmRhdGEuZGF0YVswXTtcclxuICAgICAgbGV0IGZpZWxkRGF0YSA9IHJlc3VsdC5maWVsZERhdGEuZGF0YTtcclxuICAgICAgZmllbGREYXRhPy5kYXRhLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgaWYgKChlbGVtZW50LmZpZWxkTGFiZWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Bhc3Nwb3J0JykgJiYgZWxlbWVudC5kYXRhVHlwZSAhPSAnUkFESU9CVVRUT04nKSB7XHJcbiAgICAgICAgICBlbGVtZW50LmlzRGlzcGxheSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZmllbGREYXRhPy5kYXRhLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgaWYoZWxlbWVudC5kYXRhU291cmNlVHlwZSA9PT0gJ0NPVU5UUlknKXtcclxuICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGZpZWxkRGF0YT8uZGF0YS5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc1NpYmxpbmdzR3JvdXAgPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmllbGRHcm91cCkgJiYgZWxlbWVudC5maWVsZEdyb3VwLnNvbWUoXHJcbiAgICAgICAgICAoZ3JvdXA6YW55KSA9PiBncm91cC5maWVsZEdyb3VwTmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInNpYmxpbmdzIGRldGFpbHNcIilcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoYXNTaWJsaW5nc0dyb3VwKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbENoZWNrID0gZWxlbWVudC5maWVsZExhYmVsPy5pbmNsdWRlcygnMScpO1xyXG4gICAgICAgICAgY29uc3QgdmFsdWVDaGVjayA9ICEhZWxlbWVudC5maWVsZFZhbHVlO1xyXG4gICAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSBsYWJlbENoZWNrIHx8IHZhbHVlQ2hlY2s7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIGZpZWxkRGF0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGFzU2libGluZ3NHcm91cCA9IEFycmF5LmlzQXJyYXkoZWxlbWVudC5maWVsZEdyb3VwKSAmJiBlbGVtZW50LmZpZWxkR3JvdXAuc29tZShcclxuICAgICAgICAgIChncm91cDphbnkpID0+IGdyb3VwLmZpZWxkR3JvdXBOYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwicGFzdCBzY2hvb2wgZGV0YWlsc1wiKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGhhc1NpYmxpbmdzR3JvdXApIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsQ2hlY2sgPSBlbGVtZW50LmZpZWxkTGFiZWw/LmluY2x1ZGVzKCcxJyk7XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZUNoZWNrID0gISFlbGVtZW50LmZpZWxkVmFsdWU7XHJcbiAgICAgICAgICBlbGVtZW50LmlzRGlzcGxheSA9IGxhYmVsQ2hlY2sgfHwgdmFsdWVDaGVjaztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZvcm1TdGF0dXMgPSBhZG1pc3Npb25EYXRhLnN0YXR1c1xyXG5cclxuICAgICAgLy8gdGhpcy5wYXlsb2FkID0gYWRtaXNzaW9uRGF0YTtcclxuICAgICAgdGhpcy5wYXlsb2FkWydkb2N1bWVudHMnXSA9IFtdO1xyXG4gICAgICB0aGlzLnBheWxvYWQuYnVzaW5lc3NEZXRhaWxzLmlkID0gdGhpcy5idXNpbmVzc0lkO1xyXG4gICAgICB0aGlzLnBheWxvYWQuaW1nVXJsID0gYWRtaXNzaW9uRGF0YS5pbWdVcmxcclxuXHJcbiAgICAgIGFkbWlzc2lvbkRhdGFbJ2ZpZWxkTWFwJ10gPSB7fTtcclxuICAgICAgZm9yKGxldCBmaWVsZEl0ZW0gb2YgdGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nID8gKGFkbWlzc2lvbkRhdGE/LmZpZWxkRGF0YSB8fCBbXSkgOiAoYWRtaXNzaW9uRGF0YT8uZmllbGRJdGVtcyB8fCBbXSkpIHtcclxuICAgICAgICBpZihmaWVsZEl0ZW0uZmllbGROYW1lID09PSAnQWNhZGVtaWMgWWVhcicpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBY2FkZW1pY1llYXIgPSBmaWVsZEl0ZW0uZmllbGRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZmllbGRJdGVtLnR5cGUgPT09ICdGQVRIRVJfSU1BR0UnIHx8IGZpZWxkSXRlbS50eXBlID09PSAnTU9USEVSX0lNQUdFJyB8fCBmaWVsZEl0ZW0udHlwZSA9PT0gJ0dVQVJESUFOX0lNQUdFJyl7XHJcbiAgICAgICAgICBhZG1pc3Npb25EYXRhWydmaWVsZE1hcCddW2ZpZWxkSXRlbS50eXBlXSA9IGZpZWxkSXRlbS5maWVsZEltYWdlVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIGZpZWxkSXRlbS50eXBlICE9IG51bGwgJiYgZmllbGRJdGVtLnR5cGUgIT09ICdGQVRIRVJfSU1BR0UnICYmIGZpZWxkSXRlbS50eXBlICE9PSAnTU9USEVSX0lNQUdFJyAmJiBmaWVsZEl0ZW0udHlwZSAhPT0gJ0dVQVJESUFOX0lNQUdFJykge1xyXG4gICAgICAgICAgYWRtaXNzaW9uRGF0YVsnZmllbGRNYXAnXVtmaWVsZEl0ZW0udHlwZV0gPSBmaWVsZEl0ZW0uZmllbGRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGlkID0gZmllbGRJdGVtLmZpZWxkTmFtZSArIGZpZWxkSXRlbS5maWVsZEdyb3VwTmFtZTtcclxuICAgICAgICBhZG1pc3Npb25EYXRhWydmaWVsZE1hcCddW2lkXSA9IGZpZWxkSXRlbS5maWVsZFZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZpZWxkRGF0YSA9IHRoaXMucmVzdFNlcnZpY2UuZ2V0RmllbGRzVG9EaXNwbGF5KGZpZWxkRGF0YS5kYXRhKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IHRoaXMuT2JqZWN0LmtleXModGhpcy5maWVsZERhdGEpWzBdXHJcblxyXG4gICAgICBmb3IobGV0IHN0ZXAgb2YgdGhpcy5PYmplY3Qua2V5cyh0aGlzLmZpZWxkRGF0YSkpIHtcclxuICAgICAgICBmb3IobGV0IGdyb3VwIG9mIE9iamVjdC5rZXlzKHRoaXMuZmllbGREYXRhW3N0ZXBdKSkge1xyXG4gICAgICAgICAgZm9yKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkRGF0YVtzdGVwXVtncm91cF0pIHtcclxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgIT0gbnVsbCAmJiBmaWVsZC50eXBlICE9PSAnRkFUSEVSX0lNQUdFJyAmJiBmaWVsZC50eXBlICE9PSAnTU9USEVSX0lNQUdFJyAmJiBmaWVsZC50eXBlICE9PSAnR1VBUkRJQU5fSU1BR0UnKSB7XHJcbiAgICAgICAgICAgICAgZmllbGQuZmllbGRWYWx1ZSA9IGFkbWlzc2lvbkRhdGFbJ2ZpZWxkTWFwJ11bZmllbGQudHlwZV07XHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGlmKGZpZWxkLnR5cGUgPT09ICdGQVRIRVJfSU1BR0UnIHx8IGZpZWxkLnR5cGUgPT09ICdNT1RIRVJfSU1BR0UnIHx8IGZpZWxkLnR5cGUgPT09ICdHVUFSRElBTl9JTUFHRScpe1xyXG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkSW1hZ2VVcmwgPSBhZG1pc3Npb25EYXRhWydmaWVsZE1hcCddW2ZpZWxkLnR5cGVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkVmFsdWUgPSBhZG1pc3Npb25EYXRhWydmaWVsZE1hcCddW2ZpZWxkLmZpZWxkTGFiZWwgKyBncm91cF07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKGZpZWxkPy50eXBlID09PSAnR1JBREUnKVxyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlR3JhZGUoZmllbGQuc291cmNlRGF0YVtmaWVsZC5kYXRhU291cmNlVHlwZV0sIGZpZWxkLmZpZWxkVmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgaWYoZmllbGQudHlwZSA9PT0gJ0FDQURFTUlDX1lFQVInKVxyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWNhZGVtaWNZZWFyKGZpZWxkLnNvdXJjZURhdGFbZmllbGQuZGF0YVNvdXJjZVR5cGVdLCBmaWVsZC5maWVsZFZhbHVlKVxyXG5cclxuICAgICAgICAgICAgaWYoZmllbGQuZGF0YVR5cGUgPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1hdENoZWNrQm94VmFsdWUoZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmdldEZlZVN0cnVjdHVyZSgpO1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICB1cGRhdGVHcmFkZShncmFkZUxpc3QgOmFueVtdLCBncmFkZU5hbWU6IGFueSkge1xyXG4gICAgZm9yKGxldCBncmFkZSBvZiBncmFkZUxpc3QpIHtcclxuICAgICAgaWYoZ3JhZGUubmFtZSA9PT0gZ3JhZGVOYW1lKXtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JhZGVJZCA9IGdyYWRlLmlkO1xyXG4gICAgICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZSh7fSxncmFkZSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlQWNhZGVtaWNZZWFyKGFjWWVhckxpc3Q6YW55W10sYWN5TmFtZTogYW55KXtcclxuICAgIGZvciAobGV0IGF5IG9mIGFjWWVhckxpc3QpIHtcclxuICAgICAgaWYoYXkubmFtZSA9PT0gYWN5TmFtZSl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhciA9IGF5XHJcbiAgICAgICAgdGhpcy5pbnB1dEZpZWxkQ2hhbmdlKHt9LGF5KVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfSBcclxuICB9XHJcblxyXG4gIGZvcm1hdENoZWNrQm94VmFsdWUoZmllbGQ6IGFueSkge1xyXG4gICAgaWYoZmllbGQudmFsdWUpIHtcclxuICAgICAgZm9yKGxldCBmaWVsZFZhbHVlIG9mIGZpZWxkLnZhbHVlKSB7XHJcbiAgICAgICAgaWYoZmllbGQuZmllbGRWYWx1ZT8uaW5jbHVkZXMoZmllbGRWYWx1ZS52YWx1ZSkpIHtcclxuICAgICAgICAgIGZpZWxkVmFsdWUuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZm9yKGxldCBmaWVsZFZhbHVlIG9mIGZpZWxkLnNvdXJjZURhdGE/LltmaWVsZC5kYXRhU291cmNlVHlwZV0gfHwgW10pIHtcclxuICAgICAgICBpZihmaWVsZC5maWVsZFZhbHVlPy5pbmNsdWRlcyhmaWVsZFZhbHVlLm5hbWUpKSB7XHJcbiAgICAgICAgICBmaWVsZFZhbHVlLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGdldEFsbEZpZWxkcygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0U2VsZWN0ZWRMaXN0RmllbGRzKHRoaXMuYnVzaW5lc3NJZCwgdGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ3JlZ2lzdHJhdGlvbkZvcm0nID8gJ1JFR0lTVFJBVElPTicgOiAnQURNSVNTSU9OJywgIHRoaXMuZGF0YT8uc2VjdGlvblR5cGUgPT09ICdyZWdpc3RyYXRpb25Gb3JtJyA/ICdSRUdJU1RSQVRJT04nIDogJ0FETUlTU0lPTicpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIHJlcy5kYXRhLmRhdGEuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICBpZiAoKGVsZW1lbnQuZmllbGRMYWJlbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygncGFzc3BvcnQnKSAmJiBlbGVtZW50LmRhdGFUeXBlICE9ICdSQURJT0JVVFRPTicpIHtcclxuICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXMuZGF0YS5kYXRhLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgICAgaWYoZWxlbWVudC5kYXRhU291cmNlVHlwZSA9PT0gJ0NPVU5UUlknKXtcclxuICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBjb25zdCBuZXh0WWVhciA9IGN1cnJlbnRZZWFyICsgMTtcclxuXHJcbiAgICAgIHJlcy5kYXRhLmRhdGEuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5kYXRhVHlwZSAhPT0gJ0RST1BET1dOJykgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC52YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBlbGVtZW50LmZpZWxkVmFsdWUgPSBlbGVtZW50LnZhbHVlWzBdLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzb3VyY2VMaXN0ID0gZWxlbWVudC5zb3VyY2VEYXRhW2VsZW1lbnQuZGF0YVNvdXJjZVR5cGVdO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZmllbGRMYWJlbCA9PT0gJ0FjYWRlbWljIFllYXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gc291cmNlTGlzdC5maW5kKChlOmFueSkgPT4gZS5uYW1lID09PSBgJHtjdXJyZW50WWVhcn0tJHtuZXh0WWVhcn1gKTtcclxuICAgICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC5maWVsZFZhbHVlID0gbWF0Y2gubmFtZTtcclxuICAgICAgICAgICAgICB0aGlzLmlucHV0RmllbGRDaGFuZ2UobWF0Y2gsIGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LmZpZWxkVmFsdWUgPSBzb3VyY2VMaXN0WzBdLm5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZShzb3VyY2VMaXN0WzBdLCBlbGVtZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmVzLmRhdGEuZGF0YS5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc1NpYmxpbmdzR3JvdXAgPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmllbGRHcm91cCkgJiYgZWxlbWVudC5maWVsZEdyb3VwLnNvbWUoXHJcbiAgICAgICAgICAoZ3JvdXA6YW55KSA9PiBncm91cC5maWVsZEdyb3VwTmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInNpYmxpbmdzIGRldGFpbHNcIilcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoYXNTaWJsaW5nc0dyb3VwKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbENoZWNrID0gZWxlbWVudC5maWVsZExhYmVsPy5pbmNsdWRlcygnMScpO1xyXG4gICAgICAgICAgY29uc3QgdmFsdWVDaGVjayA9ICEhZWxlbWVudC5maWVsZFZhbHVlO1xyXG4gICAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSBsYWJlbENoZWNrIHx8IHZhbHVlQ2hlY2s7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJlcy5kYXRhLmRhdGEuZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICBjb25zdCBoYXNTaWJsaW5nc0dyb3VwID0gQXJyYXkuaXNBcnJheShlbGVtZW50LmZpZWxkR3JvdXApICYmIGVsZW1lbnQuZmllbGRHcm91cC5zb21lKFxyXG4gICAgICAgICAgKGdyb3VwOmFueSkgPT4gZ3JvdXAuZmllbGRHcm91cE5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJwYXN0IHNjaG9vbCBkZXRhaWxzXCIpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaGFzU2libGluZ3NHcm91cCkge1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxDaGVjayA9IGVsZW1lbnQuZmllbGRMYWJlbD8uaW5jbHVkZXMoJzEnKTtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlQ2hlY2sgPSAhIWVsZW1lbnQuZmllbGRWYWx1ZTtcclxuICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gbGFiZWxDaGVjayB8fCB2YWx1ZUNoZWNrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmZpZWxkRGF0YSA9IHRoaXMucmVzdFNlcnZpY2UuZ2V0RmllbGRzVG9EaXNwbGF5KHJlcy5kYXRhLmRhdGEpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkS2V5ID0gdGhpcy5PYmplY3Qua2V5cyh0aGlzLmZpZWxkRGF0YSlbMF07XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0QUxMRG9jdW1lbnRMaXN0KCkge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgXCJidXNpbmVzc0lkXCI6IHRoaXMuYnVzaW5lc3NJZCxcclxuICAgICAgXCJzb3J0QnlcIjogXCJcIixcclxuICAgICAgXCJzb3J0T3JkZXJcIjogXCJcIixcclxuICAgICAgXCJzdGF0dXNcIjogdHJ1ZSxcclxuICAgICAgXCJpc0RlbGV0ZWRcIjogZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFsbERvY3VtZW50KHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5kb2N1bWVudExpc3QgPSByZXMuZGF0YS5kYXRhO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZvcm1GaWVsZENoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBmb3JtRmllbGRDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5mb3JtRmllbGRDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl9ldmVudFNlcnZpY2UuZm9ybUZpZWxkQ2hhbmdlZC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsRmllbGRzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBhc3luYyBzdWJtaXRGb3JtKCkge1xyXG4gICAgdGhpcy5wYXlsb2FkLmZpZWxkSXRlbXMgPSB0aGlzLmNvbnZlcnRUb0xpc3RPZkZpZWxkcygpO1xyXG4gICAgaWYodGhpcy5wYXlsb2FkLmZpZWxkSXRlbXMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZih0aGlzLmZpbGVEYXRhKSB7XHJcbiAgICAgIGxldCBpbWFnZURhdGE6IGFueSA9IGF3YWl0IHRoaXMuaW1hZ2VVcGxvYWRTZXJ2aWNlLnVwbG9hZEZpbGVJbkF6dXJlKHRoaXMuZmlsZURhdGEpO1xyXG4gICAgICB0aGlzLnBheWxvYWQuaW1nVXJsID0gaW1hZ2VEYXRhLnVybCB8fCBpbWFnZURhdGEuX3Jlc3BvbnNlPy5yZXF1ZXN0Py51cmxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgPyB0aGlzLmNyZWF0ZVJlZ2lzdHJhdGlvbigpIDogdGhpcy5jcmVhdGVBZG1pc3Npb24oKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdHJhdGlvblN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuICBhc3luYyBjcmVhdGVSZWdpc3RyYXRpb24oKSB7XHJcbiAgICAvLyB0aGlzLnBheWxvYWRbJ3JldHVyblVybCddID0gYGh0dHBzOi8vY21pcy50ZWpzb2Z0LmNvbS92ZXJpZnktcGF5bWVudC8/dXJsPXRydWUmdHlwZT1SRUdJU1RSQVRJT04mYklkPSR7dGhpcy5idXNpbmVzc0lkfWAgLy9wcm9kdWN0aW9uXHJcbiAgICB0aGlzLnBheWxvYWRbJ3JldHVyblVybCddID0gYGh0dHBzOi8vc3RhZ2UtcG9ydGFsLmNtaXMuYWMuaW4vdmVyaWZ5LXBheW1lbnQvP3VybD10cnVlJnR5cGU9UkVHSVNUUkFUSU9OJmJJZD0ke3RoaXMuYnVzaW5lc3NJZH1gIC8vZGV2XHJcbiAgICAvLyB0aGlzLnBheWxvYWRbJ3JldHVyblVybCddID0gYGh0dHBzOi8vc3RhZ2UuY21pcy50ZWpzb2Z0LmNvbS92ZXJpZnktcGF5bWVudC8/dXJsPXRydWUmdHlwZT1SRUdJU1RSQVRJT04mYklkPSR7dGhpcy5idXNpbmVzc0lkfWAgLy9zdGFnZVxyXG4gICAgZm9yKGxldCBpbmZpZWxkRG9jdW1lbnQgb2YgdGhpcy5wYXlsb2FkLmZpZWxkSXRlbXMpe1xyXG4gICAgICBpZihpbmZpZWxkRG9jdW1lbnQuZmllbGRJbWFnZVVybCl7XHJcbiAgICAgICAgbGV0IGltYWdlRGF0YSA6IGFueSA9IGF3YWl0IHRoaXMuaW1hZ2VVcGxvYWRTZXJ2aWNlLnVwbG9hZEZpbGVJbkF6dXJlKGluZmllbGREb2N1bWVudC5zZWxlY3RlZEltYWdlRGF0YSk7XHJcbiAgICAgICAgaW5maWVsZERvY3VtZW50LmZpZWxkSW1hZ2VVcmwgPSBpbWFnZURhdGEudXJsIHx8IGltYWdlRGF0YS5fcmVzcG9uc2U/LnJlcXVlc3Q/LnVybDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZWdpc3RyYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnJlc3RTZXJ2aWNlLmNyZWF0ZVJlZ2lzdHJhdGlvbkZvclBheW1lbnQodGhpcy5wYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuc25hY2tCYXIub3BlbignUmVnaXN0cmF0aW9uIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5JywgJ2Nsb3NlJywge2R1cmF0aW9uOiAyMDAwfSk7XHJcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5jYXNoRnJlZUV2ZW50LmVtaXQoe3Jlc3BvbnNlOiByZXMsIHBheW1lbnRUeXBlOidSRUdJU1RSQVRJT04nfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlQWRtaXNzaW9uKCkge1xyXG4gICAgLy8gaWYodGhpcy5wYXlsb2FkLnBheW1lbnRQbGFuVHlwZSA9PT0gJ1RFUk0nICYmICh0aGlzLnBheWxvYWQ/LnN0dWRlbnRGZWVTdHJ1Y3R1cmU/LnRlcm1QYXltZW50TGlzdD8ubGVuZ3RoIHx8IDApID09IDApe1xyXG4gICAgLy8gICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1BsZWFzZSBzZWxlY3QgdGVybScpO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gdGhpcy5wYXlsb2FkLnN0dWRlbnRGZWVTdHJ1Y3R1cmVbJ3BheW1lbnRQbGFuVHlwZSddID0gdGhpcy5wYXlsb2FkLnBheW1lbnRQbGFuVHlwZTtcclxuICAgIC8vIHRoaXMucGF5bG9hZFsncmV0dXJuVXJsJ10gPSBgaHR0cHM6Ly9jbWlzLnRlanNvZnQuY29tL3ZlcmlmeS1wYXltZW50Lz91cmw9dHJ1ZSZ0eXBlPUFETUlTU0lPTiZiSWQ9JHt0aGlzLmJ1c2luZXNzSWR9YDsgLy9wcm9kdWN0aW9uXHJcbiAgICB0aGlzLnBheWxvYWRbJ3JldHVyblVybCddID0gYGh0dHBzOi8vc3RhZ2UtcG9ydGFsLmNtaXMuYWMuaW4vdmVyaWZ5LXBheW1lbnQvP3VybD10cnVlJnR5cGU9QURNSVNTSU9OJmJJZD0ke3RoaXMuYnVzaW5lc3NJZH1gOyAvL2RldlxyXG4gICAgLy8gdGhpcy5wYXlsb2FkWydyZXR1cm5VcmwnXSA9IGBodHRwczovL3N0YWdlLmNtaXMudGVqc29mdC5jb20vdmVyaWZ5LXBheW1lbnQvP3VybD10cnVlJnR5cGU9QURNSVNTSU9OJmJJZD0ke3RoaXMuYnVzaW5lc3NJZH1gOyAvL3N0YWdlXHJcblxyXG4gICAgaWYodGhpcy5iYWNrdXBEb2NGaWxlKSB7XHJcbiAgICAgIGxldCBpbWFnZURhdGE6IGFueSA9IGF3YWl0IHRoaXMuaW1hZ2VVcGxvYWRTZXJ2aWNlLnVwbG9hZEZpbGVJbkF6dXJlKHRoaXMuYmFja3VwRG9jRmlsZSk7XHJcbiAgICAgIC8vIHRoaXMucGF5bG9hZC5iYWNrdXBEb2MgPSBpbWFnZURhdGEudXJsXHJcbiAgICAgIHRoaXMucGF5bG9hZC5iYWNrdXBEb2MgPSBpbWFnZURhdGEudXJsIHx8IGltYWdlRGF0YS5fcmVzcG9uc2U/LnJlcXVlc3Q/LnVybDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IGRvY3VtZW50IG9mIHRoaXMuZG9jdW1lbnRMaXN0KSB7XHJcbiAgICAgIGlmKGRvY3VtZW50LmZpbGUpIHtcclxuICAgICAgICBsZXQgaW1hZ2VEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmltYWdlVXBsb2FkU2VydmljZS51cGxvYWRGaWxlSW5BenVyZShkb2N1bWVudC5maWxlKTtcclxuXHJcbiAgICAgICAgdGhpcy5wYXlsb2FkWydkb2N1bWVudHMnXS5wdXNoKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBkb2N1bWVudC5kaXNwbGF5VGV4dCxcclxuICAgICAgICAgICAgdXJsOiBpbWFnZURhdGEudXJsIHx8IGltYWdlRGF0YS5fcmVzcG9uc2U/LnJlcXVlc3Q/LnVybCxcclxuICAgICAgICAgICAgZG9jVHlwZTogZG9jdW1lbnQubmFtZSxcclxuICAgICAgICAgICAgYXR0YWNobWVudFR5cGU6IGRvY3VtZW50LnR5cGVcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IGluZmllbGREb2N1bWVudCBvZiB0aGlzLnBheWxvYWQuZmllbGRJdGVtcyl7XHJcbiAgICAgIGlmKGluZmllbGREb2N1bWVudC5maWVsZEltYWdlVXJsKXtcclxuICAgICAgICBpZighaW5maWVsZERvY3VtZW50LmZpZWxkSW1hZ2VVcmwuaW5jbHVkZXMoJ2h0dHBzOicpKXtcclxuICAgICAgICAgIGxldCBpbWFnZURhdGEgOiBhbnkgPSBhd2FpdCB0aGlzLmltYWdlVXBsb2FkU2VydmljZS51cGxvYWRGaWxlSW5BenVyZShpbmZpZWxkRG9jdW1lbnQuc2VsZWN0ZWRJbWFnZURhdGEpO1xyXG4gICAgICAgICAgaW5maWVsZERvY3VtZW50LmZpZWxkSW1hZ2VVcmwgPSBpbWFnZURhdGEudXJsIHx8IGltYWdlRGF0YS5fcmVzcG9uc2U/LnJlcXVlc3Q/LnVybDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucGF5bG9hZClcclxuICAgIHRoaXMucGF5bG9hZC5hZG1pc3Npb25QYXltZW50RGV0YWlsLmFtb3VudCA9IHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlVjIudG90YWxGZWU7XHJcbiAgICB0aGlzLnJlZ2lzdHJhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucmVzdFNlcnZpY2UuY3JlYXRlQWRtaXNzaW9uKHRoaXMucGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAvLyB0aGlzLnNuYWNrQmFyLm9wZW4oJ0FkbWlzc2lvbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pO1xyXG4gICAgICBsZXQgYWRtaXNzaW9uRGF0YSA9IHJlcy5kYXRhXHJcbiAgICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICAgIFwibWFpbFBheW1lbnRMaW5rXCI6d2luZG93LmxvY2F0aW9uLmhyZWYsXHJcbiAgICAgICAgXCJmZWVTdW1tYXJ5SWRcIjogYWRtaXNzaW9uRGF0YS5pZCxcclxuICAgICAgICBcIm5hbWVcIjogdGhpcy5mZXRjaFN0dWRlbnREZXRhaWxzKGFkbWlzc2lvbkRhdGEuZmllbGRJdGVtcywnU1RVREVOVF9OQU1FJyksXHJcbiAgICAgICAgXCJhbW91bnRcIjogYWRtaXNzaW9uRGF0YS5zdHVkZW50RmVlU3RydWN0dXJlVjIudG90YWxGZWUsXHJcbiAgICAgICAgXCJtb2JpbGVcIjogdGhpcy5mZXRjaFN0dWRlbnREZXRhaWxzKGFkbWlzc2lvbkRhdGEuZmllbGRJdGVtcywnQ09OVEFDVF9NT0JJTEUnKSxcclxuICAgICAgICBcImVtYWlsXCI6IHRoaXMuZmV0Y2hTdHVkZW50RGV0YWlscyhhZG1pc3Npb25EYXRhLmZpZWxkSXRlbXMsJ0NPTlRBQ1RfRU1BSUwnKSxcclxuICAgICAgICBcImZlZUNvbmZpZ1wiOiBhZG1pc3Npb25EYXRhLnN0dWRlbnRGZWVTdHJ1Y3R1cmVWMi5mZWVDb25maWcsXHJcbiAgICAgICAgXCJwcmVBZG1pc3Npb25JZFwiOmFkbWlzc2lvbkRhdGEuaWQsXHJcbiAgICAgICAgXCJzZWxlY3RlZFN0b3BEZXRhaWxcIjphZG1pc3Npb25EYXRhLnNlbGVjdGVkU3RvcERldGFpbCxcclxuICAgICAgICBcInN1YnNjcmlwdGlvblBsYW5zXCI6YWRtaXNzaW9uRGF0YS5zdWJzY3JpcHRpb25QbGFuc1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmNyZWF0ZVBheW1lbnRMaW5rKHBheWxvYWQpLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOmFueSkgPT4ge1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3NlbGVjdGVkU3RvcCcpO1xyXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3NlbGVjdGVkVmVoaWNsZScpO1xyXG4gICAgICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmNhc2hGcmVlRXZlbnQuZW1pdCh7cmVzcG9uc2U6IHJlcywgcGF5bWVudFR5cGU6J0FETUlTU0lPTid9KTtcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmZXRjaFN0dWRlbnREZXRhaWxzKGFycmF5OmFueSxnZXRUeXBlOiBhbnkpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheS5maW5kKChlbDphbnkpID0+IGVsLnR5cGUgPT09IGdldFR5cGUpO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGVsZW1lbnQuZmllbGRWYWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0xpc3RPZkZpZWxkcygpIHtcclxuICAgIGxldCBmaWVsZExpc3Q6IGFueVtdID0gW107XHJcblxyXG4gICAgZm9yKGxldCBzdGVwIG9mIHRoaXMuT2JqZWN0LmtleXModGhpcy5maWVsZERhdGEpKSB7XHJcbiAgICAgIGZvcihsZXQgZ3JvdXAgb2YgT2JqZWN0LmtleXModGhpcy5maWVsZERhdGFbc3RlcF0pKSB7XHJcblxyXG4gICAgICAgIGlmKGdyb3VwID09ICdCYWNrdXAgQ29udGFjdCcgJiYgdGhpcy5zdHVkZW50TGl2ZVdpdGggIT0gJ3NpbmdsZSBwYXJlbnQnKVxyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGZvcihsZXQgZmllbGQgb2YgdGhpcy5maWVsZERhdGFbc3RlcF1bZ3JvdXBdKSB7XHJcbiAgICAgICAgICBpZihmaWVsZC5yZXF1aXJlZCAmJiAhZmllbGQuZmllbGRWYWx1ZSAmJiBmaWVsZC5kYXRhVHlwZSAhPSAnQ0hFQ0tCT1gnICYmICFmaWVsZC5maWVsZEltYWdlVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihgUGxlYXNlIGVudGVyICR7ZmllbGQuZmllbGRMYWJlbH1gLCAnY2xvc2UnLCB7ZHVyYXRpb246IDIwMDB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjaGVja0JveFZhbHVlOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgaWYoZmllbGQuZGF0YVR5cGUgPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgY2hlY2tCb3hWYWx1ZSA9IHRoaXMuZ2V0Q2hlY2tCb3hWYWx1ZShmaWVsZCk7XHJcblxyXG4gICAgICAgICAgICBpZihjaGVja0JveFZhbHVlLmxlbmd0aCAgPT0gMCAmJiBmaWVsZC5yZXF1aXJlZCl7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGBQbGVhc2UgZW50ZXIgJHtmaWVsZC5maWVsZExhYmVsfWAsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZpZWxkTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGRJZDogZmllbGQuZmllbGRJZCxcclxuICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZC5maWVsZExhYmVsLFxyXG4gICAgICAgICAgICBmaWVsZFZhbHVlOiBmaWVsZC5kYXRhVHlwZSAhPT0gJ0NIRUNLQk9YJyA/IGZpZWxkLmZpZWxkVmFsdWUgOiBjaGVja0JveFZhbHVlLFxyXG4gICAgICAgICAgICBmaWVsZEdyb3VwSWQ6IGZpZWxkLmZpZWxkR3JvdXBJZCxcclxuICAgICAgICAgICAgZmllbGRHcm91cE5hbWU6IGdyb3VwLFxyXG4gICAgICAgICAgICBmaWVsZFN0ZXBJZDogZmllbGQuZmllbGRTdGVwSWQsXHJcbiAgICAgICAgICAgIGZpZWxkU3RlcE5hbWU6IHN0ZXAsXHJcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXHJcbiAgICAgICAgICAgIGZpZWxkSW1hZ2VVcmwgOiBmaWVsZC5maWVsZEltYWdlVXJsLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEltYWdlRGF0YSA6IGZpZWxkLnNlbGVjdGVkSW1hZ2VEYXRhLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogZmllbGQ/LmRhdGFUeXBlXHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmllbGRMaXN0O1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tCb3hWYWx1ZShmaWVsZDogYW55KSB7XHJcbiAgICBsZXQgcmVzcG9uc2U6IGFueVtdID0gW107XHJcblxyXG4gICAgaWYoZmllbGQudmFsdWUpIHtcclxuICAgICAgZm9yKGxldCBmaWVsZFZhbHVlIG9mIGZpZWxkLnZhbHVlKSB7XHJcbiAgICAgICAgaWYoZmllbGRWYWx1ZS5jaGVja2VkKSB7XHJcbiAgICAgICAgICByZXNwb25zZS5wdXNoKGZpZWxkVmFsdWUudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yKGxldCBmaWVsZFZhbHVlIG9mIGZpZWxkLnNvdXJjZURhdGE/LltmaWVsZC5kYXRhU291cmNlVHlwZV0gfHwgW10pIHtcclxuICAgICAgICBpZihmaWVsZFZhbHVlLmNoZWNrZWQpIHtcclxuICAgICAgICAgIHJlc3BvbnNlLnB1c2goZmllbGRWYWx1ZS5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBmaWxlRGF0YT86IEZpbGU7XHJcbiAgdXBkYXRlQWRtaXNzaW9uSW1hZ2UoZXY6IGFueSkge1xyXG4gICAgbGV0IGZpbGVJbnB1dCA6IGFueSA9IGV2LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgdGhpcy5maWxlRGF0YSA9IGZpbGVJbnB1dC5maWxlc1swXTtcclxuXHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgIHJlYWRlci5vbmxvYWQgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnBheWxvYWQuaW1nVXJsID0gcmVzcG9uc2UudGFyZ2V0LnJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGVEYXRhID8gcmVhZGVyLnJlYWRBc0RhdGFVUkwodGhpcy5maWxlRGF0YSkgOiBudWxsO1xyXG5cclxuICAgIGZpbGVJbnB1dC52YWx1ZSA9ICcnXHJcbiAgfVxyXG5cclxuICBkZWxldGVJbWcoKSB7XHJcbiAgICB0aGlzLnBheWxvYWQuaW1nVXJsID0gJyc7XHJcbiAgICB0aGlzLmZpbGVEYXRhID0gdW5kZWZpbmVkO1xyXG4gIH0gIHJlZGlyZWN0VG9QYXltZW50KCkge1xyXG4gICAgaWYoISh0aGlzLnNlbGVjdGVkQWNhZGVtaWNZZWFyICYmICB0aGlzLnNlbGVjdGVkR3JhZGVJZCkpe1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1NlbGVjdGVkIEdyYWRlIGFuZCBBY2FkZW1pYyBZZWFyIGZpcnN0JywnY2xvc2UnLCB7ZHVyYXRpb246IDIwMDB9KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gJ1BheW1lbnQnXHJcbiAgfVxyXG5cclxuICBjb250aW51ZUFkbWlzc2lvbigpIHtcclxuICAgIGxldCBzdGVwcyA9IE9iamVjdC5rZXlzKHRoaXMuZmllbGREYXRhKTtcclxuICAgIGxldCBpbmRleCA9IHN0ZXBzLmluZGV4T2YodGhpcy5zZWxlY3RlZEtleSk7XHJcblxyXG4gICAgaWYodGhpcy5kYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nICYmIHRoaXMuc2VsZWN0ZWRLZXkgPT09ICdEb2N1bWVudCcgJiYgISh0aGlzLnNlbGVjdGVkQWNhZGVtaWNZZWFyICYmICB0aGlzLnNlbGVjdGVkR3JhZGVJZCkpIHtcclxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdTZWxlY3RlZCBHcmFkZSBhbmQgQWNhZGVtaWMgWWVhciBmaXJzdCcsICdjbG9zZScsIHtkdXJhdGlvbjogMjAwMH0pXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybScpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSBpbmRleCA9PT0gc3RlcHMubGVuZ3RoIC0gMSA/ICdEb2N1bWVudCcgOiB0aGlzLnNlbGVjdGVkS2V5ID09PSAnRG9jdW1lbnQnID8gJ1BheW1lbnQnIDogc3RlcHNbaW5kZXggKyAxXTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IHN0ZXBzW2luZGV4ICsgMV1cclxuICB9XHJcblxyXG4gIHN1YnNjcmlwdGlvbnNEYXRhOiBhbnlbXSA9IFtdXHJcbiAgdGVybVBheW1lbnRMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICBnZXRGZWVTdHJ1Y3R1cmUoKSB7XHJcbiAgICBpZighdGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhciB8fCAhdGhpcy5zZWxlY3RlZEdyYWRlSWQpXHJcbiAgICAgIHJldHVybjtcclxuICAgIFxyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIC8vIFwiYnVzaW5lc3NJZFwiOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgIC8vIFwic3RhcnRZZWFyXCI6IE51bWJlcih5ZWFyWzBdKSxcclxuICAgICAgLy8gXCJlbmRZZWFyXCI6IE51bWJlcih5ZWFyWzFdKSxcclxuICAgICAgLy8gXCJwYWdlTm9cIjogMCxcclxuICAgICAgLy8gXCJzaXplXCI6IDEsXHJcbiAgICAgIC8vIFwiZ3JhZGVJZHNcIjogW3RoaXMuc2VsZWN0ZWRHcmFkZUlkXSxcclxuICAgICAgLy8gXCJzZWFyY2hUZXh0XCI6IFwiXCJcclxuICAgICAgYWNhZGVtaWNZZWFySWQgOiBbdGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhci5pZF0sXHJcbiAgICAgIGJ1c2luZXNzSWQgOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgIGdyYWRlSWRzIDogW3RoaXMuc2VsZWN0ZWRHcmFkZUlkXSxcclxuICAgICAgcGFnZU5vIDogMCxcclxuICAgICAgcGFnZVNpemUgOiAxMDAwLFxyXG4gICAgICBzZWFyY2hUZXh0IDogXCJcIlxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdFNlcnZpY2UubmV3RmVlU3RydWN0dXJlR2V0TGlzdChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlVjIgPSByZXMuZGF0YS5kYXRhWzBdO1xyXG4gICAgICB0aGlzLmdldEFsbFN1YmNyaXB0aW9uKCk7XHJcbiAgICAgIC8vIHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlID0gcmVzLmRhdGEuZGF0YVswXTtcclxuICAgICAgLy8gdGhpcy5zdWJzY3JpcHRpb25zRGF0YSA9ICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zKSk7XHJcbiAgICAgIC8vIHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlLnN1YnNjcmlwdGlvblBsYW5zID0gW107XHJcbiAgICAgIC8vIHRoaXMudGVybVBheW1lbnRMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnBheWxvYWQuc3R1ZGVudEZlZVN0cnVjdHVyZT8udGVybVBheW1lbnRMaXN0IHx8ICcnKSk7XHJcbiAgICAgIC8vIHRoaXMucGF5bG9hZC5zdHVkZW50RmVlU3RydWN0dXJlLnRlcm1QYXltZW50TGlzdCA9IFtdO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldEFsbFN1YmNyaXB0aW9uKCl7XHJcbiAgICBjb25zdCBzZXJ2ZXJDYWxsID0gZm9ya0pvaW4oe1xyXG4gICAgICBhbGxTdWJzY3JpcHRpb25zIDogdGhpcy5yZXN0U2VydmljZS5nZXRBY3RpdmVTdWJzY3JpcHRpb25Gb3JGZWVTdHJ1Y3R1cmUodGhpcy5idXNpbmVzc0lkLHRoaXMuc2VsZWN0ZWRHcmFkZUlkKVxyXG4gICAgfSlcclxuICAgIHNlcnZlckNhbGwuc3Vic2NyaWJlKChyZXM6YW55KT0+e1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnNEYXRhID0gcmVzLmFsbFN1YnNjcmlwdGlvbnMuZGF0YS5kYXRhXHJcbiAgICAgIHJlcy5hbGxTdWJzY3JpcHRpb25zLmRhdGEuZGF0YS5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZWxlbWVudC5uZXdQcmljaW5nTGlzdCkge1xyXG4gICAgICAgICAgZWxlbWVudC5uZXdQcmljaW5nTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5wcmljaW5nKS5mb3JFYWNoKChwcmljZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBlbGVtZW50Lm5ld1ByaWNpbmdMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiBwcmljZSxcclxuICAgICAgICAgICAgYW1vdW50OiBlbGVtZW50LnByaWNpbmdbcHJpY2VdLFxyXG4gICAgICAgICAgICBzZWxlY3RlU3RhdHVzOiBmYWxzZSxcclxuICAgICAgICAgICAgcGFpZDpmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGlucHV0RmllbGRDaGFuZ2UoaXRlbTogYW55LCBmaWVsZDogYW55KSB7XHJcbiAgICBpZihmaWVsZC5maWVsZExhYmVsID09PSAnQWNhZGVtaWMgWWVhcicpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFjYWRlbWljWWVhciA9IGl0ZW07XHJcbiAgICAgIHRoaXMuZ2V0RmVlU3RydWN0dXJlKCk7XHJcbiAgICB9XHJcbiAgICBpZihmaWVsZC5maWVsZExhYmVsID09PSAnR3JhZGUnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcmFkZUlkID0gaXRlbS5pZDtcclxuICAgICAgdGhpcy5nZXRGZWVTdHJ1Y3R1cmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1hc3RlckRyb3Bkb3duVmFsdWVDaGFuZ2UoaXRlbTogYW55LCBmaWVsZDogYW55KSB7XHJcbiAgICBpZihmaWVsZC5maWVsZExhYmVsID09PSAnU3R1ZGVudCBsaXZlIHdpdGgnKSB7XHJcbiAgICAgIHRoaXMuc3R1ZGVudExpdmVXaXRoID0gaXRlbS52YWx1ZVxyXG4gICAgfVxyXG4gICAgaWYoZmllbGQudHlwZSA9PT0gJ05BVElPTkFMSVRZJyl7XHJcbiAgICAgIGlmKGZpZWxkLmZpZWxkVmFsdWUgPT09ICdOUkknKXtcclxuICAgICAgICB0aGlzLmZpZWxkRGF0YVsnU3R1ZGVudCBEZXRhaWxzJ11bJ0lkZW50aXR5IGluZm9ybWF0aW9uJ10uZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICAgIGlmKGVsZW1lbnQuZGF0YVNvdXJjZVR5cGUgPT09ICdDT1VOVFJZJyl7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZihmaWVsZC5maWVsZFZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luZGlhbicpKXtcclxuICAgICAgICB0aGlzLmZpZWxkRGF0YVsnU3R1ZGVudCBEZXRhaWxzJ11bJ0lkZW50aXR5IGluZm9ybWF0aW9uJ10uZm9yRWFjaCgoZWxlbWVudDphbnkpID0+IHtcclxuICAgICAgICAgIGlmKGVsZW1lbnQuZGF0YVNvdXJjZVR5cGUgPT09ICdDT1VOVFJZJyl7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuaXNEaXNwbGF5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwbG9hZEJhY2tVcERvY3VtZW50KGV2OiBhbnkpIHtcclxuICAgIHRoaXMuYmFja3VwRG9jRmlsZSA9IGV2LnNyY0VsZW1lbnQuZmlsZXNbMF07XHJcbiAgfVxyXG5cclxuXHJcbiAgYXJyYW5nZVN1YnNjcmlwdGlvbkZvckFkbWlzc2lvbihzdWJzY3JpcHRpb25MaXN0OiBhbnlbXSkge1xyXG4gICAgbGV0IHJlc3BvbnNlOiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IobGV0IHN1YnNjcmlwdGlvbiBvZiBzdWJzY3JpcHRpb25MaXN0KSB7XHJcbiAgICAgIGlmKCFyZXNwb25zZVtzdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uVHlwZV0pIHtcclxuICAgICAgICByZXNwb25zZVtzdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uVHlwZV0gPSBbXTtcclxuICAgICAgfVxyXG4gICAgICByZXNwb25zZVtzdWJzY3JpcHRpb24uc3Vic2NyaXB0aW9uVHlwZV0ucHVzaChzdWJzY3JpcHRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIGFycmFuZ2VGZWVDb25maWcoZmVlQ29uZmlnTGlzdDogYW55W10pIHtcclxuICAgIGxldCByZXNwb25zZTogYW55ID0ge307XHJcblxyXG4gICAgZm9yKGxldCBjb25maWcgb2YgZmVlQ29uZmlnTGlzdCkge1xyXG4gICAgICBpZighcmVzcG9uc2VbY29uZmlnLmZlZVR5cGVdKVxyXG4gICAgICAgIHJlc3BvbnNlW2NvbmZpZy5mZWVUeXBlXSA9IFtdO1xyXG5cclxuICAgICAgcmVzcG9uc2VbY29uZmlnLmZlZVR5cGVdLnB1c2goY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBnZXRNYXhEYXRlKGl0ZW06YW55KSB7XHJcbiAgICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IChpdGVtLmZpZWxkTGFiZWwgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgZmllbGRHcm91cE5hbWUgPSAoaXRlbS5maWVsZEdyb3VwIHx8IFtdKS5mbGF0TWFwKChnOmFueSkgPT4gW1xyXG4gICAgICAoZy5maWVsZEdyb3VwTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSxcclxuICAgICAgKGcuZmllbGRTdGVwTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKVxyXG4gICAgXSk7XHJcbiAgXHJcbiAgICBpZiAoZm9ybWF0dGVkTGFiZWwuaW5jbHVkZXMoJ2RvYicpKSB7XHJcbiAgICAgIGNvbnN0IHRlbXBEYXRlID0gbmV3IERhdGUoKTtcclxuICBcclxuICAgICAgaWYgKGZpZWxkR3JvdXBOYW1lLnNvbWUoKG5hbWU6YW55KSA9PiBuYW1lLmluY2x1ZGVzKCdzdHVkZW50JykpKSB7XHJcbiAgICAgICAgdGVtcERhdGUuc2V0RnVsbFllYXIodGVtcERhdGUuZ2V0RnVsbFllYXIoKSAtIDMpO1xyXG4gICAgICAgIHJldHVybiB0ZW1wRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKGZpZWxkR3JvdXBOYW1lLnNvbWUoKG5hbWU6YW55KSA9PiBuYW1lLmluY2x1ZGVzKCdtb3RoZXInKSkpIHtcclxuICAgICAgICB0ZW1wRGF0ZS5zZXRGdWxsWWVhcih0ZW1wRGF0ZS5nZXRGdWxsWWVhcigpIC0gMTgpO1xyXG4gICAgICAgIHJldHVybiB0ZW1wRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKGZpZWxkR3JvdXBOYW1lLnNvbWUoKG5hbWU6YW55KSA9PiBuYW1lLmluY2x1ZGVzKCdmYXRoZXInKSB8fCBuYW1lLmluY2x1ZGVzKCdndWFyZGlhbicpKSkge1xyXG4gICAgICAgIHRlbXBEYXRlLnNldEZ1bGxZZWFyKHRlbXBEYXRlLmdldEZ1bGxZZWFyKCkgLSAyMSk7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBEYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICByYWRpb0J1dHRvbkNoYW5nZWQoaXRlbTogYW55LCBzZWxlY3RlZEtleTogYW55LCBncm91cDogYW55KSB7XHJcbiAgICBpZiAoaXRlbS50eXBlID09PSAnUEFTU1BPUlRfQVZBSUxBQkxFJykge1xyXG4gICAgICB0aGlzLnNob3dPckhpZGVGaWVsZHMoaXRlbS5maWVsZFZhbHVlLCBzZWxlY3RlZEtleSwgZ3JvdXApXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGl0ZW0udHlwZSA9PT0gJ1BSSU1BUllfQ09OVEFDVCcpe1xyXG4gICAgICB0aGlzLmNvbnZlcnRPdGhlcnNBc1NlY29uZGFyeShpdGVtLmZpZWxkVmFsdWUsc2VsZWN0ZWRLZXksZ3JvdXApOyAgXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0T3RoZXJzQXNTZWNvbmRhcnkodmFsdWU6YW55LHNlbGVjdGVkS2V5OmFueSxncm91cDphbnkpe1xyXG4gICAgY29uc3QgZm9ybWF0dGVkR3JvdXAgPSBncm91cC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykuam9pbignXycpO1xyXG4gICAgY29uc3QgZ3JvdXBzID0gW3tuYW1lOidmYXRoZXJfZGV0YWlscycsYVZhbHVlOidGYXRoZXIgZGV0YWlscyd9LHtuYW1lOidtb3RoZXJfZGV0YWlscycsYVZhbHVlOidNb3RoZXIgZGV0YWlscyd9LHtuYW1lOidndWFyZGlhbl9kZXRhaWxzJyxhVmFsdWU6J0d1YXJkaWFuIERldGFpbHMnfV07XHJcbiAgICBjb25zdCBvdGhlckdyb3VwcyA9IGdyb3Vwcy5maWx0ZXIoZyA9PiBnLm5hbWUgIT09IGZvcm1hdHRlZEdyb3VwKTtcclxuICAgIGNvbnN0IFtzZWNvbmRhcnlHcm91cDEsIHNlY29uZGFyeUdyb3VwMl0gPSBvdGhlckdyb3VwcztcclxuICAgIHRoaXMuZmllbGREYXRhW3NlbGVjdGVkS2V5XVtzZWNvbmRhcnlHcm91cDEuYVZhbHVlXS5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xyXG4gICAgICBpZihlbGVtZW50LnR5cGUgPT09ICdQUklNQVJZX0NPTlRBQ1QnKXtcclxuICAgICAgICBlbGVtZW50LmZpZWxkVmFsdWUgPSAnTm8nXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5maWVsZERhdGFbc2VsZWN0ZWRLZXldW3NlY29uZGFyeUdyb3VwMi5hVmFsdWVdLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgIGlmKGVsZW1lbnQudHlwZSA9PT0gJ1BSSU1BUllfQ09OVEFDVCcpe1xyXG4gICAgICAgIGVsZW1lbnQuZmllbGRWYWx1ZSA9ICdObydcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd1JlbGF0aXZlRmllbGRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd09ySGlkZUZpZWxkcyh2YWx1ZTogYW55LCBzZWxlY3RlZEtleTogYW55LCBncm91cDogYW55KSB7XHJcbiAgICBjb25zdCBzaG91bGRTaG93ID0gdmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygneWVzJyk7XHJcbiAgICB0aGlzLmZpZWxkRGF0YVtzZWxlY3RlZEtleV1bZ3JvdXBdLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmRhdGFUeXBlICE9PSAnUkFESU9CVVRUT04nICYmIGVsZW1lbnQuZmllbGRMYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdwYXNzcG9ydCcpKSB7XHJcbiAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSBzaG91bGRTaG93O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFBhcmVudEd1YXJkaW5hSW1hZ2VzKGV2OmFueSxmaWVsZDphbnkpe1xyXG4gICAgbGV0IHNlbGVjdGVkSW1hZ2VEYXRhIDogRmlsZSA7XHJcbiAgICBzZWxlY3RlZEltYWdlRGF0YSA9IGV2LnNyY0VsZW1lbnQuZmlsZXNbMF07XHJcblxyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICByZWFkZXIub25sb2FkID0gKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgZmllbGQuZmllbGRJbWFnZVVybCA9IHJlc3BvbnNlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWRJbWFnZURhdGEgPyByZWFkZXIucmVhZEFzRGF0YVVSTChzZWxlY3RlZEltYWdlRGF0YSkgOiBudWxsO1xyXG4gICAgZmllbGQuc2VsZWN0ZWRJbWFnZURhdGEgPSBzZWxlY3RlZEltYWdlRGF0YTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkSW1hZ2UoZXY6YW55LGZpZWxkOmFueSkge1xyXG4gICAgbGV0IHNlbGVjdGVkSW1hZ2VEYXRhIDogRmlsZSA7XHJcbiAgICBzZWxlY3RlZEltYWdlRGF0YSA9IGV2LnNyY0VsZW1lbnQuZmlsZXNbMF07XHJcblxyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICByZWFkZXIub25sb2FkID0gKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgZmllbGQuZmllbGRJbWFnZVVybCA9IHJlc3BvbnNlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWRJbWFnZURhdGEgPyByZWFkZXIucmVhZEFzRGF0YVVSTChzZWxlY3RlZEltYWdlRGF0YSkgOiBudWxsO1xyXG4gICAgZmllbGQuc2VsZWN0ZWRJbWFnZURhdGEgPSBzZWxlY3RlZEltYWdlRGF0YTtcclxuICB9XHJcblxyXG4gIGlzSW1hZ2UoZmlsZVVybDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGZpbGVVcmwgPT09ICdzdHJpbmcnICYmIChcclxuICAgICAgZmlsZVVybC5zdGFydHNXaXRoKCdkYXRhOmltYWdlJykgfHwgL1xcLihqcGd8anBlZ3xwbmd8Z2lmKSQvaS50ZXN0KGZpbGVVcmwpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRWYWxpZGF0aW9uKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbGFiZWwgPSAoaXRlbS5maWVsZExhYmVsIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gIFxyXG4gICAgY29uc3QgaXNQaG9uZSA9IGxhYmVsLmluY2x1ZGVzKCdwaG9uZSBudW1iZXInKTtcclxuICAgIGNvbnN0IGlzRW1haWwgPSBsYWJlbC5pbmNsdWRlcygnZW1haWwnKTtcclxuICBcclxuICAgIGNvbnN0IHZhbHVlU3RyID0gaXRlbS5maWVsZFZhbHVlPy50b1N0cmluZygpIHx8ICcnO1xyXG4gIFxyXG4gICAgaWYgKGlzUGhvbmUpIHtcclxuICAgICAgY29uc3QgbW9iaWxlUGF0dGVybiA9IC9eWzYtOV1cXGR7OX0kLztcclxuICAgICAgcmV0dXJuIG1vYmlsZVBhdHRlcm4udGVzdCh2YWx1ZVN0cikgJiYgdmFsdWVTdHIubGVuZ3RoID09PSAxMDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKGlzRW1haWwpIHtcclxuICAgICAgY29uc3QgZW1haWxQYXR0ZXJuID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XHJcbiAgICAgIHJldHVybiBlbWFpbFBhdHRlcm4udGVzdCh2YWx1ZVN0cik7XHJcbiAgICB9XHJcbiAgXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9ICBcclxuXHJcbiAgY2hlY2tEb2IoaXRlbTogYW55KSB7XHJcbiAgICBjb25zdCBmb3JtYXR0ZWRMYWJlbCA9IChpdGVtLmZpZWxkTGFiZWwgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgZmllbGRHcm91cE5hbWUgPSAoaXRlbS5maWVsZEdyb3VwIHx8IFtdKS5mbGF0TWFwKChnOmFueSkgPT4gW1xyXG4gICAgICAoZy5maWVsZEdyb3VwTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSxcclxuICAgICAgKGcuZmllbGRTdGVwTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKVxyXG4gICAgXSk7XHJcbiAgXHJcbiAgICBpZiAoZm9ybWF0dGVkTGFiZWwuaW5jbHVkZXMoJ2RvYicpICYmIGl0ZW0uZmllbGRWYWx1ZSkge1xyXG4gICAgICBjb25zdCBlbnRlcmVkRGF0ZSA9IG5ldyBEYXRlKGl0ZW0uZmllbGRWYWx1ZSk7XHJcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICBcclxuICAgICAgaWYgKGZpZWxkR3JvdXBOYW1lLnNvbWUoKG5hbWU6YW55KSA9PiBuYW1lLmluY2x1ZGVzKCdzdHVkZW50JykpKSB7XHJcbiAgICAgICAgY29uc3QgYWdlID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIGVudGVyZWREYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgY29uc3QgaGFzQmlydGhkYXlQYXNzZWQgPVxyXG4gICAgICAgICAgdG9kYXkuZ2V0TW9udGgoKSA+IGVudGVyZWREYXRlLmdldE1vbnRoKCkgfHxcclxuICAgICAgICAgICh0b2RheS5nZXRNb250aCgpID09PSBlbnRlcmVkRGF0ZS5nZXRNb250aCgpICYmIHRvZGF5LmdldERhdGUoKSA+PSBlbnRlcmVkRGF0ZS5nZXREYXRlKCkpO1xyXG4gIFxyXG4gICAgICAgIGNvbnN0IGV4YWN0QWdlID0gaGFzQmlydGhkYXlQYXNzZWQgPyBhZ2UgOiBhZ2UgLSAxO1xyXG4gIFxyXG4gICAgICAgIGlmIChleGFjdEFnZSA8IDMpIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcclxuICAgICAgICAgICAgJ1N0dWRlbnQgbXVzdCBiZSBhdCBsZWFzdCAzIHllYXJzIG9sZC4nLFxyXG4gICAgICAgICAgICAnT2snLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZHVyYXRpb246MzUwMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBpdGVtLmZpZWxkVmFsdWUgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmaWVsZEdyb3VwTmFtZS5zb21lKChuYW1lOmFueSkgPT4gbmFtZS5pbmNsdWRlcygnbW90aGVyJykpKSB7XHJcbiAgICAgICAgY29uc3QgYWdlID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIGVudGVyZWREYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgY29uc3QgaGFzQmlydGhkYXlQYXNzZWQgPVxyXG4gICAgICAgICAgdG9kYXkuZ2V0TW9udGgoKSA+IGVudGVyZWREYXRlLmdldE1vbnRoKCkgfHxcclxuICAgICAgICAgICh0b2RheS5nZXRNb250aCgpID09PSBlbnRlcmVkRGF0ZS5nZXRNb250aCgpICYmIHRvZGF5LmdldERhdGUoKSA+PSBlbnRlcmVkRGF0ZS5nZXREYXRlKCkpO1xyXG4gIFxyXG4gICAgICAgIGNvbnN0IGV4YWN0QWdlID0gaGFzQmlydGhkYXlQYXNzZWQgPyBhZ2UgOiBhZ2UgLSAxO1xyXG4gIFxyXG4gICAgICAgIGlmIChleGFjdEFnZSA8IDE4KSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXHJcbiAgICAgICAgICAgICdNb3RoZXIgbXVzdCBiZSBhdCBsZWFzdCAxOCB5ZWFycyBvbGQuJyxcclxuICAgICAgICAgICAgJ09rJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOjM1MDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaXRlbS5maWVsZFZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZmllbGRHcm91cE5hbWUuc29tZSgobmFtZTphbnkpID0+IG5hbWUuaW5jbHVkZXMoJ2ZhdGhlcicpIHx8IG5hbWUuaW5jbHVkZXMoJ2d1YXJkaWFuJykpKSB7XHJcbiAgICAgICAgY29uc3QgYWdlID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIGVudGVyZWREYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgY29uc3QgaGFzQmlydGhkYXlQYXNzZWQgPVxyXG4gICAgICAgICAgdG9kYXkuZ2V0TW9udGgoKSA+IGVudGVyZWREYXRlLmdldE1vbnRoKCkgfHxcclxuICAgICAgICAgICh0b2RheS5nZXRNb250aCgpID09PSBlbnRlcmVkRGF0ZS5nZXRNb250aCgpICYmIHRvZGF5LmdldERhdGUoKSA+PSBlbnRlcmVkRGF0ZS5nZXREYXRlKCkpO1xyXG4gIFxyXG4gICAgICAgIGNvbnN0IGV4YWN0QWdlID0gaGFzQmlydGhkYXlQYXNzZWQgPyBhZ2UgOiBhZ2UgLSAxO1xyXG4gIFxyXG4gICAgICAgIGlmIChleGFjdEFnZSA8IDIxKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXHJcbiAgICAgICAgICAgICdGYXRoZXIgbXVzdCBiZSBhdCBsZWFzdCAyMSB5ZWFycyBvbGQuJyxcclxuICAgICAgICAgICAgJ09rJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOjM1MDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaXRlbS5maWVsZFZhbHVlID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9ICBcclxuICB9XHJcblxyXG4gIG5leHRTaWJsaW5nTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBzaG93QWRkU2libGluZ3NCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzaWJsaW5ncyA9IHRoaXMuZmllbGREYXRhWydGYW1pbHkgRGV0YWlscyddWydTaWJsaW5ncyBEZXRhaWxzJ107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gNTsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5ncy5maW5kKChlbDogYW55KSA9PlxyXG4gICAgICAgIGVsLmZpZWxkTGFiZWw/LmluY2x1ZGVzKGkudG9TdHJpbmcoKSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFzaWJsaW5nIHx8ICFzaWJsaW5nLmlzRGlzcGxheSkge1xyXG4gICAgICAgIHRoaXMubmV4dFNpYmxpbmdOdW1iZXIgPSBpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5uZXh0U2libGluZ051bWJlciA9IG51bGw7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgYWRkU2libGluZyhzaWJsaW5nTnVtYmVyOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpYmxpbmdzID0gdGhpcy5maWVsZERhdGFbJ0ZhbWlseSBEZXRhaWxzJ11bJ1NpYmxpbmdzIERldGFpbHMnXTtcclxuICAgIHNpYmxpbmdzLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmZpZWxkTGFiZWw/LmluY2x1ZGVzKHNpYmxpbmdOdW1iZXIpKSB7XHJcbiAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzO1xyXG5cclxuICBncm91cE9mU2libGluZ3MoaXRlbTphbnkpOmFueXtcclxuICAgIGNvbnN0IGdyb3VwZWRGaWVsZHM6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSA9IHt9O1xyXG5cclxuICAgIGl0ZW0uZm9yRWFjaCgoZmllbGQ6YW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gZmllbGQuZmllbGRMYWJlbC5tYXRjaCgvXFxkKyQvKTsgLy8gRXh0cmFjdCB0cmFpbGluZyBudW1iZXIgZnJvbSBmaWVsZExhYmVsXHJcbiAgICAgIGlmIChtYXRjaCkge1xyXG4gICAgICAgIGNvbnN0IHNpYmxpbmdOdW1iZXIgPSBtYXRjaFswXTtcclxuICBcclxuICAgICAgICBpZiAoIWdyb3VwZWRGaWVsZHNbc2libGluZ051bWJlcl0pIHtcclxuICAgICAgICAgIGdyb3VwZWRGaWVsZHNbc2libGluZ051bWJlcl0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgZ3JvdXBlZEZpZWxkc1tzaWJsaW5nTnVtYmVyXS5wdXNoKGZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwZWRGaWVsZHM7XHJcbiAgfVxyXG5cclxuICByZXR1cm5EaXNwbGF5VGV4dChpdGVtOmFueSl7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIGdyb3VwT2ZQYXN0U2Nob29sRGV0YWlscyhpdGVtOmFueSk6YW55e1xyXG4gICAgY29uc3QgZ3JvdXBlZEZpZWxkczogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9ID0ge307XHJcblxyXG4gICAgaXRlbS5mb3JFYWNoKChmaWVsZDphbnkpID0+IHtcclxuICAgICAgY29uc3QgbWF0Y2ggPSBmaWVsZC5maWVsZExhYmVsLm1hdGNoKC9cXGQrJC8pOyAvLyBFeHRyYWN0IHRyYWlsaW5nIG51bWJlciBmcm9tIGZpZWxkTGFiZWxcclxuICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgY29uc3Qgc2libGluZ051bWJlciA9IG1hdGNoWzBdO1xyXG4gIFxyXG4gICAgICAgIGlmICghZ3JvdXBlZEZpZWxkc1tzaWJsaW5nTnVtYmVyXSkge1xyXG4gICAgICAgICAgZ3JvdXBlZEZpZWxkc1tzaWJsaW5nTnVtYmVyXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBncm91cGVkRmllbGRzW3NpYmxpbmdOdW1iZXJdLnB1c2goZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZ3JvdXBlZEZpZWxkcztcclxuICB9XHJcblxyXG4gIG5leHRQYXN0U2Nob29sTnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBzaG93QWRkUGFzdFNjaG9vbEJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHNpYmxpbmdzID0gdGhpcy5maWVsZERhdGFbJ1N0dWRlbnQgRGV0YWlscyddWydQYXN0IHNjaG9vbCBEZXRhaWxzJ107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMzsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHNpYmxpbmcgPSBzaWJsaW5ncy5maW5kKChlbDogYW55KSA9PlxyXG4gICAgICAgIGVsLmZpZWxkTGFiZWw/LmluY2x1ZGVzKGkudG9TdHJpbmcoKSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFzaWJsaW5nIHx8ICFzaWJsaW5nLmlzRGlzcGxheSkge1xyXG4gICAgICAgIHRoaXMubmV4dFBhc3RTY2hvb2xOdW1iZXIgPSBpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5uZXh0UGFzdFNjaG9vbE51bWJlciA9IG51bGw7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhZGRQYXN0U2Nob29sKHBhc3RTY2hvb2xOdW1iZXI6IGFueSkge1xyXG4gICAgY29uc3Qgc2libGluZ3MgPSB0aGlzLmZpZWxkRGF0YVsnU3R1ZGVudCBEZXRhaWxzJ11bJ1Bhc3Qgc2Nob29sIERldGFpbHMnXTtcclxuICAgIHNpYmxpbmdzLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmZpZWxkTGFiZWw/LmluY2x1ZGVzKHBhc3RTY2hvb2xOdW1iZXIpKSB7XHJcbiAgICAgICAgZWxlbWVudC5pc0Rpc3BsYXkgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxzZWN0aW9uIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgY2xhc3M9XCJ0b3RhbC1jb250YWluZXJcIj5cclxuICA8ZGl2IFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCI+XHJcbiAgICA8ZGl2ICNtYWluQ29udGFpbmVyIGNsYXNzPVwicm93RmxleFwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb092ZXJsYXldPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgW3NpbXBvQm9yZGVyXT1cInN0eWxlcz8uYm9yZGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLXNlY3Rpb25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0Jzogc3R5bGVzPy5sYXlvdXQ/LmFsaWduID09PSAnbGVmdCcgLCAnanVzdGlmeS1jb250ZW50LW1kLWVuZCc6IHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ3JpZ2h0J31cIlxyXG4gICAgICAgIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0xheW91dF09XCJzdHlsZXM/LmxheW91dFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib2R5LXNlY3Rpb25cIj5cclxuICAgICAgICAgIDxkaXYgW3NpbXBvQW5pbWF0aW9uXT1cInN0eWxlcz8uYW5pbWF0aW9uXCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPHNpbXBvLXRleHQtZWxlbWVudCBbdGV4dERhdGFdPVwiY29udGVudD8uaW5wdXRUZXh0Py5bMF0/LnZhbHVlXCIgW3RleHRMYWJlbF09XCJjb250ZW50Py5pbnB1dFRleHQ/LlswXT8ubGFiZWxcIj48L3NpbXBvLXRleHQtZWxlbWVudD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgZC1tZC1mbGV4IG10LTE1XCIgKm5nSWY9XCJkYXRhPy5hY3Rpb24/LmRpc3BsYXlcIiBbbmdDbGFzc109XCJbXHJcbiAgICAgICAgICAgICAgc3R5bGVzPy5sYXlvdXQ/LmFsaWduID09PSAnbGVmdCcgPyAnanVzdGlmeS1jb250ZW50LW1kLXN0YXJ0JyA6ICcnLFxyXG4gICAgICAgICAgICAgIHN0eWxlcz8ubGF5b3V0Py5hbGlnbiA9PT0gJ2NlbnRlcicgPyAnanVzdGlmeS1jb250ZW50LW1kLWNlbnRlcicgOiAnJyxcclxuICAgICAgICAgICAgICBzdHlsZXM/LmxheW91dD8uYWxpZ24gPT09ICdyaWdodCcgPyAnanVzdGlmeS1jb250ZW50LW1kLWVuZCcgOiAnJ1xyXG4gICAgICAgICAgICBdXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8c2VjdGlvbiBjbGFzcz1cIm1haW4tc2VjdGlvblwiPlxyXG4gICAgPGRpdiAqbmdJZj1cImZvcm1TdGF0dXMgIT0gJ1JFR0lTVEVSRUQnICYmIGZvcm1TdGF0dXMgIT0gJ0FETUlUVEVEJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3ViVGFic19zZWN0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxpc3RfdGFicyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGREYXRhKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlX3RhYiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzZWxlY3RlZEtleSA9IGtleVwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRLZXkgPT09IGtleSA/ICdzaW5nbGVfdGFiX2FjdGl2ZScgOiAnc2luZ2xlX3RhYidcIj5cclxuICAgICAgICAgICAgICB7e2tleSB8IHRpdGxlY2FzZX19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlX3RhYiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzZWxlY3RlZEtleSA9ICdEb2N1bWVudCdcIiAqbmdJZj1cImRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybSdcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZEtleSA9PT0gJ0RvY3VtZW50JyA/ICdzaW5nbGVfdGFiX2FjdGl2ZScgOiAnc2luZ2xlX3RhYidcIj5cclxuICAgICAgICAgICAgRG9jdW1lbnRcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZV90YWIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicmVkaXJlY3RUb1BheW1lbnQoKVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YT8uc2VjdGlvblR5cGUgPT09ICdhZG1pc3Npb25Gb3JtJ1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkS2V5ID09PSAnUGF5bWVudCcgPyAnc2luZ2xlX3RhYl9hY3RpdmUnIDogJ3NpbmdsZV90YWInXCI+XHJcbiAgICAgICAgICAgIFBheW1lbnRcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBmaWVsZERhdGFbc2VsZWN0ZWRLZXldID8gT2JqZWN0LmtleXMoZmllbGREYXRhW3NlbGVjdGVkS2V5XSkgOiBbXTtsZXQgZ3JvdXBJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvZHlcIiAqbmdJZj1cImdyb3VwICE9PSAnQmFja3VwIENvbnRhY3QnXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdF90YWJzIGJhY2tUb0xlYWRzIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAge3tncm91cH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBJbmRleCA9PSAwICYmIE9iamVjdC5rZXlzKGZpZWxkRGF0YSlbMF0gPT09IHNlbGVjdGVkS2V5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1ib3hcIiAqbmdJZj1cIiFwYXlsb2FkLmltZ1VybFwiPlxyXG4gICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJkdW1teS1pbWFnZVwiIHNyYz1cIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvbWFzdGVyL2FkZC1pbWFnZS5zdmdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlX2JveFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmY19icm93c2VfYnRuXCIgaWQ9XCJkaXNwbGF5X2Jyb3dzZV9idG5cIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5DbGljayB0b1xyXG4gICAgICAgICAgICAgICAgICB1cGxvYWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGlkPVwidmVuZG9ySW1hZ2VcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJteWZpbGVcIlxyXG4gICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL3gtcG5nLGltYWdlL2pwZWcsaW1hZ2UvanBnXCIgKGNoYW5nZSk9XCJ1cGRhdGVBZG1pc3Npb25JbWFnZSgkZXZlbnQpXCIgY2xhc3M9XCJwYy1idG5cIlxyXG4gICAgICAgICAgICAgIGlkPVwiYnJvd3NlX2NvbnRhY3RfaW1hZ2VcIiAjZmlsZUlucHV0IC8+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGF5bG9hZC5pbWdVcmxcIiBjbGFzcz1cImFkZGVkSW1nXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZGVkSW1nXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nICBhbHQ9XCJcIiBbc3JjXT1cImRzLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwocGF5bG9hZC5pbWdVcmwpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2Jsb2dzL2NoYW5nZV9pbWFnZS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgQ2hhbmdlIEltYWdlXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24gZGVsZXRlLWNoYW5nZVwiIChjbGljayk9XCJkZWxldGVJbWcoKVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2Jsb2dzL2RlbGV0ZV9pbWFnZS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PkRlbGV0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93IG10LTFcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW5mbyBvZiBmaWVsZERhdGFbc2VsZWN0ZWRLZXldW2dyb3VwXVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBjb2wtMTIgbXQtMVwiICpuZ0lmPVwiaW5mby5pc0Rpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImxhYmVsLXRleHRcIj57e2luZm8uZGlzcGxheVRleHQgfHwgaW5mby5maWVsZExhYmVsfX08L2xhYmVsPiZuYnNwOyA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCIgKm5nSWY9XCJpbmZvLnJlcXVpcmVkXCI+Kjwvc3Bhbj4gPGJyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0RGF0YTsgY29udGV4dDoge2RhdGE6IGluZm8sIGdyb3VwOmdyb3VwfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMVwiICpuZ0lmPVwiZ3JvdXAgIT0gJ1NpYmxpbmdzIERldGFpbHMnICYmIGdyb3VwICE9ICdQYXN0IHNjaG9vbCBEZXRhaWxzJ1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbmZvIG9mIGZpZWxkRGF0YVtzZWxlY3RlZEtleV1bZ3JvdXBdXCI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiKGluZm8udHlwZSA9PT0gJ0ZBVEhFUl9JTUFHRScgfHwgaW5mby50eXBlID09PSAnTU9USEVSX0lNQUdFJyB8fCBpbmZvLnR5cGUgPT09ICdHVUFSRElBTl9JTUFHRScpID8gJ2NvbC1tZC0xMiBjb2wtMTInIDogJ2NvbC1tZC00IGNvbC0xMiBtdC0xJ1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImluZm8uaXNEaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImxhYmVsLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGluZm8udHlwZSAhPSAnRkFUSEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ01PVEhFUl9JTUFHRScgJiYgaW5mby50eXBlICE9ICdHVUFSRElBTl9JTUFHRScpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwicmV0dXJuRGlzcGxheVRleHQoaW5mby5kaXNwbGF5VGV4dCB8fCBpbmZvLmZpZWxkTGFiZWwpXCI+e3tyZXR1cm5EaXNwbGF5VGV4dChpbmZvLmRpc3BsYXlUZXh0IHx8IGluZm8uZmllbGRMYWJlbCl9fTwvbGFiZWw+Jm5ic3A7IDxzcGFuIHN0eWxlPVwiY29sb3I6IHJlZDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5mby5yZXF1aXJlZCAmJiAoaW5mby50eXBlICE9ICdGQVRIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnTU9USEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ0dVQVJESUFOX0lNQUdFJylcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXREYXRhOyBjb250ZXh0OiB7ZGF0YTogaW5mbywgZ3JvdXA6Z3JvdXB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJncm91cCA9PT0gJ1NpYmxpbmdzIERldGFpbHMnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQga2V5IG9mIG9iamVjdEtleXMoZ3JvdXBPZlNpYmxpbmdzKGZpZWxkRGF0YVsnRmFtaWx5IERldGFpbHMnXVsnU2libGluZ3MgRGV0YWlscyddKSk7bGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW5mbyBvZiBncm91cE9mU2libGluZ3MoZmllbGREYXRhWydGYW1pbHkgRGV0YWlscyddWydTaWJsaW5ncyBEZXRhaWxzJ10pW2tleV1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC0xMiBtdC0xXCIgKm5nSWY9XCJpbmZvLmlzRGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImxhYmVsLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihpbmZvLnR5cGUgIT0gJ0ZBVEhFUl9JTUFHRScgJiYgaW5mby50eXBlICE9ICdNT1RIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnR1VBUkRJQU5fSU1BR0UnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJyZXR1cm5EaXNwbGF5VGV4dChpbmZvLmRpc3BsYXlUZXh0IHx8IGluZm8uZmllbGRMYWJlbClcIj57e2luZm8uZGlzcGxheVRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW5mby5maWVsZExhYmVsfX08L2xhYmVsPiZuYnNwOyA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbmZvLnJlcXVpcmVkICYmIChpbmZvLnR5cGUgIT0gJ0ZBVEhFUl9JTUFHRScgJiYgaW5mby50eXBlICE9ICdNT1RIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnR1VBUkRJQU5fSU1BR0UnKVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0RGF0YTsgY29udGV4dDoge2RhdGE6IGluZm8sIGdyb3VwOmdyb3VwfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJvcmRlcl9ib3R0b21cIiAqbmdJZj1cImkgPj0gMVwiPjwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRfbW9yZV9zaWJsaW5ncyBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJncm91cCA9PT0gJ1NpYmxpbmdzIERldGFpbHMnICYmIHNob3dBZGRTaWJsaW5nc0J1dHRvbigpXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkU2libGluZyhuZXh0U2libGluZ051bWJlcilcIiBjbGFzcz1cImFkZF9zaWJsaW5nXCIgc3R5bGU9XCJ3aWR0aDptYXgtY29udGVudCAhaW1wb3J0YW50XCI+KyBBZGQgU2libGluZyB7eyBuZXh0U2libGluZ051bWJlclxyXG4gICAgICAgICAgICAgICAgfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImdyb3VwID09PSAnUGFzdCBzY2hvb2wgRGV0YWlscydcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBrZXkgb2Ygb2JqZWN0S2V5cyhncm91cE9mUGFzdFNjaG9vbERldGFpbHMoZmllbGREYXRhWydTdHVkZW50IERldGFpbHMnXVsnUGFzdCBzY2hvb2wgRGV0YWlscyddKSk7bGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW5mbyBvZiBncm91cE9mUGFzdFNjaG9vbERldGFpbHMoZmllbGREYXRhWydTdHVkZW50IERldGFpbHMnXVsnUGFzdCBzY2hvb2wgRGV0YWlscyddKVtrZXldXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBjb2wtMTIgbXQtMVwiICpuZ0lmPVwiaW5mby5pc0Rpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJsYWJlbC10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoaW5mby50eXBlICE9ICdGQVRIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnTU9USEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ0dVQVJESUFOX0lNQUdFJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwicmV0dXJuRGlzcGxheVRleHQoaW5mby5kaXNwbGF5VGV4dCB8fCBpbmZvLmZpZWxkTGFiZWwpXCI+e3tpbmZvLmRpc3BsYXlUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGluZm8uZmllbGRMYWJlbH19PC9sYWJlbD4mbmJzcDsgPHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5mby5yZXF1aXJlZCAmJiAoaW5mby50eXBlICE9ICdGQVRIRVJfSU1BR0UnICYmIGluZm8udHlwZSAhPSAnTU9USEVSX0lNQUdFJyAmJiBpbmZvLnR5cGUgIT0gJ0dVQVJESUFOX0lNQUdFJylcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dERhdGE7IGNvbnRleHQ6IHtkYXRhOiBpbmZvLCBncm91cDpncm91cH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRfbW9yZV9zaWJsaW5ncyBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJncm91cCA9PT0gJ1Bhc3Qgc2Nob29sIERldGFpbHMnICYmIHNob3dBZGRQYXN0U2Nob29sQnV0dG9uKClcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRQYXN0U2Nob29sKG5leHRQYXN0U2Nob29sTnVtYmVyKVwiIGNsYXNzPVwiYWRkX3NpYmxpbmdcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6bWF4LWNvbnRlbnQgIWltcG9ydGFudFwiPisgQWRkIFBhc3QgU2Nob29sIHt7IG5leHRQYXN0U2Nob29sTnVtYmVyfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvZHlcIiAqbmdJZj1cImZpZWxkRGF0YVtzZWxlY3RlZEtleV0uaGFzT3duUHJvcGVydHkoJ0JhY2t1cCBDb250YWN0JykgJiYgc3R1ZGVudExpdmVXaXRoID09PSAnc2luZ2xlIHBhcmVudCcgJiYgZ3JvdXBJbmRleCA9PSAwICYmIE9iamVjdC5rZXlzKGZpZWxkRGF0YSlbMF0gPT09IHNlbGVjdGVkS2V5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdF90YWJzIGJhY2tUb0xlYWRzIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgQmFja3VwIENvbnRhY3QgKE9wdGlvbmFsKVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0xXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtdGItMTUgY2hlY2tib3gtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiXCIgaWQ9XCJcIiBbKG5nTW9kZWwpXT1cInBheWxvYWQucGFyZW50QXV0aG9yaXphdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICBJIGF1dGhvcml6ZSB0aGUgc2Nob29sIHRvIHJlbGVhc2UgdGhlIGNoaWxkIG9ubHkgdG8gdGhlIHBhcmVudCBsaXN0ZWQgYWJvdmVcclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC0xMiBtdC0xXCIgKm5nRm9yPVwibGV0IGluZm8gb2YgZmllbGREYXRhW3NlbGVjdGVkS2V5XVsnQmFja3VwIENvbnRhY3QnXVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImxhYmVsLXRleHRcIj57e2luZm8uZGlzcGxheVRleHQgfHwgaW5mby5maWVsZExhYmVsfX08L2xhYmVsPiZuYnNwOyA8c3BhbiBzdHlsZT1cImNvbG9yOiByZWQ7XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5mby5yZXF1aXJlZFwiPio8L3NwYW4+IDxicj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXREYXRhOyBjb250ZXh0OiB7ZGF0YTogaW5mb31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBjb2wtMTIgbXQtMVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImxhYmVsLXRleHRcIj5VcGxvYWQgU3VwcG9ydGluZyBEb2N1bWVudCAoT3B0aW9uYWwpPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dCB1cGxvYWQtZmlsZVwiIChjbGljayk9XCJiYWNrVXBEb2NJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAgICAgICAgICA8cD57e2JhY2t1cERvY0ZpbGUgPyAnRmlsZSBVcGxvYWRlZCcgOiAnVXBsb2FkIEZpbGUnfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvdWRfdXBsb2FkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJ2ZW5kb3JJbWFnZVwiIHR5cGU9XCJmaWxlXCIgbmFtZT1cIm15ZmlsZVwiIGhpZGRlblxyXG4gICAgICAgICAgICAgICAgYWNjZXB0PVwiLmRvYywuZG9jeCxhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQsaW1hZ2UveC1wbmcsaW1hZ2UvanBlZyxpbWFnZS9qcGcsLnBkZiwgdmlkZW8vbXA0LHZpZGVvL3gtbWF0cm9za2EsdmlkZW8veC1tc3ZpZGVvLHZpZGVvL3F1aWNrdGltZVwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVwbG9hZEJhY2tVcERvY3VtZW50KCRldmVudClcIiBjbGFzcz1cInBjLWJ0blwiXHJcbiAgICAgICAgICAgICAgICBpZD1cImJyb3dzZV9jb250YWN0X2ltYWdlXCIgI2JhY2tVcERvY0lucHV0IC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXltZW50LWRldGFpbHNcIiAqbmdJZj1cInNlbGVjdGVkS2V5ID09PSAnRG9jdW1lbnQnICYmIGRhdGE/LnNlY3Rpb25UeXBlID09PSAnYWRtaXNzaW9uRm9ybSdcIj5cclxuICAgICAgICAgIDxzaW1wby1kb2N1bWVudCBbZG9jdW1lbnRMaXN0XT1cImRvY3VtZW50TGlzdFwiPjwvc2ltcG8tZG9jdW1lbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBheW1lbnQtZGV0YWlsc1wiICpuZ0lmPVwic2VsZWN0ZWRLZXkgPT09ICdQYXltZW50JyAmJiBkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nXCI+XHJcbiAgICAgICAgICA8c2ltcG8tcGF5bWVudC1kZXRhaWxzIFthZG1pc3Npb25EYXRhXT1cInBheWxvYWRcIlxyXG4gICAgICAgICAgICBbc3Vic2NyaXB0aW9uc0RhdGFdPVwic3Vic2NyaXB0aW9uc0RhdGFcIiBbdGVybVBheW1lbnRMaXN0XT1cInRlcm1QYXltZW50TGlzdFwiPjwvc2ltcG8tcGF5bWVudC1kZXRhaWxzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tcGFyZW50XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRhdGE/LmFjdGlvbj8uYnV0dG9uc1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJzdWJtaXRGb3JtKClcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrYnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIiAqbmdJZj1cIihkYXRhPy5zZWN0aW9uVHlwZSA9PT0gJ2FkbWlzc2lvbkZvcm0nICYmIHNlbGVjdGVkS2V5ID09ICdQYXltZW50JykgfHxcclxuICAgICAgICAgICAgKGRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgJiZcclxuICAgICAgICAgICAgICAoT2JqZWN0LmtleXMoZmllbGREYXRhKVtPYmplY3Qua2V5cyhmaWVsZERhdGEpLmxlbmd0aCAtIDFdID09IHNlbGVjdGVkS2V5KSlcIlxyXG4gICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPnt7YnV0dG9uPy5jb250ZW50Py5sYWJlbH19PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJjb250aW51ZUFkbWlzc2lvbigpXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgW2lkXT1cImRhdGE/LmlkK2J1dHRvbi5pZFwiXHJcbiAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJidXR0b24uc3R5bGVzXCIgKm5nSWY9XCJzZWxlY3RlZEtleSAhPSAnUGF5bWVudCcgJiYgZGF0YT8uc2VjdGlvblR5cGUgPT09ICdhZG1pc3Npb25Gb3JtJ1wiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCI+Q29udGludWU8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNvbnRpbnVlQWRtaXNzaW9uKClcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbaWRdPVwiZGF0YT8uaWQrYnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImRhdGE/LnNlY3Rpb25UeXBlID09PSAncmVnaXN0cmF0aW9uRm9ybScgJiYgKE9iamVjdC5rZXlzKGZpZWxkRGF0YSlbT2JqZWN0LmtleXMoZmllbGREYXRhKS5sZW5ndGggLSAxXSAhPSBzZWxlY3RlZEtleSlcIlxyXG4gICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiPkNvbnRpbnVlPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImVtcHR5VGV4dFwiICpuZ0lmPVwiZm9ybVN0YXR1cyA9PSAnUkVHSVNURVJFRCcgfHwgZm9ybVN0YXR1cyA9PSAnQURNSVRURUQnXCI+XHJcbiAgICAgIDxpbWcgW3NyY109XCJjb250ZW50Py5pbWFnZT8udXJsXCIgYWx0PVwiXCIgKm5nSWY9XCJjb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nLWxhcmdlXCIgW2lubmVySHRtbF09XCJjb250ZW50Py5pbnB1dFRleHQ/LlsxXT8udmFsdWVcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvc2VjdGlvbj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNpbnB1dERhdGEgbGV0LWZpZWxkPVwiZGF0YVwiIGxldC1ncm91cD1cImdyb3VwXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT0gJ0lNQUdFJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtYm94XCIgKm5nSWY9XCIhZmllbGQuZmllbGRJbWFnZVVybFwiPlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJkdW1teS1pbWFnZVwiIHNyYz1cIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvbWFzdGVyL2FkZC1pbWFnZS5zdmdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dDIuY2xpY2soKVwiIGFsdD1cIlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZjX2Jyb3dzZV9idG5cIiBpZD1cImRpc3BsYXlfYnJvd3NlX2J0blwiIChjbGljayk9XCJmaWxlSW5wdXQyLmNsaWNrKClcIj5DbGljayB0b1xyXG4gICAgICAgICAgICB1cGxvYWQ8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGlkPVwidmVuZG9ySW1hZ2VcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJteWZpbGVcIiBhY2NlcHQ9XCJpbWFnZS94LXBuZyxpbWFnZS9qcGVnLGltYWdlL2pwZ1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ1cGxvYWRQYXJlbnRHdWFyZGluYUltYWdlcygkZXZlbnQsZmllbGQpXCIgY2xhc3M9XCJwYy1idG5cIiBpZD1cImJyb3dzZV9jb250YWN0X2ltYWdlXCIgI2ZpbGVJbnB1dDIgLz5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZmllbGRJbWFnZVVybFwiIGNsYXNzPVwiYWRkZWRJbWdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRlZEltZ1wiPlxyXG4gICAgICAgICAgICA8aW1nIGFsdD1cIlwiIFtzcmNdPVwiZHMuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChmaWVsZC5maWVsZEltYWdlVXJsKVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImZpbGVJbnB1dDIuY2xpY2soKVwiPlxyXG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9ibG9ncy9jaGFuZ2VfaW1hZ2Uuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgQ2hhbmdlIEltYWdlXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uIGRlbGV0ZS1jaGFuZ2VcIiAoY2xpY2spPVwiZGVsZXRlSW1nKClcIj5cclxuICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9ibG9ncy9kZWxldGVfaW1hZ2Uuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PkRlbGV0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdURVhUJyAmJiBmaWVsZC5pc0Rpc3BsYXlcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIidFbnRlciAnK2ZpZWxkLmZpZWxkTGFiZWxcIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImVycm9yXCIgKm5nSWY9XCJmaWVsZC5maWVsZFZhbHVlICYmICFnZXRGaWVsZFZhbGlkYXRpb24oZmllbGQpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkTGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Bob25lIG51bWJlcicpXCI+XHJcbiAgICAgICAgICBQbGVhc2UgZW50ZXIgYSB2YWxpZCAxMC1kaWdpdCBJbmRpYW4gbW9iaWxlIG51bWJlci5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuZmllbGRMYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZW1haWwnKVwiPlxyXG4gICAgICAgICAgUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ05VTUJFUicgJiYgZmllbGQuaXNEaXNwbGF5XCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIidFbnRlciAnK2ZpZWxkLmZpZWxkTGFiZWxcIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImVycm9yXCIgKm5nSWY9XCJmaWVsZC5maWVsZFZhbHVlICYmICFnZXRGaWVsZFZhbGlkYXRpb24oZmllbGQpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkLmZpZWxkTGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Bob25lIG51bWJlcicpXCI+XHJcbiAgICAgICAgICBQbGVhc2UgZW50ZXIgYSB2YWxpZCAxMC1kaWdpdCBJbmRpYW4gbW9iaWxlIG51bWJlci5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGQuZmllbGRMYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZW1haWwnKVwiPlxyXG4gICAgICAgICAgUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ01PTkVZJyAmJiBmaWVsZC5pc0Rpc3BsYXlcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIidFbnRlciAnK2ZpZWxkLmZpZWxkTGFiZWxcIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImZpZWxkLmRhdGFUeXBlID09PSAnREFURScgJiYgZmllbGQuaXNEaXNwbGF5XCI+XHJcbiAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIFsobmdNb2RlbCldPVwiZmllbGQuZmllbGRWYWx1ZVwiIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0ICcrZmllbGQuZmllbGRMYWJlbFwiIFttYXhdPVwiZ2V0TWF4RGF0ZShmaWVsZClcIlxyXG4gICAgICAoaW5wdXQpPVwiY2hlY2tEb2IoZmllbGQpXCI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImZpZWxkLmRhdGFUeXBlID09PSAnVEVYVF9GSUxFJyAmJiBmaWVsZC5pc0Rpc3BsYXlcIj5cclxuICAgICAgPGlucHV0IG1hdElucHV0IGNsYXNzPVwiaW5wdXQtdGV4dC0xXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCIgc3R5bGU9XCJ3aWR0aDo5MCVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWJveC0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiICpuZ0lmPVwiIWZpZWxkLmZpZWxkSW1hZ2VVcmxcIlxyXG4gICAgICAgIHN0eWxlPVwid2lkdGg6MTAlXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJmaWxlSW5wdXQxLmNsaWNrKClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJkdW1teS1pbWFnZS0xIHctMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+Y2xvdWRfdXBsb2FkPC9tYXQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1ib3gtMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImZpZWxkLmZpZWxkSW1hZ2VVcmxcIiBzdHlsZT1cIndpZHRoOjEwJVwiPlxyXG4gICAgICAgIDwhLS0gSWYgdGhlIHVwbG9hZGVkIGZpbGUgaXMgYW4gaW1hZ2UsIHNob3cgdGhlIHByZXZpZXcgLS0+XHJcbiAgICAgICAgPGltZ1xyXG4gICAgICAgICAgKm5nSWY9XCJpc0ltYWdlKGZpZWxkLmZpZWxkSW1hZ2VVcmwpXCJcclxuICAgICAgICAgIGFsdD1cIlwiXHJcbiAgICAgICAgICBjbGFzcz1cInctMTAwIGgtMTAwXCJcclxuICAgICAgICAgIFtzcmNdPVwiZHMuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChmaWVsZC5maWVsZEltYWdlVXJsKVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZmlsZUlucHV0MS5jbGljaygpXCIgLz5cclxuICAgICAgXHJcbiAgICAgICAgPCEtLSBJZiB0aGUgdXBsb2FkZWQgZmlsZSBpcyBub3QgYW4gaW1hZ2UsIHNob3cgYSBmaWxlIGljb24gLS0+XHJcbiAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIiFpc0ltYWdlKGZpZWxkLmZpZWxkSW1hZ2VVcmwpXCJcclxuICAgICAgICAgIGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGR1bW15LWltYWdlLTFcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dDEuY2xpY2soKVwiPmluc2VydF9kcml2ZV9maWxlPC9tYXQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGlkPVwidmVuZG9ySW1hZ2VcIiB0eXBlPVwiZmlsZVwiIG5hbWU9XCJteWZpbGVcIlxyXG4gICAgICAgIGFjY2VwdD1cIi5kb2MsLmRvY3gsYXBwbGljYXRpb24vbXN3b3JkLGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50LGltYWdlL3gtcG5nLGltYWdlL2pwZWcsaW1hZ2UvanBnLC5wZGYsIHZpZGVvL21wNCx2aWRlby94LW1hdHJvc2thLHZpZGVvL3gtbXN2aWRlbyx2aWRlby9xdWlja3RpbWVcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRJbWFnZSgkZXZlbnQsZmllbGQpXCIgY2xhc3M9XCJwYy1idG5cIiBpZD1cImJyb3dzZV9jb250YWN0X2ltYWdlXCIgI2ZpbGVJbnB1dDEgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImZpZWxkLmRhdGFUeXBlID09PSAnRFJPUERPV04nICYmIGZpZWxkLmlzRGlzcGxheVwiIGNsYXNzPVwiYWRtaXNzaW9uXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlucHV0LXRleHQtMSBpbnB1dF9jYXJkXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBzdHlsZT1cIndpZHRoOjEwMCVcIj5cclxuICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIi0tU2VsZWN0LS1cIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIiBbbXVsdGlwbGVdPVwiZmllbGQubXVsdGlwbGVTZWxlY3Rpb25cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZmllbGQ/LnZhbHVlPy5sZW5ndGggfHwgMCkgPiAwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpZWxkLnZhbHVlXCIgW3ZhbHVlXT1cIml0ZW0/LnZhbHVlXCIgKGNsaWNrKT1cIm1hc3RlckRyb3Bkb3duVmFsdWVDaGFuZ2UoaXRlbSwgZmllbGQpXCI+e3tpdGVtLmxhYmVsfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZmllbGQ/LnZhbHVlPy5sZW5ndGggfHwgMCkgPT0gMFwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWVsZC5zb3VyY2VEYXRhW2ZpZWxkLmRhdGFTb3VyY2VUeXBlXVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlucHV0RmllbGRDaGFuZ2UoaXRlbSwgZmllbGQpXCIgW3ZhbHVlXT1cIml0ZW0/Lm5hbWVcIj57e2l0ZW0ubmFtZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmllbGQuZGF0YVR5cGUgPT09ICdDSEVDS0JPWCcgJiYgZmllbGQuaXNEaXNwbGF5XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZmllbGQ/LnZhbHVlPy5sZW5ndGggfHwgMCkgPiAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItNVwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpZWxkLnZhbHVlXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJcIiBpZD1cImZsZXhDaGVja0NoZWNrZWRcIiBbKG5nTW9kZWwpXT1cImRhdGEuY2hlY2tlZFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZsZXhDaGVja0NoZWNrZWRcIj5cclxuICAgICAgICAgICAge3tkYXRhLmxhYmVsfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWVsZD8udmFsdWU/Lmxlbmd0aCB8fCAwKSA9PSAwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItNVwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpZWxkLnNvdXJjZURhdGFbZmllbGQuZGF0YVNvdXJjZVR5cGVdXCI+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJcIiBpZD1cImZsZXhDaGVja0NoZWNrZWRcIiBbKG5nTW9kZWwpXT1cImRhdGEuY2hlY2tlZFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZsZXhDaGVja0NoZWNrZWRcIj5cclxuICAgICAgICAgICAge3tkYXRhLm5hbWV9fVxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJmaWVsZC5kYXRhVHlwZSA9PT0gJ1JBRElPQlVUVE9OJyAmJiBmaWVsZC5pc0Rpc3BsYXlcIj5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGdhcDogMjBweDsgbWFyZ2luLXRvcDogMTBweDsgaGVpZ2h0OiAzNXB4O2FsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmaWVsZD8udmFsdWU/Lmxlbmd0aCB8fCAwKSA+IDBcIj5cclxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIiBtYi01XCIgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmllbGQudmFsdWVcIj5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gW3ZhbHVlXT1cImRhdGEudmFsdWVcIiBbKG5nTW9kZWwpXT1cImZpZWxkLmZpZWxkVmFsdWVcIj57e2RhdGEubGFiZWx9fTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCIgKGNoYW5nZSk9XCJyYWRpb0J1dHRvbkNoYW5nZWQoZmllbGQsc2VsZWN0ZWRLZXksZ3JvdXApXCI+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpZWxkLnZhbHVlXCIgW3ZhbHVlXT1cImRhdGEudmFsdWVcIj5cclxuICAgICAgICAgICAgICB7eyBkYXRhLmxhYmVsIH19XHJcbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoZmllbGQ/LnZhbHVlPy5sZW5ndGggfHwgMCkgPT0gMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItNVwiICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpZWxkLnZhbHVlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwicmFkaW9cIiBbdmFsdWVdPVwiZGF0YS5uYW1lXCIgWyhuZ01vZGVsKV09XCJmaWVsZC5maWVsZFZhbHVlXCIgLz5cclxuICBcclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIFtmb3JdPVwiJ3JhZGlvXycgKyBkYXRhLm5hbWVcIj5cclxuICAgICAgICAgICAgICB7eyBkYXRhLm5hbWUgfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGVzPy5kZXZpZGVyPy5kaXNwbGF5XCI+XHJcbiAgICA8c2ltcG8tc3ZnLWRpdmlkZXIgW2RpdmlkZXJUeXBlXT1cInN0eWxlcz8uZGV2aWRlcj8uZGV2aWRlclR5cGVcIlxyXG4gICAgICBbY29sb3JdPVwibmV4dENvbXBvbmVudENvbG9yPy5jb2xvclwiPjwvc2ltcG8tc3ZnLWRpdmlkZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGVkaXR9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxyXG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuIl19