simpo-component-library 3.6.965 → 3.6.968

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 (248) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/delete-hover-element/delete-hover-element.component.mjs +3 -3
  3. package/esm2022/lib/components/deprecated-section/deprecated-section.component.mjs +1 -1
  4. package/esm2022/lib/components/document/document.component.mjs +3 -3
  5. package/esm2022/lib/components/image-loading/image-loading.component.mjs +3 -3
  6. package/esm2022/lib/components/payment-details/payment-details.component.mjs +3 -3
  7. package/esm2022/lib/constants/business.constant.mjs +1 -1
  8. package/esm2022/lib/directive/alignment.directive.mjs +1 -1
  9. package/esm2022/lib/directive/blur-content.directive.mjs +1 -1
  10. package/esm2022/lib/directive/borderlessImage.directive.mjs +1 -1
  11. package/esm2022/lib/directive/button-directive.directive.mjs +1 -1
  12. package/esm2022/lib/directive/button-editor.directive.mjs +1 -1
  13. package/esm2022/lib/directive/color.directive.mjs +1 -1
  14. package/esm2022/lib/directive/column-directive.directive.mjs +1 -1
  15. package/esm2022/lib/directive/container-alignment.directive.mjs +1 -1
  16. package/esm2022/lib/directive/container-fir.directive.mjs +1 -1
  17. package/esm2022/lib/directive/content-title-spacing.directive.mjs +1 -1
  18. package/esm2022/lib/directive/contenteditable.directive.mjs +1 -1
  19. package/esm2022/lib/directive/corner-directive.mjs +1 -1
  20. package/esm2022/lib/directive/height.directive.mjs +1 -1
  21. package/esm2022/lib/directive/hover-animation.directive.mjs +1 -1
  22. package/esm2022/lib/directive/hoverborder.directive.mjs +1 -1
  23. package/esm2022/lib/directive/icon-directive.directive.mjs +1 -1
  24. package/esm2022/lib/directive/image-container.directive.mjs +1 -1
  25. package/esm2022/lib/directive/image-directive.directive.mjs +1 -1
  26. package/esm2022/lib/directive/image-editor.directive.mjs +1 -1
  27. package/esm2022/lib/directive/image-position.directive.mjs +1 -1
  28. package/esm2022/lib/directive/letters-only.directive.mjs +1 -1
  29. package/esm2022/lib/directive/merge-header.directive.mjs +1 -1
  30. package/esm2022/lib/directive/numbers-only.directive.mjs +1 -1
  31. package/esm2022/lib/directive/position-layout-directive.directive.mjs +1 -1
  32. package/esm2022/lib/directive/set-dynamic-background.directive.mjs +1 -1
  33. package/esm2022/lib/directive/spacing-around.directive.mjs +1 -1
  34. package/esm2022/lib/directive/spacing-horizontal.directive.mjs +1 -1
  35. package/esm2022/lib/directive/spacing.directive.mjs +1 -1
  36. package/esm2022/lib/directive/text-background-directive.directive.mjs +1 -1
  37. package/esm2022/lib/directive/text-size.directive.mjs +1 -1
  38. package/esm2022/lib/directive/translate-onhover.directive.mjs +1 -1
  39. package/esm2022/lib/directive/video-directive.directive.mjs +1 -1
  40. package/esm2022/lib/directive/wrap-containers.directive.mjs +1 -1
  41. package/esm2022/lib/ecommerce/sections/address/address.component.mjs +3 -3
  42. package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +3 -3
  43. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +3 -3
  44. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
  45. package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +3 -3
  46. package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +3 -3
  47. package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
  48. package/esm2022/lib/ecommerce/sections/categories-with-image-background-columns/categories-with-image-background-columns.component.mjs +3 -3
  49. package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
  50. package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
  51. package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +3 -3
  52. package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
  53. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +3 -3
  54. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
  55. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +3 -3
  56. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.model.mjs +1 -1
  57. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +3 -3
  58. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
  59. package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +3 -3
  60. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +3 -3
  61. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
  62. package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +3 -3
  63. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.component.mjs +3 -3
  64. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.modal.mjs +1 -1
  65. package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +3 -3
  66. package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +3 -3
  67. package/esm2022/lib/ecommerce/sections/passbook-transactions/passbook-transactions.component.mjs +3 -3
  68. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +3 -3
  69. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
  70. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +3 -3
  71. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
  72. package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +3 -3
  73. package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
  74. package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.component.mjs +3 -3
  75. package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.modal.mjs +1 -1
  76. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.component.mjs +1 -1
  77. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.model.mjs +1 -1
  78. package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +3 -3
  79. package/esm2022/lib/ecommerce/sections/scheme-selection/scheme-selection.component.mjs +3 -3
  80. package/esm2022/lib/ecommerce/sections/schemes/schemes.component.mjs +3 -3
  81. package/esm2022/lib/ecommerce/sections/schemes/schemes.component.model.mjs +1 -1
  82. package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +3 -3
  83. package/esm2022/lib/ecommerce/sections/store-list/store-list.component.mjs +3 -3
  84. package/esm2022/lib/ecommerce/sections/store-list/store-list.modal.mjs +1 -1
  85. package/esm2022/lib/ecommerce/sections/store-page/store-page.component.mjs +3 -3
  86. package/esm2022/lib/ecommerce/sections/store-page/store-page.model.mjs +1 -1
  87. package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +3 -3
  88. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
  89. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +3 -3
  90. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
  91. package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
  92. package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
  93. package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +1 -1
  94. package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
  95. package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
  96. package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
  97. package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
  98. package/esm2022/lib/ecommerce/styles/category.modal.mjs +1 -1
  99. package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
  100. package/esm2022/lib/ecommerce/styles/product.modal.mjs +1 -1
  101. package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
  102. package/esm2022/lib/ecommerce/styles/user.modal.mjs +1 -1
  103. package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -3
  104. package/esm2022/lib/elements/address-list/address-list.component.mjs +3 -3
  105. package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
  106. package/esm2022/lib/elements/booking-cart-groups/booking-cart-groups.component.mjs +3 -3
  107. package/esm2022/lib/elements/button/button.component.mjs +3 -3
  108. package/esm2022/lib/elements/button/button.model.mjs +1 -1
  109. package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +3 -3
  110. package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
  111. package/esm2022/lib/elements/editor-service.service.mjs +1 -1
  112. package/esm2022/lib/elements/heading-element/heading-element.component.mjs +3 -3
  113. package/esm2022/lib/elements/index.mjs +1 -1
  114. package/esm2022/lib/elements/link-editor/link-editor.component.mjs +3 -3
  115. package/esm2022/lib/elements/list-home-appointment/list-home-appointment.component.mjs +3 -3
  116. package/esm2022/lib/elements/media-selector/media-selector.component.mjs +3 -3
  117. package/esm2022/lib/elements/my-bookings/my-bookings.component.mjs +3 -3
  118. package/esm2022/lib/elements/portfolio/portfolio.component.mjs +3 -3
  119. package/esm2022/lib/elements/pricing-s1/pricing-s1.component.mjs +3 -3
  120. package/esm2022/lib/elements/property/property.component.mjs +3 -3
  121. package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +3 -3
  122. package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +3 -3
  123. package/esm2022/lib/elements/text/text.component.mjs +3 -3
  124. package/esm2022/lib/elements/text-editor/text-editor.component.mjs +7 -7
  125. package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
  126. package/esm2022/lib/pipes/amount.pipe.mjs +1 -1
  127. package/esm2022/lib/pipes/gender.pipe.mjs +1 -1
  128. package/esm2022/lib/sections/BaseSection.mjs +1 -1
  129. package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +3 -3
  130. package/esm2022/lib/sections/appointment-form/appointment-booking/appointment-booking/appointment-booking.component.mjs +18 -5
  131. package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
  132. package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +3 -3
  133. package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
  134. package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +3 -3
  135. package/esm2022/lib/sections/blog-list/blog-list.component.mjs +3 -3
  136. package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
  137. package/esm2022/lib/sections/brand-story-section/brand-story-section.component.mjs +3 -3
  138. package/esm2022/lib/sections/brand-story-section/brand-story-section.modal.mjs +1 -1
  139. package/esm2022/lib/sections/button-grid-section/button-grid-section.component.mjs +3 -3
  140. package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +3 -3
  141. package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
  142. package/esm2022/lib/sections/condensed-and-gradient/condensed-and-gradient.component.mjs +3 -3
  143. package/esm2022/lib/sections/countdown-banner/countdown-banner.component.mjs +3 -3
  144. package/esm2022/lib/sections/countdown-banner/countdown-banner.component.model.mjs +1 -1
  145. package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.component.mjs +3 -3
  146. package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.modal.mjs +1 -1
  147. package/esm2022/lib/sections/faq-section/faq-section.component.mjs +3 -3
  148. package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
  149. package/esm2022/lib/sections/feature-experience-section/feature-experience-section.component.mjs +3 -3
  150. package/esm2022/lib/sections/feature-experience-section/feature-experience-section.modal.mjs +1 -1
  151. package/esm2022/lib/sections/features-section/features-section.component.mjs +3 -3
  152. package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
  153. package/esm2022/lib/sections/footer/footer.component.mjs +3 -3
  154. package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
  155. package/esm2022/lib/sections/four-features-centered-image/four-features-centered-image.component.mjs +3 -3
  156. package/esm2022/lib/sections/four-features-centered-image/four-features-centered-image.modal.mjs +1 -1
  157. package/esm2022/lib/sections/header-section/header-section.component.mjs +3 -3
  158. package/esm2022/lib/sections/header-section/header-section.model.mjs +1 -1
  159. package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
  160. package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
  161. package/esm2022/lib/sections/image-background/image-background/image-background.component.mjs +3 -3
  162. package/esm2022/lib/sections/image-background/image-background/image-background.component.model.mjs +1 -1
  163. package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +3 -3
  164. package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
  165. package/esm2022/lib/sections/image-grid-hotspot/image-grid-hotspot.component.mjs +3 -3
  166. package/esm2022/lib/sections/image-grid-hotspot/image-grid-hotspot.model.mjs +1 -1
  167. package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +3 -3
  168. package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
  169. package/esm2022/lib/sections/image-section/image-section.component.mjs +3 -3
  170. package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
  171. package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
  172. package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
  173. package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +3 -3
  174. package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
  175. package/esm2022/lib/sections/moving-text/moving-text.component.mjs +3 -3
  176. package/esm2022/lib/sections/moving-text/moving-text.modal.mjs +1 -1
  177. package/esm2022/lib/sections/new-services/new-services.component.mjs +3 -3
  178. package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
  179. package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +3 -3
  180. package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
  181. package/esm2022/lib/sections/news-letter-component/news-letter-component.component.mjs +3 -3
  182. package/esm2022/lib/sections/news-letter-component/news-letter.modal.mjs +1 -1
  183. package/esm2022/lib/sections/overlapping-image/overlapping-image.component.mjs +3 -3
  184. package/esm2022/lib/sections/overlapping-image/overlapping-image.component.modal.mjs +1 -1
  185. package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +3 -3
  186. package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
  187. package/esm2022/lib/sections/process-modern/process-modern.component.mjs +3 -3
  188. package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
  189. package/esm2022/lib/sections/process-section/process-section.component.mjs +3 -3
  190. package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
  191. package/esm2022/lib/sections/product-info-section/product-info-section.component.mjs +3 -3
  192. package/esm2022/lib/sections/product-info-section/product-info-section.component.modal.mjs +1 -1
  193. package/esm2022/lib/sections/property-component/property-component.component.mjs +3 -3
  194. package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
  195. package/esm2022/lib/sections/property-list/property-list.component.mjs +3 -3
  196. package/esm2022/lib/sections/property-list/property-list.modal.mjs +1 -1
  197. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +3 -3
  198. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
  199. package/esm2022/lib/sections/registration-form/registration-form.component.mjs +3 -3
  200. package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
  201. package/esm2022/lib/sections/scheme-detail/scheme-detail.component.mjs +3 -3
  202. package/esm2022/lib/sections/scheme-detail/scheme-detail.modal.mjs +1 -1
  203. package/esm2022/lib/sections/service-section/service-section.component.mjs +3 -3
  204. package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
  205. package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +3 -3
  206. package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
  207. package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
  208. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +3 -3
  209. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
  210. package/esm2022/lib/sections/testimonial-masonry/testimonial-masonry.component.mjs +3 -3
  211. package/esm2022/lib/sections/testimonial-masonry/testimonial-masonry.model.mjs +1 -1
  212. package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +3 -3
  213. package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
  214. package/esm2022/lib/sections/testimonial-slider/testimonial-slider.component.mjs +3 -3
  215. package/esm2022/lib/sections/testimonial-slider/testimonial-slider.model.mjs +1 -1
  216. package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +3 -3
  217. package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
  218. package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
  219. package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +3 -3
  220. package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
  221. package/esm2022/lib/sections/video-carousel-section/video-carousel-section.component.mjs +3 -3
  222. package/esm2022/lib/sections/video-carousel-section/video-carousel.model.mjs +1 -1
  223. package/esm2022/lib/sections/video-grid-section/video-grid-section.component.mjs +3 -3
  224. package/esm2022/lib/sections/video-grid-section/video-grid-section.model.mjs +1 -1
  225. package/esm2022/lib/sections/video-section/video-section.component.mjs +3 -3
  226. package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
  227. package/esm2022/lib/sections/video-showcase/video-showcase.component.mjs +3 -3
  228. package/esm2022/lib/sections/view-blog/view-blog.component.mjs +1 -1
  229. package/esm2022/lib/services/analytics.service.mjs +1 -1
  230. package/esm2022/lib/services/booking-product-cart.service.mjs +1 -1
  231. package/esm2022/lib/services/cart.service.mjs +1 -1
  232. package/esm2022/lib/services/endUser.service.mjs +1 -1
  233. package/esm2022/lib/services/image-upload-service.service.mjs +1 -1
  234. package/esm2022/lib/services/rest.service.mjs +2 -2
  235. package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
  236. package/esm2022/lib/services/storage.service.mjs +1 -1
  237. package/esm2022/lib/styles/gradient-extension.mjs +1 -1
  238. package/esm2022/lib/styles/index.mjs +1 -1
  239. package/esm2022/lib/styles/style.model.mjs +1 -1
  240. package/esm2022/lib/styles/text-size.extension.mjs +1 -1
  241. package/esm2022/lib/styles/types.mjs +1 -1
  242. package/esm2022/lib/tokens/api-token.mjs +1 -1
  243. package/esm2022/public-api.mjs +1 -1
  244. package/fesm2022/simpo-component-library.mjs +230 -217
  245. package/fesm2022/simpo-component-library.mjs.map +1 -1
  246. package/package.json +1 -1
  247. package/simpo-component-library-3.6.968.tgz +0 -0
  248. package/simpo-component-library-3.6.965.tgz +0 -0
@@ -844,7 +844,7 @@ export class AuthenticationRequiredComponent extends BaseSection {
844
844
  this.router.navigate(['']);
845
845
  }
846
846
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthenticationRequiredComponent, deps: [{ token: i1.RestService }, { token: i2.Router }, { token: i3.MessageService }, { token: i4.StorageServiceService }, { token: i5.MatDialog }, { token: i2.ActivatedRoute }, { token: i0.ElementRef }, { token: i6.AnalyticsService }, { token: i5.MatDialogRef, optional: true }, { token: i7.MatBottomSheetRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
847
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthenticationRequiredComponent, isStandalone: true, selector: "simpo-authentication-required", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], viewQueries: [{ propertyName: "inputs", predicate: ["otpInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div [spacingAround]=\"stylesLayout\">\r\n <div class=\"login_card d-flex align-items-center justify-content-center flex-column\"\r\n [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"area w-100\">\r\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n </ul>\r\n </div>\r\n\r\n <!-- ===== AUTH CARD ===== -->\r\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [class.single-pane]=\"!data?.content?.image?.showImage\"\r\n [simpoCorner]=\"styles?.corners\">\r\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"auth-card\" [class.single-pane]=\"!data?.content?.image?.showImage\" [id]=\"data?.id\"\r\n [simpoPositionLayoutDirective]=\"styles?.positionLayout\">\r\n <div class=\"auth-image\" *ngIf=\"data?.content?.image?.showImage\">\r\n <img loading=\"lazy\" [src]=\"data?.content?.image?.url\" [attr.alt]=\"data?.content?.image?.altText || ''\"\r\n class=\"auth-hero-image\" [simpoImageDirective]=\"styles?.image\" [appImageEditor]=\"edit ?? false\"\r\n [imageData]=\"data?.content?.image\" [sectionId]=\"data?.id\"\r\n [class]=\"data?.id+(data?.content?.image?.id || '')\" [id]=\"data?.id\"\r\n [simpoObjectPosition]=\"data?.content?.image?.position\">\r\n </div>\r\n <div class=\"auth-form\">\r\n <ng-container [ngSwitch]=\"authScreen\">\r\n <ng-container *ngSwitchCase=\"'PHONE'\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"icon d-flex justify-content-center align-items-center cursor-pointer\"\r\n (click)=\"backToHome()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </div>\r\n <div\r\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\r\n </div>\r\n </div>\r\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\r\n\r\n <div class=\"login-input-section mt-4\">\r\n <p class=\"text-center mb-3\" style=\"font-size:14px; color:#555;\">Unlock coupons, profile and much\r\n more\r\n </p>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-email-phone-input\">Email / Mobile Number</label>\r\n <input id=\"auth-email-phone-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\r\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\r\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\" (keyup.enter)=\"sendOTP()\" />\r\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter a valid email or\r\n 10-digit\r\n mobile number*</span>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[2]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[2]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[2]?.id ?? ''\"\r\n (click)=\"sendOTP()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content?.label\r\n :\r\n 'SEND\r\n OTP' }}\r\n </button>\r\n\r\n <div class=\"mt-3 text-center\">\r\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\r\n (click)=\"authScreen = 'PASSWORD'\">\r\n Login with Password\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'OTP'\">\r\n <div\r\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\r\n </div>\r\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\r\n\r\n <div class=\"login-input-section mt-4\">\r\n <p class=\"text-center mb-3 clr-black\" style=\"font-size:14px;\">\r\n Enter 6-digit OTP sent to {{emailOrNumber}}\r\n </p>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between otp_input gap-1 mb-3\">\r\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\r\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\r\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\r\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center mb-3\">\r\n <span *ngIf=\"resendCountdown > 0\" class=\"clr-black fs-13\"\r\n style=\"font-weight:700; letter-spacing:0.04em;\">\r\n RESEND IN &nbsp;{{formatCountdown(resendCountdown)}}\r\n </span>\r\n <span *ngIf=\"resendCountdown === 0\" class=\"cursor-pointer clr-black fs-13\"\r\n style=\"font-weight:700; letter-spacing:0.04em; text-decoration:underline;\"\r\n (click)=\"resendOTPNew()\">\r\n RESEND OTP\r\n </span>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[1]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[1]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[1]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[1]?.id ?? ''\"\r\n (click)=\"verifyOTPNew()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content?.label\r\n :\r\n 'VERIFY OTP' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'REGISTER'\">\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">REGISTER</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"auth-fullname-input\">Full Name</label>\r\n <input id=\"auth-fullname-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\"\r\n placeholder=\"Jane Doe\">\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-phone-input\">Phone Number</label>\r\n <div class=\"d-flex align-items-center w-100 password-input-container\">\r\n <span class=\"clr-black\"\r\n style=\"font-size:14px; font-weight:500; padding: 0 8px 0 12px; white-space:nowrap;\">+91\r\n |</span>\r\n <input id=\"auth-reg-phone-input\" type=\"tel\" class=\"b-none clr-black w-90\"\r\n [(ngModel)]=\"phoneNumber\" placeholder=\"9876543210\" maxlength=\"10\" inputmode=\"numeric\"\r\n style=\"outline:none; font-size:14px;\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-email-input\">Email</label>\r\n <input id=\"auth-email-input\" type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\"\r\n placeholder=\"janedoe@gmail.com\" (ngModelChange)=\"onEmailChange()\"\r\n [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-password-input\">Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-reg-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\">\r\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\r\n (click)=\"passwordHidden = !passwordHidden\">\r\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-conf-password-input\">Confirm Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-reg-conf-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"confPassword\" placeholder=\"Confirm Password\">\r\n </div>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\r\n (click)=\"registerUser()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\r\n :\r\n 'CONTINUE' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'PASSWORD'\">\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">LOGIN</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"auth-pwd-email-input\">Email / Mobile Number</label>\r\n <input id=\"auth-pwd-email-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\r\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\r\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter valid email or\r\n 10-digit\r\n mobile number*</span>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-login-password-input\">Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-login-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\"\r\n (keyup.enter)=\"loginWithPassword()\">\r\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\r\n (click)=\"passwordHidden = !passwordHidden\">\r\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\r\n (click)=\"loginWithPassword()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\r\n :\r\n 'LOGIN' }}\r\n </button>\r\n\r\n <div class=\"mt-3 text-center\">\r\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\r\n (click)=\"authScreen = 'PHONE'\">\r\n Login with OTP\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\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 <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n</section>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:min(860px,92vw);margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.main-panel.single-pane{width:450px}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0;position:relative;transition:all .4s ease;margin:unset!important;overflow:hidden}.auth-card{display:flex;align-items:stretch;min-height:420px}.auth-card.single-pane{min-height:unset}.auth-image{flex:0 0 48%;background:#f2f2f2}.auth-hero-image{width:100%;height:100%;display:block;object-fit:cover}.auth-form{flex:1;display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:1.5rem}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:radial-gradient(circle at 30% 30%,rgba(var(--accent-rgb, 102, 126, 234),.22),rgba(var(--accent-rgb, 102, 126, 234),.06));box-shadow:0 0 20px 4px rgba(var(--accent-rgb, 102, 126, 234),.15),inset 0 0 12px #ffffff1f;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:50%;border:1px solid rgba(var(--accent-rgb, 102, 126, 234),.18);animation:floatUp 25s linear infinite,pulse 4s ease-in-out infinite alternate;bottom:-150px}.circles li:nth-child(1){left:10%;width:90px;height:90px;animation-delay:0s;animation-duration:22s}.circles li:nth-child(2){left:25%;width:30px;height:30px;animation-delay:3s;animation-duration:14s}.circles li:nth-child(3){left:45%;width:60px;height:60px;animation-delay:6s;animation-duration:18s}.circles li:nth-child(4){left:65%;width:110px;height:110px;animation-delay:1s;animation-duration:28s}.circles li:nth-child(5){left:80%;width:25px;height:25px;animation-delay:4s;animation-duration:12s}.circles li:nth-child(6){left:55%;width:70px;height:70px;animation-delay:9s;animation-duration:20s}.circles li:nth-child(7){left:35%;width:140px;height:140px;animation-delay:2s;animation-duration:32s}.circles li:nth-child(8){left:70%;width:40px;height:40px;animation-delay:12s;animation-duration:40s}.circles li:nth-child(9){left:5%;width:20px;height:20px;animation-delay:5s;animation-duration:30s}.circles li:nth-child(10){left:90%;width:55px;height:55px;animation-delay:7s;animation-duration:24s}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:.8}20%{opacity:1}80%{opacity:.7}to{transform:translateY(-110vh) rotate(540deg);opacity:0}}@keyframes pulse{0%{box-shadow:0 0 12px 2px rgba(var(--accent-rgb, 102, 126, 234),.1)}to{box-shadow:0 0 32px 10px rgba(var(--accent-rgb, 102, 126, 234),.28)}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}.login_card{padding:10px}}@media screen and (max-width: 900px){.main-panel{width:min(760px,94vw)}}@media screen and (max-width: 768px){.main-panel,.main-panel.single-pane{width:100%;margin:1.25rem auto}.auth-card{flex-direction:column;min-height:unset}.auth-image{width:100%;min-height:220px}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}.login_card{height:100vh}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i10.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i12.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i13.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingAroundDirective, selector: "[spacingAround]", inputs: ["spacingAround", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId", "itemIndex"] }, { kind: "directive", type: ImageEditorDirective, selector: "[appImageEditor]", inputs: ["appImageEditor", "imageData", "sectionId", "showIcon", "iconData", "itemIndex"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: ObjectPositionDirective, selector: "[simpoObjectPosition]", inputs: ["simpoObjectPosition"] }, { kind: "directive", type: PositionLayoutDirectiveDirective, selector: "[simpoPositionLayoutDirective]", inputs: ["simpoPositionLayoutDirective"] }] }); }
847
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AuthenticationRequiredComponent, isStandalone: true, selector: "simpo-authentication-required", inputs: { data: "data", index: "index", edit: "edit", delete: "delete" }, providers: [MessageService], viewQueries: [{ propertyName: "inputs", predicate: ["otpInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\n\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\n <div [spacingAround]=\"stylesLayout\">\n <div class=\"login_card d-flex align-items-center justify-content-center flex-column\"\n [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\n <div class=\"area w-100\">\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n </ul>\n </div>\n\n <!-- ===== AUTH CARD ===== -->\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [class.single-pane]=\"!data?.content?.image?.showImage\"\n [simpoCorner]=\"styles?.corners\">\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\n <div class=\"auth-card\" [class.single-pane]=\"!data?.content?.image?.showImage\" [id]=\"data?.id\"\n [simpoPositionLayoutDirective]=\"styles?.positionLayout\">\n <div class=\"auth-image\" *ngIf=\"data?.content?.image?.showImage\">\n <img loading=\"lazy\" [src]=\"data?.content?.image?.url\" [attr.alt]=\"data?.content?.image?.altText || ''\"\n class=\"auth-hero-image\" [simpoImageDirective]=\"styles?.image\" [appImageEditor]=\"edit ?? false\"\n [imageData]=\"data?.content?.image\" [sectionId]=\"data?.id\"\n [class]=\"data?.id+(data?.content?.image?.id || '')\" [id]=\"data?.id\"\n [simpoObjectPosition]=\"data?.content?.image?.position\">\n </div>\n <div class=\"auth-form\">\n <ng-container [ngSwitch]=\"authScreen\">\n <ng-container *ngSwitchCase=\"'PHONE'\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"icon d-flex justify-content-center align-items-center cursor-pointer\"\n (click)=\"backToHome()\">\n <mat-icon>arrow_back</mat-icon>\n </div>\n <div\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\n </div>\n </div>\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\n\n <div class=\"login-input-section mt-4\">\n <p class=\"text-center mb-3\" style=\"font-size:14px; color:#555;\">Unlock coupons, profile and much\n more\n </p>\n\n <div class=\"input-box\">\n <label for=\"auth-email-phone-input\">Email / Mobile Number</label>\n <input id=\"auth-email-phone-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\" (keyup.enter)=\"sendOTP()\" />\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter a valid email or\n 10-digit\n mobile number*</span>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[2]?.content\"\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[2]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[2]?.id ?? ''\"\n (click)=\"sendOTP()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content?.label\n :\n 'SEND\n OTP' }}\n </button>\n\n <div class=\"mt-3 text-center\">\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\n (click)=\"authScreen = 'PASSWORD'\">\n Login with Password\n </span>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'OTP'\">\n <div\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\n </div>\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\n\n <div class=\"login-input-section mt-4\">\n <p class=\"text-center mb-3 clr-black\" style=\"font-size:14px;\">\n Enter 6-digit OTP sent to {{emailOrNumber}}\n </p>\n\n <div class=\"d-flex align-items-center justify-content-between otp_input gap-1 mb-3\">\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\n </div>\n </div>\n\n <div class=\"text-center mb-3\">\n <span *ngIf=\"resendCountdown > 0\" class=\"clr-black fs-13\"\n style=\"font-weight:700; letter-spacing:0.04em;\">\n RESEND IN &nbsp;{{formatCountdown(resendCountdown)}}\n </span>\n <span *ngIf=\"resendCountdown === 0\" class=\"cursor-pointer clr-black fs-13\"\n style=\"font-weight:700; letter-spacing:0.04em; text-decoration:underline;\"\n (click)=\"resendOTPNew()\">\n RESEND OTP\n </span>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[1]?.content\"\n [buttonStyle]=\"data?.action?.buttons[1]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[1]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[1]?.id ?? ''\"\n (click)=\"verifyOTPNew()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content?.label\n :\n 'VERIFY OTP' }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'REGISTER'\">\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 fs-20-fw-600 clr-black\">REGISTER</p>\n </div>\n\n <div class=\"d-flex w-100 signup-input-container flex-column\">\n <div class=\"input-box\">\n <label for=\"auth-fullname-input\">Full Name</label>\n <input id=\"auth-fullname-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\"\n placeholder=\"Jane Doe\">\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-phone-input\">Phone Number</label>\n <div class=\"d-flex align-items-center w-100 password-input-container\">\n <span class=\"clr-black\"\n style=\"font-size:14px; font-weight:500; padding: 0 8px 0 12px; white-space:nowrap;\">+91\n |</span>\n <input id=\"auth-reg-phone-input\" type=\"tel\" class=\"b-none clr-black w-90\"\n [(ngModel)]=\"phoneNumber\" placeholder=\"9876543210\" maxlength=\"10\" inputmode=\"numeric\"\n style=\"outline:none; font-size:14px;\" />\n </div>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-email-input\">Email</label>\n <input id=\"auth-email-input\" type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\"\n placeholder=\"janedoe@gmail.com\" (ngModelChange)=\"onEmailChange()\"\n [style.borderColor]=\"!emailCheck ? '' : 'red'\">\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-password-input\">Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-reg-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\">\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\n (click)=\"passwordHidden = !passwordHidden\">\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\n </mat-icon>\n </div>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-conf-password-input\">Confirm Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-reg-conf-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"confPassword\" placeholder=\"Confirm Password\">\n </div>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\n (click)=\"registerUser()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\n :\n 'CONTINUE' }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'PASSWORD'\">\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 fs-20-fw-600 clr-black\">LOGIN</p>\n </div>\n\n <div class=\"d-flex w-100 signup-input-container flex-column\">\n <div class=\"input-box\">\n <label for=\"auth-pwd-email-input\">Email / Mobile Number</label>\n <input id=\"auth-pwd-email-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\">\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter valid email or\n 10-digit\n mobile number*</span>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-login-password-input\">Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-login-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\"\n (keyup.enter)=\"loginWithPassword()\">\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\n (click)=\"passwordHidden = !passwordHidden\">\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\n </mat-icon>\n </div>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\n (click)=\"loginWithPassword()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\n :\n 'LOGIN' }}\n </button>\n\n <div class=\"mt-3 text-center\">\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\n (click)=\"authScreen = 'PHONE'\">\n Login with OTP\n </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n\n</section>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:min(860px,92vw);margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.main-panel.single-pane{width:450px}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0;position:relative;transition:all .4s ease;margin:unset!important;overflow:hidden}.auth-card{display:flex;align-items:stretch;min-height:420px}.auth-card.single-pane{min-height:unset}.auth-image{flex:0 0 48%;background:#f2f2f2}.auth-hero-image{width:100%;height:100%;display:block;object-fit:cover}.auth-form{flex:1;display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:1.5rem}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:radial-gradient(circle at 30% 30%,rgba(var(--accent-rgb, 102, 126, 234),.22),rgba(var(--accent-rgb, 102, 126, 234),.06));box-shadow:0 0 20px 4px rgba(var(--accent-rgb, 102, 126, 234),.15),inset 0 0 12px #ffffff1f;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:50%;border:1px solid rgba(var(--accent-rgb, 102, 126, 234),.18);animation:floatUp 25s linear infinite,pulse 4s ease-in-out infinite alternate;bottom:-150px}.circles li:nth-child(1){left:10%;width:90px;height:90px;animation-delay:0s;animation-duration:22s}.circles li:nth-child(2){left:25%;width:30px;height:30px;animation-delay:3s;animation-duration:14s}.circles li:nth-child(3){left:45%;width:60px;height:60px;animation-delay:6s;animation-duration:18s}.circles li:nth-child(4){left:65%;width:110px;height:110px;animation-delay:1s;animation-duration:28s}.circles li:nth-child(5){left:80%;width:25px;height:25px;animation-delay:4s;animation-duration:12s}.circles li:nth-child(6){left:55%;width:70px;height:70px;animation-delay:9s;animation-duration:20s}.circles li:nth-child(7){left:35%;width:140px;height:140px;animation-delay:2s;animation-duration:32s}.circles li:nth-child(8){left:70%;width:40px;height:40px;animation-delay:12s;animation-duration:40s}.circles li:nth-child(9){left:5%;width:20px;height:20px;animation-delay:5s;animation-duration:30s}.circles li:nth-child(10){left:90%;width:55px;height:55px;animation-delay:7s;animation-duration:24s}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:.8}20%{opacity:1}80%{opacity:.7}to{transform:translateY(-110vh) rotate(540deg);opacity:0}}@keyframes pulse{0%{box-shadow:0 0 12px 2px rgba(var(--accent-rgb, 102, 126, 234),.1)}to{box-shadow:0 0 32px 10px rgba(var(--accent-rgb, 102, 126, 234),.28)}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}.login_card{padding:10px}}@media screen and (max-width: 900px){.main-panel{width:min(760px,94vw)}}@media screen and (max-width: 768px){.main-panel,.main-panel.single-pane{width:100%;margin:1.25rem auto}.auth-card{flex-direction:column;min-height:unset}.auth-image{width:100%;min-height:220px}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}.login_card{height:100vh}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i10.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i12.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i13.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingAroundDirective, selector: "[spacingAround]", inputs: ["spacingAround", "backgroundInfo"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId", "itemIndex"] }, { kind: "directive", type: ImageEditorDirective, selector: "[appImageEditor]", inputs: ["appImageEditor", "imageData", "sectionId", "showIcon", "iconData", "itemIndex"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: ObjectPositionDirective, selector: "[simpoObjectPosition]", inputs: ["simpoObjectPosition"] }, { kind: "directive", type: PositionLayoutDirectiveDirective, selector: "[simpoPositionLayoutDirective]", inputs: ["simpoPositionLayoutDirective"] }] }); }
848
848
  }
849
849
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AuthenticationRequiredComponent, decorators: [{
850
850
  type: Component,
@@ -870,7 +870,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
870
870
  ImageDirectiveDirective,
871
871
  ObjectPositionDirective,
872
872
  PositionLayoutDirectiveDirective
873
- ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div [spacingAround]=\"stylesLayout\">\r\n <div class=\"login_card d-flex align-items-center justify-content-center flex-column\"\r\n [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\r\n <div class=\"area w-100\">\r\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n <li></li>\r\n </ul>\r\n </div>\r\n\r\n <!-- ===== AUTH CARD ===== -->\r\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [class.single-pane]=\"!data?.content?.image?.showImage\"\r\n [simpoCorner]=\"styles?.corners\">\r\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"auth-card\" [class.single-pane]=\"!data?.content?.image?.showImage\" [id]=\"data?.id\"\r\n [simpoPositionLayoutDirective]=\"styles?.positionLayout\">\r\n <div class=\"auth-image\" *ngIf=\"data?.content?.image?.showImage\">\r\n <img loading=\"lazy\" [src]=\"data?.content?.image?.url\" [attr.alt]=\"data?.content?.image?.altText || ''\"\r\n class=\"auth-hero-image\" [simpoImageDirective]=\"styles?.image\" [appImageEditor]=\"edit ?? false\"\r\n [imageData]=\"data?.content?.image\" [sectionId]=\"data?.id\"\r\n [class]=\"data?.id+(data?.content?.image?.id || '')\" [id]=\"data?.id\"\r\n [simpoObjectPosition]=\"data?.content?.image?.position\">\r\n </div>\r\n <div class=\"auth-form\">\r\n <ng-container [ngSwitch]=\"authScreen\">\r\n <ng-container *ngSwitchCase=\"'PHONE'\">\r\n <div class=\"d-flex justify-content-center align-items-center\">\r\n <div class=\"icon d-flex justify-content-center align-items-center cursor-pointer\"\r\n (click)=\"backToHome()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </div>\r\n <div\r\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\r\n </div>\r\n </div>\r\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\r\n\r\n <div class=\"login-input-section mt-4\">\r\n <p class=\"text-center mb-3\" style=\"font-size:14px; color:#555;\">Unlock coupons, profile and much\r\n more\r\n </p>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-email-phone-input\">Email / Mobile Number</label>\r\n <input id=\"auth-email-phone-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\r\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\r\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\" (keyup.enter)=\"sendOTP()\" />\r\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter a valid email or\r\n 10-digit\r\n mobile number*</span>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[2]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[2]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[2]?.id ?? ''\"\r\n (click)=\"sendOTP()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content?.label\r\n :\r\n 'SEND\r\n OTP' }}\r\n </button>\r\n\r\n <div class=\"mt-3 text-center\">\r\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\r\n (click)=\"authScreen = 'PASSWORD'\">\r\n Login with Password\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'OTP'\">\r\n <div\r\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\r\n </div>\r\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\r\n\r\n <div class=\"login-input-section mt-4\">\r\n <p class=\"text-center mb-3 clr-black\" style=\"font-size:14px;\">\r\n Enter 6-digit OTP sent to {{emailOrNumber}}\r\n </p>\r\n\r\n <div class=\"d-flex align-items-center justify-content-between otp_input gap-1 mb-3\">\r\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\r\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\r\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\r\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center mb-3\">\r\n <span *ngIf=\"resendCountdown > 0\" class=\"clr-black fs-13\"\r\n style=\"font-weight:700; letter-spacing:0.04em;\">\r\n RESEND IN &nbsp;{{formatCountdown(resendCountdown)}}\r\n </span>\r\n <span *ngIf=\"resendCountdown === 0\" class=\"cursor-pointer clr-black fs-13\"\r\n style=\"font-weight:700; letter-spacing:0.04em; text-decoration:underline;\"\r\n (click)=\"resendOTPNew()\">\r\n RESEND OTP\r\n </span>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[1]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[1]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[1]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[1]?.id ?? ''\"\r\n (click)=\"verifyOTPNew()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content?.label\r\n :\r\n 'VERIFY OTP' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'REGISTER'\">\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">REGISTER</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"auth-fullname-input\">Full Name</label>\r\n <input id=\"auth-fullname-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\"\r\n placeholder=\"Jane Doe\">\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-phone-input\">Phone Number</label>\r\n <div class=\"d-flex align-items-center w-100 password-input-container\">\r\n <span class=\"clr-black\"\r\n style=\"font-size:14px; font-weight:500; padding: 0 8px 0 12px; white-space:nowrap;\">+91\r\n |</span>\r\n <input id=\"auth-reg-phone-input\" type=\"tel\" class=\"b-none clr-black w-90\"\r\n [(ngModel)]=\"phoneNumber\" placeholder=\"9876543210\" maxlength=\"10\" inputmode=\"numeric\"\r\n style=\"outline:none; font-size:14px;\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-email-input\">Email</label>\r\n <input id=\"auth-email-input\" type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\"\r\n placeholder=\"janedoe@gmail.com\" (ngModelChange)=\"onEmailChange()\"\r\n [style.borderColor]=\"!emailCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-password-input\">Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-reg-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\">\r\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\r\n (click)=\"passwordHidden = !passwordHidden\">\r\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-reg-conf-password-input\">Confirm Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-reg-conf-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"confPassword\" placeholder=\"Confirm Password\">\r\n </div>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\r\n (click)=\"registerUser()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\r\n :\r\n 'CONTINUE' }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'PASSWORD'\">\r\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\r\n style=\"padding: 1.5rem 2rem 0.5rem;\">\r\n <p class=\"mb-0 fs-20-fw-600 clr-black\">LOGIN</p>\r\n </div>\r\n\r\n <div class=\"d-flex w-100 signup-input-container flex-column\">\r\n <div class=\"input-box\">\r\n <label for=\"auth-pwd-email-input\">Email / Mobile Number</label>\r\n <input id=\"auth-pwd-email-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\r\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\r\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\">\r\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter valid email or\r\n 10-digit\r\n mobile number*</span>\r\n </div>\r\n\r\n <div class=\"input-box\">\r\n <label for=\"auth-login-password-input\">Password</label>\r\n <div class=\"password-input-container d-flex align-items-center w-100\"\r\n style=\"padding-right: 12px;\">\r\n <input id=\"auth-login-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\r\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\"\r\n (keyup.enter)=\"loginWithPassword()\">\r\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\r\n (click)=\"passwordHidden = !passwordHidden\">\r\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\r\n </mat-icon>\r\n </div>\r\n </div>\r\n\r\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\r\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\r\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\r\n (click)=\"loginWithPassword()\" [disabled]=\"buttonLoading\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\r\n *ngIf=\"buttonLoading\"></span>\r\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\r\n :\r\n 'LOGIN' }}\r\n </button>\r\n\r\n <div class=\"mt-3 text-center\">\r\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\r\n (click)=\"authScreen = 'PHONE'\">\r\n Login with OTP\r\n </span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\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 <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n\r\n</section>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:min(860px,92vw);margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.main-panel.single-pane{width:450px}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0;position:relative;transition:all .4s ease;margin:unset!important;overflow:hidden}.auth-card{display:flex;align-items:stretch;min-height:420px}.auth-card.single-pane{min-height:unset}.auth-image{flex:0 0 48%;background:#f2f2f2}.auth-hero-image{width:100%;height:100%;display:block;object-fit:cover}.auth-form{flex:1;display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:1.5rem}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:radial-gradient(circle at 30% 30%,rgba(var(--accent-rgb, 102, 126, 234),.22),rgba(var(--accent-rgb, 102, 126, 234),.06));box-shadow:0 0 20px 4px rgba(var(--accent-rgb, 102, 126, 234),.15),inset 0 0 12px #ffffff1f;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:50%;border:1px solid rgba(var(--accent-rgb, 102, 126, 234),.18);animation:floatUp 25s linear infinite,pulse 4s ease-in-out infinite alternate;bottom:-150px}.circles li:nth-child(1){left:10%;width:90px;height:90px;animation-delay:0s;animation-duration:22s}.circles li:nth-child(2){left:25%;width:30px;height:30px;animation-delay:3s;animation-duration:14s}.circles li:nth-child(3){left:45%;width:60px;height:60px;animation-delay:6s;animation-duration:18s}.circles li:nth-child(4){left:65%;width:110px;height:110px;animation-delay:1s;animation-duration:28s}.circles li:nth-child(5){left:80%;width:25px;height:25px;animation-delay:4s;animation-duration:12s}.circles li:nth-child(6){left:55%;width:70px;height:70px;animation-delay:9s;animation-duration:20s}.circles li:nth-child(7){left:35%;width:140px;height:140px;animation-delay:2s;animation-duration:32s}.circles li:nth-child(8){left:70%;width:40px;height:40px;animation-delay:12s;animation-duration:40s}.circles li:nth-child(9){left:5%;width:20px;height:20px;animation-delay:5s;animation-duration:30s}.circles li:nth-child(10){left:90%;width:55px;height:55px;animation-delay:7s;animation-duration:24s}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:.8}20%{opacity:1}80%{opacity:.7}to{transform:translateY(-110vh) rotate(540deg);opacity:0}}@keyframes pulse{0%{box-shadow:0 0 12px 2px rgba(var(--accent-rgb, 102, 126, 234),.1)}to{box-shadow:0 0 32px 10px rgba(var(--accent-rgb, 102, 126, 234),.28)}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}.login_card{padding:10px}}@media screen and (max-width: 900px){.main-panel{width:min(760px,94vw)}}@media screen and (max-width: 768px){.main-panel,.main-panel.single-pane{width:100%;margin:1.25rem auto}.auth-card{flex-direction:column;min-height:unset}.auth-image{width:100%;min-height:220px}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}.login_card{height:100vh}\n"] }]
873
+ ], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\n\n<section [id]=\"data?.id\" class=\"total-container\" simpoHover (hovering)=\"showEditTabs($event)\">\n <div [spacingAround]=\"stylesLayout\">\n <div class=\"login_card d-flex align-items-center justify-content-center flex-column\"\n [simpoBackground]=\"styles?.background\" [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\">\n <div class=\"area w-100\">\n <ul class=\"circles\" [simpoOverlay]=\"styles?.background\" [id]=\"data?.id\">\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n <li></li>\n </ul>\n </div>\n\n <!-- ===== AUTH CARD ===== -->\n <div [id]=\"data?.id\" class=\"main-panel d-flex gap-2\" [class.single-pane]=\"!data?.content?.image?.showImage\"\n [simpoCorner]=\"styles?.corners\">\n <div class=\"panel w-100\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\" [simpoCorner]=\"styles?.corners\">\n <div class=\"auth-card\" [class.single-pane]=\"!data?.content?.image?.showImage\" [id]=\"data?.id\"\n [simpoPositionLayoutDirective]=\"styles?.positionLayout\">\n <div class=\"auth-image\" *ngIf=\"data?.content?.image?.showImage\">\n <img loading=\"lazy\" [src]=\"data?.content?.image?.url\" [attr.alt]=\"data?.content?.image?.altText || ''\"\n class=\"auth-hero-image\" [simpoImageDirective]=\"styles?.image\" [appImageEditor]=\"edit ?? false\"\n [imageData]=\"data?.content?.image\" [sectionId]=\"data?.id\"\n [class]=\"data?.id+(data?.content?.image?.id || '')\" [id]=\"data?.id\"\n [simpoObjectPosition]=\"data?.content?.image?.position\">\n </div>\n <div class=\"auth-form\">\n <ng-container [ngSwitch]=\"authScreen\">\n <ng-container *ngSwitchCase=\"'PHONE'\">\n <div class=\"d-flex justify-content-center align-items-center\">\n <div class=\"icon d-flex justify-content-center align-items-center cursor-pointer\"\n (click)=\"backToHome()\">\n <mat-icon>arrow_back</mat-icon>\n </div>\n <div\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\n </div>\n </div>\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\n\n <div class=\"login-input-section mt-4\">\n <p class=\"text-center mb-3\" style=\"font-size:14px; color:#555;\">Unlock coupons, profile and much\n more\n </p>\n\n <div class=\"input-box\">\n <label for=\"auth-email-phone-input\">Email / Mobile Number</label>\n <input id=\"auth-email-phone-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\" (keyup.enter)=\"sendOTP()\" />\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter a valid email or\n 10-digit\n mobile number*</span>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[2]?.content\"\n [buttonStyle]=\"data?.action?.buttons[2]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[2]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[2]?.id ?? ''\"\n (click)=\"sendOTP()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[2]?.content?.label?.length > 0 ? data?.action?.buttons[2]?.content?.label\n :\n 'SEND\n OTP' }}\n </button>\n\n <div class=\"mt-3 text-center\">\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\n (click)=\"authScreen = 'PASSWORD'\">\n Login with Password\n </span>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'OTP'\">\n <div\n class=\"d-flex text-center flex-column align-items-center justify-content-center mb-2 login-main-section\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 clr-black login-text\">LOGIN OR SIGNUP</p>\n </div>\n <hr class=\"mx-0 my-0\" style=\"border-color: #e8e8e8;\">\n\n <div class=\"login-input-section mt-4\">\n <p class=\"text-center mb-3 clr-black\" style=\"font-size:14px;\">\n Enter 6-digit OTP sent to {{emailOrNumber}}\n </p>\n\n <div class=\"d-flex align-items-center justify-content-between otp_input gap-1 mb-3\">\n <div class=\"d-flex gap-2 w-100 justify-content-between\">\n <input *ngFor=\"let control of otpControls.controls; let i = index\" #otpInput\n class=\"form-control text-center otp-box clr-black\" maxlength=\"1\" inputmode=\"numeric\"\n [formControl]=\"control\" (input)=\"onInput(i)\" (keydown)=\"onKeyDown($event, i)\" />\n </div>\n </div>\n\n <div class=\"text-center mb-3\">\n <span *ngIf=\"resendCountdown > 0\" class=\"clr-black fs-13\"\n style=\"font-weight:700; letter-spacing:0.04em;\">\n RESEND IN &nbsp;{{formatCountdown(resendCountdown)}}\n </span>\n <span *ngIf=\"resendCountdown === 0\" class=\"cursor-pointer clr-black fs-13\"\n style=\"font-weight:700; letter-spacing:0.04em; text-decoration:underline;\"\n (click)=\"resendOTPNew()\">\n RESEND OTP\n </span>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[1]?.content\"\n [buttonStyle]=\"data?.action?.buttons[1]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[1]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[1]?.id ?? ''\"\n (click)=\"verifyOTPNew()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[1]?.content?.label?.length > 0 ? data?.action?.buttons[1]?.content?.label\n :\n 'VERIFY OTP' }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'REGISTER'\">\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 fs-20-fw-600 clr-black\">REGISTER</p>\n </div>\n\n <div class=\"d-flex w-100 signup-input-container flex-column\">\n <div class=\"input-box\">\n <label for=\"auth-fullname-input\">Full Name</label>\n <input id=\"auth-fullname-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"userName\"\n placeholder=\"Jane Doe\">\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-phone-input\">Phone Number</label>\n <div class=\"d-flex align-items-center w-100 password-input-container\">\n <span class=\"clr-black\"\n style=\"font-size:14px; font-weight:500; padding: 0 8px 0 12px; white-space:nowrap;\">+91\n |</span>\n <input id=\"auth-reg-phone-input\" type=\"tel\" class=\"b-none clr-black w-90\"\n [(ngModel)]=\"phoneNumber\" placeholder=\"9876543210\" maxlength=\"10\" inputmode=\"numeric\"\n style=\"outline:none; font-size:14px;\" />\n </div>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-email-input\">Email</label>\n <input id=\"auth-email-input\" type=\"email\" class=\"clr-black\" [(ngModel)]=\"email\"\n placeholder=\"janedoe@gmail.com\" (ngModelChange)=\"onEmailChange()\"\n [style.borderColor]=\"!emailCheck ? '' : 'red'\">\n <span class=\"f-12\" *ngIf=\"emailCheck\" [style.color]=\"'red'\">Please Enter valid email*</span>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-password-input\">Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-reg-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\">\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\n (click)=\"passwordHidden = !passwordHidden\">\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\n </mat-icon>\n </div>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-reg-conf-password-input\">Confirm Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-reg-conf-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"confPassword\" placeholder=\"Confirm Password\">\n </div>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\n (click)=\"registerUser()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\n :\n 'CONTINUE' }}\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'PASSWORD'\">\n <div class=\"d-flex flex-column align-items-center justify-content-center mb-3\"\n style=\"padding: 1.5rem 2rem 0.5rem;\">\n <p class=\"mb-0 fs-20-fw-600 clr-black\">LOGIN</p>\n </div>\n\n <div class=\"d-flex w-100 signup-input-container flex-column\">\n <div class=\"input-box\">\n <label for=\"auth-pwd-email-input\">Email / Mobile Number</label>\n <input id=\"auth-pwd-email-input\" type=\"text\" class=\"clr-black\" [(ngModel)]=\"emailOrNumber\"\n placeholder=\"janedoe@gmail.com / 9876543210\" (ngModelChange)=\"onEmailOrNumberChange()\"\n [style.borderColor]=\"!emailOrNumberCheck ? '' : 'red'\">\n <span class=\"f-12\" *ngIf=\"emailOrNumberCheck\" [style.color]=\"'red'\">Please enter valid email or\n 10-digit\n mobile number*</span>\n </div>\n\n <div class=\"input-box\">\n <label for=\"auth-login-password-input\">Password</label>\n <div class=\"password-input-container d-flex align-items-center w-100\"\n style=\"padding-right: 12px;\">\n <input id=\"auth-login-password-input\" [type]=\"passwordHidden ? 'password' : 'text'\"\n class=\"b-none clr-black w-100\" [(ngModel)]=\"password\" placeholder=\"Password\"\n (keyup.enter)=\"loginWithPassword()\">\n <mat-icon style=\"cursor: pointer; color: black; font-size: 20px; text-align: center\"\n (click)=\"passwordHidden = !passwordHidden\">\n {{passwordHidden ? 'visibility' : 'visibility_off'}}\n </mat-icon>\n </div>\n </div>\n\n <button class=\"send-btn gap-2 w-100 py-2\" [buttonData]=\"data?.action?.buttons[0]?.content\"\n [buttonStyle]=\"data?.action?.buttons[0]?.styles\" simpoButtonDirective\n [id]=\"data?.id+(data?.action?.buttons[0]?.id || '')\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"data?.styles?.background\"\n [appButtonEditor]=\"edit ?? false\" [buttonId]=\"data?.action?.buttons[0]?.id ?? ''\"\n (click)=\"loginWithPassword()\" [disabled]=\"buttonLoading\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"\n *ngIf=\"buttonLoading\"></span>\n {{ data?.action?.buttons[0]?.content?.label?.length > 0 ? data?.action?.buttons[0]?.content?.label\n :\n 'LOGIN' }}\n </button>\n\n <div class=\"mt-3 text-center\">\n <span class=\"cursor-pointer clr-black fs-13\" style=\"font-weight:700; text-decoration:underline;\"\n (click)=\"authScreen = 'PHONE'\">\n Login with OTP\n </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n\n</section>", styles: [".total-container{position:relative;height:auto;perspective:1200px;overflow:hidden}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.fa{font-family:\"Font Awesome 6 Free\"}.otp_input span{font-size:11px}.otp_input span:hover{text-decoration:underline}label,.eye{color:#000}.sign-up span:hover{text-decoration:underline}.eye{padding:6px;font-size:16px}.w-90{width:90%}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.main-panel{width:min(860px,92vw);margin:2rem auto;background:#ffffff26;box-shadow:0 25px 50px -12px #00000040;backface-visibility:hidden}.main-panel.single-pane{width:450px}.login-input-section{padding:0 2rem}.panel{background:#fffffff2;padding:0;position:relative;transition:all .4s ease;margin:unset!important;overflow:hidden}.auth-card{display:flex;align-items:stretch;min-height:420px}.auth-card.single-pane{min-height:unset}.auth-image{flex:0 0 48%;background:#f2f2f2}.auth-hero-image{width:100%;height:100%;display:block;object-fit:cover}.auth-form{flex:1;display:flex;flex-direction:column;justify-content:flex-start;padding-bottom:1.5rem}.input-box{display:flex;flex-direction:column;margin-bottom:.75rem;position:relative;transform-style:preserve-3d;gap:5px}.input-box label{transform:translateZ(20px);margin-left:5px}.input-box input{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);padding:.75rem;border-radius:12px;appearance:none;outline:none}.button{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;transform-style:preserve-3d;overflow:hidden;border:none;padding:.5rem 2rem;font-weight:600}.button:before{content:\"\";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);transition:left .7s ease}.button:hover{transform:translateY(-3px) translateZ(35px);box-shadow:0 15px 30px -5px var(--accent-shadow, rgba(102, 126, 234, .5))}.button:hover:before{left:100%}.button:active{transform:translateY(-1px) translateZ(25px)}.circles{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.circles li{position:absolute;display:block;list-style:none;width:20px;height:20px;background:radial-gradient(circle at 30% 30%,rgba(var(--accent-rgb, 102, 126, 234),.22),rgba(var(--accent-rgb, 102, 126, 234),.06));box-shadow:0 0 20px 4px rgba(var(--accent-rgb, 102, 126, 234),.15),inset 0 0 12px #ffffff1f;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-radius:50%;border:1px solid rgba(var(--accent-rgb, 102, 126, 234),.18);animation:floatUp 25s linear infinite,pulse 4s ease-in-out infinite alternate;bottom:-150px}.circles li:nth-child(1){left:10%;width:90px;height:90px;animation-delay:0s;animation-duration:22s}.circles li:nth-child(2){left:25%;width:30px;height:30px;animation-delay:3s;animation-duration:14s}.circles li:nth-child(3){left:45%;width:60px;height:60px;animation-delay:6s;animation-duration:18s}.circles li:nth-child(4){left:65%;width:110px;height:110px;animation-delay:1s;animation-duration:28s}.circles li:nth-child(5){left:80%;width:25px;height:25px;animation-delay:4s;animation-duration:12s}.circles li:nth-child(6){left:55%;width:70px;height:70px;animation-delay:9s;animation-duration:20s}.circles li:nth-child(7){left:35%;width:140px;height:140px;animation-delay:2s;animation-duration:32s}.circles li:nth-child(8){left:70%;width:40px;height:40px;animation-delay:12s;animation-duration:40s}.circles li:nth-child(9){left:5%;width:20px;height:20px;animation-delay:5s;animation-duration:30s}.circles li:nth-child(10){left:90%;width:55px;height:55px;animation-delay:7s;animation-duration:24s}@keyframes floatUp{0%{transform:translateY(0) rotate(0);opacity:.8}20%{opacity:1}80%{opacity:.7}to{transform:translateY(-110vh) rotate(540deg);opacity:0}}@keyframes pulse{0%{box-shadow:0 0 12px 2px rgba(var(--accent-rgb, 102, 126, 234),.1)}to{box-shadow:0 0 32px 10px rgba(var(--accent-rgb, 102, 126, 234),.28)}}.f-12{font-size:12px}@media screen and (max-width : 475px){.w-90{width:87%}.login_card{padding:10px}}@media screen and (max-width: 900px){.main-panel{width:min(760px,94vw)}}@media screen and (max-width: 768px){.main-panel,.main-panel.single-pane{width:100%;margin:1.25rem auto}.auth-card{flex-direction:column;min-height:unset}.auth-image{width:100%;min-height:220px}}.no-arrows::-webkit-outer-spin-button,.no-arrows::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.clr-black{color:#000!important}.signup-input-container{padding:0 2rem}.fs-30-fw-600{font-size:30px;font-weight:600}.fs-20-fw-600{font-size:20px;font-weight:600}.fs-14-col-grey{font-size:14px;color:#979797}.fs-13{font-size:13px}.fs-14{font-size:14px}.password-input-container{transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;border:1px solid rgba(0,0,0,.08);border-radius:12px;appearance:none;outline:none}.b-none{border:none!important}.password-text-container{padding-left:.5rem;font-size:13px;margin-bottom:.3rem;color:#000}.password-text-container img{width:15px}.password-text-container .password-config{font-size:13px;color:#686f78}.tabs{display:grid;grid-template-columns:1fr 1fr;overflow:hidden;border-radius:18px 15px 0 0;margin-bottom:2rem}.login-main-section .login-text{font-size:20px;font-weight:600}.tab{padding:1rem;font-size:clamp(13px,3.2vw,15px)!important;font-weight:600;text-align:center;cursor:pointer;background:#d9d9d9;border:none;letter-spacing:.01em;transition:background .2s,color .2s;-webkit-user-select:none;user-select:none;min-height:48px}.tab:hover{background:#cacaca}.tab.active{background:#1a1a1a;color:#fff}.otp-box{width:55px;height:55px;font-size:20px}h1{font-size:clamp(18px,4.5vw,22px);font-weight:600;color:#1a1a1a;text-align:center;margin-bottom:clamp(20px,5vw,28px);letter-spacing:-.01em}label{font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#333}input[type=email],input[type=password],input[type=text]{width:100%;padding:clamp(10px,2.5vw,12px) clamp(10px,2.5vw,14px);border:1.5px solid #e0e0e0;border-radius:clamp(8px,2vw,12px);font-size:clamp(13px,3.2vw,14px);color:#1a1a1a;background:#fff;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-text-size-adjust:100%}@media (max-width: 400px){input[type=email],input[type=password],input[type=text]{font-size:16px}}input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{border-color:#888;box-shadow:0 0 0 3px #0000000f}input::placeholder{color:transparent}.forgot{display:block;text-align:right;font-size:clamp(11px,2.8vw,13px);font-weight:500;color:#1a1a1a;text-decoration:underline;text-underline-offset:2px;margin-top:clamp(6px,1.5vw,8px);cursor:pointer;touch-action:manipulation}.forgot:hover{color:#555}.submit-btn{display:block;width:100%;padding:clamp(13px,3.2vw,15px);margin-top:clamp(16px,4vw,24px);background:#c0bfbf;color:#fff;border:none;border-radius:50px;font-size:clamp(14px,3.5vw,15px);font-weight:600;cursor:pointer;letter-spacing:.01em;transition:background .2s;touch-action:manipulation;min-height:48px}.submit-btn:hover{background:#999}.submit-btn:active{background:#888}.login_card{height:100vh}\n"] }]
874
874
  }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.Router }, { type: i3.MessageService }, { type: i4.StorageServiceService }, { type: i5.MatDialog }, { type: i2.ActivatedRoute }, { type: i0.ElementRef }, { type: i6.AnalyticsService }, { type: i5.MatDialogRef, decorators: [{
875
875
  type: Optional
876
876
  }] }, { type: i7.MatBottomSheetRef, decorators: [{
@@ -887,4 +887,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
887
887
  type: ViewChildren,
888
888
  args: ['otpInput']
889
889
  }] } });
890
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMv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LFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFFcEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIsb0JBQW9CO3dCQUNwQix1QkFBdUI7d0JBQ3ZCLHVCQUF1Qjt3QkFDdkIsZ0NBQWdDO3FCQUNqQyxhQUNVLENBQUMsY0FBYyxDQUFDOzswQkEwRHhCLFFBQVE7OzBCQUNSLFFBQVE7eUNBckRGLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkErRG9CLE1BQU07c0JBQS9CLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9wdGlvbmFsLCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IERldmljZUluZm8gfSBmcm9tICcuLi8uLi9zdHlsZXMvdXNlci5tb2RhbCc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0Qm90dG9tU2hlZXRSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ib3R0b20tc2hlZXQnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGVsLCBBdXRoZW50aWNhdGlvblN0eWxlc01vZGVsIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbi1yZXF1aXJlZC5tb2RlbCc7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRlbnRGaXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvY29udGVudC1maXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTcGFjaW5nQXJvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctYXJvdW5kLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi8uLi8uLi9zZWN0aW9ucy9CYXNlU2VjdGlvbic7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvc2ltcG8tYnV0dG9uL3NpbXBvLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSW1hZ2VFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1wb3NpdGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQb3NpdGlvbkxheW91dERpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9wb3NpdGlvbi1sYXlvdXQtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWF1dGhlbnRpY2F0aW9uLXJlcXVpcmVkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVG9hc3RNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgU2ltcG9CdXR0b25Db21wb25lbnQsXHJcblxyXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBDb3JuZXJEaXJlY3RpdmUsXHJcbiAgICBIb3ZlckRpcmVjdGl2ZSxcclxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXHJcbiAgICBTcGFjaW5nQXJvdW5kRGlyZWN0aXZlLFxyXG4gICAgQnV0dG9uRWRpdG9yRGlyZWN0aXZlLFxyXG4gICAgSW1hZ2VFZGl0b3JEaXJlY3RpdmUsXHJcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIE9iamVjdFBvc2l0aW9uRGlyZWN0aXZlLFxyXG4gICAgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmVcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hdXRoZW50aWNhdGlvbi1yZXF1aXJlZC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25SZXF1aXJlZENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIHtcclxuICAvLyBwcml2YXRlIGVtYWlsVGltZXI6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgZGF0YT86IEF1dGhlbnRpY2F0aW9uTW9kZWwgfCBhbnk7XHJcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XHJcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGVsZXRlPzogYm9vbGVhbjtcclxuICBzdHlsZXM/OiBBdXRoZW50aWNhdGlvblN0eWxlc01vZGVsO1xyXG4gIGJ1dHRvbj86IEJ1dHRvbk1vZGVsXHJcbiAgYnV0dG9uSWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBhdXRoU2NyZWVuOiAnUEhPTkUnIHwgJ09UUCcgfCAnUkVHSVNURVInIHwgJ1BBU1NXT1JEJyA9ICdQSE9ORSc7XHJcbiAgcHJpdmF0ZSBtb2JpbGVUaW1lcjogYW55O1xyXG4gIHB1YmxpYyBlbWFpbDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgbW9iaWxlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyBwaG9uZU51bWJlcjogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgb3RwOiBzdHJpbmcgPSBcIlwiO1xyXG4gIG90cENvbnRyb2xzID0gbmV3IEZvcm1BcnJheShbXHJcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgIG5ldyBGb3JtQ29udHJvbCgnJylcclxuICBdKTtcclxuXHJcbiAgLy8gUmVzZW5kIGNvdW50ZG93blxyXG4gIHJlc2VuZENvdW50ZG93bjogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIHJlc2VuZEludGVydmFsOiBhbnk7XHJcbiAgaXNFeGlzdGluZ1VzZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBwYXNzd29yZDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgY29uZlBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyB1c2VyTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgYnV0dG9uTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBidXNpbmVzc0lkOiBzdHJpbmcgfCBudWxsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpO1xyXG4gIHB1YmxpYyBpc09UUFZlcmlmaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHBhc3N3b3JkSGlkZGVuOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aENvdW50OiBudW1iZXIgPSAwO1xyXG4gIHB1YmxpYyBwYXNzd29yZFN0cmVuZ3RoID0gW1xyXG4gICAgeyB0eXBlOiBcIm1pbmltdW0gOCBjaGFyYWN0ZXJcIiwgYWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIFVQUEVSQ0FTRVwiLCBhY3RpdmU6IGZhbHNlIH0sXHJcbiAgICB7IHR5cGU6IFwiYXRsZWFzdCBvbmUgbG93ZXJjYXNlXCIsIGFjdGl2ZTogZmFsc2UgfSxcclxuICAgIHsgdHlwZTogXCJhdGxlYXN0IG9uZSBudW1iZXJcIiwgYWN0aXZlOiBmYWxzZSB9LFxyXG4gIF1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcclxuXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBib3R0b21zaGVldFJlZjogTWF0Qm90dG9tU2hlZXRSZWY8QXV0aGVudGljYXRpb25SZXF1aXJlZENvbXBvbmVudD4sXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJ1c2VyIGF1dGhlbnRpY2F0aW5nIGJhY2tcIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSlcclxuICB9XHJcblxyXG4gIHNpZ25VcEVuYWJsZWQ6IGFueSA9IHRydWU7XHJcbiAgcHJvY2VlZFRvQ2hlY2tvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9jZWVkVG9FbnJvbGxtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgdHJ5QXRIb21lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdHJ5QXRIb21lTW9kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgbmF2aWdhdGVUb1NjaGVtZURldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdXJyZW50UGFnZTogc3RyaW5nID0gXCJcIjtcclxuICBAVmlld0NoaWxkcmVuKCdvdHBJbnB1dCcpIGlucHV0cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xyXG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ2NhcnQnXSlcclxuICAgICAgICB0aGlzLnByb2NlZWRUb0NoZWNrb3V0ID0gdHJ1ZTtcclxuICAgICAgaWYgKHBhcmFtICYmIHBhcmFtWydyZWRpcmVjdFRvJ10pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3JlZGlyZWN0VG8nXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3NjaGVtZXMnXSkge1xyXG4gICAgICAgIHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcmFtICYmIHBhcmFtWyd0cnlBdEhvbWUnXSkge1xyXG4gICAgICAgIHRoaXMudHJ5QXRIb21lID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMudHJ5QXRIb21lTW9kZSA9IHBhcmFtWydtb2RlJ10gPz8gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3NjaGVtZURldGFpbCddKSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscyA9IHRydWVcclxuICAgICAgfVxyXG5cclxuICAgIH0pXHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG4gICAgdGhpcy5idXR0b24gPSB0aGlzLmRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXTtcclxuICAgIHRoaXMuYnV0dG9uSWQgPSAodGhpcy5kYXRhID8gdGhpcy5kYXRhLmlkIDogJycpICsgKHRoaXMuYnV0dG9uID8gdGhpcy5idXR0b24uaWQgOiAnJyk7XHJcbiAgICB0aGlzLnNldEFjY2VudFJnYlZhcigpO1xyXG5cclxuICAgIGxldCBlbmFibGVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NpZ25VcEVuYWJsZWQnKTtcclxuICAgIGlmIChlbmFibGVkICE9IG51bGwpXHJcbiAgICAgIHRoaXMuc2lnblVwRW5hYmxlZCA9IGVuYWJsZWQgPT09ICd0cnVlJztcclxuXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHsgfVxyXG5cclxuICAvKiogU2V0cyAtLWFjY2VudC1yZ2IgQ1NTIHZhcmlhYmxlIHNvIGFuaW1hdGVkIGNpcmNsZXMgbWF0Y2ggdGhlIHVzZXIncyBicmFuZCBjb2xvciAqL1xyXG4gIHByaXZhdGUgc2V0QWNjZW50UmdiVmFyKCkge1xyXG4gICAgY29uc3QgaGV4ID0gdGhpcy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yID8/ICcjNjY3ZWVhJztcclxuICAgIGNvbnN0IGNsZWFuSGV4ID0gaGV4LnJlcGxhY2UoJyMnLCAnJyk7XHJcbiAgICBpZiAoY2xlYW5IZXgubGVuZ3RoID09PSA2KSB7XHJcbiAgICAgIGNvbnN0IHIgPSBwYXJzZUludChjbGVhbkhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgICAgY29uc3QgZyA9IHBhcnNlSW50KGNsZWFuSGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xyXG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XHJcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY2NlbnQtcmdiJywgYCR7cn0sICR7Z30sICR7Yn1gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjYW5Hb0JhY2soKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7IC8vIHBob25lIGlzIHRoZSBmaXJzdCBzY3JlZW47IG5vIGJhY2sgZnJvbSBwaG9uZVxyXG4gIH1cclxuXHJcbiAgZ29CYWNrKCkge1xyXG4gICAgaWYgKHRoaXMuYXV0aFNjcmVlbiA9PT0gJ09UUCcpIHRoaXMuYXV0aFNjcmVlbiA9ICdQSE9ORSc7XHJcbiAgICBlbHNlIGlmICh0aGlzLmF1dGhTY3JlZW4gPT09ICdSRUdJU1RFUicpIHRoaXMuYXV0aFNjcmVlbiA9ICdPVFAnO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VBdXRoKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgZWxzZSBpZiAodGhpcy5ib3R0b21zaGVldFJlZikgdGhpcy5ib3R0b21zaGVldFJlZi5kaXNtaXNzKCk7XHJcbiAgICBlbHNlIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0Q291bnRkb3duKHNlY3M6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzZWNzIC8gNjApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IHMgPSAoc2VjcyAlIDYwKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICByZXR1cm4gYCR7bX06JHtzfWA7XHJcbiAgfVxyXG5cclxuICBzdGFydFJlc2VuZFRpbWVyKHNlY29uZHM6IG51bWJlciA9IDYwKSB7XHJcbiAgICB0aGlzLnJlc2VuZENvdW50ZG93biA9IHNlY29uZHM7XHJcbiAgICBpZiAodGhpcy5yZXNlbmRJbnRlcnZhbCkgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2VuZEludGVydmFsKTtcclxuICAgIHRoaXMucmVzZW5kSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzZW5kQ291bnRkb3duLS07XHJcbiAgICAgIGlmICh0aGlzLnJlc2VuZENvdW50ZG93biA8PSAwKSB7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2VuZEludGVydmFsKTtcclxuICAgICAgICB0aGlzLnJlc2VuZENvdW50ZG93biA9IDA7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgc2VuZE9UUCgpIHtcclxuICAgIGlmICghdGhpcy5lZGl0KSB7XHJcbiAgICAgIGlmICghdGhpcy5pc0VtYWlsT3JOdW1iZXJWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgSW5wdXQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBvciAxMC1kaWdpdCBtb2JpbGUgbnVtYmVyJyB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwVjIodGhpcy5lbWFpbE9yTnVtYmVyLCB0aGlzLmJ1c2luZXNzSWQgPz8gJycpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNFeGlzdGluZ1VzZXIgPSByZXNwb25zZT8uZGF0YT8uaXNFeGlzdGluZ1VzZXIgPz8gdHJ1ZTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmF1dGhTY3JlZW4gPSAnT1RQJztcclxuICAgICAgICB0aGlzLnN0YXJ0UmVzZW5kVGltZXIoNjApO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ09UUCBTZW50JywgZGV0YWlsOiByZXNwb25zZT8uZGF0YT8ubWVzc2FnZSA/PyAoJ09UUCBzZW50IHRvICcgKyB0aGlzLmVtYWlsT3JOdW1iZXIpIH0pO1xyXG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2VuZE9UUE5ldygpIHtcclxuICAgIHRoaXMucmVzdFNlcnZpY2Uuc2VuZE90cFYyKHRoaXMuZW1haWxPck51bWJlciwgdGhpcy5idXNpbmVzc0lkID8/ICcnKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zdGFydFJlc2VuZFRpbWVyKDYwKTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQIFJlc2VudCcsIGRldGFpbDogcmVzcG9uc2U/LmRhdGE/Lm1lc3NhZ2UgPz8gKCdOZXcgT1RQIHNlbnQgdG8gJyArIHRoaXMuZW1haWxPck51bWJlcikgfSk7XHJcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5T1RQTmV3KCkge1xyXG4gICAgaWYgKCF0aGlzLmVkaXQpIHtcclxuICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xyXG4gICAgICBpZiAodGhpcy5vbmVUaW1lUGFzc3dvcmQubGVuZ3RoIDwgNikge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdPVFAgUmVxdWlyZWQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgdGhlIDYtZGlnaXQgT1RQJyB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gJycsXHJcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5lbWFpbE9yTnVtYmVyLFxyXG4gICAgICAgIG90cDogdGhpcy5vbmVUaW1lUGFzc3dvcmQsXHJcbiAgICAgICAgZGV2aWNlSW5mbzogbnVsbFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeU90cFYyKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZsb3cgPSByZXNwb25zZS5kYXRhPy5mbG93O1xyXG5cclxuICAgICAgICBpZiAoZmxvdyA9PT0gJ1NJR05VUCcpIHtcclxuICAgICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hdXRoU2NyZWVuID0gJ1JFR0lTVEVSJztcclxuXHJcbiAgICAgICAgICAvLyBQcmVmaWxsIGVtYWlsIG9yIHBob25lIGJhc2VkIG9uIHJlZ2V4XHJcbiAgICAgICAgICBpZiAoL15bNi05XVxcZHs5fSQvLnRlc3QodGhpcy5lbWFpbE9yTnVtYmVyKSkge1xyXG4gICAgICAgICAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5lbWFpbE9yTnVtYmVyO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lbWFpbCA9IHRoaXMuZW1haWxPck51bWJlcjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmxvdyA9PT0gJ0xPR0lOJykge1xyXG4gICAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKTtcclxuICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VG9rZW4ocmVzcG9uc2UuZGF0YS5wYXNzYm9va1Rva2VuKTtcclxuICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xyXG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VyPy5yZWZlcnJhbERldGFpbHMpO1xyXG4gICAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXI/LnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnN5bmNUcmlhbENhcnRUb1NlcnZlckRCKHVzZXJEZXRhaWxzLnVzZXJJZCk7XHJcbiAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdMb2dnZWQgSW4nLCBkZXRhaWw6ICdMb2dnZWQgaW4gc3VjY2Vzc2Z1bGx5JyB9KTtcclxuICAgICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJ5QXRIb21lKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lLWFwcG9pbnRtZW50J10sIHRoaXMudHJ5QXRIb21lTW9kZSA/IHsgcXVlcnlQYXJhbXM6IHsgbW9kZTogdGhpcy50cnlBdEhvbWVNb2RlIH0gfSA6IHt9KTtcclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMubmF2aWdhdGVUb1NjaGVtZURldGFpbHMpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKTtcclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jdXJyZW50UGFnZSk7XHJcbiAgICAgICAgICBlbHNlIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclVzZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdCkge1xyXG4gICAgICBpZiAoIXRoaXMudXNlck5hbWUgfHwgdGhpcy51c2VyTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ05hbWUgUmVxdWlyZWQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgeW91ciBmdWxsIG5hbWUnIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzYtOV1cXGR7OX0kLztcclxuICAgICAgaWYgKCFtb2JpbGVSZWdleC50ZXN0KHRoaXMucGhvbmVOdW1iZXIpKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgMTAtZGlnaXQgbW9iaWxlIG51bWJlcicgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5wYXNzd29yZCB8fCB0aGlzLnBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnUGFzc3dvcmQgUmVxdWlyZWQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSBwYXNzd29yZCcgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnBhc3N3b3JkICE9PSB0aGlzLmNvbmZQYXNzd29yZCkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdQYXNzd29yZCBNaXNtYXRjaCcsIGRldGFpbDogJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2gnIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBsZXQgdmVyaWZ5U2lnbkRhdGE6IGFueSA9IHtcclxuICAgICAgICBpZGVudGlmaWVyOiB0aGlzLmVtYWlsT3JOdW1iZXIsXHJcbiAgICAgICAgbmFtZTogdGhpcy51c2VyTmFtZSxcclxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbC50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIG1vYmlsZTogdGhpcy5waG9uZU51bWJlcixcclxuICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcclxuICAgICAgICBjb25maXJtUGFzc3dvcmQ6IHRoaXMuY29uZlBhc3N3b3JkLFxyXG4gICAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuYnVzaW5lc3NJZCA/PyAnJyxcclxuICAgICAgICBidXNpbmVzc05hbWU6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdiTmFtZScpID8/ICcnLFxyXG4gICAgICAgIHJlZmVycmFsSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpID8/IG51bGxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5yZXN0U2VydmljZS5jb21wbGV0ZVNpZ251cFYyKHZlcmlmeVNpZ25EYXRhKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XHJcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpO1xyXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5tZXJnZUFub255bW91c1VzZXIodXNlckRldGFpbHMudXNlcklkKTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdXZWxjb21lIScsIGRldGFpbDogJ1lvdXIgYWNjb3VudCBoYXMgYmVlbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMudHJ5QXRIb21lKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lLWFwcG9pbnRtZW50J10sIHRoaXMudHJ5QXRIb21lTW9kZSA/IHsgcXVlcnlQYXJhbXM6IHsgbW9kZTogdGhpcy50cnlBdEhvbWVNb2RlIH0gfSA6IHt9KTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnXSk7XHJcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1JlZ2lzdHJhdGlvbiBFcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvZ2luV2l0aFBhc3N3b3JkKCkge1xyXG4gICAgaWYgKCF0aGlzLmVkaXQpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzRW1haWxPck51bWJlclZhbGlkKCkpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBJbnB1dCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIG9yIDEwLWRpZ2l0IG1vYmlsZSBudW1iZXInIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMucGFzc3dvcmQgfHwgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1Bhc3N3b3JkIFJlcXVpcmVkJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgcGFzc3dvcmQnIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBpZGVudGlmaWVyOiB0aGlzLmVtYWlsT3JOdW1iZXIsXHJcbiAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/ICcnLFxyXG4gICAgICAgIGRldmljZUluZm86IG51bGxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UubG9naW5XaXRoUGFzc3dvcmROZXcocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpIHtcclxuICAgICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN5bmNUcmlhbENhcnRUb1NlcnZlckRCKHVzZXJEZXRhaWxzLnVzZXJJZCk7XHJcbiAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLm1lcmdlQW5vbnltb3VzVXNlcih1c2VyRGV0YWlscy51c2VySWQpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBzdWNjZXNzZnVsbHknIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm9jZWVkVG9DaGVja291dCkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMudHJ5QXRIb21lKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lLWFwcG9pbnRtZW50J10sIHRoaXMudHJ5QXRIb21lTW9kZSA/IHsgcXVlcnlQYXJhbXM6IHsgbW9kZTogdGhpcy50cnlBdEhvbWVNb2RlIH0gfSA6IHt9KTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm5hdmlnYXRlVG9TY2hlbWVEZXRhaWxzKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NjaGVtZS1kZXRhaWwnXSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgICAgICBlbHNlIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiBGYWlsZWQnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbklucHV0KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgfHwgJyc7XHJcbiAgICBpZiAoIS9eWzAtOV0kLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICB0aGlzLm90cENvbnRyb2xzLmF0KGluZGV4KS5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChpbmRleCA8IDUpIHtcclxuICAgICAgdGhpcy5pbnB1dHMudG9BcnJheSgpW2luZGV4ICsgMV0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgJiYgaW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRzLnRvQXJyYXkoKVtpbmRleCAtIDFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0R3JhZGllbnREaXJlY3Rpb24oZGlyZWN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcclxuICAgICAgY2FzZSAnRE9XTic6XHJcbiAgICAgICAgcmV0dXJuICcnOyAvLyBkZWZhdWx0IHRvcCDihpIgYm90dG9tIChubyBhbmdsZSBuZWVkZWQpXHJcblxyXG4gICAgICBjYXNlICdSSUdIVCc6XHJcbiAgICAgICAgcmV0dXJuICc5MGRlZyc7XHJcblxyXG4gICAgICBjYXNlICdESUFHT05BTF9SSUdIVCc6XHJcbiAgICAgICAgcmV0dXJuICc0NWRlZyc7XHJcblxyXG4gICAgICBjYXNlICdESUFHT05BTF9MRUZUJzpcclxuICAgICAgICByZXR1cm4gJzEzNWRlZyc7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnJzsgLy8gZmFsbGJhY2tcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZvbnRDb2xvcigpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvbG9yID0gdGhpcy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yO1xyXG4gICAgaWYgKCFjb2xvcikgcmV0dXJuICcjMDAwJztcclxuXHJcbiAgICAvLyBpZiBncmFkaWVudCwgZXh0cmFjdCBmaXJzdCBoZXggY29sb3JcclxuICAgIGNvbnN0IGdyYWRpZW50TWF0Y2ggPSBjb2xvci5tYXRjaCgvIyhbMC05YS1mQS1GXXs2fSkvKTtcclxuICAgIGlmIChncmFkaWVudE1hdGNoKSB7XHJcbiAgICAgIGNvbG9yID0gZ3JhZGllbnRNYXRjaFswXTtcclxuICAgIH1cclxuXHJcbiAgICBjb2xvciA9IGNvbG9yLnJlcGxhY2UoJyMnLCAnJyk7XHJcblxyXG4gICAgY29uc3QgciA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZygyLCA0KSwgMTYpO1xyXG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG5cclxuICAgIGNvbnN0IGJyaWdodG5lc3MgPSAociAqIDI5OSArIGcgKiA1ODcgKyBiICogMTE0KSAvIDEwMDA7XHJcblxyXG4gICAgcmV0dXJuIGJyaWdodG5lc3MgPiAxMjggPyAnIzAwMCcgOiAnI2ZmZic7XHJcbiAgfVxyXG4gIGdldCBhY2NlbnRCYWNrZ3JvdW5kKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBiZyA9IHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIGlmICghYmcpIHJldHVybiAnJztcclxuXHJcbiAgICBpZiAoYmcuYWNjZW50QmFja2dyb3VuZFR5cGUgPT09ICdTb2xpZCcpIHtcclxuICAgICAgcmV0dXJuIGJnLmFjY2VudENvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFuZ2xlID0gdGhpcy5nZXRHcmFkaWVudERpcmVjdGlvbihiZy5ncmFkaWVudERpcmVjdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIGFuZ2xlXHJcbiAgICAgID8gYGxpbmVhci1ncmFkaWVudCgke2FuZ2xlfSwgJHtiZy5hY2NlbnRDb2xvcn0sICR7Ymcuc2Vjb25kYXJ5QWNjZW50Q29sb3J9KWBcclxuICAgICAgOiBgbGluZWFyLWdyYWRpZW50KCR7YmcuYWNjZW50Q29sb3J9LCAke2JnLnNlY29uZGFyeUFjY2VudENvbG9yfSlgO1xyXG4gIH1cclxuICBnZXRGb3JtT3RwKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3RwQ29udHJvbHMudmFsdWUuam9pbignJyk7XHJcbiAgfVxyXG4gIGxvZ2luVHlwZTogXCJQQVNTV09SRFwiIHwgXCJPVFBcIiA9IFwiT1RQXCI7XHJcbiAgZ2VuZXJhdGVPdHA6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGdlbmVyYXRlZE90cDogYW55ID0gbnVsbDtcclxuICBvbmVUaW1lUGFzc3dvcmQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuICBsb2dpbigpIHtcclxuICAgIGlmICghdGhpcy5lZGl0KSB7XHJcbiAgICAgIGlmICh0aGlzLmxvZ2luVHlwZSA9PSBcIk9UUFwiKSB7XHJcbiAgICAgICAgdGhpcy52ZXJpZnlPVFAoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnZlcmlmeVBhc3N3b3JkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuZFVzZXJSZWZmZXJhbERldGFpbHModXNlcklkOiBhbnksIHJlZmVycmFsVW5pcXVlSWQ6IGFueSkge1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZCwgcmVmZXJyYWxVbmlxdWVJZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwicmVzcG9uc2VcIiwgcmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpXHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcclxuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZXJyb3IpXHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdmVyaWZ5UGFzc3dvcmQoKSB7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRW1haWxPck51bWJlclZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgRW1haWwvTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3IgbW9iaWxlIG51bWJlcicgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gXCIxZjEyNTBiMS00NjdlLTY3YmMtYWQ4OS04MTNhNDRlZDBlMGZcIixcclxuICAgICAgZW1haWw6IHRoaXMuZW1haWxPck51bWJlci50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcclxuICAgICAgcmVxdWVzdFR5cGU6IFwiUEFTU1dPUkRcIlxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnNpZ25pblBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpO1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xyXG4gICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxyXG4gICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XHJcbiAgICAgIC8vIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdzdWNjZXNzJyk7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBTdWNjZXNzZnVsbHknIH0pO1xyXG4gICAgICBpZiAodGhpcy5wcm9jZWVkVG9DaGVja291dClcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcclxuICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3NjaGVtZXMnXSk7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudHJ5QXRIb21lKVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLm5hdmlnYXRlVG9TY2hlbWVEZXRhaWxzKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzY2hlbWUtZGV0YWlsJ10pXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSlcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnXSk7XHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gcmVxdWVzdCcsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xyXG4gICAgICB9KVxyXG4gIH1cclxuICB2ZXJpZnlPVFAoKSB7XHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLmlzRW1haWxPck51bWJlclZhbGlkKCkpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgRW1haWwvTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3IgbW9iaWxlIG51bWJlcicgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMub25lVGltZVBhc3N3b3JkID0gdGhpcy5vdHBDb250cm9scz8udmFsdWU/LmpvaW4oJycpIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/IFwiMWYwN2NkMDktY2Y2MS02MDA4LTk4NTQtMDU0Yjk4YTE2MjdhXCIsXHJcbiAgICAgICAgZW1haWw6IHRoaXMuZW1haWxPck51bWJlci50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIGVudGVyZWRPdHA6IHRoaXMub25lVGltZVBhc3N3b3JkLFxyXG4gICAgICAgIHJlcXVlc3RUeXBlOiBcIk9UUFwiXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXN0U2VydmljZS5zaWduaW5QYXNzd29yZChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpO1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN5bmNUcmlhbENhcnRUb1NlcnZlckRCKHVzZXJEZXRhaWxzLnVzZXJJZClcclxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XHJcbiAgICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBTdWNjZXNzZnVsbHknIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSlcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMubmF2aWdhdGVUb1NjaGVtZURldGFpbHMpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlKVxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcclxuICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gcmVxdWVzdCcsIGRldGFpbDogXCJQbGVhc2UgZW50ZXIgT1RQXCIgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbiAgc2VuZFNpZ251cE9UUCgpIHtcclxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmlzT1RQVmVyaWZpZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLm1vYmlsZVRpbWVyKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb2JpbGVUaW1lcik7XHJcbiAgICB0aGlzLm1vYmlsZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm1vYmlsZS5sZW5ndGggIT0gMTApXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxyXG4gICAgICAgIG1vYmlsZTogdGhpcy5tb2JpbGUsXHJcbiAgICAgICAgZW1haWw6IHRoaXMuZW1haWwsXHJcbiAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgICAgY291bnRyeUNvZGU6ICc5MSdcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLnNlbmRTaWdudXBPVFAocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNPVFBWZXJpZmllZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFNlbnQnIH0pO1xyXG4gICAgICB9LCAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ09UUCBSZXF1ZXN0JywgZGV0YWlsOiBlcnIuZXJyb3IubWVzc2FnZSB9KTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSlcclxuICAgIH0sIDgwMCk7XHJcbiAgfVxyXG4gIGNyZWF0ZUFjY291bnQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdCkge1xyXG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbFZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgRW1haWwnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJyB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmlzUGFzc3dvcmRWYWxpZCkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIFBhc3N3b3JkJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgcGFzc3dvcmQnIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMubW9iaWxlTnVtYmVyVmFsaWQpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBNb2JpbGUgTnVtYmVyJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgbW9iaWxlIG51bWJlcicgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvIHwgbnVsbCA9IHtcclxuICAgICAgICBmaXJlYmFzZVRva2VuOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImZiVG9rZW5cIikgPz8gXCJcIlxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgbGV0IHZlcmlmeVNpZ25EYXRhID0ge1xyXG4gICAgICAgIG5hbWU6IHRoaXMudXNlck5hbWUsXHJcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxyXG4gICAgICAgIGJ1c2luZXNzTmFtZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JOYW1lJyksXHJcbiAgICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcclxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbC50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxyXG4gICAgICAgIGNvdW50cnlDb2RlOiBcIis5MVwiLFxyXG4gICAgICAgIGVudGVyZWRPdHA6IHRoaXMub3RwLFxyXG4gICAgICAgIHJlZmVycmFsSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikgPz8gXCJcIlxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UudmVyaWZ5U2lnbnVwT1RQKHZlcmlmeVNpZ25EYXRhKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XHJcbiAgICAgICAgLy8gdGhpcy5yZXN0U2VydmljZS5nZW5lcmF0ZVRva2VuKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdiSWQnKSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAvLyAgIG5leHQ6ICh0b2tlblJlc3BvbnNlOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgLy8gICB9LFxyXG4gICAgICAgIC8vICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgIC8vICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZW5lcmF0aW5nIHRva2VuOicsIGVycm9yKTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9KVxyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKSB7XHJcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcclxuICAgICAgICB0aGlzLnN5bmNUcmlhbENhcnRUb1NlcnZlckRCKHVzZXJEZXRhaWxzLnVzZXJJZClcclxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XHJcblxyXG4gICAgICAgIC8vIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdzdWNjZXNzJyk7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnU2lnbiBVcCcsIGRldGFpbDogJ1lvdXIgYWNjb3VudCBzdWNjZXNzZnVsbHkgY3JlYXRlZCcgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSlcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3VycmVudFBhZ2UpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pOyAgICAgIC8vIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgLy8gICBpY29uOiBcInN1Y2Nlc3NcIixcclxuICAgICAgICAvLyAgIHRpdGxlOiBcIkh1cnJheVwiLFxyXG4gICAgICAgIC8vICAgdGV4dDogXCJZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIixcclxuICAgICAgICAvLyAgIHNob3dDYW5jZWxCdXR0b246ICEodXNlckRldGFpbHMuY29udGFjdD8ubmFtZT8ubGVuZ3RoID4gMCksXHJcbiAgICAgICAgLy8gICBjb25maXJtQnV0dG9uVGV4dDogXCJJIGxvdmVkIGl0XCIsXHJcbiAgICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiBcIkZpbGwgb3RoZXIgYmFzaWMgZGV0YWlsc1wiLFxyXG4gICAgICAgIC8vICAgY2FuY2VsQnV0dG9uQ29sb3I6IFwiIzkyOGM4Y1wiLFxyXG4gICAgICAgIC8vIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgICAvLyAgIGlmIChyZXN1bHQuaXNEaXNtaXNzZWQpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5tYXREaWFsb2cub3BlbihVc2VyQmFzaWNJbmZvQ29tcG9uZW50LCB7XHJcbiAgICAgICAgLy8gICAgICAgaGVpZ2h0OiAnNTB2aCcsXHJcbiAgICAgICAgLy8gICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzQwdncnIDogJzk1dncnLFxyXG4gICAgICAgIC8vICAgICAgIG1heFdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCA+IDQ3NSA/ICcxMDB2dycgOiAnODB2dycsXHJcbiAgICAgICAgLy8gICAgICAgZGF0YToge31cclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfSlcclxuICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnU2lnbnVwIGVycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnU2lnbnVwIGVycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuICB2ZXJpZnlTaWdudXBPVFAoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMub3RwLmxlbmd0aCAhPSA2KVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZGV2aWNlSW5mbzogRGV2aWNlSW5mbyB8IG51bGwgPSB7XHJcbiAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgdmVyaWZ5U2lnbkRhdGEgPSB7XHJcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuYnVzaW5lc3NJZCxcclxuICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcclxuICAgICAgZW1haWw6IHRoaXMuZW1haWwsXHJcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxyXG4gICAgICBjb3VudHJ5Q29kZTogXCI5MVwiLFxyXG4gICAgICBlbnRlcmVkT3RwOiB0aGlzLm90cCxcclxuICAgICAgcmVmZXJyYWxJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSA/PyBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeVNpZ251cE9UUCh2ZXJpZnlTaWduRGF0YSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcblxyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xyXG4gICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFZlcmlmaWVkJyB9KTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1VzZXIgYWxyZWFkeSBleGlzdHMnIH0pXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgT1RQJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIHZhbGlkIG90cCcgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGVudGVyTW9iaWxlKCkge1xyXG5cclxuICAgIGlmICh0aGlzLm1vYmlsZVRpbWVyKVxyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb2JpbGVUaW1lcik7XHJcbiAgICB0aGlzLm1vYmlsZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm1vYmlsZS5sZW5ndGggIT0gMTApXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB0aGlzLmdlbmVyYXRlT1RQKCk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVPVFAoKSB7XHJcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZW5lcmF0ZU9UUCh0aGlzLm1vYmlsZSA/PyBcIlwiLCBcIjkxXCIpLnN1YnNjcmliZShcclxuICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgU2VudCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgc2VudCB0byBtb2JpbGUuIFZhbGlkIGZvciAzIG1pbnMnLFxyXG4gICAgICAgICAgbGlmZTogMTAwMDBcclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/LmVycm9yPy5tZXNzYWdlO1xyXG5cclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdPVFAgUmVxdWVzdCcsXHJcbiAgICAgICAgICBkZXRhaWw6IGVycm9yTWVzc2FnZSxcclxuICAgICAgICAgIGxpZmU6IDEwMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC5jaGFyQ29kZTtcclxuICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlT1RQKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vdHAubGVuZ3RoID09IDYpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2hlY2tTdHJlbmd0aCgpIHtcclxuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ID0gMDtcclxuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICgvW0EtWl0vLnRlc3QodGhpcy5wYXNzd29yZCkpID8gMSA6IDA7XHJcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAoL1thLXpdLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xyXG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgKz0gKC9cXGQvLnRlc3QodGhpcy5wYXNzd29yZCkpID8gMSA6IDA7XHJcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAodGhpcy5wYXNzd29yZC5sZW5ndGggPiA4ID8gMSA6IDApO1xyXG4gIH1cclxuICBnZXRTdHJlbmd0aENvbG9yKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHN3aXRjaCAodGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwidG9tYXRvXCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwib3JhbmdlXCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwieWVsbG93XCIgOiBcIiNkM2QzZDNiYVwiKTtcclxuICAgICAgY2FzZSA0OlxyXG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwibGlnaHRncmVlblwiIDogXCIjZDNkM2QzYmFcIik7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIFwiI2QzZDNkM2JhXCI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGVtYWlsRGVib3VuY2VUaW1lcjogYW55O1xyXG4gIG9uRW1haWxDaGFuZ2UoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5lbWFpbERlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5lbWFpbERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc0VtYWlsVmFsaWQoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIGVtYWlsQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0VtYWlsVmFsaWQoKSB7XHJcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xyXG4gICAgdGhpcy5lbWFpbENoZWNrID0gIWVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsKTtcclxuICAgIHJldHVybiBlbWFpbFJlZ2V4LnRlc3QodGhpcy5lbWFpbCk7XHJcbiAgfVxyXG4gIHBhc3N3b3JkRGVib3VuY2VUaW1lcjogYW55O1xyXG4gIG9uUGFzc3dvcmRDaGFuZ2UoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5wYXNzd29yZERlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5wYXNzd29yZERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pc1Bhc3N3b3JkVmFsaWQoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIHBhc3N3b3JkQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1Bhc3N3b3JkVmFsaWQoKSB7XHJcbiAgICBjb25zdCBwYXNzd29yZFJlZ2V4ID0gL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbXkEtWmEtelxcZF0pLns4LH0kLztcclxuXHJcbiAgICBjb25zdCBpc1ZhbGlkID0gcGFzc3dvcmRSZWdleC50ZXN0KHRoaXMucGFzc3dvcmQpO1xyXG5cclxuICAgIC8vIFlvdSB3YW50IEZBTFNFIHdoZW4gdmFsaWRcclxuICAgIHRoaXMucGFzc3dvcmRDaGVjayA9ICFpc1ZhbGlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkQ2hlY2s7XHJcbiAgfVxyXG5cclxuICBtb2JpbGVEZWJvdW5jZVRpbWVyOiBhbnk7XHJcbiAgb25Nb2JpbGVDaGFuZ2UoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5tb2JpbGVEZWJvdW5jZVRpbWVyKTtcclxuICAgIHRoaXMubW9iaWxlRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1vYmlsZU51bWJlclZhbGlkKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuICBtb2JpbGVDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1vYmlsZU51bWJlclZhbGlkKCkge1xyXG4gICAgY29uc3QgbW9iaWxlUmVnZXggPSAvXls2LTldXFxkezl9JC87XHJcbiAgICB0aGlzLm1vYmlsZUNoZWNrID0gIW1vYmlsZVJlZ2V4LnRlc3QodGhpcy5tb2JpbGUpO1xyXG4gICAgcmV0dXJuIG1vYmlsZVJlZ2V4LnRlc3QodGhpcy5tb2JpbGUpO1xyXG4gIH1cclxuXHJcbiAgZW1haWxPck51bWJlcjogc3RyaW5nID0gXCJcIjtcclxuICBlbWFpbE9yTnVtYmVyQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0VtYWlsT3JOdW1iZXJWYWxpZCgpIHtcclxuICAgIGNvbnN0IGVtYWlsUmVnZXggPSAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC87XHJcbiAgICBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzYtOV1cXGR7OX0kLztcclxuICAgIHRoaXMuZW1haWxPck51bWJlckNoZWNrID0gIWVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpICYmICFtb2JpbGVSZWdleC50ZXN0KHRoaXMuZW1haWxPck51bWJlcik7XHJcbiAgICByZXR1cm4gZW1haWxSZWdleC50ZXN0KHRoaXMuZW1haWxPck51bWJlcikgfHwgbW9iaWxlUmVnZXgudGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpO1xyXG4gIH1cclxuXHJcblxyXG4gIGVtYWlsT3JOdW1iZXJEZWJvdW5jZVRpbWVyOiBhbnk7XHJcbiAgb25FbWFpbE9yTnVtYmVyQ2hhbmdlKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZW1haWxPck51bWJlckRlYm91bmNlVGltZXIpO1xyXG4gICAgdGhpcy5lbWFpbE9yTnVtYmVyRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzRW1haWxPck51bWJlclZhbGlkKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG4gIGdldCBzdHlsZXNMYXlvdXQoKSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XHJcbiAgfVxyXG5cclxuICBnZXQgYWNjZW50Q29sb3IoKSB7XHJcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA/IHRoaXMuc3R5bGVzLmJhY2tncm91bmQ/LmFjY2VudENvbG9yIDogJyM2NjdlZWEnO1xyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFjY2VudC1jb2xvcicsIGNvbG9yKTtcclxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY2NlbnQtc2hhZG93JywgdGhpcy5oZXhUb1JnYmEoY29sb3IsIDAuNCkpO1xyXG4gICAgcmV0dXJuIGNvbG9yO1xyXG4gIH1cclxuICBwcml2YXRlIGhleFRvUmdiYShoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEsIDMpLCAxNik7XHJcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoaGV4LnNsaWNlKDMsIDUpLCAxNik7XHJcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XHJcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcclxuICB9XHJcbiAgc2V0dXAzREVmZmVjdHMoKSB7XHJcbiAgICBjb25zdCBtYWluUGFuZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWFpbi1wYW5lbCcpO1xyXG5cclxuICAgIGlmIChtYWluUGFuZWwpIHtcclxuICAgICAgbWFpblBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIChlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCByZWN0ID0gbWFpblBhbmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGNvbnN0IHggPSBlLmNsaWVudFggLSByZWN0LmxlZnQ7XHJcbiAgICAgICAgY29uc3QgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wO1xyXG5cclxuICAgICAgICBjb25zdCBjZW50ZXJYID0gcmVjdC53aWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHJlY3QuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgY29uc3Qgcm90YXRlWCA9ICh5IC0gY2VudGVyWSkgLyAyMDtcclxuICAgICAgICBjb25zdCByb3RhdGVZID0gKGNlbnRlclggLSB4KSAvIDIwO1xyXG5cclxuICAgICAgICAobWFpblBhbmVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50cmFuc2Zvcm0gPSBgcGVyc3BlY3RpdmUoMTIwMHB4KSByb3RhdGVYKCR7cm90YXRlWH1kZWcpIHJvdGF0ZVkoJHtyb3RhdGVZfWRlZykgdHJhbnNsYXRlWigwKWA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbWFpblBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAobWFpblBhbmVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlWCgwZGVnKSByb3RhdGVZKDBkZWcpJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaG93UGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIGxldCB0cmlhbENhcnRJdGVtOiBhbnlbXSA9IFtdXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFRyaWFsQ2FydCgpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHJlc3BvbnNlLm9uc3VjY2VzcyA9ICh1c2VyVHJpYWxDYXJ0UmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyaWFsQ2FydEl0ZW0gPSB1c2VyVHJpYWxDYXJ0UmVzcG9uc2UudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBpZiAodHJpYWxDYXJ0SXRlbT8ubGVuZ3RoID09IDApXHJcbiAgICAgICAgICByZXR1cm5cclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3Q6IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QgPSBuZXcgc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCh1c2VySWQsICdUUklBTF9DQVJUJywgdHJpYWxDYXJ0SXRlbSlcclxuICAgICAgICB0aGlzLnJlc3RTZXJ2aWNlLmFkZFRyaWFsSXRlbShyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmNsZWFyVHJpYWxDYXJ0KCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBiYWNrVG9Ib21lKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnXSk7XHJcbiAgfVxyXG59XHJcbiIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCJcclxuICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XHJcblxyXG48c2VjdGlvbiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCI+XHJcbiAgPGRpdiBbc3BhY2luZ0Fyb3VuZF09XCJzdHlsZXNMYXlvdXRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsb2dpbl9jYXJkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtblwiXHJcbiAgICAgIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhcmVhIHctMTAwXCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwiY2lyY2xlc1wiIFtzaW1wb092ZXJsYXldPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgW2lkXT1cImRhdGE/LmlkXCI+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICAgIDxsaT48L2xpPlxyXG4gICAgICAgICAgPGxpPjwvbGk+XHJcbiAgICAgICAgICA8bGk+PC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gPT09PT0gQVVUSCBDQVJEID09PT09IC0tPlxyXG4gICAgICA8ZGl2IFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwibWFpbi1wYW5lbCBkLWZsZXggZ2FwLTJcIiBbY2xhc3Muc2luZ2xlLXBhbmVdPVwiIWRhdGE/LmNvbnRlbnQ/LmltYWdlPy5zaG93SW1hZ2VcIlxyXG4gICAgICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgdy0xMDBcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1jYXJkXCIgW2NsYXNzLnNpbmdsZS1wYW5lXT1cIiFkYXRhPy5jb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlXCIgW2lkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgW3NpbXBvUG9zaXRpb25MYXlvdXREaXJlY3RpdmVdPVwic3R5bGVzPy5wb3NpdGlvbkxheW91dFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1pbWFnZVwiICpuZ0lmPVwiZGF0YT8uY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZVwiPlxyXG4gICAgICAgICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cImRhdGE/LmNvbnRlbnQ/LmltYWdlPy51cmxcIiBbYXR0ci5hbHRdPVwiZGF0YT8uY29udGVudD8uaW1hZ2U/LmFsdFRleHQgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhdXRoLWhlcm8taW1hZ2VcIiBbc2ltcG9JbWFnZURpcmVjdGl2ZV09XCJzdHlsZXM/LmltYWdlXCIgW2FwcEltYWdlRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgW2ltYWdlRGF0YV09XCJkYXRhPy5jb250ZW50Py5pbWFnZVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGE/LmlkKyhkYXRhPy5jb250ZW50Py5pbWFnZT8uaWQgfHwgJycpXCIgW2lkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICAgIFtzaW1wb09iamVjdFBvc2l0aW9uXT1cImRhdGE/LmNvbnRlbnQ/LmltYWdlPy5wb3NpdGlvblwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF1dGgtZm9ybVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImF1dGhTY3JlZW5cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidQSE9ORSdcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmFja1RvSG9tZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggdGV4dC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbWItMiBsb2dpbi1tYWluLXNlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAxLjVyZW0gMnJlbSAwLjVyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgY2xyLWJsYWNrIGxvZ2luLXRleHRcIj5MT0dJTiBPUiBTSUdOVVA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJteC0wIG15LTBcIiBzdHlsZT1cImJvcmRlci1jb2xvcjogI2U4ZThlODtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1zZWN0aW9uIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyIG1iLTNcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBjb2xvcjojNTU1O1wiPlVubG9jayBjb3Vwb25zLCBwcm9maWxlIGFuZCBtdWNoXHJcbiAgICAgICAgICAgICAgICAgICAgICBtb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1lbWFpbC1waG9uZS1pbnB1dFwiPkVtYWlsIC8gTW9iaWxlIE51bWJlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWVtYWlsLXBob25lLWlucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwiZW1haWxPck51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb20gLyA5ODc2NTQzMjEwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25FbWFpbE9yTnVtYmVyQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiIWVtYWlsT3JOdW1iZXJDaGVjayA/ICcnIDogJ3JlZCdcIiAoa2V5dXAuZW50ZXIpPVwic2VuZE9UUCgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwiZW1haWxPck51bWJlckNoZWNrXCIgW3N0eWxlLmNvbG9yXT1cIidyZWQnXCI+UGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgMTAtZGlnaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlIG51bWJlcio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCBweS0yXCIgW2J1dHRvbkRhdGFdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzJdPy5jb250ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LnN0eWxlc1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1syXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbklkXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1syXT8uaWQgPz8gJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRPVFAoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIG1lLTJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uYWN0aW9uPy5idXR0b25zWzJdPy5jb250ZW50Py5sYWJlbD8ubGVuZ3RoID4gMCA/IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1syXT8uY29udGVudD8ubGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICdTRU5EXHJcbiAgICAgICAgICAgICAgICAgICAgICBPVFAnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsci1ibGFjayBmcy0xM1wiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NzAwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhdXRoU2NyZWVuID0gJ1BBU1NXT1JEJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2dpbiB3aXRoIFBhc3N3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ09UUCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHRleHQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTIgbG9naW4tbWFpbi1zZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEuNXJlbSAycmVtIDAuNXJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgY2xyLWJsYWNrIGxvZ2luLXRleHRcIj5MT0dJTiBPUiBTSUdOVVA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJteC0wIG15LTBcIiBzdHlsZT1cImJvcmRlci1jb2xvcjogI2U4ZThlODtcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1zZWN0aW9uIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyIG1iLTMgY2xyLWJsYWNrXCIgc3R5bGU9XCJmb250LXNpemU6MTRweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIEVudGVyIDYtZGlnaXQgT1RQIHNlbnQgdG8ge3tlbWFpbE9yTnVtYmVyfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG90cF9pbnB1dCBnYXAtMSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIHctMTAwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdGb3I9XCJsZXQgY29udHJvbCBvZiBvdHBDb250cm9scy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiICNvdHBJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtY2VudGVyIG90cC1ib3ggY2xyLWJsYWNrXCIgbWF4bGVuZ3RoPVwiMVwiIGlucHV0bW9kZT1cIm51bWVyaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgKGlucHV0KT1cIm9uSW5wdXQoaSlcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCBpKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVzZW5kQ291bnRkb3duID4gMFwiIGNsYXNzPVwiY2xyLWJsYWNrIGZzLTEzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDo3MDA7IGxldHRlci1zcGFjaW5nOjAuMDRlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUkVTRU5EIElOICZuYnNwO3t7Zm9ybWF0Q291bnRkb3duKHJlc2VuZENvdW50ZG93bil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXNlbmRDb3VudGRvd24gPT09IDBcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsci1ibGFjayBmcy0xM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6NzAwOyBsZXR0ZXItc3BhY2luZzowLjA0ZW07IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2VuZE9UUE5ldygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJFU0VORCBPVFBcclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIGdhcC0yIHctMTAwICBweS0yXCIgW2J1dHRvbkRhdGFdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5jb250ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMV0/LnN0eWxlc1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbklkXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uaWQgPz8gJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZlcmlmeU9UUE5ldygpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbkxvYWRpbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMV0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5jb250ZW50Py5sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ1ZFUklGWSBPVFAnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1JFR0lTVEVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMS41cmVtIDJyZW0gMC41cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBmcy0yMC1mdy02MDAgY2xyLWJsYWNrXCI+UkVHSVNURVI8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTEwMCBzaWdudXAtaW5wdXQtY29udGFpbmVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF1dGgtZnVsbG5hbWUtaW5wdXRcIj5GdWxsIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1mdWxsbmFtZS1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJjbHItYmxhY2tcIiBbKG5nTW9kZWwpXT1cInVzZXJOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJKYW5lIERvZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1yZWctcGhvbmUtaW5wdXRcIj5QaG9uZSBOdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgcGFzc3dvcmQtaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xyLWJsYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo1MDA7IHBhZGRpbmc6IDAgOHB4IDAgMTJweDsgd2hpdGUtc3BhY2U6bm93cmFwO1wiPis5MVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtcmVnLXBob25lLWlucHV0XCIgdHlwZT1cInRlbFwiIGNsYXNzPVwiYi1ub25lIGNsci1ibGFjayB3LTkwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBob25lTnVtYmVyXCIgcGxhY2Vob2xkZXI9XCI5ODc2NTQzMjEwXCIgbWF4bGVuZ3RoPVwiMTBcIiBpbnB1dG1vZGU9XCJudW1lcmljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm91dGxpbmU6bm9uZTsgZm9udC1zaXplOjE0cHg7XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1lbWFpbC1pbnB1dFwiPkVtYWlsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtZW1haWwtaW5wdXRcIiB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwiZW1haWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImphbmVkb2VAZ21haWwuY29tXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25FbWFpbENoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cIiFlbWFpbENoZWNrID8gJycgOiAncmVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmLTEyXCIgKm5nSWY9XCJlbWFpbENoZWNrXCIgW3N0eWxlLmNvbG9yXT1cIidyZWQnXCI+UGxlYXNlIEVudGVyIHZhbGlkIGVtYWlsKjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF1dGgtcmVnLXBhc3N3b3JkLWlucHV0XCI+UGFzc3dvcmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLWlucHV0LWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLXJlZy1wYXNzd29yZC1pbnB1dFwiIFt0eXBlXT1cInBhc3N3b3JkSGlkZGVuID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctMTAwXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFzc3dvcmRIaWRkZW4gPSAhcGFzc3dvcmRIaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Bhc3N3b3JkSGlkZGVuID8gJ3Zpc2liaWxpdHknIDogJ3Zpc2liaWxpdHlfb2ZmJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF1dGgtcmVnLWNvbmYtcGFzc3dvcmQtaW5wdXRcIj5Db25maXJtIFBhc3N3b3JkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1pbnB1dC1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTJweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1yZWctY29uZi1wYXNzd29yZC1pbnB1dFwiIFt0eXBlXT1cInBhc3N3b3JkSGlkZGVuID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctMTAwXCIgWyhuZ01vZGVsKV09XCJjb25mUGFzc3dvcmRcIiBwbGFjZWhvbGRlcj1cIkNvbmZpcm0gUGFzc3dvcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VuZC1idG4gZ2FwLTIgdy0xMDAgIHB5LTJcIiBbYnV0dG9uRGF0YV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcclxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhPy5pZCsoZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5pZCB8fCAnJylcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5pZCA/PyAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVnaXN0ZXJVc2VyKClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSBtZS0yXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ/LmxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnQ09OVElOVUUnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1BBU1NXT1JEJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMS41cmVtIDJyZW0gMC41cmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBmcy0yMC1mdy02MDAgY2xyLWJsYWNrXCI+TE9HSU48L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTEwMCBzaWdudXAtaW5wdXQtY29udGFpbmVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF1dGgtcHdkLWVtYWlsLWlucHV0XCI+RW1haWwgLyBNb2JpbGUgTnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtcHdkLWVtYWlsLWlucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwiZW1haWxPck51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb20gLyA5ODc2NTQzMjEwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25FbWFpbE9yTnVtYmVyQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyQ29sb3JdPVwiIWVtYWlsT3JOdW1iZXJDaGVjayA/ICcnIDogJ3JlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwiZW1haWxPck51bWJlckNoZWNrXCIgW3N0eWxlLmNvbG9yXT1cIidyZWQnXCI+UGxlYXNlIGVudGVyIHZhbGlkIGVtYWlsIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwLWRpZ2l0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vYmlsZSBudW1iZXIqPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1sb2dpbi1wYXNzd29yZC1pbnB1dFwiPlBhc3N3b3JkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1pbnB1dC1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTJweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1sb2dpbi1wYXNzd29yZC1pbnB1dFwiIFt0eXBlXT1cInBhc3N3b3JkSGlkZGVuID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctMTAwXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJsb2dpbldpdGhQYXNzd29yZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhc3N3b3JkSGlkZGVuID0gIXBhc3N3b3JkSGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3twYXNzd29yZEhpZGRlbiA/ICd2aXNpYmlsaXR5JyA6ICd2aXNpYmlsaXR5X29mZid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCAgcHktMlwiIFtidXR0b25EYXRhXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5zdHlsZXNcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGE/LmlkKyhkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmlkIHx8ICcnKVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthcHBCdXR0b25FZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiIFtidXR0b25JZF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmlkID8/ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2dpbldpdGhQYXNzd29yZCgpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbkxvYWRpbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5jb250ZW50Py5sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ0xPR0lOJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbHItYmxhY2sgZnMtMTNcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OjcwMDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXV0aFNjcmVlbiA9ICdQSE9ORSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9naW4gd2l0aCBPVFBcclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgPC9kaXY+XHJcblxyXG48L3NlY3Rpb24+Il19
890
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYXV0aGVudGljYXRpb24tcmVxdWlyZWQvYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLFFBQVEsRUFBYSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBRXhELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHdEQUF3RCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFrQzFHLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxXQUFXO0lBNEM5RCxZQUNtQixXQUF3QixFQUN4QixNQUFjLEVBQ2QsY0FBOEIsRUFDOUIsY0FBcUMsRUFDckMsU0FBb0IsRUFDcEIsY0FBOEIsRUFDdkMsVUFBc0IsRUFDYixnQkFBa0MsRUFFdEIsU0FBd0QsRUFDeEQsY0FBa0U7UUFFL0YsS0FBSyxFQUFFLENBQUM7UUFaUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUN2QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ2IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUV0QixjQUFTLEdBQVQsU0FBUyxDQUErQztRQUN4RCxtQkFBYyxHQUFkLGNBQWMsQ0FBb0Q7UUEvQ2pHLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFFdEIsZUFBVSxHQUE4QyxPQUFPLENBQUM7UUFFekQsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLFFBQUcsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUMxQixJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNuQixJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkIsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztTQUNwQixDQUFDLENBQUM7UUFFSCxtQkFBbUI7UUFDbkIsb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFFNUIsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDeEIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGVBQVUsR0FBa0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvRCxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQiwwQkFBcUIsR0FBVyxDQUFDLENBQUM7UUFDbEMscUJBQWdCLEdBQUc7WUFDeEIsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtZQUM5QyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ2hELEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUFDaEQsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtTQUM5QyxDQUFBO1FBbUJELGtCQUFhLEdBQVEsSUFBSSxDQUFDO1FBQzFCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBQ3pDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBK1V6QixjQUFTLEdBQXVCLEtBQUssQ0FBQztRQUN0QyxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1QixpQkFBWSxHQUFRLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQTZWN0IsZUFBVSxHQUFZLEtBQUssQ0FBQztRQWE1QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQW1CL0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFPN0Isa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFDM0IsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBZ0VwQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQWh5QjVCLDRFQUE0RTtJQUM5RSxDQUFDO0lBV0QsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3ZELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO2dCQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDN0MsQ0FBQztZQUNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFBO1lBQ3JDLENBQUM7UUFFSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwRCxJQUFJLE9BQU8sSUFBSSxJQUFJO1lBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxLQUFLLE1BQU0sQ0FBQztJQUU1QyxDQUFDO0lBQ0QsZUFBZSxLQUFLLENBQUM7SUFFckIsc0ZBQXNGO0lBQzlFLGVBQWU7UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FBQztRQUM5RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakQsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sS0FBSyxDQUFDLENBQUMsZ0RBQWdEO0lBQ2hFLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUs7WUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQzthQUNwRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVTtZQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25FLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDdEMsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7O1lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQVk7UUFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQWtCLEVBQUU7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLHNEQUFzRCxFQUFFLENBQUMsQ0FBQztnQkFDekksT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ2hHLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLElBQUksSUFBSSxDQUFDO2dCQUM3RCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEosQ0FBQyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ2hHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hKLENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFHO2dCQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7Z0JBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDOUIsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUN6QixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ2hFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUVqQyxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO29CQUU3Qix3Q0FBd0M7b0JBQ3hDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUN4QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUNsQyxDQUFDO29CQUVELE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztvQkFDNUUsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUM1RixDQUFDO29CQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO29CQUMzQixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO29CQUN6RyxJQUFJLElBQUksQ0FBQyxpQkFBaUI7d0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7eUJBQzVGLElBQUksSUFBSSxDQUFDLG1CQUFtQjt3QkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7eUJBQ2pFLElBQUksSUFBSSxDQUFDLFNBQVM7d0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt5QkFDekksSUFBSSxJQUFJLENBQUMsdUJBQXVCO3dCQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzt5QkFDMUUsSUFBSSxJQUFJLENBQUMsV0FBVzt3QkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7O3dCQUNsRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7WUFDSCxDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbEcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSw2QkFBNkIsRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSw2Q0FBNkMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pJLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixFQUFFLENBQUMsQ0FBQztnQkFDaEgsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7Z0JBQy9HLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxjQUFjLEdBQVE7Z0JBQ3hCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDOUIsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUU7Z0JBQy9CLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ2xDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7Z0JBQ2pDLFlBQVksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pELFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUk7YUFDckQsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzVFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSw0Q0FBNEMsRUFBRSxDQUFDLENBQUM7Z0JBQzVILElBQUksSUFBSSxDQUFDLGlCQUFpQjtvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDNUYsSUFBSSxJQUFJLENBQUMsU0FBUztvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUN6SSxJQUFJLElBQUksQ0FBQyxXQUFXO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7b0JBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMvRyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsc0RBQXNELEVBQUUsQ0FBQyxDQUFDO2dCQUN6SSxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7Z0JBQ2pDLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN6RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7Z0JBRXpHLElBQUksSUFBSSxDQUFDLGlCQUFpQjtvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDNUYsSUFBSSxJQUFJLENBQUMsbUJBQW1CO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztxQkFDakUsSUFBSSxJQUFJLENBQUMsU0FBUztvQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUN6SSxJQUFJLElBQUksQ0FBQyx1QkFBdUI7b0JBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO3FCQUMxRSxJQUFJLElBQUksQ0FBQyxXQUFXO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7b0JBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDekcsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFhO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFvQixFQUFFLEtBQWE7UUFDM0MsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsU0FBNkI7UUFDaEQsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7WUFFdEQsS0FBSyxPQUFPO2dCQUNWLE9BQU8sT0FBTyxDQUFDO1lBRWpCLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLE9BQU8sQ0FBQztZQUVqQixLQUFLLGVBQWU7Z0JBQ2xCLE9BQU8sUUFBUSxDQUFDO1lBRWxCO2dCQUNFLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksU0FBUztRQUNYLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRTFCLHVDQUF1QztRQUN2QyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkQsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixLQUFLLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFL0IsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFOUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUV4RCxPQUFPLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUVuQyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRW5CLElBQUksRUFBRSxDQUFDLG9CQUFvQixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUN4QixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTlELE9BQU8sS0FBSztZQUNWLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLEVBQUUsQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLG9CQUFvQixHQUFHO1lBQzVFLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFdBQVcsS0FBSyxFQUFFLENBQUMsb0JBQW9CLEdBQUcsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFLRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsS0FBSztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQVcsRUFBRSxnQkFBcUI7UUFDdkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUM1Rix5REFBeUQ7WUFDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2hCLDhCQUE4QjtZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGNBQWM7UUFFWixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSw2Q0FBNkMsRUFBRSxDQUFDLENBQUM7WUFDdkksT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRztZQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLHNDQUFzQztZQUNyRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7WUFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFdBQVcsRUFBRSxVQUFVO1NBQ3hCLENBQUE7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN0RSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELG1DQUFtQztZQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLElBQUksSUFBSSxDQUFDLGlCQUFpQjtnQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ2xFLElBQUksSUFBSSxDQUFDLG1CQUFtQjtnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNsSCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7WUFDekMsQ0FBQztpQkFDSSxJQUFJLElBQUksQ0FBQyxXQUFXO2dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7O2dCQUU1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUNDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFHLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUNELFNBQVM7UUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSw2Q0FBNkMsRUFBRSxDQUFDLENBQUM7WUFDdkksT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLE9BQU8sR0FBRztnQkFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxzQ0FBc0M7Z0JBQ3JFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtnQkFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNoQyxXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFBO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDdEYsQ0FBQztnQkFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7Z0JBQ3pHLElBQUksSUFBSSxDQUFDLGlCQUFpQjtvQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7cUJBQ2xFLElBQUksSUFBSSxDQUFDLG1CQUFtQjtvQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3FCQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTO29CQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNsSCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO29CQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7Z0JBQ3pDLENBQUM7cUJBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVztvQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztvQkFFNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUMsRUFDQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzFHLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUNELGFBQWE7UUFDWCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDMUIsT0FBTztZQUNULE1BQU0sT0FBTyxHQUFRO2dCQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7Z0JBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQUE7WUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUN2RixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFDRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsK0JBQStCLEVBQUUsQ0FBQyxDQUFDO2dCQUNySCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO2dCQUMvSCxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sVUFBVSxHQUFzQjtnQkFDcEMsYUFBYSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTthQUNyRCxDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsSUFBSSxjQUFjLEdBQUc7Z0JBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixZQUFZLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQzNDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO2dCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ3BCLFVBQVUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7YUFDbkQsQ0FBQTtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMzRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELDBFQUEwRTtnQkFDMUUsb0NBQW9DO2dCQUVwQyxPQUFPO2dCQUNQLHdCQUF3QjtnQkFDeEIsdURBQXVEO2dCQUN2RCxNQUFNO2dCQUNOLEtBQUs7Z0JBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFN0QsbUNBQW1DO2dCQUNuQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLG1DQUFtQyxFQUFFLENBQUMsQ0FBQztnQkFDbEgsSUFBSSxJQUFJLENBQUMsaUJBQWlCO29CQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDbEUsSUFBSSxJQUFJLENBQUMsU0FBUztvQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDbEgsSUFBSSxJQUFJLENBQUMsV0FBVztvQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztvQkFFNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQU0sY0FBYztnQkFDakQscUJBQXFCO2dCQUNyQixxQkFBcUI7Z0JBQ3JCLCtDQUErQztnQkFDL0MsZ0VBQWdFO2dCQUNoRSxxQ0FBcUM7Z0JBQ3JDLGtEQUFrRDtnQkFDbEQsa0NBQWtDO2dCQUNsQyx3QkFBd0I7Z0JBRXhCLDhCQUE4QjtnQkFDOUIsb0RBQW9EO2dCQUNwRCx3QkFBd0I7Z0JBQ3hCLDBEQUEwRDtnQkFDMUQsOERBQThEO2dCQUM5RCxpQkFBaUI7Z0JBQ2pCLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTixLQUFLO1lBQ1AsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtnQkFDeEcsQ0FBQztxQkFDSSxDQUFDO29CQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3pHLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBQ0QsZUFBZTtRQUViLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUN0QixPQUFPO1FBRVQsTUFBTSxVQUFVLEdBQXNCO1lBQ3BDLGFBQWEsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7U0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksY0FBYyxHQUFHO1lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDcEIsVUFBVSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtTQUNuRCxDQUFBO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFFM0UsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQTtZQUNoRixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztZQUMzRyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsV0FBVztRQUVULElBQUksSUFBSSxDQUFDLFdBQVc7WUFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFO2dCQUMxQixPQUFPO1lBQ1QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUM3RCxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixPQUFPLEVBQUUsVUFBVTtnQkFDbkIsTUFBTSxFQUFFLHNDQUFzQztnQkFDOUMsSUFBSSxFQUFFLEtBQUs7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE1BQU0sWUFBWSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO1lBRTNDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUN0QixRQUFRLEVBQUUsT0FBTztnQkFDakIsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFvQjtRQUNqQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksUUFBUSxHQUFHLEVBQUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQW9CO1FBQzlCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBQ0QsYUFBYTtRQUNYLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLFFBQVEsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZFLEtBQUssQ0FBQztnQkFDSixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2RSxLQUFLLENBQUM7Z0JBQ0osT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkUsS0FBSyxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFO2dCQUNFLE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFVBQVUsR0FBRyxrREFBa0QsQ0FBQztRQUN0RSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsWUFBWSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzNDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sYUFBYSxHQUFHLHdEQUF3RCxDQUFDO1FBRS9FLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWxELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsT0FBTyxDQUFDO1FBRTlCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBR0QsY0FBYztRQUNaLFlBQVksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFJRCxvQkFBb0I7UUFDbEIsTUFBTSxVQUFVLEdBQUcsa0RBQWtELENBQUM7UUFDdEUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEcsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBSUQscUJBQXFCO1FBQ25CLFlBQVksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNoRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQWlCLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDckcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNPLFNBQVMsQ0FBQyxHQUFXLEVBQUUsS0FBYTtRQUMxQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUM7SUFDNUMsQ0FBQztJQUNELGNBQWM7UUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFN0UsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDakQsSUFBSSxJQUFJLENBQUMsUUFBUTtvQkFBRSxPQUFPO2dCQUUxQixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBRS9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFFaEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBRWxDLFNBQXlCLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRywrQkFBK0IsT0FBTyxnQkFBZ0IsT0FBTyxvQkFBb0IsQ0FBQztZQUNqSSxDQUFDLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNsQixTQUF5QixDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsNkJBQTZCLENBQUM7Z0JBQzdFLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBR0QsdUJBQXVCLENBQUMsTUFBYztRQUNwQyxJQUFJLGFBQWEsR0FBVSxFQUFFLENBQUE7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNuRCxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMscUJBQTBCLEVBQUUsRUFBRTtnQkFDbEQsYUFBYSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3BELElBQUksYUFBYSxFQUFFLE1BQU0sSUFBSSxDQUFDO29CQUM1QixPQUFNO2dCQUVSLElBQUksT0FBTyxHQUE4QixJQUFJLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBQzNHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0EvMkJVLCtCQUErQjttR0FBL0IsK0JBQStCLHNKQUovQixDQUFDLGNBQWMsQ0FBQyx3SUM5RDdCLDI3Z0JBbVJVLHEvTkQ1T04sWUFBWSx5aEJBQ1osV0FBVyxpeEJBQ1gsV0FBVyx3V0FDWCxhQUFhLG9MQUNiLHdCQUF3Qiw4QkFDeEIsb0JBQW9CLHFXQUNwQixtQkFBbUIsa05BR25CLGtCQUFrQix5RkFDbEIsbUJBQW1CLDBHQUNuQix3QkFBd0Isc0lBQ3hCLG1CQUFtQixtRkFDbkIsZUFBZSxtRkFDZixjQUFjLGdGQUNkLGdCQUFnQixxRkFDaEIsc0JBQXNCLHlHQUN0QixxQkFBcUIsc0xBQ3JCLG9CQUFvQix3SkFDcEIsdUJBQXVCLG1HQUN2Qix1QkFBdUIsbUdBQ3ZCLGdDQUFnQzs7NEZBTXZCLCtCQUErQjtrQkEvQjNDLFNBQVM7K0JBQ0UsK0JBQStCLGNBQzdCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFFcEIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIsb0JBQW9CO3dCQUNwQix1QkFBdUI7d0JBQ3ZCLHVCQUF1Qjt3QkFDdkIsZ0NBQWdDO3FCQUNqQyxhQUNVLENBQUMsY0FBYyxDQUFDOzswQkEwRHhCLFFBQVE7OzBCQUNSLFFBQVE7eUNBckRGLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkErRG9CLE1BQU07c0JBQS9CLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPcHRpb25hbCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XG5pbXBvcnQgeyBEZXZpY2VJbmZvIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3VzZXIubW9kYWwnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJvdHRvbVNoZWV0UmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYm90dG9tLXNoZWV0JztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Nb2RlbCwgQXV0aGVudGljYXRpb25TdHlsZXNNb2RlbCB9IGZyb20gJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQubW9kZWwnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWFyb3VuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcbmltcG9ydCB7IEJ1dHRvbk1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBCdXR0b25FZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWVkaXRvci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9CdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9zaW1wby1idXR0b24vc2ltcG8tYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZUVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3Bvc2l0aW9uLWxheW91dC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3Muc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBvLWF1dGhlbnRpY2F0aW9uLXJlcXVpcmVkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBUb2FzdE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFNpbXBvQnV0dG9uQ29tcG9uZW50LFxuXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXG4gICAgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIENvbnRlbnRGaXREaXJlY3RpdmUsXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxuICAgIEhvdmVyRGlyZWN0aXZlLFxuICAgIE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgU3BhY2luZ0Fyb3VuZERpcmVjdGl2ZSxcbiAgICBCdXR0b25FZGl0b3JEaXJlY3RpdmUsXG4gICAgSW1hZ2VFZGl0b3JEaXJlY3RpdmUsXG4gICAgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUsXG4gICAgT2JqZWN0UG9zaXRpb25EaXJlY3RpdmUsXG4gICAgUG9zaXRpb25MYXlvdXREaXJlY3RpdmVEaXJlY3RpdmVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXV0aGVudGljYXRpb24tcmVxdWlyZWQuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25SZXF1aXJlZENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIHtcbiAgLy8gcHJpdmF0ZSBlbWFpbFRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBkYXRhPzogQXV0aGVudGljYXRpb25Nb2RlbCB8IGFueTtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xuICBzdHlsZXM/OiBBdXRoZW50aWNhdGlvblN0eWxlc01vZGVsO1xuICBidXR0b24/OiBCdXR0b25Nb2RlbFxuICBidXR0b25JZDogc3RyaW5nID0gJyc7XG5cbiAgYXV0aFNjcmVlbjogJ1BIT05FJyB8ICdPVFAnIHwgJ1JFR0lTVEVSJyB8ICdQQVNTV09SRCcgPSAnUEhPTkUnO1xuICBwcml2YXRlIG1vYmlsZVRpbWVyOiBhbnk7XG4gIHB1YmxpYyBlbWFpbDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIG1vYmlsZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHBob25lTnVtYmVyOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgb3RwOiBzdHJpbmcgPSBcIlwiO1xuICBvdHBDb250cm9scyA9IG5ldyBGb3JtQXJyYXkoW1xuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBuZXcgRm9ybUNvbnRyb2woJycpXG4gIF0pO1xuXG4gIC8vIFJlc2VuZCBjb3VudGRvd25cbiAgcmVzZW5kQ291bnRkb3duOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHJlc2VuZEludGVydmFsOiBhbnk7XG4gIGlzRXhpc3RpbmdVc2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgY29uZlBhc3N3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdXNlck5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBidXR0b25Mb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBidXNpbmVzc0lkOiBzdHJpbmcgfCBudWxsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpO1xuICBwdWJsaWMgaXNPVFBWZXJpZmllZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcGFzc3dvcmRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aENvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcGFzc3dvcmRTdHJlbmd0aCA9IFtcbiAgICB7IHR5cGU6IFwibWluaW11bSA4IGNoYXJhY3RlclwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIFVQUEVSQ0FTRVwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIGxvd2VyY2FzZVwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gICAgeyB0eXBlOiBcImF0bGVhc3Qgb25lIG51bWJlclwiLCBhY3RpdmU6IGZhbHNlIH0sXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UsXG5cbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgYm90dG9tc2hlZXRSZWY6IE1hdEJvdHRvbVNoZWV0UmVmPEF1dGhlbnRpY2F0aW9uUmVxdWlyZWRDb21wb25lbnQ+LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwidXNlciBhdXRoZW50aWNhdGluZyBiYWNrXCIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpXG4gIH1cblxuICBzaWduVXBFbmFibGVkOiBhbnkgPSB0cnVlO1xuICBwcm9jZWVkVG9DaGVja291dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm9jZWVkVG9FbnJvbGxtZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHRyeUF0SG9tZTogYm9vbGVhbiA9IGZhbHNlO1xuICB0cnlBdEhvbWVNb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgbmF2aWdhdGVUb1NjaGVtZURldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3VycmVudFBhZ2U6IHN0cmluZyA9IFwiXCI7XG4gIEBWaWV3Q2hpbGRyZW4oJ290cElucHV0JykgaW5wdXRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ2NhcnQnXSlcbiAgICAgICAgdGhpcy5wcm9jZWVkVG9DaGVja291dCA9IHRydWU7XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3JlZGlyZWN0VG8nXSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyYW1bJ3JlZGlyZWN0VG8nXTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbSAmJiBwYXJhbVsnc2NoZW1lcyddKSB7XG4gICAgICAgIHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3RyeUF0SG9tZSddKSB7XG4gICAgICAgIHRoaXMudHJ5QXRIb21lID0gdHJ1ZVxuICAgICAgICB0aGlzLnRyeUF0SG9tZU1vZGUgPSBwYXJhbVsnbW9kZSddID8/IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW0gJiYgcGFyYW1bJ3NjaGVtZURldGFpbCddKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1NjaGVtZURldGFpbHMgPSB0cnVlXG4gICAgICB9XG5cbiAgICB9KVxuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XG4gICAgdGhpcy5idXR0b24gPSB0aGlzLmRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXTtcbiAgICB0aGlzLmJ1dHRvbklkID0gKHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5pZCA6ICcnKSArICh0aGlzLmJ1dHRvbiA/IHRoaXMuYnV0dG9uLmlkIDogJycpO1xuICAgIHRoaXMuc2V0QWNjZW50UmdiVmFyKCk7XG5cbiAgICBsZXQgZW5hYmxlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzaWduVXBFbmFibGVkJyk7XG4gICAgaWYgKGVuYWJsZWQgIT0gbnVsbClcbiAgICAgIHRoaXMuc2lnblVwRW5hYmxlZCA9IGVuYWJsZWQgPT09ICd0cnVlJztcblxuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHsgfVxuXG4gIC8qKiBTZXRzIC0tYWNjZW50LXJnYiBDU1MgdmFyaWFibGUgc28gYW5pbWF0ZWQgY2lyY2xlcyBtYXRjaCB0aGUgdXNlcidzIGJyYW5kIGNvbG9yICovXG4gIHByaXZhdGUgc2V0QWNjZW50UmdiVmFyKCkge1xuICAgIGNvbnN0IGhleCA9IHRoaXMuc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA/PyAnIzY2N2VlYSc7XG4gICAgY29uc3QgY2xlYW5IZXggPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgICBpZiAoY2xlYW5IZXgubGVuZ3RoID09PSA2KSB7XG4gICAgICBjb25zdCByID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XG4gICAgICBjb25zdCBnID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDIsIDQpLCAxNik7XG4gICAgICBjb25zdCBiID0gcGFyc2VJbnQoY2xlYW5IZXguc3Vic3RyaW5nKDQsIDYpLCAxNik7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWNjZW50LXJnYicsIGAke3J9LCAke2d9LCAke2J9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNhbkdvQmFjaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIHBob25lIGlzIHRoZSBmaXJzdCBzY3JlZW47IG5vIGJhY2sgZnJvbSBwaG9uZVxuICB9XG5cbiAgZ29CYWNrKCkge1xuICAgIGlmICh0aGlzLmF1dGhTY3JlZW4gPT09ICdPVFAnKSB0aGlzLmF1dGhTY3JlZW4gPSAnUEhPTkUnO1xuICAgIGVsc2UgaWYgKHRoaXMuYXV0aFNjcmVlbiA9PT0gJ1JFR0lTVEVSJykgdGhpcy5hdXRoU2NyZWVuID0gJ09UUCc7XG4gIH1cblxuICBjbG9zZUF1dGgoKSB7XG4gICAgaWYgKHRoaXMuZGlhbG9nUmVmKSB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIGVsc2UgaWYgKHRoaXMuYm90dG9tc2hlZXRSZWYpIHRoaXMuYm90dG9tc2hlZXRSZWYuZGlzbWlzcygpO1xuICAgIGVsc2UgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycnXSk7XG4gIH1cblxuICBmb3JtYXRDb3VudGRvd24oc2VjczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtID0gTWF0aC5mbG9vcihzZWNzIC8gNjApLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBzID0gKHNlY3MgJSA2MCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBgJHttfToke3N9YDtcbiAgfVxuXG4gIHN0YXJ0UmVzZW5kVGltZXIoc2Vjb25kczogbnVtYmVyID0gNjApIHtcbiAgICB0aGlzLnJlc2VuZENvdW50ZG93biA9IHNlY29uZHM7XG4gICAgaWYgKHRoaXMucmVzZW5kSW50ZXJ2YWwpIGNsZWFySW50ZXJ2YWwodGhpcy5yZXNlbmRJbnRlcnZhbCk7XG4gICAgdGhpcy5yZXNlbmRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZW5kQ291bnRkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNlbmRDb3VudGRvd24gPD0gMCkge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMucmVzZW5kSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLnJlc2VuZENvdW50ZG93biA9IDA7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBzZW5kT1RQKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBJbnB1dCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIG9yIDEwLWRpZ2l0IG1vYmlsZSBudW1iZXInIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwVjIodGhpcy5lbWFpbE9yTnVtYmVyLCB0aGlzLmJ1c2luZXNzSWQgPz8gJycpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzRXhpc3RpbmdVc2VyID0gcmVzcG9uc2U/LmRhdGE/LmlzRXhpc3RpbmdVc2VyID8/IHRydWU7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dGhTY3JlZW4gPSAnT1RQJztcbiAgICAgICAgdGhpcy5zdGFydFJlc2VuZFRpbWVyKDYwKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQIFNlbnQnLCBkZXRhaWw6IHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlID8/ICgnT1RQIHNlbnQgdG8gJyArIHRoaXMuZW1haWxPck51bWJlcikgfSk7XG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNlbmRPVFBOZXcoKSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5zZW5kT3RwVjIodGhpcy5lbWFpbE9yTnVtYmVyLCB0aGlzLmJ1c2luZXNzSWQgPz8gJycpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zdGFydFJlc2VuZFRpbWVyKDYwKTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ09UUCBSZXNlbnQnLCBkZXRhaWw6IHJlc3BvbnNlPy5kYXRhPy5tZXNzYWdlID8/ICgnTmV3IE9UUCBzZW50IHRvICcgKyB0aGlzLmVtYWlsT3JOdW1iZXIpIH0pO1xuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeU9UUE5ldygpIHtcbiAgICBpZiAoIXRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xuICAgICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA8IDYpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ09UUCBSZXF1aXJlZCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciB0aGUgNi1kaWdpdCBPVFAnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/ICcnLFxuICAgICAgICBpZGVudGlmaWVyOiB0aGlzLmVtYWlsT3JOdW1iZXIsXG4gICAgICAgIG90cDogdGhpcy5vbmVUaW1lUGFzc3dvcmQsXG4gICAgICAgIGRldmljZUluZm86IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLnZlcmlmeU90cFYyKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBmbG93ID0gcmVzcG9uc2UuZGF0YT8uZmxvdztcblxuICAgICAgICBpZiAoZmxvdyA9PT0gJ1NJR05VUCcpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmF1dGhTY3JlZW4gPSAnUkVHSVNURVInO1xuXG4gICAgICAgICAgLy8gUHJlZmlsbCBlbWFpbCBvciBwaG9uZSBiYXNlZCBvbiByZWdleFxuICAgICAgICAgIGlmICgvXls2LTldXFxkezl9JC8udGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpKSB7XG4gICAgICAgICAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5lbWFpbE9yTnVtYmVyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtYWlsID0gdGhpcy5lbWFpbE9yTnVtYmVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmbG93ID09PSAnTE9HSU4nKSB7XG4gICAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKTtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VyPy5yZWZlcnJhbERldGFpbHMpO1xuICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXRtX3VfaWQnKSkge1xuICAgICAgICAgICAgdGhpcy5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEudXNlcj8udXNlcklkLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXRtX3VfaWQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKTtcbiAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnTG9nZ2VkIEluJywgZGV0YWlsOiAnTG9nZ2VkIGluIHN1Y2Nlc3NmdWxseScgfSk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudCkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvc2NoZW1lcyddKTtcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzY2hlbWUtZGV0YWlsJ10pO1xuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICAgICAgZWxzZSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgICAgICAgfVxuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJVc2VyKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMudXNlck5hbWUgfHwgdGhpcy51c2VyTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdOYW1lIFJlcXVpcmVkJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIHlvdXIgZnVsbCBuYW1lJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbW9iaWxlUmVnZXggPSAvXls2LTldXFxkezl9JC87XG4gICAgICBpZiAoIW1vYmlsZVJlZ2V4LnRlc3QodGhpcy5waG9uZU51bWJlcikpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgMTAtZGlnaXQgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wYXNzd29yZCB8fCB0aGlzLnBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1Bhc3N3b3JkIFJlcXVpcmVkJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgcGFzc3dvcmQnIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wYXNzd29yZCAhPT0gdGhpcy5jb25mUGFzc3dvcmQpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1Bhc3N3b3JkIE1pc21hdGNoJywgZGV0YWlsOiAnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgICBsZXQgdmVyaWZ5U2lnbkRhdGE6IGFueSA9IHtcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5lbWFpbE9yTnVtYmVyLFxuICAgICAgICBuYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBtb2JpbGU6IHRoaXMucGhvbmVOdW1iZXIsXG4gICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICBjb25maXJtUGFzc3dvcmQ6IHRoaXMuY29uZlBhc3N3b3JkLFxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gJycsXG4gICAgICAgIGJ1c2luZXNzTmFtZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JOYW1lJykgPz8gJycsXG4gICAgICAgIHJlZmVycmFsSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpID8/IG51bGxcbiAgICAgIH07XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmNvbXBsZXRlU2lnbnVwVjIodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpIHtcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdXZWxjb21lIScsIGRldGFpbDogJ1lvdXIgYWNjb3VudCBoYXMgYmVlbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScgfSk7XG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYWdlKSB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICBlbHNlIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdSZWdpc3RyYXRpb24gRXJyb3InLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2luV2l0aFBhc3N3b3JkKCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBJbnB1dCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIG9yIDEwLWRpZ2l0IG1vYmlsZSBudW1iZXInIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMucGFzc3dvcmQgfHwgdGhpcy5wYXNzd29yZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdQYXNzd29yZCBSZXF1aXJlZCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciBhIHBhc3N3b3JkJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgaWRlbnRpZmllcjogdGhpcy5lbWFpbE9yTnVtYmVyLFxuICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkID8/ICcnLFxuICAgICAgICBkZXZpY2VJbmZvOiBudWxsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmxvZ2luV2l0aFBhc3N3b3JkTmV3KHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3V0bV91X2lkJykpIHtcbiAgICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1dG1fdV9pZCcpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBzdWNjZXNzZnVsbHknIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnByb2NlZWRUb0NoZWNrb3V0KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMubmF2aWdhdGVUb1NjaGVtZURldGFpbHMpIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSkgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZSB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnTG9naW4gRmFpbGVkJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0KGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMub3RwQ29udHJvbHMuYXQoaW5kZXgpLnZhbHVlIHx8ICcnO1xuICAgIGlmICghL15bMC05XSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICB0aGlzLm90cENvbnRyb2xzLmF0KGluZGV4KS5zZXRWYWx1ZSgnJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDUpIHtcbiAgICAgIHRoaXMuaW5wdXRzLnRvQXJyYXkoKVtpbmRleCArIDFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJiAhdGhpcy5vdHBDb250cm9scy5hdChpbmRleCkudmFsdWUgJiYgaW5kZXggPiAwKSB7XG4gICAgICB0aGlzLmlucHV0cy50b0FycmF5KClbaW5kZXggLSAxXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIGdldEdyYWRpZW50RGlyZWN0aW9uKGRpcmVjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnRE9XTic6XG4gICAgICAgIHJldHVybiAnJzsgLy8gZGVmYXVsdCB0b3Ag4oaSIGJvdHRvbSAobm8gYW5nbGUgbmVlZGVkKVxuXG4gICAgICBjYXNlICdSSUdIVCc6XG4gICAgICAgIHJldHVybiAnOTBkZWcnO1xuXG4gICAgICBjYXNlICdESUFHT05BTF9SSUdIVCc6XG4gICAgICAgIHJldHVybiAnNDVkZWcnO1xuXG4gICAgICBjYXNlICdESUFHT05BTF9MRUZUJzpcbiAgICAgICAgcmV0dXJuICcxMzVkZWcnO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7IC8vIGZhbGxiYWNrXG4gICAgfVxuICB9XG4gIGdldCBmb250Q29sb3IoKTogc3RyaW5nIHtcbiAgICBsZXQgY29sb3IgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3I7XG4gICAgaWYgKCFjb2xvcikgcmV0dXJuICcjMDAwJztcblxuICAgIC8vIGlmIGdyYWRpZW50LCBleHRyYWN0IGZpcnN0IGhleCBjb2xvclxuICAgIGNvbnN0IGdyYWRpZW50TWF0Y2ggPSBjb2xvci5tYXRjaCgvIyhbMC05YS1mQS1GXXs2fSkvKTtcbiAgICBpZiAoZ3JhZGllbnRNYXRjaCkge1xuICAgICAgY29sb3IgPSBncmFkaWVudE1hdGNoWzBdO1xuICAgIH1cblxuICAgIGNvbG9yID0gY29sb3IucmVwbGFjZSgnIycsICcnKTtcblxuICAgIGNvbnN0IHIgPSBwYXJzZUludChjb2xvci5zdWJzdHJpbmcoMCwgMiksIDE2KTtcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoY29sb3Iuc3Vic3RyaW5nKDIsIDQpLCAxNik7XG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGNvbG9yLnN1YnN0cmluZyg0LCA2KSwgMTYpO1xuXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcblxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMTI4ID8gJyMwMDAnIDogJyNmZmYnO1xuICB9XG4gIGdldCBhY2NlbnRCYWNrZ3JvdW5kKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmcgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZDtcblxuICAgIGlmICghYmcpIHJldHVybiAnJztcblxuICAgIGlmIChiZy5hY2NlbnRCYWNrZ3JvdW5kVHlwZSA9PT0gJ1NvbGlkJykge1xuICAgICAgcmV0dXJuIGJnLmFjY2VudENvbG9yO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gdGhpcy5nZXRHcmFkaWVudERpcmVjdGlvbihiZy5ncmFkaWVudERpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gYW5nbGVcbiAgICAgID8gYGxpbmVhci1ncmFkaWVudCgke2FuZ2xlfSwgJHtiZy5hY2NlbnRDb2xvcn0sICR7Ymcuc2Vjb25kYXJ5QWNjZW50Q29sb3J9KWBcbiAgICAgIDogYGxpbmVhci1ncmFkaWVudCgke2JnLmFjY2VudENvbG9yfSwgJHtiZy5zZWNvbmRhcnlBY2NlbnRDb2xvcn0pYDtcbiAgfVxuICBnZXRGb3JtT3RwKCkge1xuICAgIHJldHVybiB0aGlzLm90cENvbnRyb2xzLnZhbHVlLmpvaW4oJycpO1xuICB9XG4gIGxvZ2luVHlwZTogXCJQQVNTV09SRFwiIHwgXCJPVFBcIiA9IFwiT1RQXCI7XG4gIGdlbmVyYXRlT3RwOiBib29sZWFuID0gdHJ1ZTtcbiAgZ2VuZXJhdGVkT3RwOiBhbnkgPSBudWxsO1xuICBvbmVUaW1lUGFzc3dvcmQ6IHN0cmluZyA9IFwiXCI7XG4gIGNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cbiAgbG9naW4oKSB7XG4gICAgaWYgKCF0aGlzLmVkaXQpIHtcbiAgICAgIGlmICh0aGlzLmxvZ2luVHlwZSA9PSBcIk9UUFwiKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5T1RQKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZlcmlmeVBhc3N3b3JkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW5kVXNlclJlZmZlcmFsRGV0YWlscyh1c2VySWQ6IGFueSwgcmVmZXJyYWxVbmlxdWVJZDogYW55KSB7XG4gICAgdGhpcy5yZXN0U2VydmljZS5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZCwgcmVmZXJyYWxVbmlxdWVJZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcInJlc3BvbnNlXCIsIHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKVxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRSZWZlcnJhbERldGFpbHMocmVzcG9uc2UuZGF0YS5yZWZlcnJhbERldGFpbHMpO1xuICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKVxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICB9KVxuICB9XG5cbiAgdmVyaWZ5UGFzc3dvcmQoKSB7XG5cbiAgICBpZiAoIXRoaXMuaXNFbWFpbE9yTnVtYmVyVmFsaWQoKSkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgRW1haWwvTW9iaWxlJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3IgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuYnVzaW5lc3NJZCA/PyBcIjFmMTI1MGIxLTQ2N2UtNjdiYy1hZDg5LTgxM2E0NGVkMGUwZlwiLFxuICAgICAgZW1haWw6IHRoaXMuZW1haWxPck51bWJlci50b0xvd2VyQ2FzZSgpLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICByZXF1ZXN0VHlwZTogXCJQQVNTV09SRFwiXG4gICAgfVxuXG4gICAgdGhpcy5idXR0b25Mb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLnNpZ25pblBhc3N3b3JkKHBheWxvYWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUFsbERhdGEoKTtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0UmVmZXJyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEucmVmZXJyYWxEZXRhaWxzKTtcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKSB7XG4gICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxuICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLm1lcmdlQW5vbnltb3VzVXNlcih1c2VyRGV0YWlscy51c2VySWQpO1xuICAgICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3N1Y2Nlc3MnKTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0xvZ2dlZCBJbicsIGRldGFpbDogJ0xvZ2dlZCBpbiBTdWNjZXNzZnVsbHknIH0pO1xuICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSwgeyBxdWVyeVBhcmFtczogeyBjaGVja291dDogdHJ1ZSB9IH0pO1xuICAgICAgZWxzZSBpZiAodGhpcy5wcm9jZWVkVG9FbnJvbGxtZW50KVxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2hvbWUtYXBwb2ludG1lbnQnXSwgdGhpcy50cnlBdEhvbWVNb2RlID8geyBxdWVyeVBhcmFtczogeyBtb2RlOiB0aGlzLnRyeUF0SG9tZU1vZGUgfSB9IDoge30pO1xuICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3NjaGVtZS1kZXRhaWwnXSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfSk7XG4gICAgICB9KVxuICB9XG4gIHZlcmlmeU9UUCgpIHtcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgIGlmICghdGhpcy5pc0VtYWlsT3JOdW1iZXJWYWxpZCgpKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBFbWFpbC9Nb2JpbGUnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBvciBtb2JpbGUgbnVtYmVyJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSB0aGlzLm90cENvbnRyb2xzPy52YWx1ZT8uam9pbignJykgfHwgJyc7XG4gICAgaWYgKHRoaXMub25lVGltZVBhc3N3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQgPz8gXCIxZjA3Y2QwOS1jZjYxLTYwMDgtOTg1NC0wNTRiOThhMTYyN2FcIixcbiAgICAgICAgZW1haWw6IHRoaXMuZW1haWxPck51bWJlci50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBlbnRlcmVkT3RwOiB0aGlzLm9uZVRpbWVQYXNzd29yZCxcbiAgICAgICAgcmVxdWVzdFR5cGU6IFwiT1RQXCJcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzdFNlcnZpY2Uuc2lnbmluUGFzc3dvcmQocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFRva2VuKHJlc3BvbnNlLmRhdGEucGFzc2Jvb2tUb2tlbik7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlQWxsRGF0YSgpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFJlZmVycmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnJlZmVycmFsRGV0YWlscyk7XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKSB7XG4gICAgICAgICAgdGhpcy5lbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHJlc3BvbnNlLmRhdGEudXNlcklkLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VyRGV0YWlscy51c2VySWQpXG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5tZXJnZUFub255bW91c1VzZXIodXNlckRldGFpbHMudXNlcklkKTtcbiAgICAgICAgdGhpcy5vbmVUaW1lUGFzc3dvcmQgPSBcIlwiO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdMb2dnZWQgSW4nLCBkZXRhaWw6ICdMb2dnZWQgaW4gU3VjY2Vzc2Z1bGx5JyB9KTtcbiAgICAgICAgaWYgKHRoaXMucHJvY2VlZFRvQ2hlY2tvdXQpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvY2FydCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGNoZWNrb3V0OiB0cnVlIH0gfSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucHJvY2VlZFRvRW5yb2xsbWVudClcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zY2hlbWVzJ10pO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeUF0SG9tZSlcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9ob21lLWFwcG9pbnRtZW50J10sIHRoaXMudHJ5QXRIb21lTW9kZSA/IHsgcXVlcnlQYXJhbXM6IHsgbW9kZTogdGhpcy50cnlBdEhvbWVNb2RlIH0gfSA6IHt9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5uYXZpZ2F0ZVRvU2NoZW1lRGV0YWlscykge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnc2NoZW1lLWRldGFpbCddKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xuICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0xvZ2luIHJlcXVlc3QnLCBkZXRhaWw6IGVycm9yPy5lcnJvcj8ubWVzc2FnZSB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdMb2dpbiByZXF1ZXN0JywgZGV0YWlsOiBcIlBsZWFzZSBlbnRlciBPVFBcIiB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgc2VuZFNpZ251cE9UUCgpIHtcbiAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaXNPVFBWZXJpZmllZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm1vYmlsZVRpbWVyKVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW9iaWxlVGltZXIpO1xuICAgIHRoaXMubW9iaWxlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1vYmlsZS5sZW5ndGggIT0gMTApXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgICBtb2JpbGU6IHRoaXMubW9iaWxlLFxuICAgICAgICBlbWFpbDogdGhpcy5lbWFpbCxcbiAgICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICAgIGNvdW50cnlDb2RlOiAnOTEnXG4gICAgICB9XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLnNlbmRTaWdudXBPVFAocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzT1RQVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFNlbnQnIH0pO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnT1RQIFJlcXVlc3QnLCBkZXRhaWw6IGVyci5lcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgfSwgODAwKTtcbiAgfVxuICBjcmVhdGVBY2NvdW50KCkge1xuICAgIGlmICghdGhpcy5lZGl0KSB7XG4gICAgICBpZiAoIXRoaXMuaXNFbWFpbFZhbGlkKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIEVtYWlsJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcycgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc1Bhc3N3b3JkVmFsaWQpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0ludmFsaWQgUGFzc3dvcmQnLCBkZXRhaWw6ICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5tb2JpbGVOdW1iZXJWYWxpZCkge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnSW52YWxpZCBNb2JpbGUgTnVtYmVyJywgZGV0YWlsOiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgbW9iaWxlIG51bWJlcicgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2aWNlSW5mbzogRGV2aWNlSW5mbyB8IG51bGwgPSB7XG4gICAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgbGV0IHZlcmlmeVNpZ25EYXRhID0ge1xuICAgICAgICBuYW1lOiB0aGlzLnVzZXJOYW1lLFxuICAgICAgICBidXNpbmVzc0lkOiB0aGlzLmJ1c2luZXNzSWQsXG4gICAgICAgIGJ1c2luZXNzTmFtZTogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JOYW1lJyksXG4gICAgICAgIG1vYmlsZTogdGhpcy5tb2JpbGUsXG4gICAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHBhc3N3b3JkOiB0aGlzLnBhc3N3b3JkLFxuICAgICAgICBjb3VudHJ5Q29kZTogXCIrOTFcIixcbiAgICAgICAgZW50ZXJlZE90cDogdGhpcy5vdHAsXG4gICAgICAgIHJlZmVycmFsSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikgPz8gXCJcIlxuICAgICAgfVxuICAgICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRUb2tlbihyZXNwb25zZS5kYXRhLnBhc3Nib29rVG9rZW4pO1xuICAgICAgICAvLyB0aGlzLnJlc3RTZXJ2aWNlLmdlbmVyYXRlVG9rZW4obG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JJZCcpKS5zdWJzY3JpYmUoe1xuICAgICAgICAvLyAgIG5leHQ6ICh0b2tlblJlc3BvbnNlOiBhbnkpID0+IHtcblxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhdGluZyB0b2tlbjonLCBlcnJvcik7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KVxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xuICAgICAgICAgIHRoaXMuZW5kVXNlclJlZmZlcmFsRGV0YWlscyhyZXNwb25zZS5kYXRhLnVzZXJJZCwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGVBbGxEYXRhKCk7XG4gICAgICAgIHRoaXMuc3luY1RyaWFsQ2FydFRvU2VydmVyREIodXNlckRldGFpbHMudXNlcklkKVxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UubWVyZ2VBbm9ueW1vdXNVc2VyKHVzZXJEZXRhaWxzLnVzZXJJZCk7XG5cbiAgICAgICAgLy8gdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgdGhpcy5idXR0b25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ1NpZ24gVXAnLCBkZXRhaWw6ICdZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQnIH0pO1xuICAgICAgICBpZiAodGhpcy5wcm9jZWVkVG9DaGVja291dClcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10sIHsgcXVlcnlQYXJhbXM6IHsgY2hlY2tvdXQ6IHRydWUgfSB9KTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy50cnlBdEhvbWUpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvaG9tZS1hcHBvaW50bWVudCddLCB0aGlzLnRyeUF0SG9tZU1vZGUgPyB7IHF1ZXJ5UGFyYW1zOiB7IG1vZGU6IHRoaXMudHJ5QXRIb21lTW9kZSB9IH0gOiB7fSk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UpXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pOyAgICAgIC8vIFN3YWwuZmlyZSh7XG4gICAgICAgIC8vICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAgIC8vICAgdGl0bGU6IFwiSHVycmF5XCIsXG4gICAgICAgIC8vICAgdGV4dDogXCJZb3VyIGFjY291bnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIixcbiAgICAgICAgLy8gICBzaG93Q2FuY2VsQnV0dG9uOiAhKHVzZXJEZXRhaWxzLmNvbnRhY3Q/Lm5hbWU/Lmxlbmd0aCA+IDApLFxuICAgICAgICAvLyAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkkgbG92ZWQgaXRcIixcbiAgICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiBcIkZpbGwgb3RoZXIgYmFzaWMgZGV0YWlsc1wiLFxuICAgICAgICAvLyAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiM5MjhjOGNcIixcbiAgICAgICAgLy8gfSkudGhlbigocmVzdWx0KSA9PiB7XG5cbiAgICAgICAgLy8gICBpZiAocmVzdWx0LmlzRGlzbWlzc2VkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKFVzZXJCYXNpY0luZm9Db21wb25lbnQsIHtcbiAgICAgICAgLy8gICAgICAgaGVpZ2h0OiAnNTB2aCcsXG4gICAgICAgIC8vICAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCA+IDQ3NSA/ICc0MHZ3JyA6ICc5NXZ3JyxcbiAgICAgICAgLy8gICAgICAgbWF4V2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoID4gNDc1ID8gJzEwMHZ3JyA6ICc4MHZ3JyxcbiAgICAgICAgLy8gICAgICAgZGF0YToge31cbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSlcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1NpZ251cCBlcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ1NpZ251cCBlcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5tZXNzYWdlIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuICB2ZXJpZnlTaWdudXBPVFAoKSB7XG5cbiAgICBpZiAodGhpcy5vdHAubGVuZ3RoICE9IDYpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvIHwgbnVsbCA9IHtcbiAgICAgIGZpcmViYXNlVG9rZW46IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZmJUb2tlblwiKSA/PyBcIlwiXG4gICAgfTtcblxuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgbGV0IHZlcmlmeVNpZ25EYXRhID0ge1xuICAgICAgYnVzaW5lc3NJZDogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgbW9iaWxlOiB0aGlzLm1vYmlsZSxcbiAgICAgIGVtYWlsOiB0aGlzLmVtYWlsLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXG4gICAgICBjb3VudHJ5Q29kZTogXCI5MVwiLFxuICAgICAgZW50ZXJlZE90cDogdGhpcy5vdHAsXG4gICAgICByZWZlcnJhbElkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInV0bV91X2lkXCIpID8/IFwiXCJcbiAgICB9XG4gICAgdGhpcy5yZXN0U2VydmljZS52ZXJpZnlTaWdudXBPVFAodmVyaWZ5U2lnbkRhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1dG1fdV9pZFwiKSkge1xuICAgICAgICB0aGlzLmVuZFVzZXJSZWZmZXJhbERldGFpbHMocmVzcG9uc2UuZGF0YS51c2VySWQsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXRtX3VfaWRcIikpO1xuICAgICAgfVxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnT1RQJywgZGV0YWlsOiAnT1RQIFZlcmlmaWVkJyB9KTtcbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdVc2VyIGFscmVhZHkgZXhpc3RzJyB9KVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdJbnZhbGlkIE9UUCcsIGRldGFpbDogJ1BsZWFzZSBlbnRlciB2YWxpZCBvdHAnIH0pO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgZW50ZXJNb2JpbGUoKSB7XG5cbiAgICBpZiAodGhpcy5tb2JpbGVUaW1lcilcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vYmlsZVRpbWVyKTtcbiAgICB0aGlzLm1vYmlsZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tb2JpbGUubGVuZ3RoICE9IDEwKVxuICAgICAgICByZXR1cm47XG4gICAgICB0aGlzLmdlbmVyYXRlT1RQKCk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIGdlbmVyYXRlT1RQKCkge1xuICAgIHRoaXMuYnV0dG9uTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5yZXN0U2VydmljZS5nZW5lcmF0ZU9UUCh0aGlzLm1vYmlsZSA/PyBcIlwiLCBcIjkxXCIpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgIHNldmVyaXR5OiAnc3VjY2VzcycsXG4gICAgICAgICAgc3VtbWFyeTogJ09UUCBTZW50JyxcbiAgICAgICAgICBkZXRhaWw6ICdPVFAgc2VudCB0byBtb2JpbGUuIFZhbGlkIGZvciAzIG1pbnMnLFxuICAgICAgICAgIGxpZmU6IDEwMDAwXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/LmVycm9yPy5tZXNzYWdlO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnT1RQIFJlcXVlc3QnLFxuICAgICAgICAgIGRldGFpbDogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgIGxpZmU6IDEwMDAwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZU51bWJlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQuY2hhckNvZGU7XG4gICAgaWYgKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1Nykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZU9UUChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm90cC5sZW5ndGggPT0gNikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgY2hlY2tTdHJlbmd0aCgpIHtcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA9IDA7XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgKz0gKC9bQS1aXS8udGVzdCh0aGlzLnBhc3N3b3JkKSkgPyAxIDogMDtcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCArPSAoL1thLXpdLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICgvXFxkLy50ZXN0KHRoaXMucGFzc3dvcmQpKSA/IDEgOiAwO1xuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ICs9ICh0aGlzLnBhc3N3b3JkLmxlbmd0aCA+IDggPyAxIDogMCk7XG4gIH1cbiAgZ2V0U3RyZW5ndGhDb2xvcihpbmRleDogbnVtYmVyKSB7XG4gICAgc3dpdGNoICh0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gKGluZGV4IDwgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgPyBcInRvbWF0b1wiIDogXCIjZDNkM2QzYmFcIik7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiAoaW5kZXggPCB0aGlzLnBhc3N3b3JkU3RyZW5ndGhDb3VudCA/IFwib3JhbmdlXCIgOiBcIiNkM2QzZDNiYVwiKTtcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIChpbmRleCA8IHRoaXMucGFzc3dvcmRTdHJlbmd0aENvdW50ID8gXCJ5ZWxsb3dcIiA6IFwiI2QzZDNkM2JhXCIpO1xuICAgICAgY2FzZSA0OlxuICAgICAgICByZXR1cm4gKGluZGV4IDwgdGhpcy5wYXNzd29yZFN0cmVuZ3RoQ291bnQgPyBcImxpZ2h0Z3JlZW5cIiA6IFwiI2QzZDNkM2JhXCIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiI2QzZDNkM2JhXCI7XG4gICAgfVxuICB9XG4gIGVtYWlsRGVib3VuY2VUaW1lcjogYW55O1xuICBvbkVtYWlsQ2hhbmdlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmVtYWlsRGVib3VuY2VUaW1lcik7XG4gICAgdGhpcy5lbWFpbERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNFbWFpbFZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuICBlbWFpbENoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRW1haWxWYWxpZCgpIHtcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICAgIHRoaXMuZW1haWxDaGVjayA9ICFlbWFpbFJlZ2V4LnRlc3QodGhpcy5lbWFpbCk7XG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsKTtcbiAgfVxuICBwYXNzd29yZERlYm91bmNlVGltZXI6IGFueTtcbiAgb25QYXNzd29yZENoYW5nZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5wYXNzd29yZERlYm91bmNlVGltZXIpO1xuICAgIHRoaXMucGFzc3dvcmREZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzUGFzc3dvcmRWYWxpZCgpO1xuICAgIH0sIDIwMCk7XG4gIH1cbiAgcGFzc3dvcmRDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1Bhc3N3b3JkVmFsaWQoKSB7XG4gICAgY29uc3QgcGFzc3dvcmRSZWdleCA9IC9eKD89LipbYS16XSkoPz0uKltBLVpdKSg/PS4qXFxkKSg/PS4qW15BLVphLXpcXGRdKS57OCx9JC87XG5cbiAgICBjb25zdCBpc1ZhbGlkID0gcGFzc3dvcmRSZWdleC50ZXN0KHRoaXMucGFzc3dvcmQpO1xuXG4gICAgLy8gWW91IHdhbnQgRkFMU0Ugd2hlbiB2YWxpZFxuICAgIHRoaXMucGFzc3dvcmRDaGVjayA9ICFpc1ZhbGlkO1xuXG4gICAgcmV0dXJuIHRoaXMucGFzc3dvcmRDaGVjaztcbiAgfVxuXG4gIG1vYmlsZURlYm91bmNlVGltZXI6IGFueTtcbiAgb25Nb2JpbGVDaGFuZ2UoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubW9iaWxlRGVib3VuY2VUaW1lcik7XG4gICAgdGhpcy5tb2JpbGVEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1vYmlsZU51bWJlclZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuICBtb2JpbGVDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2JpbGVOdW1iZXJWYWxpZCgpIHtcbiAgICBjb25zdCBtb2JpbGVSZWdleCA9IC9eWzYtOV1cXGR7OX0kLztcbiAgICB0aGlzLm1vYmlsZUNoZWNrID0gIW1vYmlsZVJlZ2V4LnRlc3QodGhpcy5tb2JpbGUpO1xuICAgIHJldHVybiBtb2JpbGVSZWdleC50ZXN0KHRoaXMubW9iaWxlKTtcbiAgfVxuXG4gIGVtYWlsT3JOdW1iZXI6IHN0cmluZyA9IFwiXCI7XG4gIGVtYWlsT3JOdW1iZXJDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VtYWlsT3JOdW1iZXJWYWxpZCgpIHtcbiAgICBjb25zdCBlbWFpbFJlZ2V4ID0gL15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSQvO1xuICAgIGNvbnN0IG1vYmlsZVJlZ2V4ID0gL15bNi05XVxcZHs5fSQvO1xuICAgIHRoaXMuZW1haWxPck51bWJlckNoZWNrID0gIWVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpICYmICFtb2JpbGVSZWdleC50ZXN0KHRoaXMuZW1haWxPck51bWJlcik7XG4gICAgcmV0dXJuIGVtYWlsUmVnZXgudGVzdCh0aGlzLmVtYWlsT3JOdW1iZXIpIHx8IG1vYmlsZVJlZ2V4LnRlc3QodGhpcy5lbWFpbE9yTnVtYmVyKTtcbiAgfVxuXG5cbiAgZW1haWxPck51bWJlckRlYm91bmNlVGltZXI6IGFueTtcbiAgb25FbWFpbE9yTnVtYmVyQ2hhbmdlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmVtYWlsT3JOdW1iZXJEZWJvdW5jZVRpbWVyKTtcbiAgICB0aGlzLmVtYWlsT3JOdW1iZXJEZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzRW1haWxPck51bWJlclZhbGlkKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNDc1O1xuICB9XG5cbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XG4gIH1cblxuICBnZXQgYWNjZW50Q29sb3IoKSB7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgPyB0aGlzLnN0eWxlcy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvciA6ICcjNjY3ZWVhJztcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWNjZW50LWNvbG9yJywgY29sb3IpO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY2NlbnQtc2hhZG93JywgdGhpcy5oZXhUb1JnYmEoY29sb3IsIDAuNCkpO1xuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuICBwcml2YXRlIGhleFRvUmdiYShoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zbGljZSgxLCAzKSwgMTYpO1xuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KTtcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7YWxwaGF9KWA7XG4gIH1cbiAgc2V0dXAzREVmZmVjdHMoKSB7XG4gICAgY29uc3QgbWFpblBhbmVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1haW4tcGFuZWwnKTtcblxuICAgIGlmIChtYWluUGFuZWwpIHtcbiAgICAgIG1haW5QYW5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCAoZTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IG1haW5QYW5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdDtcbiAgICAgICAgY29uc3QgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlclggPSByZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHJlY3QuaGVpZ2h0IC8gMjtcblxuICAgICAgICBjb25zdCByb3RhdGVYID0gKHkgLSBjZW50ZXJZKSAvIDIwO1xuICAgICAgICBjb25zdCByb3RhdGVZID0gKGNlbnRlclggLSB4KSAvIDIwO1xuXG4gICAgICAgIChtYWluUGFuZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9IGBwZXJzcGVjdGl2ZSgxMjAwcHgpIHJvdGF0ZVgoJHtyb3RhdGVYfWRlZykgcm90YXRlWSgke3JvdGF0ZVl9ZGVnKSB0cmFuc2xhdGVaKDApYDtcbiAgICAgIH0pO1xuXG4gICAgICBtYWluUGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgKG1haW5QYW5lbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZVgoMGRlZykgcm90YXRlWSgwZGVnKSc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBzaG93UGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzeW5jVHJpYWxDYXJ0VG9TZXJ2ZXJEQih1c2VySWQ6IHN0cmluZykge1xuICAgIGxldCB0cmlhbENhcnRJdGVtOiBhbnlbXSA9IFtdXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5nZXRUcmlhbENhcnQoKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgcmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJUcmlhbENhcnRSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRyaWFsQ2FydEl0ZW0gPSB1c2VyVHJpYWxDYXJ0UmVzcG9uc2UudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWFsQ2FydEl0ZW0/Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGxldCByZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0ID0gbmV3IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QodXNlcklkLCAnVFJJQUxfQ0FSVCcsIHRyaWFsQ2FydEl0ZW0pXG4gICAgICAgIHRoaXMucmVzdFNlcnZpY2UuYWRkVHJpYWxJdGVtKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmNsZWFyVHJpYWxDYXJ0KCk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcblxuICB9XG5cbiAgYmFja1RvSG9tZSgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcbiAgfVxufVxuIiwiPHAtdG9hc3QgcG9zaXRpb249XCJib3R0b20tcmlnaHRcIiBbYmFzZVpJbmRleF09XCIxMDAwMDAwMDAwMFwiIFthdXRvWkluZGV4XT1cInRydWVcIlxuICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XG5cbjxzZWN0aW9uIFtpZF09XCJkYXRhPy5pZFwiIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIj5cbiAgPGRpdiBbc3BhY2luZ0Fyb3VuZF09XCJzdHlsZXNMYXlvdXRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9naW5fY2FyZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW5cIlxuICAgICAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGVzPy5sYXlvdXRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhcmVhIHctMTAwXCI+XG4gICAgICAgIDx1bCBjbGFzcz1cImNpcmNsZXNcIiBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtpZF09XCJkYXRhPy5pZFwiPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICAgIDxsaT48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gPT09PT0gQVVUSCBDQVJEID09PT09IC0tPlxuICAgICAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBjbGFzcz1cIm1haW4tcGFuZWwgZC1mbGV4IGdhcC0yXCIgW2NsYXNzLnNpbmdsZS1wYW5lXT1cIiFkYXRhPy5jb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlXCJcbiAgICAgICAgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgdy0xMDBcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF1dGgtY2FyZFwiIFtjbGFzcy5zaW5nbGUtcGFuZV09XCIhZGF0YT8uY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZVwiIFtpZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICBbc2ltcG9Qb3NpdGlvbkxheW91dERpcmVjdGl2ZV09XCJzdHlsZXM/LnBvc2l0aW9uTGF5b3V0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1pbWFnZVwiICpuZ0lmPVwiZGF0YT8uY29udGVudD8uaW1hZ2U/LnNob3dJbWFnZVwiPlxuICAgICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJkYXRhPy5jb250ZW50Py5pbWFnZT8udXJsXCIgW2F0dHIuYWx0XT1cImRhdGE/LmNvbnRlbnQ/LmltYWdlPy5hbHRUZXh0IHx8ICcnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF1dGgtaGVyby1pbWFnZVwiIFtzaW1wb0ltYWdlRGlyZWN0aXZlXT1cInN0eWxlcz8uaW1hZ2VcIiBbYXBwSW1hZ2VFZGl0b3JdPVwiZWRpdCA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2ltYWdlRGF0YV09XCJkYXRhPy5jb250ZW50Py5pbWFnZVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCsoZGF0YT8uY29udGVudD8uaW1hZ2U/LmlkIHx8ICcnKVwiIFtpZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICAgICAgW3NpbXBvT2JqZWN0UG9zaXRpb25dPVwiZGF0YT8uY29udGVudD8uaW1hZ2U/LnBvc2l0aW9uXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRoLWZvcm1cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYXV0aFNjcmVlblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidQSE9ORSdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmFja1RvSG9tZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHRleHQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTIgbG9naW4tbWFpbi1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEuNXJlbSAycmVtIDAuNXJlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgY2xyLWJsYWNrIGxvZ2luLXRleHRcIj5MT0dJTiBPUiBTSUdOVVA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJteC0wIG15LTBcIiBzdHlsZT1cImJvcmRlci1jb2xvcjogI2U4ZThlODtcIj5cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ2luLWlucHV0LXNlY3Rpb24gbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtY2VudGVyIG1iLTNcIiBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBjb2xvcjojNTU1O1wiPlVubG9jayBjb3Vwb25zLCBwcm9maWxlIGFuZCBtdWNoXG4gICAgICAgICAgICAgICAgICAgICAgbW9yZVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLWVtYWlsLXBob25lLWlucHV0XCI+RW1haWwgLyBNb2JpbGUgTnVtYmVyPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWVtYWlsLXBob25lLWlucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImNsci1ibGFja1wiIFsobmdNb2RlbCldPVwiZW1haWxPck51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImphbmVkb2VAZ21haWwuY29tIC8gOTg3NjU0MzIxMFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRW1haWxPck51bWJlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJDb2xvcl09XCIhZW1haWxPck51bWJlckNoZWNrID8gJycgOiAncmVkJ1wiIChrZXl1cC5lbnRlcik9XCJzZW5kT1RQKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwiZW1haWxPck51bWJlckNoZWNrXCIgW3N0eWxlLmNvbG9yXT1cIidyZWQnXCI+UGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwLWRpZ2l0XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGUgbnVtYmVyKjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlbmQtYnRuIGdhcC0yIHctMTAwIHB5LTJcIiBbYnV0dG9uRGF0YV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LnN0eWxlc1wiIHNpbXBvQnV0dG9uRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGE/LmlkKyhkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmlkIHx8ICcnKVwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcEJ1dHRvbkVkaXRvcl09XCJlZGl0ID8/IGZhbHNlXCIgW2J1dHRvbklkXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1syXT8uaWQgPz8gJydcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZW5kT1RQKClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1syXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMl0/LmNvbnRlbnQ/LmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICdTRU5EXG4gICAgICAgICAgICAgICAgICAgICAgT1RQJyB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xyLWJsYWNrIGZzLTEzXCIgc3R5bGU9XCJmb250LXdlaWdodDo3MDA7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhdXRoU2NyZWVuID0gJ1BBU1NXT1JEJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTG9naW4gd2l0aCBQYXNzd29yZFxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidPVFAnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IHRleHQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTIgbG9naW4tbWFpbi1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAxLjVyZW0gMnJlbSAwLjVyZW07XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBjbHItYmxhY2sgbG9naW4tdGV4dFwiPkxPR0lOIE9SIFNJR05VUDwvcD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwibXgtMCBteS0wXCIgc3R5bGU9XCJib3JkZXItY29sb3I6ICNlOGU4ZTg7XCI+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1pbnB1dC1zZWN0aW9uIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtYi0zIGNsci1ibGFja1wiIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgRW50ZXIgNi1kaWdpdCBPVFAgc2VudCB0byB7e2VtYWlsT3JOdW1iZXJ9fVxuICAgICAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gb3RwX2lucHV0IGdhcC0xIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIHctMTAwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nRm9yPVwibGV0IGNvbnRyb2wgb2Ygb3RwQ29udHJvbHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiAjb3RwSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1jZW50ZXIgb3RwLWJveCBjbHItYmxhY2tcIiBtYXhsZW5ndGg9XCIxXCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgKGlucHV0KT1cIm9uSW5wdXQoaSlcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50LCBpKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXNlbmRDb3VudGRvd24gPiAwXCIgY2xhc3M9XCJjbHItYmxhY2sgZnMtMTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDo3MDA7IGxldHRlci1zcGFjaW5nOjAuMDRlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJFU0VORCBJTiAmbmJzcDt7e2Zvcm1hdENvdW50ZG93bihyZXNlbmRDb3VudGRvd24pfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXNlbmRDb3VudGRvd24gPT09IDBcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsci1ibGFjayBmcy0xM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6MC4wNGVtOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZW5kT1RQTmV3KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJFU0VORCBPVFBcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCAgcHktMlwiIFtidXR0b25EYXRhXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1sxXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5pZCA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZlcmlmeU9UUE5ldygpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIG1lLTJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMV0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzFdPy5jb250ZW50Py5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAnVkVSSUZZIE9UUCcgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidSRUdJU1RFUidcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbWItM1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMS41cmVtIDJyZW0gMC41cmVtO1wiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgZnMtMjAtZnctNjAwIGNsci1ibGFja1wiPlJFR0lTVEVSPC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggdy0xMDAgc2lnbnVwLWlucHV0LWNvbnRhaW5lciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF1dGgtZnVsbG5hbWUtaW5wdXRcIj5GdWxsIE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtZnVsbG5hbWUtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY2xyLWJsYWNrXCIgWyhuZ01vZGVsKV09XCJ1c2VyTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkphbmUgRG9lXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1yZWctcGhvbmUtaW5wdXRcIj5QaG9uZSBOdW1iZXI8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHBhc3N3b3JkLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbHItYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDo1MDA7IHBhZGRpbmc6IDAgOHB4IDAgMTJweDsgd2hpdGUtc3BhY2U6bm93cmFwO1wiPis5MVxuICAgICAgICAgICAgICAgICAgICAgICAgICB8PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1yZWctcGhvbmUtaW5wdXRcIiB0eXBlPVwidGVsXCIgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctOTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBob25lTnVtYmVyXCIgcGxhY2Vob2xkZXI9XCI5ODc2NTQzMjEwXCIgbWF4bGVuZ3RoPVwiMTBcIiBpbnB1dG1vZGU9XCJudW1lcmljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvdXRsaW5lOm5vbmU7IGZvbnQtc2l6ZToxNHB4O1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1lbWFpbC1pbnB1dFwiPkVtYWlsPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWVtYWlsLWlucHV0XCIgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJjbHItYmxhY2tcIiBbKG5nTW9kZWwpXT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb21cIiAobmdNb2RlbENoYW5nZSk9XCJvbkVtYWlsQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cIiFlbWFpbENoZWNrID8gJycgOiAncmVkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiICpuZ0lmPVwiZW1haWxDaGVja1wiIFtzdHlsZS5jb2xvcl09XCIncmVkJ1wiPlBsZWFzZSBFbnRlciB2YWxpZCBlbWFpbCo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYXV0aC1yZWctcGFzc3dvcmQtaW5wdXRcIj5QYXNzd29yZDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLWlucHV0LWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTJweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cImF1dGgtcmVnLXBhc3N3b3JkLWlucHV0XCIgW3R5cGVdPVwicGFzc3dvcmRIaWRkZW4gPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctMTAwXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXNzd29yZEhpZGRlbiA9ICFwYXNzd29yZEhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Bhc3N3b3JkSGlkZGVuID8gJ3Zpc2liaWxpdHknIDogJ3Zpc2liaWxpdHlfb2ZmJ319XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImF1dGgtcmVnLWNvbmYtcGFzc3dvcmQtaW5wdXRcIj5Db25maXJtIFBhc3N3b3JkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmQtaW5wdXQtY29udGFpbmVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1yZWctY29uZi1wYXNzd29yZC1pbnB1dFwiIFt0eXBlXT1cInBhc3N3b3JkSGlkZGVuID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYi1ub25lIGNsci1ibGFjayB3LTEwMFwiIFsobmdNb2RlbCldPVwiY29uZlBhc3N3b3JkXCIgcGxhY2Vob2xkZXI9XCJDb25maXJtIFBhc3N3b3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCAgcHktMlwiIFtidXR0b25EYXRhXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5pZCA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZ2lzdGVyVXNlcigpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIG1lLTJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uTG9hZGluZ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ/LmxhYmVsPy5sZW5ndGggPiAwID8gZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5jb250ZW50Py5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAnQ09OVElOVUUnIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUEFTU1dPUkQnXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEuNXJlbSAycmVtIDAuNXJlbTtcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGZzLTIwLWZ3LTYwMCBjbHItYmxhY2tcIj5MT0dJTjwvcD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIHNpZ251cC1pbnB1dC1jb250YWluZXIgZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLXB3ZC1lbWFpbC1pbnB1dFwiPkVtYWlsIC8gTW9iaWxlIE51bWJlcjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiYXV0aC1wd2QtZW1haWwtaW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiY2xyLWJsYWNrXCIgWyhuZ01vZGVsKV09XCJlbWFpbE9yTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiamFuZWRvZUBnbWFpbC5jb20gLyA5ODc2NTQzMjEwXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25FbWFpbE9yTnVtYmVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlckNvbG9yXT1cIiFlbWFpbE9yTnVtYmVyQ2hlY2sgPyAnJyA6ICdyZWQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmLTEyXCIgKm5nSWY9XCJlbWFpbE9yTnVtYmVyQ2hlY2tcIiBbc3R5bGUuY29sb3JdPVwiJ3JlZCdcIj5QbGVhc2UgZW50ZXIgdmFsaWQgZW1haWwgb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwLWRpZ2l0XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGUgbnVtYmVyKjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdXRoLWxvZ2luLXBhc3N3b3JkLWlucHV0XCI+UGFzc3dvcmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1pbnB1dC1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEycHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJhdXRoLWxvZ2luLXBhc3N3b3JkLWlucHV0XCIgW3R5cGVdPVwicGFzc3dvcmRIaWRkZW4gPyAncGFzc3dvcmQnIDogJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiLW5vbmUgY2xyLWJsYWNrIHctMTAwXCIgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwibG9naW5XaXRoUGFzc3dvcmQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDsgdGV4dC1hbGlnbjogY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhc3N3b3JkSGlkZGVuID0gIXBhc3N3b3JkSGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFzc3dvcmRIaWRkZW4gPyAndmlzaWJpbGl0eScgOiAndmlzaWJpbGl0eV9vZmYnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZW5kLWJ0biBnYXAtMiB3LTEwMCAgcHktMlwiIFtidXR0b25EYXRhXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uc3R5bGVzXCIgc2ltcG9CdXR0b25EaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YT8uaWQrKGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uaWQgfHwgJycpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbYmFja2dyb3VuZEluZm9dPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwQnV0dG9uRWRpdG9yXT1cImVkaXQgPz8gZmFsc2VcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zWzBdPy5pZCA/PyAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ2luV2l0aFBhc3N3b3JkKClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gbWUtMlwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b25Mb2FkaW5nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/LmFjdGlvbj8uYnV0dG9uc1swXT8uY29udGVudD8ubGFiZWw/Lmxlbmd0aCA+IDAgPyBkYXRhPy5hY3Rpb24/LmJ1dHRvbnNbMF0/LmNvbnRlbnQ/LmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICdMT0dJTicgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsci1ibGFjayBmcy0xM1wiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NzAwOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXV0aFNjcmVlbiA9ICdQSE9ORSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2luIHdpdGggT1RQXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCI+PC9zaW1wby1ob3Zlci1lbGVtZW50cz5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XG4gICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxuICA8L2Rpdj5cblxuPC9zZWN0aW9uPiJdfQ==