{"id":4344,"date":"2026-09-17T05:54:24","date_gmt":"2026-09-17T03:54:24","guid":{"rendered":"https:\/\/weiss-apparatebau.de\/service\/weld-fittings-stainless-steel\/"},"modified":"2026-09-23T14:41:04","modified_gmt":"2026-09-23T12:41:04","slug":"weld-fittings-stainless-steel","status":"publish","type":"page","link":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","title":{"rendered":"Stainless steel weld fittings"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background weiss-landing-hero nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:72px;--awb-padding-bottom:72px;--awb-padding-top-small:32px;--awb-padding-bottom-small:32px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center fusion-no-small-visibility\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-1 hover-type-none has-mask\"><img decoding=\"async\" width=\"800\" height=\"728\" alt=\"Two employees in welding helmets welding a metal component\" title=\"weiss-schwei\u00dfarbeiten-fertigung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg\" class=\"lazyload img-responsive wp-image-4314\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27800%27%20height%3D%27728%27%20viewBox%3D%270%200%20800%20728%27%3E%3Crect%20width%3D%27800%27%20height%3D%27728%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-200x182.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-400x364.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-600x546.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg 800w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-one weiss-hero-title\" style=\"--awb-margin-bottom:24px;--awb-margin-bottom-small:20px;--awb-font-size:40px;\"><h1 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:var(--awb-typography1-line-height);\">Stainless steel weld fittings<\/h1><\/div><div class=\"fusion-text fusion-text-1 fusion-text-no-margin weiss-hero-intro\" style=\"--awb-margin-bottom:24px;\"><p>Bends, tees and reducers for tank, plant and vessel construction.<\/p>\n<p>Select design, series, size and material. Add drawings to your inquiry.<\/p>\n<\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-1 fusion-button-default-span fusion-button-default-type weiss-config-trigger weiss-norm-din11865 weiss-hero-cta fusion-has-button-gradient\" style=\"--button_accent_color:var(--awb-color8);--button_border_color:var(--awb-color7);--button_accent_hover_color:var(--awb-custom_color_1);--button_border_hover_color:var(--awb-custom_color_1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_start:92%;--button_gradient_end:92%;--button_gradient_top_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_bottom_color:var(--awb-color5);--button_gradient_top_color_hover:var(--awb-color5);--button_gradient_bottom_color_hover:var(--awb-color5);--button_padding-top:20px;--button_padding-right:36px;--button_padding-bottom:22px;--button_padding-left:36px;--button_margin-bottom:10px;\" target=\"_self\" data-hover=\"bg_slide_left\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure weld fittings<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><div class=\"fusion-image-element fusion-no-medium-visibility fusion-no-large-visibility\" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-margin-bottom-small:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-2 hover-type-none has-mask\"><img decoding=\"async\" width=\"800\" height=\"728\" alt=\"Two employees in welding helmets welding a metal component\" title=\"weiss-schwei\u00dfarbeiten-fertigung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg\" class=\"lazyload img-responsive wp-image-4314\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27800%27%20height%3D%27728%27%20viewBox%3D%270%200%20800%20728%27%3E%3Crect%20width%3D%27800%27%20height%3D%27728%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-200x182.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-400x364.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung-600x546.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissarbeiten-fertigung.jpg 800w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-top-small:36px;--awb-padding-bottom-small:35px;--awb-background-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 15%),var(--awb-color4-a));--awb-flex-wrap:wrap;\" ><div class=\"awb-background-pattern\" style=\"background-image:  url(data:image\/svg+xml;utf8,%3Csvg%20width%3D%2280%22%20height%3D%22120%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20clip-path%3D%22url%28%23prefix__clip0_43_320%29%22%20fill%3D%22rgba%280%2C0%2C0%2C0.3%29%22%3E%3Cpath%20d%3D%22M40%200L0%2030v30l40-30V0zm0%2030v30l40%2030V60L40%2030zM40-30V0l40%2030V0L40-30zm0%2090L0%2090v30l40-30V60zm0%2030v30l40%2030v-30L40%2090z%22%2F%3E%3C%2Fg%3E%3Cdefs%3E%3CclipPath%20id%3D%22prefix__clip0_43_320%22%3E%3Cpath%20fill%3D%22%23fff%22%20d%3D%22M0%200h80v120H0z%22%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3C%2Fsvg%3E);opacity: 0.2 ;background-size:100%;mix-blend-mode:normal;\"><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:60px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color1);\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:50;line-height:1.3;\">Fittings for tank, plant and vessel construction<\/h2><\/div><div class=\"fusion-text fusion-text-2\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-right:0px;\"><p>For tank, plant and vessel manufacturers, every fitting has to match the design. Purchasing and engineering need the same clear details for this: design, type of connection, tube dimension, material, surface finish and quantity.<\/p>\n<p>The configurator helps you bring these details together. Add any further requirements and drawings to your inquiry. That way we can review the design you want and clarify open technical points with you.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-0 fusion_builder_column_inner_1_3 1_3 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-top:0px;--awb-border-right:1px;--awb-border-bottom:0px;--awb-border-left:0px;--awb-border-style:solid;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:40px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:250px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-3 hover-type-none\"><img decoding=\"async\" width=\"640\" height=\"640\" title=\"weiss-schweissfittings-bogen-20260914\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914.png\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914.png\" alt class=\"lazyload img-responsive wp-image-4257\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27640%27%20height%3D%27640%27%20viewBox%3D%270%200%20640%20640%27%3E%3Crect%20width%3D%27640%27%20height%3D%27640%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914-200x200.png 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914-400x400.png 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914-600x600.png 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-bogen-20260914.png 640w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-1 fusion_builder_column_inner_2_3 2_3 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-left:30px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-3 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-top:20px;--awb-font-size:24px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;text-transform:capitalize;--fontSize:24;line-height:1.4;\">Bends<\/h3><\/div><div class=\"fusion-text fusion-text-3\" style=\"--awb-text-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 30%));\"><p>45 degree and 90 degree bends change the direction of your piping. In the configurator you select angle, dimension series and size to suit the design. Tube outside diameter, wall thickness, bending radius and connection dimensions describe the component required. For deviating geometries, please inquire with a drawing.<\/p>\n<\/div><div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-2 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-B90\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure bend<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-2 fusion_builder_column_inner_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-padding-bottom:20px;--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-style:solid;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-3 fusion_builder_column_inner_1_3 1_3 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-top:0px;--awb-border-right:1px;--awb-border-bottom:0px;--awb-border-left:0px;--awb-border-style:solid;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:40px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:230px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-4 hover-type-none\"><img decoding=\"async\" width=\"640\" height=\"640\" title=\"weiss-schweissfittings-reduzierung-20260914\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914.png\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914.png\" alt class=\"lazyload img-responsive wp-image-4255\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27640%27%20height%3D%27640%27%20viewBox%3D%270%200%20640%20640%27%3E%3Crect%20width%3D%27640%27%20height%3D%27640%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914-200x200.png 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914-400x400.png 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914-600x600.png 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-reduzierung-20260914.png 640w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-4 fusion_builder_column_inner_2_3 2_3 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-left:30px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-4 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-top:20px;--awb-font-size:24px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;text-transform:capitalize;--fontSize:24;line-height:1.4;\">Reducers<\/h3><\/div><div class=\"fusion-text fusion-text-4\" style=\"--awb-text-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 30%));\"><p>Reducers connect different tube sizes. Concentric and eccentric designs are available. The installation situation and your piping layout are decisive. State both connection sizes and the design you want so that the transition is clearly described.<\/p>\n<\/div><div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-3 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-R\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure reducer<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-5 fusion_builder_column_inner_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-padding-bottom:20px;--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-style:solid;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-6 fusion_builder_column_inner_1_3 1_3 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-top:0px;--awb-border-right:1px;--awb-border-bottom:0px;--awb-border-left:0px;--awb-border-style:solid;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:40px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:250px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-5 hover-type-none\"><img decoding=\"async\" width=\"640\" height=\"640\" title=\"weiss-schweissfittings-t_stueck-20260914\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914.png\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914.png\" alt class=\"lazyload img-responsive wp-image-4253\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27640%27%20height%3D%27640%27%20viewBox%3D%270%200%20640%20640%27%3E%3Crect%20width%3D%27640%27%20height%3D%27640%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914-200x200.png 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914-400x400.png 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914-600x600.png 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissfittings-t_stueck-20260914.png 640w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-7 fusion_builder_column_inner_2_3 2_3 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-left:30px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-5 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-top:20px;--awb-font-size:24px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;text-transform:capitalize;--fontSize:24;line-height:1.4;\">Tees<\/h3><\/div><div class=\"fusion-text fusion-text-5\" style=\"--awb-text-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 30%));\"><p>Tees split or join pipe runs. In equal tees the run and the branch have the same size; in a reducing tee the branch is smaller. Select run size, branch size and the matching dimension series. This makes the branch in your design unambiguous.<\/p>\n<\/div><div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-4 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-TS\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure tee<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-8 fusion_builder_column_inner_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-padding-bottom:20px;--awb-bg-size:cover;--awb-border-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 85%));--awb-border-style:solid;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><\/div><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-bottom:100px;--awb-padding-bottom-small:34px;--awb-margin-top:150px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-6 fusion-sep-none fusion-title-text fusion-title-size-two\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:50;line-height:1.3;\">Custom fittings to drawing<\/h2><\/div><div class=\"fusion-title title fusion-title-7 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-font-size:var(--awb-custom_typography_1-font-size);\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-custom_typography_1-font-family);font-weight:var(--awb-custom_typography_1-font-weight);font-style:var(--awb-custom_typography_1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-custom_typography_1-letter-spacing);text-transform:var(--awb-custom_typography_1-text-transform);--fontSize:40;line-height:var(--awb-custom_typography_1-line-height);\">Your geometry. Technically agreed.<\/h3><\/div><div class=\"fusion-text fusion-text-6\"><p>If your requirement differs from the DIN 11865 range provided, send us a drawing or technical specification. Weiss Apparatebau manufactures components and assemblies to agreed requirements. We review feasibility, design and terms for your specific needs.<\/p>\n<p>The following dimension tables help you select bends, tees and reducers in series A, B and C. The bend tables give tube outside diameter, wall thickness, bending radius and lengths for 45 and 90 degree designs. Check the dimensions together with your design; the size designation alone does not describe every connection.<\/p>\n<\/div><div class=\"accordian fusion-accordian weiss-masstabellen\" style=\"--awb-border-size:1px;--awb-icon-size:16px;--awb-content-font-size:var(--awb-typography4-font-size);--awb-icon-alignment:left;--awb-hover-color:var(--awb-color2);--awb-border-color:var(--awb-color3);--awb-background-color:var(--awb-color1);--awb-divider-color:var(--awb-color3);--awb-divider-hover-color:var(--awb-color3);--awb-icon-color:var(--awb-color1);--awb-title-color:var(--awb-color8);--awb-content-color:var(--awb-color8);--awb-icon-box-color:var(--awb-color8);--awb-toggle-hover-accent-color:var(--awb-color5);--awb-title-font-family:&quot;Plus Jakarta Sans&quot;;--awb-title-font-weight:700;--awb-title-font-style:normal;--awb-content-font-family:var(--awb-typography4-font-family);--awb-content-font-weight:var(--awb-typography4-font-weight);--awb-content-font-style:var(--awb-typography4-font-style);\"><div class=\"panel-group fusion-toggle-icon-boxed\" id=\"accordion-4344-1\"><div class=\"fusion-panel panel-default panel-2b9e9327121b0b53c fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_2b9e9327121b0b53c\"><a aria-expanded=\"false\" aria-controls=\"2b9e9327121b0b53c\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#2b9e9327121b0b53c\" href=\"#2b9e9327121b0b53c\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Bends to DIN 11865 series A (metric, DN)<\/span><\/a><\/h3><\/div><div id=\"2b9e9327121b0b53c\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_2b9e9327121b0b53c\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Bends to DIN 11865 series A (metric, DN)\">\n<table class=\"weiss-masstabelle\">\n<caption>Bends to DIN 11865 series A (metric, DN)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">Tube OD<\/th>\n<th scope=\"col\">Wall thickness<\/th>\n<th scope=\"col\">Bending radius<\/th>\n<th scope=\"col\">L1<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L3 at 45 degrees<\/th>\n<th scope=\"col\">L3 at 90 degrees<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">DN06<\/th>\n<td>8<\/td>\n<td>1<\/td>\n<td>20<\/td>\n<td>45<\/td>\n<td>33,3<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN08<\/th>\n<td>10<\/td>\n<td>1<\/td>\n<td>25<\/td>\n<td>50<\/td>\n<td>35,4<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>13<\/td>\n<td>1,5<\/td>\n<td>26<\/td>\n<td>51<\/td>\n<td>35,8<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>19<\/td>\n<td>1,5<\/td>\n<td>35<\/td>\n<td>60<\/td>\n<td>39,5<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>23<\/td>\n<td>1,5<\/td>\n<td>40<\/td>\n<td>65<\/td>\n<td>41,6<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>29<\/td>\n<td>1,5<\/td>\n<td>50<\/td>\n<td>90<\/td>\n<td>60,7<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>35<\/td>\n<td>1,5<\/td>\n<td>55<\/td>\n<td>95<\/td>\n<td>62,8<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>41<\/td>\n<td>1,5<\/td>\n<td>60<\/td>\n<td>100<\/td>\n<td>64,9<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>53<\/td>\n<td>1,5<\/td>\n<td>70<\/td>\n<td>110<\/td>\n<td>69<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>70<\/td>\n<td>2<\/td>\n<td>80<\/td>\n<td>120<\/td>\n<td>73,1<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>85<\/td>\n<td>2<\/td>\n<td>90<\/td>\n<td>145<\/td>\n<td>92,3<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>104<\/td>\n<td>2<\/td>\n<td>100<\/td>\n<td>155<\/td>\n<td>96,4<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>129<\/td>\n<td>2<\/td>\n<td>187,5<\/td>\n<td>270<\/td>\n<td>160,2<\/td>\n<td>82,5<\/td>\n<td>82,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>154<\/td>\n<td>2<\/td>\n<td>225<\/td>\n<td>325<\/td>\n<td>193,2<\/td>\n<td>100<\/td>\n<td>100<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>204<\/td>\n<td>2<\/td>\n<td>300<\/td>\n<td>400<\/td>\n<td>224,3<\/td>\n<td>100<\/td>\n<td>100<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-tabellen-hinweis\">All dimensions in millimetres. On narrow screens the table can be scrolled horizontally.<\/p>\n<div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-5 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-B90 weiss-series-a\" style=\"--button_accent_color:var(--awb-custom_color_1);--button_border_color:var(--awb-custom_color_1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure a series A bend<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-876df9cbd04c7d218 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_876df9cbd04c7d218\"><a aria-expanded=\"false\" aria-controls=\"876df9cbd04c7d218\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#876df9cbd04c7d218\" href=\"#876df9cbd04c7d218\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Bends to DIN 11865 series B (metric ISO, OD)<\/span><\/a><\/h3><\/div><div id=\"876df9cbd04c7d218\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_876df9cbd04c7d218\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Bends to DIN 11865 series B (metric ISO, OD)\">\n<table class=\"weiss-masstabelle\">\n<caption>Bends to DIN 11865 series B (metric ISO, OD)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">Tube OD<\/th>\n<th scope=\"col\">Wall thickness<\/th>\n<th scope=\"col\">Bending radius<\/th>\n<th scope=\"col\">L1<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L3 at 45 degrees<\/th>\n<th scope=\"col\">L3 at 90 degrees<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">NW10.2<\/th>\n<td>10,2<\/td>\n<td>1,6<\/td>\n<td>20<\/td>\n<td>45<\/td>\n<td>33,3<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW13.5<\/th>\n<td>13,5<\/td>\n<td>1,6<\/td>\n<td>20<\/td>\n<td>45<\/td>\n<td>33,3<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>17,2<\/td>\n<td>1,6<\/td>\n<td>28<\/td>\n<td>53<\/td>\n<td>36,6<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>21,3<\/td>\n<td>1,6<\/td>\n<td>30<\/td>\n<td>55<\/td>\n<td>37,4<\/td>\n<td>25<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>26,9<\/td>\n<td>1,6<\/td>\n<td>28,5<\/td>\n<td>68,5<\/td>\n<td>51,8<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>33,7<\/td>\n<td>2<\/td>\n<td>38<\/td>\n<td>78<\/td>\n<td>55,7<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>42,4<\/td>\n<td>2<\/td>\n<td>47,5<\/td>\n<td>87,5<\/td>\n<td>59,7<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>48,3<\/td>\n<td>2<\/td>\n<td>57<\/td>\n<td>97<\/td>\n<td>63,6<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>60,3<\/td>\n<td>2<\/td>\n<td>76<\/td>\n<td>116<\/td>\n<td>71,5<\/td>\n<td>40<\/td>\n<td>40<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>76,1<\/td>\n<td>2<\/td>\n<td>95<\/td>\n<td>150<\/td>\n<td>94,4<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>88,9<\/td>\n<td>2,3<\/td>\n<td>114,5<\/td>\n<td>169,5<\/td>\n<td>102,4<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>114,3<\/td>\n<td>2,3<\/td>\n<td>152,5<\/td>\n<td>207,5<\/td>\n<td>118,2<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>139,7<\/td>\n<td>2,6<\/td>\n<td>190,5<\/td>\n<td>245,5<\/td>\n<td>133,9<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>168,3<\/td>\n<td>2,6<\/td>\n<td>228,5<\/td>\n<td>283,5<\/td>\n<td>149,7<\/td>\n<td>55<\/td>\n<td>55<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>219,1<\/td>\n<td>2,6<\/td>\n<td>305<\/td>\n<td>385<\/td>\n<td>206,3<\/td>\n<td>80<\/td>\n<td>80<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-tabellen-hinweis\">All dimensions in millimetres. On narrow screens the table can be scrolled horizontally.<\/p>\n<div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-6 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-B90 weiss-series-b\" style=\"--button_accent_color:var(--awb-custom_color_1);--button_border_color:var(--awb-custom_color_1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure a series B bend<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-43ec902671aadc2fd fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_43ec902671aadc2fd\"><a aria-expanded=\"false\" aria-controls=\"43ec902671aadc2fd\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#43ec902671aadc2fd\" href=\"#43ec902671aadc2fd\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Bends to DIN 11865 series C (inch, OD)<\/span><\/a><\/h3><\/div><div id=\"43ec902671aadc2fd\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_43ec902671aadc2fd\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"Bends to DIN 11865 series C (inch, OD)\">\n<table class=\"weiss-masstabelle\">\n<caption>Bends to DIN 11865 series C (inch, OD)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">Tube OD<\/th>\n<th scope=\"col\">Wall thickness<\/th>\n<th scope=\"col\">Bending radius<\/th>\n<th scope=\"col\">L1<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L3 at 45 degrees<\/th>\n<th scope=\"col\">L3 at 90 degrees<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">0.25<\/th>\n<td>6,35<\/td>\n<td>0,89<\/td>\n<td>14,3<\/td>\n<td>66,7<\/td>\n<td>50,8<\/td>\n<td>44,9<\/td>\n<td>52,4<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.375<\/th>\n<td>9,53<\/td>\n<td>0,89<\/td>\n<td>28,6<\/td>\n<td>66,7<\/td>\n<td>50,8<\/td>\n<td>39<\/td>\n<td>38,1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>12,7<\/td>\n<td>1,65<\/td>\n<td>28,6<\/td>\n<td>76,2<\/td>\n<td>57,2<\/td>\n<td>45,4<\/td>\n<td>47,6<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>19,05<\/td>\n<td>1,65<\/td>\n<td>28,6<\/td>\n<td>76,2<\/td>\n<td>57,2<\/td>\n<td>45,4<\/td>\n<td>47,6<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>25,4<\/td>\n<td>1,65<\/td>\n<td>38,1<\/td>\n<td>76,2<\/td>\n<td>57,2<\/td>\n<td>41,4<\/td>\n<td>38,1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>38,1<\/td>\n<td>1,65<\/td>\n<td>57,2<\/td>\n<td>95,3<\/td>\n<td>63,5<\/td>\n<td>39,8<\/td>\n<td>38,1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>50,8<\/td>\n<td>1,65<\/td>\n<td>76,2<\/td>\n<td>120,7<\/td>\n<td>76,2<\/td>\n<td>44,6<\/td>\n<td>44,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>63,5<\/td>\n<td>1,65<\/td>\n<td>95,3<\/td>\n<td>139,7<\/td>\n<td>85,7<\/td>\n<td>46,2<\/td>\n<td>44,4<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>76,2<\/td>\n<td>1,65<\/td>\n<td>114,3<\/td>\n<td>158,8<\/td>\n<td>92,1<\/td>\n<td>44,8<\/td>\n<td>44,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>101,6<\/td>\n<td>2,11<\/td>\n<td>152,4<\/td>\n<td>203,2<\/td>\n<td>114,3<\/td>\n<td>51,2<\/td>\n<td>50,8<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>152,4<\/td>\n<td>2,77<\/td>\n<td>228,6<\/td>\n<td>292,1<\/td>\n<td>158,8<\/td>\n<td>64,1<\/td>\n<td>63,5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-tabellen-hinweis\">All dimensions in millimetres. On narrow screens the table can be scrolled horizontally.<\/p>\n<div style=\"text-align:left;\"><a class=\"fusion-button button-flat button-medium button-custom fusion-button-default button-7 fusion-button-span-no fusion-button-default-type weiss-config-trigger weiss-inline-cta weiss-norm-din11865 weiss-type-B90 weiss-series-c\" style=\"--button_accent_color:var(--awb-custom_color_1);--button_border_color:var(--awb-custom_color_1);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button-border-radius-top-left:0;--button-border-radius-top-right:0;--button-border-radius-bottom-right:0;--button-border-radius-bottom-left:0;--button_gradient_top_color:transparent;--button_gradient_bottom_color:transparent;--button_gradient_top_color_hover:var(--awb-custom_color_1);--button_gradient_bottom_color_hover:var(--awb-custom_color_1);\" target=\"_self\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Configure a series C bend<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-3d026c246c3db7b79 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_3d026c246c3db7b79\"><a aria-expanded=\"false\" aria-controls=\"3d026c246c3db7b79\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#3d026c246c3db7b79\" href=\"#3d026c246c3db7b79\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 equal tees, series A<\/span><\/a><\/h3><\/div><div id=\"3d026c246c3db7b79\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_3d026c246c3db7b79\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 equal tees, series A\">\n<table class=\"weiss-masstabelle\">\n<caption>Equal tees to DIN 11865, series A (metric DN)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">DN06<\/th>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN08<\/th>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>35<\/td>\n<td>70<\/td>\n<td>35<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>35<\/td>\n<td>70<\/td>\n<td>35<\/td>\n<td>11 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>40<\/td>\n<td>80<\/td>\n<td>40<\/td>\n<td>13 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>50<\/td>\n<td>100<\/td>\n<td>50<\/td>\n<td>16 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>19,5 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>23 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>80<\/td>\n<td>160<\/td>\n<td>80<\/td>\n<td>30 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>105<\/td>\n<td>210<\/td>\n<td>105<\/td>\n<td>40 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>130<\/td>\n<td>260<\/td>\n<td>130<\/td>\n<td>47,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>155<\/td>\n<td>310<\/td>\n<td>155<\/td>\n<td>58 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>187,5<\/td>\n<td>375<\/td>\n<td>187,5<\/td>\n<td>74 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>225<\/td>\n<td>450<\/td>\n<td>225<\/td>\n<td>90 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>300<\/td>\n<td>600<\/td>\n<td>300<\/td>\n<td>115 \u00b1 3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-8620b94786a05e6fd fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_8620b94786a05e6fd\"><a aria-expanded=\"false\" aria-controls=\"8620b94786a05e6fd\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#8620b94786a05e6fd\" href=\"#8620b94786a05e6fd\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 equal tees, series B<\/span><\/a><\/h3><\/div><div id=\"8620b94786a05e6fd\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_8620b94786a05e6fd\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 equal tees, series B\">\n<table class=\"weiss-masstabelle\">\n<caption>Equal tees to DIN 11865, series B (ISO\/OD NW)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">NW10.2<\/th>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW13.5<\/th>\n<td>32<\/td>\n<td>64<\/td>\n<td>32<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>34<\/td>\n<td>68<\/td>\n<td>34<\/td>\n<td>10,1 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>36<\/td>\n<td>72<\/td>\n<td>36<\/td>\n<td>12,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>15 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>18,4 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>23,2 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>26,7 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>90<\/td>\n<td>180<\/td>\n<td>90<\/td>\n<td>33,7 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>110<\/td>\n<td>220<\/td>\n<td>110<\/td>\n<td>43,1 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>130<\/td>\n<td>260<\/td>\n<td>130<\/td>\n<td>49,5 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>160<\/td>\n<td>320<\/td>\n<td>160<\/td>\n<td>63,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>200<\/td>\n<td>400<\/td>\n<td>200<\/td>\n<td>79,9 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>250<\/td>\n<td>500<\/td>\n<td>250<\/td>\n<td>97,2 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>300<\/td>\n<td>600<\/td>\n<td>300<\/td>\n<td>123,6 \u00b1 4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-a49642e99757e5488 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_a49642e99757e5488\"><a aria-expanded=\"false\" aria-controls=\"a49642e99757e5488\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#a49642e99757e5488\" href=\"#a49642e99757e5488\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 equal tees, series C<\/span><\/a><\/h3><\/div><div id=\"a49642e99757e5488\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_a49642e99757e5488\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 equal tees, series C\">\n<table class=\"weiss-masstabelle\">\n<caption>Equal tees to DIN 11865, series C (inch)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Size<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">0.25<\/th>\n<td>44,5<\/td>\n<td>89<\/td>\n<td>44,5<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.375<\/th>\n<td>44,5<\/td>\n<td>89<\/td>\n<td>44,5<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>47,6<\/td>\n<td>95,2<\/td>\n<td>47,6<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>50,8<\/td>\n<td>101,6<\/td>\n<td>50,8<\/td>\n<td>11 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>54<\/td>\n<td>108<\/td>\n<td>54<\/td>\n<td>14,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>60,3<\/td>\n<td>120,6<\/td>\n<td>60,3<\/td>\n<td>21,1 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>73<\/td>\n<td>146<\/td>\n<td>73<\/td>\n<td>28,9 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>79,4<\/td>\n<td>158,8<\/td>\n<td>79,4<\/td>\n<td>35,3 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>85,7<\/td>\n<td>171,4<\/td>\n<td>85,7<\/td>\n<td>43,1 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>104,8<\/td>\n<td>209,6<\/td>\n<td>104,8<\/td>\n<td>56,8 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>142,9<\/td>\n<td>285,8<\/td>\n<td>142,9<\/td>\n<td>90,1 \u00b1 3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-63e0fb978d9313aab fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_63e0fb978d9313aab\"><a aria-expanded=\"false\" aria-controls=\"63e0fb978d9313aab\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#63e0fb978d9313aab\" href=\"#63e0fb978d9313aab\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducing tees, series A<\/span><\/a><\/h3><\/div><div id=\"63e0fb978d9313aab\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_63e0fb978d9313aab\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducing tees, series A\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducing tees to DIN 11865, series A<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Run<\/th>\n<th scope=\"col\">Branch<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">DN08<\/th>\n<td>DN06<\/td>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>DN06<\/td>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>DN08<\/td>\n<td>30<\/td>\n<td>60<\/td>\n<td>30<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>DN08<\/td>\n<td>35<\/td>\n<td>70<\/td>\n<td>35<\/td>\n<td>11 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>DN10<\/td>\n<td>35<\/td>\n<td>70<\/td>\n<td>35<\/td>\n<td>11 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>DN10<\/td>\n<td>40<\/td>\n<td>80<\/td>\n<td>40<\/td>\n<td>13 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>DN15<\/td>\n<td>40<\/td>\n<td>80<\/td>\n<td>40<\/td>\n<td>13 \u00b1 0,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>DN15<\/td>\n<td>50<\/td>\n<td>100<\/td>\n<td>50<\/td>\n<td>16 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>DN20<\/td>\n<td>50<\/td>\n<td>100<\/td>\n<td>50<\/td>\n<td>16 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN15<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>19 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN20<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>19 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN25<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>19 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN20<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>22 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN25<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>22 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN32<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>22,5 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN25<\/td>\n<td>80<\/td>\n<td>160<\/td>\n<td>80<\/td>\n<td>28 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN32<\/td>\n<td>80<\/td>\n<td>160<\/td>\n<td>80<\/td>\n<td>28,5 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN40<\/td>\n<td>80<\/td>\n<td>160<\/td>\n<td>80<\/td>\n<td>29 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN32<\/td>\n<td>105<\/td>\n<td>210<\/td>\n<td>80<\/td>\n<td>37 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN40<\/td>\n<td>105<\/td>\n<td>210<\/td>\n<td>80<\/td>\n<td>37,5 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN50<\/td>\n<td>105<\/td>\n<td>210<\/td>\n<td>80<\/td>\n<td>38,5 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN40<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>105<\/td>\n<td>45 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN50<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>105<\/td>\n<td>46 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN65<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>105<\/td>\n<td>47,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN50<\/td>\n<td>155<\/td>\n<td>310<\/td>\n<td>130<\/td>\n<td>55,5 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN65<\/td>\n<td>155<\/td>\n<td>310<\/td>\n<td>130<\/td>\n<td>57 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN80<\/td>\n<td>155<\/td>\n<td>310<\/td>\n<td>130<\/td>\n<td>57 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN65<\/td>\n<td>187,5<\/td>\n<td>375<\/td>\n<td>155<\/td>\n<td>69,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN80<\/td>\n<td>187,5<\/td>\n<td>375<\/td>\n<td>155<\/td>\n<td>69,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN100<\/td>\n<td>187,5<\/td>\n<td>375<\/td>\n<td>155<\/td>\n<td>70,5 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN80<\/td>\n<td>225<\/td>\n<td>450<\/td>\n<td>187,5<\/td>\n<td>82 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN100<\/td>\n<td>225<\/td>\n<td>450<\/td>\n<td>187,5<\/td>\n<td>83 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN125<\/td>\n<td>225<\/td>\n<td>450<\/td>\n<td>187,5<\/td>\n<td>86,5 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN100<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>225<\/td>\n<td>108 \u00b1 1,50<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN125<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>225<\/td>\n<td>111,5 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN150<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>225<\/td>\n<td>115 \u00b1 3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-2f55936fb5cf3dc3b fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_2f55936fb5cf3dc3b\"><a aria-expanded=\"false\" aria-controls=\"2f55936fb5cf3dc3b\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#2f55936fb5cf3dc3b\" href=\"#2f55936fb5cf3dc3b\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducing tees, series B<\/span><\/a><\/h3><\/div><div id=\"2f55936fb5cf3dc3b\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_2f55936fb5cf3dc3b\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducing tees, series B\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducing tees to DIN 11865, series B<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Run<\/th>\n<th scope=\"col\">Branch<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">NW13.5<\/th>\n<td>NW10.2<\/td>\n<td>32<\/td>\n<td>64<\/td>\n<td>32<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>NW10.2<\/td>\n<td>34<\/td>\n<td>68<\/td>\n<td>34<\/td>\n<td>10,1 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>NW13.5<\/td>\n<td>34<\/td>\n<td>68<\/td>\n<td>34<\/td>\n<td>10,1 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW10.2<\/td>\n<td>36<\/td>\n<td>72<\/td>\n<td>36<\/td>\n<td>12,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW13.5<\/td>\n<td>36<\/td>\n<td>72<\/td>\n<td>36<\/td>\n<td>12,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW17.2<\/td>\n<td>36<\/td>\n<td>72<\/td>\n<td>36<\/td>\n<td>12,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW13.5<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>15 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW17.2<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>15 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW21.3<\/td>\n<td>55<\/td>\n<td>110<\/td>\n<td>55<\/td>\n<td>15 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW17.2<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>18,4 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW21.3<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>18,4 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW26.9<\/td>\n<td>60<\/td>\n<td>120<\/td>\n<td>60<\/td>\n<td>18,4 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW21.3<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>22,7 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW26.9<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>22,7 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW33.7<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>22,7 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW26.9<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>25,7 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW33.7<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>25,7 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW42.4<\/td>\n<td>65<\/td>\n<td>130<\/td>\n<td>65<\/td>\n<td>26,2 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW33.7<\/td>\n<td>90<\/td>\n<td>180<\/td>\n<td>90<\/td>\n<td>31,7 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW42.4<\/td>\n<td>90<\/td>\n<td>180<\/td>\n<td>90<\/td>\n<td>32,2 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW48.3<\/td>\n<td>90<\/td>\n<td>180<\/td>\n<td>90<\/td>\n<td>32,7 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW42.4<\/td>\n<td>110<\/td>\n<td>220<\/td>\n<td>90<\/td>\n<td>40,1 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW48.3<\/td>\n<td>110<\/td>\n<td>220<\/td>\n<td>90<\/td>\n<td>40,6 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW60.3<\/td>\n<td>110<\/td>\n<td>220<\/td>\n<td>90<\/td>\n<td>41,6 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW48.3<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>110<\/td>\n<td>47 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW60.3<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>110<\/td>\n<td>48 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW76.1<\/td>\n<td>130<\/td>\n<td>260<\/td>\n<td>110<\/td>\n<td>49,5 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW60.3<\/td>\n<td>160<\/td>\n<td>320<\/td>\n<td>130<\/td>\n<td>60,7 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW76.1<\/td>\n<td>160<\/td>\n<td>320<\/td>\n<td>130<\/td>\n<td>62,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW88.9<\/td>\n<td>160<\/td>\n<td>320<\/td>\n<td>130<\/td>\n<td>62,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW76.1<\/td>\n<td>200<\/td>\n<td>400<\/td>\n<td>160<\/td>\n<td>74,9 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW88.9<\/td>\n<td>200<\/td>\n<td>400<\/td>\n<td>160<\/td>\n<td>74,9 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW114.3<\/td>\n<td>200<\/td>\n<td>400<\/td>\n<td>160<\/td>\n<td>75,9 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW88.9<\/td>\n<td>250<\/td>\n<td>500<\/td>\n<td>200<\/td>\n<td>89,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW114.3<\/td>\n<td>250<\/td>\n<td>500<\/td>\n<td>200<\/td>\n<td>90,2 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW139.7<\/td>\n<td>250<\/td>\n<td>500<\/td>\n<td>200<\/td>\n<td>94,2 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW114.3<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>250<\/td>\n<td>115,6 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW139.7<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>250<\/td>\n<td>119,6 \u00b1 3<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW168.3<\/td>\n<td>300<\/td>\n<td>600<\/td>\n<td>250<\/td>\n<td>122,6 \u00b1 3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-f1e7b1b75d415e5ba fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_f1e7b1b75d415e5ba\"><a aria-expanded=\"false\" aria-controls=\"f1e7b1b75d415e5ba\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#f1e7b1b75d415e5ba\" href=\"#f1e7b1b75d415e5ba\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducing tees, series C<\/span><\/a><\/h3><\/div><div id=\"f1e7b1b75d415e5ba\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_f1e7b1b75d415e5ba\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducing tees, series C\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducing tees to DIN 11865, series C<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">Run<\/th>\n<th scope=\"col\">Branch<\/th>\n<th scope=\"col\">L0<\/th>\n<th scope=\"col\">L<\/th>\n<th scope=\"col\">L2<\/th>\n<th scope=\"col\">L1, branch offset<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">0.375<\/th>\n<td>0.25<\/td>\n<td>44,5<\/td>\n<td>89<\/td>\n<td>44,5<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>0.25<\/td>\n<td>47,6<\/td>\n<td>95,2<\/td>\n<td>47,6<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>0.375<\/td>\n<td>47,6<\/td>\n<td>95,2<\/td>\n<td>47,6<\/td>\n<td>11<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>0.375<\/td>\n<td>50,8<\/td>\n<td>101,6<\/td>\n<td>50,8<\/td>\n<td>11 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>0.5<\/td>\n<td>50,8<\/td>\n<td>101,6<\/td>\n<td>50,8<\/td>\n<td>11 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>0.5<\/td>\n<td>54<\/td>\n<td>108<\/td>\n<td>54<\/td>\n<td>14,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>0.75<\/td>\n<td>54<\/td>\n<td>108<\/td>\n<td>54<\/td>\n<td>14,2 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>0.75<\/td>\n<td>60,3<\/td>\n<td>120,6<\/td>\n<td>60,3<\/td>\n<td>20,6 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>1<\/td>\n<td>60,3<\/td>\n<td>120,6<\/td>\n<td>60,3<\/td>\n<td>20,6 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>1<\/td>\n<td>73<\/td>\n<td>146<\/td>\n<td>66,7<\/td>\n<td>26,9 \u00b1 0,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>1.5<\/td>\n<td>73<\/td>\n<td>146<\/td>\n<td>66,7<\/td>\n<td>27,4 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>1.5<\/td>\n<td>79,4<\/td>\n<td>158,8<\/td>\n<td>73<\/td>\n<td>33,8 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>2<\/td>\n<td>79,4<\/td>\n<td>158,8<\/td>\n<td>73<\/td>\n<td>35,3 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>1.5<\/td>\n<td>85,7<\/td>\n<td>171,4<\/td>\n<td>79,4<\/td>\n<td>40,1 \u00b1 0,75<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>2<\/td>\n<td>85,7<\/td>\n<td>171,4<\/td>\n<td>79,4<\/td>\n<td>41,6 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>2.5<\/td>\n<td>85,7<\/td>\n<td>171,4<\/td>\n<td>79,4<\/td>\n<td>41,6 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>2<\/td>\n<td>104,8<\/td>\n<td>209,6<\/td>\n<td>98,4<\/td>\n<td>54,3 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>2.5<\/td>\n<td>104,8<\/td>\n<td>209,6<\/td>\n<td>98,4<\/td>\n<td>54,3 \u00b1 1<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>3<\/td>\n<td>104,8<\/td>\n<td>209,6<\/td>\n<td>98,4<\/td>\n<td>55,8 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>3<\/td>\n<td>142,9<\/td>\n<td>285,8<\/td>\n<td>123,8<\/td>\n<td>83,1 \u00b1 1,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>4<\/td>\n<td>142,9<\/td>\n<td>285,8<\/td>\n<td>130,2<\/td>\n<td>83,1 \u00b1 1,5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed. L0, L, L2 and L1 refer to the dimensions in the corresponding component drawing. A dash at L1 means no offset, not zero.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-23026b76fc3f2a513 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_23026b76fc3f2a513\"><a aria-expanded=\"false\" aria-controls=\"23026b76fc3f2a513\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#23026b76fc3f2a513\" href=\"#23026b76fc3f2a513\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducers, series A<\/span><\/a><\/h3><\/div><div id=\"23026b76fc3f2a513\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_23026b76fc3f2a513\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducers, series A\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducers to DIN 11865, series A (metric DN)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">from<\/th>\n<th scope=\"col\">to<\/th>\n<th scope=\"col\">L<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">DN08<\/th>\n<td>DN06<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>DN06<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN10<\/th>\n<td>DN08<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>DN08<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN15<\/th>\n<td>DN10<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>DN10<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN20<\/th>\n<td>DN15<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>DN15<\/td>\n<td>70<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN25<\/th>\n<td>DN20<\/td>\n<td>70<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN20<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN32<\/th>\n<td>DN25<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN20<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN25<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN40<\/th>\n<td>DN32<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN25<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN32<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN50<\/th>\n<td>DN40<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN40<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN65<\/th>\n<td>DN50<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN50<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN80<\/th>\n<td>DN65<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN65<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN100<\/th>\n<td>DN80<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN80<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN125<\/th>\n<td>DN100<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN100<\/td>\n<td>170<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN150<\/th>\n<td>DN125<\/td>\n<td>170<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN125<\/td>\n<td>230<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">DN200<\/th>\n<td>DN150<\/td>\n<td>230<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-07edf66b46b7ee032 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_07edf66b46b7ee032\"><a aria-expanded=\"false\" aria-controls=\"07edf66b46b7ee032\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#07edf66b46b7ee032\" href=\"#07edf66b46b7ee032\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducers, series B<\/span><\/a><\/h3><\/div><div id=\"07edf66b46b7ee032\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_07edf66b46b7ee032\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducers, series B\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducers to DIN 11865, series B (ISO\/OD NW)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">from<\/th>\n<th scope=\"col\">to<\/th>\n<th scope=\"col\">L<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">NW13.5<\/th>\n<td>NW10.2<\/td>\n<td>38<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>NW10.2<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW17.2<\/th>\n<td>NW13.5<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW13.5<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW21.3<\/th>\n<td>NW17.2<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW17.2<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW26.9<\/th>\n<td>NW21.3<\/td>\n<td>60<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW21.3<\/td>\n<td>70<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW33.7<\/th>\n<td>NW26.9<\/td>\n<td>70<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW26.9<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW42.4<\/th>\n<td>NW33.7<\/td>\n<td>80<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW26.9<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW33.7<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW48.3<\/th>\n<td>NW42.4<\/td>\n<td>90<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW33.7<\/td>\n<td>100<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW42.4<\/td>\n<td>100<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW60.3<\/th>\n<td>NW48.3<\/td>\n<td>100<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW48.3<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW76.1<\/th>\n<td>NW60.3<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW60.3<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW88.9<\/th>\n<td>NW76.1<\/td>\n<td>110<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW76.1<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW114.3<\/th>\n<td>NW88.9<\/td>\n<td>135<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW88.9<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW139.7<\/th>\n<td>NW114.3<\/td>\n<td>150<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW114.3<\/td>\n<td>170<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW168.3<\/th>\n<td>NW139.7<\/td>\n<td>170<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW139.7<\/td>\n<td>230<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">NW219.1<\/th>\n<td>NW168.3<\/td>\n<td>230<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-f92e5d286f184192d fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_f92e5d286f184192d\"><a aria-expanded=\"false\" aria-controls=\"f92e5d286f184192d\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-1\" data-target=\"#f92e5d286f184192d\" href=\"#f92e5d286f184192d\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">DIN 11865 reducers, series C<\/span><\/a><\/h3><\/div><div id=\"f92e5d286f184192d\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_f92e5d286f184192d\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<div class=\"weiss-tabellen-scroll\" tabindex=\"0\" role=\"region\" aria-label=\"DIN 11865 reducers, series C\">\n<table class=\"weiss-masstabelle\">\n<caption>Reducers to DIN 11865, series C (inch)<\/caption>\n<thead>\n<tr>\n<th scope=\"col\">from<\/th>\n<th scope=\"col\">to<\/th>\n<th scope=\"col\">L<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<th scope=\"row\">0.375<\/th>\n<td>0.25<\/td>\n<td>41,28<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>0.25<\/td>\n<td>47,63<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.5<\/th>\n<td>0.375<\/td>\n<td>47,63<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>0.375<\/td>\n<td>50,8<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">0.75<\/th>\n<td>0.5<\/td>\n<td>53,98<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>0.5<\/td>\n<td>63,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1<\/th>\n<td>0.75<\/td>\n<td>53,98<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>0.75<\/td>\n<td>76,2<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">1.5<\/th>\n<td>1<\/td>\n<td>63,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>1<\/td>\n<td>85,73<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2<\/th>\n<td>1.5<\/td>\n<td>63,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>1.5<\/td>\n<td>85,73<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">2.5<\/th>\n<td>2<\/td>\n<td>63,5<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>1.5<\/td>\n<td>107,95<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>2<\/td>\n<td>85,73<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">3<\/th>\n<td>2.5<\/td>\n<td>66,68<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>2<\/td>\n<td>130,18<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>2.5<\/td>\n<td>107,95<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">4<\/th>\n<td>3<\/td>\n<td>98,43<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>3<\/td>\n<td>184,15<\/td>\n<\/tr>\n<tr>\n<th scope=\"row\">6<\/th>\n<td>4<\/td>\n<td>142,88<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p class=\"weiss-masshinweis\">Dimensions in mm; size designations according to the series stated. Please inquire separately about designs not listed.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-9 fusion_builder_column_inner_1_1 1_1 fusion-flex-column fusion-no-small-visibility\" style=\"--awb-padding-top:60px;--awb-padding-bottom:60px;--awb-padding-left:60px;--awb-bg-image:linear-gradient(270deg, hsla(var(--awb-color8-h),var(--awb-color8-s),var(--awb-color8-l),calc(var(--awb-color8-a) - 100%)) 0%,var(--awb-color8) 75%);;--awb-bg-position:center top;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:49px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:40px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper lazyload fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column fusion-column-has-bg-image\" data-bg-url=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2024\/04\/factory-hero-image-001.jpg\" data-bg=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2024\/04\/factory-hero-image-001.jpg\" data-bg-gradient=\"linear-gradient(270deg, hsla(var(--awb-color8-h),var(--awb-color8-s),var(--awb-color8-l),calc(var(--awb-color8-a) - 100%)) 0%,var(--awb-color8) 75%)\"><div class=\"fusion-title title fusion-title-8 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-right:250px;--awb-margin-bottom:10px;--awb-font-size:24px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;--fontSize:24;line-height:1.4;\">Your fitting, clearly specified<\/h3><\/div><div class=\"fusion-text fusion-text-7 fusion-text-no-margin\" style=\"--awb-font-size:var(--awb-typography4-font-size);--awb-line-height:var(--awb-typography4-line-height);--awb-letter-spacing:var(--awb-typography4-letter-spacing);--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-right:250px;--awb-margin-bottom:10px;\"><p>Send us design, dimensions, material, surface finish and quantity. Drawings and the certificates you need complete the technical clarification.<\/p>\n<\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-8 fusion-button-default-span fusion-button-default-type weiss-config-trigger weiss-norm-din11865\" style=\"--button_accent_color:var(--awb-color5);--button_border_color:var(--awb-color5);--button_accent_hover_color:var(--awb-color1);--button_border_hover_color:var(--awb-color4);--button_gradient_angle:180deg;--button_gradient_top_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_bottom_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_top_color_hover:hsla(var(--awb-color4-h),var(--awb-color4-s),var(--awb-color4-l),calc(var(--awb-color4-a) - 100%));--button_gradient_bottom_color_hover:hsla(var(--awb-color4-h),var(--awb-color4-s),var(--awb-color4-l),calc(var(--awb-color4-a) - 100%));--button_padding-right:0px;--button_padding-left:0px;\" target=\"_self\" data-hover=\"underline\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Open project configurator<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-5 awb-sticky awb-sticky-medium awb-sticky-large fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-padding-top:15px;--awb-padding-right:15px;--awb-padding-bottom:15px;--awb-padding-left:15px;--awb-bg-color:rgba(76,0,0,0);--awb-bg-color-hover:rgba(76,0,0,0);--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:60px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;--awb-sticky-offset:160px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-dropshadow imageframe-6 hover-type-none\" style=\"-webkit-box-shadow: 8px 8px 12px var(--awb-color7);box-shadow: 8px 8px 12px var(--awb-color7);\"><img decoding=\"async\" width=\"1346\" height=\"1900\" title=\"Zertifikat-AD-2000-HP0-ISO-3834-2\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2.jpg\" alt class=\"lazyload img-responsive wp-image-3895\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271346%27%20height%3D%271900%27%20viewBox%3D%270%200%201346%201900%27%3E%3Crect%20width%3D%271346%27%20height%3D%271900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-200x282.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-400x565.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-600x847.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-800x1129.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2-1200x1694.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/07\/Zertifikat-AD-2000-HP0-ISO-3834-2.jpg 1346w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><div class=\"fusion-separator fusion-full-width-sep\" style=\"align-self: center;margin-left: auto;margin-right: auto;margin-bottom:50px;width:100%;\"><\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-dropshadow imageframe-7 hover-type-none\" style=\"-webkit-box-shadow: 8px 8px 12px var(--awb-color7);box-shadow: 8px 8px 12px var(--awb-color7);\"><img decoding=\"async\" width=\"1346\" height=\"1900\" title=\"Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen.jpg\" alt class=\"lazyload img-responsive wp-image-2889\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271346%27%20height%3D%271900%27%20viewBox%3D%270%200%201346%201900%27%3E%3Crect%20width%3D%271346%27%20height%3D%271900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-200x282.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-400x565.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-600x847.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-800x1129.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen-1200x1694.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/Zertifikat-System-zur-Ubertragung-der-Werkstoffkennzeichnung-von-Werkstoffen.jpg 1346w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/span><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container has-pattern-background has-mask-background weiss-seo-details nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:56px;--awb-padding-bottom:56px;--awb-padding-top-small:28px;--awb-padding-bottom-small:28px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-6 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-9 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-bottom:20px;--awb-font-size:30px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;--fontSize:30;line-height:1.3;\">Series A, B or C: which dimensions fit?<\/h2><\/div><div class=\"fusion-text fusion-text-8\"><p>The dimension series has to match the existing piping. Series A is metric by nominal size (DN), series B metric by tube outside diameter of the ISO series, series C in inches by tube outside diameter.<\/p>\n<p>Check tube outside diameter and wall thickness. A similar nominal size does not make the series interchangeable.<\/p>\n<p>If the assignment is unclear, add the actual dimensions and your specification to the technical inquiry.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-5 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--link_hover_color: hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) + 20%),var(--awb-color4-a));--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-top-small:35px;--awb-background-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 15%),var(--awb-color4-a));--awb-flex-wrap:wrap;\" ><div class=\"awb-background-pattern\" style=\"background-image:  url(data:image\/svg+xml;utf8,%3Csvg%20width%3D%2280%22%20height%3D%22120%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M40%200H0v30L40%200zM0%2060v30l40-30v30L0%20120h40V90l40%2030V90L40%2060V30l40%2030V30L40%200v30L0%2060z%22%20fill%3D%22rgba%280%2C0%2C0%2C0.3%29%22%2F%3E%3C%2Fsvg%3E);opacity: 0.2 ;background-size:100%;mix-blend-mode:normal;\"><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-7 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:60px;--awb-spacing-left-large:1.92%;--awb-width-medium:80%;--awb-order-medium:0;--awb-spacing-right-medium:2.4%;--awb-spacing-left-medium:2.4%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-10 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color1);\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:50;line-height:1.3;\">Weld fittings to DIN 11865<\/h2><\/div><div class=\"fusion-title title fusion-title-11 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:30px;--awb-margin-bottom-small:30px;--awb-font-size:var(--awb-custom_typography_1-font-size);\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-custom_typography_1-font-family);font-weight:var(--awb-custom_typography_1-font-weight);font-style:var(--awb-custom_typography_1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-custom_typography_1-letter-spacing);text-transform:var(--awb-custom_typography_1-text-transform);--fontSize:40;line-height:var(--awb-custom_typography_1-line-height);\">Selecting design and connection<\/h3><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-8 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInUp\" data-animationDuration=\"1.0\" data-animationDelay=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-8 hover-type-none\"><img decoding=\"async\" width=\"1120\" height=\"1568\" alt=\"Vessel and connected piping of a water treatment plant\" title=\"weiss-wasseraufbereitung-verrohrung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung.jpg\" class=\"lazyload img-responsive wp-image-4326\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271120%27%20height%3D%271568%27%20viewBox%3D%270%200%201120%201568%27%3E%3Crect%20width%3D%271120%27%20height%3D%271568%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung-200x280.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung-400x560.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung-600x840.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung-800x1120.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-wasseraufbereitung-verrohrung.jpg 1120w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-9 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-left:60px;--awb-padding-top-medium:0px;--awb-padding-left-medium:40px;--awb-padding-top-small:60px;--awb-padding-bottom-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:0px;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:0px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-9\" style=\"--awb-text-color:#ffffff;\"><p>The Weiss configurator offers separate selection paths for 45 and 90 degree bends, equal and reducing tees as well as concentric and eccentric reducers.<\/p>\n<p>In addition to the standard, the dimension series, size and specific geometry are required. Metric, ISO and inch data must not be treated as equivalent just because the nominal size is similar. Check the actual tube and connection dimensions.<\/p>\n<p>Weld ends are permanently integrated into the piping. Tri-Clamp connections belong to detachable connection technology. Please state the type of connection you need explicitly. Include any special standards or deviating specifications in full in your inquiry so that we can review them separately.<\/p>\n<\/div><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;flex-grow:10;margin-top:10px;margin-bottom:30px;width:100%;max-width:140px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) + 15%),var(--awb-color4-a));border-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) + 15%),var(--awb-color4-a));border-top-width:6px;\"><\/div><\/div><div class=\"fusion-text fusion-text-10 fusion-text-no-margin\" style=\"--awb-font-size:var(--awb-typography2-font-size);--awb-line-height:var(--awb-typography2-line-height);--awb-letter-spacing:var(--awb-typography2-letter-spacing);--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:0px;--awb-text-font-family:var(--awb-typography2-font-family);--awb-text-font-weight:var(--awb-typography2-font-weight);--awb-text-font-style:var(--awb-typography2-font-style);\"><p>For these designs<\/p>\n<\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:20px;--awb-iconcolor:var(--awb-color5);--awb-textcolor:var(--awb-color2);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-1 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Tank and vessel construction<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Plant and system construction<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Process equipment and mechanical engineering<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Industrial piping<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Stainless steel assemblies to drawing<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Technical clarification for your field of use<\/p>\n<\/div><\/li><\/ul><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-10 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-padding-bottom:15px;--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:90px;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-12 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:30px;--awb-margin-bottom-small:30px;--awb-font-size:var(--awb-custom_typography_1-font-size);\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-custom_typography_1-font-family);font-weight:var(--awb-custom_typography_1-font-weight);font-style:var(--awb-custom_typography_1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-custom_typography_1-letter-spacing);text-transform:var(--awb-custom_typography_1-text-transform);--fontSize:40;line-height:var(--awb-custom_typography_1-line-height);\">Stainless steel for your requirements<\/h2><\/div><div class=\"fusion-text fusion-text-11\" style=\"--awb-text-color:#ffffff;\"><p>The fittings configurator offers the stainless steel materials 1.4404 and 1.4435. The requirements of your plant are decisive: medium, cleaning, temperature and the certificates intended.<\/p>\n<p>Please state the material number you need as clearly as possible. We review further materials and special designs on the basis of your drawing or specification.<\/p>\n<\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-9 fusion-button-default-span fusion-button-default-type weiss-config-trigger weiss-norm-din11865 fusion-has-button-gradient\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-custom_color_1);--button_border_hover_color:var(--awb-custom_color_1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_start:92%;--button_gradient_end:92%;--button_gradient_top_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_bottom_color:var(--awb-color5);--button_gradient_top_color_hover:var(--awb-color5);--button_gradient_bottom_color_hover:var(--awb-color5);--button_padding-top:20px;--button_padding-right:36px;--button_padding-bottom:22px;--button_padding-left:36px;--button_margin-bottom:10px;\" target=\"_self\" data-hover=\"bg_slide_left\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Open project configurator<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-11 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-no-small-visibility fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-margin-top-large:100px;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:-55px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInDown\" data-animationDuration=\"1.0\" data-animationDelay=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-max-width:400px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-9 hover-type-none\"><img decoding=\"async\" width=\"800\" height=\"876\" alt=\"Detail of a stainless steel vessel lid with opening and connection ferrule\" title=\"weiss-edelstahl-oberfla\u0308che-beha\u0308lterdeckel\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel.jpg\" class=\"lazyload img-responsive wp-image-4288\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27800%27%20height%3D%27876%27%20viewBox%3D%270%200%20800%20876%27%3E%3Crect%20width%3D%27800%27%20height%3D%27876%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel-200x219.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel-400x438.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel-600x657.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-oberflaeche-behaelterdeckel.jpg 800w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-6 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:80px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-12 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:30px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-13 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color8);\"><h2 class=\"fusion-title-heading title-heading-center fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.3;\">In-house production for your custom parts<\/h2><\/div><div class=\"fusion-text fusion-text-12\" style=\"--awb-content-alignment:center;\"><p>Weld fittings and related stainless steel assemblies may require additional machining steps. Weiss Apparatebau combines welding and machining under one roof. Which processes suit your component is clarified from the drawing and the agreed requirements.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-7 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-13 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-aspect-ratio: 100 \/ 85;--awb-object-position:0% 45%;--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-10 hover-type-none has-mask has-aspect-ratio\"><img decoding=\"async\" width=\"1400\" height=\"1050\" title=\"Weiss Zerspanung CNC-Bettfr\u00e4szentrum REIDEN BFR 1\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1.jpg\" class=\"lazyload img-responsive wp-image-3805 img-with-aspect-ratio\" data-parent-fit=\"cover\" data-parent-container=\".fusion-image-element\" alt srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271400%27%20height%3D%271050%27%20viewBox%3D%270%200%201400%201050%27%3E%3Crect%20width%3D%271400%27%20height%3D%271050%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1-1200x900.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-cnc-bettfraeszentrum-reiden-bfr1.jpg 1400w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-14 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-14 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">CNC milling for stainless steel components<\/h3><\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:60px;--awb-iconcolor:var(--awb-color5);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-2 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>CNC machining for components and assemblies to drawing.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Machined faces and connection geometries are agreed on the basis of your technical requirements.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>For custom parts, tolerances, datum edges and the later installed position count as much as the outside dimensions. Complete drawings help to clarify these requirements before production.<\/p>\n<\/div><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-8 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-15 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-11 hover-type-none has-mask\"><img decoding=\"async\" width=\"1200\" height=\"600\" alt=\"Metal reactor component with machined cover plate and bracket\" title=\"weiss-reaktor-bauteil\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil.jpg\" class=\"lazyload img-responsive wp-image-4310\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27600%27%20viewBox%3D%270%200%201200%20600%27%3E%3Crect%20width%3D%271200%27%20height%3D%27600%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil-200x100.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil-400x200.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil-600x300.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil-800x400.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-reaktor-bauteil.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-16 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-15 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Jigs and custom components<\/h3><\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:60px;--awb-iconcolor:var(--awb-color5);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-3 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Machining for jigs, tooling and custom stainless steel components.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Machining is matched to geometry, material and intended use.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Whether a single part or a repeat design: tell us the quantity you need and send the documents you have. That lets us review the scope of production and the machining steps required.<\/p>\n<\/div><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-9 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-bottom:100px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-17 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-12 hover-type-none has-mask\"><img decoding=\"async\" width=\"1200\" height=\"1020\" alt=\"Two employees at a lathe with a clamped workpiece\" title=\"weiss-edelstahlbearbeitung-drehmaschine\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine.jpg\" class=\"lazyload img-responsive wp-image-4292\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%271020%27%20viewBox%3D%270%200%201200%201020%27%3E%3Crect%20width%3D%271200%27%20height%3D%271020%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine-200x170.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine-400x340.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine-600x510.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine-800x680.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbearbeitung-drehmaschine.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-18 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-16 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Turning of stainless steel components<\/h3><\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:60px;--awb-iconcolor:var(--awb-color5);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-4 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Turning complements the production of stainless steel parts and assemblies.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Diameters, lengths, connection dimensions and tolerances belong in your specification. Additional machining and special geometries are agreed project by project.<\/p>\n<\/div><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-10 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-bottom:100px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-19 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-aspect-ratio: 100 \/ 85;--awb-object-position:0% 45%;--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-13 hover-type-none has-mask has-aspect-ratio\"><img decoding=\"async\" width=\"1400\" height=\"1050\" title=\"Weiss Zerspanung L+Z-Drehmaschine MEUSER\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser.jpg\" class=\"lazyload img-responsive wp-image-3811 img-with-aspect-ratio\" data-parent-fit=\"cover\" data-parent-container=\".fusion-image-element\" alt srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271400%27%20height%3D%271050%27%20viewBox%3D%270%200%201400%201050%27%3E%3Crect%20width%3D%271400%27%20height%3D%271050%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser-1200x900.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/06\/weiss-zerspanung-drehmaschine-meuser.jpg 1400w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-20 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-17 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Clarifying special dimensions<\/h3><\/div><ul style=\"--awb-size:17px;--awb-margin-bottom:60px;--awb-iconcolor:var(--awb-color5);--awb-line-height:28.9px;--awb-icon-width:28.9px;--awb-icon-height:28.9px;--awb-icon-margin:11.9px;--awb-content-margin:40.8px;\" class=\"fusion-checklist fusion-checklist-5 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>Drawing, material, surface finish and quantity form the basis of your inquiry.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"--awb-iconcolor:var(--awb-color4);\"><span class=\"icon-wrapper circle-no\"><i class=\"fusion-li-icon awb-factorycheck-bullet\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p>A selection in the configurator does not replace the clarification of a custom-made part. For deviating dimensions or special installation conditions we review the technical implementation on the basis of your documents.<\/p>\n<\/div><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-11 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:80px;--awb-padding-bottom:90px;--awb-padding-top-small:35px;--awb-padding-bottom-small:35px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-21 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:30px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-18 fusion-sep-none fusion-title-center fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color8);\"><h2 class=\"fusion-title-heading title-heading-center fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.3;\">Insights into stainless steel production<\/h2><\/div><div class=\"fusion-text fusion-text-13\" style=\"--awb-content-alignment:center;\"><p>The images show work already completed in production at Weiss Apparatebau. They give an insight into how we machine stainless steel components and assemblies. The design of your fitting is agreed on the basis of your requirements.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-22 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-14 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-edelstahlbeha\u0308lter-fertigung\" title=\"weiss-edelstahlbeha\u0308lter-fertigung\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Several stainless steel vessels of different sizes in the Weiss Apparatebau workshop\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung.jpg\" class=\"lazyload img-responsive wp-image-4294\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-fertigung.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-23 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-15 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-edelstahl-rohrbogen-flanschverbindung\" title=\"weiss-edelstahl-rohrbogen-flanschverbindung\"><img decoding=\"async\" width=\"960\" height=\"720\" alt=\"Stainless steel piping with bend, flange connections and reducer\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung.jpg\" class=\"lazyload img-responsive wp-image-4290\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27960%27%20height%3D%27720%27%20viewBox%3D%270%200%20960%20720%27%3E%3Crect%20width%3D%27960%27%20height%3D%27720%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahl-rohrbogen-flanschverbindung.jpg 960w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-24 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-16 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-schwei\u00dfverbindungen-rohrstutzen\" title=\"weiss-schwei\u00dfverbindungen-rohrstutzen\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Close-up of weld seams on pipe ferrules and a flange connection\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen.jpg\" class=\"lazyload img-responsive wp-image-4316\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-schweissverbindungen-rohrstutzen.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-25 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-17 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-edelstahlbeha\u0308lter-paar\" title=\"weiss-edelstahlbeha\u0308lter-paar\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Two stainless steel vessels with closed lids and side connections\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar.jpg\" class=\"lazyload img-responsive wp-image-4298\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-edelstahlbehaelter-paar.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-26 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-18 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-liegender-beha\u0308lter-flanschanschluss\" title=\"weiss-liegender-beha\u0308lter-flanschanschluss\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Horizontal vessel with a large flange connection and bent piping\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss.jpg\" class=\"lazyload img-responsive wp-image-4300\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-liegender-behaelter-flanschanschluss.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-27 fusion_builder_column_1_3 1_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:33.333333333333%;--awb-spacing-right-large:5.76%;--awb-margin-bottom-large:14px;--awb-spacing-left-large:5.76%;--awb-width-medium:33.333333333333%;--awb-order-medium:0;--awb-spacing-right-medium:5.76%;--awb-spacing-left-medium:5.76%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-margin-bottom:20px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-19 hover-type-zoomin\"><a href=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht.jpg\" class=\"fusion-lightbox\" data-rel=\"iLightbox[weiss-maschinen]\" data-title=\"weiss-teiganmischbeha\u0308lter-innenansicht\" title=\"weiss-teiganmischbeha\u0308lter-innenansicht\"><img decoding=\"async\" width=\"1200\" height=\"900\" alt=\"Interior view of a dough mixing vessel with internals\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht.jpg\" class=\"lazyload img-responsive wp-image-4320\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27900%27%20viewBox%3D%270%200%201200%20900%27%3E%3Crect%20width%3D%271200%27%20height%3D%27900%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht-200x150.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht-400x300.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht-600x450.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht-800x600.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-teiganmischbehaelter-innenansicht.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 400px\" \/><\/a><\/span><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-12 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:120px;--awb-padding-bottom:120px;--awb-padding-top-small:35px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 1200px + 0px );margin-left: calc(-0px \/ 2 );margin-right: calc(-0px \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-28 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-stretch fusion-animated\" style=\"--awb-padding-top-small:0px;--awb-padding-bottom-small:0px;--awb-bg-position:center center;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:0px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:0px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:0px;--awb-spacing-left-small:0px;\" data-animationType=\"fadeInUp\" data-animationDuration=\"1.0\" data-animationDelay=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"text-align:center;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-20 hover-type-none\"><img decoding=\"async\" width=\"900\" height=\"1200\" alt=\"Process unit on a frame with pipe connections and pressure gauges\" title=\"weiss-apparat-rohranschlu\u0308sse\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse.jpg\" class=\"lazyload img-responsive wp-image-4268\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%27900%27%20height%3D%271200%27%20viewBox%3D%270%200%20900%201200%27%3E%3Crect%20width%3D%27900%27%20height%3D%271200%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse-200x267.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse-400x533.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse-600x800.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse-800x1067.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparat-rohranschluesse.jpg 900w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-29 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-stretch fusion-animated\" style=\"--awb-padding-top:100px;--awb-padding-right:80px;--awb-padding-bottom:100px;--awb-padding-left:80px;--awb-bg-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 20%),var(--awb-color4-a));--awb-bg-color-hover:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 20%),var(--awb-color4-a));--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:0px;--awb-margin-bottom-large:0px;--awb-spacing-left-large:0px;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:0px;--awb-spacing-left-small:0px;\" data-animationType=\"fadeInDown\" data-animationDuration=\"1.0\" data-animationDelay=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-14 fusion-text-no-margin\" style=\"--awb-font-size:var(--awb-typography5-font-size);--awb-line-height:var(--awb-typography5-line-height);--awb-letter-spacing:var(--awb-typography5-letter-spacing);--awb-text-transform:var(--awb-typography5-text-transform);--awb-text-color:var(--awb-color5);--awb-margin-bottom:20px;--awb-text-font-family:var(--awb-typography5-font-family);--awb-text-font-weight:var(--awb-typography5-font-weight);--awb-text-font-style:var(--awb-typography5-font-style);\"><p>From component to assembly<\/p>\n<\/div><div class=\"fusion-title title fusion-title-19 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:30px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Combining welding and machining<\/h3><\/div><div class=\"fusion-text fusion-text-15 fusion-text-no-margin\" style=\"--awb-text-color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 30%));--awb-margin-bottom:60px;\"><p>Do you need more than a single fitting? We also agree components and assemblies to drawing or technical specification with you. In-house welding and machining allow connected production sequences. Scope and certificates are agreed for each project.<\/p>\n<\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-default fusion-button-default button-10 fusion-button-default-span fusion-button-default-type\" style=\"--button_font_size:18px;--button_padding-top:22px;--button_padding-bottom:24px;--button_margin-bottom:10px;\" target=\"_self\" data-hover=\"bg_slide_left\" href=\"#awb-open-oc__2785\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Discuss a custom part<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-13 fusion-flex-container has-pattern-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:40px;--awb-padding-bottom:40px;--awb-background-color:var(--awb-custom_color_1);--awb-flex-wrap:wrap;\" ><div class=\"awb-background-pattern\" style=\"background-image:  url(data:image\/svg+xml;utf8,%3Csvg%20width%3D%22100%22%20height%3D%22100%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M0%200v100h1v-1l99-99H83L1%2082V0H0zM98.178%2085L100%2083v17H83l15.178-15z%22%20fill%3D%22rgba%280%2C0%2C0%2C0.3%29%22%2F%3E%3Cpath%20d%3D%22M84%2099H1v1h83v-1z%22%20fill%3D%22rgba%280%2C0%2C0%2C0.3%29%22%2F%3E%3C%2Fsvg%3E);background-size:50%;\"><\/div><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-30 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top-medium:10vw;--awb-padding-bottom-medium:10vw;--awb-padding-top-small:100px;--awb-padding-bottom-small:100px;--awb-bg-position:center center;--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"awb-column__background-slider\" ><div class=\"awb-background-slider\" data-type=\"column\" data-loop=\"yes\" data-animation=\"fade\" data-slideshow-speed=\"5000\" data-animation-speed=\"800\" data-direction=\"up\" style=\"--awb-image-position:46% 50%;\"><div class=\"swiper-wrapper\"><div class=\"swiper-slide\"><\/div><div class=\"swiper-slide\"><\/div><div class=\"swiper-slide\"><\/div><\/div><\/div><\/div><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"awb-column__content\"><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-21 hover-type-none\"><img decoding=\"async\" width=\"2400\" height=\"1600\" alt=\"Two employees discussing a technical drawing in production\" title=\"weiss-apparatebau-zeichnung-abstimmung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung.jpg\" class=\"lazyload img-responsive wp-image-4280\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%272400%27%20height%3D%271600%27%20viewBox%3D%270%200%202400%201600%27%3E%3Crect%20width%3D%272400%27%20height%3D%271600%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-200x133.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-400x267.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-600x400.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-800x533.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung-1200x800.jpg 1200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-apparatebau-zeichnung-abstimmung.jpg 2400w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 1200px\" \/><\/span><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-31 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:40px;--awb-padding-bottom:40px;--awb-bg-size:cover;--awb-width-large:100%;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-20 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:#ffffff;--awb-margin-bottom:40px;--awb-margin-bottom-small:40px;--awb-font-size:50px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;font-size:1em;letter-spacing:-0.005em;--fontSize:50;line-height:1.2;\">How to inquire about your weld fittings<\/h2><\/div><div class=\"fusion-title title fusion-title-21 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:30px;--awb-margin-bottom-small:30px;--awb-font-size:var(--awb-custom_typography_1-font-size);\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-custom_typography_1-font-family);font-weight:var(--awb-custom_typography_1-font-weight);font-style:var(--awb-custom_typography_1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-custom_typography_1-letter-spacing);text-transform:var(--awb-custom_typography_1-text-transform);--fontSize:40;line-height:var(--awb-custom_typography_1-line-height);\">Select. Complete. Clarify technically.<\/h3><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-10 fusion_builder_column_inner_1_4 1_4 fusion-flex-column fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInLeft\" data-animationDuration=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;margin-bottom:15px;width:100%;max-width:100px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(129,197,228,0.5);border-color:rgba(129,197,228,0.5);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-16 fusion-text-no-margin\" style=\"--awb-font-size:24px;--awb-line-height:1.4;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:5px;\"><p>01. Select design and dimensions<\/p>\n<\/div><div class=\"fusion-text fusion-text-17\" style=\"--awb-font-size:17px;--awb-line-height:1.6;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color3);\"><p>Start with a bend, tee or reducer. Select the dimension series and size to match your piping. For reducing components both connection sizes are required. Note any deviating dimensions and special installation conditions.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-11 fusion_builder_column_inner_1_4 1_4 fusion-flex-column fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInLeft\" data-animationDuration=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;margin-bottom:15px;width:100%;max-width:100px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(129,197,228,0.5);border-color:rgba(129,197,228,0.5);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-18 fusion-text-no-margin\" style=\"--awb-font-size:24px;--awb-line-height:1.4;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:5px;\"><p>02. Define the design<\/p>\n<\/div><div class=\"fusion-text fusion-text-19\" style=\"--awb-font-size:17px;--awb-line-height:1.6;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color3);\"><p>Add material, surface finish and quantity. The configurator offers 1.4404 and 1.4435 together with the surface finishes provided for each. The inspection and material certificates you want should already be part of your inquiry.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-12 fusion_builder_column_inner_1_4 1_4 fusion-flex-column fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInLeft\" data-animationDuration=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;margin-bottom:15px;width:100%;max-width:100px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(129,197,228,0.5);border-color:rgba(129,197,228,0.5);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-20 fusion-text-no-margin\" style=\"--awb-font-size:24px;--awb-line-height:1.4;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:5px;\"><p>03. Send your documents<\/p>\n<\/div><div class=\"fusion-text fusion-text-21\" style=\"--awb-font-size:17px;--awb-line-height:1.6;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color3);\"><p>Transfer the configuration into your inquiry and add drawings or technical specifications. Describe special dimensions and additional requirements explicitly. That way purchasing and engineering work from the same details.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-13 fusion_builder_column_inner_1_4 1_4 fusion-flex-column fusion-animated\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:0%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\" data-animationType=\"fadeInLeft\" data-animationDuration=\"1.0\" data-animationOffset=\"top-into-view\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-separator\" style=\"align-self: flex-start;margin-right:auto;margin-bottom:15px;width:100%;max-width:100px;\"><div class=\"fusion-separator-border sep-single sep-solid\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:rgba(129,197,228,0.5);border-color:rgba(129,197,228,0.5);border-top-width:1px;\"><\/div><\/div><div class=\"fusion-text fusion-text-22 fusion-text-no-margin\" style=\"--awb-font-size:24px;--awb-line-height:1.4;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography2-text-transform);--awb-text-color:var(--awb-color1);--awb-margin-bottom:5px;\"><p>04. Confirm the design<\/p>\n<\/div><div class=\"fusion-text fusion-text-23\" style=\"--awb-font-size:17px;--awb-line-height:1.6;--awb-letter-spacing:-0.005em;--awb-text-transform:var(--awb-typography4-text-transform);--awb-text-color:var(--awb-color3);\"><p>We review the combination requested and clarify open technical points with you. The specific design, availability, documentation and terms are then confirmed for your requirements.<\/p>\n<\/div><\/div><\/div><\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-11 fusion-button-default-span fusion-button-default-type weiss-config-trigger weiss-norm-din11865 fusion-has-button-gradient\" style=\"--button_accent_color:var(--awb-color1);--button_accent_hover_color:var(--awb-custom_color_1);--button_border_hover_color:var(--awb-custom_color_1);--button_border_width-top:1px;--button_border_width-right:1px;--button_border_width-bottom:1px;--button_border_width-left:1px;--button_gradient_start:92%;--button_gradient_end:92%;--button_gradient_top_color:hsla(var(--awb-color1-h),var(--awb-color1-s),var(--awb-color1-l),calc(var(--awb-color1-a) - 100%));--button_gradient_bottom_color:var(--awb-color5);--button_gradient_top_color_hover:var(--awb-color5);--button_gradient_bottom_color_hover:var(--awb-color5);--button_padding-top:20px;--button_padding-right:36px;--button_padding-bottom:22px;--button_padding-left:36px;--button_margin-bottom:10px;\" target=\"_self\" data-hover=\"bg_slide_left\" href=\"#\" data-toggle=\"modal\" data-target=\".fusion-modal.weiss-fittings-modal\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Open project configurator<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-14 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-margin-top:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-32 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-mask-url: url(https:\/\/weiss-apparatebau.de\/wp-content\/plugins\/fusion-builder\/\/assets\/images\/masks\/mask-16.svg);--awb-mask-size: 100%;--awb-mask-position: bottom left;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-22 hover-type-none has-mask\"><img decoding=\"async\" width=\"1200\" height=\"800\" alt=\"Two employees applying a measuring device to the wall of a vessel\" title=\"weiss-beha\u0308lter-messung\" src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung.jpg\" data-orig-src=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung.jpg\" class=\"lazyload img-responsive wp-image-4282\" srcset=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20width%3D%271200%27%20height%3D%27800%27%20viewBox%3D%270%200%201200%20800%27%3E%3Crect%20width%3D%271200%27%20height%3D%27800%27%20fill-opacity%3D%220%22%2F%3E%3C%2Fsvg%3E\" data-srcset=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung-200x133.jpg 200w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung-400x267.jpg 400w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung-600x400.jpg 600w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung-800x533.jpg 800w, https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2026\/09\/weiss-behaelter-messung.jpg 1200w\" data-sizes=\"auto\" data-orig-sizes=\"(max-width: 800px) 100vw, 600px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-33 fusion_builder_column_1_2 1_2 fusion-flex-column fusion-flex-align-self-center\" style=\"--awb-padding-right:40px;--awb-padding-left:40px;--awb-padding-top-small:0px;--awb-padding-right-small:0px;--awb-padding-left-small:0px;--awb-bg-size:cover;--awb-width-large:50%;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-22 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-bottom:30px;--awb-margin-bottom-small:40px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:40;line-height:1.4;\">Keeping surface finishes and certificates in mind<\/h3><\/div><div class=\"fusion-text fusion-text-24 fusion-text-no-margin\" style=\"--awb-margin-bottom:50px;\"><p>The surface finish has to suit the component and the requirements of your plant. The configurator distinguishes between mechanically polished and electropolished designs among others. Pickling, passivating or grinding may be added depending on component and order.<\/p>\n<p>Please state required roughness values, inspection certificates and material certificates in your inquiry if possible. The certificate held by Weiss Apparatebau for AD 2000 HP0 and DIN EN ISO 3834-2 refers to the stated scope of fabrication. It does not replace the certificates agreed for your specific component.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-15 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-sizes-top:1px;--awb-border-sizes-bottom:1px;--awb-border-sizes-left:0px;--awb-border-sizes-right:0px;--awb-border-color:var(--awb-custom_color_1);--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-right-small:60px;--awb-padding-bottom-small:35px;--awb-padding-left-small:60px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-34 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:7.68%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:7.68%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-23 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 10%),var(--awb-color4-a));--awb-margin-bottom:5px;--awb-font-size:65px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-typography1-font-family);font-weight:var(--awb-typography1-font-weight);font-style:var(--awb-typography1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-typography1-letter-spacing);text-transform:var(--awb-typography1-text-transform);--fontSize:65;line-height:var(--awb-typography1-line-height);\">DIN 11865<\/h3><\/div><div class=\"fusion-text fusion-text-25 fusion-text-no-margin\" style=\"--awb-font-size:19px;--awb-text-transform:none;--awb-margin-bottom:0px;\"><p>Selection basis for weld fittings<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-35 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:7.68%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:7.68%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-24 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 10%),var(--awb-color4-a));--awb-margin-bottom:5px;--awb-font-size:65px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-typography1-font-family);font-weight:var(--awb-typography1-font-weight);font-style:var(--awb-typography1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-typography1-letter-spacing);text-transform:var(--awb-typography1-text-transform);--fontSize:65;line-height:var(--awb-typography1-line-height);\">1.4404<\/h3><\/div><div class=\"fusion-text fusion-text-26 fusion-text-no-margin\" style=\"--awb-font-size:19px;--awb-text-transform:none;--awb-margin-bottom:0px;\"><p>Stainless steel material in the configurator<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-36 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:7.68%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:7.68%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-25 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 10%),var(--awb-color4-a));--awb-margin-bottom:5px;--awb-font-size:65px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-typography1-font-family);font-weight:var(--awb-typography1-font-weight);font-style:var(--awb-typography1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-typography1-letter-spacing);text-transform:var(--awb-typography1-text-transform);--fontSize:65;line-height:var(--awb-typography1-line-height);\">1.4435<\/h3><\/div><div class=\"fusion-text fusion-text-27 fusion-text-no-margin\" style=\"--awb-font-size:19px;--awb-text-transform:capitalize;--awb-margin-bottom:0px;\"><p>Further material choice in the configurator<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-37 fusion_builder_column_1_4 1_4 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:25%;--awb-spacing-right-large:7.68%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:7.68%;--awb-width-medium:25%;--awb-order-medium:0;--awb-spacing-right-medium:7.68%;--awb-spacing-left-medium:7.68%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-26 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 10%),var(--awb-color4-a));--awb-margin-bottom:5px;--awb-font-size:65px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:var(--awb-typography1-font-family);font-weight:var(--awb-typography1-font-weight);font-style:var(--awb-typography1-font-style);margin:0;font-size:1em;letter-spacing:var(--awb-typography1-letter-spacing);text-transform:var(--awb-typography1-text-transform);--fontSize:65;line-height:var(--awb-typography1-line-height);\">OEM<\/h3><\/div><div class=\"fusion-text fusion-text-28 fusion-text-no-margin\" style=\"--awb-font-size:19px;--awb-text-transform:capitalize;--awb-margin-bottom:0px;\"><p>For tank, plant and vessel manufacturers<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-16 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:100px;--awb-padding-bottom:100px;--awb-padding-top-small:35px;--awb-padding-bottom-small:37px;--awb-background-color:hsla(var(--awb-custom_color_1-h),var(--awb-custom_color_1-s),calc(var(--awb-custom_color_1-l) + 2%),var(--awb-custom_color_1-a));--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-38 fusion_builder_column_3_5 3_5 fusion-flex-column\" style=\"--awb-padding-right:20px;--awb-padding-right-small:0px;--awb-bg-size:cover;--awb-width-large:60%;--awb-spacing-right-large:3.2%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.2%;--awb-width-medium:60%;--awb-order-medium:0;--awb-spacing-right-medium:3.2%;--awb-spacing-left-medium:3.2%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-margin-bottom-small:60px;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-27 fusion-sep-none fusion-title-text fusion-title-size-two\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;text-transform:var(--awb-typography1-text-transform);--fontSize:50;line-height:1.3;\">Frequently asked questions about weld fittings<\/h2><\/div><div class=\"fusion-text fusion-text-29 fusion-text-no-margin\" style=\"--awb-margin-bottom:40px;\"><p>Designs, materials, special dimensions and inquiries: answers for purchasing and engineering.<\/p>\n<\/div><div class=\"accordian fusion-accordian\" style=\"--awb-border-size:1px;--awb-icon-size:16px;--awb-content-font-size:var(--awb-typography4-font-size);--awb-icon-alignment:left;--awb-hover-color:var(--awb-color2);--awb-border-color:var(--awb-color3);--awb-background-color:var(--awb-color1);--awb-divider-color:var(--awb-color3);--awb-divider-hover-color:var(--awb-color3);--awb-icon-color:var(--awb-color1);--awb-title-color:var(--awb-color8);--awb-content-color:var(--awb-color8);--awb-icon-box-color:var(--awb-color8);--awb-toggle-hover-accent-color:var(--awb-color5);--awb-title-font-family:&quot;Plus Jakarta Sans&quot;;--awb-title-font-weight:700;--awb-title-font-style:normal;--awb-content-font-family:var(--awb-typography4-font-family);--awb-content-font-weight:var(--awb-typography4-font-weight);--awb-content-font-style:var(--awb-typography4-font-style);\"><div class=\"panel-group fusion-toggle-icon-boxed\" id=\"accordion-4344-2\"><div class=\"fusion-panel panel-default panel-c1dc22b1cd06fcca0 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_c1dc22b1cd06fcca0\"><a aria-expanded=\"false\" aria-controls=\"c1dc22b1cd06fcca0\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#c1dc22b1cd06fcca0\" href=\"#c1dc22b1cd06fcca0\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Which weld fittings can I configure?<\/span><\/a><\/h3><\/div><div id=\"c1dc22b1cd06fcca0\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_c1dc22b1cd06fcca0\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>The DIN 11865 range covers 45 and 90 degree bends, equal and reducing tees as well as concentric and eccentric reducers. Select the design you need and add dimension, material, surface finish and quantity. Availability is confirmed after we have reviewed your inquiry.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-dace24bca01fefeac fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_dace24bca01fefeac\"><a aria-expanded=\"false\" aria-controls=\"dace24bca01fefeac\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#dace24bca01fefeac\" href=\"#dace24bca01fefeac\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Which details are needed for an inquiry?<\/span><\/a><\/h3><\/div><div id=\"dace24bca01fefeac\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_dace24bca01fefeac\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>State design, type of connection, dimension series, size, material, surface finish and quantity. For reducers and reducing tees both connection sizes are required. Add drawings, special dimensions and the inspection or material certificates you want.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-2a4aa67aa8064a5a3 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_2a4aa67aa8064a5a3\"><a aria-expanded=\"false\" aria-controls=\"2a4aa67aa8064a5a3\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#2a4aa67aa8064a5a3\" href=\"#2a4aa67aa8064a5a3\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Are special dimensions and single parts possible?<\/span><\/a><\/h3><\/div><div id=\"2a4aa67aa8064a5a3\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_2a4aa67aa8064a5a3\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>You can inquire about deviating dimensions, single parts and custom designs with a drawing or technical specification. We review feasibility, design and terms for your requirements. This does not imply a blanket delivery commitment for every special dimension.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-01942a230c3101189 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_01942a230c3101189\"><a aria-expanded=\"false\" aria-controls=\"01942a230c3101189\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#01942a230c3101189\" href=\"#01942a230c3101189\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Which materials are available?<\/span><\/a><\/h3><\/div><div id=\"01942a230c3101189\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_01942a230c3101189\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>The fittings shown in the configurator are offered in 1.4404 and 1.4435. Further materials are reviewed on request. Please state the material number required and the operating requirements as precisely as possible.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-b13f44384ffc6bc2e fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_b13f44384ffc6bc2e\"><a aria-expanded=\"false\" aria-controls=\"b13f44384ffc6bc2e\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#b13f44384ffc6bc2e\" href=\"#b13f44384ffc6bc2e\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">How do the surface finishes differ?<\/span><\/a><\/h3><\/div><div id=\"b13f44384ffc6bc2e\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_b13f44384ffc6bc2e\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>The surface finishes provided in the configurator differ by component and design. H4 denotes a mechanically polished surface, H4o an electropolished one. If your specification requires a particular roughness value, state it in your inquiry and have the assignment to the component confirmed.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-12e6060915f888a9f fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_12e6060915f888a9f\"><a aria-expanded=\"false\" aria-controls=\"12e6060915f888a9f\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#12e6060915f888a9f\" href=\"#12e6060915f888a9f\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">Which documentation can I request?<\/span><\/a><\/h3><\/div><div id=\"12e6060915f888a9f\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_12e6060915f888a9f\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>Inspection certificates, material documentation and further certificates are agreed to match the agreed scope. State your requirements before placing the order. Certification of the manufacturing operation does not automatically mean that every fitting is supplied with every certificate.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-de4dcb925d230ff47 fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_de4dcb925d230ff47\"><a aria-expanded=\"false\" aria-controls=\"de4dcb925d230ff47\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#de4dcb925d230ff47\" href=\"#de4dcb925d230ff47\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">What distinguishes DIN 11865 series A, B and C?<\/span><\/a><\/h3><\/div><div id=\"de4dcb925d230ff47\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_de4dcb925d230ff47\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>Series A is metric by nominal size, series B metric by tube outside diameter in the ISO series, series C in inches by tube outside diameter. Similar nominal sizes do not mean identical dimensions. For a clear assignment, please also state tube outside diameter and wall thickness.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-panel panel-default panel-e06a23e5dd0937f5b fusion-toggle-has-divider\"><div class=\"panel-heading\"><h3 class=\"panel-title toggle\" id=\"toggle_e06a23e5dd0937f5b\"><a aria-expanded=\"false\" aria-controls=\"e06a23e5dd0937f5b\" role=\"button\" data-toggle=\"collapse\" data-parent=\"#accordion-4344-2\" data-target=\"#e06a23e5dd0937f5b\" href=\"#e06a23e5dd0937f5b\"><span class=\"fusion-toggle-icon-wrapper\" aria-hidden=\"true\"><i class=\"fa-fusion-box active-icon awb-icon-minus\" aria-hidden=\"true\"><\/i><i class=\"fa-fusion-box inactive-icon awb-icon-plus\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-toggle-heading\">What is the difference between weld ends and Tri-Clamp connections?<\/span><\/a><\/h3><\/div><div id=\"e06a23e5dd0937f5b\" class=\"panel-collapse collapse \" aria-labelledby=\"toggle_e06a23e5dd0937f5b\"><div class=\"panel-body toggle-content fusion-clearfix\">\n<p>Weld ends are permanently integrated into the piping. Tri-Clamp connections are detachable. Please state explicitly in your inquiry which type of connection you need.<\/p>\n<\/div><\/div><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-39 fusion_builder_column_2_5 2_5 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-padding-top:60px;--awb-padding-right:60px;--awb-padding-bottom:30px;--awb-padding-left:60px;--awb-padding-top-small:40px;--awb-padding-right-small:40px;--awb-padding-bottom-small:20px;--awb-padding-left-small:40px;--awb-bg-color:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 15%),var(--awb-color4-a));--awb-bg-color-hover:hsla(var(--awb-color4-h),var(--awb-color4-s),calc(var(--awb-color4-l) - 15%),var(--awb-color4-a));--awb-bg-size:cover;--awb-width-large:40%;--awb-spacing-right-large:4.8%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:4.8%;--awb-width-medium:40%;--awb-order-medium:0;--awb-spacing-right-medium:4.8%;--awb-spacing-left-medium:4.8%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-28 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:var(--awb-color1);\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:50;line-height:1.3;\">Your technical inquiry<\/h2><\/div><div class=\"fusion-form fusion-form-builder fusion-form-form-wrapper fusion-form-3071 has-icon-alignment\" style=\"--awb-tooltip-text-color:#e5e5e5;--awb-tooltip-background-color:#e5e5e5;--awb-field-margin-top:0px;--awb-field-margin-bottom:20px;--awb-form-input-height:65px;--awb-form-bg-color:hsla(var(--awb-color8-h),var(--awb-color8-s),var(--awb-color8-l),calc(var(--awb-color8-a) - 100%));--awb-form-select-bg:var(--awb-color8);--awb-form-placeholder-color:var(--awb-color3);--awb-form-text-color:#e5e5e5;--awb-form-label-color:#e5e5e5;--awb-form-border-width-top:0px;--awb-form-border-width-bottom:1px;--awb-form-border-width-right:0px;--awb-form-border-width-left:0px;--awb-form-border-color:#e5e5e5;--awb-form-focus-border-color:var(--awb-color5);--awb-form-focus-border-hover-color:hsla(var(--awb-color5-h),var(--awb-color5-s),var(--awb-color5-l),calc(var(--awb-color5-a) - 50%));--awb-form-border-radius:0px;--awb-icon-alignment-top:0px;--awb-icon-alignment-bottom:1px;--awb-icon-alignment-font-size:1em;\" data-form-id=\"3071\" data-config=\"{&quot;form_id&quot;:3071,&quot;form_post_id&quot;:3071,&quot;post_id&quot;:4344,&quot;form_type&quot;:&quot;ajax&quot;,&quot;confirmation_type&quot;:&quot;message&quot;,&quot;redirect_url&quot;:&quot;&quot;,&quot;field_labels&quot;:{&quot;name&quot;:&quot;&quot;,&quot;email&quot;:&quot;&quot;,&quot;phone&quot;:&quot;&quot;,&quot;Your Message\\u2026&quot;:&quot;&quot;,&quot;datenschutz&quot;:&quot;Accept Privacy Policy&quot;},&quot;field_logics&quot;:{&quot;name&quot;:&quot;&quot;,&quot;email&quot;:&quot;&quot;,&quot;phone&quot;:&quot;&quot;,&quot;Your Message\\u2026&quot;:&quot;&quot;,&quot;datenschutz&quot;:&quot;&quot;,&quot;submit_1&quot;:&quot;&quot;,&quot;notice_1&quot;:&quot;&quot;},&quot;field_types&quot;:{&quot;name&quot;:&quot;text&quot;,&quot;email&quot;:&quot;email&quot;,&quot;phone&quot;:&quot;phone_number&quot;,&quot;Your Message\\u2026&quot;:&quot;textarea&quot;,&quot;datenschutz&quot;:&quot;consent&quot;,&quot;submit_1&quot;:&quot;submit&quot;,&quot;notice_1&quot;:&quot;notice&quot;},&quot;nonce_method&quot;:&quot;ajax&quot;}\"><form action=\"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/\" method=\"post\" class=\"fusion-form fusion-form-3071\"><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-16-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:0px;--awb-padding-right:0px;--awb-padding-bottom:0px;--awb-padding-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-40 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-text-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><input type=\"text\" autocomplete=\"off\" name=\"name\" id=\"name\" value=\"\"  class=\"fusion-form-input\" placeholder=\"First and Last Name \" data-holds-private-data=\"false\" minlength=\"0\"\/><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-41 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-email-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><input type=\"email\" autocomplete=\"off\" name=\"email\" id=\"email\" value=\"\"  class=\"fusion-form-input\" required=\"true\" aria-required=\"true\" placeholder=\"Email *\" data-holds-private-data=\"false\"\/><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-42 fusion_builder_column_1_2 1_2 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:50%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:3.84%;--awb-width-medium:50%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:3.84%;--awb-spacing-left-medium:3.84%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-phone-number-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><input type=\"tel\" autocomplete=\"off\" name=\"phone\" id=\"phone\" value=\"\"  class=\"fusion-form-input\" required=\"true\" aria-required=\"true\" placeholder=\"Phone Number *\" data-holds-private-data=\"false\"\/><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-43 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-textarea-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><textarea cols=\"40\" autocomplete=\"off\"  minlength=\"0\"  rows=\"4\" tabindex=\"\" id=\"Your Message\u2026\" name=\"Your Message\u2026\" class=\"fusion-form-input\" placeholder=\"Your Message\u2026 \" data-holds-private-data=\"false\"><\/textarea><\/div><div class=\"fusion-form-field fusion-form-consent-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><div class=\"fusion-form-label-wrapper\"><label for=\"datenschutz\">Accept Privacy Policy <abbr class=\"fusion-form-element-required\" title=\"required\">*<\/abbr><\/label><div class=\"fusion-form-tooltip\"><i class=\"awb-icon-question-circle\"><\/i><span class=\"fusion-form-tooltip-content\">I have read and accept the privacy policy. I agree that my data will be collected and processed electronically to respond to my inquiry.<\/span><\/div><\/div><div class=\"fusion-form-checkbox option-inline\"><input tabindex=\"\" id=\"datenschutz\" type=\"checkbox\" value=\"1\" name=\"datenschutz\" class=\"fusion-form-input\" required=\"true\" aria-required=\"true\"\/><label for=\"datenschutz\">I have read and accept the privacy policy. I agree that my data will be collected and processed electronically to respond to my inquiry.<\/label><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-44 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:40px;--awb-padding-top-small:20px;--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-form-field fusion-form-submit-field fusion-form-label-above\" style=\"\" data-form-id=\"3071\"><div ><button type=\"submit\" class=\"fusion-button button-flat fusion-button-default-size button-custom fusion-button-default button-12 fusion-button-span-yes  form-form-submit button-default\" style=\"--button_accent_color:var(--awb-color4);--button_accent_hover_color:var(--awb-custom_color_1);--button_border_hover_color:var(--awb-color1);--button_gradient_angle:90deg;--button_gradient_start:0%;--button_gradient_end:100%;--button_gradient_top_color:var(--awb-color5);--button_gradient_bottom_color:var(--awb-color5);--button_gradient_top_color_hover:var(--awb-color4);--button_gradient_bottom_color_hover:var(--awb-color4);--button_font_size:18px;--button_padding-top:24px;--button_padding-bottom:26px;\" data-hover=\"bg_slide_left\" data-form-number=\"3071\" tabindex=\"\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Send Message<\/span><i class=\"awb-factoryarrow-right awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/button><\/div><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-45 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-padding-top:20px;--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"form-submission-notices data-notice_1\" id=\"fusion-notices-1\"><div class=\"fusion-alert alert success alert-success fusion-alert-center fusion-form-response fusion-form-response-success awb-alert-native-link-color alert-dismissable awb-alert-close-boxed\" role=\"alert\"><div class=\"fusion-alert-content-wrapper\"><span class=\"alert-icon\"><i class=\"awb-icon-check-circle\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-alert-content\">Thank you for your message. We will get back to you within 48 hours.<\/span><\/div><button type=\"button\" class=\"close toggle-alert\" data-dismiss=\"alert\" aria-label=\"Close\">&times;<\/button><\/div><div class=\"fusion-alert alert error alert-danger fusion-alert-center fusion-form-response fusion-form-response-error awb-alert-native-link-color alert-dismissable awb-alert-close-boxed\" role=\"alert\"><div class=\"fusion-alert-content-wrapper\"><span class=\"alert-icon\"><i class=\"awb-icon-exclamation-triangle\" aria-hidden=\"true\"><\/i><\/span><span class=\"fusion-alert-content\">An error occurred while sending your message. Please try again later or contact us by phone.<\/span><\/div><button type=\"button\" class=\"close toggle-alert\" data-dismiss=\"alert\" aria-label=\"Close\">&times;<\/button><\/div><\/div><\/div><\/div><\/div><\/div><input type=\"hidden\" name=\"fusion_privacy_store_ip_ua\" value=\"false\"><input type=\"hidden\" name=\"fusion_privacy_expiration_interval\" value=\"48\"><input type=\"hidden\" name=\"privacy_expiration_action\" value=\"anonymize\"><\/form><\/div><div class=\"fusion-modal modal fade modal-1 weiss-fittings-modal weiss-config-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"modal-heading-1\" aria-hidden=\"true\" style=\"--awb-border-color:var(--awb-color3);--awb-background:var(--awb-color1);\"><div class=\"modal-dialog modal-lg\" role=\"document\"><div class=\"modal-content fusion-modal-content\"><div class=\"modal-header\"><button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-hidden=\"true\" aria-label=\"Close\">&times;<\/button><h3 class=\"modal-title\" id=\"modal-heading-1\" data-dismiss=\"modal\" aria-hidden=\"true\">Project configurator<\/h3><\/div><div class=\"modal-body fusion-clearfix\">\n<p class=\"weiss-config-status\" role=\"status\">Configurator is loading \u2026<\/p>\n<p class=\"weiss-preis-hinweis\" style=\"margin:0 0 14px;padding:12px 14px;background:#fdecec;border-left:4px solid #d60a0a;font-size:14.5px;line-height:1.5;color:#1c1c1c\">Prices are hidden in this view. <a href=\"#weiss-zugang\" data-dismiss=\"modal\" data-bs-dismiss=\"modal\" style=\"color:#4c0000;text-decoration:underline;font-weight:700\">Request access<\/a> and you will receive your password by e-mail.<\/p>\n<!--noptimize-->\n<div class=\"weiss-konfigurator-embed\" style=\"width:100%;max-width:100%;\">\n    <iframe id=\"weiss-konf-5817\"\n            title=\"Project configurator\"\n            loading=\"lazy\"\n            style=\"width:100%;border:0;display:block;min-height:680px;\"><\/iframe>\n<\/div>\n<script>\n(function () {\n    var frame = document.getElementById(\"weiss-konf-5817\");\n    if (!frame) { return; }\n    \/\/ Widget-HTML als base64 setzen (NICHT als srcdoc-Attribut): base64 enthaelt keine\n    \/\/ HTML-Entities und ueberlebt damit jede Content-Verarbeitung (wptexturize\/Optimizer),\n    \/\/ die ein srcdoc-Attribut sonst um eine Escaping-Ebene entschaerft und das Inline-JS\n    \/\/ zerstoert. srcdoc bleibt erhalten -> gleicher Origin wie bisher, kein Verhaltenswechsel.\n    \/\/ Nur EINE base64-Ausgabe. Vorher stand derselbe rund 350 KB grosse String\n    \/\/ zweimal auf der Seite (Haupt- und Fallbackpfad) und blaehte sie unnoetig\n    \/\/ auf ueber ein Megabyte auf. 28.07.2026.\n    var b64 = \"PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImRlIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBub2ZvbGxvdyI+Cjx0aXRsZT5GaXR0aW5ncy1Lb25maWd1cmF0b3IgwrcgV2Vpc3MgQXBwYXJhdGViYXU8L3RpdGxlPgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iRWRlbHN0YWhsLUh5Z2llbmUtRml0dGluZ3MgbGl2ZSBrb25maWd1cmllcmVuOiBESU4gMzI2NzYgQ2xhbXB2ZXJiaW5kdW5nZW4gdW5kIERJTiAxMTg2NSBGaXR0aW5ncywgbWl0IG1hw59zdMOkYmxpY2hlciBaZWljaG51bmcgdW5kIHRlY2huaXNjaGVyIEFuZnJhZ2UuIj4KPCEtLSBLZWluZSBleHRlcm5lbiBSZXF1ZXN0czogbG9rYWxlIFN5c3RlbS1GYWxsYmFja3Mgc3RlaGVuIGluIHN0eWxlcy5jc3MuIC0tPgo8c3R5bGU+Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFdlaXNzIEFwcGFyYXRlYmF1IC0gRml0dGluZ3MtS29uZmlndXJhdG9yICDCtyAgc3R5bGVzLmNzcwogKiBXZWlzcy1DSSwgaGVsbC9tb2Rlcm4taW5kdXN0cmllbGwuIFRhYmxldC1oYXJ0OiBLRUlOIGJhY2tkcm9wLWZpbHRlciBhdWYKICogZml4ZWQvc3RpY2t5LCBrZWluZSBTY3JvbGwtUmV2ZWFsLCBhbGxlcyBzb2ZvcnQgc2ljaHRiYXIsIFRvdWNoID49IDQ0cHguCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgo6cm9vdHsKICAtLXJlZDojZDYwYTBhOyAtLXJlZC1kYXJrOiM0YzAwMDA7IC0tcmVkLXRpbnQ6I2ZkZWNlYzsKICAtLWluazojMWMxYzFjOyAtLW11dGVkOiM1NTU7IC0tbXV0ZWQyOiM4YThmOTY7IC0tZmFpbnQ6I2I4YmNjMjsKICAtLWxpbmU6I2U2ZThlYTsgLS1saW5lLXN0cm9uZzojZDdkYmUwOwogIC0tYmc6I2ZmZmZmZjsgLS1zb2Z0OiNmNmY3Zjg7IC0tc29mdDI6I2VlZjFmNDsgLS1zb2Z0MzojZjFmMWYxOwogIC0tb2s6IzFmN2EzZDsgLS1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMjgsMjgsMjgsLjA0KSwwIDhweCAyNHB4IC0xMnB4IHJnYmEoMjgsMjgsMjgsLjE0KTsKICAtLXNoYWRvdy1zbTowIDFweCAycHggcmdiYSgyOCwyOCwyOCwuMDYpOwogIC0tcmFkaXVzOjE0cHg7IC0tcmFkaXVzLXNtOjEwcHg7CiAgLS1mczoxNXB4OyAtLWZmOidQbHVzIEpha2FydGEgU2FucycsJ0t1bWJoIFNhbnMnLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLFNlZ29lIFVJLFJvYm90byxzYW5zLXNlcmlmOwogIC8qIFplaWNobnVuZ3MtVmFyaWFibGVuIChFbmdpbmUpICovCiAgLS13ei1ib3JlOiNmNGY2Zjg7IC0td3otZWRnZTojMWMxYzFjOyAtLXd6LWNlbnRlcjojZDYwYTBhOyAtLXd6LWRpbTojOGE4Zjk2OwogIC0td3otZGltdHh0OiNjMjA5MDk7IC0td3otaGF0Y2g6I2FhYjBiNjsgLS13ei1jbGFtcDojY2RkMmQ4OyAtLXd6LW5vdGU6IzhhOGY5NjsKICAtLXd6LWJhZGdlOiNlZWYxZjQ7IC0td3otaW5rOiMxYzFjMWM7CiAgLS13ei1zdGVlbC1hOiNmY2ZkZmU7IC0td3otc3RlZWwtYjojZWVmMWY0OyAtLXd6LXN0ZWVsLWM6I2RlZTNlODsKfQoKKntib3gtc2l6aW5nOmJvcmRlci1ib3h9Cmh0bWwsYm9keXttYXJnaW46MDtwYWRkaW5nOjB9CmJvZHl7CiAgZm9udC1mYW1pbHk6dmFyKC0tZmYpOyBmb250LXNpemU6dmFyKC0tZnMpOyBjb2xvcjp2YXIoLS1pbmspOwogIGJhY2tncm91bmQ6dmFyKC0tYmcpOyBsaW5lLWhlaWdodDoxLjU7CiAgLXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDsgdGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5Owp9CmgxLGgyLGgzLGg0e21hcmdpbjowOyBmb250LXdlaWdodDo3MDA7IGxldHRlci1zcGFjaW5nOi0uMDFlbTsgbGluZS1oZWlnaHQ6MS4yfQpidXR0b257Zm9udC1mYW1pbHk6aW5oZXJpdDsgY3Vyc29yOnBvaW50ZXJ9Ci5tb25ve2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtczsgZm9udC1mZWF0dXJlLXNldHRpbmdzOiJ0bnVtIiAxfQouaWN7d2lkdGg6MThweDsgaGVpZ2h0OjE4cHg7IGZsZXg6MCAwIGF1dG87IHZlcnRpY2FsLWFsaWduOm1pZGRsZX0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmFobWVuICovCi5hcHB7bWF4LXdpZHRoOjEyODBweDsgbWFyZ2luOjAgYXV0bzsgcGFkZGluZzowIDIwcHggMjZweH0KCi50b3BiYXJ7CiAgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOyBnYXA6MTJweDsKICBwYWRkaW5nOjEycHggMnB4IDEwcHg7Cn0KLmJyYW5ke2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6MTFweH0KLmJyYW5kIC5tYXJre3dpZHRoOjlweDsgaGVpZ2h0OjMwcHg7IGJhY2tncm91bmQ6dmFyKC0tcmVkKTsgYm9yZGVyLXJhZGl1czoycHh9Ci5icmFuZCAubntmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxOHB4OyBsZXR0ZXItc3BhY2luZzouMDRlbX0KLmJyYW5kIC5ze2Rpc3BsYXk6YmxvY2s7IGZvbnQtc2l6ZTo5LjVweDsgZm9udC13ZWlnaHQ6NzAwOyBsZXR0ZXItc3BhY2luZzouMTRlbTsKICBjb2xvcjp2YXIoLS1tdXRlZDIpOyB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IG1hcmdpbi10b3A6MXB4fQovKiAyMi4wOS4yMDI2LCBXdW5zY2ggQmVybmQgTGlua2VyOiBkaWUgUHJlaXNncnVwcGUgbXVzcyBhdWYgZGVuIGVyc3RlbiBCbGljayBsZXNiYXIgc2Vpbi4KICAgVm9yaGVyIDEyIHB4IGdyYXUgaW4gZWluZXIgWmVpbGUgbWl0IGRlbSBOb3JtaGlud2VpcywgamV0enQgYWxzIEV0aWtldHQgaW4gSGF1c3JvdC4gKi8KLnRvcGJhciAuaGludHtmb250LXNpemU6MTNweDsgY29sb3I6dmFyKC0tbXV0ZWQyKTsgbGluZS1oZWlnaHQ6MS43fQoudG9wYmFyIC5oaW50IGJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7IGNvbG9yOiNmZmY7IGJhY2tncm91bmQ6dmFyKC0tcmVkKTsgcGFkZGluZzozcHggOXB4OwogIGJvcmRlci1yYWRpdXM6M3B4OyBmb250LXNpemU6MTJweDsgZm9udC13ZWlnaHQ6ODAwOyBsZXR0ZXItc3BhY2luZzouMDVlbTsKICB0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7IG1hcmdpbi1yaWdodDo1cHh9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvcnRzY2hyaXR0ICovCi5wcm9ncmVzc3tkaXNwbGF5OmZsZXg7IGdhcDo2cHg7IG92ZXJmbG93LXg6YXV0bzsgcGFkZGluZzoycHggMnB4IDEycHg7IHNjcm9sbGJhci13aWR0aDp0aGlufQoucHN0ZXB7CiAgZmxleDowIDAgYXV0bzsgZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDo4cHg7CiAgcGFkZGluZzo4cHggMTJweDsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czo5OTlweDsKICBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgY29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXNpemU6MTIuNXB4OyBmb250LXdlaWdodDo2MDA7CiAgbWluLWhlaWdodDo0NHB4OyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xOHMsIGNvbG9yIC4xOHMsIGJhY2tncm91bmQgLjE4czsKfQoucHN0ZXAgLm51bXsKICB3aWR0aDoyMHB4OyBoZWlnaHQ6MjBweDsgYm9yZGVyLXJhZGl1czo1MCU7IGRpc3BsYXk6Z3JpZDsgcGxhY2UtaXRlbXM6Y2VudGVyOwogIGJhY2tncm91bmQ6dmFyKC0tc29mdDIpOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxMXB4OyBmb250LXdlaWdodDo3MDA7Cn0KLnBzdGVwLmRvbmV7Y29sb3I6dmFyKC0taW5rKX0gLnBzdGVwLmRvbmUgLm51bXtiYWNrZ3JvdW5kOnZhcigtLWluayk7IGNvbG9yOiNmZmZ9Ci5wc3RlcC5hY3RpdmV7Ym9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGNvbG9yOnZhcigtLXJlZC1kYXJrKTsgYmFja2dyb3VuZDp2YXIoLS1yZWQtdGludCl9Ci5wc3RlcC5hY3RpdmUgLm51bXtiYWNrZ3JvdW5kOnZhcigtLXJlZCk7IGNvbG9yOiNmZmZ9Ci5wc3RlcFtkaXNhYmxlZF17b3BhY2l0eTouNTU7IGN1cnNvcjpub3QtYWxsb3dlZH0KLnBzdGVwOm5vdChbZGlzYWJsZWRdKXtjdXJzb3I6cG9pbnRlcn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3JpZCAqLwoubGF5b3V0e2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjEuMDVmciAuOTVmcjsgZ2FwOjMwcHg7IGFsaWduLWl0ZW1zOnN0YXJ0fQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGFuZWwgKi8KLnBhbmVse21pbi13aWR0aDowfQouc3RlcC1oZWFke21hcmdpbjoycHggMCA0cHh9Ci5zdGVwLWhlYWQtdG9we2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsgZ2FwOjEycHh9Ci5raWNrZXJ7Zm9udC1zaXplOjExLjVweDsgZm9udC13ZWlnaHQ6NzAwOyBsZXR0ZXItc3BhY2luZzouMTJlbTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBjb2xvcjp2YXIoLS1yZWQpfQovKiBadXJ1ZWNrc2V0emVuLUJ1dHRvbiAoQTUpOiBQaWxsZSByZWNodHMgbmViZW4gZGVtIFNjaHJpdHQtS2lja2VyLCBpbiBqZWRlbSBTY2hyaXR0LgogICBTY2hhcmYgZ2VzY2hhbHRldCAoLmFybWVkKSB3aXJkIGVyIHJvdCAtIGRlciB6d2VpdGUgS2xpY2sgc2V0enQgd2lya2xpY2ggenVydWVjay4gKi8KLnJlc2V0YnRue2ZsZXg6MCAwIGF1dG87IGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjdweDsKICBtaW4taGVpZ2h0OjQ0cHg7IHBhZGRpbmc6MCAxNHB4OyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpOyBib3JkZXItcmFkaXVzOjk5OXB4OwogIGJhY2tncm91bmQ6dmFyKC0tYmcpOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZToxMi41cHg7IGZvbnQtd2VpZ2h0OjcwMDsKICB3aGl0ZS1zcGFjZTpub3dyYXA7IHRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xOHMsIGNvbG9yIC4xOHMsIGJhY2tncm91bmQgLjE4c30KLnJlc2V0YnRuOmhvdmVyOm5vdChbZGlzYWJsZWRdKXtib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgY29sb3I6dmFyKC0tcmVkKTsgYmFja2dyb3VuZDp2YXIoLS1yZWQtdGludCl9Ci5yZXNldGJ0bjphY3RpdmU6bm90KFtkaXNhYmxlZF0pe3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci5yZXNldGJ0bltkaXNhYmxlZF17Y29sb3I6dmFyKC0tZmFpbnQpOyBjdXJzb3I6bm90LWFsbG93ZWR9Ci5yZXNldGJ0bi5hcm1lZHtib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgYmFja2dyb3VuZDp2YXIoLS1yZWQpOyBjb2xvcjojZmZmfQoucmVzZXRidG4gLmlje3dpZHRoOjE1cHg7IGhlaWdodDoxNXB4fQouc3RlcC1oZWFkIGgye2ZvbnQtc2l6ZToyM3B4OyBtYXJnaW4tdG9wOjZweH0KLnN0ZXAtaGVhZCBwe2NvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luOjdweCAwIDA7IG1heC13aWR0aDo1MmNoOyBmb250LXNpemU6MTRweH0KCi8qIEthY2hlbC1HcmlkIChBbndlbmR1bmcsIE5vcm0sIFR5cCkgKi8KLnRpbGVze2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDoxMnB4OyBtYXJnaW4tdG9wOjE2cHh9Ci50aWxlewogIHRleHQtYWxpZ246bGVmdDsgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsKICBib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7IHBhZGRpbmc6MTZweCAxNnB4IDE1cHg7IG1pbi1oZWlnaHQ6OTZweDsKICBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgZ2FwOjZweDsgY29sb3I6dmFyKC0taW5rKTsKICB0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMThzLCBib3gtc2hhZG93IC4xOHMsIHRyYW5zZm9ybSAuMTJzOwp9Ci50aWxlOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1saW5lLXN0cm9uZyk7IGJveC1zaGFkb3c6dmFyKC0tc2hhZG93LXNtKX0KLnRpbGU6YWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci50aWxlLnNlbHtib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgYm94LXNoYWRvdzowIDAgMCAzcHggdmFyKC0tcmVkLXRpbnQpfQoudGlsZSAuaWN7d2lkdGg6MzBweDsgaGVpZ2h0OjMwcHg7IGNvbG9yOnZhcigtLXJlZCl9Ci50aWxlIC50e2ZvbnQtd2VpZ2h0OjcwMDsgZm9udC1zaXplOjE1LjVweH0KLnRpbGUgLmR7Y29sb3I6dmFyKC0tbXV0ZWQpOyBmb250LXNpemU6MTIuNXB4OyBsaW5lLWhlaWdodDoxLjM1fQoudGlsZSAuYmFkZ2V7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0OyBtYXJnaW4tdG9wOjJweDsgZm9udC1zaXplOjEwLjVweDsgZm9udC13ZWlnaHQ6NzAwOwogIHBhZGRpbmc6MnB4IDhweDsgYm9yZGVyLXJhZGl1czo5OTlweDsgbGV0dGVyLXNwYWNpbmc6LjAyZW19Ci50aWxlIC5iYWRnZS5saXZle2JhY2tncm91bmQ6I2U5ZjZlZTsgY29sb3I6dmFyKC0tb2spfQoudGlsZSAuYmFkZ2UuYW5mcmFnZXtiYWNrZ3JvdW5kOnZhcigtLXNvZnQzKTsgY29sb3I6dmFyKC0tbXV0ZWQpfQoKLyogT3B0aW9ucy1SZWloZSAoV2Vya3N0b2ZmL09iZXJmbGFlY2hlL0RpY2h0dW5nL05hY2h3ZWlzZSkgKi8KLm9wdHN7ZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjEwcHg7IG1hcmdpbi10b3A6MTRweH0KLm9wdHsKICBmbGV4OjEgMSAxODBweDsgdGV4dC1hbGlnbjpsZWZ0OyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgYm9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWxpbmUpOwogIGJvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTsgcGFkZGluZzoxMnB4IDE0cHg7IG1pbi1oZWlnaHQ6NTZweDsgY29sb3I6dmFyKC0taW5rKTsKICBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsgZ2FwOjJweDsgdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjE4cywgYm94LXNoYWRvdyAuMThzLCB0cmFuc2Zvcm0gLjEyczsKfQoub3B0OmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1saW5lLXN0cm9uZyl9Ci5vcHQ6YWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci5vcHQuc2Vse2JvcmRlci1jb2xvcjp2YXIoLS1yZWQpOyBib3gtc2hhZG93OjAgMCAwIDNweCB2YXIoLS1yZWQtdGludCl9Ci5vcHQuZGlzYWJsZWR7b3BhY2l0eTouNDI7IGN1cnNvcjpub3QtYWxsb3dlZDsgYmFja2dyb3VuZDp2YXIoLS1zb2Z0KX0KLm9wdCAudHtmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxNC41cHg7IGRpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6N3B4fQoub3B0IC5ke2NvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEycHg7IGxpbmUtaGVpZ2h0OjEuMzV9Ci5vcHQgLmZsYWd7Zm9udC1zaXplOjEwcHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tcmVkKTsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1yZWQpOwogIGJvcmRlci1yYWRpdXM6NXB4OyBwYWRkaW5nOjAgNXB4OyBtYXJnaW4tbGVmdDphdXRvfQoub3B0IC5sb2Nre2ZvbnQtc2l6ZToxMXB4OyBjb2xvcjp2YXIoLS1tdXRlZDIpfQoKLmZpZWxkLWxhYmVse2ZvbnQtc2l6ZToxMi41cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW46MTZweCAwIDdweDsgZGlzcGxheTpibG9ja30KCi8qIEdyb2Vzc2VuLVNlbGVjdCArIFNlZ21lbnRlZCAqLwoucm93MntkaXNwbGF5OmdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyOyBnYXA6MTRweH0KLyogQmVybmQgMjcuMDcuMjAyNiAoRGljaHR1bmdlbik6IFN0ZWh0IGluIGRlciBaZWlsZSBudXIgRUlOIEZlbGQgLSB6LiBCLiBkaWUKICogTmVubndlaXRlIGJlaSBEaWNodHVuZywgQmxpbmRkZWNrZWwgb2RlciBLbGFtbWVyIC0sIGJsaWViIGVzIHRyb3R6ZGVtIGF1ZiBkZXIKICogaGFsYmVuIEJyZWl0ZSBzdGVoZW4gdW5kIHNjaG5pdHQgbGFuZ2UgRWludHJhZWdlIGFiICgiRE4yMDAgwrcg4oyAIDIwNCDDlyAyIG1tIMK3CiAqIEtsZW1tLeKMgCAy4oCmIikuIEVpbiBlaW56ZWxuZXMgRmVsZCBuaW1tdCBqZXR6dCBkaWUgdm9sbGUgWmVpbGVuYnJlaXRlLiAqLwoucm93MiA+IDpvbmx5LWNoaWxke2dyaWQtY29sdW1uOjEgLyAtMX0KLnNlbGVjdC13cmFwe3Bvc2l0aW9uOnJlbGF0aXZlfQpzZWxlY3Quc3p7CiAgd2lkdGg6MTAwJTsgbWluLWhlaWdodDo0OHB4OyBwYWRkaW5nOjEycHggNDBweCAxMnB4IDE0cHg7IGZvbnQtc2l6ZToxNXB4OyBmb250LWZhbWlseTppbmhlcml0OwogIGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pOyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsKICBjb2xvcjp2YXIoLS1pbmspOyBhcHBlYXJhbmNlOm5vbmU7IGN1cnNvcjpwb2ludGVyOwp9CnNlbGVjdC5zejpmb2N1c3tvdXRsaW5lOm5vbmU7IGJvcmRlci1jb2xvcjp2YXIoLS1yZWQpOyBib3gtc2hhZG93OjAgMCAwIDNweCB2YXIoLS1yZWQtdGludCl9Ci5zZWxlY3Qtd3JhcDo6YWZ0ZXJ7Y29udGVudDoiIjsgcG9zaXRpb246YWJzb2x1dGU7IHJpZ2h0OjE1cHg7IHRvcDo1MCU7IHdpZHRoOjlweDsgaGVpZ2h0OjlweDsKICBib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHZhcigtLW11dGVkMik7IGJvcmRlci1ib3R0b206MnB4IHNvbGlkIHZhcigtLW11dGVkMik7CiAgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTcwJSkgcm90YXRlKDQ1ZGVnKTsgcG9pbnRlci1ldmVudHM6bm9uZX0KCi5zZWd7ZGlzcGxheTppbmxpbmUtZmxleDsgYm9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWxpbmUpOyBib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7IG92ZXJmbG93OmhpZGRlbjsgZmxleC13cmFwOndyYXB9Ci5zZWcgYnV0dG9ue2JhY2tncm91bmQ6dmFyKC0tYmcpOyBib3JkZXI6bm9uZTsgcGFkZGluZzoxMXB4IDE2cHg7IG1pbi1oZWlnaHQ6NDZweDsgZm9udC1zaXplOjEzLjVweDsKICBmb250LXdlaWdodDo2MDA7IGNvbG9yOnZhcigtLW11dGVkKTsgYm9yZGVyLXJpZ2h0OjEuNXB4IHNvbGlkIHZhcigtLWxpbmUpfQouc2VnIGJ1dHRvbjpsYXN0LWNoaWxke2JvcmRlci1yaWdodDpub25lfQouc2VnIGJ1dHRvbi5zZWx7YmFja2dyb3VuZDp2YXIoLS1yZWQpOyBjb2xvcjojZmZmfQoKLyogU3RlcHBlciAoTWVuZ2UpICovCi5zdGVwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOnN0cmV0Y2g7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pOyBvdmVyZmxvdzpoaWRkZW59Ci5zdGVwcGVyIGJ1dHRvbnt3aWR0aDo0OHB4OyBtaW4taGVpZ2h0OjQ4cHg7IGZvbnQtc2l6ZToyMHB4OyBiYWNrZ3JvdW5kOnZhcigtLXNvZnQpOyBib3JkZXI6bm9uZTsgY29sb3I6dmFyKC0taW5rKX0KLnN0ZXBwZXIgYnV0dG9uOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLXNvZnQyKX0KLnN0ZXBwZXIgaW5wdXR7d2lkdGg6NzRweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlcjpub25lOyBib3JkZXItbGVmdDoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsKICBib3JkZXItcmlnaHQ6MS41cHggc29saWQgdmFyKC0tbGluZSk7IGZvbnQtc2l6ZToxNnB4OyBmb250LWZhbWlseTppbmhlcml0OyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Ci5zdGVwcGVyIGlucHV0OmZvY3Vze291dGxpbmU6bm9uZX0KLnN0YWZmZWx7ZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjdweDsgbWFyZ2luLXRvcDoxMnB4fQouc3RhZmZlbCAuc3tmb250LXNpemU6MTEuNXB4OyBwYWRkaW5nOjVweCAxMHB4OyBib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpOyBib3JkZXItcmFkaXVzOjk5OXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGN1cnNvcjpwb2ludGVyfQouc3RhZmZlbCAucy5vbntib3JkZXItY29sb3I6dmFyKC0tcmVkKTsgY29sb3I6dmFyKC0tcmVkLWRhcmspOyBiYWNrZ3JvdW5kOnZhcigtLXJlZC10aW50KTsgZm9udC13ZWlnaHQ6NzAwfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWb3JzY2hhdSAqLwoucHJldmlld3twb3NpdGlvbjpzdGlja3k7IHRvcDoxNHB4OyBhbGlnbi1zZWxmOnN0YXJ0fQoucHYtY2FyZHtiYWNrZ3JvdW5kOnZhcigtLWJnKTsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpOwogIGJveC1zaGFkb3c6dmFyKC0tc2hhZG93KTsgb3ZlcmZsb3c6aGlkZGVufQoucHYtaGVhZHtkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGdhcDoxMHB4OwogIHBhZGRpbmc6MTBweCAxNHB4IDhweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSl9Ci5wdi1oZWFkIC5sYmx7Zm9udC1zaXplOjExcHg7IGZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6LjFlbTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBjb2xvcjp2YXIoLS1tdXRlZDIpfQoucHYtdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZsZXg7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czo5OTlweDsgb3ZlcmZsb3c6aGlkZGVufQoucHYtdG9nZ2xlIGJ1dHRvbntib3JkZXI6bm9uZTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGNvbG9yOnZhcigtLW11dGVkKTsgZm9udC1zaXplOjEyLjVweDsgZm9udC13ZWlnaHQ6NzAwOwogIHBhZGRpbmc6OHB4IDE0cHg7IG1pbi1oZWlnaHQ6NDRweDsgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6NnB4fQoucHYtdG9nZ2xlIGJ1dHRvbiArIGJ1dHRvbntib3JkZXItbGVmdDoxLjVweCBzb2xpZCB2YXIoLS1saW5lKX0KLnB2LXRvZ2dsZSBidXR0b24uc2Vse2JhY2tncm91bmQ6dmFyKC0taW5rKTsgY29sb3I6I2ZmZn0KLnB2LXRvZ2dsZSBidXR0b246YWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci5wdi1zdGFnZXtwb3NpdGlvbjpyZWxhdGl2ZTsgYmFja2dyb3VuZDoKICByYWRpYWwtZ3JhZGllbnQoMTIwJSAxMDAlIGF0IDUwJSAwJSwgI2ZiZmNmZCAwJSwgI2YzZjVmNyAxMDAlKTsgcGFkZGluZzo2cHh9Ci5wdi1zdGFnZSAuZHJhd3t3aWR0aDoxMDAlOyBoZWlnaHQ6YXV0bzsgbWF4LWhlaWdodDozMjBweDsgZGlzcGxheTpibG9jazsgbWFyZ2luOjAgYXV0bzsgb3BhY2l0eToxOyB0cmFuc2l0aW9uOm9wYWNpdHkgLjE4cyBlYXNlfQoucHYtc3RhZ2Uuc3dhcCAuZHJhd3tvcGFjaXR5OjB9Ci5wdi1lbXB0eXtkaXNwbGF5OmdyaWQ7IHBsYWNlLWl0ZW1zOmNlbnRlcjsgdGV4dC1hbGlnbjpjZW50ZXI7IGNvbG9yOnZhcigtLW11dGVkMik7CiAgbWluLWhlaWdodDoyMzBweDsgcGFkZGluZzoyNHB4OyBmb250LXNpemU6MTMuNXB4fQoucHYtZW1wdHkgLmlje3dpZHRoOjQ0cHg7IGhlaWdodDo0NHB4OyBtYXJnaW46MCBhdXRvIDEwcHg7IGNvbG9yOnZhcigtLWZhaW50KX0KCi5wdi10eXBlY29kZXtkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEwcHg7IHBhZGRpbmc6MTJweCAxNHB4OyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKX0KLnB2LXR5cGVjb2RlIC5sYmx7Zm9udC1zaXplOjExcHg7IGZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6LjFlbTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlOyBjb2xvcjp2YXIoLS1tdXRlZDIpfQoucHYtdHlwZWNvZGUgLmNvZGV7Zm9udC1mYW1pbHk6J0t1bWJoIFNhbnMnLHVpLW1vbm9zcGFjZSxtb25vc3BhY2U7IGZvbnQtd2VpZ2h0OjcwMDsgZm9udC1zaXplOjE0cHg7CiAgbGV0dGVyLXNwYWNpbmc6LjAxZW07IGNvbG9yOnZhcigtLWluayk7IHdvcmQtYnJlYWs6bm9ybWFsOyBvdmVyZmxvdy13cmFwOmFueXdoZXJlfQoucHYtdHlwZWNvZGUgLmNvcHl7bWFyZ2luLWxlZnQ6YXV0bzsgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGJvcmRlci1yYWRpdXM6OHB4OwogIG1pbi1oZWlnaHQ6NDRweDsgbWluLXdpZHRoOjQ0cHg7IHBhZGRpbmc6MCAxMHB4OyBmb250LXNpemU6MTJweDsgZm9udC13ZWlnaHQ6NjAwOyBjb2xvcjp2YXIoLS1tdXRlZCk7IGRpc3BsYXk6aW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjZweH0KLnB2LXR5cGVjb2RlIC5jb3B5OmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLXNvZnQpfQoucHYtdHlwZWNvZGUgLmNvcHkub2t7Y29sb3I6dmFyKC0tb2spOyBib3JkZXItY29sb3I6I2JmZTJjY30KCi5wdi1wcmljZXtkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmZsZXgtZW5kOyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjsgZ2FwOjEycHg7IHBhZGRpbmc6MTJweCAxNHB4OyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1zb2Z0KX0KLnB2LXByaWNlIC5hbXR7Zm9udC1zaXplOjMwcHg7IGZvbnQtd2VpZ2h0OjgwMDsgbGV0dGVyLXNwYWNpbmc6LS4wMmVtOyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7IGxpbmUtaGVpZ2h0OjF9Ci5wdi1wcmljZSAuYW10IC5jdXJ7Zm9udC1zaXplOjE4cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tbGVmdDozcHh9Ci5wdi1wcmljZSAuc3Vie2ZvbnQtc2l6ZToxMS41cHg7IGNvbG9yOnZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDo1cHh9Ci5wdi1wcmljZSAuZmxhZ3tkaXNwbGF5OmlubGluZS1ibG9jazsgbWFyZ2luLXRvcDo2cHg7IGZvbnQtc2l6ZToxMC41cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tcmVkKTsKICBiYWNrZ3JvdW5kOnZhcigtLXJlZC10aW50KTsgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6MnB4IDdweH0KLnB2LXByaWNlLmFuZnJhZ2UgLmFtdHtmb250LXNpemU6MjJweDsgY29sb3I6dmFyKC0tcmVkLWRhcmspfQoucHYtcHJpY2UgLnRvdGFse3RleHQtYWxpZ246cmlnaHR9Ci5wdi1wcmljZSAudG90YWwgLnR7Zm9udC1zaXplOjExcHg7IGNvbG9yOnZhcigtLW11dGVkMik7IHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6LjA4ZW07IGZvbnQtd2VpZ2h0OjcwMH0KLnB2LXByaWNlIC50b3RhbCAudntmb250LXNpemU6MThweDsgZm9udC13ZWlnaHQ6ODAwOyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9CgoucHYtY2hpcHN7ZGlzcGxheTpmbGV4OyBmbGV4LXdyYXA6d3JhcDsgZ2FwOjZweDsgcGFkZGluZzoxMnB4IDE0cHg7IGJvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpfQouY2hpcHtmb250LXNpemU6MTEuNXB4OyBwYWRkaW5nOjVweCAxMHB4OyBib3JkZXItcmFkaXVzOjk5OXB4OyBiYWNrZ3JvdW5kOnZhcigtLXNvZnQyKTsgY29sb3I6dmFyKC0taW5rKTsgZm9udC13ZWlnaHQ6NjAwfQouY2hpcCBie2NvbG9yOnZhcigtLW11dGVkMik7IGZvbnQtd2VpZ2h0OjcwMDsgbWFyZ2luLXJpZ2h0OjRweH0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWN0aW9uYmFyICovCi5uYXZ7ZGlzcGxheTpmbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDoxMnB4OyBtYXJnaW4tdG9wOjE2cHh9Ci5idG57bWluLWhlaWdodDo1MnB4OyBwYWRkaW5nOjAgMjJweDsgYm9yZGVyLXJhZGl1czoxMnB4OyBmb250LXNpemU6MTVweDsgZm9udC13ZWlnaHQ6NzAwOwogIGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7IGNvbG9yOnZhcigtLWluayk7CiAgZGlzcGxheTppbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6OHB4OyB0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTJzLCBib3gtc2hhZG93IC4xOHMsIGJhY2tncm91bmQgLjE4c30KLmJ0bjphY3RpdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KX0KLmJ0bi5wcmltYXJ5e2JhY2tncm91bmQ6dmFyKC0tcmVkKTsgYm9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGNvbG9yOiNmZmY7IGJveC1zaGFkb3c6MCA4cHggMjBweCAtMTBweCByZ2JhKDIxNCwxMCwxMCwuNil9Ci5idG4ucHJpbWFyeTpob3ZlcntiYWNrZ3JvdW5kOiNjMDA5MDl9Ci5idG4ucHJpbWFyeVtkaXNhYmxlZF17YmFja2dyb3VuZDp2YXIoLS1mYWludCk7IGJvcmRlci1jb2xvcjp2YXIoLS1mYWludCk7IGJveC1zaGFkb3c6bm9uZTsgY3Vyc29yOm5vdC1hbGxvd2VkfQouYnRuLmdob3N0e2NvbG9yOnZhcigtLW11dGVkKX0KLmJ0bi53aWRle2ZsZXg6MTsganVzdGlmeS1jb250ZW50OmNlbnRlcn0KLmJ0biAuaWN7d2lkdGg6MThweDsgaGVpZ2h0OjE4cHh9CgovKiBXYXJlbmtvcmIgLyBQb3NpdGlvbmVuICovCi5jYXJ0e2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7IGJvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTsgbWFyZ2luLXRvcDoxNnB4OyBvdmVyZmxvdzpoaWRkZW59Ci5jYXJ0IC5jaXtkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEycHg7IHBhZGRpbmc6MTJweCAxNHB4OyBib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKX0KLmNhcnQgLmNpOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25lfQouY2FydCAuY2kgLmNvZGV7Zm9udC1mYW1pbHk6J0t1bWJoIFNhbnMnLG1vbm9zcGFjZTsgZm9udC13ZWlnaHQ6NzAwOyBmb250LXNpemU6MTNweH0KLmNhcnQgLmNpIC5tZXRhe2ZvbnQtc2l6ZToxMnB4OyBjb2xvcjp2YXIoLS1tdXRlZCl9Ci5jYXJ0IC5jaSAucHJ7bWFyZ2luLWxlZnQ6YXV0bzsgZm9udC13ZWlnaHQ6NzAwOyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9Ci5jYXJ0IC5jaSAuZGVse2JvcmRlcjpub25lOyBiYWNrZ3JvdW5kOm5vbmU7IGNvbG9yOnZhcigtLW11dGVkMik7IGZvbnQtc2l6ZToxOHB4OyBwYWRkaW5nOjZweDsgbWluLWhlaWdodDo0MHB4OyBtaW4td2lkdGg6NDBweH0KLmNhcnQgLmNpIC5kZWw6aG92ZXJ7Y29sb3I6dmFyKC0tcmVkKX0KLmNhcnQgLnN1bXtiYWNrZ3JvdW5kOnZhcigtLXNvZnQpOyBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1saW5lLXN0cm9uZyl9Ci5jYXJ0IC5zcntkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEycHg7IHBhZGRpbmc6MTFweCAxNHB4fQouY2FydCAuc3Iub3Blbntmb250LXNpemU6MTIuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfQouY2FydCAuc3Iub3BlbiAuaWN7d2lkdGg6MTZweDsgaGVpZ2h0OjE2cHg7IGZsZXg6MCAwIGF1dG99Ci5jYXJ0IC5zci50b3QgLnR7Zm9udC13ZWlnaHQ6ODAwOyBmb250LXNpemU6MTVweH0KLmNhcnQgLnNyLnRvdCAuc3tmb250LXNpemU6MTJweDsgY29sb3I6dmFyKC0tbXV0ZWQpfQouY2FydCAuc3IudG90IC52e21hcmdpbi1sZWZ0OmF1dG87IGZvbnQtd2VpZ2h0OjgwMDsgZm9udC1zaXplOjE4cHg7IGZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtczsgd2hpdGUtc3BhY2U6bm93cmFwfQoubGlua2J0bntiYWNrZ3JvdW5kOm5vbmU7IGJvcmRlcjpub25lOyBjb2xvcjp2YXIoLS1yZWQpOyBmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxMy41cHg7IHBhZGRpbmc6MTBweCAycHg7IG1pbi1oZWlnaHQ6NDRweH0KCi8qIEZvcm11bGFyIChSRlEpICovCi5mb3Jte2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDoxNHB4OyBtYXJnaW4tdG9wOjE4cHh9Ci5mb3JtIC5mbGR7ZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGdhcDo2cHh9Ci5mb3JtIC5mbGQuZnVsbHtncmlkLWNvbHVtbjoxIC8gLTF9Ci5mb3JtIGxhYmVse2ZvbnQtc2l6ZToxMi41cHg7IGZvbnQtd2VpZ2h0OjcwMDsgY29sb3I6dmFyKC0tbXV0ZWQpfQouZm9ybSBsYWJlbCAucmVxe2NvbG9yOnZhcigtLXJlZCl9Ci5mb3JtIGlucHV0LC5mb3JtIHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7IGZvbnQtc2l6ZToxNXB4OyBwYWRkaW5nOjEycHggMTRweDsgbWluLWhlaWdodDo0OHB4OwogIGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pOyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgY29sb3I6dmFyKC0taW5rKX0KLmZvcm0gdGV4dGFyZWF7bWluLWhlaWdodDo4NHB4OyByZXNpemU6dmVydGljYWx9Ci5mb3JtIGlucHV0OmZvY3VzLC5mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6bm9uZTsgYm9yZGVyLWNvbG9yOnZhcigtLXJlZCk7IGJveC1zaGFkb3c6MCAwIDAgM3B4IHZhcigtLXJlZC10aW50KX0KLmZvcm0gLmVycntib3JkZXItY29sb3I6dmFyKC0tcmVkKSFpbXBvcnRhbnR9Ci5mb3JtIC5lcnJtc2d7Zm9udC1zaXplOjEycHg7IGNvbG9yOnZhcigtLXJlZCl9Ci5oZWxwZXJ7Zm9udC1zaXplOjEyLjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOyBtYXJnaW4tdG9wOjEycHg7IGxpbmUtaGVpZ2h0OjEuNX0KCi5ub3RlLXBsaHtkaXNwbGF5OmZsZXg7IGdhcDo5cHg7IGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7IG1hcmdpbi10b3A6MThweDsgcGFkZGluZzoxMnB4IDE0cHg7CiAgYmFja2dyb3VuZDp2YXIoLS1yZWQtdGludCk7IGJvcmRlcjoxcHggc29saWQgI2YzYzljOTsgYm9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pOyBmb250LXNpemU6MTIuNXB4OyBjb2xvcjp2YXIoLS1yZWQtZGFyayl9Ci5ub3RlLXBsaCAuaWN7d2lkdGg6MThweDsgaGVpZ2h0OjE4cHg7IGZsZXg6MCAwIGF1dG87IG1hcmdpbi10b3A6MXB4fQoubm90ZS1va3tkaXNwbGF5OmZsZXg7IGdhcDo5cHg7IGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7IG1hcmdpbi10b3A6MTZweDsgcGFkZGluZzoxMnB4IDE0cHg7CiAgYmFja2dyb3VuZDojZjFmNmYyOyBib3JkZXI6MXB4IHNvbGlkICNjZmU2ZDY7IGJvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLXNtKTsgZm9udC1zaXplOjEyLjVweDsgY29sb3I6IzI0NWMzN30KLm5vdGUtb2sgLmlje3dpZHRoOjE4cHg7IGhlaWdodDoxOHB4OyBmbGV4OjAgMCBhdXRvOyBtYXJnaW4tdG9wOjFweDsgY29sb3I6IzJmOGE0ZX0KCi8qIFZvcnNjaGF1LUtvcGY6IFRvZ2dsZSArIFZvbGxiaWxkICovCi5wdi1hY3Rpb25ze2Rpc3BsYXk6ZmxleDsgYWxpZ24taXRlbXM6Y2VudGVyOyBnYXA6OHB4fQoucHYtZnNidG57Ym9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWxpbmUpOyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgYm9yZGVyLXJhZGl1czo5OTlweDsKICBtaW4taGVpZ2h0OjQ0cHg7IG1pbi13aWR0aDo0NHB4OyBkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IGNvbG9yOnZhcigtLW11dGVkKX0KLnB2LWZzYnRuOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1saW5lLXN0cm9uZyk7IGNvbG9yOnZhcigtLWluayl9Ci5wdi1mc2J0bjphY3RpdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KX0KCi8qIEJlaXNwaWVsLVZvcnNjaGF1IChTY2hyaXR0IDEtMikgKi8KLnB2LXNhbXBsZXtwb3NpdGlvbjpyZWxhdGl2ZX0KLnB2LXNhbXBsZT5zdmd7b3BhY2l0eTouNDJ9Ci5wdi1zYW1wbGUtaGludHtwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDoxMnB4OyByaWdodDoxMnB4OyBib3R0b206MTJweDsgYmFja2dyb3VuZDp2YXIoLS1iZyk7CiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czoxMHB4OyBwYWRkaW5nOjEwcHggMTJweDsgZm9udC1zaXplOjEyLjVweDsKICBjb2xvcjp2YXIoLS1tdXRlZCk7IGRpc3BsYXk6ZmxleDsgZ2FwOjlweDsgYWxpZ24taXRlbXM6ZmxleC1zdGFydDsgYm94LXNoYWRvdzp2YXIoLS1zaGFkb3ctc20pfQoucHYtc2FtcGxlLWhpbnQgLmlje21hcmdpbi10b3A6MXB4OyBjb2xvcjp2YXIoLS1yZWQpfQoucHYtc2FtcGxlLWhpbnQgYntjb2xvcjp2YXIoLS1pbmspfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZvbGxiaWxkICsgWm9vbSAqLwoud3otZnN7cG9zaXRpb246Zml4ZWQ7IGluc2V0OjA7IHotaW5kZXg6MTAwMDsgYmFja2dyb3VuZDojZjRmNmY4OyBkaXNwbGF5OmZsZXg7IGZsZXgtZGlyZWN0aW9uOmNvbHVtbn0KLnd6LWZzW2hpZGRlbl17ZGlzcGxheTpub25lfSAgIC8qIG11c3MgZGFzIGRpc3BsYXk6ZmxleCBvYmVuIHNjaGxhZ2VuLCBzb25zdCBzY2hsaWVzc3QgRVNDL1ggbmljaHQgKi8KLmZzLWJhcntkaXNwbGF5OmZsZXg7IGFsaWduLWl0ZW1zOmNlbnRlcjsgZ2FwOjEycHg7IHBhZGRpbmc6MTBweCAxNHB4OyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsKICBib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgZmxleC13cmFwOndyYXB9Ci5mcy1jb2Rle2ZvbnQtZmFtaWx5OidLdW1iaCBTYW5zJyx1aS1tb25vc3BhY2UsbW9ub3NwYWNlOyBmb250LXdlaWdodDo3MDA7IGZvbnQtc2l6ZToxNHB4OyBvdmVyZmxvdy13cmFwOmFueXdoZXJlfQouZnMtaGludHtmb250LXNpemU6MTEuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZDIpOyBtYXJnaW4tbGVmdDphdXRvfQpAbWVkaWEgKG1heC13aWR0aDo5ODBweCl7IC5mcy1oaW50e2Rpc3BsYXk6bm9uZX0gfQouZnMtem9vbXtkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGdhcDo1cHg7IG1hcmdpbi1sZWZ0OmF1dG99Ci5mcy1oaW50ICsgLmZzLXpvb217bWFyZ2luLWxlZnQ6MTRweH0KLmZzLXpvb20gYnV0dG9ue21pbi13aWR0aDo0MnB4OyBtaW4taGVpZ2h0OjQycHg7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7CiAgYm9yZGVyLXJhZGl1czoxMHB4OyBmb250LXNpemU6MTVweDsgZm9udC13ZWlnaHQ6NzAwOyBjb2xvcjp2YXIoLS1pbmspfQouZnMtem9vbSBidXR0b246YWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9Ci5mcy16b29tIHNwYW57bWluLXdpZHRoOjU0cHg7IHRleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6MTIuNXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IGZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30KLmZzLWNsb3Nle21pbi13aWR0aDo0NHB4OyBtaW4taGVpZ2h0OjQ0cHg7IGJvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKTsgYmFja2dyb3VuZDp2YXIoLS1iZyk7CiAgYm9yZGVyLXJhZGl1czoxMnB4OyBjb2xvcjp2YXIoLS1pbmspOyBkaXNwbGF5OmlubGluZS1mbGV4OyBhbGlnbi1pdGVtczpjZW50ZXI7IGp1c3RpZnktY29udGVudDpjZW50ZXJ9Ci5mcy1zdGFnZXtmbGV4OjE7IG92ZXJmbG93OmhpZGRlbjsgdG91Y2gtYWN0aW9uOm5vbmU7IGN1cnNvcjpncmFiOyBkaXNwbGF5OmdyaWQ7IHBsYWNlLWl0ZW1zOmNlbnRlcn0KLmZzLXN0YWdlOmFjdGl2ZXtjdXJzb3I6Z3JhYmJpbmd9Ci5mcy1jYW52YXN7d2lkdGg6bWluKDkydncsMTIwMHB4KTsgd2lsbC1jaGFuZ2U6dHJhbnNmb3JtfQouZnMtY2FudmFzIHN2Z3t3aWR0aDoxMDAlOyBoZWlnaHQ6YXV0bzsgZGlzcGxheTpibG9ja30KCi8qIFNpY2h0YmFyZXIgVGVpbGVuLUZhbGxiYWNrLCBmYWxscyBXZWIgU2hhcmUgQVBJIHVuZCBad2lzY2hlbmFibGFnZSBibG9ja2llcnQgc2luZC4gKi8KLnNoYXJlLWZhbGxiYWNre3Bvc2l0aW9uOmZpeGVkOyBpbnNldDowOyB6LWluZGV4OjEwMDIwOyBkaXNwbGF5OmdyaWQ7IHBsYWNlLWl0ZW1zOmNlbnRlcjsKICBwYWRkaW5nOjE2cHg7IGJhY2tncm91bmQ6cmdiYSgyMCwyNCwyOCwuNTgpfQouc2hhcmUtZmFsbGJhY2tbaGlkZGVuXXtkaXNwbGF5Om5vbmV9Ci5zaGFyZS1mYWxsYmFjay1jYXJke3Bvc2l0aW9uOnJlbGF0aXZlOyB3aWR0aDptaW4oNTYwcHgsMTAwJSk7IHBhZGRpbmc6MjRweDsgYm9yZGVyLXJhZGl1czoxNnB4OwogIGJhY2tncm91bmQ6dmFyKC0tYmcpOyBib3gtc2hhZG93OjAgMjRweCA3MHB4IHJnYmEoMCwwLDAsLjI4KX0KLnNoYXJlLWZhbGxiYWNrLWNhcmQgYntkaXNwbGF5OmJsb2NrOyBmb250LXNpemU6MThweDsgbWFyZ2luLWJvdHRvbTo2cHh9Ci5zaGFyZS1mYWxsYmFjay1jYXJkIHB7bWFyZ2luOjAgMzZweCAxMnB4IDA7IGNvbG9yOnZhcigtLW11dGVkKTsgbGluZS1oZWlnaHQ6MS40NX0KLnNoYXJlLWZhbGxiYWNrLWNhcmQgdGV4dGFyZWF7d2lkdGg6MTAwJTsgbWluLWhlaWdodDoxMzBweDsgcmVzaXplOnZlcnRpY2FsOyBwYWRkaW5nOjEycHg7CiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czoxMHB4OyBmb250OjEzcHgvMS40NSB2YXIoLS1tb25vKTsgb3ZlcmZsb3ctd3JhcDphbnl3aGVyZX0KLnNoYXJlLWZhbGxiYWNrLWNsb3Nle3Bvc2l0aW9uOmFic29sdXRlOyB0b3A6MTBweDsgcmlnaHQ6MTBweDsgd2lkdGg6NDRweDsgaGVpZ2h0OjQ0cHg7CiAgYm9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTsgYm9yZGVyLXJhZGl1czoxMHB4OyBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgZm9udC1zaXplOjI0cHh9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbnNraXp6ZSAvIERhdGVuYmxhdHQgKERydWNrKSAqLwojd3otZHN7ZGlzcGxheTpub25lOyBmb250LWZhbWlseTp2YXIoLS1mZik7IGNvbG9yOnZhcigtLWluayk7IGJhY2tncm91bmQ6I2ZmZn0KYm9keS53ei1wcmludGluZyAjd3otZHN7ZGlzcGxheTpibG9jazsgbWF4LXdpZHRoOjgyMHB4OyBtYXJnaW46MCBhdXRvOyBwYWRkaW5nOjE2cHh9Ci5kcy1oZWFke2Rpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7CiAgYm9yZGVyLWJvdHRvbToycHggc29saWQgdmFyKC0tcmVkKTsgcGFkZGluZy1ib3R0b206OHB4OyBtYXJnaW4tYm90dG9tOjEwcHh9Ci5kcy1icmFuZHtkaXNwbGF5OmZsZXg7IGdhcDo5cHg7IGFsaWduLWl0ZW1zOmNlbnRlcn0KLmRzLWJyYW5kIC5tYXJre3dpZHRoOjhweDsgaGVpZ2h0OjI2cHg7IGJhY2tncm91bmQ6dmFyKC0tcmVkKTsgYm9yZGVyLXJhZGl1czoycHg7IGRpc3BsYXk6aW5saW5lLWJsb2NrfQouZHMtYnJhbmQgYntmb250LXNpemU6MTdweDsgbGV0dGVyLXNwYWNpbmc6LjA0ZW19Ci5kcy1icmFuZCBpe2Rpc3BsYXk6YmxvY2s7IGZvbnQtc3R5bGU6bm9ybWFsOyBmb250LXNpemU6OC41cHg7IGZvbnQtd2VpZ2h0OjcwMDsgbGV0dGVyLXNwYWNpbmc6LjE0ZW07CiAgY29sb3I6dmFyKC0tbXV0ZWQyKTsgdGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfQouZHMtbWV0YXt0ZXh0LWFsaWduOnJpZ2h0OyBmb250LXNpemU6MTFweDsgY29sb3I6dmFyKC0tbXV0ZWQpfQouZHMtbWV0YSBie2Rpc3BsYXk6YmxvY2s7IGNvbG9yOnZhcigtLWluayk7IGZvbnQtc2l6ZToxM3B4fQouZHMtbWV0YSBzcGFue2Rpc3BsYXk6YmxvY2t9Ci5kcy1kcmF3e2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW4tYm90dG9tOjhweDsgb3ZlcmZsb3c6aGlkZGVufQouZHMtZHJhdyBzdmcsLmRzLXJlbmRlciBzdmd7d2lkdGg6MTAwJTsgaGVpZ2h0OmF1dG87IGRpc3BsYXk6YmxvY2t9Ci5kcy1ncmlke2Rpc3BsYXk6Z3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxLjE1ZnI7IGdhcDo4cHg7IG1hcmdpbi1ib3R0b206OHB4fQouZHMtcmVuZGVye2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7IGJvcmRlci1yYWRpdXM6OHB4OyBvdmVyZmxvdzpoaWRkZW47IGFsaWduLXNlbGY6c3RhcnR9Ci5kcy10YWJsZXt3aWR0aDoxMDAlOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IGZvbnQtc2l6ZToxMC41cHh9Ci5kcy10YWJsZSB0ZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpOyBwYWRkaW5nOjRweCA4cHg7IHZlcnRpY2FsLWFsaWduOnRvcH0KLmRzLXRhYmxlIHRkOmZpcnN0LWNoaWxke2NvbG9yOnZhcigtLW11dGVkKTsgd2lkdGg6NDAlfQouZHMtdGl0bGVibG9ja3t3aWR0aDoxMDAlOyBib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IG1hcmdpbi10b3A6MnB4fQouZHMtdGl0bGVibG9jayB0ZHtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWluayk7IHBhZGRpbmc6NXB4IDhweDsgZm9udC1zaXplOjEwcHh9Ci5kcy10aXRsZWJsb2NrIGl7ZGlzcGxheTpibG9jazsgZm9udC1zdHlsZTpub3JtYWw7IGZvbnQtc2l6ZTo3LjVweDsgY29sb3I6dmFyKC0tbXV0ZWQpOwogIHRleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTsgbGV0dGVyLXNwYWNpbmc6LjA2ZW07IG1hcmdpbi1ib3R0b206MXB4fQouZHMtbm90ZXtmb250LXNpemU6OXB4OyBjb2xvcjp2YXIoLS1tdXRlZCk7IG1hcmdpbi10b3A6NnB4OyBsaW5lLWhlaWdodDoxLjV9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc3BvbnNpdmUgKi8KQG1lZGlhIChtYXgtd2lkdGg6OTYwcHgpewogIC5sYXlvdXR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjsgZ2FwOjE4cHh9CiAgLnByZXZpZXd7cG9zaXRpb246c3RhdGljOyBvcmRlcjotMX0KICAuYXBwe3BhZGRpbmctYm90dG9tOjk2cHh9CiAgLm5hdntwb3NpdGlvbjpmaXhlZDsgbGVmdDowOyByaWdodDowOyBib3R0b206MDsgbWFyZ2luOjA7IHBhZGRpbmc6MTBweCAxNnB4IGNhbGMoMTBweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7CiAgICBiYWNrZ3JvdW5kOnZhcigtLWJnKTsgYm9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7IHotaW5kZXg6NTA7IGJveC1zaGFkb3c6MCAtNnB4IDIwcHggLTE0cHggcmdiYSgyOCwyOCwyOCwuMyl9CiAgLm5hdiAubWluaXByaWNle2Rpc3BsYXk6ZmxleDsgZmxleC1kaXJlY3Rpb246Y29sdW1uOyBsaW5lLWhlaWdodDoxLjE1OyBtYXJnaW46MCBhdXRvIDAgNHB4fQogIC5uYXYgLm1pbmlwcmljZSAuYXtmb250LXdlaWdodDo4MDA7IGZvbnQtc2l6ZToxNnB4OyBmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9CiAgLm5hdiAubWluaXByaWNlIC5ie2ZvbnQtc2l6ZToxMC41cHg7IGNvbG9yOnZhcigtLW11dGVkMil9CiAgLyogRGFzIFdvcmRQcmVzcy1QbHVnaW4gcGFzc3QgZGllIHNyY2RvYy1pRnJhbWUtSMO2aGUgYW4gZGVuIEluaGFsdCBhbi4gRWluZSBpbQogICAgIGlGcmFtZSBmaXhpZXJ0ZSBMZWlzdGUgbMOkZ2UgcmVsYXRpdiB6dW0gZ2VzYW10ZW4gKHNlaHIgaG9oZW4pIERva3VtZW50IHVuZAogICAgIHfDpHJlIGltIHNpY2h0YmFyZW4gV29yZFByZXNzLUF1c3NjaG5pdHQgbmljaHQgenV2ZXJsw6Rzc2lnIGVycmVpY2hiYXIuICovCiAgaHRtbC53ei1lbWJlZGRlZCAuYXBwe3BhZGRpbmctYm90dG9tOjI2cHh9CiAgaHRtbC53ei1lbWJlZGRlZCAjd3otbmF2e3Bvc2l0aW9uOnN0YXRpYzsgbWFyZ2luLXRvcDoxOHB4OyBwYWRkaW5nOjEwcHggMCAwOwogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsgYm9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7IGJveC1zaGFkb3c6bm9uZX0KfQpAbWVkaWEgKG1pbi13aWR0aDo5NjFweCl7IC5uYXYgLm1pbmlwcmljZXtkaXNwbGF5Om5vbmV9IH0KQG1lZGlhIChtYXgtd2lkdGg6NTIwcHgpewogIC5hcHB7cGFkZGluZy1sZWZ0OjEycHg7IHBhZGRpbmctcmlnaHQ6MTJweH0KICAudG9wYmFye2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9CiAgLnRvcGJhciAuaGludHttYXgtd2lkdGg6MTY4cHg7IHRleHQtYWxpZ246cmlnaHQ7IGxpbmUtaGVpZ2h0OjEuNX0KICAudGlsZXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0gLnJvdzJ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0gLmZvcm17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcn0KICAuc2Vne2Rpc3BsYXk6ZmxleDsgd2lkdGg6MTAwJTsgbWF4LXdpZHRoOjEwMCV9CiAgLnNlZyBidXR0b257ZmxleDoxIDEgMTMycHg7IG1pbi13aWR0aDowOyB3aGl0ZS1zcGFjZTpub3JtYWw7IG92ZXJmbG93LXdyYXA6YW55d2hlcmV9CiAgLnB2LWhlYWR7cGFkZGluZy1sZWZ0OjEwcHg7IHBhZGRpbmctcmlnaHQ6MTBweH0KICAucHYtaGVhZCAubGJse2Rpc3BsYXk6bm9uZX0KICAucHYtYWN0aW9uc3t3aWR0aDoxMDAlOyBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0KICAucHYtdG9nZ2xle2ZsZXg6MX0KICAucHYtdG9nZ2xlIGJ1dHRvbntmbGV4OjE7IGp1c3RpZnktY29udGVudDpjZW50ZXI7IHBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHh9CiAgLnB2LXR5cGVjb2Rle2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7IGZsZXgtd3JhcDp3cmFwfQogIC5wdi10eXBlY29kZSAuY29weXttYXJnaW4tbGVmdDowfQogIC5wYW5lbCAubmF2e2ZsZXgtd3JhcDp3cmFwfQogIC5wYW5lbCAubmF2IC5idG57ZmxleDoxIDEgMTQwcHg7IG1pbi13aWR0aDowOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBwYWRkaW5nLWxlZnQ6MTJweDsgcGFkZGluZy1yaWdodDoxMnB4OwogICAgd2hpdGUtc3BhY2U6bm9ybWFsOyB0ZXh0LWFsaWduOmNlbnRlcn0KICAjd3otbmF2e2dhcDo4cHg7IHBhZGRpbmctbGVmdDoxMnB4OyBwYWRkaW5nLXJpZ2h0OjEycHh9CiAgI3d6LW5hdiAuYnRue21pbi13aWR0aDowOyBwYWRkaW5nLWxlZnQ6MTJweDsgcGFkZGluZy1yaWdodDoxMnB4OyBmb250LXNpemU6MTNweDsgbGluZS1oZWlnaHQ6MS4xNTsKICAgIHRleHQtYWxpZ246Y2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyBvdmVyZmxvdy13cmFwOmFueXdoZXJlfQogICN3ei1uYXYgLm1pbmlwcmljZXttaW4td2lkdGg6MDsgZmxleDowIDEgYXV0b30KICAuY2FydCAuY2l7YWxpZ24taXRlbXM6ZmxleC1zdGFydDsgZmxleC13cmFwOndyYXB9CiAgLmNhcnQgLmNpPmRpdjpmaXJzdC1jaGlsZHttaW4td2lkdGg6MDsgZmxleDoxIDEgMTcwcHh9CiAgLmNhcnQgLmNpIC5jb2Rle292ZXJmbG93LXdyYXA6YW55d2hlcmV9CiAgLnN0ZXAtaGVhZCBoMntmb250LXNpemU6MjBweH0KfQpAbWVkaWEgKG1heC13aWR0aDozNTlweCl7CiAgLnBhbmVsIC5uYXYgLmJ0bntmbGV4LWJhc2lzOjEwMCV9CiAgI3d6LW5hdiAuYnRuLmdob3N0e3dpZHRoOjQ4cHg7IGZsZXg6MCAwIDQ4cHg7IHBhZGRpbmc6MDsgZm9udC1zaXplOjB9CiAgI3d6LW5hdiAuYnRuLmdob3N0IC5pY3t3aWR0aDoyMHB4OyBoZWlnaHQ6MjBweH0KfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEcnVjay9QREYgKi8KQG1lZGlhIHByaW50ewogIC50b3BiYXIgLmhpbnQsLnByb2dyZXNzLC5uYXYsLnB2LXR5cGVjb2RlIC5jb3B5LC5saW5rYnRuLC5yZXNldGJ0biwubm90ZS1wbGgsLnB2LWhlYWQsLnd6LWZze2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9CiAgLmFwcHtwYWRkaW5nOjB9IC5sYXlvdXR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7IGdhcDoyMHB4fQogIC5wcmV2aWV3e3Bvc2l0aW9uOnN0YXRpY30gLnB2LWNhcmR7Ym94LXNoYWRvdzpub25lOyBib3JkZXI6MXB4IHNvbGlkICNjY2N9CiAgYm9keXtmb250LXNpemU6MTJweH0KICAvKiBQbGFuc2tpenplLU1vZHVzOiBudXIgZGFzIERhdGVuYmxhdHQgZHJ1Y2tlbiAqLwogIGJvZHkud3otcHJpbnRpbmcgLmFwcHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fQogIGJvZHkud3otcHJpbnRpbmcgI3d6LWRze2Rpc3BsYXk6YmxvY2s7IG1heC13aWR0aDpub25lOyBwYWRkaW5nOjB9CiAgQHBhZ2V7c2l6ZTpBNCBwb3J0cmFpdDsgbWFyZ2luOjEybW19Cn0KCi8qIHByZWZlcnMtcmVkdWNlZC1tb3Rpb24gKi8KQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7ICp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudDsgYW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50fSB9Cgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgogIDxtYWluIGNsYXNzPSJhcHAiIGlkPSJ3ei1hcHAiPgogICAgPGRpdiBjbGFzcz0idG9wYmFyIj4KICAgICAgPGRpdiBjbGFzcz0iYnJhbmQiPgogICAgICAgIDxzcGFuIGNsYXNzPSJtYXJrIj48L3NwYW4+CiAgICAgICAgPHNwYW4+PHNwYW4gY2xhc3M9Im4iPldFSVNTPC9zcGFuPjxzcGFuIGNsYXNzPSJzIj5GaXR0aW5ncy1Lb25maWd1cmF0b3I8L3NwYW4+PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaGludCIgaWQ9Ind6LXByaWNlLWhpbnQiPkRJTiAzMjY3NiA8Yj5hdWYgQW5mcmFnZTwvYj4gwrcgRElOIDExODY1IGF1ZiBBbmZyYWdlPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8bmF2IGNsYXNzPSJwcm9ncmVzcyIgaWQ9Ind6LXByb2dyZXNzIiBhcmlhLWxhYmVsPSJGb3J0c2Nocml0dCI+PC9uYXY+CgogICAgPGRpdiBjbGFzcz0ibGF5b3V0Ij4KICAgICAgPHNlY3Rpb24gY2xhc3M9InBhbmVsIiBpZD0id3otcGFuZWwiIGFyaWEtbGl2ZT0icG9saXRlIj48L3NlY3Rpb24+CiAgICAgIDxhc2lkZSBjbGFzcz0icHJldmlldyIgaWQ9Ind6LXByZXZpZXciIGFyaWEtbGFiZWw9IlZvcnNjaGF1Ij48L2FzaWRlPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ibmF2IiBpZD0id3otbmF2Ij48L2Rpdj4KICA8L21haW4+CgogIDxzY3JpcHQ+d2luZG93LldFSVNTX0RBVEE9eyJkaWNodHVuZ1dlaWNoIjpbIkVQRE0iLCJWTVEiLCJGS00iXSwibWV0YSI6eyJ2ZXJzaW9uIjoiMS4xIiwic3RhbmQiOiIyMDI2LTA3LTIyIiwiZWluaGVpdCI6Im1tIiwid2FlaHJ1bmciOiJFVVIiLCJzY29wZSI6IkRJTiAzMjY3NiArIERJTiAxMTg2NSAoUHJlaXNlIGF1ZiBBbmZyYWdlKSIsInZlcnRyaWViRW1haWwiOiJzdGVyaWx0ZWNobmlrQHdlaXNzLWFubGFnZW5iYXUuZGUiLCJoaW53ZWlzTWFzc2UiOiJNYXNzZSBhdXMgS3VuZGVudW50ZXJsYWdlbiB1bmQgenVnZW9yZG5ldGVuIEhlcnN0ZWxsZXJkYXRlbmJsYWV0dGVybjsgd2lkZXJzcHJ1ZWNobGljaGUgb2RlciBmZWhsZW5kZSBXZXJ0ZSBibGVpYmVuIGdlc3BlcnJ0LiJ9LCJhbndlbmR1bmdlbiI6W3siaWQiOiJwaGFybWEiLCJsYWJlbCI6IlBoYXJtYSIsInN1YiI6IldGSSwgRGFtcGYtU0lQLCBob2NocmVpbiIsImRlZmF1bHRzIjp7IndlcmtzdG9mZiI6IjEuNDQzNSIsIm9iZXJmbGFlY2hlIjoiSDQiLCJkaWNodHVuZyI6IkVQRE0ifX0seyJpZCI6InN0ZXJpbHRlY2huaWsiLCJsYWJlbCI6IlN0ZXJpbHRlY2huaWsiLCJzdWIiOiJBc2VwdGlrLCBDSVBcL1NJUCIsImRlZmF1bHRzIjp7IndlcmtzdG9mZiI6IjEuNDQwNCIsIm9iZXJmbGFlY2hlIjoiU3RlcmlsIiwiZGljaHR1bmciOiJFUERNIn19LHsiaWQiOiJsZWJlbnNtaXR0ZWwiLCJsYWJlbCI6IkxlYmVuc21pdHRlbCIsInN1YiI6IkdldHJcdTAwZTRua2UsIE1vbGtlcmVpLCBGb29kIiwiZGVmYXVsdHMiOnsid2Vya3N0b2ZmIjoiMS40NDA0Iiwib2JlcmZsYWVjaGUiOiJIMyIsImRpY2h0dW5nIjoiVk1RIn19LHsiaWQiOiJjaGVtaWUiLCJsYWJlbCI6IkNoZW1pZSIsInN1YiI6IkxcdTAwZjZzZW1pdHRlbCwgU1x1MDBlNHVyZW4sIFx1MDBkNmxlIiwiZGVmYXVsdHMiOnsid2Vya3N0b2ZmIjoiMS40NDA0Iiwib2JlcmZsYWVjaGUiOiJIMSIsImRpY2h0dW5nIjoiRktNIn19XSwibm9ybWVuIjpbeyJpZCI6ImRpbjMyNjc2IiwibGFiZWwiOiJESU4gMzI2NzYiLCJzdWIiOiJDbGFtcHZlcmJpbmR1bmciLCJwcmVpc01vZHVzIjoiYW5mcmFnZSIsImhpbndlaXMiOiJDbGFtcHN0dXR6ZW4sIEJsaW5kZGVja2VsLCBLbGFtbWVybiBcdTIwMTMgUHJlaXMgYXVmIEFuZnJhZ2UuIn0seyJpZCI6ImRpbjExODY1IiwibGFiZWwiOiJESU4gMTE4NjUiLCJzdWIiOiJHZXNjaHdlaVx1MDBkZnRlIEZpdHRpbmdzIiwicHJlaXNNb2R1cyI6ImFuZnJhZ2UiLCJoaW53ZWlzIjoiQlx1MDBmNmdlbiwgVC1TdFx1MDBmY2NrZSwgUmVkdXppZXJ1bmdlbiAtIGF1ZiBBbmZyYWdlLCBqZSBuYWNoIFZlcmZcdTAwZmNnYmFya2VpdC4ifV0sInR5cGVuIjpbeyJpZCI6IlRDIiwibm9ybSI6ImRpbjMyNjc2IiwibGFiZWwiOiJLb21wbGV0dGUgVHJpQ2xhbXAgVmVyYmluZHVuZyIsInN1YiI6IkFuc2Nod2Vpc3NzdHV0emVuIG1pdCBDbGFtcGFuc2NobHVzcyIsInN2Z1R5cGUiOiJjbGFtcHN0dXR6ZW4iLCJkaWNodHVuZyI6dHJ1ZSwibGFlbmdlVmFyaWFudGUiOnRydWUsImtvbXBsZXR0ZVZlcmJpbmR1bmciOnRydWUsImFrdGl2Ijp0cnVlfSx7ImlkIjoiVENEIiwibm9ybSI6ImRpbjMyNjc2IiwibGFiZWwiOiJUYW5rc3R1dHplbiBkaWNrd2FuZGlnIiwic3ViIjoiQW5zY2h3ZWlzc3N0dXR6ZW4gbWl0IENsYW1wYW5zY2hsdXNzIiwic3ZnVHlwZSI6ImNsYW1wc3R1dHplbiIsImRpY2h0dW5nIjpmYWxzZSwiZWluemVsU3R1dHplbiI6dHJ1ZSwibWFzc2VRdWVsbGUiOiJ0Y2QiLCJha3RpdiI6dHJ1ZX0seyJpZCI6IlRDUyIsIm5vcm0iOiJkaW4zMjY3NiIsImxhYmVsIjoiVEMtU3R1dHplbiIsInN1YiI6IkVpbnplbG5lciBUcmlDbGFtcC1TdHV0emVuIiwic3ZnVHlwZSI6ImNsYW1wc3R1dHplbiIsImRpY2h0dW5nIjpmYWxzZSwibGFlbmdlVmFyaWFudGUiOnRydWUsImVpbnplbFN0dXR6ZW4iOnRydWUsImFrdGl2Ijp0cnVlfSx7ImlkIjoiQkQiLCJub3JtIjoiZGluMzI2NzYiLCJsYWJlbCI6IkJsaW5kZGVja2VsIiwic3ViIjoiVmVyc2NobGllc3N0IGVpbmVuIENsYW1wYW5zY2hsdXNzIiwic3ZnVHlwZSI6ImJsaW5kZGVja2VsIiwiZGljaHR1bmciOmZhbHNlLCJudXJGbGFuc2NoIjp0cnVlLCJha3RpdiI6dHJ1ZX0seyJpZCI6IkQiLCJub3JtIjoiZGluMzI2NzYiLCJsYWJlbCI6IkRpY2h0dW5nIiwic3ViIjoiRWluemVsbmUgRGljaHR1bmciLCJzdmdUeXBlIjoiZGljaHR1bmciLCJkaWNodHVuZyI6dHJ1ZSwiYWt0aXYiOnRydWV9LHsiaWQiOiJLTCIsIm5vcm0iOiJkaW4zMjY3NiIsImxhYmVsIjoiS2xhbW1lciBcLyBTcGFubnJpbmciLCJzdWIiOiJHclx1MDBmNlx1MDBkZmUgbmFjaCBGbGFuc2NoLVx1MDBkOCIsInN2Z1R5cGUiOiJrbGFtbWVyIiwiZGljaHR1bmciOmZhbHNlLCJudXJGbGFuc2NoIjp0cnVlLCJrbGFtbWVyVHlwZW4iOnRydWUsImFrdGl2Ijp0cnVlfSx7ImlkIjoiQ0YiLCJub3JtIjoiZGluMzI2NzYiLCJsYWJlbCI6IkNvbm5lY3QtRmxhbnNjaCIsInN1YiI6IldhbmRiXHUwMGZjbmRpZ2VyIEJlaFx1MDBlNGx0ZXJhbnNjaGx1c3MiLCJzdmdUeXBlIjoiY29ubmVjdGZsYW5zY2giLCJkaWNodHVuZyI6ZmFsc2UsIm1hc3NlUXVlbGxlIjoiY2YiLCJjb25uZWN0Ijp0cnVlLCJha3RpdiI6dHJ1ZX0seyJpZCI6IkNGSSIsIm5vcm0iOiJkaW4zMjY3NiIsImxhYmVsIjoiQ29ubmVjdC1GbGFuc2NoIElubGluZSIsInN1YiI6IklubGluZS1BdXNmXHUwMGZjaHJ1bmciLCJzdmdUeXBlIjoiY29ubmVjdGlubGluZSIsImRpY2h0dW5nIjpmYWxzZSwibWFzc2VRdWVsbGUiOiJjZmkiLCJjb25uZWN0Ijp0cnVlLCJha3RpdiI6dHJ1ZX0seyJpZCI6IkI5MCIsIm5vcm0iOiJkaW4xMTg2NSIsImxhYmVsIjoiQm9nZW4gOTBcdTAwYjAiLCJzdWIiOiJGb3JtIEJMLTkwIiwic3ZnVHlwZSI6ImJvZ2VuOTAiLCJib2dlbiI6OTAsImRpY2h0dW5nIjpmYWxzZSwiYWt0aXYiOnRydWUsIm1hc3NlUXVlbGxlIjoiZGluMTE4NjUuYm9lZ2VuIn0seyJpZCI6IkI0NSIsIm5vcm0iOiJkaW4xMTg2NSIsImxhYmVsIjoiQm9nZW4gNDVcdTAwYjAiLCJzdWIiOiJGb3JtIEJMLTQ1Iiwic3ZnVHlwZSI6ImJvZ2VuNDUiLCJib2dlbiI6NDUsImRpY2h0dW5nIjpmYWxzZSwiYWt0aXYiOnRydWUsIm1hc3NlUXVlbGxlIjoiZGluMTE4NjUuYm9lZ2VuIn0seyJpZCI6IlRTIiwibm9ybSI6ImRpbjExODY1IiwibGFiZWwiOiJULVN0XHUwMGZjY2siLCJzdWIiOiJnbGVpY2ggXHUwMGI3IG1ldHJpc2NoXC9JU09cL1pvbGwgXHUwMGI3IEZvcm0gVCBcLyBGb3JtIFRLIiwic3ZnVHlwZSI6InRzdHVlY2siLCJmb3JtV2FobCI6dHJ1ZSwiZGljaHR1bmciOmZhbHNlLCJha3RpdiI6dHJ1ZSwibWFzc2VRdWVsbGUiOiJkaW4xMTg2NS50U3R1ZWNrR2xlaWNoIn0seyJpZCI6IlRTUiIsIm5vcm0iOiJkaW4xMTg2NSIsImxhYmVsIjoiVC1TdFx1MDBmY2NrIHJlZHV6aWVydCIsInN1YiI6ImtsZWluZXJlciBBYmdhbmcgXHUwMGI3IEZvcm0gVCBcLyBGb3JtIFRLIiwic3ZnVHlwZSI6InRzdHVlY2siLCJyZWR1emllcnQiOnRydWUsInp3ZWl0ZUdyb2Vzc2UiOnRydWUsImZvcm1XYWhsIjp0cnVlLCJkaWNodHVuZyI6ZmFsc2UsImFrdGl2Ijp0cnVlLCJtYXNzZVF1ZWxsZSI6ImRpbjExODY1LnRTdHVlY2tSZWR1emllcnQifSx7ImlkIjoiUiIsIm5vcm0iOiJkaW4xMTg2NSIsImxhYmVsIjoiUmVkdXppZXJ1bmciLCJzdWIiOiJrb256ZW50cmlzY2ggKEZvcm0gUkspIFwvIGV4emVudHJpc2NoIChGb3JtIFJFKSIsInN2Z1R5cGUiOiJyZWR1emllcnVuZyIsInp3ZWl0ZUdyb2Vzc2UiOnRydWUsImV4emVudHJpc2NoV2FobCI6dHJ1ZSwiZGljaHR1bmciOmZhbHNlLCJha3RpdiI6dHJ1ZSwibWFzc2VRdWVsbGUiOiJkaW4xMTg2NS5yZWR1emllcnVuZyJ9XSwibWFzc2UiOnsiZGluMzI2NzYiOnsicmVpaGVuIjp7IkEiOnsibGFiZWwiOiJSZWloZSBBIC0gbWV0cmlzY2ggKEROLCBESU4gMTE4NTApIiwiZ3JvZXNzZSI6IkROIiwicm93cyI6W3siaWQiOiJETjA2IiwibGFiZWwiOiJETjA2IiwidHViZU9EIjo4LCJ0dWJlSUQiOjYsIndhbGwiOjEsImZsYW5nZU9EIjoyNSwiYmxpbmRUaGsiOjQuNzUsImtrIjoxMi43LCJrbCI6MjguNiwiZ2Fza2V0T0QiOjIyLCJnYXNrZXRJRCI6OS43LCJnYXNrZXRUeXBlIjoiSSJ9LHsiaWQiOiJETjA4IiwibGFiZWwiOiJETjA4IiwidHViZU9EIjoxMCwidHViZUlEIjo4LCJ3YWxsIjoxLCJmbGFuZ2VPRCI6MjUsImJsaW5kVGhrIjo0Ljc1LCJrayI6MTIuNywia2wiOjI4LjYsImdhc2tldE9EIjoyMiwiZ2Fza2V0SUQiOjguMiwiZ2Fza2V0SURwdGZlIjo4LCJnYXNrZXRUeXBlIjoiSSJ9LHsiaWQiOiJETjEwIiwibGFiZWwiOiJETjEwIiwidHViZU9EIjoxMywidHViZUlEIjoxMCwid2FsbCI6MS41LCJmbGFuZ2VPRCI6MzQsImJsaW5kVGhrIjo2LjM1LCJrayI6MTgsImtsIjoyOC42LCJnYXNrZXRPRCI6MzQsImdhc2tldElEIjoxMi43LCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiRE4xNSIsImxhYmVsIjoiRE4xNSIsInR1YmVPRCI6MTksInR1YmVJRCI6MTYsIndhbGwiOjEuNSwiZmxhbmdlT0QiOjM0LCJibGluZFRoayI6Ni4zNSwia2siOjE4LCJrbCI6MjguNiwiZ2Fza2V0T0QiOjM0LCJnYXNrZXRJRCI6MTguMiwiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6IkROMjAiLCJsYWJlbCI6IkROMjAiLCJ0dWJlT0QiOjIzLCJ0dWJlSUQiOjIwLCJ3YWxsIjoxLjUsImZsYW5nZU9EIjozNCwiYmxpbmRUaGsiOjYuMzUsImtrIjoxOCwia2wiOjI4LjYsImdhc2tldE9EIjozNCwiZ2Fza2V0SUQiOjIyLjIsImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJETjI1IiwibGFiZWwiOiJETjI1IiwidHViZU9EIjoyOSwidHViZUlEIjoyNiwid2FsbCI6MS41LCJmbGFuZ2VPRCI6NTAuNSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyMS41LCJrbCI6MzYsImdhc2tldE9EIjo1MC41LCJnYXNrZXRJRCI6MjcuNywiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6IkROMzIiLCJsYWJlbCI6IkROMzIiLCJ0dWJlT0QiOjM1LCJ0dWJlSUQiOjMyLCJ3YWxsIjoxLjUsImZsYW5nZU9EIjo1MC41LCJibGluZFRoayI6Ni4zNSwia2siOjIxLjUsImtsIjozNiwiZ2Fza2V0T0QiOjUwLjUsImdhc2tldElEIjozMi43LCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiRE40MCIsImxhYmVsIjoiRE40MCIsInR1YmVPRCI6NDEsInR1YmVJRCI6MzgsIndhbGwiOjEuNSwiZmxhbmdlT0QiOjUwLjUsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NTAuNSwiZ2Fza2V0SUQiOjM4LjcsImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJETjUwIiwibGFiZWwiOiJETjUwIiwidHViZU9EIjo1MywidHViZUlEIjo1MCwid2FsbCI6MS41LCJmbGFuZ2VPRCI6NjQsImJsaW5kVGhrIjo2LjM1LCJrayI6MjgsImtsIjozNiwiZ2Fza2V0T0QiOjY0LCJnYXNrZXRJRCI6NTAuNywiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6IkRONjUiLCJsYWJlbCI6IkRONjUiLCJ0dWJlT0QiOjcwLCJ0dWJlSUQiOjY2LCJ3YWxsIjoyLCJmbGFuZ2VPRCI6OTEsImJsaW5kVGhrIjo2LjM1LCJrayI6MjgsImtsIjo0OCwiZ2Fza2V0T0QiOjkxLCJnYXNrZXRJRCI6NjYuMiwiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6IkROODAiLCJsYWJlbCI6IkROODAiLCJ0dWJlT0QiOjg1LCJ0dWJlSUQiOjgxLCJ3YWxsIjoyLCJmbGFuZ2VPRCI6MTA2LCJibGluZFRoayI6Ni4zNSwia2siOjI4LCJrbCI6NDgsImdhc2tldE9EIjoxMDYsImdhc2tldElEIjo4MS4yLCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiRE4xMDAiLCJsYWJlbCI6IkROMTAwIiwidHViZU9EIjoxMDQsInR1YmVJRCI6MTAwLCJ3YWxsIjoyLCJmbGFuZ2VPRCI6MTE5LCJibGluZFRoayI6OCwia2siOjI4LCJrbCI6NDgsImdhc2tldE9EIjoxMTksImdhc2tldElEIjoxMDAuMiwiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6IkROMTI1IiwibGFiZWwiOiJETjEyNSIsInR1YmVPRCI6MTI5LCJ0dWJlSUQiOjEyNSwid2FsbCI6MiwiZmxhbmdlT0QiOjE1NSwiYmxpbmRUaGsiOjgsImtrIjoyOCwia2wiOjY2LCJnYXNrZXRPRCI6MTU1LCJnYXNrZXRJRCI6MTI1LjJ9LHsiaWQiOiJETjE1MCIsImxhYmVsIjoiRE4xNTAiLCJ0dWJlT0QiOjE1NCwidHViZUlEIjoxNTAsIndhbGwiOjIsImZsYW5nZU9EIjoxODMsImJsaW5kVGhrIjoxNCwia2siOjI4LCJrbCI6NjYsImdhc2tldE9EIjoxODMsImdhc2tldElEIjoxNTAuMn0seyJpZCI6IkROMjAwIiwibGFiZWwiOiJETjIwMCIsInR1YmVPRCI6MjA0LCJ0dWJlSUQiOjIwMCwid2FsbCI6MiwiZmxhbmdlT0QiOjIzMy41LCJibGluZFRoayI6MTQsImtrIjoyOCwia2wiOjY2LCJnYXNrZXRPRCI6MjMzLjUsImdhc2tldElEIjoyMDAuMn1dfSwiQiI6eyJsYWJlbCI6IlJlaWhlIEIgLSBtZXRyaXNjaCBJU08gKE9ELCBFTiBJU08gMTEyNykiLCJncm9lc3NlIjoiT0QiLCJyb3dzIjpbeyJpZCI6Ik5XMTAuMiIsImxhYmVsIjoiTlcgMTAsMiIsInR1YmVPRCI6MTAuMiwidHViZUlEIjo3LCJ3YWxsIjoxLjYsImZsYW5nZU9EIjoyNSwiYmxpbmRUaGsiOjQuNzUsImtrIjoxMi43LCJrbCI6MjguNiwiZ2Fza2V0T0QiOjIyLCJnYXNrZXRJRCI6MTIsImdhc2tldElEcHRmZSI6Ny4yLCJnYXNrZXRUeXBlIjoiSSJ9LHsiaWQiOiJOVzEzLjUiLCJsYWJlbCI6Ik5XIDEzLDUiLCJ0dWJlT0QiOjEzLjUsInR1YmVJRCI6MTAuMywid2FsbCI6MS42LCJmbGFuZ2VPRCI6MjUsImJsaW5kVGhrIjo0Ljc1LCJrayI6MTIuNywia2wiOjI4LjYsImdhc2tldE9EIjoyMiwiZ2Fza2V0SUQiOjE1LjcsImdhc2tldElEcHRmZSI6MTAuNSwiZ2Fza2V0VHlwZSI6IkkifSx7ImlkIjoiTlcxNy4yIiwibGFiZWwiOiJOVyAxNywyIiwidHViZU9EIjoxNy4yLCJ0dWJlSUQiOjE0LCJ3YWxsIjoxLjYsImZsYW5nZU9EIjoyNSwiYmxpbmRUaGsiOjQuNzUsImtrIjoxMi43LCJrbCI6MjguNiwiZ2Fza2V0T0QiOjIyLCJnYXNrZXRJRCI6MTQuMiwiZ2Fza2V0VHlwZSI6IkkifSx7ImlkIjoiTlcyMS4zIiwibGFiZWwiOiJOVyAyMSwzIiwidHViZU9EIjoyMS4zLCJ0dWJlSUQiOjE4LjEsIndhbGwiOjEuNiwiZmxhbmdlT0QiOjUwLjUsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NTAuNSwiZ2Fza2V0SUQiOjI0LjksImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJOVzI2LjkiLCJsYWJlbCI6Ik5XIDI2LDkiLCJ0dWJlT0QiOjI2LjksInR1YmVJRCI6MjMuNywid2FsbCI6MS42LCJmbGFuZ2VPRCI6NTAuNSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyMS41LCJrbCI6MzYsImdhc2tldE9EIjo1MC41LCJnYXNrZXRJRCI6MjMuOX0seyJpZCI6Ik5XMzMuNyIsImxhYmVsIjoiTlcgMzMsNyIsInR1YmVPRCI6MzMuNywidHViZUlEIjoyOS43LCJ3YWxsIjoyLCJmbGFuZ2VPRCI6NTAuNSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyMS41LCJrbCI6MzYsImdhc2tldE9EIjo1MC41LCJnYXNrZXRJRCI6MzAuOSwiZ2Fza2V0VHlwZSI6IklJIn0seyJpZCI6Ik5XNDIuNCIsImxhYmVsIjoiTlcgNDIsNCIsInR1YmVPRCI6NDIuNCwidHViZUlEIjozOC40LCJ3YWxsIjoyLCJmbGFuZ2VPRCI6NjQsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NjQsImdhc2tldElEIjozOS4xLCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiTlc0OC4zIiwibGFiZWwiOiJOVyA0OCwzIiwidHViZU9EIjo0OC4zLCJ0dWJlSUQiOjQ0LjMsIndhbGwiOjIsImZsYW5nZU9EIjo2NCwiYmxpbmRUaGsiOjYuMzUsImtrIjoyMS41LCJrbCI6MzYsImdhc2tldE9EIjo2NCwiZ2Fza2V0SUQiOjQ1LCJnYXNrZXRUeXBlIjoiSUkifSx7ImlkIjoiTlc2MC4zIiwibGFiZWwiOiJOVyA2MCwzIiwidHViZU9EIjo2MC4zLCJ0dWJlSUQiOjU2LjMsIndhbGwiOjIsImZsYW5nZU9EIjo3Ny41LCJibGluZFRoayI6Ni4zNSwia2siOjI4LCJrbCI6MzYsImdhc2tldE9EIjo3Ny41LCJnYXNrZXRJRCI6NTcsImdhc2tldFR5cGUiOiJJSSJ9LHsiaWQiOiJOVzc2LjEiLCJsYWJlbCI6Ik5XIDc2LDEiLCJ0dWJlT0QiOjc2LjEsInR1YmVJRCI6NzIuMSwid2FsbCI6MiwiZmxhbmdlT0QiOjkxLCJibGluZFRoayI6Ni4zNSwia2siOjI4LCJrbCI6NDgsImdhc2tldE9EIjo5MSwiZ2Fza2V0SUQiOjcyLjN9LHsiaWQiOiJOVzg4LjkiLCJsYWJlbCI6Ik5XIDg4LDkiLCJ0dWJlT0QiOjg4LjksInR1YmVJRCI6ODQuMywid2FsbCI6Mi4zLCJmbGFuZ2VPRCI6MTA2LCJibGluZFRoayI6Ni4zNSwia2siOjI4LCJrbCI6NDgsImdhc2tldE9EIjoxMDYsImdhc2tldElEIjo4NC41fSx7ImlkIjoiTlcxMTQuMyIsImxhYmVsIjoiTlcgMTE0LDMiLCJ0dWJlT0QiOjExNC4zLCJ0dWJlSUQiOjEwOS43LCJ3YWxsIjoyLjMsImZsYW5nZU9EIjoxMzAsImJsaW5kVGhrIjo4LCJrayI6MjgsImtsIjo0OCwiZ2Fza2V0T0QiOjEzMCwiZ2Fza2V0SUQiOjEwOS45fSx7ImlkIjoiTlcxMzkuNyIsImxhYmVsIjoiTlcgMTM5LDciLCJ0dWJlT0QiOjEzOS43LCJ0dWJlSUQiOjEzNC41LCJ3YWxsIjoyLjYsImZsYW5nZU9EIjoxNTUsImJsaW5kVGhrIjo4LCJrayI6MjgsImtsIjo2NiwiZ2Fza2V0T0QiOjE1NSwiZ2Fza2V0SUQiOjEzNC43fSx7ImlkIjoiTlcxNjguMyIsImxhYmVsIjoiTlcgMTY4LDMiLCJ0dWJlT0QiOjE2OC4zLCJ0dWJlSUQiOjE2My4xLCJ3YWxsIjoyLjYsImZsYW5nZU9EIjoxODMsImJsaW5kVGhrIjoxNCwia2siOjI4LCJrbCI6NjYsImdhc2tldE9EIjoxODMsImdhc2tldElEIjoxNjMuM30seyJpZCI6Ik5XMjE5LjEiLCJsYWJlbCI6Ik5XIDIxOSwxIiwidHViZU9EIjoyMTkuMSwidHViZUlEIjoyMTMuOSwid2FsbCI6Mi42LCJmbGFuZ2VPRCI6MjMzLjUsImJsaW5kVGhrIjoxNCwia2siOjI4LCJrbCI6NjYsImdhc2tldE9EIjoyMzMuNSwiZ2Fza2V0SUQiOjIxNC4xfV19LCJDIjp7ImxhYmVsIjoiUmVpaGUgQyAtIFpvbGxcL09EIChBU01FLUJQRS1uYWgpIiwiZ3JvZXNzZSI6IlpvbGwiLCJyb3dzIjpbeyJpZCI6IjAuMjUiLCJsYWJlbCI6IjFcLzRcIiIsInR1YmVPRCI6Ni4zNSwidHViZUlEIjo0LjU3LCJ3YWxsIjowLjg5LCJmbGFuZ2VPRCI6MjUsImJsaW5kVGhrIjo0Ljc1LCJrayI6MTIuNywia2wiOjI4LjYsImdhc2tldE9EIjoyMiwiZ2Fza2V0SUQiOjQuOH0seyJpZCI6IjAuMzc1IiwibGFiZWwiOiIzXC84XCIiLCJ0dWJlT0QiOjkuNTMsInR1YmVJRCI6Ny43NSwid2FsbCI6MC44OSwiZmxhbmdlT0QiOjI1LCJibGluZFRoayI6NC43NSwia2siOjEyLjcsImtsIjoyOC42LCJnYXNrZXRPRCI6MjIsImdhc2tldElEIjo4fSx7ImlkIjoiMC41IiwibGFiZWwiOiIxXC8yXCIiLCJ0dWJlT0QiOjEyLjcsInR1YmVJRCI6OS40LCJ3YWxsIjoxLjY1LCJmbGFuZ2VPRCI6MjUsImJsaW5kVGhrIjo0Ljc1LCJrayI6MTIuNywia2wiOjI4LjYsImdhc2tldE9EIjoyMiwiZ2Fza2V0SUQiOjkuNn0seyJpZCI6IjAuNzUiLCJsYWJlbCI6IjNcLzRcIiIsInR1YmVPRCI6MTkuMDUsInR1YmVJRCI6MTUuNzUsIndhbGwiOjEuNjUsImZsYW5nZU9EIjoyNSwiYmxpbmRUaGsiOjQuNzUsImtrIjoxMi43LCJrbCI6MjguNiwiZ2Fza2V0T0QiOjIyLCJnYXNrZXRJRCI6MTZ9LHsiaWQiOiIxIiwibGFiZWwiOiIxXCIiLCJ0dWJlT0QiOjI1LjQsInR1YmVJRCI6MjIuMSwid2FsbCI6MS42NSwiZmxhbmdlT0QiOjUwLjUsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NTAuNSwiZ2Fza2V0SUQiOjIyLjN9LHsiaWQiOiIxLjUiLCJsYWJlbCI6IjEgMVwvMlwiIiwidHViZU9EIjozOC4xLCJ0dWJlSUQiOjM0LjgsIndhbGwiOjEuNjUsImZsYW5nZU9EIjo1MC41LCJibGluZFRoayI6Ni4zNSwia2siOjIxLjUsImtsIjozNiwiZ2Fza2V0T0QiOjUwLjUsImdhc2tldElEIjozNX0seyJpZCI6IjIiLCJsYWJlbCI6IjJcIiIsInR1YmVPRCI6NTAuOCwidHViZUlEIjo0Ny41LCJ3YWxsIjoxLjY1LCJmbGFuZ2VPRCI6NjQsImJsaW5kVGhrIjo2LjM1LCJrayI6MjEuNSwia2wiOjM2LCJnYXNrZXRPRCI6NjQsImdhc2tldElEIjo0Ny43fSx7ImlkIjoiMi41IiwibGFiZWwiOiIyIDFcLzJcIiIsInR1YmVPRCI6NjMuNSwidHViZUlEIjo2MC4yLCJ3YWxsIjoxLjY1LCJmbGFuZ2VPRCI6NzcuNSwiYmxpbmRUaGsiOjYuMzUsImtrIjoyOCwia2wiOjM2LCJnYXNrZXRPRCI6NzcuNSwiZ2Fza2V0SUQiOjYwLjR9LHsiaWQiOiIzIiwibGFiZWwiOiIzXCIiLCJ0dWJlT0QiOjc2LjIsInR1YmVJRCI6NzIuOSwid2FsbCI6MS42NSwiZmxhbmdlT0QiOjkxLCJibGluZFRoayI6Ni4zNSwia2siOjI4LCJrbCI6NDgsImdhc2tldE9EIjo5MSwiZ2Fza2V0SUQiOjczLjF9LHsiaWQiOiI0IiwibGFiZWwiOiI0XCIiLCJ0dWJlT0QiOjEwMS42LCJ0dWJlSUQiOjk3LjM4LCJ3YWxsIjoyLjExLCJmbGFuZ2VPRCI6MTE5LCJibGluZFRoayI6OCwia2siOjI4LCJrbCI6NDgsImdhc2tldE9EIjoxMTksImdhc2tldElEIjo5Ny42fSx7ImlkIjoiNiIsImxhYmVsIjoiNlwiIiwidHViZU9EIjoxNTIuNCwidHViZUlEIjoxNDYuODYsIndhbGwiOjIuNzcsImZsYW5nZU9EIjoxNjcsImJsaW5kVGhrIjoxNCwia2siOjI4LCJrbCI6NjYsImdhc2tldE9EIjoxNjcsImdhc2tldElEIjoxNDcuMX1dfX0sImw0Ijp7IkEiOnsiRE4wNiI6eyJLSyI6MjUuNCwiS0wiOjU3LjJ9LCJETjA4Ijp7IktLIjoyNS40LCJLTCI6NTcuMn0sIkROMTAiOnsiS0siOjM3LjcsIktMIjo1OC45fSwiRE4xNSI6eyJLSyI6MzcuNywiS0wiOjU4Ljl9LCJETjIwIjp7IktLIjozNy43LCJLTCI6NTguOX0sIkROMjUiOnsiS0siOjQ0LjcsIktMIjo3My43fSwiRE4zMiI6eyJLSyI6NDQuNywiS0wiOjczLjd9LCJETjQwIjp7IktLIjo0NC43LCJLTCI6NzMuN30sIkRONTAiOnsiS0siOjQ0LjcsIktMIjo3My43fSwiRE42NSI6eyJLSyI6NTcuNywiS0wiOjk3Ljd9LCJETjgwIjp7IktLIjo1Ny43LCJLTCI6OTcuN30sIkROMTAwIjp7IktLIjo1Ny43LCJLTCI6OTcuN30sIkROMTI1Ijp7IktLIjo1Ny43LCJLTCI6MTMzLjd9LCJETjE1MCI6eyJLSyI6NTcuNywiS0wiOjEzMy43fSwiRE4yMDAiOnsiS0siOjU3LjcsIktMIjoxMzMuN319LCJCIjp7Ik5XMTAuMiI6eyJLSyI6MjUuNCwiS0wiOjU3LjJ9LCJOVzEzLjUiOnsiS0siOjI1LjQsIktMIjo1Ny4yfSwiTlcxNy4yIjp7IktLIjoyNS40LCJLTCI6NTcuMn0sIk5XMjEuMyI6eyJLSyI6NDQuNywiS0wiOjczLjd9LCJOVzI2LjkiOnsiS0siOjQ0LjcsIktMIjo3My43fSwiTlczMy43Ijp7IktLIjo0NC43LCJLTCI6NzMuN30sIk5XNDIuNCI6eyJLSyI6NDQuNywiS0wiOjczLjd9LCJOVzQ4LjMiOnsiS0siOjQ0LjcsIktMIjo3My43fSwiTlc2MC4zIjp7IktLIjo1Ny43LCJLTCI6NzMuN30sIk5XNzYuMSI6eyJLSyI6NTcuNywiS0wiOjk3Ljd9LCJOVzg4LjkiOnsiS0siOjU3LjcsIktMIjo5Ny43fSwiTlcxMTQuMyI6eyJLSyI6NTcuNywiS0wiOjk3Ljd9LCJOVzEzOS43Ijp7IktLIjo1Ny43LCJLTCI6MTMzLjd9LCJOVzE2OC4zIjp7IktLIjo1Ny43LCJLTCI6MTMzLjd9LCJOVzIxOS4xIjp7IktLIjo1Ny43LCJLTCI6MTMzLjd9fSwiQyI6eyIxIjp7IktLIjo0MywiS0wiOjczLjd9LCIyIjp7IktLIjo0MywiS0wiOjczLjd9LCIzIjp7IktLIjo1NiwiS0wiOjk3Ljd9LCI0Ijp7IktLIjo1NiwiS0wiOjk3Ljd9LCI2Ijp7IktLIjo1NiwiS0wiOjEzMy43fSwiMC4yNSI6eyJLSyI6MjUuNCwiS0wiOjU3LjJ9LCIwLjM3NSI6eyJLSyI6MjUuNCwiS0wiOjU3LjJ9LCIwLjUiOnsiS0siOjI1LjQsIktMIjo1Ny4yfSwiMC43NSI6eyJLSyI6MjUuNCwiS0wiOjU3LjJ9LCIxLjUiOnsiS0siOjQzLCJLTCI6NzMuN30sIjIuNSI6eyJLSyI6NTYsIktMIjo3My43fX19fSwiYm9nZW45MCI6eyJBIjpbeyJpZCI6IkROMDYiLCJ0dWJlT0QiOjgsIndhbGwiOjEsIlIiOjIwLCJMMSI6NDUsIkwyIjozMy4zLCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NDUsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMDgiLCJ0dWJlT0QiOjEwLCJ3YWxsIjoxLCJSIjoyNSwiTDEiOjUwLCJMMiI6MzUuNCwiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjUwLCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjEwIiwidHViZU9EIjoxMywid2FsbCI6MS41LCJSIjoyNiwiTDEiOjUxLCJMMiI6MzUuOCwiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjUxLCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjE1IiwidHViZU9EIjoxOSwid2FsbCI6MS41LCJSIjozNSwiTDEiOjYwLCJMMiI6MzkuNSwiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjYwLCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjIwIiwidHViZU9EIjoyMywid2FsbCI6MS41LCJSIjo0MCwiTDEiOjY1LCJMMiI6NDEuNiwiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjY1LCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjI1IiwidHViZU9EIjoyOSwid2FsbCI6MS41LCJSIjo1MCwiTDEiOjkwLCJMMiI6NjAuNywiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjkwLCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjMyIiwidHViZU9EIjozNSwid2FsbCI6MS41LCJSIjo1NSwiTDEiOjk1LCJMMiI6NjIuOCwiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjk1LCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjQwIiwidHViZU9EIjo0MSwid2FsbCI6MS41LCJSIjo2MCwiTDEiOjEwMCwiTDIiOjY0LjksIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjoxMDAsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkRONTAiLCJ0dWJlT0QiOjUzLCJ3YWxsIjoxLjUsIlIiOjcwLCJMMSI6MTEwLCJMMiI6NjksIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjoxMTAsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkRONjUiLCJ0dWJlT0QiOjcwLCJ3YWxsIjoyLCJSIjo4MCwiTDEiOjEyMCwiTDIiOjczLjEsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjoxMjAsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROODAiLCJ0dWJlT0QiOjg1LCJ3YWxsIjoyLCJSIjo5MCwiTDEiOjE0NSwiTDIiOjkyLjMsIkwzXzQ1Ijo1NSwiTDNfOTAiOjU1LCJDIjoxNDUsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMTAwIiwidHViZU9EIjoxMDQsIndhbGwiOjIsIlIiOjEwMCwiTDEiOjE1NSwiTDIiOjk2LjQsIkwzXzQ1Ijo1NSwiTDNfOTAiOjU1LCJDIjoxNTUsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMTI1IiwidHViZU9EIjoxMjksIndhbGwiOjIsIlIiOjE4Ny41LCJMMSI6MjcwLCJMMiI6MTYwLjIsIkwzXzQ1Ijo4Mi41LCJMM185MCI6ODIuNSwiQyI6MjcwLCJDMSI6ODIuNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IkROMTUwIiwidHViZU9EIjoxNTQsIndhbGwiOjIsIlIiOjIyNSwiTDEiOjMyNSwiTDIiOjE5My4yLCJMM180NSI6MTAwLCJMM185MCI6MTAwLCJDIjozMjUsIkMxIjoxMDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjIwMCIsInR1YmVPRCI6MjA0LCJ3YWxsIjoyLCJSIjozMDAsIkwxIjo0MDAsIkwyIjoyMjQuMywiTDNfNDUiOjEwMCwiTDNfOTAiOjEwMCwiQyI6NDAwLCJDMSI6MTAwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfV0sIkIiOlt7ImlkIjoiTlcxMC4yIiwidHViZU9EIjoxMC4yLCJ3YWxsIjoxLjYsIlIiOjIwLCJMMSI6NDUsIkwyIjozMy4zLCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NDUsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMTMuNSIsInR1YmVPRCI6MTMuNSwid2FsbCI6MS42LCJSIjoyMCwiTDEiOjQ1LCJMMiI6MzMuMywiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjQ1LCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzE3LjIiLCJ0dWJlT0QiOjE3LjIsIndhbGwiOjEuNiwiUiI6MjgsIkwxIjo1MywiTDIiOjM2LjYsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo1MywiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcyMS4zIiwidHViZU9EIjoyMS4zLCJ3YWxsIjoxLjYsIlIiOjMwLCJMMSI6NTUsIkwyIjozNy40LCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NTUsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMjYuOSIsInR1YmVPRCI6MjYuOSwid2FsbCI6MS42LCJSIjoyOC41LCJMMSI6NjguNSwiTDIiOjUxLjgsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo2OC41LCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzMzLjciLCJ0dWJlT0QiOjMzLjcsIndhbGwiOjIsIlIiOjM4LCJMMSI6NzgsIkwyIjo1NS43LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6NzgsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XNDIuNCIsInR1YmVPRCI6NDIuNCwid2FsbCI6MiwiUiI6NDcuNSwiTDEiOjg3LjUsIkwyIjo1OS43LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6ODcuNSwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlc0OC4zIiwidHViZU9EIjo0OC4zLCJ3YWxsIjoyLCJSIjo1NywiTDEiOjk3LCJMMiI6NjMuNiwiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjk3LCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzYwLjMiLCJ0dWJlT0QiOjYwLjMsIndhbGwiOjIsIlIiOjc2LCJMMSI6MTE2LCJMMiI6NzEuNSwiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjExNiwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlc3Ni4xIiwidHViZU9EIjo3Ni4xLCJ3YWxsIjoyLCJSIjo5NSwiTDEiOjE1MCwiTDIiOjk0LjQsIkwzXzQ1Ijo1NSwiTDNfOTAiOjU1LCJDIjoxNTAsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XODguOSIsInR1YmVPRCI6ODguOSwid2FsbCI6Mi4zLCJSIjoxMTQuNSwiTDEiOjE2OS41LCJMMiI6MTAyLjQsIkwzXzQ1Ijo1NSwiTDNfOTAiOjU1LCJDIjoxNjkuNSwiQzEiOjU1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcxMTQuMyIsInR1YmVPRCI6MTE0LjMsIndhbGwiOjIuMywiUiI6MTUyLjUsIkwxIjoyMDcuNSwiTDIiOjExOC4yLCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MjA3LjUsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMTM5LjciLCJ0dWJlT0QiOjEzOS43LCJ3YWxsIjoyLjYsIlIiOjE5MC41LCJMMSI6MjQ1LjUsIkwyIjoxMzMuOSwiTDNfNDUiOjU1LCJMM185MCI6NTUsIkMiOjI0NS41LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzE2OC4zIiwidHViZU9EIjoxNjguMywid2FsbCI6Mi42LCJSIjoyMjguNSwiTDEiOjI4My41LCJMMiI6MTQ5LjcsIkwzXzQ1Ijo1NSwiTDNfOTAiOjU1LCJDIjoyODMuNSwiQzEiOjU1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcyMTkuMSIsInR1YmVPRCI6MjE5LjEsIndhbGwiOjIuNiwiUiI6MzA1LCJMMSI6Mzg1LCJMMiI6MjA2LjMsIkwzXzQ1Ijo4MCwiTDNfOTAiOjgwLCJDIjozODUsIkMxIjo4MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH1dLCJDIjpbeyJpZCI6IjAuMjUiLCJ0dWJlT0QiOjYuMzUsIndhbGwiOjAuODksIlIiOjE0LjMsIkwxIjo2Ni43LCJMMiI6NTAuOCwiTDNfNDUiOjQ0LjksIkwzXzkwIjo1Mi40LCJDIjo2Ni43LCJDMSI6NTIuNCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjAuMzc1IiwidHViZU9EIjo5LjUzLCJ3YWxsIjowLjg5LCJSIjoyOC42LCJMMSI6NjYuNywiTDIiOjUwLjgsIkwzXzQ1IjozOSwiTDNfOTAiOjM4LjEsIkMiOjY2LjcsIkMxIjozOC4xLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMC41IiwidHViZU9EIjoxMi43LCJ3YWxsIjoxLjY1LCJSIjoyOC42LCJMMSI6NzYuMiwiTDIiOjU3LjIsIkwzXzQ1Ijo0NS40LCJMM185MCI6NDcuNiwiQyI6NzYuMiwiQzEiOjQ3LjYsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIwLjc1IiwidHViZU9EIjoxOS4wNSwid2FsbCI6MS42NSwiUiI6MjguNiwiTDEiOjc2LjIsIkwyIjo1Ny4yLCJMM180NSI6NDUuNCwiTDNfOTAiOjQ3LjYsIkMiOjc2LjIsIkMxIjo0Ny42LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMSIsInR1YmVPRCI6MjUuNCwid2FsbCI6MS42NSwiUiI6MzguMSwiTDEiOjc2LjIsIkwyIjo1Ny4yLCJMM180NSI6NDEuNCwiTDNfOTAiOjM4LjEsIkMiOjc2LjIsIkMxIjozOC4xLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMS41IiwidHViZU9EIjozOC4xLCJ3YWxsIjoxLjY1LCJSIjo1Ny4yLCJMMSI6OTUuMywiTDIiOjYzLjUsIkwzXzQ1IjozOS44LCJMM185MCI6MzguMSwiQyI6OTUuMywiQzEiOjM4LjEsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIyIiwidHViZU9EIjo1MC44LCJ3YWxsIjoxLjY1LCJSIjo3Ni4yLCJMMSI6MTIwLjcsIkwyIjo3Ni4yLCJMM180NSI6NDQuNiwiTDNfOTAiOjQ0LjUsIkMiOjEyMC43LCJDMSI6NDQuNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjIuNSIsInR1YmVPRCI6NjMuNSwid2FsbCI6MS42NSwiUiI6OTUuMywiTDEiOjEzOS43LCJMMiI6ODUuNywiTDNfNDUiOjQ2LjIsIkwzXzkwIjo0NC40LCJDIjoxMzkuNywiQzEiOjQ0LjQsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIzIiwidHViZU9EIjo3Ni4yLCJ3YWxsIjoxLjY1LCJSIjoxMTQuMywiTDEiOjE1OC44LCJMMiI6OTIuMSwiTDNfNDUiOjQ0LjgsIkwzXzkwIjo0NC41LCJDIjoxNTguOCwiQzEiOjQ0LjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiI0IiwidHViZU9EIjoxMDEuNiwid2FsbCI6Mi4xMSwiUiI6MTUyLjQsIkwxIjoyMDMuMiwiTDIiOjExNC4zLCJMM180NSI6NTEuMiwiTDNfOTAiOjUwLjgsIkMiOjIwMy4yLCJDMSI6NTAuOCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjYiLCJ0dWJlT0QiOjE1Mi40LCJ3YWxsIjoyLjc3LCJSIjoyMjguNiwiTDEiOjI5Mi4xLCJMMiI6MTU4LjgsIkwzXzQ1Ijo2NC4xLCJMM185MCI6NjMuNSwiQyI6MjkyLjEsIkMxIjo2My41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfV19LCJkaW4xMTg2NSI6eyJib2VnZW4iOnsiQSI6W3siaWQiOiJETjA2IiwidHViZU9EIjo4LCJ3YWxsIjoxLCJSIjoyMCwiTDEiOjQ1LCJMMiI6MzMuMywiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjQ1LCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjA4IiwidHViZU9EIjoxMCwid2FsbCI6MSwiUiI6MjUsIkwxIjo1MCwiTDIiOjM1LjQsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo1MCwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4xMCIsInR1YmVPRCI6MTMsIndhbGwiOjEuNSwiUiI6MjYsIkwxIjo1MSwiTDIiOjM1LjgsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo1MSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4xNSIsInR1YmVPRCI6MTksIndhbGwiOjEuNSwiUiI6MzUsIkwxIjo2MCwiTDIiOjM5LjUsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo2MCwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4yMCIsInR1YmVPRCI6MjMsIndhbGwiOjEuNSwiUiI6NDAsIkwxIjo2NSwiTDIiOjQxLjYsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo2NSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4yNSIsInR1YmVPRCI6MjksIndhbGwiOjEuNSwiUiI6NTAsIkwxIjo5MCwiTDIiOjYwLjcsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo5MCwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4zMiIsInR1YmVPRCI6MzUsIndhbGwiOjEuNSwiUiI6NTUsIkwxIjo5NSwiTDIiOjYyLjgsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo5NSwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE40MCIsInR1YmVPRCI6NDEsIndhbGwiOjEuNSwiUiI6NjAsIkwxIjoxMDAsIkwyIjo2NC45LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6MTAwLCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjUwIiwidHViZU9EIjo1Mywid2FsbCI6MS41LCJSIjo3MCwiTDEiOjExMCwiTDIiOjY5LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6MTEwLCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjY1IiwidHViZU9EIjo3MCwid2FsbCI6MiwiUiI6ODAsIkwxIjoxMjAsIkwyIjo3My4xLCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6MTIwLCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjgwIiwidHViZU9EIjo4NSwid2FsbCI6MiwiUiI6OTAsIkwxIjoxNDUsIkwyIjo5Mi4zLCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MTQ1LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjEwMCIsInR1YmVPRCI6MTA0LCJ3YWxsIjoyLCJSIjoxMDAsIkwxIjoxNTUsIkwyIjo5Ni40LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MTU1LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjEyNSIsInR1YmVPRCI6MTI5LCJ3YWxsIjoyLCJSIjoxODcuNSwiTDEiOjI3MCwiTDIiOjE2MC4yLCJMM180NSI6ODIuNSwiTDNfOTAiOjgyLjUsIkMiOjI3MCwiQzEiOjgyLjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJETjE1MCIsInR1YmVPRCI6MTU0LCJ3YWxsIjoyLCJSIjoyMjUsIkwxIjozMjUsIkwyIjoxOTMuMiwiTDNfNDUiOjEwMCwiTDNfOTAiOjEwMCwiQyI6MzI1LCJDMSI6MTAwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiRE4yMDAiLCJ0dWJlT0QiOjIwNCwid2FsbCI6MiwiUiI6MzAwLCJMMSI6NDAwLCJMMiI6MjI0LjMsIkwzXzQ1IjoxMDAsIkwzXzkwIjoxMDAsIkMiOjQwMCwiQzEiOjEwMCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH1dLCJCIjpbeyJpZCI6Ik5XMTAuMiIsInR1YmVPRCI6MTAuMiwid2FsbCI6MS42LCJSIjoyMCwiTDEiOjQ1LCJMMiI6MzMuMywiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjQ1LCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzEzLjUiLCJ0dWJlT0QiOjEzLjUsIndhbGwiOjEuNiwiUiI6MjAsIkwxIjo0NSwiTDIiOjMzLjMsIkwzXzQ1IjoyNSwiTDNfOTAiOjI1LCJDIjo0NSwiQzEiOjI1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcxNy4yIiwidHViZU9EIjoxNy4yLCJ3YWxsIjoxLjYsIlIiOjI4LCJMMSI6NTMsIkwyIjozNi42LCJMM180NSI6MjUsIkwzXzkwIjoyNSwiQyI6NTMsIkMxIjoyNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMjEuMyIsInR1YmVPRCI6MjEuMywid2FsbCI6MS42LCJSIjozMCwiTDEiOjU1LCJMMiI6MzcuNCwiTDNfNDUiOjI1LCJMM185MCI6MjUsIkMiOjU1LCJDMSI6MjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzI2LjkiLCJ0dWJlT0QiOjI2LjksIndhbGwiOjEuNiwiUiI6MjguNSwiTDEiOjY4LjUsIkwyIjo1MS44LCJMM180NSI6NDAsIkwzXzkwIjo0MCwiQyI6NjguNSwiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlczMy43IiwidHViZU9EIjozMy43LCJ3YWxsIjoyLCJSIjozOCwiTDEiOjc4LCJMMiI6NTUuNywiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjc4LCJDMSI6NDAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzQyLjQiLCJ0dWJlT0QiOjQyLjQsIndhbGwiOjIsIlIiOjQ3LjUsIkwxIjo4Ny41LCJMMiI6NTkuNywiTDNfNDUiOjQwLCJMM185MCI6NDAsIkMiOjg3LjUsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XNDguMyIsInR1YmVPRCI6NDguMywid2FsbCI6MiwiUiI6NTcsIkwxIjo5NywiTDIiOjYzLjYsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjo5NywiQzEiOjQwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlc2MC4zIiwidHViZU9EIjo2MC4zLCJ3YWxsIjoyLCJSIjo3NiwiTDEiOjExNiwiTDIiOjcxLjUsIkwzXzQ1Ijo0MCwiTDNfOTAiOjQwLCJDIjoxMTYsIkMxIjo0MCwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XNzYuMSIsInR1YmVPRCI6NzYuMSwid2FsbCI6MiwiUiI6OTUsIkwxIjoxNTAsIkwyIjo5NC40LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MTUwLCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzg4LjkiLCJ0dWJlT0QiOjg4LjksIndhbGwiOjIuMywiUiI6MTE0LjUsIkwxIjoxNjkuNSwiTDIiOjEwMi40LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MTY5LjUsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMTE0LjMiLCJ0dWJlT0QiOjExNC4zLCJ3YWxsIjoyLjMsIlIiOjE1Mi41LCJMMSI6MjA3LjUsIkwyIjoxMTguMiwiTDNfNDUiOjU1LCJMM185MCI6NTUsIkMiOjIwNy41LCJDMSI6NTUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiJOVzEzOS43IiwidHViZU9EIjoxMzkuNywid2FsbCI6Mi42LCJSIjoxOTAuNSwiTDEiOjI0NS41LCJMMiI6MTMzLjksIkwzXzQ1Ijo1NSwiTDNfOTAiOjU1LCJDIjoyNDUuNSwiQzEiOjU1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiTlcxNjguMyIsInR1YmVPRCI6MTY4LjMsIndhbGwiOjIuNiwiUiI6MjI4LjUsIkwxIjoyODMuNSwiTDIiOjE0OS43LCJMM180NSI6NTUsIkwzXzkwIjo1NSwiQyI6MjgzLjUsIkMxIjo1NSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6Ik5XMjE5LjEiLCJ0dWJlT0QiOjIxOS4xLCJ3YWxsIjoyLjYsIlIiOjMwNSwiTDEiOjM4NSwiTDIiOjIwNi4zLCJMM180NSI6ODAsIkwzXzkwIjo4MCwiQyI6Mzg1LCJDMSI6ODAsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9XSwiQyI6W3siaWQiOiIwLjI1IiwidHViZU9EIjo2LjM1LCJ3YWxsIjowLjg5LCJSIjoxNC4zLCJMMSI6NjYuNywiTDIiOjUwLjgsIkwzXzQ1Ijo0NC45LCJMM185MCI6NTIuNCwiQyI6NjYuNywiQzEiOjUyLjQsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIwLjM3NSIsInR1YmVPRCI6OS41Mywid2FsbCI6MC44OSwiUiI6MjguNiwiTDEiOjY2LjcsIkwyIjo1MC44LCJMM180NSI6MzksIkwzXzkwIjozOC4xLCJDIjo2Ni43LCJDMSI6MzguMSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjAuNSIsInR1YmVPRCI6MTIuNywid2FsbCI6MS42NSwiUiI6MjguNiwiTDEiOjc2LjIsIkwyIjo1Ny4yLCJMM180NSI6NDUuNCwiTDNfOTAiOjQ3LjYsIkMiOjc2LjIsIkMxIjo0Ny42LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMC43NSIsInR1YmVPRCI6MTkuMDUsIndhbGwiOjEuNjUsIlIiOjI4LjYsIkwxIjo3Ni4yLCJMMiI6NTcuMiwiTDNfNDUiOjQ1LjQsIkwzXzkwIjo0Ny42LCJDIjo3Ni4yLCJDMSI6NDcuNiwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjEiLCJ0dWJlT0QiOjI1LjQsIndhbGwiOjEuNjUsIlIiOjM4LjEsIkwxIjo3Ni4yLCJMMiI6NTcuMiwiTDNfNDUiOjQxLjQsIkwzXzkwIjozOC4xLCJDIjo3Ni4yLCJDMSI6MzguMSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH0seyJpZCI6IjEuNSIsInR1YmVPRCI6MzguMSwid2FsbCI6MS42NSwiUiI6NTcuMiwiTDEiOjk1LjMsIkwyIjo2My41LCJMM180NSI6MzkuOCwiTDNfOTAiOjM4LjEsIkMiOjk1LjMsIkMxIjozOC4xLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMiIsInR1YmVPRCI6NTAuOCwid2FsbCI6MS42NSwiUiI6NzYuMiwiTDEiOjEyMC43LCJMMiI6NzYuMiwiTDNfNDUiOjQ0LjYsIkwzXzkwIjo0NC41LCJDIjoxMjAuNywiQzEiOjQ0LjUsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiIyLjUiLCJ0dWJlT0QiOjYzLjUsIndhbGwiOjEuNjUsIlIiOjk1LjMsIkwxIjoxMzkuNywiTDIiOjg1LjcsIkwzXzQ1Ijo0Ni4yLCJMM185MCI6NDQuNCwiQyI6MTM5LjcsIkMxIjo0NC40LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiMyIsInR1YmVPRCI6NzYuMiwid2FsbCI6MS42NSwiUiI6MTE0LjMsIkwxIjoxNTguOCwiTDIiOjkyLjEsIkwzXzQ1Ijo0NC44LCJMM185MCI6NDQuNSwiQyI6MTU4LjgsIkMxIjo0NC41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImJsb2NrZWRGaWVsZHMiOltdLCJibG9ja2VyIjpudWxsfSx7ImlkIjoiNCIsInR1YmVPRCI6MTAxLjYsIndhbGwiOjIuMTEsIlIiOjE1Mi40LCJMMSI6MjAzLjIsIkwyIjoxMTQuMywiTDNfNDUiOjUxLjIsIkwzXzkwIjo1MC44LCJDIjoyMDMuMiwiQzEiOjUwLjgsInN0YXR1cyI6InZlcmlmaXppZXJ0IiwiYmxvY2tlZEZpZWxkcyI6W10sImJsb2NrZXIiOm51bGx9LHsiaWQiOiI2IiwidHViZU9EIjoxNTIuNCwid2FsbCI6Mi43NywiUiI6MjI4LjYsIkwxIjoyOTIuMSwiTDIiOjE1OC44LCJMM180NSI6NjQuMSwiTDNfOTAiOjYzLjUsIkMiOjI5Mi4xLCJDMSI6NjMuNSwic3RhdHVzIjoidmVyaWZpemllcnQiLCJibG9ja2VkRmllbGRzIjpbXSwiYmxvY2tlciI6bnVsbH1dfSwicmVkdXppZXJ1bmciOnsic3RhdHVzIjoidmVyaWZpemllcnQiLCJxdWVsbGUiOiJFeGNlbCBSZWR1emllcnVuZ2VuLCBaZWlsZW4gNS04MyIsInJlaWhlbiI6eyJBIjp7ImxhYmVsIjoibWV0cmlzY2ggRE4iLCJyb3dzIjpbeyJ2b25JZCI6IkROMDgiLCJuYWNoSWQiOiJETjA2IiwiTCI6MzgsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTAiLCJuYWNoSWQiOiJETjA2IiwiTCI6MzgsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTAiLCJuYWNoSWQiOiJETjA4IiwiTCI6MzgsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTUiLCJuYWNoSWQiOiJETjA4IiwiTCI6NjAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTUiLCJuYWNoSWQiOiJETjEwIiwiTCI6NjAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjAiLCJuYWNoSWQiOiJETjEwIiwiTCI6NjAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjAiLCJuYWNoSWQiOiJETjE1IiwiTCI6NjAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjUiLCJuYWNoSWQiOiJETjE1IiwiTCI6NzAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjUiLCJuYWNoSWQiOiJETjIwIiwiTCI6NzAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMzIiLCJuYWNoSWQiOiJETjIwIiwiTCI6ODAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMzIiLCJuYWNoSWQiOiJETjI1IiwiTCI6ODAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONDAiLCJuYWNoSWQiOiJETjIwIiwiTCI6OTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONDAiLCJuYWNoSWQiOiJETjI1IiwiTCI6OTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONDAiLCJuYWNoSWQiOiJETjMyIiwiTCI6OTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONTAiLCJuYWNoSWQiOiJETjI1IiwiTCI6OTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONTAiLCJuYWNoSWQiOiJETjMyIiwiTCI6OTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONTAiLCJuYWNoSWQiOiJETjQwIiwiTCI6OTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONjUiLCJuYWNoSWQiOiJETjQwIiwiTCI6MTEwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjY1IiwibmFjaElkIjoiRE41MCIsIkwiOjExMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE44MCIsIm5hY2hJZCI6IkRONTAiLCJMIjoxMTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROODAiLCJuYWNoSWQiOiJETjY1IiwiTCI6MTEwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEwMCIsIm5hY2hJZCI6IkRONjUiLCJMIjoxMzUsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTAwIiwibmFjaElkIjoiRE44MCIsIkwiOjEzNSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xMjUiLCJuYWNoSWQiOiJETjgwIiwiTCI6MTUwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEyNSIsIm5hY2hJZCI6IkROMTAwIiwiTCI6MTUwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1MCIsIm5hY2hJZCI6IkROMTAwIiwiTCI6MTcwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1MCIsIm5hY2hJZCI6IkROMTI1IiwiTCI6MTcwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjIwMCIsIm5hY2hJZCI6IkROMTI1IiwiTCI6MjMwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjIwMCIsIm5hY2hJZCI6IkROMTUwIiwiTCI6MjMwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX0sIkIiOnsibGFiZWwiOiJJU09cL09EIE5XIiwicm93cyI6W3sidm9uSWQiOiJOVzEzLjUiLCJuYWNoSWQiOiJOVzEwLjIiLCJMIjozOCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxNy4yIiwibmFjaElkIjoiTlcxMC4yIiwiTCI6NjAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTcuMiIsIm5hY2hJZCI6Ik5XMTMuNSIsIkwiOjYwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzIxLjMiLCJuYWNoSWQiOiJOVzEzLjUiLCJMIjo2MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyMS4zIiwibmFjaElkIjoiTlcxNy4yIiwiTCI6NjAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjYuOSIsIm5hY2hJZCI6Ik5XMTcuMiIsIkwiOjYwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzI2LjkiLCJuYWNoSWQiOiJOVzIxLjMiLCJMIjo2MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlczMy43IiwibmFjaElkIjoiTlcyMS4zIiwiTCI6NzAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMzMuNyIsIm5hY2hJZCI6Ik5XMjYuOSIsIkwiOjcwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzQyLjQiLCJuYWNoSWQiOiJOVzI2LjkiLCJMIjo4MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc0Mi40IiwibmFjaElkIjoiTlczMy43IiwiTCI6ODAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNDguMyIsIm5hY2hJZCI6Ik5XMjYuOSIsIkwiOjkwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzQ4LjMiLCJuYWNoSWQiOiJOVzMzLjciLCJMIjo5MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc0OC4zIiwibmFjaElkIjoiTlc0Mi40IiwiTCI6OTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNjAuMyIsIm5hY2hJZCI6Ik5XMzMuNyIsIkwiOjEwMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc2MC4zIiwibmFjaElkIjoiTlc0Mi40IiwiTCI6MTAwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzYwLjMiLCJuYWNoSWQiOiJOVzQ4LjMiLCJMIjoxMDAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNzYuMSIsIm5hY2hJZCI6Ik5XNDguMyIsIkwiOjExMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc3Ni4xIiwibmFjaElkIjoiTlc2MC4zIiwiTCI6MTEwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzg4LjkiLCJuYWNoSWQiOiJOVzYwLjMiLCJMIjoxMTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XODguOSIsIm5hY2hJZCI6Ik5XNzYuMSIsIkwiOjExMCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxMTQuMyIsIm5hY2hJZCI6Ik5XNzYuMSIsIkwiOjEzNSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxMTQuMyIsIm5hY2hJZCI6Ik5XODguOSIsIkwiOjEzNSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxMzkuNyIsIm5hY2hJZCI6Ik5XODguOSIsIkwiOjE1MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxMzkuNyIsIm5hY2hJZCI6Ik5XMTE0LjMiLCJMIjoxNTAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTY4LjMiLCJuYWNoSWQiOiJOVzExNC4zIiwiTCI6MTcwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzE2OC4zIiwibmFjaElkIjoiTlcxMzkuNyIsIkwiOjE3MCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyMTkuMSIsIm5hY2hJZCI6Ik5XMTM5LjciLCJMIjoyMzAsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjE5LjEiLCJuYWNoSWQiOiJOVzE2OC4zIiwiTCI6MjMwLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX0sIkMiOnsibGFiZWwiOiJab2xsIiwicm93cyI6W3sidm9uSWQiOiIwLjM3NSIsIm5hY2hJZCI6IjAuMjUiLCJMIjo0MS4yOCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMC41IiwibmFjaElkIjoiMC4yNSIsIkwiOjQ3LjYzLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIwLjUiLCJuYWNoSWQiOiIwLjM3NSIsIkwiOjQ3LjYzLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIwLjc1IiwibmFjaElkIjoiMC4zNzUiLCJMIjo1MC44LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIwLjc1IiwibmFjaElkIjoiMC41IiwiTCI6NTMuOTgsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjEiLCJuYWNoSWQiOiIwLjUiLCJMIjo2My41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIxIiwibmFjaElkIjoiMC43NSIsIkwiOjUzLjk4LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIxLjUiLCJuYWNoSWQiOiIwLjc1IiwiTCI6NzYuMiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMS41IiwibmFjaElkIjoiMSIsIkwiOjYzLjUsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjIiLCJuYWNoSWQiOiIxIiwiTCI6ODUuNzMsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjIiLCJuYWNoSWQiOiIxLjUiLCJMIjo2My41LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIyLjUiLCJuYWNoSWQiOiIxLjUiLCJMIjo4NS43Mywic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMi41IiwibmFjaElkIjoiMiIsIkwiOjYzLjUsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjMiLCJuYWNoSWQiOiIxLjUiLCJMIjoxMDcuOTUsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjMiLCJuYWNoSWQiOiIyIiwiTCI6ODUuNzMsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjMiLCJuYWNoSWQiOiIyLjUiLCJMIjo2Ni42OCwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiNCIsIm5hY2hJZCI6IjIiLCJMIjoxMzAuMTgsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjQiLCJuYWNoSWQiOiIyLjUiLCJMIjoxMDcuOTUsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjQiLCJuYWNoSWQiOiIzIiwiTCI6OTguNDMsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjYiLCJuYWNoSWQiOiIzIiwiTCI6MTg0LjE1LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiI2IiwibmFjaElkIjoiNCIsIkwiOjE0Mi44OCwic3RhdHVzIjoidmVyaWZpemllcnQifV19fX0sInRTdHVlY2tHbGVpY2giOnsic3RhdHVzIjoidmVyaWZpemllcnQiLCJxdWVsbGUiOiJULVN0dWVja2UueGxzeCAoQmVybmQsIDIzLjA3LjIwMjYpLCBCbGF0dCBUYWJsZSAxIC0gZG9wcGVsdCBleHRyYWhpZXJ0IChvcGVucHl4bCArIFJvaC1YTUwsIDAgQWJ3ZWljaHVuZ2VuKSB1bmQgZ2VnZW4gZGllIHZlcmlmaXppZXJ0ZW4gUnVuZGUtNC1XZXJ0ZSBnZXBydWVmdC4gRE4yMDA6IGw9MzAwIHdhciBlaW4gVWViZXJ0cmFndW5nc2ZlaGxlciBpbiBkZXIgVGFiZWxsZSwgQmVybmQgaGF0IGFtIDI3LjA3LjIwMjYgbD02MDAgYmVzdGFldGlndC4iLCJyZWloZW4iOnsiQSI6eyJzdGF0dXMiOiJ2ZXJpZml6aWVydCIsImxhYmVsIjoibWV0cmlzY2ggRE4iLCJyb3dzIjpbeyJpZCI6IkROMDYiLCJMMCI6MzAsIkwiOjYwLCJMMiI6MzAsIkwxIjoiMTEifSx7ImlkIjoiRE4wOCIsIkwwIjozMCwiTCI6NjAsIkwyIjozMCwiTDEiOiIxMSJ9LHsiaWQiOiJETjEwIiwiTDAiOjM1LCJMIjo3MCwiTDIiOjM1LCJMMSI6IjExIn0seyJpZCI6IkROMTUiLCJMMCI6MzUsIkwiOjcwLCJMMiI6MzUsIkwxIjoiMTEgXHUwMGIxIDAsNTAifSx7ImlkIjoiRE4yMCIsIkwwIjo0MCwiTCI6ODAsIkwyIjo0MCwiTDEiOiIxMyBcdTAwYjEgMCw1MCJ9LHsiaWQiOiJETjI1IiwiTDAiOjUwLCJMIjoxMDAsIkwyIjo1MCwiTDEiOiIxNiBcdTAwYjEgMCw3NSJ9LHsiaWQiOiJETjMyIiwiTDAiOjU1LCJMIjoxMTAsIkwyIjo1NSwiTDEiOiIxOSw1IFx1MDBiMSAwLDc1In0seyJpZCI6IkRONDAiLCJMMCI6NjAsIkwiOjEyMCwiTDIiOjYwLCJMMSI6IjIzIFx1MDBiMSAxIn0seyJpZCI6IkRONTAiLCJMMCI6ODAsIkwiOjE2MCwiTDIiOjgwLCJMMSI6IjMwIFx1MDBiMSAxIn0seyJpZCI6IkRONjUiLCJMMCI6MTA1LCJMIjoyMTAsIkwyIjoxMDUsIkwxIjoiNDAgXHUwMGIxIDEsNTAifSx7ImlkIjoiRE44MCIsIkwwIjoxMzAsIkwiOjI2MCwiTDIiOjEzMCwiTDEiOiI0Nyw1IFx1MDBiMSAxLDUwIn0seyJpZCI6IkROMTAwIiwiTDAiOjE1NSwiTCI6MzEwLCJMMiI6MTU1LCJMMSI6IjU4IFx1MDBiMSAxLDUwIn0seyJpZCI6IkROMTI1IiwiTDAiOjE4Ny41LCJMIjozNzUsIkwyIjoxODcuNSwiTDEiOiI3NCBcdTAwYjEgMyJ9LHsiaWQiOiJETjE1MCIsIkwwIjoyMjUsIkwiOjQ1MCwiTDIiOjIyNSwiTDEiOiI5MCBcdTAwYjEgMyJ9LHsiaWQiOiJETjIwMCIsIkwwIjozMDAsIkwiOjYwMCwiTDIiOjMwMCwiTDEiOiIxMTUgXHUwMGIxIDMifV19LCJCIjp7InN0YXR1cyI6InZlcmlmaXppZXJ0IiwibGFiZWwiOiJJU09cL09EIE5XIiwicm93cyI6W3siaWQiOiJOVzEwLjIiLCJMMCI6MzAsIkwiOjYwLCJMMiI6MzAsIkwxIjoiMTEifSx7ImlkIjoiTlcxMy41IiwiTDAiOjMyLCJMIjo2NCwiTDIiOjMyLCJMMSI6IjExIn0seyJpZCI6Ik5XMTcuMiIsIkwwIjozNCwiTCI6NjgsIkwyIjozNCwiTDEiOiIxMCwxIFx1MDBiMSAwLDUifSx7ImlkIjoiTlcyMS4zIiwiTDAiOjM2LCJMIjo3MiwiTDIiOjM2LCJMMSI6IjEyLDIgXHUwMGIxIDAsNSJ9LHsiaWQiOiJOVzI2LjkiLCJMMCI6NTUsIkwiOjExMCwiTDIiOjU1LCJMMSI6IjE1IFx1MDBiMSAwLDUifSx7ImlkIjoiTlczMy43IiwiTDAiOjYwLCJMIjoxMjAsIkwyIjo2MCwiTDEiOiIxOCw0IFx1MDBiMSAwLDc1In0seyJpZCI6Ik5XNDIuNCIsIkwwIjo2NSwiTCI6MTMwLCJMMiI6NjUsIkwxIjoiMjMsMiBcdTAwYjEgMCw3NSJ9LHsiaWQiOiJOVzQ4LjMiLCJMMCI6NjUsIkwiOjEzMCwiTDIiOjY1LCJMMSI6IjI2LDcgXHUwMGIxIDEifSx7ImlkIjoiTlc2MC4zIiwiTDAiOjkwLCJMIjoxODAsIkwyIjo5MCwiTDEiOiIzMyw3IFx1MDBiMSAxIn0seyJpZCI6Ik5XNzYuMSIsIkwwIjoxMTAsIkwiOjIyMCwiTDIiOjExMCwiTDEiOiI0MywxIFx1MDBiMSAxLDUifSx7ImlkIjoiTlc4OC45IiwiTDAiOjEzMCwiTCI6MjYwLCJMMiI6MTMwLCJMMSI6IjQ5LDUgXHUwMGIxIDEsNSJ9LHsiaWQiOiJOVzExNC4zIiwiTDAiOjE2MCwiTCI6MzIwLCJMMiI6MTYwLCJMMSI6IjYzLDIgXHUwMGIxIDEsNSJ9LHsiaWQiOiJOVzEzOS43IiwiTDAiOjIwMCwiTCI6NDAwLCJMMiI6MjAwLCJMMSI6Ijc5LDkgXHUwMGIxIDMifSx7ImlkIjoiTlcxNjguMyIsIkwwIjoyNTAsIkwiOjUwMCwiTDIiOjI1MCwiTDEiOiI5NywyIFx1MDBiMSAzIn0seyJpZCI6Ik5XMjE5LjEiLCJMMCI6MzAwLCJMIjo2MDAsIkwyIjozMDAsIkwxIjoiMTIzLDYgXHUwMGIxIDQifV19LCJDIjp7InN0YXR1cyI6InZlcmlmaXppZXJ0IiwibGFiZWwiOiJab2xsIiwicm93cyI6W3siaWQiOiIwLjI1IiwiTDAiOjQ0LjUsIkwiOjg5LCJMMiI6NDQuNSwiTDEiOiIxMSJ9LHsiaWQiOiIwLjM3NSIsIkwwIjo0NC41LCJMIjo4OSwiTDIiOjQ0LjUsIkwxIjoiMTEifSx7ImlkIjoiMC41IiwiTDAiOjQ3LjYsIkwiOjk1LjIsIkwyIjo0Ny42LCJMMSI6IjExIn0seyJpZCI6IjAuNzUiLCJMMCI6NTAuOCwiTCI6MTAxLjYsIkwyIjo1MC44LCJMMSI6IjExIFx1MDBiMSAwLDUifSx7ImlkIjoiMSIsIkwwIjo1NCwiTCI6MTA4LCJMMiI6NTQsIkwxIjoiMTQsMiBcdTAwYjEgMCw1In0seyJpZCI6IjEuNSIsIkwwIjo2MC4zLCJMIjoxMjAuNiwiTDIiOjYwLjMsIkwxIjoiMjEsMSBcdTAwYjEgMCw3NSJ9LHsiaWQiOiIyIiwiTDAiOjczLCJMIjoxNDYsIkwyIjo3MywiTDEiOiIyOCw5IFx1MDBiMSAxIn0seyJpZCI6IjIuNSIsIkwwIjo3OS40LCJMIjoxNTguOCwiTDIiOjc5LjQsIkwxIjoiMzUsMyBcdTAwYjEgMSJ9LHsiaWQiOiIzIiwiTDAiOjg1LjcsIkwiOjE3MS40LCJMMiI6ODUuNywiTDEiOiI0MywxIFx1MDBiMSAxLDUifSx7ImlkIjoiNCIsIkwwIjoxMDQuOCwiTCI6MjA5LjYsIkwyIjoxMDQuOCwiTDEiOiI1Niw4IFx1MDBiMSAxLDUifSx7ImlkIjoiNiIsIkwwIjoxNDIuOSwiTCI6Mjg1LjgsIkwyIjoxNDIuOSwiTDEiOiI5MCwxIFx1MDBiMSAzIn1dfX19LCJ0U3R1ZWNrUmVkdXppZXJ0Ijp7InN0YXR1cyI6InZlcmlmaXppZXJ0IiwicXVlbGxlIjoiVC1TdHVlY2tlLnhsc3ggKEJlcm5kLCAyMy4wNy4yMDI2KSwgQmxhdHQgVGFibGUgMSAtIGRvcHBlbHQgZXh0cmFoaWVydCAob3BlbnB5eGwgKyBSb2gtWE1MLCAwIEFid2VpY2h1bmdlbikuIEROMjAwIHJlZHV6aWVydCAoMjAwXC8xMDAsIDIwMFwvMTI1LCAyMDBcLzE1MCkgaXN0IHNlaXQgQmVybmRzIEJlc3RhZXRpZ3VuZyB2b20gMjcuMDcuMjAyNiBmcmVpOiBsID0gNjAwIChcImhhYmUgaWNoIHdvaGwgdmVyZ2Vzc2VuIGVpbnp1dHJhZ2VuXCIpLiIsInJlaWhlbiI6eyJBIjp7InN0YXR1cyI6InZlcmlmaXppZXJ0Iiwicm93cyI6W3sidm9uSWQiOiJETjA4IiwibmFjaElkIjoiRE4wNiIsIkwwIjozMCwiTCI6NjAsIkwyIjozMCwiTDEiOiIxMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTAiLCJuYWNoSWQiOiJETjA2IiwiTDAiOjMwLCJMIjo2MCwiTDIiOjMwLCJMMSI6IjExIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xMCIsIm5hY2hJZCI6IkROMDgiLCJMMCI6MzAsIkwiOjYwLCJMMiI6MzAsIkwxIjoiMTEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1IiwibmFjaElkIjoiRE4wOCIsIkwwIjozNSwiTCI6NzAsIkwyIjozNSwiTDEiOiIxMSBcdTAwYjEgMCw1MCIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTUiLCJuYWNoSWQiOiJETjEwIiwiTDAiOjM1LCJMIjo3MCwiTDIiOjM1LCJMMSI6IjExIFx1MDBiMSAwLDUwIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4yMCIsIm5hY2hJZCI6IkROMTAiLCJMMCI6NDAsIkwiOjgwLCJMMiI6NDAsIkwxIjoiMTMgXHUwMGIxIDAsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjIwIiwibmFjaElkIjoiRE4xNSIsIkwwIjo0MCwiTCI6ODAsIkwyIjo0MCwiTDEiOiIxMyBcdTAwYjEgMCw1MCIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjUiLCJuYWNoSWQiOiJETjE1IiwiTDAiOjUwLCJMIjoxMDAsIkwyIjo1MCwiTDEiOiIxNiBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMjUiLCJuYWNoSWQiOiJETjIwIiwiTDAiOjUwLCJMIjoxMDAsIkwyIjo1MCwiTDEiOiIxNiBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMzIiLCJuYWNoSWQiOiJETjE1IiwiTDAiOjU1LCJMIjoxMTAsIkwyIjo1NSwiTDEiOiIxOSBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMzIiLCJuYWNoSWQiOiJETjIwIiwiTDAiOjU1LCJMIjoxMTAsIkwyIjo1NSwiTDEiOiIxOSBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMzIiLCJuYWNoSWQiOiJETjI1IiwiTDAiOjU1LCJMIjoxMTAsIkwyIjo1NSwiTDEiOiIxOSBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONDAiLCJuYWNoSWQiOiJETjIwIiwiTDAiOjYwLCJMIjoxMjAsIkwyIjo2MCwiTDEiOiIyMiBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONDAiLCJuYWNoSWQiOiJETjI1IiwiTDAiOjYwLCJMIjoxMjAsIkwyIjo2MCwiTDEiOiIyMiBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkRONDAiLCJuYWNoSWQiOiJETjMyIiwiTDAiOjYwLCJMIjoxMjAsIkwyIjo2MCwiTDEiOiIyMiw1IFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE41MCIsIm5hY2hJZCI6IkROMjUiLCJMMCI6ODAsIkwiOjE2MCwiTDIiOjgwLCJMMSI6IjI4IFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE41MCIsIm5hY2hJZCI6IkROMzIiLCJMMCI6ODAsIkwiOjE2MCwiTDIiOjgwLCJMMSI6IjI4LDUgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjUwIiwibmFjaElkIjoiRE40MCIsIkwwIjo4MCwiTCI6MTYwLCJMMiI6ODAsIkwxIjoiMjkgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjY1IiwibmFjaElkIjoiRE4zMiIsIkwwIjoxMDUsIkwiOjIxMCwiTDIiOjgwLCJMMSI6IjM3IFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE42NSIsIm5hY2hJZCI6IkRONDAiLCJMMCI6MTA1LCJMIjoyMTAsIkwyIjo4MCwiTDEiOiIzNyw1IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE42NSIsIm5hY2hJZCI6IkRONTAiLCJMMCI6MTA1LCJMIjoyMTAsIkwyIjo4MCwiTDEiOiIzOCw1IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE44MCIsIm5hY2hJZCI6IkRONDAiLCJMMCI6MTMwLCJMIjoyNjAsIkwyIjoxMDUsIkwxIjoiNDUgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjgwIiwibmFjaElkIjoiRE41MCIsIkwwIjoxMzAsIkwiOjI2MCwiTDIiOjEwNSwiTDEiOiI0NiBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROODAiLCJuYWNoSWQiOiJETjY1IiwiTDAiOjEzMCwiTCI6MjYwLCJMMiI6MTA1LCJMMSI6IjQ3LDUgXHUwMGIxIDEsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEwMCIsIm5hY2hJZCI6IkRONTAiLCJMMCI6MTU1LCJMIjozMTAsIkwyIjoxMzAsIkwxIjoiNTUsNSBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTAwIiwibmFjaElkIjoiRE42NSIsIkwwIjoxNTUsIkwiOjMxMCwiTDIiOjEzMCwiTDEiOiI1NyBcdTAwYjEgMSw1MCIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTAwIiwibmFjaElkIjoiRE44MCIsIkwwIjoxNTUsIkwiOjMxMCwiTDIiOjEzMCwiTDEiOiI1NyBcdTAwYjEgMSw1MCIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTI1IiwibmFjaElkIjoiRE42NSIsIkwwIjoxODcuNSwiTCI6Mzc1LCJMMiI6MTU1LCJMMSI6IjY5LDUgXHUwMGIxIDEsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjEyNSIsIm5hY2hJZCI6IkROODAiLCJMMCI6MTg3LjUsIkwiOjM3NSwiTDIiOjE1NSwiTDEiOiI2OSw1IFx1MDBiMSAxLDUwIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4xMjUiLCJuYWNoSWQiOiJETjEwMCIsIkwwIjoxODcuNSwiTCI6Mzc1LCJMMiI6MTU1LCJMMSI6IjcwLDUgXHUwMGIxIDEsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjE1MCIsIm5hY2hJZCI6IkROODAiLCJMMCI6MjI1LCJMIjo0NTAsIkwyIjoxODcuNSwiTDEiOiI4MiBcdTAwYjEgMSw1MCIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTUwIiwibmFjaElkIjoiRE4xMDAiLCJMMCI6MjI1LCJMIjo0NTAsIkwyIjoxODcuNSwiTDEiOiI4MyBcdTAwYjEgMSw1MCIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IkROMTUwIiwibmFjaElkIjoiRE4xMjUiLCJMMCI6MjI1LCJMIjo0NTAsIkwyIjoxODcuNSwiTDEiOiI4Niw1IFx1MDBiMSAzIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4yMDAiLCJuYWNoSWQiOiJETjEwMCIsIkwwIjozMDAsIkwiOjYwMCwiTDIiOjIyNSwiTDEiOiIxMDggXHUwMGIxIDEsNTAiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJETjIwMCIsIm5hY2hJZCI6IkROMTI1IiwiTDAiOjMwMCwiTCI6NjAwLCJMMiI6MjI1LCJMMSI6IjExMSw1IFx1MDBiMSAzIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiRE4yMDAiLCJuYWNoSWQiOiJETjE1MCIsIkwwIjozMDAsIkwiOjYwMCwiTDIiOjIyNSwiTDEiOiIxMTUgXHUwMGIxIDMiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX0sIkIiOnsic3RhdHVzIjoidmVyaWZpemllcnQiLCJyb3dzIjpbeyJ2b25JZCI6Ik5XMTMuNSIsIm5hY2hJZCI6Ik5XMTAuMiIsIkwwIjozMiwiTCI6NjQsIkwyIjozMiwiTDEiOiIxMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTcuMiIsIm5hY2hJZCI6Ik5XMTAuMiIsIkwwIjozNCwiTCI6NjgsIkwyIjozNCwiTDEiOiIxMCwxIFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzE3LjIiLCJuYWNoSWQiOiJOVzEzLjUiLCJMMCI6MzQsIkwiOjY4LCJMMiI6MzQsIkwxIjoiMTAsMSBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyMS4zIiwibmFjaElkIjoiTlcxMC4yIiwiTDAiOjM2LCJMIjo3MiwiTDIiOjM2LCJMMSI6IjEyLDIgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjEuMyIsIm5hY2hJZCI6Ik5XMTMuNSIsIkwwIjozNiwiTCI6NzIsIkwyIjozNiwiTDEiOiIxMiwyIFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzIxLjMiLCJuYWNoSWQiOiJOVzE3LjIiLCJMMCI6MzYsIkwiOjcyLCJMMiI6MzYsIkwxIjoiMTIsMiBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyNi45IiwibmFjaElkIjoiTlcxMy41IiwiTDAiOjU1LCJMIjoxMTAsIkwyIjo1NSwiTDEiOiIxNSBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyNi45IiwibmFjaElkIjoiTlcxNy4yIiwiTDAiOjU1LCJMIjoxMTAsIkwyIjo1NSwiTDEiOiIxNSBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyNi45IiwibmFjaElkIjoiTlcyMS4zIiwiTDAiOjU1LCJMIjoxMTAsIkwyIjo1NSwiTDEiOiIxNSBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlczMy43IiwibmFjaElkIjoiTlcxNy4yIiwiTDAiOjYwLCJMIjoxMjAsIkwyIjo2MCwiTDEiOiIxOCw0IFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzMzLjciLCJuYWNoSWQiOiJOVzIxLjMiLCJMMCI6NjAsIkwiOjEyMCwiTDIiOjYwLCJMMSI6IjE4LDQgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMzMuNyIsIm5hY2hJZCI6Ik5XMjYuOSIsIkwwIjo2MCwiTCI6MTIwLCJMMiI6NjAsIkwxIjoiMTgsNCBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc0Mi40IiwibmFjaElkIjoiTlcyMS4zIiwiTDAiOjY1LCJMIjoxMzAsIkwyIjo2NSwiTDEiOiIyMiw3IFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzQyLjQiLCJuYWNoSWQiOiJOVzI2LjkiLCJMMCI6NjUsIkwiOjEzMCwiTDIiOjY1LCJMMSI6IjIyLDcgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNDIuNCIsIm5hY2hJZCI6Ik5XMzMuNyIsIkwwIjo2NSwiTCI6MTMwLCJMMiI6NjUsIkwxIjoiMjIsNyBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNDguMyIsIm5hY2hJZCI6Ik5XMjYuOSIsIkwwIjo2NSwiTCI6MTMwLCJMMiI6NjUsIkwxIjoiMjUsNyBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc0OC4zIiwibmFjaElkIjoiTlczMy43IiwiTDAiOjY1LCJMIjoxMzAsIkwyIjo2NSwiTDEiOiIyNSw3IFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc0OC4zIiwibmFjaElkIjoiTlc0Mi40IiwiTDAiOjY1LCJMIjoxMzAsIkwyIjo2NSwiTDEiOiIyNiwyIFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc2MC4zIiwibmFjaElkIjoiTlczMy43IiwiTDAiOjkwLCJMIjoxODAsIkwyIjo5MCwiTDEiOiIzMSw3IFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc2MC4zIiwibmFjaElkIjoiTlc0Mi40IiwiTDAiOjkwLCJMIjoxODAsIkwyIjo5MCwiTDEiOiIzMiwyIFx1MDBiMSAwLDc1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc2MC4zIiwibmFjaElkIjoiTlc0OC4zIiwiTDAiOjkwLCJMIjoxODAsIkwyIjo5MCwiTDEiOiIzMiw3IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc3Ni4xIiwibmFjaElkIjoiTlc0Mi40IiwiTDAiOjExMCwiTCI6MjIwLCJMMiI6OTAsIkwxIjoiNDAsMSBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XNzYuMSIsIm5hY2hJZCI6Ik5XNDguMyIsIkwwIjoxMTAsIkwiOjIyMCwiTDIiOjkwLCJMMSI6IjQwLDYgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzc2LjEiLCJuYWNoSWQiOiJOVzYwLjMiLCJMMCI6MTEwLCJMIjoyMjAsIkwyIjo5MCwiTDEiOiI0MSw2IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc4OC45IiwibmFjaElkIjoiTlc0OC4zIiwiTDAiOjEzMCwiTCI6MjYwLCJMMiI6MTEwLCJMMSI6IjQ3IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc4OC45IiwibmFjaElkIjoiTlc2MC4zIiwiTDAiOjEzMCwiTCI6MjYwLCJMMiI6MTEwLCJMMSI6IjQ4IFx1MDBiMSAxIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlc4OC45IiwibmFjaElkIjoiTlc3Ni4xIiwiTDAiOjEzMCwiTCI6MjYwLCJMMiI6MTEwLCJMMSI6IjQ5LDUgXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTE0LjMiLCJuYWNoSWQiOiJOVzYwLjMiLCJMMCI6MTYwLCJMIjozMjAsIkwyIjoxMzAsIkwxIjoiNjAsNyBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTE0LjMiLCJuYWNoSWQiOiJOVzc2LjEiLCJMMCI6MTYwLCJMIjozMjAsIkwyIjoxMzAsIkwxIjoiNjIsMiBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxMTQuMyIsIm5hY2hJZCI6Ik5XODguOSIsIkwwIjoxNjAsIkwiOjMyMCwiTDIiOjEzMCwiTDEiOiI2MiwyIFx1MDBiMSAxLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzEzOS43IiwibmFjaElkIjoiTlc3Ni4xIiwiTDAiOjIwMCwiTCI6NDAwLCJMMiI6MTYwLCJMMSI6Ijc0LDkgXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMTM5LjciLCJuYWNoSWQiOiJOVzg4LjkiLCJMMCI6MjAwLCJMIjo0MDAsIkwyIjoxNjAsIkwxIjoiNzQsOSBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxMzkuNyIsIm5hY2hJZCI6Ik5XMTE0LjMiLCJMMCI6MjAwLCJMIjo0MDAsIkwyIjoxNjAsIkwxIjoiNzUsOSBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcxNjguMyIsIm5hY2hJZCI6Ik5XODguOSIsIkwwIjoyNTAsIkwiOjUwMCwiTDIiOjIwMCwiTDEiOiI4OSwyIFx1MDBiMSAxLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzE2OC4zIiwibmFjaElkIjoiTlcxMTQuMyIsIkwwIjoyNTAsIkwiOjUwMCwiTDIiOjIwMCwiTDEiOiI5MCwyIFx1MDBiMSAxLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiJOVzE2OC4zIiwibmFjaElkIjoiTlcxMzkuNyIsIkwwIjoyNTAsIkwiOjUwMCwiTDIiOjIwMCwiTDEiOiI5NCwyIFx1MDBiMSAzIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyMTkuMSIsIm5hY2hJZCI6Ik5XMTE0LjMiLCJMMCI6MzAwLCJMIjo2MDAsIkwyIjoyNTAsIkwxIjoiMTE1LDYgXHUwMGIxIDEsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6Ik5XMjE5LjEiLCJuYWNoSWQiOiJOVzEzOS43IiwiTDAiOjMwMCwiTCI6NjAwLCJMMiI6MjUwLCJMMSI6IjExOSw2IFx1MDBiMSAzIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiTlcyMTkuMSIsIm5hY2hJZCI6Ik5XMTY4LjMiLCJMMCI6MzAwLCJMIjo2MDAsIkwyIjoyNTAsIkwxIjoiMTIyLDYgXHUwMGIxIDMiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX0sIkMiOnsic3RhdHVzIjoidmVyaWZpemllcnQiLCJyb3dzIjpbeyJ2b25JZCI6IjAuMzc1IiwibmFjaElkIjoiMC4yNSIsIkwwIjo0NC41LCJMIjo4OSwiTDIiOjQ0LjUsIkwxIjoiMTEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIwLjUiLCJuYWNoSWQiOiIwLjI1IiwiTDAiOjQ3LjYsIkwiOjk1LjIsIkwyIjo0Ny42LCJMMSI6IjExIiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMC41IiwibmFjaElkIjoiMC4zNzUiLCJMMCI6NDcuNiwiTCI6OTUuMiwiTDIiOjQ3LjYsIkwxIjoiMTEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIwLjc1IiwibmFjaElkIjoiMC4zNzUiLCJMMCI6NTAuOCwiTCI6MTAxLjYsIkwyIjo1MC44LCJMMSI6IjExIFx1MDBiMSAwLDUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIwLjc1IiwibmFjaElkIjoiMC41IiwiTDAiOjUwLjgsIkwiOjEwMS42LCJMMiI6NTAuOCwiTDEiOiIxMSBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMSIsIm5hY2hJZCI6IjAuNSIsIkwwIjo1NCwiTCI6MTA4LCJMMiI6NTQsIkwxIjoiMTQsMiBcdTAwYjEgMCw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiMSIsIm5hY2hJZCI6IjAuNzUiLCJMMCI6NTQsIkwiOjEwOCwiTDIiOjU0LCJMMSI6IjE0LDIgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjEuNSIsIm5hY2hJZCI6IjAuNzUiLCJMMCI6NjAuMywiTCI6MTIwLjYsIkwyIjo2MC4zLCJMMSI6IjIwLDYgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjEuNSIsIm5hY2hJZCI6IjEiLCJMMCI6NjAuMywiTCI6MTIwLjYsIkwyIjo2MC4zLCJMMSI6IjIwLDYgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjIiLCJuYWNoSWQiOiIxIiwiTDAiOjczLCJMIjoxNDYsIkwyIjo2Ni43LCJMMSI6IjI2LDkgXHUwMGIxIDAsNSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjIiLCJuYWNoSWQiOiIxLjUiLCJMMCI6NzMsIkwiOjE0NiwiTDIiOjY2LjcsIkwxIjoiMjcsNCBcdTAwYjEgMCw3NSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjIuNSIsIm5hY2hJZCI6IjEuNSIsIkwwIjo3OS40LCJMIjoxNTguOCwiTDIiOjczLCJMMSI6IjMzLDggXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIyLjUiLCJuYWNoSWQiOiIyIiwiTDAiOjc5LjQsIkwiOjE1OC44LCJMMiI6NzMsIkwxIjoiMzUsMyBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjMiLCJuYWNoSWQiOiIxLjUiLCJMMCI6ODUuNywiTCI6MTcxLjQsIkwyIjo3OS40LCJMMSI6IjQwLDEgXHUwMGIxIDAsNzUiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiIzIiwibmFjaElkIjoiMiIsIkwwIjo4NS43LCJMIjoxNzEuNCwiTDIiOjc5LjQsIkwxIjoiNDEsNiBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjMiLCJuYWNoSWQiOiIyLjUiLCJMMCI6ODUuNywiTCI6MTcxLjQsIkwyIjo3OS40LCJMMSI6IjQxLDYgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiI0IiwibmFjaElkIjoiMiIsIkwwIjoxMDQuOCwiTCI6MjA5LjYsIkwyIjo5OC40LCJMMSI6IjU0LDMgXHUwMGIxIDEiLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsidm9uSWQiOiI0IiwibmFjaElkIjoiMi41IiwiTDAiOjEwNC44LCJMIjoyMDkuNiwiTDIiOjk4LjQsIkwxIjoiNTQsMyBcdTAwYjEgMSIsInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJ2b25JZCI6IjQiLCJuYWNoSWQiOiIzIiwiTDAiOjEwNC44LCJMIjoyMDkuNiwiTDIiOjk4LjQsIkwxIjoiNTUsOCBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiNiIsIm5hY2hJZCI6IjMiLCJMMCI6MTQyLjksIkwiOjI4NS44LCJMMiI6MTIzLjgsIkwxIjoiODMsMSBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifSx7InZvbklkIjoiNiIsIm5hY2hJZCI6IjQiLCJMMCI6MTQyLjksIkwiOjI4NS44LCJMMiI6MTMwLjIsIkwxIjoiODMsMSBcdTAwYjEgMSw1Iiwic3RhdHVzIjoidmVyaWZpemllcnQifV19fX19LCJjb25uZWN0Ijp7Im1hcHBpbmciOnsic3RhdHVzIjoidmVyaWZpemllcnQiLCJzZXJpZW4iOnsiMS40NDA0Ijp7IndlcmtzdG9mZiI6IjEuNDQwNCIsIndlcmtzdG9mZkRhdGVuYmxhdHQiOiIxLjQ0MDQifSwiMS40NDM1Ijp7IndlcmtzdG9mZiI6IjEuNDQzNSIsIndlcmtzdG9mZkRhdGVuYmxhdHQiOiIxLjQ0MzUtQk4yIn19LCJiYXVmb3JtZW4iOnsiQ0YiOnsicHJvZHVrdCI6IkNvbm5lY3QtRmxhbnNjaCJ9LCJDRkkiOnsicHJvZHVrdCI6IkNvbm5lY3QtRmxhbnNjaCBJbmxpbmUifX0sImdlbWVpbnNhbSI6eyJsb2NraW5nUmluZ1dlcmtzdG9mZiI6IjEuNDQwNCIsInNjaHJhdWJlbk11dHRlcm5XZXJrc3RvZmZlIjpbIjEuNDQwNCIsIjEuNDMwMSJdLCJyYUlubmVuIjowLjQsInJhQXVzc2VuIjowLjgsImVsZWt0cm9wb2xpZXJlbk9wdGlvbmFsIjp0cnVlfX0sImNmIjp7ImlkIjoiQ0YiLCJxdWVsbGUiOiJIZXJzdGVsbGVyZGF0ZW5ibGF0dCBDb25uZWN0LUZsYW5zY2gsIFNlaXRlbiAxLTg7IENGLUNGSS1NYXNzZS1nZXNpY2hlcnQtMjAyNi0wNy0xNi5tZCAodW5hYmhhZW5naWdlciBBYmdsZWljaCAyMDI2LTA3LTIyKSIsImdlb21ldHJpZVN0YXR1cyI6InZlcmlmaXppZXJ0IiwiZ2VvbWV0cmllR2VtZWluc2FtRnVlclNlcmllbiI6dHJ1ZSwicmVpaGVuIjp7IkFTVE0iOnsibGFiZWwiOiJBU1RNIEEyNjktQTI3MCIsInJvd3MiOlt7ImlkIjoiQTAxMiIsImxhYmVsIjoiQTAxMiAoMVwvMlwiKSIsIkRlIjo1NSwiRGYiOjI1LCJEaSI6OS40LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDE5IiwibGFiZWwiOiJBMDE5ICgzXC80XCIpIiwiRGUiOjU1LCJEZiI6MjUsIkRpIjoxNS43NSwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTAyNSIsImxhYmVsIjoiQTAyNSAoMVwiKSIsIkRlIjo4NSwiRGYiOjUwLjQsIkRpIjoyMi4xLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDM4IiwibGFiZWwiOiJBMDM4ICgxIDFcLzJcIikiLCJEZSI6ODUsIkRmIjo1MC40LCJEaSI6MzQuOCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTA1MCIsImxhYmVsIjoiQTA1MCAoMlwiKSIsIkRlIjoxMDAsIkRmIjo2My45LCJEaSI6NDcuNSwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTA2MyIsImxhYmVsIjoiQTA2MyAoMiAxXC8yXCIpIiwiRGUiOjExMiwiRGYiOjc3LjQsIkRpIjo2MC4yLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDc2IiwibGFiZWwiOiJBMDc2ICgzXCIpIiwiRGUiOjEzMSwiRGYiOjkwLjksIkRpIjo3Mi45LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMTAwIiwibGFiZWwiOiJBMTAwICg0XCIpIiwiRGUiOjE3MCwiRGYiOjExOC45LCJEaSI6OTcuMzksImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfSwiRElOIjp7ImxhYmVsIjoiRElOIDMyNjc2IFwvIERJTiAxMTg1MCBSZWloZSAxLTMiLCJyb3dzIjpbeyJpZCI6IkROMTAiLCJsYWJlbCI6IkROMTAiLCJEZSI6NzAsIkRmIjozNCwiRGkiOjEwLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjE1IiwibGFiZWwiOiJETjE1IiwiRGUiOjcwLCJEZiI6MzQsIkRpIjoxNiwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4yMCIsImxhYmVsIjoiRE4yMCIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MjAsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMjUiLCJsYWJlbCI6IkROMjUiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MjYsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMzIiLCJsYWJlbCI6IkROMzIiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MzIsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONDAtRjUwLjUiLCJsYWJlbCI6IkRONDAgKEZsYW5zY2ggNTAsNSkiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MzgsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONDAtRjY0IiwibGFiZWwiOiJETjQwIChGbGFuc2NoIDY0KSIsIkRlIjoxMDAsIkRmIjo2NCwiRGkiOjM4LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjUwIiwibGFiZWwiOiJETjUwIiwiRGUiOjEwMCwiRGYiOjY0LCJEaSI6NTAsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONjUiLCJsYWJlbCI6IkRONjUiLCJEZSI6MTMxLCJEZiI6OTEsIkRpIjo2NiwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE44MCIsImxhYmVsIjoiRE44MCIsIkRlIjoxNDYsIkRmIjoxMDYsIkRpIjo4MSwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xMDAiLCJsYWJlbCI6IkROMTAwIiwiRGUiOjE3MCwiRGYiOjExOSwiRGkiOjEwMCwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifV19LCJJU08iOnsibGFiZWwiOiJJU08gMTEyNyBTZXJpZSAxIiwicm93cyI6W3siaWQiOiJETjgtRjI1IiwibGFiZWwiOiJETjggKEZsYW5zY2ggMjUpIiwiRGUiOjU1LCJEZiI6MjUsIkRpIjoxMC4zLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjgtRjM0IiwibGFiZWwiOiJETjggKEZsYW5zY2ggMzQpIiwiRGUiOjcwLCJEZiI6MzQsIkRpIjoxMC4zLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjEwLUYyNSIsImxhYmVsIjoiRE4xMCAoRmxhbnNjaCAyNSkiLCJEZSI6NTUsIkRmIjoyNSwiRGkiOjE0LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjEwLUYzNCIsImxhYmVsIjoiRE4xMCAoRmxhbnNjaCAzNCkiLCJEZSI6NzAsIkRmIjozNCwiRGkiOjE0LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjE1IiwibGFiZWwiOiJETjE1IiwiRGUiOjcwLCJEZiI6MzQsIkRpIjoxOC4xLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjIwIiwibGFiZWwiOiJETjIwIiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjIzLjcsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMjUiLCJsYWJlbCI6IkROMjUiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MjkuNywibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4zMi1GNTAuNSIsImxhYmVsIjoiRE4zMiAoRmxhbnNjaCA1MCw1KSIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjozOC40LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjMyLUY2NCIsImxhYmVsIjoiRE4zMiAoRmxhbnNjaCA2NCkiLCJEZSI6MTAwLCJEZiI6NjQsIkRpIjozOC40LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjQwIiwibGFiZWwiOiJETjQwIiwiRGUiOjEwMCwiRGYiOjY0LCJEaSI6NDQuMywibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE41MCIsImxhYmVsIjoiRE41MCIsIkRlIjoxMTIsIkRmIjo3Ny41LCJEaSI6NTYuMywibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE42NSIsImxhYmVsIjoiRE42NSIsIkRlIjoxMzEsIkRmIjo5MSwiRGkiOjcyLjEsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROODAiLCJsYWJlbCI6IkROODAiLCJEZSI6MTQ2LCJEZiI6MTA2LCJEaSI6ODQuMywibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifV19LCJTTVMiOnsibGFiZWwiOiJTTVMgMzAwOCIsInJvd3MiOlt7ImlkIjoiUzEyIiwibGFiZWwiOiJTMTIiLCJEZSI6NTUsIkRmIjoyNSwiRGkiOjEwLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTMTgiLCJsYWJlbCI6IlMxOCIsIkRlIjo1NSwiRGYiOjI1LCJEaSI6MTUsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlMyNSIsImxhYmVsIjoiUzI1IiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjIyLjYsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlMzOCIsImxhYmVsIjoiUzM4IiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjM1LjYsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlM1MSIsImxhYmVsIjoiUzUxIiwiRGUiOjEwMCwiRGYiOjY0LCJEaSI6NDguNiwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiUzY0IiwibGFiZWwiOiJTNjQiLCJEZSI6MTEyLCJEZiI6NzcuNSwiRGkiOjYwLjMsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlM3NiIsImxhYmVsIjoiUzc2IiwiRGUiOjEzMSwiRGYiOjkxLCJEaSI6NzIuOSwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiUzEwMiIsImxhYmVsIjoiUzEwMiIsIkRlIjoxNzAsIkRmIjoxMTksIkRpIjo5Ny42LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX19fSwiY2ZpIjp7ImlkIjoiQ0ZJIiwic3RhdHVzIjoidmVyaWZpemllcnQiLCJub3JtIjoiQVNUTSBBMjY5LUEyNzAgXC8gQVNNRSBCUEUiLCJvYmVyZXJBbnNjaGx1c3MiOnsiRGUiOjUwLjUsIkRpIjozNC44fSwicm93cyI6W3siaWQiOiJBMDEyIiwibGFiZWwiOiIxXC8yXCIiLCJEZSI6MTIuNywiRGkiOjkuNCwiWSI6MTAuMywiYW5zY2hsdWVzc2UiOnsiQlciOnsibGFiZWwiOiJCdXR0IFdlbGQiLCJMIjoxMTAsIkEiOjE5LCJUQyI6bnVsbH0sIlRDIjp7ImxhYmVsIjoiVHJpLUNsYW1wIiwiTCI6MTE2LCJBIjpudWxsLCJUQyI6MjV9fSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTAxOSIsImxhYmVsIjoiM1wvNFwiIiwiRGUiOjE5LjA1LCJEaSI6MTUuNzUsIlkiOjEwLjksImFuc2NobHVlc3NlIjp7IkJXIjp7ImxhYmVsIjoiQnV0dCBXZWxkIiwiTCI6MTEwLCJBIjoxOSwiVEMiOm51bGx9LCJUQyI6eyJsYWJlbCI6IlRyaS1DbGFtcCIsIkwiOjExNiwiQSI6bnVsbCwiVEMiOjI1fX0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMjUiLCJsYWJlbCI6IjFcIiIsIkRlIjoyNS40LCJEaSI6MjIuMSwiWSI6MTQsImFuc2NobHVlc3NlIjp7IkJXIjp7ImxhYmVsIjoiQnV0dCBXZWxkIiwiTCI6MTEwLCJBIjoxOSwiVEMiOm51bGx9LCJUQyI6eyJsYWJlbCI6IlRyaS1DbGFtcCIsIkwiOjExNiwiQSI6bnVsbCwiVEMiOjUwLjV9fSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTAzOCIsImxhYmVsIjoiMSAxXC8yXCIiLCJEZSI6MzguMSwiRGkiOjM0LjgsIlkiOjI0LCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMzYsIkEiOm51bGwsIlRDIjo1MC41fX0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwNTAiLCJsYWJlbCI6IjJcIiIsIkRlIjo1MC44LCJEaSI6NDcuNSwiWSI6MjksImFuc2NobHVlc3NlIjp7IkJXIjp7ImxhYmVsIjoiQnV0dCBXZWxkIiwiTCI6MTEwLCJBIjoxOSwiVEMiOm51bGx9LCJUQyI6eyJsYWJlbCI6IlRyaS1DbGFtcCIsIkwiOjEzNiwiQSI6bnVsbCwiVEMiOjY0fX0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwNjMiLCJsYWJlbCI6IjIgMVwvMlwiIiwiRGUiOjYzLjUsIkRpIjo2MC4yLCJZIjozNSwiYW5zY2hsdWVzc2UiOnsiQlciOnsibGFiZWwiOiJCdXR0IFdlbGQiLCJMIjoxMTAsIkEiOjE5LCJUQyI6bnVsbH0sIlRDIjp7ImxhYmVsIjoiVHJpLUNsYW1wIiwiTCI6MTM2LCJBIjpudWxsLCJUQyI6NzcuNX19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX19LCJjZiI6eyJpZCI6IkNGIiwicXVlbGxlIjoiSGVyc3RlbGxlcmRhdGVuYmxhdHQgQ29ubmVjdC1GbGFuc2NoLCBTZWl0ZW4gMS04OyBDRi1DRkktTWFzc2UtZ2VzaWNoZXJ0LTIwMjYtMDctMTYubWQgKHVuYWJoYWVuZ2lnZXIgQWJnbGVpY2ggMjAyNi0wNy0yMikiLCJnZW9tZXRyaWVTdGF0dXMiOiJ2ZXJpZml6aWVydCIsImdlb21ldHJpZUdlbWVpbnNhbUZ1ZXJTZXJpZW4iOnRydWUsInJlaWhlbiI6eyJBU1RNIjp7ImxhYmVsIjoiQVNUTSBBMjY5LUEyNzAiLCJyb3dzIjpbeyJpZCI6IkEwMTIiLCJsYWJlbCI6IkEwMTIgKDFcLzJcIikiLCJEZSI6NTUsIkRmIjoyNSwiRGkiOjkuNCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTAxOSIsImxhYmVsIjoiQTAxOSAoM1wvNFwiKSIsIkRlIjo1NSwiRGYiOjI1LCJEaSI6MTUuNzUsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMjUiLCJsYWJlbCI6IkEwMjUgKDFcIikiLCJEZSI6ODUsIkRmIjo1MC40LCJEaSI6MjIuMSwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTAzOCIsImxhYmVsIjoiQTAzOCAoMSAxXC8yXCIpIiwiRGUiOjg1LCJEZiI6NTAuNCwiRGkiOjM0LjgsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwNTAiLCJsYWJlbCI6IkEwNTAgKDJcIikiLCJEZSI6MTAwLCJEZiI6NjMuOSwiRGkiOjQ3LjUsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwNjMiLCJsYWJlbCI6IkEwNjMgKDIgMVwvMlwiKSIsIkRlIjoxMTIsIkRmIjo3Ny40LCJEaSI6NjAuMiwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTA3NiIsImxhYmVsIjoiQTA3NiAoM1wiKSIsIkRlIjoxMzEsIkRmIjo5MC45LCJEaSI6NzIuOSwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiQTEwMCIsImxhYmVsIjoiQTEwMCAoNFwiKSIsIkRlIjoxNzAsIkRmIjoxMTguOSwiRGkiOjk3LjM5LCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9XX0sIkRJTiI6eyJsYWJlbCI6IkRJTiAzMjY3NiBcLyBESU4gMTE4NTAgUmVpaGUgMS0zIiwicm93cyI6W3siaWQiOiJETjEwIiwibGFiZWwiOiJETjEwIiwiRGUiOjcwLCJEZiI6MzQsIkRpIjoxMCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xNSIsImxhYmVsIjoiRE4xNSIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MTYsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMjAiLCJsYWJlbCI6IkROMjAiLCJEZSI6NzAsIkRmIjozNCwiRGkiOjIwLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjI1IiwibGFiZWwiOiJETjI1IiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjI2LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjMyIiwibGFiZWwiOiJETjMyIiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjMyLCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjQwLUY1MC41IiwibGFiZWwiOiJETjQwIChGbGFuc2NoIDUwLDUpIiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjM4LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjQwLUY2NCIsImxhYmVsIjoiRE40MCAoRmxhbnNjaCA2NCkiLCJEZSI6MTAwLCJEZiI6NjQsIkRpIjozOCwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE41MCIsImxhYmVsIjoiRE41MCIsIkRlIjoxMDAsIkRmIjo2NCwiRGkiOjUwLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjY1IiwibGFiZWwiOiJETjY1IiwiRGUiOjEzMSwiRGYiOjkxLCJEaSI6NjYsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROODAiLCJsYWJlbCI6IkROODAiLCJEZSI6MTQ2LCJEZiI6MTA2LCJEaSI6ODEsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMTAwIiwibGFiZWwiOiJETjEwMCIsIkRlIjoxNzAsIkRmIjoxMTksIkRpIjoxMDAsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfSwiSVNPIjp7ImxhYmVsIjoiSVNPIDExMjcgU2VyaWUgMSIsInJvd3MiOlt7ImlkIjoiRE44LUYyNSIsImxhYmVsIjoiRE44IChGbGFuc2NoIDI1KSIsIkRlIjo1NSwiRGYiOjI1LCJEaSI6MTAuMywibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE44LUYzNCIsImxhYmVsIjoiRE44IChGbGFuc2NoIDM0KSIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MTAuMywibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xMC1GMjUiLCJsYWJlbCI6IkROMTAgKEZsYW5zY2ggMjUpIiwiRGUiOjU1LCJEZiI6MjUsIkRpIjoxNCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xMC1GMzQiLCJsYWJlbCI6IkROMTAgKEZsYW5zY2ggMzQpIiwiRGUiOjcwLCJEZiI6MzQsIkRpIjoxNCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4xNSIsImxhYmVsIjoiRE4xNSIsIkRlIjo3MCwiRGYiOjM0LCJEaSI6MTguMSwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4yMCIsImxhYmVsIjoiRE4yMCIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjoyMy43LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjI1IiwibGFiZWwiOiJETjI1IiwiRGUiOjg1LCJEZiI6NTAuNSwiRGkiOjI5LjcsImxhZW5nZW4iOlt7IkwiOjEyfSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkROMzItRjUwLjUiLCJsYWJlbCI6IkROMzIgKEZsYW5zY2ggNTAsNSkiLCJEZSI6ODUsIkRmIjo1MC41LCJEaSI6MzguNCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE4zMi1GNjQiLCJsYWJlbCI6IkROMzIgKEZsYW5zY2ggNjQpIiwiRGUiOjEwMCwiRGYiOjY0LCJEaSI6MzguNCwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiRE40MCIsImxhYmVsIjoiRE40MCIsIkRlIjoxMDAsIkRmIjo2NCwiRGkiOjQ0LjMsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONTAiLCJsYWJlbCI6IkRONTAiLCJEZSI6MTEyLCJEZiI6NzcuNSwiRGkiOjU2LjMsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkRONjUiLCJsYWJlbCI6IkRONjUiLCJEZSI6MTMxLCJEZiI6OTEsIkRpIjo3Mi4xLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJETjgwIiwibGFiZWwiOiJETjgwIiwiRGUiOjE0NiwiRGYiOjEwNiwiRGkiOjg0LjMsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In1dfSwiU01TIjp7ImxhYmVsIjoiU01TIDMwMDgiLCJyb3dzIjpbeyJpZCI6IlMxMiIsImxhYmVsIjoiUzEyIiwiRGUiOjU1LCJEZiI6MjUsIkRpIjoxMCwibGFlbmdlbiI6W3siTCI6MTJ9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifSx7ImlkIjoiUzE4IiwibGFiZWwiOiJTMTgiLCJEZSI6NTUsIkRmIjoyNSwiRGkiOjE1LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTMjUiLCJsYWJlbCI6IlMyNSIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjoyMi42LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTMzgiLCJsYWJlbCI6IlMzOCIsIkRlIjo4NSwiRGYiOjUwLjUsIkRpIjozNS42LCJsYWVuZ2VuIjpbeyJMIjoxMn0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTNTEiLCJsYWJlbCI6IlM1MSIsIkRlIjoxMDAsIkRmIjo2NCwiRGkiOjQ4LjYsImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlM2NCIsImxhYmVsIjoiUzY0IiwiRGUiOjExMiwiRGYiOjc3LjUsIkRpIjo2MC4zLCJsYWVuZ2VuIjpbeyJMIjoxNX0seyJMIjoyNX0seyJMIjozOH0seyJMIjo1MX1dLCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJTNzYiLCJsYWJlbCI6IlM3NiIsIkRlIjoxMzEsIkRmIjo5MSwiRGkiOjcyLjksImxhZW5nZW4iOlt7IkwiOjE1fSx7IkwiOjI1fSx7IkwiOjM4fSx7IkwiOjUxfV0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IlMxMDIiLCJsYWJlbCI6IlMxMDIiLCJEZSI6MTcwLCJEZiI6MTE5LCJEaSI6OTcuNiwibGFlbmdlbiI6W3siTCI6MTV9LHsiTCI6MjV9LHsiTCI6Mzh9LHsiTCI6NTF9XSwic3RhdHVzIjoidmVyaWZpemllcnQifV19fX0sImNmaSI6eyJpZCI6IkNGSSIsInN0YXR1cyI6InZlcmlmaXppZXJ0Iiwibm9ybSI6IkFTVE0gQTI2OS1BMjcwIFwvIEFTTUUgQlBFIiwib2JlcmVyQW5zY2hsdXNzIjp7IkRlIjo1MC41LCJEaSI6MzQuOH0sInJvd3MiOlt7ImlkIjoiQTAxMiIsImxhYmVsIjoiMVwvMlwiIiwiRGUiOjEyLjcsIkRpIjo5LjQsIlkiOjEwLjMsImFuc2NobHVlc3NlIjp7IkJXIjp7ImxhYmVsIjoiQnV0dCBXZWxkIiwiTCI6MTEwLCJBIjoxOSwiVEMiOm51bGx9LCJUQyI6eyJsYWJlbCI6IlRyaS1DbGFtcCIsIkwiOjExNiwiQSI6bnVsbCwiVEMiOjI1fX0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMTkiLCJsYWJlbCI6IjNcLzRcIiIsIkRlIjoxOS4wNSwiRGkiOjE1Ljc1LCJZIjoxMC45LCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMTYsIkEiOm51bGwsIlRDIjoyNX19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDI1IiwibGFiZWwiOiIxXCIiLCJEZSI6MjUuNCwiRGkiOjIyLjEsIlkiOjE0LCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMTYsIkEiOm51bGwsIlRDIjo1MC41fX0sInN0YXR1cyI6InZlcmlmaXppZXJ0In0seyJpZCI6IkEwMzgiLCJsYWJlbCI6IjEgMVwvMlwiIiwiRGUiOjM4LjEsIkRpIjozNC44LCJZIjoyNCwiYW5zY2hsdWVzc2UiOnsiQlciOnsibGFiZWwiOiJCdXR0IFdlbGQiLCJMIjoxMTAsIkEiOjE5LCJUQyI6bnVsbH0sIlRDIjp7ImxhYmVsIjoiVHJpLUNsYW1wIiwiTCI6MTM2LCJBIjpudWxsLCJUQyI6NTAuNX19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDUwIiwibGFiZWwiOiIyXCIiLCJEZSI6NTAuOCwiRGkiOjQ3LjUsIlkiOjI5LCJhbnNjaGx1ZXNzZSI6eyJCVyI6eyJsYWJlbCI6IkJ1dHQgV2VsZCIsIkwiOjExMCwiQSI6MTksIlRDIjpudWxsfSwiVEMiOnsibGFiZWwiOiJUcmktQ2xhbXAiLCJMIjoxMzYsIkEiOm51bGwsIlRDIjo2NH19LCJzdGF0dXMiOiJ2ZXJpZml6aWVydCJ9LHsiaWQiOiJBMDYzIiwibGFiZWwiOiIyIDFcLzJcIiIsIkRlIjo2My41LCJEaSI6NjAuMiwiWSI6MzUsImFuc2NobHVlc3NlIjp7IkJXIjp7ImxhYmVsIjoiQnV0dCBXZWxkIiwiTCI6MTEwLCJBIjoxOSwiVEMiOm51bGx9LCJUQyI6eyJsYWJlbCI6IlRyaS1DbGFtcCIsIkwiOjEzNiwiQSI6bnVsbCwiVEMiOjc3LjV9fSwic3RhdHVzIjoidmVyaWZpemllcnQifV19LCJ0Y2QiOnsicmVpaGVuIjp7IkEiOnsibGFiZWwiOiJSZWloZSBBIC0gbWV0cmlzY2ggKEROLCBESU4gMTE4NTApIiwiZ3JvZXNzZSI6IkROIiwicm93cyI6W3siaWQiOiJETjA2IiwibGFiZWwiOiJETjA2IiwibnciOjYsImZsYW5nZU9EIjoyNSwiYXVzc2VuRCI6MTIsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROMDgiLCJsYWJlbCI6IkROMDgiLCJudyI6OCwiZmxhbmdlT0QiOjI1LCJhdXNzZW5EIjoxNiwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE4xMCIsImxhYmVsIjoiRE4xMCIsIm53IjoxMCwiZmxhbmdlT0QiOjM0LCJhdXNzZW5EIjoxOCwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE4xNSIsImxhYmVsIjoiRE4xNSIsIm53IjoxNSwiZmxhbmdlT0QiOjM0LCJhdXNzZW5EIjoyNCwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE4yMCIsImxhYmVsIjoiRE4yMCIsIm53IjoyMCwiZmxhbmdlT0QiOjM0LCJhdXNzZW5EIjoyOCwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE4yNSIsImxhYmVsIjoiRE4yNSIsIm53IjoyNSwiZmxhbmdlT0QiOjUwLjUsImF1c3NlbkQiOjM0LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJETjMyIiwibGFiZWwiOiJETjMyIiwibnciOjMyLCJmbGFuZ2VPRCI6NTAuNSwiYXVzc2VuRCI6NDAsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkRONDAiLCJsYWJlbCI6IkRONDAiLCJudyI6NDAsImZsYW5nZU9EIjo1MC41LCJhdXNzZW5EIjo0Niwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE41MCIsImxhYmVsIjoiRE41MCIsIm53Ijo1MCwiZmxhbmdlT0QiOjY0LCJhdXNzZW5EIjo1OCwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE42NSIsImxhYmVsIjoiRE42NSIsIm53Ijo2NSwiZmxhbmdlT0QiOjkxLCJhdXNzZW5EIjo3NCwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE44MCIsImxhYmVsIjoiRE44MCIsIm53Ijo4MCwiZmxhbmdlT0QiOjEwNiwiYXVzc2VuRCI6ODksIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROMTAwIiwibGFiZWwiOiJETjEwMCIsIm53IjoxMDAsImZsYW5nZU9EIjoxMTksImF1c3NlbkQiOjEwOCwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiRE4xMjUiLCJsYWJlbCI6IkROMTI1IiwibnciOjEyNSwiZmxhbmdlT0QiOjE1NSwiYXVzc2VuRCI6MTMzLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJETjE1MCIsImxhYmVsIjoiRE4xNTAiLCJudyI6MTUwLCJmbGFuZ2VPRCI6MTgzLCJhdXNzZW5EIjoxNTgsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IkROMjAwIiwibGFiZWwiOiJETjIwMCIsIm53IjoyMDAsImZsYW5nZU9EIjoyMzMuNSwiYXVzc2VuRCI6MjA4LCJ3YWxsIjo0LCJob2VoZSI6NjB9XX0sIkIiOnsibGFiZWwiOiJSZWloZSBCIC0gbWV0cmlzY2ggSVNPIChPRCwgRU4gSVNPIDExMjcpIiwiZ3JvZXNzZSI6Ik9EIiwicm93cyI6W3siaWQiOiJOVzEwLjIiLCJsYWJlbCI6Ik5XIDEwLDIiLCJudyI6MTAuMiwiZmxhbmdlT0QiOjI1LCJhdXNzZW5EIjoxNSwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiTlcxMy41IiwibGFiZWwiOiJOVyAxMyw1IiwibnciOjEzLjUsImZsYW5nZU9EIjoyNSwiYXVzc2VuRCI6MTguMywid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiTlcxNy4yIiwibGFiZWwiOiJOVyAxNywyIiwibnciOjE3LjIsImZsYW5nZU9EIjoyNSwiYXVzc2VuRCI6MjIsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XMjEuMyIsImxhYmVsIjoiTlcgMjEsMyIsIm53IjoyMS4zLCJmbGFuZ2VPRCI6NTAuNSwiYXVzc2VuRCI6MjYuMSwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiTlcyNi45IiwibGFiZWwiOiJOVyAyNiw5IiwibnciOjI2LjksImZsYW5nZU9EIjo1MC41LCJhdXNzZW5EIjozMS43LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJOVzMzLjciLCJsYWJlbCI6Ik5XIDMzLDciLCJudyI6MzMuNywiZmxhbmdlT0QiOjUwLjUsImF1c3NlbkQiOjM3LjcsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XNDIuNCIsImxhYmVsIjoiTlcgNDIsNCIsIm53Ijo0Mi40LCJmbGFuZ2VPRCI6NjQsImF1c3NlbkQiOjQ2LjQsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XNDguMyIsImxhYmVsIjoiTlcgNDgsMyIsIm53Ijo0OC4zLCJmbGFuZ2VPRCI6NjQsImF1c3NlbkQiOjUyLjMsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XNjAuMyIsImxhYmVsIjoiTlcgNjAsMyIsIm53Ijo2MC4zLCJmbGFuZ2VPRCI6NzcuNSwiYXVzc2VuRCI6NjQuMywid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiTlc3Ni4xIiwibGFiZWwiOiJOVyA3NiwxIiwibnciOjc2LjEsImZsYW5nZU9EIjo5MSwiYXVzc2VuRCI6ODAuMSwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiTlc4OC45IiwibGFiZWwiOiJOVyA4OCw5IiwibnciOjg4LjksImZsYW5nZU9EIjoxMDYsImF1c3NlbkQiOjkyLjMsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XMTE0LjMiLCJsYWJlbCI6Ik5XIDExNCwzIiwibnciOjExNC4zLCJmbGFuZ2VPRCI6MTMwLCJhdXNzZW5EIjoxMTcuNywid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiTlcxMzkuNyIsImxhYmVsIjoiTlcgMTM5LDciLCJudyI6MTM5LjcsImZsYW5nZU9EIjoxNTUsImF1c3NlbkQiOjE0Mi41LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiJOVzE2OC4zIiwibGFiZWwiOiJOVyAxNjgsMyIsIm53IjoxNjguMywiZmxhbmdlT0QiOjE4MywiYXVzc2VuRCI6MTcxLjEsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6Ik5XMjE5LjEiLCJsYWJlbCI6Ik5XIDIxOSwxIiwibnciOjIxOS4xLCJmbGFuZ2VPRCI6MjMzLjUsImF1c3NlbkQiOjIyMS45LCJ3YWxsIjo0LCJob2VoZSI6NjB9XX0sIkMiOnsibGFiZWwiOiJSZWloZSBDIC0gWm9sbFwvT0QgKEFTTUUtQlBFLW5haCkiLCJncm9lc3NlIjoiWm9sbCIsInJvd3MiOlt7ImlkIjoiMC4yNSIsImxhYmVsIjoiMVwvNFwiIiwibnciOiIxXC80XCIiLCJmbGFuZ2VPRCI6MjUsImF1c3NlbkQiOjEyLjUsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IjAuMzc1IiwibGFiZWwiOiIzXC84XCIiLCJudyI6IjNcLzhcIiIsImZsYW5nZU9EIjoyNSwiYXVzc2VuRCI6MTUuNywid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiMC41IiwibGFiZWwiOiIxXC8yXCIiLCJudyI6IjFcLzJcIiIsImZsYW5nZU9EIjoyNSwiYXVzc2VuRCI6MTcuNCwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiMC43NSIsImxhYmVsIjoiM1wvNFwiIiwibnciOiIzXC80XCIiLCJmbGFuZ2VPRCI6MjUsImF1c3NlbkQiOjIzLjcsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IjEiLCJsYWJlbCI6IjFcIiIsIm53IjoiMVwiIiwiZmxhbmdlT0QiOjUwLjUsImF1c3NlbkQiOjMwLjEsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IjEuNSIsImxhYmVsIjoiMSAxXC8yXCIiLCJudyI6IjEgMVwvMlwiIiwiZmxhbmdlT0QiOjUwLjUsImF1c3NlbkQiOjQyLjgsIndhbGwiOjQsImhvZWhlIjo2MH0seyJpZCI6IjIiLCJsYWJlbCI6IjJcIiIsIm53IjoiMlwiIiwiZmxhbmdlT0QiOjY0LCJhdXNzZW5EIjo1NS41LCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiIyLjUiLCJsYWJlbCI6IjIgMVwvMlwiIiwibnciOiIyIDFcLzJcIiIsImZsYW5nZU9EIjo3Ny41LCJhdXNzZW5EIjo2OC4yLCJ3YWxsIjo0LCJob2VoZSI6NjB9LHsiaWQiOiIzIiwibGFiZWwiOiIzXCIiLCJudyI6IjNcIiIsImZsYW5nZU9EIjo5MSwiYXVzc2VuRCI6ODAuOSwid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiNCIsImxhYmVsIjoiNFwiIiwibnciOiI0XCIiLCJmbGFuZ2VPRCI6MTE5LCJhdXNzZW5EIjoxMDUuMywid2FsbCI6NCwiaG9laGUiOjYwfSx7ImlkIjoiNiIsImxhYmVsIjoiNlwiIiwibnciOiI2XCIiLCJmbGFuZ2VPRCI6MTY3LCJhdXNzZW5EIjoxNTQuOCwid2FsbCI6NCwiaG9laGUiOjYwfV19fSwia29uc3RhbnQiOnsid2FsbCI6NCwiaG9laGUiOjYwfX19LCJmbGFuc2NoZ3JvZXNzZW4iOlt7ImlkIjoiRjI1IiwiZmxhbmdlT0QiOjI1LCJsYWJlbCI6IjI1IiwiYmxpbmRUaGsiOjQuNzUsImdhc2tldE9EIjoyMiwia2xhbW1lckEiOnsiS0wxIjoyOCwiS0xMSSI6MjgsIktMSCI6MjguMn0sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGMzQiLCJmbGFuZ2VPRCI6MzQsImxhYmVsIjoiMzQiLCJibGluZFRoayI6NC43NSwiZ2Fza2V0T0QiOjM0LCJrbGFtbWVyQSI6eyJLTDEiOjM3LCJLTExJIjozNywiS0xIIjozN30sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGNTBfNSIsImZsYW5nZU9EIjo1MC41LCJsYWJlbCI6IjUwLDUiLCJibGluZFRoayI6Ni4zNSwiZ2Fza2V0T0QiOjUwLjUsImtsYW1tZXJBIjp7IktMMSI6NTMsIktMTEkiOjUzLCJLTEgiOjUxLjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjY0IiwiZmxhbmdlT0QiOjY0LCJsYWJlbCI6IjY0IiwiYmxpbmRUaGsiOjYuMzUsImdhc2tldE9EIjo2NCwia2xhbW1lckEiOnsiS0wxIjo2Ni41LCJLTExJIjo2Ni41LCJLTEgiOjY1LjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjc3XzUiLCJmbGFuZ2VPRCI6NzcuNSwibGFiZWwiOiI3Nyw1IiwiYmxpbmRUaGsiOjYuMzUsImdhc2tldE9EIjo3Ny41LCJrbGFtbWVyQSI6eyJLTDEiOjgwLCJLTExJIjo4MCwiS0xIIjo3OX0sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGOTEiLCJmbGFuZ2VPRCI6OTEsImxhYmVsIjoiOTEiLCJibGluZFRoayI6Ni4zNSwiZ2Fza2V0T0QiOjkxLCJrbGFtbWVyQSI6eyJLTDEiOjkzLjUsIktMTEkiOjkzLjUsIktMSCI6OTIuNX0sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGMTA2IiwiZmxhbmdlT0QiOjEwNiwibGFiZWwiOiIxMDYiLCJibGluZFRoayI6Ni4zNSwiZ2Fza2V0T0QiOjEwNiwia2xhbW1lckEiOnsiS0wxIjoxMDksIktMTEkiOjEwOSwiS0xIIjoxMTEuNX0sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGMTE5IiwiZmxhbmdlT0QiOjExOSwibGFiZWwiOiIxMTkiLCJibGluZFRoayI6OCwiZ2Fza2V0T0QiOjExOSwia2xhbW1lckEiOnsiS0wxIjoxMjEuNSwiS0xMSSI6MTIxLjUsIktMSCI6MTIwLjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjEzMCIsImZsYW5nZU9EIjoxMzAsImxhYmVsIjoiMTMwIiwiYmxpbmRUaGsiOjgsImdhc2tldE9EIjoxMzAsImtsYW1tZXJBIjp7IktMMSI6MTMzLCJLTExJIjoxMzMsIktMSCI6MTMyLjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjE0NF81IiwiZmxhbmdlT0QiOjE0NC41LCJsYWJlbCI6IjE0NCw1IiwiYmxpbmRUaGsiOjgsImdhc2tldE9EIjpudWxsLCJrbGFtbWVyQSI6eyJLTDEiOjE0NiwiS0xMSSI6MTQ2LCJLTEgiOjE0N30sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGMTU1IiwiZmxhbmdlT0QiOjE1NSwibGFiZWwiOiIxNTUiLCJibGluZFRoayI6OCwiZ2Fza2V0T0QiOjE1NSwia2xhbW1lckEiOnsiS0wxIjoxNTksIktMTEkiOjE1OSwiS0xIIjoxNTl9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjE2NyIsImZsYW5nZU9EIjoxNjcsImxhYmVsIjoiMTY3IiwiYmxpbmRUaGsiOjE0LCJnYXNrZXRPRCI6MTY3LCJrbGFtbWVyQSI6eyJLTDEiOjE3MCwiS0xMSSI6MTcwLCJLTEgiOjE3MH0sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGMTgzIiwiZmxhbmdlT0QiOjE4MywibGFiZWwiOiIxODMiLCJibGluZFRoayI6MTQsImdhc2tldE9EIjoxODMsImtsYW1tZXJBIjp7IktMMSI6MTg3LCJLTExJIjoxODcsIktMSCI6MTg3fSwibWFzc2VuQmVrYW5udCI6dHJ1ZX0seyJpZCI6IkYyMTdfNSIsImZsYW5nZU9EIjoyMTcuNSwibGFiZWwiOiIyMTcsNSIsImJsaW5kVGhrIjoxNCwiZ2Fza2V0T0QiOm51bGwsImtsYW1tZXJBIjp7IktMMSI6MjE5LjUsIktMTEkiOjIxOS41LCJLTEgiOjIyMX0sIm1hc3NlbkJla2FubnQiOnRydWV9LHsiaWQiOiJGMjMzXzUiLCJmbGFuZ2VPRCI6MjMzLjUsImxhYmVsIjoiMjMzLDUiLCJibGluZFRoayI6MTQsImdhc2tldE9EIjoyMzMuNSwia2xhbW1lckEiOnsiS0wxIjoyMzcuNSwiS0xMSSI6MjM3LjUsIktMSCI6MjM3LjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjI2OCIsImZsYW5nZU9EIjoyNjgsImxhYmVsIjoiMjY4IiwiYmxpbmRUaGsiOjE0LCJnYXNrZXRPRCI6bnVsbCwia2xhbW1lckEiOnsiS0wxIjoyNzIsIktMTEkiOjI3MiwiS0xIIjoyNzN9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjI4Nl8xIiwiZmxhbmdlT0QiOjI4Ni4xLCJsYWJlbCI6IjI4NiwxIiwiYmxpbmRUaGsiOjE0LCJnYXNrZXRPRCI6bnVsbCwia2xhbW1lckEiOnsiS0wxIjoyOTIsIktMTEkiOjI5MiwiS0xIIjoyOTJ9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjMxOSIsImZsYW5nZU9EIjozMTksImxhYmVsIjoiMzE5IiwiYmxpbmRUaGsiOjE0LCJnYXNrZXRPRCI6bnVsbCwia2xhbW1lckEiOnsiS0wxIjozMjQuNSwiS0xMSSI6MzI0LjUsIktMSCI6MzI0LjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfSx7ImlkIjoiRjMzOCIsImZsYW5nZU9EIjozMzgsImxhYmVsIjoiMzM4IiwiYmxpbmRUaGsiOjE0LCJnYXNrZXRPRCI6bnVsbCwia2xhbW1lckEiOnsiS0wxIjozNDMuNSwiS0xMSSI6MzQzLjUsIktMSCI6MzQzLjV9LCJtYXNzZW5CZWthbm50Ijp0cnVlfV0sImtsYW1tZXJUeXBlbiI6W3siaWQiOiJLTDEiLCJsYWJlbCI6IktMMSIsInN1YiI6IktsYW1tZXIgbWl0IGVpbmZhY2hlbSBHZWxlbmsgdW5kIGVpbmVtIFBpbiIsIndlcmtzdG9mZmUiOlsiMS40MzA4Il0sImRlZmF1bHQiOnRydWV9LHsiaWQiOiJLTExJIiwibGFiZWwiOiJLTExJIiwic3ViIjoiS2xhbW1lciBtaXQgZWluZW0gR2VsZW5rIHVuZCB6d2VpIFBpbnMiLCJ3ZXJrc3RvZmZlIjpbIjEuNDMwOCIsIjEuNDQwOCJdfSx7ImlkIjoiS0xIIiwibGFiZWwiOiJLTEgiLCJzdWIiOiJIb2NoZHJ1Y2trbGFtbWVyIFx1MjAxMyB6d2VpIEhhbGJzY2hhbGVuIG1pdCBsXHUwMGY2c2JhcmVuIFZlcmJpbmR1bmdlbiAoMiBHZWxlbmtlKSIsIndlcmtzdG9mZmUiOlsiMS40MzA4Il19XSwia2xhbW1lck11dHRlcm4iOlt7ImlkIjoiTSIsImxhYmVsIjoiTXV0dGVyIiwic3ViIjoiU3RhbmRhcmQiLCJkZWZhdWx0Ijp0cnVlfSx7ImlkIjoiUyIsImxhYmVsIjoiU2VjaHNrYW50bXV0dGVyIiwic3ViIjoiZ2VnZW4gQXVmcHJlaXMiLCJhdWZwcmVpcyI6dHJ1ZX1dLCJrbGFtbWVyTXV0dGVySGlud2VpcyI6IlNlY2hza2FudG11dHRlciBnZWdlbiBBdWZwcmVpcyBtXHUwMGY2Z2xpY2guIiwid2Vya3N0b2ZmZSI6W3siaWQiOiIxLjQ0MDQiLCJsYWJlbCI6IjEuNDQwNCIsInN1YiI6IlgyQ3JOaU1vMTctMTItMiBcdTAwYjcgMzE2TCIsImRlZmF1bHQiOnRydWUsImhpbndlaXMiOiJTdGFuZGFyZCBpbSBIeWdpZW5pYyBEZXNpZ24sIHNlaHIgZ3V0IHNjaHdlaXNzYmFyLiJ9LHsiaWQiOiIxLjQ0MzUiLCJsYWJlbCI6IjEuNDQzNSIsInN1YiI6IlgyQ3JOaU1vMTgtMTQtMyBcdTAwYjcgMzE2TCIsImRlZmF1bHQiOmZhbHNlLCJoaW53ZWlzIjoiSFx1MDBmNmhlcmVyIE1vXC9OaS1BbnRlaWwsIGZcdTAwZmNyIEVsZWt0cm9wb2xpdHVyIHVuZCBSZWluc3RtZWRpZW4uIn1dLCJrbGFtbWVyV2Vya3N0b2ZmZSI6W3siaWQiOiIxLjQzMDgiLCJsYWJlbCI6IjEuNDMwOCIsInN1YiI6bnVsbCwiaGlud2VpcyI6bnVsbCwiZGVmYXVsdCI6dHJ1ZX0seyJpZCI6IjEuNDQwOCIsImxhYmVsIjoiMS40NDA4Iiwic3ViIjpudWxsLCJoaW53ZWlzIjpudWxsfV0sIm9iZXJmbGFlY2hlbiI6W3siaWQiOiJING8iLCJsYWJlbCI6Ikg0byIsInJhSW5uZW4iOjAuNCwicmFBdXNzZW4iOjAuOCwidmVyZmFocmVuIjoiZWxla3Ryb3BvbGllcnQgKEVQKSIsInN1YiI6IlJhIGlubmVuIFx1MjI2NDAsNDAgXC8gYXVcdTAwZGZlbiBcdTIyNjQwLDgwIFx1MDBiNW0gXHUwMGI3IGVsZWt0cm9wb2xpZXJ0In0seyJpZCI6Ikg0IiwibGFiZWwiOiJINCIsInJhSW5uZW4iOjAuNCwicmFBdXNzZW4iOjAuOCwidmVyZmFocmVuIjoibWVjaGFuaXNjaCBwb2xpZXJ0IFwvIGdlZHJlaHQiLCJkZWZhdWx0Ijp0cnVlLCJzdWIiOiJSYSBpbm5lbiBcdTIyNjQwLDQwIFwvIGF1XHUwMGRmZW4gXHUyMjY0MCw4MCBcdTAwYjVtIFx1MDBiNyBtZWNoYW5pc2NoIHBvbGllcnQifSx7ImlkIjoiU3RlcmlsIiwibGFiZWwiOiJTdGVyaWwiLCJyYUlubmVuIjowLjUsInJhQXVzc2VuIjowLjgsInZlcmZhaHJlbiI6Im1lY2hhbmlzY2ggcG9saWVydCwgcG9saWVydCBcLyBnZWRyZWh0Iiwic3ViIjoiUmEgaW5uZW4gXHUyMjY0MCw1MCBcLyBhdVx1MDBkZmVuIFx1MjI2NDAsODAgXHUwMGI1bSBcdTAwYjcgbWVjaGFuaXNjaCBwb2xpZXJ0In0seyJpZCI6IkgzIiwibGFiZWwiOiJIMyIsInJhSW5uZW4iOjAuOCwicmFBdXNzZW4iOjEuNiwidmVyZmFocmVuIjoiZ2VzY2hsaWZmZW4iLCJzdWIiOiJSYSBpbm5lbiBcdTIyNjQwLDgwIFwvIGF1XHUwMGRmZW4gXHUyMjY0MSw2MCBcdTAwYjVtIn0seyJpZCI6IkgxIiwibGFiZWwiOiJIMSIsInJhSW5uZW4iOjEuNiwicmFBdXNzZW4iOjMuMiwidmVyZmFocmVuIjoiZ2ViZWl6dCBcLyBnZXNjaGxpZmZlbiIsInN1YiI6IlJhIGlubmVuIDwxLDYwIFwvIGF1XHUwMGRmZW4gPDMsMjAgXHUwMGI1bSBcdTAwYjcgQ2hlbWllLVN0YW5kYXJkIn1dLCJkaWNodHVuZ2VuIjpbeyJpZCI6IkVQRE0iLCJjb2RlIjoiRSIsImFydGlrZWxDb2RlIjoiRVBETSIsImxhYmVsIjoiRVBETSIsImZhcmJlIjoiIzJiMmIyYiIsInRlbXBNaW4iOi00MCwidGVtcE1heCI6MTUwLCJicmFuY2hlbiI6WyJwaGFybWEiLCJzdGVyaWx0ZWNobmlrIiwibGViZW5zbWl0dGVsIl0sImZkYSI6dHJ1ZSwidXNwVkkiOnRydWUsInN1YiI6Ildhc3NlciwgV0ZJLCBEYW1wZiwgQ0lQXC9TSVAifSx7ImlkIjoiVk1RIiwiY29kZSI6IlMiLCJhcnRpa2VsQ29kZSI6IlZNUSIsImxhYmVsIjoiU2lsaWtvbiAoVk1RKSIsImZhcmJlIjoiI2U3ZTJkOCIsInRlbXBNaW4iOi02MCwidGVtcE1heCI6MjAwLCJicmFuY2hlbiI6WyJsZWJlbnNtaXR0ZWwiLCJwaGFybWEiXSwiZmRhIjp0cnVlLCJ1c3BWSSI6dHJ1ZSwic3ViIjoiSGVydm9ycmFnZW5kZSBUZW1wZXJhdHVyYmVzdFx1MDBlNG5kaWdrZWl0IFx1MDBiNyBCZWRpbmd0IGZcdTAwZmNyIERhbXBmIn0seyJpZCI6IkZLTSIsImNvZGUiOiJWIiwiYXJ0aWtlbENvZGUiOiJGS00iLCJsYWJlbCI6IlZpdG9uIChGS00pIiwiZmFyYmUiOiIjMmY3ZDNhIiwidGVtcE1pbiI6LTIwLCJ0ZW1wTWF4IjoyMDAsImJyYW5jaGVuIjpbImNoZW1pZSJdLCJmZGEiOnRydWUsInVzcFZJIjp0cnVlLCJzdWIiOiJBdVx1MDBkZmVyb3JkZW50bGljaGUgQmVzdFx1MDBlNG5kaWdrZWl0IGdlZ2VuIFx1MDBkNmxlLCBGZXR0ZSwgU1x1MDBlNHVyZW4gdW5kIHNjaHdhY2hlbiBBbGthbGllbiJ9LHsiaWQiOiJQVEZFIiwiY29kZSI6IlAiLCJhcnRpa2VsQ29kZSI6IlBURkUiLCJsYWJlbCI6IlBURkUiLCJmYXJiZSI6IiNmNGY0ZjQiLCJ0ZW1wTWluIjotMjAwLCJ0ZW1wTWF4IjoyNjAsImJyYW5jaGVuIjpbImNoZW1pZSIsInBoYXJtYSIsInN0ZXJpbHRlY2huaWsiXSwiZmRhIjp0cnVlLCJ1c3BWSSI6dHJ1ZSwic3ViIjoibmFoZXp1IHVuaXZlcnNlbGwgY2hlbWlzY2ggYmVzdFx1MDBlNG5kaWcifSx7ImlkIjoiVlAiLCJjb2RlIjoiVlAiLCJhcnRpa2VsQ29kZSI6IlBURkVcL0ZLTSIsImxhYmVsIjoiUFRGRVwvRktNIiwiZmFyYmUiOiIjZWZlOWRmIiwidGVtcE1pbiI6LTIwLCJ0ZW1wTWF4IjoyMDAsImJyYW5jaGVuIjpbImNoZW1pZSIsInBoYXJtYSIsInN0ZXJpbHRlY2huaWsiXSwiZmRhIjp0cnVlLCJ1c3BWSSI6dHJ1ZSwic3ViIjoiUFRGRS11bW1hbnRlbHQgbWl0IEZLTS1LZXJuIFx1MDBiNyBiZXN0XHUwMGU0bmRpZyArIHJcdTAwZmNja3N0ZWxsZlx1MDBlNGhpZyJ9XSwiZGljaHR1bmdBdXNmdWVocnVuZyI6W3siaWQiOiJMIiwibGFiZWwiOiJtaXQgTGlwcGUgKFR5cCBJSSkifSx7ImlkIjoiTyIsImxhYmVsIjoib2huZSBMaXBwZSAoVHlwIEkpIn1dLCJmZGFLb25mb3JtaXRhZXQiOnsicGhhcm1hIjoiRkRBIFwvIFVTUCBDbGFzcyBWSSBcdTAwYjcgQURJXC9CU0VcL1RTRSIsInN0ZXJpbHRlY2huaWsiOiJGREEgXC8gVVNQIENsYXNzIFZJIFx1MDBiNyBBRElcL0JTRVwvVFNFIiwibGViZW5zbWl0dGVsIjoiRkRBIFwvIEVHIDE5MzVcLzIwMDQiLCJjaGVtaWUiOiJGREEgXC8gRUcgMTkzNVwvMjAwNCJ9LCJmZGFLb25mb3JtaXRhZXRGYWxsYmFjayI6IkZEQSBcLyBFRyAxOTM1XC8yMDA0IiwiZmRhS3VyeiI6eyJwaGFybWEiOiJVU1AgQ2xhc3MgVkkiLCJzdGVyaWx0ZWNobmlrIjoiVVNQIENsYXNzIFZJIiwibGViZW5zbWl0dGVsIjoiRUcgMTkzNVwvMjAwNCIsImNoZW1pZSI6IkVHIDE5MzVcLzIwMDQifSwibmFjaHdlaXNlIjpbeyJpZCI6IkVOMTAyMDRfMzEiLCJsYWJlbCI6IkFibmFobWVwclx1MDBmY2Z6ZXVnbmlzIDMuMSIsInN1YiI6IkVOIDEwMjA0LCBjaGFyZ2VuYmV6b2dlbiJ9LHsiaWQiOiJFTjEwMjA0XzMxX0FEVzIiLCJsYWJlbCI6IkFibmFobWVwclx1MDBmY2Z6ZXVnbmlzIDMuMSBuYWNoIEFELVcyIiwic3ViIjoiRU4gMTAyMDQsIGNoYXJnZW5iZXpvZ2VuIn0seyJpZCI6IkZEQSIsImxhYmVsIjoiRkRBIFwvIEVHIDE5MzVcLzIwMDQiLCJzdWIiOiJNZWRpZW5iZXJcdTAwZmNocnRlIFdlcmtzdG9mZmUiLCJhbndlbmR1bmdzTGFiZWwiOiJmZGFLb25mb3JtaXRhZXQifSx7ImlkIjoiRkVSUklUIiwibGFiZWwiOiJGZXJyaXQtTWVzc3VuZyIsInN1YiI6IkRlbHRhLUZlcnJpdC1HZWhhbHQifSx7ImlkIjoiUkFfUFJPVCIsImxhYmVsIjoiUmEtTWVzc3Byb3Rva29sbCIsInN1YiI6Ik9iZXJmbFx1MDBlNGNoZW5yYXVoZWl0In1dLCJtZW5nZW5zdGFmZmVsIjpbMSwyNSw1MCwxMDAsMjUwXSwiZWluc2F0eiI6eyJub3JtIjoiRElOIDMyNjc2IiwiZHJ1Y2tCYW5kcyI6W3siYWRNYXgiOjQyLjQsImJhciI6MjUsIm1wYSI6Mi41fSx7ImFkTWF4Ijo3Ni4yLCJiYXIiOjE2LCJtcGEiOjEuNn0seyJhZE1heCI6MjE5LjEsImJhciI6MTAsIm1wYSI6MX1dLCJ0ZW1wTWluIjotMTAsInRlbXBNYXgiOjE0MCwidGVtcEhpbndlaXMiOiJiZWkgZ2VlaWduZXRlbiBLbGFtbWVybiB1bmQgRGljaHR1bmdzd2Vya3N0b2ZmZW4iLCJwbGFjZWhvbGRlciI6ZmFsc2V9LCJjb25zdHJhaW50cyI6W3sid2VubiI6eyJvYmVyZmxhZWNoZSI6Ikg0byJ9LCJlbXBmaWVobFdlcmtzdG9mZiI6IjEuNDQzNSIsImdydW5kIjoiRWxla3Ryb3BvbGl0dXIgKEg0bykgd2lyZCBtaXQgMS40NDM1IGVtcGZvaGxlbi4ifV0sInByZWlzZSI6eyJwbGF0emhhbHRlciI6dHJ1ZSwid2FlaHJ1bmciOiJFVVIiLCJnbG9iYWxGYWt0b3IiOjEsImZyZWlnZWdlYmVuIjpmYWxzZSwiZ3J1bmRwcmVpcyI6eyJUQyI6bnVsbCwiVENEIjpudWxsLCJUQ1MiOm51bGwsIkQiOm51bGwsIkNGIjpudWxsLCJDRkkiOm51bGwsIkJEIjpudWxsLCJLTCI6bnVsbCwiQjkwIjpudWxsLCJCNDUiOm51bGwsIlRTIjpudWxsLCJUU1IiOm51bGwsIlIiOm51bGx9LCJkbkZha3RvclJlZk9EIjoyNSwiZG5GYWt0b3JTdGVpZ3VuZyI6MCwid2Vya3N0b2ZmWnVzY2hsYWdQcm96ZW50Ijp7IjEuNDQwNCI6bnVsbCwiMS40NDM1IjpudWxsfSwib2JlcmZsYWVjaGVadXNjaGxhZ1Byb3plbnQiOnsiSDRvIjpudWxsLCJINCI6bnVsbCwiU3RlcmlsIjpudWxsLCJIMyI6bnVsbCwiSDEiOm51bGx9LCJkaWNodHVuZ0F1ZnByZWlzRXVybyI6eyJFUERNIjpudWxsLCJWTVEiOm51bGwsIkZLTSI6bnVsbCwiUFRGRSI6bnVsbCwiVlAiOm51bGx9LCJuYWNod2Vpc0F1ZnByZWlzRXVybyI6eyJFTjEwMjA0XzMxIjowLCJFTjEwMjA0XzMxX0FEVzIiOm51bGwsIkZEQSI6MCwiRkVSUklUIjpudWxsLCJSQV9QUk9UIjpudWxsfSwibmFjaHdlaXNTdGFuZGFyZCI6WyJGREEiXSwic3RhZmZlbCI6W3siYWIiOjEsInJhYmF0dCI6MH1dfX07d2luZG93LldFSVNTX1NIQVJFX0JBU0U9Imh0dHBzOlwvXC93ZWlzcy1hcHBhcmF0ZWJhdS5kZVwvZW5cL3NlcnZpY2VcL3dlbGQtZml0dGluZ3Mtc3RhaW5sZXNzLXN0ZWVsXC8iO3dpbmRvdy5XRUlTU19QUkVMT0FEPSI\\\/bm9ybT1kaW4xMTg2NSI7PC9zY3JpcHQ+PHNjcmlwdD53aW5kb3cuV0VJU1NfSTE4Tj17CiAiZXhha3QiOiB7CiAgIkFiIGhpZXIgd8OkY2hzdCBkaWUgWmVpY2hudW5nIHJlY2h0cyBsaXZlIG1pdCBkZWluZXIgQXVzd2FobC4iOiAiRnJvbSBoZXJlIHRoZSBkcmF3aW5nIG9uIHRoZSByaWdodCBncm93cyBsaXZlIHdpdGggeW91ciBzZWxlY3Rpb24uIiwKICAiQWJuYWhtZXByw7xmemV1Z25pcyAzLjEiOiAiSW5zcGVjdGlvbiBjZXJ0aWZpY2F0ZSAzLjEiLAogICJBYm5haG1lcHLDvGZ6ZXVnbmlzIDMuMSBuYWNoIEFELVcyIjogIkluc3BlY3Rpb24gY2VydGlmaWNhdGUgMy4xIHRvIEFELVcyIiwKICAiQWxsZSBESU4tMTE4NjUtRml0dGluZ3MgZsO8ciBPcmJpdGFsc2Nod2Vpw591bmcuIjogIkFsbCBESU4gMTE4NjUgZml0dGluZ3MgZm9yIG9yYml0YWwgd2VsZGluZy4iLAogICJBbmZyYWdlIjogIklucXVpcnkiLAogICJBbmZyYWdlIHBlciBFLU1haWwgc2VuZGVuIjogIlNlbmQgaW5xdWlyeSBieSBlLW1haWwiLAogICJBbmZyYWdlIHp1c2FtbWVuc3RlbGxlbiI6ICJDb21waWxlIGlucXVpcnkiLAogICJBbnNjaHdlaXNzc3R1dHplbiBtaXQgQ2xhbXBhbnNjaGx1c3MiOiAiV2VsZC1vbiBmZXJydWxlIHdpdGggY2xhbXAgY29ubmVjdGlvbiIsCiAgIkFuc2ljaHQiOiAiVmlldyIsCiAgIkFuc2ljaHQ6IjogIlZpZXc6IiwKICAiQW53ZW5kdW5nIjogIkFwcGxpY2F0aW9uIiwKICAiQXVmIEFuZnJhZ2UiOiAiT24gcmVxdWVzdCIsCiAgImF1ZiBBbmZyYWdlIjogIm9uIHJlcXVlc3QiLAogICJBdXMgZGVyIEFud2VuZHVuZyBzY2hsYWdlbiB3aXIgV2Vya3N0b2ZmLCBPYmVyZmzDpGNoZSB1bmQgRGljaHR1bmcgc2lubnZvbGwgdm9yLiBBbnBhc3NlbiBrYW5uc3QgZHUgYWxsZXMgc3DDpHRlci4iOiAiQmFzZWQgb24gdGhlIGFwcGxpY2F0aW9uIHdlIHN1Z2dlc3QgYSBzdWl0YWJsZSBtYXRlcmlhbCwgc3VyZmFjZSBmaW5pc2ggYW5kIGdhc2tldC4gWW91IGNhbiBjaGFuZ2UgZXZlcnl0aGluZyBsYXRlci4iLAogICJBdXNmw7xocnVuZyI6ICJEZXNpZ24iLAogICJBdcOfZXJvcmRlbnRsaWNoZSBCZXN0w6RuZGlna2VpdCBnZWdlbiDDlmxlLCBGZXR0ZSwgU8OkdXJlbiB1bmQgc2Nod2FjaGVuIEFsa2FsaWVuIMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiOiAiT3V0c3RhbmRpbmcgcmVzaXN0YW5jZSB0byBvaWxzLCBncmVhc2VzLCBhY2lkcyBhbmQgd2VhayBhbGthbGlzIMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiLAogICJCYXV0ZWlsIjogIkNvbXBvbmVudCIsCiAgIkJhdXRlaWwgd8OkaGxlbiI6ICJTZWxlY3QgY29tcG9uZW50IiwKICAiQmVpZGUgc2luZCBhdXMgZGVyIEFud2VuZHVuZyB2b3JiZWxlZ3QuIjogIkJvdGggYXJlIHByZXNldCBmcm9tIHRoZSBhcHBsaWNhdGlvbi4iLAogICJCw7ZnZW4sIFQtU3TDvGNrZSwgUmVkdXppZXJ1bmdlbiAtIGF1ZiBBbmZyYWdlLCBqZSBuYWNoIFZlcmbDvGdiYXJrZWl0LiI6ICJCZW5kcywgdGVlcywgcmVkdWNlcnMgLSBvbiByZXF1ZXN0LCBzdWJqZWN0IHRvIGF2YWlsYWJpbGl0eS4iLAogICJDbGFtcHN0dXR6ZW4sIEJsaW5kZGVja2VsLCBLbGFtbWVybiDigJMgUHJlaXMgYXVmIEFuZnJhZ2UuIjogIkNsYW1wIGZlcnJ1bGVzLCBibGFuayBjYXBzLCBjbGFtcHMgLSBwcmljZSBvbiByZXF1ZXN0LiIsCiAgIkRJTiAxMTg2NSDigJMgRmlybWEgV2Vpc3Mga2Fsa3VsaWVydCBpbmRpdmlkdWVsbC4iOiAiRElOIDExODY1IC0gV2Vpc3MgcXVvdGVzIGluZGl2aWR1YWxseS4iLAogICJESU4gMTE4NjUg4oCTIEdlc2Nod2Vpw590ZSBGaXR0aW5ncyI6ICJESU4gMTE4NjUgLSB3ZWxkZWQgZml0dGluZ3MiLAogICJESU4gMzI2NzYg4oCTIEZpcm1hIFdlaXNzIGthbGt1bGllcnQgaW5kaXZpZHVlbGwuIjogIkRJTiAzMjY3NiAtIFdlaXNzIHF1b3RlcyBpbmRpdmlkdWFsbHkuIiwKICAiRElOIDMyNjc2IOKAkyBDbGFtcHZlcmJpbmR1bmciOiAiRElOIDMyNjc2IC0gY2xhbXAgY29ubmVjdGlvbiIsCiAgIkRhcyBBYm5haG1lcHLDvGZ6ZXVnbmlzIDMuMSBpc3Qga29zdGVubG9zLiAzLjEgbmFjaCBBRC1XMiwgRmVycml0LU1lc3N1bmcgdW5kIFJhLU1lc3Nwcm90b2tvbGwgZ2lidCBlcyBnZWdlbiBNZWhya29zdGVuLiI6ICJUaGUgaW5zcGVjdGlvbiBjZXJ0aWZpY2F0ZSAzLjEgaXMgZnJlZSBvZiBjaGFyZ2UuIDMuMSB0byBBRC1XMiwgZmVycml0ZSBtZWFzdXJlbWVudCBhbmQgUmEgdGVzdCByZXBvcnQgYXJlIGF2YWlsYWJsZSBhdCBleHRyYSBjb3N0LiIsCiAgIkRpY2h0dW5nIHfDpGhsZW4iOiAiU2VsZWN0IGdhc2tldCIsCiAgIkRpZSBEaWNodHVuZ3NmYXJiZSBlcnNjaGVpbnQgZGlyZWt0IGluIGRlciBaZWljaG51bmcuIEFsbGUgU3RhbmRhcmRkaWNodHVuZ2VuIHZvbiBGaXJtYSBXZWlzcyBzaW5kIEZEQS0gdW5kIFVTUCBDbGFzcyBWSS1rb25mb3JtLiI6ICJUaGUgZ2Fza2V0IGNvbG91ciBhcHBlYXJzIGRpcmVjdGx5IGluIHRoZSBkcmF3aW5nLiBBbGwgc3RhbmRhcmQgZ2Fza2V0cyBmcm9tIFdlaXNzIGNvbXBseSB3aXRoIEZEQSBhbmQgVVNQIENsYXNzIFZJLiIsCiAgIkVpbnNhdHoiOiAiVXNlIiwKICAiRkRBIC8gVVNQIENsYXNzIFZJIMK3IEFESS9CU0UvVFNFIChTdGFuZGFyZCkg4oCUIGJlaSBhbGxlbiBTdGFuZGFyZGRpY2h0dW5nZW4gdm9uIEZpcm1hIFdlaXNzIGlua2x1c2l2ZS4iOiAiRkRBIC8gVVNQIENsYXNzIFZJIMK3IEFESS9CU0UvVFNFIChzdGFuZGFyZCkgLSBpbmNsdWRlZCB3aXRoIGFsbCBzdGFuZGFyZCBnYXNrZXRzIGZyb20gV2Vpc3MuIiwKICAiRmlybWEiOiAiQ29tcGFueSIsCiAgIkZpcm1hIFdlaXNzIGthbGt1bGllcnQgYmVpZGUgUHJvZHVrdGdydXBwZW4gaW5kaXZpZHVlbGwgYXVmIEFuZnJhZ2UuIjogIldlaXNzIHF1b3RlcyBib3RoIHByb2R1Y3QgZ3JvdXBzIGluZGl2aWR1YWxseSBvbiByZXF1ZXN0LiIsCiAgIkdldHLDpG5rZSwgTW9sa2VyZWksIEZvb2QiOiAiQmV2ZXJhZ2VzLCBkYWlyeSwgZm9vZCIsCiAgIkdyw7bDn2UiOiAiU2l6ZSIsCiAgIkdyw7bDn2UgKE9EKSI6ICJTaXplIChPRCkiLAogICJHcsO2w59lIG5hY2ggRmxhbnNjaC3DmCI6ICJTaXplIGJ5IGZsYW5nZSDijIAiLAogICJIZXJ2b3JyYWdlbmRlIFRlbXBlcmF0dXJiZXN0w6RuZGlna2VpdCDCtyBCZWRpbmd0IGbDvHIgRGFtcGYgwrcgRkRBIMK3IFVTUCBDbGFzcyBWSSI6ICJFeGNlbGxlbnQgdGVtcGVyYXR1cmUgcmVzaXN0YW5jZSDCtyBsaW1pdGVkIGZvciBzdGVhbSDCtyBGREEgwrcgVVNQIENsYXNzIFZJIiwKICAiSG9jaGRydWNra2xhbW1lciDigJMgendlaSBIYWxic2NoYWxlbiBtaXQgbMO2c2JhcmVuIFZlcmJpbmR1bmdlbiAoMiBHZWxlbmtlKSI6ICJIaWdoLXByZXNzdXJlIGNsYW1wIC0gdHdvIGhhbGYgc2hlbGxzIHdpdGggZGV0YWNoYWJsZSBqb2ludHMgKDIgaGluZ2VzKSIsCiAgIklubGluZS1BdXNmw7xocnVuZyI6ICJJbmxpbmUgZGVzaWduIiwKICAiS2xhbW1lciBkZXIga29tcGxldHRlbiBWZXJiaW5kdW5nIjogIkNsYW1wIG9mIHRoZSBjb21wbGV0ZSBjb25uZWN0aW9uIiwKICAiS2xhbW1lciBtaXQgZWluZW0gR2VsZW5rIHVuZCB6d2VpIFBpbnMiOiAiQ2xhbXAgd2l0aCBvbmUgaGluZ2UgYW5kIHR3byBwaW5zIiwKICAiS2xhbW1lciBtaXQgZWluZmFjaGVtIEdlbGVuayB1bmQgZWluZW0gUGluIjogIkNsYW1wIHdpdGggYSBzaW5nbGUgaGluZ2UgYW5kIG9uZSBwaW4iLAogICJLb25maWd1cmF0aW9uIGF1ZiBkZW4gVXJzcHJ1bmdzenVzdGFuZCB6dXLDvGNrc2V0emVuIjogIlJlc2V0IHRoZSBjb25maWd1cmF0aW9uIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSIsCiAgIkzDpG5nc3NjaG5pdHQgKEJvZ2VuIDQ1wrApIjogIkxvbmdpdHVkaW5hbCBzZWN0aW9uICg0NcKwIGJlbmQpIiwKICAiTMOkbmdzc2Nobml0dCAoQm9nZW4gOTDCsCkiOiAiTG9uZ2l0dWRpbmFsIHNlY3Rpb24gKDkwwrAgYmVuZCkiLAogICJMw6RuZ3NzY2huaXR0IChDbGFtcC1WZXJiaW5kdW5nKSI6ICJMb25naXR1ZGluYWwgc2VjdGlvbiAoY2xhbXAgY29ubmVjdGlvbikiLAogICJMw6RuZ3NzY2huaXR0IChULVN0w7xjaykiOiAiTG9uZ2l0dWRpbmFsIHNlY3Rpb24gKHRlZSkiLAogICJMw6RuZ3NzY2huaXR0IChlaW56ZWxuZXIgU3R1dHplbikiOiAiTG9uZ2l0dWRpbmFsIHNlY3Rpb24gKHNpbmdsZSBmZXJydWxlKSIsCiAgIkzDtnNlbWl0dGVsLCBTw6R1cmVuLCDDlmxlIjogIlNvbHZlbnRzLCBhY2lkcywgb2lscyIsCiAgIk1hw59lIGZlc3RsZWdlbiI6ICJEZWZpbmUgZGltZW5zaW9ucyIsCiAgIk1lZGllbmJlcsO8aHJ0ZSBXZXJrc3RvZmZlIjogIlByb2R1Y3QtY29udGFjdCBtYXRlcmlhbHMiLAogICJOYWNod2Vpc2UgJiBNZW5nZSI6ICJDZXJ0aWZpY2F0ZXMgJiBxdWFudGl0eSIsCiAgIk5vcm0iOiAiU3RhbmRhcmQiLAogICJPYmVyZmzDpGNoZSI6ICJTdXJmYWNlIGZpbmlzaCIsCiAgIk9iZXJmbMOkY2hlIChESU4gMTE4NjYpIjogIlN1cmZhY2UgZmluaXNoIChESU4gMTE4NjYpIiwKICAiT2JlcmZsw6RjaGU6IjogIlN1cmZhY2UgZmluaXNoOiIsCiAgIk9iZXJmbMOkY2hlbnJhdWhlaXQiOiAiU3VyZmFjZSByb3VnaG5lc3MiLAogICJQVEZFLXVtbWFudGVsdCBtaXQgRktNLUtlcm4gwrcgYmVzdMOkbmRpZyArIHLDvGNrc3RlbGxmw6RoaWcgwrcgRkRBIMK3IFVTUCBDbGFzcyBWSSI6ICJQVEZFLWphY2tldGVkIHdpdGggRktNIGNvcmUgwrcgcmVzaXN0YW50IGFuZCByZXNpbGllbnQgwrcgRkRBIMK3IFVTUCBDbGFzcyBWSSIsCiAgIlByZWlzZSB3ZXJkZW4gaW5kaXZpZHVlbGwgYW5nZWJvdGVuLiBOaWNodCBiZWxlZ3RlIE1hw59lIG9kZXIgQXJ0aWtlbG51bW1lcm4gZXJnw6RuenQgRmlybWEgV2Vpc3MgaW0gQW5nZWJvdDsgd2lkZXJzcHLDvGNobGljaGUgb2RlciBuaWNodCBnZWxpZWZlcnRlIEJlcmVpY2hlIGJsZWliZW4gZ2VzcGVycnQgdW5kIHdlcmRlbiBuaWNodCBnZXNjaMOkdHp0LiI6ICJQcmljZXMgYXJlIHF1b3RlZCBpbmRpdmlkdWFsbHkuIFdlaXNzIGFkZHMgYW55IGRpbWVuc2lvbnMgb3IgYXJ0aWNsZSBudW1iZXJzIG5vdCBjb3ZlcmVkIGhlcmUgaW4gdGhlIHF1b3RhdGlvbjsgY29udHJhZGljdG9yeSBvciB1bnN1cHBsaWVkIHJhbmdlcyBzdGF5IGxvY2tlZCBhbmQgYXJlIG5vdCBlc3RpbWF0ZWQuIiwKICAiUHLDvGZlIGRpZSBiZWxlZ3RlbiBBbmdhYmVuIHVuZCBlcmfDpG56ZSBkZWluZW4gS29udGFrdC4gT2ZmZW5lIFdlcnRlIGJsZWliZW4gZGV1dGxpY2ggZ2VrZW5uemVpY2huZXQuIjogIkNoZWNrIHRoZSBkZXRhaWxzIHByb3ZpZGVkIGFuZCBhZGQgeW91ciBjb250YWN0IGRhdGEuIE9wZW4gdmFsdWVzIHJlbWFpbiBjbGVhcmx5IG1hcmtlZC4iLAogICJSLCBMMSwgTDIgdW5kIEwzIHN0YW1tZW4gYXVzIGRlciBhdXNnZWbDvGxsdGVuIFdlaXNzLU1hw590YWJlbGxlLiBEaWUgdm9uIEZpcm1hIFdlaXNzIGtvcnJpZ2llcnRlbiBETjI1LVdlcnRlIHNpbmQgZW50aGFsdGVuLiI6ICJSLCBMMSwgTDIgYW5kIEwzIGNvbWUgZnJvbSB0aGUgY29tcGxldGVkIFdlaXNzIGRpbWVuc2lvbiB0YWJsZS4gVGhlIEROMjUgdmFsdWVzIGNvcnJlY3RlZCBieSBXZWlzcyBhcmUgaW5jbHVkZWQuIiwKICAiUmEgaW5uZW4gPDEsNjAgLyBhdcOfZW4gPDMsMjAgwrVtIMK3IENoZW1pZS1TdGFuZGFyZCDCtyBnZWJlaXp0IC8gZ2VzY2hsaWZmZW4iOiAiUmEgaW5zaWRlIDwxLjYwIC8gb3V0c2lkZSA8My4yMCDCtW0gwrcgY2hlbWljYWwgc3RhbmRhcmQgwrcgcGlja2xlZCAvIGdyb3VuZCIsCiAgIlJhIGlubmVuIOKJpDAsNDAgLyBhdcOfZW4g4omkMCw4MCDCtW0gwrcgZWxla3Ryb3BvbGllcnQgwrcgZWxla3Ryb3BvbGllcnQgKEVQKSI6ICJSYSBpbnNpZGUg4omkMC40MCAvIG91dHNpZGUg4omkMC44MCDCtW0gwrcgZWxlY3Ryb3BvbGlzaGVkIMK3IGVsZWN0cm9wb2xpc2hlZCAoRVApIiwKICAiUmEgaW5uZW4g4omkMCw0MCAvIGF1w59lbiDiiaQwLDgwIMK1bSDCtyBtZWNoYW5pc2NoIHBvbGllcnQgwrcgbWVjaGFuaXNjaCBwb2xpZXJ0IC8gZ2VkcmVodCI6ICJSYSBpbnNpZGUg4omkMC40MCAvIG91dHNpZGUg4omkMC44MCDCtW0gwrcgbWVjaGFuaWNhbGx5IHBvbGlzaGVkIMK3IG1lY2hhbmljYWxseSBwb2xpc2hlZCAvIHR1cm5lZCIsCiAgIlJhIGlubmVuIOKJpDAsNTAgLyBhdcOfZW4g4omkMCw4MCDCtW0gwrcgbWVjaGFuaXNjaCBwb2xpZXJ0IMK3IG1lY2hhbmlzY2ggcG9saWVydCwgcG9saWVydCAvIGdlZHJlaHQiOiAiUmEgaW5zaWRlIOKJpDAuNTAgLyBvdXRzaWRlIOKJpDAuODAgwrVtIMK3IG1lY2hhbmljYWxseSBwb2xpc2hlZCDCtyBtZWNoYW5pY2FsbHkgcG9saXNoZWQsIHBvbGlzaGVkIC8gdHVybmVkIiwKICAiUmEgaW5uZW4g4omkMCw4MCAvIGF1w59lbiDiiaQxLDYwIMK1bSDCtyBnZXNjaGxpZmZlbiI6ICJSYSBpbnNpZGUg4omkMC44MCAvIG91dHNpZGUg4omkMS42MCDCtW0gwrcgZ3JvdW5kIiwKICAiUmVpaGUgdW5kIEdyw7bDn2UgYmVzdGltbWVuIGRpZSBHZW9tZXRyaWUuIERpZSBaZWljaG51bmcgdW5kIGRpZSBNYcOfa2V0dGVuIHdhY2hzZW4gbGl2ZSBtaXQuIjogIlNlcmllcyBhbmQgc2l6ZSBkZXRlcm1pbmUgdGhlIGdlb21ldHJ5LiBUaGUgZHJhd2luZyBhbmQgdGhlIGRpbWVuc2lvbiBjaGFpbnMgZ3JvdyB3aXRoIGl0IGxpdmUuIiwKICAiU3R1dHplbmzDpG5nZSI6ICJGZXJydWxlIGxlbmd0aCIsCiAgIlN0w7xja3phaGwiOiAiUXVhbnRpdHkiLAogICJULVN0w7xjayI6ICJUZWUiLAogICJULVN0w7xjayByZWR1emllcnQiOiAiUmVkdWNpbmcgdGVlIiwKICAiVGlwcDogTGFkZSBkaWUgUGxhbnNraXp6ZSBhbHMgUERGIGhlcnVudGVyIHVuZCBow6RuZyBzaWUgZGVpbmVyIEFuZnJhZ2UtTWFpbCBhbiDigJQgRmlybWEgV2Vpc3MgYmVrb21tdCBkYW1pdCBkaXJla3QgZGllIGZlcnRpZ2UgU2tpenplIG1pdCBhbGxlbiBNYcOfZW4uIjogIlRpcDogZG93bmxvYWQgdGhlIHNrZXRjaCBhcyBhIFBERiBhbmQgYXR0YWNoIGl0IHRvIHlvdXIgaW5xdWlyeSBlLW1haWwgLSBXZWlzcyB0aGVuIHJlY2VpdmVzIHRoZSBmaW5pc2hlZCBza2V0Y2ggd2l0aCBhbGwgZGltZW5zaW9ucy4iLAogICJWZXJiaW5kdW5nc2FydCB3w6RobGVuIjogIlNlbGVjdCB0eXBlIG9mIGNvbm5lY3Rpb24iLAogICJWb2xsYmlsZCDDtmZmbmVuIjogIk9wZW4gZnVsbCBzY3JlZW4iLAogICJXYW5kYsO8bmRpZ2VyIEJlaMOkbHRlcmFuc2NobHVzcyI6ICJGbHVzaCB2ZXNzZWwgY29ubmVjdGlvbiIsCiAgIldlaXRlciI6ICJOZXh0IiwKICAiV2VpdGVyZSBQb3NpdGlvbiBoaW56dWbDvGdlbiI6ICJBZGQgYW5vdGhlciBpdGVtIiwKICAiV2Vya3N0b2ZmIjogIk1hdGVyaWFsIiwKICAiV2Vya3N0b2ZmICYgT2JlcmZsw6RjaGUiOiAiTWF0ZXJpYWwgJiBzdXJmYWNlIGZpbmlzaCIsCiAgIldlcmtzdG9mZjoiOiAiTWF0ZXJpYWw6IiwKICAiV29mw7xyIHdpcmQgZGFzIEZpdHRpbmcgZWluZ2VzZXR6dD8iOiAiV2hhdCB3aWxsIHRoZSBmaXR0aW5nIGJlIHVzZWQgZm9yPyIsCiAgIlfDpGhsZSBsaW5rcyBkaWUgQW53ZW5kdW5nIOKAlCBkYW5uIGJhdXQgc2ljaCBoaWVyIGRlaW4gRml0dGluZyBsaXZlIG1pdCBaZWljaG51bmcgdW5kIGJlbGVndGVuIE1hw59lbiBhdWYuIjogIlNlbGVjdCB0aGUgYXBwbGljYXRpb24gb24gdGhlIGxlZnQgLSB5b3VyIGZpdHRpbmcgdGhlbiBidWlsZHMgdXAgaGVyZSBsaXZlIHdpdGggYSBkcmF3aW5nIGFuZCBkb2N1bWVudGVkIGRpbWVuc2lvbnMuIiwKICAiWDJDck5pTW8xOC0xNC0zIMK3IDMxNkwgwrcgSMO2aGVyZXIgTW8vTmktQW50ZWlsLCBmw7xyIEVsZWt0cm9wb2xpdHVyIHVuZCBSZWluc3RtZWRpZW4uIjogIlgyQ3JOaU1vMTgtMTQtMyDCtyAzMTZMIMK3IGhpZ2hlciBNby9OaSBjb250ZW50LCBmb3IgZWxlY3Ryb3BvbGlzaGluZyBhbmQgdWx0cmFwdXJlIG1lZGlhLiIsCiAgIlgyQ3JOaU1vMTctMTItMiDCtyAzMTZMIMK3IFN0YW5kYXJkIGltIEh5Z2llbmljIERlc2lnbiwgc2VociBndXQgc2Nod2Vpc3NiYXIuIjogIlgyQ3JOaU1vMTctMTItMiDCtyAzMTZMIMK3IHN0YW5kYXJkIGluIGh5Z2llbmljIGRlc2lnbiwgdmVyeSBnb29kIHdlbGRhYmlsaXR5LiIsCiAgIlplaWNobnVuZyI6ICJEcmF3aW5nIiwKICAiWmVydGlmaWthdGUgenVidWNoZW4gdW5kIFN0w7xja3phaGwgd8OkaGxlbi4gQmVpZGVzIGdlaHQgbWl0IGluIGRpZSBBbmZyYWdlLiI6ICJBZGQgY2VydGlmaWNhdGVzIGFuZCBjaG9vc2UgdGhlIHF1YW50aXR5LiBCb3RoIGdvIGludG8gdGhlIGlucXVpcnkuIiwKICAiWnVyw7xjayI6ICJCYWNrIiwKICAiWnVyw7xja3NldHplbiI6ICJSZXNldCIsCiAgIldpcmtsaWNoIHp1csO8Y2tzZXR6ZW4\\\/IjogIlJlYWxseSByZXNldD8iLAogICJuYWhlenUgdW5pdmVyc2VsbCBjaGVtaXNjaCBiZXN0w6RuZGlnIMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiOiAiYWxtb3N0IHVuaXZlcnNhbGx5IGNoZW1pY2FsbHkgcmVzaXN0YW50IMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiLAogICLCtyBESU4gMTE4NjUgYXVmIEFuZnJhZ2UiOiAiwrcgRElOIDExODY1IG9uIHJlcXVlc3QiLAogICJBbnNwcmVjaHBhcnRuZXIiOiAiQ29udGFjdCBwZXJzb24iLAogICJBc2VwdGlrLCBDSVAvU0lQIjogIkFzZXB0aWMsIENJUC9TSVAiLAogICJCZWlzcGllbC1EYXJzdGVsbHVuZy4iOiAiRXhhbXBsZSBpbGx1c3RyYXRpb24uIiwKICAiQmxpbmRkZWNrZWwiOiAiQmxhbmsgY2FwIiwKICAiQm9nZW4gNDXCsCI6ICI0NcKwIGJlbmQiLAogICJCb2dlbiA5MMKwIjogIjkwwrAgYmVuZCIsCiAgIkNoZW1pZSI6ICJDaGVtaWNhbHMiLAogICJDb25uZWN0LUZsYW5zY2giOiAiQ29ubmVjdCBmbGFuZ2UiLAogICJDb25uZWN0LUZsYW5zY2ggSW5saW5lIjogIkNvbm5lY3QgZmxhbmdlIGlubGluZSIsCiAgIkRhcnN0ZWxsdW5nIjogIklsbHVzdHJhdGlvbiIsCiAgIkRlbHRhLUZlcnJpdC1HZWhhbHQiOiAiRGVsdGEgZmVycml0ZSBjb250ZW50IiwKICAiRGljaHR1bmciOiAiR2Fza2V0IiwKICAiRS1NYWlsIjogIkUtbWFpbCIsCiAgIkVOIDEwMjA0LCBjaGFyZ2VuYmV6b2dlbiI6ICJFTiAxMDIwNCwgYmF0Y2gtcmVsYXRlZCIsCiAgIkVpbnplbG5lIERpY2h0dW5nIjogIlNpbmdsZSBnYXNrZXQiLAogICJFaW56ZWxuZXIgVHJpQ2xhbXAtU3R1dHplbiI6ICJTaW5nbGUgVHJpLUNsYW1wIGZlcnJ1bGUiLAogICJFcyBpc3Qgbm9jaCBuaWNodHMga29uZmlndXJpZXJ0LiI6ICJOb3RoaW5nIGhhcyBiZWVuIGNvbmZpZ3VyZWQgeWV0LiIsCiAgIkZlcnJpdC1NZXNzdW5nIjogIkZlcnJpdGUgbWVhc3VyZW1lbnQiLAogICJGaXR0aW5ncy1Lb25maWd1cmF0b3IiOiAiRml0dGluZ3MgY29uZmlndXJhdG9yIiwKICAiRmxhbnNjaC3ijIAiOiAiRmxhbmdlIOKMgCIsCiAgIkZvcnRzY2hyaXR0IjogIlByb2dyZXNzIiwKICAiRnJvbnRhbnNpY2h0IChLbGFtbWVyIEtMMSkiOiAiRnJvbnQgdmlldyAoY2xhbXAgS0wxKSIsCiAgIktsYW1tZXIgLyBTcGFubnJpbmciOiAiQ2xhbXAgLyBjbGFtcGluZyByaW5nIiwKICAiS2xhbW1lcnR5cCI6ICJDbGFtcCB0eXBlIiwKICAiS29tcGxldHRlIFRyaUNsYW1wIFZlcmJpbmR1bmciOiAiQ29tcGxldGUgVHJpLUNsYW1wIGNvbm5lY3Rpb24iLAogICJLb25maWd1cmF0aW9uIHRlaWxlbiI6ICJTaGFyZSBjb25maWd1cmF0aW9uIiwKICAiS29uZmlndXJhdGlvbnMtIC8gQXJ0aWtlbC1Oci4iOiAiQ29uZmlndXJhdGlvbiAvIGFydGljbGUgbm8uIiwKICAiS29uZmlndXJhdGlvbnMtTnIuIjogIkNvbmZpZ3VyYXRpb24gbm8uIiwKICAiTGViZW5zbWl0dGVsIjogIkZvb2QiLAogICJNdXR0ZXIiOiAiTnV0IiwKICAiTmFjaHdlaXNlIC8gWmVydGlmaWthdGUiOiAiQ2VydGlmaWNhdGVzIiwKICAiTmVubndlaXRlIjogIk5vbWluYWwgc2l6ZSIsCiAgIlBsYW5za2l6emUgYWxzIFBERiI6ICJTa2V0Y2ggYXMgUERGIiwKICAiUG9zaXRpb25zbGlua3Mga29waWVyZW4iOiAiQ29weSBpdGVtIGxpbmtzIiwKICAiUHJvZHVrdGRhcnN0ZWxsdW5nIjogIlByb2R1Y3QgaWxsdXN0cmF0aW9uIiwKICAiUmEtTWVzc3Byb3Rva29sbCI6ICJSYSB0ZXN0IHJlcG9ydCIsCiAgIlJlZHV6aWVydW5nIjogIlJlZHVjZXIiLAogICJSZWloZSI6ICJTZXJpZXMiLAogICJTY2hyaXR0IDEiOiAiU3RlcCAxIiwKICAiU2Nocml0dCAyIjogIlN0ZXAgMiIsCiAgIlNjaHJpdHQgMyI6ICJTdGVwIDMiLAogICJTY2hyaXR0IDQiOiAiU3RlcCA0IiwKICAiU2Nocml0dCA1IjogIlN0ZXAgNSIsCiAgIlNjaHJpdHQgNiI6ICJTdGVwIDYiLAogICJTY2hyaXR0IDciOiAiU3RlcCA3IiwKICAiU2Nocml0dCA4IjogIlN0ZXAgOCIsCiAgIlNpbGlrb24gKFZNUSkiOiAiU2lsaWNvbmUgKFZNUSkiLAogICJTb25kZXJhYm1lc3N1bmcgYW5mcmFnZW4iOiAiSW5xdWlyZSBhYm91dCBhIHNwZWNpYWwgZGltZW5zaW9uIiwKICAiU29uZGVyYW5mb3JkZXJ1bmdlbiAob3B0aW9uYWwpIjogIlNwZWNpYWwgcmVxdWlyZW1lbnRzIChvcHRpb25hbCkiLAogICJTdGVyaWwiOiAiU3RlcmlsZSIsCiAgIlN0ZXJpbHRlY2huaWsiOiAiU3RlcmlsZSB0ZWNobm9sb2d5IiwKICAiVEMtU3R1dHplbiI6ICJUQyBmZXJydWxlIiwKICAiVGFua3N0dXR6ZW4gZGlja3dhbmRpZyI6ICJIZWF2eS13YWxsIHRhbmsgZmVycnVsZSIsCiAgIlRlbGVmb24iOiAiUGhvbmUiLAogICJWZXJzY2hsaWVzc3QgZWluZW4gQ2xhbXBhbnNjaGx1c3MiOiAiQ2xvc2VzIG9mZiBhIGNsYW1wIGNvbm5lY3Rpb24iLAogICJWb2xsYmlsZCArIFpvb20iOiAiRnVsbCBzY3JlZW4gKyB6b29tIiwKICAiVm9yc2NoYXUiOiAiUHJldmlldyIsCiAgIldGSSwgRGFtcGYtU0lQLCBob2NocmVpbiI6ICJXRkksIHN0ZWFtIFNJUCwgdWx0cmFwdXJlIiwKICAiV2Fzc2VyLCBXRkksIERhbXBmLCBDSVAvU0lQIMK3IEZEQSDCtyBVU1AgQ2xhc3MgVkkiOiAiV2F0ZXIsIFdGSSwgc3RlYW0sIENJUC9TSVAgwrcgRkRBIMK3IFVTUCBDbGFzcyBWSSIsCiAgIld1bnNjaHRlcm1pbiAvIFByb2pla3QgKG9wdGlvbmFsKSI6ICJQcmVmZXJyZWQgZGF0ZSAvIHByb2plY3QgKG9wdGlvbmFsKSIsCiAgIlpvbGwiOiAiSW5jaCIsCiAgImFiIDEiOiAiZnJvbSAxIiwKICAiYWIgMjUiOiAiZnJvbSAyNSIsCiAgImFiIDUwIjogImZyb20gNTAiLAogICJhYiAxMDAiOiAiZnJvbSAxMDAiLAogICJhYiAyNTAiOiAiZnJvbSAyNTAiLAogICJlbnRmZXJuZW4iOiAicmVtb3ZlIiwKICAiZ2xlaWNoIMK3IG1ldHJpc2NoL0lTTy9ab2xsIMK3IEZvcm0gVCAvIEZvcm0gVEsiOiAiZXF1YWwgwrcgbWV0cmljL0lTTy9pbmNoIMK3IGZvcm0gVCAvIGZvcm0gVEsiLAogICJrbGVpbmVyZXIgQWJnYW5nIMK3IEZvcm0gVCAvIEZvcm0gVEsiOiAic21hbGxlciBicmFuY2ggwrcgZm9ybSBUIC8gZm9ybSBUSyIsCiAgImtvbnplbnRyaXNjaCAoRm9ybSBSSykgLyBleHplbnRyaXNjaCAoRm9ybSBSRSkiOiAiY29uY2VudHJpYyAoZm9ybSBSSykgLyBlY2NlbnRyaWMgKGZvcm0gUkUpIiwKICAia29waWVyZW4iOiAiY29weSIsCiAgImt1cnogKEtLKSI6ICJzaG9ydCAoS0spIiwKICAibGFuZyAoS0wpIjogImxvbmcgKEtMKSIsCiAgIm1laHIiOiAibW9yZSIsCiAgIndlbmlnZXIiOiAibGVzcyIsCiAgIm1ldHJpc2NoIjogIm1ldHJpYyIsCiAgIm1ldHJpc2NoIEROIjogIm1ldHJpYyBETiIsCiAgIm9obmUgTGlwcGUgKFR5cCBJKSI6ICJ3aXRob3V0IGxpcCAodHlwZSBJKSIsCiAgIm1pdCBMaXBwZSI6ICJ3aXRoIGxpcCIsCiAgInouIEIuIGJlc29uZGVyZSBUb2xlcmFuemVuLCB3ZWl0ZXJlIFplcnRpZmlrYXRlLCBMaWVmZXJiZWRpbmd1bmdlbiI6ICJlLmcuIHNwZWNpYWwgdG9sZXJhbmNlcywgZnVydGhlciBjZXJ0aWZpY2F0ZXMsIGRlbGl2ZXJ5IHRlcm1zIiwKICAiUHLDvGZlIGRpZSBiZWxlZ3RlbiBBbmdhYmVuIHVuZCBlcmfDpG56ZSBkZWluZW4gS29udGFrdC4iOiAiQ2hlY2sgdGhlIGRldGFpbHMgcHJvdmlkZWQgYW5kIGFkZCB5b3VyIGNvbnRhY3QgZGF0YS4iLAogICJtaXQgUHJlaXNlbiI6ICJ3aXRoIHByaWNlcyIsCiAgIlN0w7xjayI6ICJwY3MiCiB9LAogImJlZ3JpZmZlIjogewogICJCb2dlbiA0NcKwIjogIjQ1wrAgYmVuZCIsCiAgIkJvZ2VuIDkwwrAiOiAiOTDCsCBiZW5kIiwKICAiVC1TdMO8Y2sgZ2xlaWNoIjogIkVxdWFsIHRlZSIsCiAgIlQtU3TDvGNrIHJlZHV6aWVydCI6ICJSZWR1Y2luZyB0ZWUiLAogICJULVN0w7xjayI6ICJUZWUiLAogICJDbGFtcC1WZXJiaW5kdW5nIjogIkNsYW1wIGNvbm5lY3Rpb24iLAogICJLb21wbGV0dGUgVHJpQ2xhbXAgVmVyYmluZHVuZyI6ICJDb21wbGV0ZSBUcmktQ2xhbXAgY29ubmVjdGlvbiIsCiAgIkVpbnplbG5lciBUcmlDbGFtcC1TdHV0emVuIjogIlNpbmdsZSBUcmktQ2xhbXAgZmVycnVsZSIsCiAgIkVpbnplbG5lIERpY2h0dW5nIjogIlNpbmdsZSBnYXNrZXQiLAogICJCbGluZGRlY2tlbCI6ICJCbGFuayBjYXAiLAogICJSZWR1emllcnVuZyI6ICJSZWR1Y2VyIiwKICAiU3TDvGNrIjogInBjcyIsCiAgIkZvcm0gVCI6ICJmb3JtIFQiLAogICJGb3JtIFRLIjogImZvcm0gVEsiLAogICJFbmRrdW5kZW5wcmVpc2UiOiAiRW5kIGN1c3RvbWVyIHByaWNlcyIsCiAgIk9FTS1QcmVpc2UiOiAiT0VNIHByaWNlcyIsCiAgIm1pdCBQcmVpc2VuIjogIndpdGggcHJpY2VzIiwKICAiYXVmIEFuZnJhZ2UiOiAib24gcmVxdWVzdCIKIH0KfTs8L3NjcmlwdD48c2NyaXB0Pi8qIEVuZ2xpc2NoZSBPYmVyZmxhZWNoZSBkZXMgS29uZmlndXJhdG9ycy4KICoKICogRGVyIEtvbmZpZ3VyYXRvciBiYXV0IHNlaW5lIE9iZXJmbGFlY2hlIGF1cyBWb3JsYWdlbiBpbiBhcHAuanMgenVzYW1tZW4uIFN0YXR0CiAqIGh1bmRlcnRlIFplaWNoZW5rZXR0ZW4gaW0gUXVlbGx0ZXh0IHVtenViYXVlbiwgd2lyZCBkaWUgZmVydGlnZSBPYmVyZmxhZWNoZSBoaWVyCiAqIHVlYmVyc2V0enQ6IGV4YWt0ZSBUZXh0a25vdGVuIGF1cyBkZW0gV29lcnRlcmJ1Y2gsIGRhbmFjaCBlaW5lIGt1cnplLCBnZXBydWVmdGUKICogQmVncmlmZnNsaXN0ZSBmdWVyIHp1c2FtbWVuZ2VzZXR6dGUgQmV6ZWljaG51bmdlbiB3aWUgIkJvZ2VuIDkwwrAgwrcgMSBTdHVlY2siLgogKgogKiBTY2h1dHpyZWdlbG4sIGRhbWl0IGtlaW5lIFRlY2huaWsgZ2V0cm9mZmVuIHdpcmQ6CiAqICAtIEFydGlrZWwtIHVuZCBLb25maWd1cmF0aW9uc251bW1lcm4gKE11c3RlciB3aWUgQjQ1LUROMDYtQS0xLjQ0MDQtSDMpIGJsZWliZW4gdW5iZXJ1ZWhydC4KICogIC0gS25vdGVuIGluIDxzY3JpcHQ+IHVuZCA8c3R5bGU+IHdlcmRlbiBuaWUgYW5nZWZhc3N0LgogKiAgLSBXYWVocmVuZCBkZXIgZWlnZW5lbiBBZW5kZXJ1bmdlbiBpc3QgZGVyIEJlb2JhY2h0ZXIgc3RpbGxnZWxlZ3QsIHNvbnN0IGxvZXN0IGRpZQogKiAgICBVZWJlcnNldHp1bmcgc2ljaCBzZWxic3Qgd2llZGVyIGF1cy4KICogRWluZ2ViYXV0IGFtIDE3LjA5LjIwMjYgZnVlciBkaWUgZW5nbGlzY2hlbiBMYW5kaW5ncGFnZXMuCiAqLwooZnVuY3Rpb24gKCkgewogIHZhciB3YiA9IHdpbmRvdy5XRUlTU19JMThOOwogIGlmICghd2IgfHwgIXdiLmV4YWt0KSB7IHJldHVybjsgfQogIHZhciBleGFrdCA9IHdiLmV4YWt0OwogIHZhciBiZWdyaWZmZSA9IE9iamVjdC5rZXlzKHdiLmJlZ3JpZmZlIHx8IHt9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoOyB9KTsKICB2YXIgY29kZU11c3RlciA9IC9eW0EtWl17MSw0fVxkKlstXVtBLVowLTkuXC1dKyQvOwogIHZhciBsYWV1ZnQgPSBmYWxzZTsKICB2YXIgZXJuZXV0ID0gZmFsc2U7CgogIGZ1bmN0aW9uIHVlYmVyc2V0emVUZXh0KHJvaCkgewogICAgdmFyIHQgPSByb2gudHJpbSgpOwogICAgaWYgKCF0KSB7IHJldHVybiBudWxsOyB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4YWt0LCB0KSkgewogICAgICByZXR1cm4gcm9oLnJlcGxhY2UodCwgZXhha3RbdF0pOwogICAgfQogICAgaWYgKGNvZGVNdXN0ZXIudGVzdCh0KSkgeyByZXR1cm4gbnVsbDsgfQogICAgdmFyIG5ldSA9IHJvaCwgZ2V0cm9mZmVuID0gZmFsc2U7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJlZ3JpZmZlLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBkZSA9IGJlZ3JpZmZlW2ldOwogICAgICBpZiAobmV1LmluZGV4T2YoZGUpICE9PSAtMSkgeyBuZXUgPSBuZXUuc3BsaXQoZGUpLmpvaW4od2IuYmVncmlmZmVbZGVdKTsgZ2V0cm9mZmVuID0gdHJ1ZTsgfQogICAgfQogICAgcmV0dXJuIGdldHJvZmZlbiA\\\/IG5ldSA6IG51bGw7CiAgfQoKICBmdW5jdGlvbiBkdXJjaGxhdWYod3VyemVsKSB7CiAgICB2YXIgbGF1ZiA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIod3VyemVsLCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwgewogICAgICBhY2NlcHROb2RlOiBmdW5jdGlvbiAoaykgewogICAgICAgIHZhciBlID0gay5wYXJlbnRFbGVtZW50OwogICAgICAgIGlmICghZSkgeyByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUOyB9CiAgICAgICAgdmFyIHRhZyA9IChlLnRhZ05hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgaWYgKHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAnc3R5bGUnKSB7IHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9SRUpFQ1Q7IH0KICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUOwogICAgICB9CiAgICB9KTsKICAgIHZhciBrbm90ZW4gPSBbXSwgazsKICAgIHdoaWxlICgoayA9IGxhdWYubmV4dE5vZGUoKSkpIHsga25vdGVuLnB1c2goayk7IH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwga25vdGVuLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBuZXUgPSB1ZWJlcnNldHplVGV4dChrbm90ZW5baV0udGV4dENvbnRlbnQgfHwgJycpOwogICAgICBpZiAobmV1ICE9PSBudWxsICYmIG5ldSAhPT0ga25vdGVuW2ldLnRleHRDb250ZW50KSB7IGtub3RlbltpXS50ZXh0Q29udGVudCA9IG5ldTsgfQogICAgfQogICAgdmFyIGF0dHJpYnV0ZSA9IFsndGl0bGUnLCAnYXJpYS1sYWJlbCcsICdwbGFjZWhvbGRlciddOwogICAgdmFyIGVsZW1lbnRlID0gd3VyemVsLnF1ZXJ5U2VsZWN0b3JBbGwgPyB3dXJ6ZWwucXVlcnlTZWxlY3RvckFsbCgnW3RpdGxlXSxbYXJpYS1sYWJlbF0sW3BsYWNlaG9sZGVyXScpIDogW107CiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGVsZW1lbnRlLmxlbmd0aDsgaisrKSB7CiAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXR0cmlidXRlLmxlbmd0aDsgYSsrKSB7CiAgICAgICAgdmFyIHdlcnQgPSBlbGVtZW50ZVtqXS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlW2FdKTsKICAgICAgICBpZiAoIXdlcnQpIHsgY29udGludWU7IH0KICAgICAgICB2YXIgbmV1QSA9IHVlYmVyc2V0emVUZXh0KHdlcnQpOwogICAgICAgIGlmIChuZXVBICE9PSBudWxsICYmIG5ldUEgIT09IHdlcnQpIHsgZWxlbWVudGVbal0uc2V0QXR0cmlidXRlKGF0dHJpYnV0ZVthXSwgbmV1QSk7IH0KICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gYW5zdG9zc2VuKCkgewogICAgLy8gV2FlaHJlbmQgZWluZXMgRHVyY2hsYXVmcyBlaW50cmVmZmVuZGUgQWVuZGVydW5nZW4gZHVlcmZlbiBuaWNodCB2ZXJsb3JlbiBnZWhlbi4KICAgIC8vIEVyc3RlIEZhc3N1bmcgaGF0IHNpZSB2ZXJ3b3JmZW4sIGRhZHVyY2ggYmxpZWJlbiBzcGFldGVyIGdlcmVuZGVydGUgU2Nocml0dGUgZGV1dHNjaC4KICAgIGlmIChsYWV1ZnQpIHsgZXJuZXV0ID0gdHJ1ZTsgcmV0dXJuOyB9CiAgICBsYWV1ZnQgPSB0cnVlOwogICAgdHJ5IHsgZHVyY2hsYXVmKGRvY3VtZW50LmJvZHkpOyB9IGZpbmFsbHkgewogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgewogICAgICAgIGxhZXVmdCA9IGZhbHNlOwogICAgICAgIGlmIChlcm5ldXQpIHsgZXJuZXV0ID0gZmFsc2U7IGFuc3Rvc3NlbigpOyB9CiAgICAgIH0pOwogICAgfQogIH0KCiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgnbGFuZycsICdlbicpOwogIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBhbnN0b3NzZW4pOwogIH0gZWxzZSB7CiAgICBhbnN0b3NzZW4oKTsKICB9CiAgdmFyIGJlb2JhY2h0ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAoKSB7CiAgICBpZiAobGFldWZ0KSB7IGVybmV1dCA9IHRydWU7IHJldHVybjsgfQogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuc3Rvc3Nlbik7CiAgfSk7CiAgYmVvYmFjaHRlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWUgfSk7Cn0pKCk7Cjwvc2NyaXB0PgogIDxzY3JpcHQ+Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFdlaXNzIEFwcGFyYXRlYmF1IC0gRml0dGluZ3MtS29uZmlndXJhdG9yCiAqIGRyYXcuanMgIC0gIFBhcmFtZXRyaXNjaGUgRElOLW5haGUgMkQtVGVjaG5pa3plaWNobnVuZyAoVmFuaWxsYSBKUykKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUmVpbmUgRnVua3Rpb25lbjogIHBhcmFtcyAtPiBTVkctU3RyaW5nLiAgS2VpbiBGcmFtZXdvcmssIGtlaW4gQnVpbGQtU3RlcC4KICogR2VvbWV0cmllICsgTWFzc3phaGxlbiB3YWNoc2VuIGxpdmUvcGFyYW1ldHJpc2NoIG1pdCBkbi9vZC93YWxsL2xlbmd0aCB1c3cuCiAqIEJhc2lzOiByZWNoZXJjaGUvMDMtc3ZnLXN0YXJ0ZXIuanMgKE5vZGUtdmVyaWZpemllcnQpLCBlcndlaXRlcnQgdW0gZWNodGUKICogRmxhbnNjaC1NYXNzZSAocGFyYW1zLmZsYW5nZU9kKSB1bmQgZWluZSBLbGFtbWVyLUZyb250YW5zaWNodC4KICoKICogICByZW5kZXJGaXR0aW5nKHBhcmFtcywgb3B0cykgLT4gc3RyaW5nICAgKGtvbXBsZXR0ZXIgPHN2Zz4uLi48L3N2Zz4pCiAqCiAqIFRoZW1lOiAgRmFyYmVuIHVlYmVyIENTUy1WYXJpYWJsZW4gKC0td3otKiksIEZhbGxiYWNrcyBlaW5nZWJhdXQuCiAqIFRhYmxldDogS2VpbiBiYWNrZHJvcC1maWx0ZXIsIGtlaW5lIFNjcm9sbC1SZXZlYWwgLSByZWluZXMgc3RhdGlzY2hlcyBTVkcuCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCid1c2Ugc3RyaWN0JzsKCihmdW5jdGlvbiAocm9vdCkgewoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZhcmJlbiAqLwovKiBEaWVzZSBUYWJlbGxlIGlzdCBudXIgZGVyIFJ1ZWNrZmFsbC4gSW0gS29uZmlndXJhdG9yIGdld2lubnQgaW1tZXIgby5nYXNrZXRDb2xvcgogKiAoc2llaGUgdW50ZW4gaW4gcHJlcCgpKSwgdW5kIGFwcC5qcyByZWljaHQgZG9ydCBkaWUgRmFyYmUgYXVzIGRhdGEuanMgZHVyY2guIFZQCiAqIGZlaGx0ZSBoaWVyIHRyb3R6ZGVtIHVuZCB3YXIgZGFtaXQgZGVyIGVpbnppZ2UgV2Vya3N0b2ZmIG9obmUgUnVlY2tmYWxsd2VydCAtCiAqIGplZGVyIEF1ZnJ1ZiBvaG5lIGdhc2tldENvbG9yIGhhZXR0ZSBpaG4gRVBETS1zY2h3YXJ6IGdlemVpY2huZXQuIEVyZ2Flbnp0IGFtCiAqIDIxLjA4LjIwMjYgbWl0IGRlbXNlbGJlbiBXZXJ0LCBkZW4gZGF0YS5qcyBmdWVocnQsIGRhbWl0IGVzIGZ1ZXIgVlAgbmljaHQgendlaQogKiB2ZXJzY2hpZWRlbmUgRmFyYmVuIGltIFByb2pla3QgZ2lidC4gKi8KY29uc3QgR0FTS0VUX0NPTE9SUyA9IHsgRVBETTonIzJiMmIyYicsIFZNUTonI2U3ZTJkOCcsIEZLTTonIzJmN2QzYScsIFBURkU6JyNmNGY0ZjQnLCBWUDonI2VmZTlkZicgfTsKLyogVlAgZmVobHRlIGhpZXI6IGRpZSBaZWljaG51bmcgaGF0IGRpZSBpbnRlcm5lIGlkIGF1c2dlZ2ViZW4gdW5kIGRlbSBLdW5kZW4KICogIlZQIiBzdGF0dCAiUFRGRS9GS00iIGdlemVpZ3QgKEJlZnVuZCAxMS4wOC4yMDI2KS4gRGllIFNjaHJlaWJ3ZWlzZSBmb2xndAogKiBkYXRhLmpzIChhcnRpa2VsQ29kZSAnUFRGRS9GS00nLCBCZXJuZCAyNy4wNy4yMDI2OiBQVEZFIGF1c3NlbiwgRktNIGltIEtlcm4pLiAqLwpjb25zdCBHQVNLRVRfTEFCRUwgID0geyBFUERNOidFUERNJywgVk1ROidTaWxpa29uIChWTVEpJywgRktNOidWaXRvbiAoRktNKScsIFBURkU6J1BURkUnLCBWUDonUFRGRS9GS00nIH07CgovKiBDbGFtcC1GbGFuc2NoZHVyY2htZXNzZXIgKEJ1bmQpIGplIFJvaHItT0QgLSBOYWVoZXJ1bmcsIG51ciB3ZW5uIHBhcmFtcwogKiBLRUlOIGZsYW5nZU9kIGxpZWZlcnQuIEVjaHRlIFdlcnRlIGtvbW1lbiBhdXMgZGF0YS5qcyAoRElOIDMyNjc2KS4gKi8KY29uc3QgQ0xBTVBfRkxBTkdFX09EID0gewogIDYuMzU6MjUsIDg6MjUsIDkuNTM6MjUsIDEwOjI1LCAxMi43OjI1LCAxMzozNCwgMTk6MzQsIDE5LjA1OjI1LCAyMzozNCwKICAyNTo1MC41LCAyNS40OjUwLjUsIDI2Ljk6NTAuNSwgMjk6NTAuNSwgMzMuNzo1MC41LCAzNTo1MC41LCAzODo1MC41LCA0MTo1MC41LAogIDQyLjQ6NjQsIDQ4LjM6NjQsIDUwLjg6NjQsIDUzOjY0LCA2MC4zOjc3LjUsIDYzLjU6NzcuNSwgNzA6OTEsIDc2LjE6OTEsCiAgNzYuMjo5MSwgODU6MTA2LCA4OC45OjEwNiwgMTAxLjY6MTE5LCAxMDQ6MTE5Cn07CmZ1bmN0aW9uIGZsYW5nZU9kRm9yKG9kKSB7CiAgaWYgKENMQU1QX0ZMQU5HRV9PRFtvZF0pIHJldHVybiBDTEFNUF9GTEFOR0VfT0Rbb2RdOwogIGxldCBiZXN0ID0gbnVsbCwgYmQgPSBJbmZpbml0eTsKICBmb3IgKGNvbnN0IGsgaW4gQ0xBTVBfRkxBTkdFX09EKSB7IGNvbnN0IGQgPSBNYXRoLmFicygrayAtIG9kKTsgaWYgKGQgPCBiZCkgeyBiZCA9IGQ7IGJlc3QgPSBDTEFNUF9GTEFOR0VfT0Rba107IH0gfQogIGlmIChiZXN0ICYmIGJkIDw9IDQpIHJldHVybiBiZXN0OwogIHJldHVybiBNYXRoLm1heChvZCArIDIyLCBvZCAqIDEuMjUgKyA2KTsKfQoKLyogLS0tLSBHZXplaWNobmV0ZSBIb2VoZSBkZXMgQ2xhbXBidW5kcyAoVEMtVGVpbCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQmVybmQgMjguMDcuMjAyNjogIkVpbmZhY2ggZGVuIFRlaWwgZGVzIFRDJ3Mga3VlcnplciB6ZWljaG5lbiB2b24gQW5mYW5nIGFuLgogKiBEYXMgd3VlcmRlIGljaCBhYmVyIGJlaSBiZWlkZW4gVmFyaWFudGVuIEtLIHVuZCBLTCBnbGVpY2ggbWFjaGVuLiIgdW5kICJCZWkgZGVuCiAqIGRpY2t3YW5kaWdlbiBUYW5rc3R1dHplbiB3dWVyZGUgaWNoIGF1Y2ggZGllIGdsZWljaGUgSG9laGUgZGVzIFRDJ3Mgd2llIGJlaSBkZW4KICogbm9ybWFsZW4gU3R1dHplbiBtYWNoZW4uIERhIHBhc3N0IGVzIHp3YXIgYWJlciBzaWVodCBnbGVpY2htYWVzc2lnZXIgYXVzLiIKICoKICogQmlzaGVyIGhpbmcgZGllIEJ1bmRob2VoZSBhbiBSb2hyLeKMgCBVTkQgU3R1dHplbmxhZW5nZSAob2QqMCwxNCArIG9kKjAsMDgsIG5hY2gKICogb2JlbiBnZWRlY2tlbHQgYmVpIDggKyA0LDUgdW5kIHp1c2FldHpsaWNoIGFuIEwqMCwyMCArIEwqMCwxMCkuIEdlbmF1IGRlcgogKiBMLUFudGVpbCBtYWNodGUgS0sgdW5kIEtMIHVuZ2xlaWNoOiBETjEwMCBLSyA4LDQwIG1tIGdlZ2VuIEtMIDEyLDUwIG1tLiBEZXIKICogZGlja3dhbmRpZ2UgVGFua3N0dXR6ZW4gKEwgPSA2MCBtbSwgYWJlciBncm9lc3NlcmVyIEF1c3Nlbi3ijIApIGxhbmRldGUgYWIgRE42NQogKiBhdWYgZGVtIEtMLVdlcnQgdW5kIHdpY2ggYmVpIEROMTUgYmlzIERONTAgdm9uIGJlaWRlbiBhYi4KICoKICogTmV1ZSBSZWdlbCAtIEVJTiBXZXJ0IGplIEdyb2Vzc2U6CiAqICAgLSBUcmVpYmVyIGlzdCBkZXIgRkxBTlNDSC3ijIAuIEVyIGlzdCBkYXMgZWluemlnZSBHcm9lc3Nlbm1hc3MsIGRhcyBmdWVyIEtLLCBLTAogKiAgICAgdW5kIGRpY2t3YW5kaWcgaWRlbnRpc2NoIGlzdCAoZGllIFRDRC1TcGFsdGUgVEQgZGVja3Qgc2ljaCB6ZWlsZW53ZWlzZSBtaXQKICogICAgIGZsYW5nZU9EIGRlciBESU4zMjY3Ni1SZWloZW4sIHNpZWhlIGRhdGEuanMpLiBEZXIgUm9oci3ijIAgdGF1Z3QgbmljaHQ6IGVyIGlzdAogKiAgICAgYmVpbSBkaWNrd2FuZGlnZW4gU3R1dHplbiBncm9lc3NlciAoRE4xNTogMjQgc3RhdHQgMTkgbW0pLgogKiAgIC0gRGllIFN0dXR6ZW5sYWVuZ2UgZ2VodCBOSUNIVCBtZWhyIGluIGRpZSBIb2VoZSBlaW4sIG51ciBub2NoIGFscyBEZWNrZWx1bmcuCiAqICAgLSBXZXJ0ZWJlcmVpY2ggdW52ZXJhZW5kZXJ0IG5hY2ggdW50ZW4gKDQsNTAgbW0gPSBkaWUgYWx0ZW4gTWluZGVzdHdlcnRlCiAqICAgICAzLDAwIEJ1bmQgKyAxLDUwIEZhc2UpLCBuYWNoIG9iZW4gYXVmIDgsNDAgbW0gZ2VzZW5rdC4gOCw0MCBpc3Qga2VpbiBuZXVlcgogKiAgICAgV2VydCwgc29uZGVybiBnZW5hdSBkaWUgSG9laGUsIGRpZSBkaWUgS1VSWkUgVmFyaWFudGUgKEtLKSBiaXNoZXIgYWIgRE41MAogKiAgICAgc2Nob24gaGF0dGUgKDUsNjAgKyAyLDgwKSAtIGFsc28gZGFzIHZvbiBCZXJuZCBnZXd1ZW5zY2h0ZSAia3VlcnplciIuCiAqICAgLSBBdWZ0ZWlsdW5nIHdpZSBiaXNoZXIgMjoxIGluIEJ1bmQgdW5kIEZhc2UgKDUsNjA6Miw4MCB1bmQgMywwMDoxLDUwIHNpbmQKICogICAgIGJlaWRlIGV4YWt0IDI6MSkuCiAqICAgLSByZWZGbGFuc2NoIDY0ID0ga2xlaW5zdGVyIEZsYW5zY2gt4oyALCBiZWkgZGVtIGRpZSBhbHRlIEtLLVZhcmlhbnRlIGlocmVuCiAqICAgICBIb2VjaHN0d2VydCBlcnJlaWNodGUgKERONTApLiBEb3J0IHRyaWZmdCBkaWUgR2VyYWRlIGRpZSBPYmVyZ3JlbnplLgogKgogKiBERUNLRUxVTkcgQkxFSUJUICh1cnNwcnVlbmdsaWNoZSBLb3JyZWt0dXIgdm9tIDI3LjA3LjIwMjYsIGRhcmYgbmljaHQgenVydWVja2ZhbGxlbik6CiAqIERlciBCdW5kIGRhcmYgbmllIGxhZW5nZXIgd2VyZGVuIGFscyBkZXIgU3R1dHplbi4gRXIgbmltbXQgaG9lY2hzdGVucyBkaWUgaGFsYmUKICogU3R1dHplbmxhZW5nZSBlaW4uIEZ1ZXIgYWxsZSBiZWxlZ3RlbiBHcm9lc3Nlbi9WYXJpYW50ZW4gZ3JlaWZ0IGRpZXNlIERlY2tlbHVuZwogKiBuaWNodCAoZ3JvZXNzdGVyIEJlZGFyZjogTlc0Miw0L05XNDgsMy8yIiBtaXQgS0sgMjEsNSAtPiA4LDQwLzIxLDUgPSAwLDM5MSksCiAqIGRpZSBIb2VoZSBibGVpYnQgZG9ydCBhbHNvIGplIEdyb2Vzc2Ugd2lya2xpY2ggaWRlbnRpc2NoLiBTaWUgaXN0IHJlaW5lcwogKiBTaWNoZXJoZWl0c25ldHogZnVlciBuaWNodCBiZWxlZ3RlL3NlaHIga3VyemUgTGFlbmdlbi4KICoKICogRGFzIGlzdCBlaW5lIHJlaW5lIERBUlNURUxMVU5HU0dST0VTU0UgLSBkZXIgQnVuZCB0cmFlZ3Qga2VpbmUgTWFzc3phaGwuICovCmNvbnN0IFRDX0JVTkQgPSB7IG1pbjogNC41LCBtYXg6IDguNCwgcmVmRmxhbnNjaDogNjQsIG1heEFudGVpbEw6IDAuNSB9OwpmdW5jdGlvbiB0Y0J1bmRIb2VoZShmbGFuZ2VPZCwgTCkgewogIGNvbnN0IHJvaCA9IHBvc2l0aXZlKGZsYW5nZU9kKSA\\\/IGZsYW5nZU9kIC8gVENfQlVORC5yZWZGbGFuc2NoICogVENfQlVORC5tYXggOiBUQ19CVU5ELm1pbjsKICBjb25zdCBoID0gTWF0aC5taW4oVENfQlVORC5tYXgsIE1hdGgubWF4KFRDX0JVTkQubWluLCByb2gpKTsKICByZXR1cm4gTWF0aC5taW4oaCwgTCAqIFRDX0JVTkQubWF4QW50ZWlsTCk7Cn0KCi8qIC0tLS0gQmF1bGFlbmdlIGw0IGRlciBrb21wbGV0dGVuIENsYW1wLVZlcmJpbmR1bmcgKERJTiAzMjY3NikgLS0tLS0tLS0tLS0tCiAqIFF1ZWxsZTogV0VJU1NfREFUQS5tYXNzZS5kaW4zMjY3Ni5sNCAvIC5sNEZ1ZXIgKFNwYWx0ZSBsNCBkZXIgVGFiZWxsZW4gMi8zLzQsCiAqIHZvbiBCZXJuZCBhbSAyNy4wNy4yMDI2IGdlbGllZmVydCkuIGw0IGlzdCBkaWUgTGFlbmdlIGRlciBNT05USUVSVEVOIFZlcmJpbmR1bmcKICogKHp3ZWkgU3R1dHplbiArIERpY2h0dW5nKSAtIGRlc2hhbGIgbnVyIGJlaW0ga29tcGxldHRlbiBWZXJiaW5kdW5ncy1UeXAsIG5pZQogKiBiZWltIGVpbnplbG5lbiBTdHV0emVuLCBiZWltIEJsaW5kZGVja2VsIG9kZXIgYmVpbSBkaWNrd2FuZGlnZW4gVGFua3N0dXR6ZW4uCiAqCiAqIGRyYXcuanMgYmVrb21tdCB2b24gYXBwLmpzIHdlZGVyIFJlaWhlIG5vY2ggR3JvZXNzZW4tSUQuIERpZSBaZWlsZSB3aXJkIGRlc2hhbGIKICogdWViZXIgZHJlaSBiZWxlZ3RlLCBnZW1laW5zYW0gZWluZGV1dGlnZSBXZXJ0ZSB6dXJ1ZWNrZ2VzdWNodCAoR3JvZXNzZW4tTGFiZWwKICogYXVzIGNsYW1wU2l6ZSwgRmxhbnNjaC3ijIAsIFJvaHIt4oyAKSwgZGllIFZhcmlhbnRlIHVlYmVyIGRpZSB1ZWJlcmdlYmVuZQogKiBTdHV0emVubGFlbmdlIC0gZGllIElTVCBydy5rayBiencuIHJ3LmtsLCBoaWVyIHdpcmQgbmljaHRzIGdlc2NoYWV0enQuCiAqCiAqIEZBSUwtQ0xPU0VEIGluIGRyZWkgRmFlbGxlbiwgZGFubiBibGVpYnQgZGVyIFBsYXR6aGFsdGVyIHN0ZWhlbjoKICogICAxLiBEaWUgbDQtVGFiZWxsZSBmZWhsdCBnYW56IChkcmF3LmpzIGxhZXVmdCBhdWNoIG9obmUgZGF0YS5qcyBpbSBOb2RlLURlbW8pLgogKiAgIDIuIEtlaW5lIFplaWxlIG9kZXIga2VpbmUgVmFyaWFudGUgdHJpZmZ0IC0+IGtlaW4gQmVsZWcuCiAqICAgMy4gbDQgPCAyIHggU3R1dHplbmxhZW5nZS4gRGFzIGlzdCBlaW4gV0lERVJTUFJVQ0ggaW4gZGVuIFF1ZWxsZGF0ZW4sIGtlaW4KICogICAgICBmZWhsZW5kZXIgV2VydDogYmV0cmlmZnQgZ2VuYXUgUmVpaGUgQSAvIERONTAgLyBLSyAoWmVpbGUga2sgPSAyOCwwLCBhYmVyCiAqICAgICAgbDQgS0sgPSA0NCw3ID0gMiB4IDIxLDUgKyAxLDcgd2llIGJlaSBETjI1L0ROMzIvRE40MCkuIEJlaWRlIFdlcnRlIHNpbmQKICogICAgICBiZWxlZ3QgdW5kIHdpZGVyc3ByZWNoZW4gc2ljaC4gRWluZSBCYXVsYWVuZ2UgenUgYmVtYXNzZW4sIGRpZSBrbGVpbmVyIGlzdAogKiAgICAgIGFscyBkaWUgYmVpZGVuIGdlemVpY2huZXRlbiwgZWJlbmZhbGxzIGJlbWFzc3RlbiBTdHV0emVuLCB3YWVyZSBlaW5lCiAqICAgICAgWmVpY2hudW5nLCBkaWUgc2ljaCBzZWxic3Qgd2lkZXJzcHJpY2h0IC0+IGxpZWJlciBQbGF0emhhbHRlciArIFJ1ZWNrZnJhZ2UuCiAqCiAqIFJ1ZWNrZ2FiZTogeyB3ZXJ0LCByZWloZSwgaWQsIHZhcmlhbnRlLCBzcGFsdCB9IG9kZXIgbnVsbC4KICogc3BhbHQgPSBsNCAtIDIgeCBTdHV0emVubGFlbmdlIC0+IGV4YWt0IGRlciBEaWNodHVuZ3NzcGFsdCwgbWl0IGRlbSBkaWUKICogZ2V6ZWljaG5ldGUgR2VzYW10bGFlbmdlIGRhcyBiZW1hc3N0ZSBsNCB3aXJrbGljaCB0cmlmZnQuICovCi8qIFdlcnQgYXVzIGRlciBsNC1UYWJlbGxlIGhvbGVuLgogKgogKiBXSUNIVElHLCBoaWVyIGxhZyBhbSAyOC4wNy4yMDI2IGVpbiBEZWZla3Q6IEZydWVoZXIgaGluZyBkYXMgYWxsZWluIGFuCiAqIG1kLmw0RnVlcigpLiBJbSBTdGFuZGFsb25lLUJ1aWxkIGZ1bmt0aW9uaWVydCBkYXMsIHVlYmVyIFdvcmRQcmVzcyBOSUNIVCAtCiAqIGRhcyBQbHVnaW4gaW5qaXppZXJ0IGRpZSBLb25maWd1cmF0aW9uIG1pdCB3cF9qc29uX2VuY29kZSBhbHMgcmVpbmVzIEpTT04sCiAqIHVuZCBGdW5rdGlvbmVuIHVlYmVybGViZW4gZWluZSBKU09OLVNlcmlhbGlzaWVydW5nIG5pY2h0LiBsNEZ1ZXIgd2FyIGRhcwogKiBlaW56aWdlIEZ1bmt0aW9uc2ZlbGQgYW4gV0VJU1NfREFUQSwgZmVobHRlIGltIFdpZGdldCBhbHNvIGltbWVyLCB1bmQgZGllCiAqIEJhdWxhZW5nZSBibGllYiBkb3J0IGRhdWVyaGFmdCBhdWYgIkJhdWxhZW5nZSBmb2xndCIgc3RlaGVuLgogKiBEZXNoYWxiIGlzdCBkaWUgUm9odGFiZWxsZSBtZC5sNCBkZXIgdmVyYmluZGxpY2hlIFdlZyAtIHNpZSBpc3QgaW0gSlNPTgogKiBlbnRoYWx0ZW4uIGw0RnVlciB3aXJkIG51ciBub2NoIGdlbnV0enQsIHdlbm4gZXMgdm9yaGFuZGVuIGlzdC4gKi8KZnVuY3Rpb24gbDRXZXJ0KG1kLCByZWloZSwgaWQsIHZhcmlhbnRlKSB7CiAgY29uc3Qga2V5ID0gU3RyaW5nKHZhcmlhbnRlKS50b1VwcGVyQ2FzZSgpID09PSAnS0wnID8gJ0tMJyA6ICdLSyc7CiAgY29uc3QgdGFiID0gbWQgJiYgbWQubDQgJiYgbWQubDRbcmVpaGVdOwogIGNvbnN0IHJvdyA9IHRhYiAmJiB0YWJbaWRdOwogIGlmIChyb3cgJiYgcG9zaXRpdmUocm93W2tleV0pKSByZXR1cm4gcm93W2tleV07CiAgaWYgKG1kICYmIHR5cGVvZiBtZC5sNEZ1ZXIgPT09ICdmdW5jdGlvbicpIHsKICAgIGNvbnN0IHYgPSBtZC5sNEZ1ZXIocmVpaGUsIGlkLCBrZXkpOwogICAgaWYgKHBvc2l0aXZlKHYpKSByZXR1cm4gdjsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gbDRJbmZvKG8pIHsKICBjb25zdCBtZCA9IHJvb3QgJiYgcm9vdC5XRUlTU19EQVRBICYmIHJvb3QuV0VJU1NfREFUQS5tYXNzZSAmJiByb290LldFSVNTX0RBVEEubWFzc2UuZGluMzI2NzY7CiAgaWYgKCFtZCB8fCAhbWQucmVpaGVuKSByZXR1cm4gbnVsbDsKICBpZiAoIW1kLmw0ICYmIHR5cGVvZiBtZC5sNEZ1ZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBudWxsOwogIGNvbnN0IEwgPSBvLmxlbmd0aDsKICBpZiAoIXBvc2l0aXZlKEwpKSByZXR1cm4gbnVsbDsKICBjb25zdCBsYWJlbCA9IFN0cmluZyhvLmNsYW1wU2l6ZSA9PSBudWxsID8gJycgOiBvLmNsYW1wU2l6ZSkudHJpbSgpOwogIGlmICghbGFiZWwpIHJldHVybiBudWxsOwogIGZvciAoY29uc3QgayBvZiBbJ0EnLCAnQicsICdDJ10pIHsKICAgIGNvbnN0IHJlaWhlID0gbWQucmVpaGVuW2tdOwogICAgaWYgKCFyZWloZSB8fCAhcmVpaGUucm93cykgY29udGludWU7CiAgICBmb3IgKGNvbnN0IHJvdyBvZiByZWloZS5yb3dzKSB7CiAgICAgIC8vIERyZWkgV2VydGUgbXVlc3NlbiB6dXNhbW1lbnBhc3NlbiAtIExhYmVsIGFsbGVpbiB3dWVyZGUgYXVjaCBkaWUKICAgICAgLy8gZGlja3dhbmRpZ2UgVENELVplaWxlIHRyZWZmZW4sIGRpZSBkaWVzZWxiZW4gTGFiZWxzIGZ1ZWhydC4KICAgICAgaWYgKFN0cmluZyhyb3cubGFiZWwpICE9PSBsYWJlbCkgY29udGludWU7CiAgICAgIGlmIChyb3cuZmxhbmdlT0QgIT09IG8uZmxhbmdlT2QgfHwgcm93LnR1YmVPRCAhPT0gby5vZCkgY29udGludWU7CiAgICAgIGNvbnN0IHZhcmlhbnRlID0gKHJvdy5rayAhPSBudWxsICYmIHJvdy5rayA9PT0gTCkgPyAnS0snCiAgICAgICAgOiAocm93LmtsICE9IG51bGwgJiYgcm93LmtsID09PSBMKSA\\\/ICdLTCcgOiBudWxsOwogICAgICBpZiAoIXZhcmlhbnRlKSByZXR1cm4gbnVsbDsKICAgICAgY29uc3Qgd2VydCA9IGw0V2VydChtZCwgaywgcm93LmlkLCB2YXJpYW50ZSk7CiAgICAgIGlmICghcG9zaXRpdmUod2VydCkpIHJldHVybiBudWxsOwogICAgICBjb25zdCBzcGFsdCA9IHdlcnQgLSAyICogTDsKICAgICAgaWYgKHNwYWx0IDwgMCkgcmV0dXJuIG51bGw7ICAgICAgICAgICAgICAvLyBGYWxsIDMsIHNpZWhlIG9iZW4KICAgICAgcmV0dXJuIHsgd2VydDogd2VydCwgcmVpaGU6IGssIGlkOiByb3cuaWQsIHZhcmlhbnRlOiB2YXJpYW50ZSwgc3BhbHQ6IHNwYWx0IH07CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9Ci8qIEtsZWluc3RlciBnZXplaWNobmV0ZXIgRGljaHR1bmdzc3BhbHQuIEluIDIxIGRlciA4MiBiZWxlZ3RlbiBLb21iaW5hdGlvbmVuIGlzdAogKiBsNCBsYXV0IE5vcm0gZXhha3QgMiB4IGwzIChGbGFuc2NoZmxhZWNoZW4gbWV0YWxsaXNjaCBhdWYgQmxvY2spLCBkZXIgcmVjaG5lcmlzY2hlCiAqIFNwYWx0IGFsc28gMCAtIGRhbm4gd2FlcmUgZGllIERpY2h0dW5nIGluIGRlciBaZWljaG51bmcgdW5zaWNodGJhci4gU2llIGJla29tbXQKICogZGVzaGFsYiAwLDggbW0gTWluZGVzdGJyZWl0ZTsgZGllIGdlemVpY2huZXRlIEdlc2FtdGxhZW5nZSBsaWVndCBpbiBkaWVzZW4gRmFlbGxlbgogKiB1bSBkaWVzZSAwLDggbW0gdWViZXIgZGVtIGJlbWFzc3RlbiBsNCAoYmVpIGRlciBrbGVpbnN0ZW4gVmVyYmluZHVuZyBsNCA9IDI1LDQKICogc2luZCBkYXMgMywxICUpLiBEaWUgTUFTU1pBSEwgYmxlaWJ0IGluIGplZGVtIEZhbGwgdW52ZXJhZW5kZXJ0IGRlciBUYWJlbGxlbndlcnQuICovCmNvbnN0IERJQ0hUX1NQQUxUX01JTiA9IDAuODsKCmNvbnN0IEZJVFRJTkdfVFlQRVMgPSBbJ2NsYW1wc3R1dHplbicsJ2JsaW5ka2FwcGUnLCdibGluZGRlY2tlbCcsJ2JvZ2VuOTAnLCdib2dlbjQ1JywndHN0dWVjaycsJ3JlZHV6aWVydW5nJywna2xhbW1lcicsJ2RpY2h0dW5nJywnY29ubmVjdGZsYW5zY2gnLCdjb25uZWN0aW5saW5lJ107Cgpjb25zdCBERUZBVUxUUyA9IHsKICB0eXBlOidjbGFtcHN0dXR6ZW4nLCBkbjoyNSwgb2Q6MjUuMCwgd2FsbDoxLjUsIGxlbmd0aDoxMDAsIGNsYW1wU2l6ZTonRE4yNScsCiAgYmVuZFJhZGl1czozOCwgb2QyOjIwLjAsIGJyYW5jaE9kOm51bGwsIGVjY2VudHJpYzpmYWxzZSwgZmxhbmdlT2Q6bnVsbCwKICAvLyBSMy0zL1IzLTQ6IEJhdWZvcm0gZGVzIFQtU3TDvGNrcy4gJ1QnID0gQWJnYW5nIGdsZWljaCBsYW5nLCAnVEsnID0gQWJnYW5nIGt1cnouCiAgLy8gU3RldWVydCBudXIgZGllIHNjaGVtYXRpc2NoZSBBYmdhbmdzbMOkbmdlIChrZWluIGJlbWHDn3RlcyBNYcOfKSBpbiBkcmF3VHN0dWVjay4KICB0Zm9ybTonVCcsCiAgZ2Fza2V0TWF0ZXJpYWw6J0VQRE0nLCBnYXNrZXRDb2xvcjpudWxsLCBzdXJmYWNlOidINCcsIHdlcmtzdG9mZjonMS40NDA0JywKICAvLyBCZXNjaHJpZnR1bmcgZGVzIExhZW5nZW5tYXNzZXMuICdMJyA9IEJhdWxhZW5nZS9TdHV0emVubGFlbmdlIChLSy9LTCwgZHVlbm53YW5kaWcpLgogIC8vIERlciBkaWNrd2FuZGlnZSBUYW5rc3R1dHplbiAoVENEKSBoYXQgS0VJTkUgS0svS0wtTGFlbmdlLCBzb25kZXJuIGRpZSBIb2VoZSBoID0gNjAgbW0KICAvLyAtPiBhcHAuanMgc2NoaWNrdCBkb3J0IGxlbmd0aExhYmVsOidoJy4gTnVyIGRhcyBQcmFlZml4IGFlbmRlcnQgc2ljaCwgbmllIGRlciBXZXJ0LgogIGxlbmd0aExhYmVsOidMJwp9OwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXRpbGl0aWVzICovCmxldCBfdWlkID0gMDsKY29uc3QgdWlkID0gKCkgPT4gJ3d6JyArICgrK191aWQpOwpjb25zdCBudW0gPSAodiwgZCkgPT4gKHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2KSkgPyB2IDogZDsKY29uc3QgZnggID0gbiA9PiAoTWF0aC5yb3VuZChuICogMTAwKSAvIDEwMCk7CmNvbnN0IGRlICA9IG4gPT4gU3RyaW5nKGZ4KG4pKS5yZXBsYWNlKCcuJywgJywnKTsgICAvLyBkZXV0c2NoZSBNYXNzemFobCAoS29tbWEpCmNvbnN0IHBvbHkgPSBwdHMgPT4gcHRzLm1hcChwID0+IGZ4KHBbMF0pICsgJywnICsgZngocFsxXSkpLmpvaW4oJyAnKTsKY29uc3QgcGF0aEZyb20gPSBwdHMgPT4gJ00nICsgcG9seShwdHMpLnJlcGxhY2UoLyAvZywgJyBMJykucmVwbGFjZSgnTCcsICcnKTsKY29uc3QgZXNjID0gcyA9PiBTdHJpbmcocyA9PSBudWxsID8gJycgOiBzKS5yZXBsYWNlKC9bJjw+IiddL2csIGMgPT4gKHsKICAnJic6JyZhbXA7JywgJzwnOicmbHQ7JywgJz4nOicmZ3Q7JywgJyInOicmcXVvdDsnLCAiJyI6JyYjMzk7Jwp9KVtjXSk7CmNvbnN0IHBvc2l0aXZlID0gdiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodikgJiYgdiA+IDA7Ci8vIFdlcmtzdG9mZnNlcmllIGRlciBDb25uZWN0LUZsYW5zY2hlIChXZXJrc3RvZmZudW1tZXIgc3RhdHQgSGVyc3RlbGxlcmt1ZXJ6ZWwpLgpjb25zdCBzZXJpZXNPayA9IHYgPT4gWycxLjQ0MDQnLCcxLjQ0MzUnXS5pbmNsdWRlcyhTdHJpbmcodiB8fCAnJykudHJpbSgpKTsKY29uc3QgaGFzU2l6ZUxhYmVsID0gcCA9PiAhIShwICYmICgodHlwZW9mIHAubGFiZWwgPT09ICdzdHJpbmcnICYmIHAubGFiZWwudHJpbSgpKSB8fCBwLmRuICE9IG51bGwpKTsKZnVuY3Rpb24gdmFsaWRDb25uZWN0ZmxhbnNjaChwKSB7CiAgcmV0dXJuICEhKHAgJiYgcG9zaXRpdmUocC5vZCkgJiYgcG9zaXRpdmUocC5pbm5lckRpYW1ldGVyKSAmJiBwLmlubmVyRGlhbWV0ZXIgPCBwLm9kICYmCiAgICBwb3NpdGl2ZShwLmZsYW5nZU9kKSAmJiBwLmlubmVyRGlhbWV0ZXIgPCBwLmZsYW5nZU9kICYmIHBvc2l0aXZlKHAubGVuZ3RoKSAmJgogICAgc2VyaWVzT2socC5wcm9kdWN0U2VyaWVzKSAmJiBoYXNTaXplTGFiZWwocCkpOwp9CmZ1bmN0aW9uIHZhbGlkQ29ubmVjdGlubGluZShwKSB7CiAgY29uc3QgZW5kVHlwZSA9IFN0cmluZyhwICYmIHAuZW5kVHlwZSB8fCAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7CiAgcmV0dXJuICEhKHAgJiYgcG9zaXRpdmUocC5vZCkgJiYgcG9zaXRpdmUocC5pbm5lckRpYW1ldGVyKSAmJiBwLmlubmVyRGlhbWV0ZXIgPCBwLm9kICYmCiAgICBwb3NpdGl2ZShwLmxlbmd0aCkgJiYgcG9zaXRpdmUocC5icmFuY2hIZWlnaHQpICYmIHBvc2l0aXZlKHAuZW5kRGlhbWV0ZXIpICYmCiAgICBwb3NpdGl2ZShwLnVwcGVyT3V0ZXJEaWFtZXRlcikgJiYgcG9zaXRpdmUocC51cHBlcklubmVyRGlhbWV0ZXIpICYmIHAudXBwZXJJbm5lckRpYW1ldGVyIDwgcC51cHBlck91dGVyRGlhbWV0ZXIgJiYKICAgIFsnQlcnLCdUQyddLmluY2x1ZGVzKGVuZFR5cGUpICYmIHNlcmllc09rKHAucHJvZHVjdFNlcmllcykgJiYgaGFzU2l6ZUxhYmVsKHApKTsKfQpmdW5jdGlvbiBzaXplTGFiZWwobykgewogIGlmICh0eXBlb2Ygby5sYWJlbCA9PT0gJ3N0cmluZycgJiYgby5sYWJlbC50cmltKCkpIHJldHVybiBvLmxhYmVsLnRyaW0oKTsKICBjb25zdCBkbiA9IFN0cmluZyhvLmRuID09IG51bGwgPyAnJyA6IG8uZG4pLnRyaW0oKTsKICBpZiAoIWRuKSByZXR1cm4gJyc7CiAgcmV0dXJuIC9eRE5ccyovaS50ZXN0KGRuKSA\\\/IGRuIDogJ0ROICcgKyBkbjsKfQpmdW5jdGlvbiBmaXR0aW5nQmFkZ2UodncsIHRleHQpIHsKICBjb25zdCBsYWJlbCA9IGVzYyh0ZXh0KTsKICBjb25zdCB3ID0gTWF0aC5taW4odncgLSAyOCwgTWF0aC5tYXgoMTg4LCBTdHJpbmcodGV4dCkubGVuZ3RoICogNi4xICsgMjgpKTsKICByZXR1cm4gYDxyZWN0IGNsYXNzPSJ3ei1iYWRnZS1iZyIgeD0iJHtmeCgodncgLSB3KSAvIDIpfSIgeT0iMTIiIHdpZHRoPSIke2Z4KHcpfSIgaGVpZ2h0PSIyMiIgcng9IjExIi8+CiAgICA8dGV4dCBjbGFzcz0id3otYmFkZ2UtdHgiIHg9IiR7ZngodncgLyAyKX0iIHk9IjI3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4ke2xhYmVsfTwvdGV4dD5gOwp9CmZ1bmN0aW9uIGFyY1B0cyhjeCwgY3ksIHIsIGEwLCBhMSwgbikgewogIG4gPSBuIHx8IE1hdGgubWF4KDYsIE1hdGgucm91bmQoTWF0aC5hYnMoYTEgLSBhMCkgLyAoTWF0aC5QSSAvIDI0KSkpOwogIGNvbnN0IG91dCA9IFtdOwogIGZvciAobGV0IGkgPSAwOyBpIDw9IG47IGkrKykgeyBjb25zdCBhID0gYTAgKyAoYTEgLSBhMCkgKiAoaSAvIG4pOyBvdXQucHVzaChbY3ggKyByICogTWF0aC5jb3MoYSksIGN5ICsgciAqIE1hdGguc2luKGEpXSk7IH0KICByZXR1cm4gb3V0Owp9CmNvbnN0IG1lYXN1cmUgPSBzID0+IFN0cmluZyhzKS5sZW5ndGggKiAzLjYgKyA0OwoKZnVuY3Rpb24gbm9ybWFsaXplKHApIHsKICBjb25zdCBvID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVFMsIHAgfHwge30pOwogIGNvbnN0IGNvbm5lY3RUeXBlID0gcCAmJiAocC50eXBlID09PSAnY29ubmVjdGZsYW5zY2gnIHx8IHAudHlwZSA9PT0gJ2Nvbm5lY3RpbmxpbmUnKTsKICBvLm9kID0gTWF0aC5tYXgoNCwgbnVtKG8ub2QsIERFRkFVTFRTLm9kKSk7CiAgby53YWxsID0gTWF0aC5taW4oby5vZCAvIDIgLSAwLjIsIE1hdGgubWF4KDAuMywgbnVtKG8ud2FsbCwgREVGQVVMVFMud2FsbCkpKTsKICAvLyBEZWNrZWxzdGFlcmtlIGRlcyBCbGluZGRlY2tlbHMgbGllZ3QgYmVpIDQsNzUtMTQgbW0gLSBkaWUgOC1tbS1VbnRlcmdyZW56ZQogIC8vIGZ1ZXIgU3R1dHplbmxhZW5nZW4gZGFyZiBzaWUgbmljaHQgdmVyZmFlbHNjaGVuLiBEZXIgV2VydCBkYXJmIE5VUiBhdXMgZGVtCiAgLy8gQXVmcnVmIGtvbW1lbiAobmllbWFscyBkZXIgREVGQVVMVFMtV2VydCAxMDApOyBmZWhsdCBlciAtPiBudWxsIC0+IFBsYXR6aGFsdGVyLgogIG8ubGVuZ3RoID0gKHAgJiYgcC50eXBlID09PSAnYmxpbmRkZWNrZWwnKQogICAgPyAoaXNGaW5pdGUocC5sZW5ndGgpID8gTnVtYmVyKHAubGVuZ3RoKSA6IG51bGwpCiAgICA6IE1hdGgubWF4KDgsIG51bShvLmxlbmd0aCwgREVGQVVMVFMubGVuZ3RoKSk7CiAgLy8gb2QyIG51ciBhbHMgRUNIVEVTIE1hc3MgYmVoYW5kZWxuLCB3ZW5uIGRlciBBdWZydWZlciB3aXJrbGljaCBlaW5lbiB6d2VpdGVuIMOYIGdlbGllZmVydAogIC8vIGhhdC4gREVGQVVMVFMub2QyICgyMCkgdW5kIGRlciAwLjY2LUZhbGxiYWNrIHNpbmQgS0VJTkUgV2Vpc3MtTWFzc2UgLSBvaG5lIGVjaHRlbiB6d2VpdGVuCiAgLy8gw5ggd3VlcmRlIGRpZSBSZWR1emllcnVuZyBzb25zdCBlaW5lIGVyZnVuZGVuZSBaYWhsIGJlbWFzc2VuIChOYWNocHJ1ZWYtQmVmdW5kIGEpLiBEaWUKICAvLyBHZW9tZXRyaWUgYmVrb21tdCBlaW5lbiBuZXV0cmFsZW4gV2VydCwgZGllIE1BU1NaQUhMIHdpcmQgYWJlciB1ZWJlciBvLm9kMlByb3YgYXVmCiAgLy8gImZvbGd0IiBnZXNldHp0IChkcmF3UmVkdXppZXJ1bmcpLCBhbmFsb2cgenUgcHJvdkRpbXMgYmVpIExhZW5nZS9SYWRpdXMuCiAgby5vZDJQcm92ID0gISEocCAmJiBpc0Zpbml0ZShwLm9kMikpOwogIG8ub2QyID0gby5vZDJQcm92ID8gTWF0aC5tYXgoNCwgTWF0aC5taW4oby5vZCAtIDAuNSwgcC5vZDIpKSA6IE1hdGgubWF4KDQsIE1hdGgubWluKG8ub2QgLSAwLjUsIG8ub2QgKiAwLjY2KSk7CiAgby5icmFuY2hPZCA9IG51bShvLmJyYW5jaE9kLCBvLm9kKTsKICBvLmJyYW5jaExlbmd0aCA9IHAgJiYgcG9zaXRpdmUocC5icmFuY2hMZW5ndGgpID8gTnVtYmVyKHAuYnJhbmNoTGVuZ3RoKSA6IG51bGw7CiAgby53YWxsMiA9IHAgJiYgcG9zaXRpdmUocC53YWxsMikgPyBOdW1iZXIocC53YWxsMikgOiBvLndhbGw7CiAgby5vdmVyYWxsTGVuZ3RoID0gcCAmJiBwb3NpdGl2ZShwLm92ZXJhbGxMZW5ndGgpID8gTnVtYmVyKHAub3ZlcmFsbExlbmd0aCkgOiBudWxsOwogIG8ub3ZlcmFsbExlbmd0aExhYmVsID0gcCAmJiB0eXBlb2YgcC5vdmVyYWxsTGVuZ3RoTGFiZWwgPT09ICdzdHJpbmcnID8gcC5vdmVyYWxsTGVuZ3RoTGFiZWwgOiAnJzsKICBvLnRmb3JtID0gKG8udGZvcm0gPT09ICdUSycpID8gJ1RLJyA6ICdUJzsgICAvLyBSMy0zL1IzLTQ6IG51ciAnVCcgb2RlciAnVEsnIHp1bGFzc2VuCiAgby5iZW5kUmFkaXVzID0gTWF0aC5tYXgoby5vZCwgbnVtKG8uYmVuZFJhZGl1cywgby5vZCAqIDEuNSkpOwogIG8uZmxhbmdlT2QgPSBudW0oby5mbGFuZ2VPZCwgZmxhbmdlT2RGb3Ioby5vZCkpOwogIG8uaW5uZXJEaWFtZXRlciA9IG51bShvLmlubmVyRGlhbWV0ZXIsIG51bGwpOwogIG8uYnJhbmNoSGVpZ2h0ID0gbnVtKG8uYnJhbmNoSGVpZ2h0LCBudWxsKTsKICBvLmVuZERpYW1ldGVyID0gbnVtKG8uZW5kRGlhbWV0ZXIsIG51bGwpOwogIG8udXBwZXJPdXRlckRpYW1ldGVyID0gbnVtKG8udXBwZXJPdXRlckRpYW1ldGVyLCBudWxsKTsKICBvLnVwcGVySW5uZXJEaWFtZXRlciA9IG51bShvLnVwcGVySW5uZXJEaWFtZXRlciwgbnVsbCk7CiAgby5lbmRUeXBlID0gU3RyaW5nKG8uZW5kVHlwZSB8fCAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7CiAgby5wcm9kdWN0U2VyaWVzID0gU3RyaW5nKG8ucHJvZHVjdFNlcmllcyB8fCAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7CiAgby5sYWJlbCA9IHR5cGVvZiBvLmxhYmVsID09PSAnc3RyaW5nJyA\\\/IG8ubGFiZWwudHJpbSgpIDogJyc7CiAgLy8gUnVuZGUgNyAoVy0wNTkpOiBiZWxlZ3RlIFp1c2F0em1hc3NlIGZ1ZXIgS2xhbW1lciAvIEJsaW5kZGVja2VsIC8gRGljaHR1bmcuCiAgLy8gRXMgZ2lsdCBudXIsIHdhcyBkZXIgQXVmcnVmZXIgbGllZmVydCAtIG9obmUgZGllc2UgV2VydGUgYmxlaWJ0IGRlciBQbGF0emhhbHRlci4KICBvLmtsYW1tZXJBID0gbnVtKG8ua2xhbW1lckEsIG51bGwpOwogIG8ua2xhbW1lclR5cCA9IFsnS0wxJywnS0xMSScsJ0tMSCddLmluZGV4T2YoU3RyaW5nKG8ua2xhbW1lclR5cCB8fCAnJykudG9VcHBlckNhc2UoKSkgPj0gMAogICAgPyBTdHJpbmcoby5rbGFtbWVyVHlwKS50b1VwcGVyQ2FzZSgpIDogJ0tMMSc7CiAgby5rbGFtbWVyTXV0dGVyID0gU3RyaW5nKG8ua2xhbW1lck11dHRlciB8fCAnJykudG9VcHBlckNhc2UoKSA9PT0gJ1MnID8gJ1MnIDogJ00nOwogIG8uZ2Fza2V0T2QgPSBudW0oby5nYXNrZXRPZCwgbnVsbCk7CiAgby5nYXNrZXRJZCA9IG51bShvLmdhc2tldElkLCBudWxsKTsKICBvLmdhc2tldFR5cGUgPSBTdHJpbmcoby5nYXNrZXRUeXBlIHx8ICcnKS50b1VwcGVyQ2FzZSgpID09PSAnSScgPyAnSScgOiAnSUknOwogIC8vIEZ1ZXIgQ0YvQ0ZJIGtlaW5lIE1ldGFkYXRlbiBhdXMgZGVuIEFsdC1UeXAtRGVmYXVsdHMgYW56ZWlnZW4uCiAgLy8gRmFsbHMgZGVyIEF1ZnJ1ZmVyIFdlcmtzdG9mZi9PYmVyZmxhZWNoZSBuaWNodCBsaWVmZXJ0LCBibGVpYnQgZGllIExlZ2VuZGUgbGVlci4KICBpZiAoY29ubmVjdFR5cGUpIHsKICAgIG8ud2Vya3N0b2ZmID0gdHlwZW9mIHAud2Vya3N0b2ZmID09PSAnc3RyaW5nJyA\\\/IHAud2Vya3N0b2ZmLnRyaW0oKSA6ICcnOwogICAgby5zdXJmYWNlID0gdHlwZW9mIHAuc3VyZmFjZSA9PT0gJ3N0cmluZycgPyBwLnN1cmZhY2UudHJpbSgpIDogJyc7CiAgfQogIG8ub2RSID0gby5vZCAvIDI7CiAgby5pbm5SID0gby5vZCAvIDIgLSBvLndhbGw7CiAgby5nQ29sID0gby5nYXNrZXRDb2xvciB8fCBHQVNLRVRfQ09MT1JTW28uZ2Fza2V0TWF0ZXJpYWxdIHx8IEdBU0tFVF9DT0xPUlMuRVBETTsKICByZXR1cm4gbzsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1ZHLVJhaG1lbjogc3R5bGUvZGVmcyAqLwpmdW5jdGlvbiBmcmFtZURlZnMoaWQsIGdhc2tldEZpbGwpIHsKICByZXR1cm4gYAogIDxkZWZzPgogICAgPHBhdHRlcm4gaWQ9IiR7aWR9LWhhdGNoIiB3aWR0aD0iNyIgaGVpZ2h0PSI3IiBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBwYXR0ZXJuVHJhbnNmb3JtPSJyb3RhdGUoNDUpIj4KICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjciIHN0cm9rZT0idmFyKC0td3otaGF0Y2gsIzlhYTBhNikiIHN0cm9rZS13aWR0aD0iMC45Ii8+CiAgICA8L3BhdHRlcm4+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9IiR7aWR9LXN0ZWVsIiB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgICBzdG9wLWNvbG9yPSJ2YXIoLS13ei1zdGVlbC1hLCNmYmZjZmQpIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMC41IiBzdG9wLWNvbG9yPSJ2YXIoLS13ei1zdGVlbC1iLCNlZWYxZjQpIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgICBzdG9wLWNvbG9yPSJ2YXIoLS13ei1zdGVlbC1jLCNkZmU0ZTkpIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPG1hcmtlciBpZD0iJHtpZH0tYXIiIG1hcmtlcldpZHRoPSI5IiBtYXJrZXJIZWlnaHQ9IjkiIHJlZlg9IjcuNSIgcmVmWT0iNC41IiBvcmllbnQ9ImF1dG8iIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoIGQ9Ik0wLDEuMiBMOCw0LjUgTDAsNy44IFoiIGZpbGw9InZhcigtLXd6LWRpbSwjOGE4Zjk2KSIvPjwvbWFya2VyPgogICAgPG1hcmtlciBpZD0iJHtpZH0tYWwiIG1hcmtlcldpZHRoPSI5IiBtYXJrZXJIZWlnaHQ9IjkiIHJlZlg9IjEuNSIgcmVmWT0iNC41IiBvcmllbnQ9ImF1dG8iIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxwYXRoIGQ9Ik04LDEuMiBMMCw0LjUgTDgsNy44IFoiIGZpbGw9InZhcigtLXd6LWRpbSwjOGE4Zjk2KSIvPjwvbWFya2VyPgogIDwvZGVmcz4KICA8c3R5bGU+CiAgICAud3otc3Zne2ZvbnQtZmFtaWx5OidQbHVzIEpha2FydGEgU2FucycsJ0t1bWJoIFNhbnMnLHN5c3RlbS11aSxzYW5zLXNlcmlmfQogICAgLnd6LWJvcmV7ZmlsbDp2YXIoLS13ei1ib3JlLCNmNGY2ZjgpfQogICAgLnd6LXN0ZWVse2ZpbGw6dXJsKCMke2lkfS1zdGVlbCk7c3Ryb2tlOnZhcigtLXd6LWVkZ2UsIzFjMWMxYyk7c3Ryb2tlLXdpZHRoOjEuMX0KICAgIC53ei1oYXRjaHtmaWxsOnVybCgjJHtpZH0taGF0Y2gpO3N0cm9rZTp2YXIoLS13ei1lZGdlLCMxYzFjMWMpO3N0cm9rZS13aWR0aDoxLjE7c3Ryb2tlLWxpbmVqb2luOnJvdW5kfQogICAgLnd6LWVkZ2V7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS13ei1lZGdlLCMxYzFjMWMpO3N0cm9rZS13aWR0aDoxLjF9CiAgICAud3otZ2Fza2V0e2ZpbGw6JHtnYXNrZXRGaWxsfTtzdHJva2U6dmFyKC0td3otZWRnZSwjMWMxYzFjKTtzdHJva2Utd2lkdGg6MC44O29wYWNpdHk6MC45NX0KICAgIC53ei1jbGFtcHtmaWxsOnZhcigtLXd6LWNsYW1wLCNjOWNlZDQpO3N0cm9rZTp2YXIoLS13ei1lZGdlLCMxYzFjMWMpO3N0cm9rZS13aWR0aDoxfQogICAgLnd6LWNlbnRlcntmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLXd6LWNlbnRlciwjZDYwYTBhKTtzdHJva2Utd2lkdGg6MC45O29wYWNpdHk6MC43O3N0cm9rZS1kYXNoYXJyYXk6MTEgMyAyIDM7c3Ryb2tlLWxpbmVjYXA6cm91bmR9CiAgICAud3otZGlte3N0cm9rZTp2YXIoLS13ei1kaW0sIzhhOGY5Nik7c3Ryb2tlLXdpZHRoOjAuODtmaWxsOm5vbmV9CiAgICAud3otZGltdHh0e2ZpbGw6dmFyKC0td3otZGltdHh0LCNkNjBhMGEpO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt0ZXh0LWFuY2hvcjptaWRkbGU7ZG9taW5hbnQtYmFzZWxpbmU6bWlkZGxlfQogICAgLnd6LWxlYWR7c3Ryb2tlOnZhcigtLXd6LWRpbSwjOGE4Zjk2KTtzdHJva2Utd2lkdGg6MC43O2ZpbGw6bm9uZX0KICAgIC53ei1ub3Rle2ZpbGw6dmFyKC0td3otbm90ZSwjNTU1KTtmb250LXNpemU6MTFweH0KICAgIC53ei1iYWRnZS1iZ3tmaWxsOnZhcigtLXd6LWJhZGdlLCNmMWYxZjEpfQogICAgLnd6LWJhZGdlLXR4e2ZpbGw6dmFyKC0td3otaW5rLCMxYzFjMWMpO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMH0KICA8L3N0eWxlPmA7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCZW1hc3N1bmdzLVByaW1pdGl2ZSAqLwpmdW5jdGlvbiBkaW1IKGlkLCB4YSwgeGIsIHksIGxhYmVsLCBvcHQpIHsKICBvcHQgPSBvcHQgfHwge307IGNvbnN0IGV4dCA9IG9wdC5leHQgPT0gbnVsbCA\\\/IDAgOiBvcHQuZXh0OwogIGNvbnN0IGVsID0gZXh0ICE9PSAwID8gYAogICAgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoeGEpfSIgeTE9IiR7ZngoZXh0KX0iIHgyPSIke2Z4KHhhKX0iIHkyPSIke2Z4KHkgKyAoeSA+IGV4dCA\\\/IDQgOiAtNCkpfSIvPgogICAgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoeGIpfSIgeTE9IiR7ZngoZXh0KX0iIHgyPSIke2Z4KHhiKX0iIHkyPSIke2Z4KHkgKyAoeSA+IGV4dCA\\\/IDQgOiAtNCkpfSIvPmAgOiAnJzsKICByZXR1cm4gYCR7ZWx9CiAgICA8bGluZSBjbGFzcz0id3otZGltIiB4MT0iJHtmeCh4YSl9IiB5MT0iJHtmeCh5KX0iIHgyPSIke2Z4KHhiKX0iIHkyPSIke2Z4KHkpfSIgbWFya2VyLXN0YXJ0PSJ1cmwoIyR7aWR9LWFsKSIgbWFya2VyLWVuZD0idXJsKCMke2lkfS1hcikiLz4KICAgIDxyZWN0IGNsYXNzPSJ3ei1iYWRnZS1iZyIgeD0iJHtmeCgoeGEgKyB4YikgLyAyIC0gbWVhc3VyZShsYWJlbCkpfSIgeT0iJHtmeCh5IC0gOSl9IiB3aWR0aD0iJHtmeChtZWFzdXJlKGxhYmVsKSAqIDIpfSIgaGVpZ2h0PSIxNiIgcng9IjMiIG9wYWNpdHk9IjAuOSIvPgogICAgPHRleHQgY2xhc3M9Ind6LWRpbXR4dCIgeD0iJHtmeCgoeGEgKyB4YikgLyAyKX0iIHk9IiR7ZngoeSArIDEpfSI+JHtsYWJlbH08L3RleHQ+YDsKfQpmdW5jdGlvbiBkaW1WKGlkLCB4LCB5YSwgeWIsIGxhYmVsLCBvcHQpIHsKICBvcHQgPSBvcHQgfHwge307IGNvbnN0IGV4dCA9IG9wdC5leHQgPT0gbnVsbCA\\\/IDAgOiBvcHQuZXh0OwogIGNvbnN0IGVsID0gZXh0ICE9PSAwID8gYAogICAgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoZXh0KX0iIHkxPSIke2Z4KHlhKX0iIHgyPSIke2Z4KHggKyAoeCA+IGV4dCA\\\/IDQgOiAtNCkpfSIgeTI9IiR7ZngoeWEpfSIvPgogICAgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoZXh0KX0iIHkxPSIke2Z4KHliKX0iIHgyPSIke2Z4KHggKyAoeCA+IGV4dCA\\\/IDQgOiAtNCkpfSIgeTI9IiR7ZngoeWIpfSIvPmAgOiAnJzsKICByZXR1cm4gYCR7ZWx9CiAgICA8bGluZSBjbGFzcz0id3otZGltIiB4MT0iJHtmeCh4KX0iIHkxPSIke2Z4KHlhKX0iIHgyPSIke2Z4KHgpfSIgeTI9IiR7ZngoeWIpfSIgbWFya2VyLXN0YXJ0PSJ1cmwoIyR7aWR9LWFsKSIgbWFya2VyLWVuZD0idXJsKCMke2lkfS1hcikiLz4KICAgIDxyZWN0IGNsYXNzPSJ3ei1iYWRnZS1iZyIgeD0iJHtmeCh4IC0gbWVhc3VyZShsYWJlbCkpfSIgeT0iJHtmeCgoeWEgKyB5YikgLyAyIC0gOCl9IiB3aWR0aD0iJHtmeChtZWFzdXJlKGxhYmVsKSAqIDIpfSIgaGVpZ2h0PSIxNiIgcng9IjMiIG9wYWNpdHk9IjAuOSIvPgogICAgPHRleHQgY2xhc3M9Ind6LWRpbXR4dCIgeD0iJHtmeCh4KX0iIHk9IiR7ZngoKHlhICsgeWIpIC8gMiArIDEpfSI+JHtsYWJlbH08L3RleHQ+YDsKfQpmdW5jdGlvbiBkaW1WUm90KGlkLCB4LCB5YSwgeWIsIGxhYmVsLCBvcHQpIHsKICBvcHQgPSBvcHQgfHwge307IGNvbnN0IGV4dCA9IG9wdC5leHQgPT0gbnVsbCA\\\/IDAgOiBvcHQuZXh0OwogIGNvbnN0IGN5ID0gKHlhICsgeWIpIC8gMiwgdHcgPSBtZWFzdXJlKGxhYmVsKSAqIDI7CiAgY29uc3QgZWwgPSBleHQgIT09IDAgPyBgCiAgICA8bGluZSBjbGFzcz0id3otZGltIiB4MT0iJHtmeChleHQpfSIgeTE9IiR7ZngoeWEpfSIgeDI9IiR7ZngoeCArICh4ID4gZXh0ID8gNCA6IC00KSl9IiB5Mj0iJHtmeCh5YSl9Ii8+CiAgICA8bGluZSBjbGFzcz0id3otZGltIiB4MT0iJHtmeChleHQpfSIgeTE9IiR7ZngoeWIpfSIgeDI9IiR7ZngoeCArICh4ID4gZXh0ID8gNCA6IC00KSl9IiB5Mj0iJHtmeCh5Yil9Ii8+YCA6ICcnOwogIHJldHVybiBgJHtlbH0KICAgIDxsaW5lIGNsYXNzPSJ3ei1kaW0iIHgxPSIke2Z4KHgpfSIgeTE9IiR7ZngoeWEpfSIgeDI9IiR7ZngoeCl9IiB5Mj0iJHtmeCh5Yil9IiBtYXJrZXItc3RhcnQ9InVybCgjJHtpZH0tYWwpIiBtYXJrZXItZW5kPSJ1cmwoIyR7aWR9LWFyKSIvPgogICAgPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTkwICR7ZngoeCl9ICR7ZngoY3kpfSkiPgogICAgICA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngoeCAtIHR3IC8gMil9IiB5PSIke2Z4KGN5IC0gOCl9IiB3aWR0aD0iJHtmeCh0dyl9IiBoZWlnaHQ9IjE2IiByeD0iMyIgb3BhY2l0eT0iMC45MiIvPgogICAgICA8dGV4dCBjbGFzcz0id3otZGltdHh0IiB4PSIke2Z4KHgpfSIgeT0iJHtmeChjeSArIDEpfSI+JHtsYWJlbH08L3RleHQ+CiAgICA8L2c+YDsKfQpmdW5jdGlvbiBsZWFkZXIoaWQsIHgxLCB5MSwgeDIsIHkyLCBsYWJlbCkgewogIHJldHVybiBgPGxpbmUgY2xhc3M9Ind6LWxlYWQiIHgxPSIke2Z4KHgxKX0iIHkxPSIke2Z4KHkxKX0iIHgyPSIke2Z4KHgyKX0iIHkyPSIke2Z4KHkyKX0iIG1hcmtlci1zdGFydD0idXJsKCMke2lkfS1hbCkiLz4KICAgIDxyZWN0IGNsYXNzPSJ3ei1iYWRnZS1iZyIgeD0iJHtmeCh4MiAtIG1lYXN1cmUobGFiZWwpIC0gMyl9IiB5PSIke2Z4KHkyIC0gOCl9IiB3aWR0aD0iJHtmeChtZWFzdXJlKGxhYmVsKSAqIDIgKyA2KX0iIGhlaWdodD0iMTYiIHJ4PSIzIiBvcGFjaXR5PSIwLjk1Ii8+CiAgICA8dGV4dCBjbGFzcz0id3otZGltdHh0IiB4PSIke2Z4KHgyICsgbWVhc3VyZShsYWJlbCkpfSIgeT0iJHtmeCh5MiArIDEpfSI+JHtsYWJlbH08L3RleHQ+YDsKfQoKZnVuY3Rpb24gd3JhcFN2ZyhpZCwgdncsIHZoLCBnYXNrZXRGaWxsLCBib2R5LCBsZWdlbmQpIHsKICByZXR1cm4gYDxzdmcgY2xhc3M9Ind6LXN2ZyIgdmlld0JveD0iMCAwICR7dnd9ICR7dmh9IiByb2xlPSJpbWciIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgJHtmcmFtZURlZnMoaWQsIGdhc2tldEZpbGwpfQogIDxnPiR7Ym9keX08L2c+CiAgJHtsZWdlbmQgfHwgJyd9Cjwvc3ZnPmA7Cn0KLyogUmEtWnVzYXR6IGZ1ZXIgZGllIExlZ2VuZGUgLSBrb21tdCBBVVNTQ0hMSUVTU0xJQ0ggYXVzIGRhdGEuanMgKG9iZXJmbGFlY2hlbltdKS4KICogRnJ1ZWhlciBzdGFuZCBoaWVyIGVpbmUgaGFydGtvZGllcnRlIEtldHRlIChIMSAtPiAiKGdlYmVpenQpIiwgSDMgLT4gIihSYTwwLDgpIiwKICogQUxMRVMgQU5ERVJFIC0+ICIoUmE8MCw0KSIpLiBEZXIgZWxzZS1ad2VpZyBoYWV0dGUgamVkZXIgdW5iZWthbm50ZW4vbmV1ZW4KICogT2JlcmZsYWVjaGUgc3RpbGxzY2h3ZWlnZW5kIGVpbmVuIGVyZnVuZGVuZW4gUmEtV2VydCBhbmdlZGljaHRldC4KICogSmV0enQ6IG51ciBiZXN0YWV0aWd0ZSBXZXJ0ZS4gRmVobHQgZGVyIFdlcnQgKEgxOiByYUlubmVuID0gbnVsbCkgb2RlciBmZWhsZW4gZGllCiAqIERhdGVuIGdhbnogKGRyYXcuanMgbGFldWZ0IGF1Y2ggb2huZSBkYXRhLmpzIGltIE5vZGUtRGVtbyksIGVudGZhZWxsdCBkZXIgWnVzYXR6LiAqLwpmdW5jdGlvbiByYVN1ZmZpeChzdXJmYWNlKSB7CiAgY29uc3QgbGlzdCA9IHJvb3QgJiYgcm9vdC5XRUlTU19EQVRBICYmIHJvb3QuV0VJU1NfREFUQS5vYmVyZmxhZWNoZW47CiAgaWYgKCFsaXN0KSByZXR1cm4gJyc7CiAgY29uc3QgbyA9IGxpc3QuZmluZCh4ID0+IHguaWQgPT09IHN1cmZhY2UpOwogIGlmICghbyB8fCBvLnJhSW5uZW4gPT0gbnVsbCkgcmV0dXJuICcnOwogIHJldHVybiAnIChSYSZsdDsnICsgU3RyaW5nKG8ucmFJbm5lbikucmVwbGFjZSgnLicsICcsJykgKyAnKSc7Cn0KZnVuY3Rpb24gbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sIHZpZXdOYW1lKSB7CiAgY29uc3QgaXRlbXMgPSBbCiAgICBbJ0Fuc2ljaHQnLCB2aWV3TmFtZV0sCiAgICBbJ1dlcmtzdG9mZicsIG8ud2Vya3N0b2ZmXSwKICAgIFsnT2JlcmZsw6RjaGUnLCBvLnN1cmZhY2UgKyByYVN1ZmZpeChvLnN1cmZhY2UpXQogIF0uZmlsdGVyKGl0ID0+IGl0WzFdKTsKICBjb25zdCB5MCA9IHZoIC0gMTQgLSBpdGVtcy5sZW5ndGggKiAxNTsgbGV0IHJvd3MgPSAnJzsKICBpdGVtcy5mb3JFYWNoKChpdCwgaSkgPT4gewogICAgcm93cyArPSBgPHRleHQgY2xhc3M9Ind6LW5vdGUiIHg9IjE0IiB5PSIke3kwICsgMTIgKyBpICogMTV9Ij4KICAgICAgPHRzcGFuIGZpbGw9InZhcigtLXd6LW5vdGUsIzk5OSkiPiR7aXRbMF19OjwvdHNwYW4+CiAgICAgIDx0c3BhbiBkeD0iNCIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0idmFyKC0td3otaW5rLCMxYzFjMWMpIj4ke2l0WzFdfTwvdHNwYW4+PC90ZXh0PmA7CiAgfSk7CiAgcmV0dXJuIGA8ZyBvcGFjaXR5PSIwLjk1Ij4ke3Jvd3N9PC9nPmA7Cn0KCi8qIC0tIGdlbWVpbnNhbWVyIFByb2pla3RvciArIEZpdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gbWFrZVByb2ooZXh0WG1pbiwgZXh0WG1heCwgZXh0WW1pbiwgZXh0WW1heCwgdncsIHZoLCBwYWQpIHsKICBjb25zdCB3TW0gPSBleHRYbWF4IC0gZXh0WG1pbiwgaE1tID0gZXh0WW1heCAtIGV4dFltaW47CiAgY29uc3QgYm94VyA9IHZ3IC0gcGFkLmwgLSBwYWQuciwgYm94SCA9IHZoIC0gcGFkLnQgLSBwYWQuYjsKICBjb25zdCBzY2FsZSA9IE1hdGgubWF4KDAuMzUsIE1hdGgubWluKDYsIE1hdGgubWluKGJveFcgLyB3TW0sIGJveEggLyBoTW0pKSk7CiAgY29uc3Qgb3ggPSBwYWQubCArIChib3hXIC0gd01tICogc2NhbGUpIC8gMiAtIGV4dFhtaW4gKiBzY2FsZTsKICBjb25zdCBveSA9IHBhZC50ICsgKGJveEggLSBoTW0gKiBzY2FsZSkgLyAyIC0gZXh0WW1pbiAqIHNjYWxlOwogIGNvbnN0IFAgPSAoeCwgeSkgPT4gW294ICsgeCAqIHNjYWxlLCBveSArIHkgKiBzY2FsZV07CiAgUC5zY2FsZSA9IHNjYWxlOyBQLnN4ID0geCA9PiBveCArIHggKiBzY2FsZTsgUC5zeSA9IHkgPT4gb3kgKyB5ICogc2NhbGU7CiAgcmV0dXJuIFA7Cn0KCi8qIC0tIDEpIENsYW1wc3R1dHplbjogQXNzZW1ibHkgLyBCbGluZGRlY2tlbCAvIEVJTlpFTE5FUiBTdHV0emVuIC0tLS0tLS0tLS0tLQogKiBtb2RlOiBmYWxzZSB8ICdhc3NlbWJseScgIC0+IGtvbXBsZXR0ZSBUcmlDbGFtcC1WZXJiaW5kdW5nICgyeCBGZXJydWxlICsgRGljaHR1bmcgKyBLbGFtbWVyKQogKiAgICAgICB0cnVlICB8ICdjbG9zZWQnICAgIC0+IEJsaW5kZGVja2VsIChlaW4gU3R1dHplbiwgU3Rpcm5mbGFlY2hlIHp1KQogKiAgICAgICAnc2luZ2xlJyAgICAgICAgICAgIC0+IEVJTiBTdHV0emVuLCBvZmZlbjoga2VpbmUgendlaXRlIEZlcnJ1bGUsIGtlaW5lIERpY2h0dW5nLAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlaW5lIEtsYW1tZXIgKEJlcm5kIDE2LjA3LjIwMjYsIFBrdC4gOS4yLzkuMyAtIFRDRC9UQ1MpLgogKiBEaWUgYWx0ZW4gQm9vbGVhbi1BdWZydWZlciAoZmFsc2UvdHJ1ZSkgZnVua3Rpb25pZXJlbiB1bnZlcmFlbmRlcnQgd2VpdGVyLgogKiBHZXplaWNobmV0IHdlcmRlbiBhdXNzY2hsaWVzc2xpY2ggdWViZXJnZWJlbmUgTWFzc2UgKG9kIC8gd2FsbCAvIGxlbmd0aCAvIGZsYW5nZU9kKSAtCiAqIGhpZXIgd2lyZCBuaWNodHMgYmVyZWNobmV0IG9kZXIgZXJnYWVuenQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpmdW5jdGlvbiBkcmF3Q2xhbXBzdHV0emVuKG8sIHZ3LCB2aCwgbW9kZSkgewogIGNvbnN0IGNsb3NlZCA9IG1vZGUgPT09IHRydWUgfHwgbW9kZSA9PT0gJ2Nsb3NlZCc7CiAgY29uc3Qgc2luZ2xlID0gbW9kZSA9PT0gJ3NpbmdsZSc7CiAgLy8gQmVpZGUgVmFyaWFudGVuIHplaWdlbiBudXIgZGVuIGxpbmtlbiBTdHV0emVuIC0+IGdsZWljaGUgQXVzZGVobnVuZywgZ2xlaWNoZSBCZW1hc3N1bmcuCiAgY29uc3QgZWluemVsbiA9IGNsb3NlZCB8fCBzaW5nbGU7CiAgY29uc3QgUiA9IG8ub2RSLCByaSA9IG8uaW5uUiwgTCA9IG8ubGVuZ3RoOwogIGNvbnN0IGZSID0gby5mbGFuZ2VPZCAvIDI7CiAgLyogQ2xhbXBidW5kIChUQy1UZWlsKTogRUlORSBIb2VoZSBqZSBHcm9lc3NlLCBpZGVudGlzY2ggZnVlciBLSywgS0wgdW5kIGRlbgogICAqIGRpY2t3YW5kaWdlbiBUYW5rc3R1dHplbiAtIEhlcmxlaXR1bmcsIEJlbGVnZSB1bmQgZGllIHdlaXRlcmhpbiBnZWx0ZW5kZQogICAqIERlY2tlbHVuZyBhbiBkZXIgU3R1dHplbmxhZW5nZSBzdGVoZW4gYmVpIFRDX0JVTkQgLyB0Y0J1bmRIb2VoZSBvYmVuLgogICAqIEF1ZnRlaWx1bmcgMjoxIGluIEJ1bmRob2VoZSB1bmQgRmFzZSwgd2llIGluIGRlciBWb3JnYWVuZ2VyZmFzc3VuZy4KICAgKiBSZWluIHNjaGVtYXRpc2NoLCB0cmFlZ3QgS0VJTkUgTWFzc3phaGwuICovCiAgY29uc3QgYnVuZEggPSB0Y0J1bmRIb2VoZShvLmZsYW5nZU9kLCBMKTsKICBjb25zdCB0RmwgPSBidW5kSCAqIDIgLyAzOwogIGNvbnN0IGNoID0gYnVuZEggLyAzOwogIC8qIEJhdWxhZW5nZSBsNCAobnVyIGtvbXBsZXR0ZSBWZXJiaW5kdW5nKS4gSXN0IHNpZSBiZWxlZ3QsIGJla29tbXQgZGVyCiAgICogRGljaHR1bmdzc3BhbHQgZ2VuYXUgZGllIEJyZWl0ZSBsNCAtIDIgeCBTdHV0emVubGFlbmdlOiBkYW5uIHN0aW1tdCBkaWUKICAgKiBnZXplaWNobmV0ZSBHZXNhbXRsYWVuZ2UgbWl0IGRlciBiZW1hc3N0ZW4gdWViZXJlaW4sIHN0YXR0IHdpZSBiaXNoZXIgYXVzCiAgICogZWluZW0gc2NoZW1hdGlzY2hlbiBvZCowLDEyLVNwYWx0IHp1IGVudHN0ZWhlbiAoZGVyIGJlaSBETjIwMCBhbGxlaW4gMjQsNSBtbQogICAqIGJyZWl0IHdhciB1bmQgZGllIEdlc2FtdGxhZW5nZSB1bSB+MzkgJSB2ZXJmZWhsdCBoYWV0dGUpLiAqLwogIGNvbnN0IGw0ID0gZWluemVsbiA\\\/IG51bGwgOiBsNEluZm8obyk7CiAgY29uc3QgZ1QgPSBsNCA\\\/IE1hdGgubWF4KGw0LnNwYWx0LCBESUNIVF9TUEFMVF9NSU4pIDogTWF0aC5tYXgoMi41LCBvLm9kICogMC4xMik7CiAgY29uc3QgY2xhbXBUID0gTWF0aC5tYXgoNSwgby5vZCAqIDAuMTYpOwogIGNvbnN0IGdPUiA9IGZSICogMC44MiwgZ0lSID0gcmk7CgogIC8vIEIyIChCZXJuZCwgMTYuMDcuMjAyNik6IEJFSURFIFN0dXR6ZW4gZ2xlaWNoIGxhbmcgLSBiZWkgS0sgYmVpZGUga3VyeiwgYmVpIEtMCiAgLy8gYmVpZGUgbGFuZy4gRGllIHJlY2h0ZSBTZWl0ZSBpc3QgamV0enQgZXhha3QgZGllIFNwaWVnZWx1bmcgZGVyIGxpbmtlbiBhbiBkZXIKICAvLyBEaWNodHVuZzogU3BpZWdlbHVuZyBtKHgpID0geGYyICsgKEwgLSB4KS4gRnJ1ZWhlciB3YXIgZGVyIHJlY2h0ZSBTdHV0emVuIGVpbgogIC8vIGVpZ2VuZXIsIGF1cyBkZXIgR2VvbWV0cmllIGFiZ2VsZWl0ZXRlciBTdHVtbWVsIChtYXgoMTQsIEwqMC4yOCkpIHVuZCBkYW1pdAogIC8vIHVuYWJoYWVuZ2lnIHZvbiBkZXIgZ2V3YWVobHRlbiBTdHV0emVubGFlbmdlIC0+IE1peCBhdXMgS0sgdW5kIEtMLgogIC8vIEwgPSBvLmxlbmd0aCBrb21tdCBhdXMgZGVyIERhdGVudGFiZWxsZSAoYXBwLmpzOiBydy5rayBiencuIHJ3LmtsIGplIG5hY2gKICAvLyBsYWVuZ2VWYXJpYW50ZSkgLSBoaWVyIHdpcmQgS0VJTiBNYXNzIGJlcmVjaG5ldCBvZGVyIGVyZnVuZGVuLCBudXIgZ2VzcGllZ2VsdC4KICBjb25zdCB4MCA9IDAsIHhiID0gTCAtIHRGbCAtIGNoLCB4ZiA9IEwsIHhnID0geGYgKyBnVCwgeGYyID0geGcsIHhiMiA9IHhmMiArIHRGbCArIGNoLCB4RW5kID0geGYyICsgTDsKICBjb25zdCB5TWF4ID0gTWF0aC5tYXgoZlIgKyBjbGFtcFQgKyA2LCBSICsgNik7CiAgY29uc3QgUCA9IG1ha2VQcm9qKDAsIGVpbnplbG4gPyB4ZiArIDYgOiB4RW5kLCAteU1heCwgeU1heCwgdncsIHZoLCB7IGw6NjYsIHI6OTYsIHQ6NDAsIGI6NzQgfSk7CiAgY29uc3QgaWQgPSB1aWQoKTsgY29uc3QgY3kgPSBQLnN5KDApOwoKICBjb25zdCBmZXJydWxlT3V0ZXIgPSAoeDAsIHhiLCB4ZiwgZlIpID0+IFsKICAgIFAoeDAsLVIpLCBQKHhiLC1SKSwgUCh4YitjaCwtZlIpLCBQKHhmLC1mUiksIFAoeGYsLXJpKSwKICAgIFAoeGYscmkpLCBQKHhmLGZSKSwgUCh4YitjaCxmUiksIFAoeGIsUiksIFAoeDAsUikKICBdOwogIGNvbnN0IGZlcnJ1bGVCb3JlID0gKHgwLCB4ZikgPT4gW1AoeDAsLXJpKSwgUCh4ZiwtcmkpLCBQKHhmLHJpKSwgUCh4MCxyaSldOwoKICBsZXQgcyA9ICcnOwogIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1ib3JlIiB4PSIke2Z4KFAuc3goeDApKX0iIHk9IiR7ZngoUC5zeSgtcmkpKX0iIHdpZHRoPSIke2Z4KChlaW56ZWxuID8geGYgOiB4RW5kIC0geDApICogUC5zY2FsZSl9IiBoZWlnaHQ9IiR7ZngoMiAqIHJpICogUC5zY2FsZSl9Ii8+YDsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otaGF0Y2giIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iJHtwYXRoRnJvbShmZXJydWxlT3V0ZXIoeDAsIHhiLCB4ZiwgZlIpKX0gWiAke3BhdGhGcm9tKGZlcnJ1bGVCb3JlKHgwLCB4ZikpfSBaIi8+YDsKCiAgaWYgKCFlaW56ZWxuKSB7CiAgICBjb25zdCBnVG9wID0gW1AoeGYsLWdPUiksIFAoeGcsLWdPUiksIFAoeGcsLWdJUiksIFAoeGYsLWdJUildOwogICAgY29uc3QgZ0JvdCA9IFtQKHhmLGdJUiksIFAoeGcsZ0lSKSwgUCh4ZyxnT1IpLCBQKHhmLGdPUildOwogICAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWdhc2tldCIgZD0iJHtwYXRoRnJvbShnVG9wKX0gWiIvPmA7CiAgICBzICs9IGA8cGF0aCBjbGFzcz0id3otZ2Fza2V0IiBkPSIke3BhdGhGcm9tKGdCb3QpfSBaIi8+YDsKICAgIGNvbnN0IGcyT3V0ZXIgPSBbCiAgICAgIFAoeEVuZCwtUiksIFAoeGIyLC1SKSwgUCh4YjItY2gsLWZSKSwgUCh4ZjIsLWZSKSwgUCh4ZjIsLXJpKSwKICAgICAgUCh4ZjIscmkpLCBQKHhmMixmUiksIFAoeGIyLWNoLGZSKSwgUCh4YjIsUiksIFAoeEVuZCxSKQogICAgXTsKICAgIGNvbnN0IGcyQm9yZSA9IFtQKHhmMiwtcmkpLCBQKHhFbmQsLXJpKSwgUCh4RW5kLHJpKSwgUCh4ZjIscmkpXTsKICAgIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1oYXRjaCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSIke3BhdGhGcm9tKGcyT3V0ZXIpfSBaICR7cGF0aEZyb20oZzJCb3JlKX0gWiIvPmA7CiAgICBjb25zdCBjbGFtcFRvcCA9IChzZ24pID0+IHsKICAgICAgY29uc3QgeUYgPSBzZ24gKiBmUiwgeUMgPSBzZ24gKiAoZlIgKyBjbGFtcFQpOwogICAgICBjb25zdCB4YSA9IHhiICsgY2ggLSAxLCB4ZSA9IHhiMiAtIGNoICsgMTsKICAgICAgcmV0dXJuIFsgUCh4YSx5RiksIFAoeGYseUYpLCBQKHhnLHlGKSwgUCh4ZSx5RiksIFAoeGUrMiwgeUMqMC42MiArIHNnbioyKSwgUCh4ZSx5QyksIFAoeGEseUMpLCBQKHhhLTIsIHlDKjAuNjIgKyBzZ24qMikgXTsKICAgIH07CiAgICBzICs9IGA8cGF0aCBjbGFzcz0id3otY2xhbXAiIGQ9IiR7cGF0aEZyb20oY2xhbXBUb3AoLTEpKX0gWiIvPmA7CiAgICBzICs9IGA8cGF0aCBjbGFzcz0id3otY2xhbXAiIGQ9IiR7cGF0aEZyb20oY2xhbXBUb3AoMSkpfSBaIi8+YDsKICB9IGVsc2UgaWYgKGNsb3NlZCkgewogICAgLy8gTnVyIGRlciBCbGluZGRlY2tlbCBoYXQgZWluZSBnZXNjaGxvc3NlbmUgU3Rpcm5mbGFlY2hlLiBEZXIgZWluemVsbmUgU3R1dHplbgogICAgLy8gKCdzaW5nbGUnKSBpc3Qgb2ZmZW4gLT4gaGllciBiZXd1c3N0IEtFSU4gRGVja2VsLgogICAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWhhdGNoIiB4PSIke2Z4KFAuc3goeGYgLSBvLndhbGwgKiAxLjQpKX0iIHk9IiR7ZngoUC5zeSgtcmkpKX0iIHdpZHRoPSIke2Z4KG8ud2FsbCAqIDEuNCAqIFAuc2NhbGUpfSIgaGVpZ2h0PSIke2Z4KDIgKiByaSAqIFAuc2NhbGUpfSIvPmA7CiAgfQoKICBzICs9IGA8bGluZSBjbGFzcz0id3otY2VudGVyIiB4MT0iJHtmeChQLnN4KHgwKSAtIDEwKX0iIHkxPSIke2Z4KGN5KX0iIHgyPSIke2Z4KFAuc3goZWluemVsbiA\\\/IHhmIDogeEVuZCkgKyAxMCl9IiB5Mj0iJHtmeChjeSl9Ii8+YDsKCiAgY29uc3QgZGltWSA9IGN5ICsgUiAqIFAuc2NhbGUgKyAzMCwgZGltWTIgPSBkaW1ZICsgMjI7CiAgLy8gTGFlbmdlbm1hc3M6IFByYWVmaXggYXVzIG8ubGVuZ3RoTGFiZWwgKCdMJyA9IFN0dXR6ZW5sYWVuZ2UgS0svS0wsICdoJyA9IEhvZWhlIGJlaW0gVENEKS4KICBzICs9IGRpbUgoaWQsIFAuc3goeDApLCBQLnN4KHhmKSwgZGltWSwgby5sZW5ndGhMYWJlbCArICcgJyArIGRlKG8ubGVuZ3RoKSwgeyBleHQ6IFAuc3koUikgfSk7CiAgLyogQmF1bGFlbmdlIGRlciBrb21wbGV0dGVuIFZlcmJpbmR1bmc6IHNlaXQgMjguMDcuMjAyNiBkYXMgZWNodGUgTWFzcyBsNCBhdXMKICAgKiBESU4gMzI2NzYgKGRhdGEuanMpLiBCZWltIGVpbnplbG5lbiBTdHV0emVuIElTVCBkYXMgTGFlbmdlbm1hc3Mgb2JlbiBzY2hvbiBkYXMKICAgKiB2b2xsc3RhZW5kaWdlIE1hc3MgLT4ga2VpbiB6d2VpdGVzIE1hc3MgYW5oYWVuZ2VuLiBPaG5lIEJlbGVnIChvZGVyIGJlaQogICAqIHdpZGVyc3BydWVjaGxpY2hlciBRdWVsbGUsIHNpZWhlIGw0SW5mbykgYmxlaWJ0IGRlciBiaXNoZXJpZ2UgUGxhdHpoYWx0ZXIgLQogICAqIGVzIHdpcmQgS0VJTkUgQmF1bGFlbmdlIGdlc2NoYWV0enQuICovCiAgaWYgKCFlaW56ZWxuKSBzICs9IGRpbUgoaWQsIFAuc3goeDApLCBQLnN4KHhFbmQpLCBkaW1ZMiwKICAgIGw0ID8gJ2w0ICcgKyBkZShsNC53ZXJ0KSA6ICdCYXVsw6RuZ2UgZm9sZ3QnLCB7IGV4dDogMCB9KTsKICBzICs9IGRpbVYoaWQsIFAuc3goeDApIC0gMzQsIFAuc3koLVIpLCBQLnN5KFIpLCAnQUQg4oyAICcgKyBkZShvLm9kKSwgeyBleHQ6IFAuc3goeDApIH0pOwogIC8qIEJlcm5kIDI3LjA3LjIwMjYgKFdvcmQsIEFic2Nobml0dCAzKTogQmlzaGVyIHN0YW5kZW4gbnVyIEF1c3NlbmR1cmNobWVzc2VyIHVuZAogICAqIFdhbmRzdGFlcmtlIGluIGRlciBaZWljaG51bmcuIERlciBJbm5lbmR1cmNobWVzc2VyIGtvbW10IGRhenUgLSBiZXJlY2huZXQgbmFjaAogICAqIEJlcm5kcyBGb3JtZWwgSUQgPSBBRCAtICgyIHggV2FuZCksIGFsc28gZXhha3QgZGVyIGdlemVpY2huZXRlIEJvaHJ1bmdzLeKMgCAoMipyaSkuCiAgICogRXIgc3RlaHQgYXVmIGRlciBUQy1TZWl0ZSwgZGVyIFRDLeKMgCBydWVja3QgZGFmdWVyIHdlaXRlciBuYWNoIHJlY2h0cy4gQmVpIGRlcgogICAqIGtvbXBsZXR0ZW4gVmVyYmluZHVuZyBzaXR6ZW4gYmVpZGUgTWFzc2UgYW0gcmVjaHRlbiBFbmRlLiAqLwogIGNvbnN0IHhSaWdodCA9IGVpbnplbG4gPyB4ZiA6IHhFbmQ7CiAgcyArPSBkaW1WUm90KGlkLCBQLnN4KHhSaWdodCkgKyAzMiwgUC5zeSgtcmkpLCBQLnN5KHJpKSwgJ0lEIOKMgCAnICsgZGUoMiAqIHJpKSwgeyBleHQ6IFAuc3goeFJpZ2h0KSB9KTsKICBzICs9IGRpbVZSb3QoaWQsIFAuc3goeFJpZ2h0KSArIDYyLCBQLnN5KC1mUiksIFAuc3koZlIpLCAnVEMg4oyAICcgKyBkZShmUiAqIDIpLCB7IGV4dDogUC5zeCh4UmlnaHQpIH0pOwogIHMgKz0gbGVhZGVyKGlkLCBQLnN4KG8ubGVuZ3RoICogMC4xOCksIFAuc3koLVIpLCBQLnN4KG8ubGVuZ3RoICogMC4xOCkgLSAzMCwgUC5zeSgtUikgLSAyNCwgJ3MgJyArIGRlKG8ud2FsbCkpOwoKICBzICs9IGA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngoUC5zeCgoeDAgKyB4ZikgLyAyKSAtIDYyKX0iIHk9IjE0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjIwIiByeD0iMTAiLz4KICAgICAgICA8dGV4dCBjbGFzcz0id3otYmFkZ2UtdHgiIHg9IiR7ZngoUC5zeCgoeDAgKyB4ZikgLyAyKSl9IiB5PSIyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+RE4gJHtvLmRufSDCtyBDbGFtcCAke28uY2xhbXBTaXplfTwvdGV4dD5gOwogIGNvbnN0IGxlZ2VuZCA9IGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCBjbG9zZWQgPyAnTMOkbmdzc2Nobml0dCAoQmxpbmRkZWNrZWwpJwogICAgOiBzaW5nbGUgPyAnTMOkbmdzc2Nobml0dCAoZWluemVsbmVyIFN0dXR6ZW4pJyA6ICdMw6RuZ3NzY2huaXR0IChDbGFtcC1WZXJiaW5kdW5nKScpOwogIHJldHVybiB3cmFwU3ZnKGlkLCB2dywgdmgsIG8uZ0NvbCwgcywgbGVnZW5kKTsKfQoKLyogLS0gMikgQm9nZW4gOTAvNDUgKGdlc2Nod2Vpc3N0LCBESU4gMTE4NjUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBkcmF3Qm9nZW4obywgdncsIHZoLCBkZWcpIHsKICBjb25zdCBSID0gby5vZFIsIHJpID0gby5pbm5SLCBSYyA9IG8uYmVuZFJhZGl1cywgTCA9IG8ubGVuZ3RoOwogIGNvbnN0IGFuZyA9IGRlZyAqIE1hdGguUEkgLyAxODA7CiAgY29uc3QgQSA9IC1NYXRoLlBJIC8gMiwgQiA9IEEgKyBhbmcsIEMgPSBbMCwgMF07CiAgY29uc3Qgb25DID0gKHIsIGEpID0+IFtDWzBdICsgciAqIE1hdGguY29zKGEpLCBDWzFdICsgciAqIE1hdGguc2luKGEpXTsKICBjb25zdCB0QSA9IFstTWF0aC5zaW4oQSksIE1hdGguY29zKEEpXSwgdEIgPSBbLU1hdGguc2luKEIpLCBNYXRoLmNvcyhCKV07CiAgY29uc3QgaW5UaXAgPSByID0+IFtvbkMociwgQSlbMF0gLSB0QVswXSAqIEwsIG9uQyhyLCBBKVsxXSAtIHRBWzFdICogTF07CiAgY29uc3Qgb3V0VGlwID0gciA9PiBbb25DKHIsIEIpWzBdICsgdEJbMF0gKiBMLCBvbkMociwgQilbMV0gKyB0QlsxXSAqIExdOwogIGNvbnN0IHNlZyA9IGRlZyA+IDYwID8gMjAgOiAxNDsKICBjb25zdCBtaWQgPSAoQSArIEIpIC8gMjsKICAvKiBCZXJuZCAyNy4wNy4yMDI2OiBCZWltIDkwLUdyYWQtQm9nZW4gc2FzcyBkaWUgTWFzc3phaGwgIlIiIGF1ZiBoYWxiZXIgU3RyZWNrZQogICAqIHp3aXNjaGVuIEJvZ2VubWl0dGVscHVua3QgdW5kIEJvZ2VubWl0dGUgLSBhbHNvIGdlbmF1IGRvcnQsIHdvIGRpZSBNYXNza2V0dGUKICAgKiBMMy9MMSBsYWV1ZnQuIEFiIEROMjUgdWViZXJkZWNrdGVuIHNpY2ggZGllIGJlaWRlbiBUZXh0a2Flc3Rlbi4gRGllIFphaGwgc3RlaHQKICAgKiBqZXR6dCBBVVNTRVJIQUxCIGRlciBCb2dlbmtvbnR1ciBhbSBFbmRlIGVpbmVzIEhpbndlaXNzdHJpY2hzOyBkaWUgTWFzc2xpbmllCiAgICogemVpZ3Qgd2VpdGVyaGluIHZvbSBNaXR0ZWxwdW5rdCBhdWYgZGllIEJvZ2VubWl0dGVsbGluaWUuIERlciA0NS1HcmFkLUJvZ2VuCiAgICogKGJpc2hlciB1bmF1ZmZhZWxsaWcpIGZvbGd0IGRlcnNlbGJlbiBSZWdlbCB1bmQgYmxlaWJ0IGRhZHVyY2gga29sbGlzaW9uc2ZyZWkuICovCiAgY29uc3QgckxhYmVsUHQgPSBvbkMoUmMgKyBSICsgTWF0aC5tYXgoOSwgUiAqIDAuODUpLCBtaWQpOwogIGNvbnN0IG91dGVyID0gW10uY29uY2F0KFtpblRpcChSYyArIFIpXSkuY29uY2F0KGFyY1B0cygwLDAsUmMrUixBLEIsc2VnKSkuY29uY2F0KFtvdXRUaXAoUmMrUildKS5jb25jYXQoW291dFRpcChSYy1SKV0pLmNvbmNhdChhcmNQdHMoMCwwLFJjLVIsQixBLHNlZykpLmNvbmNhdChbaW5UaXAoUmMtUildKTsKICBjb25zdCBib3JlID0gW10uY29uY2F0KFtpblRpcChSYyArIHJpKV0pLmNvbmNhdChhcmNQdHMoMCwwLFJjK3JpLEEsQixzZWcpKS5jb25jYXQoW291dFRpcChSYytyaSldKS5jb25jYXQoW291dFRpcChSYy1yaSldKS5jb25jYXQoYXJjUHRzKDAsMCxSYy1yaSxCLEEsc2VnKSkuY29uY2F0KFtpblRpcChSYy1yaSldKTsKICBjb25zdCBhbGxYID0gb3V0ZXIubWFwKHAgPT4gcFswXSkuY29uY2F0KFtpblRpcChSYylbMF0sIG91dFRpcChSYylbMF0sIHJMYWJlbFB0WzBdXSk7CiAgY29uc3QgYWxsWSA9IG91dGVyLm1hcChwID0+IHBbMV0pLmNvbmNhdChbaW5UaXAoUmMpWzFdLCBvdXRUaXAoUmMpWzFdLCByTGFiZWxQdFsxXV0pOwogIGNvbnN0IFAgPSBtYWtlUHJvaihNYXRoLm1pbiguLi5hbGxYKS02LCBNYXRoLm1heCguLi5hbGxYKSs2LCBNYXRoLm1pbiguLi5hbGxZKS02LCBNYXRoLm1heCguLi5hbGxZKSs2LCB2dywgdmgsIHsgbDo1OCwgcjo1OCwgdDo1MCwgYjo2MiB9KTsKICBjb25zdCBpZCA9IHVpZCgpOyBjb25zdCBwciA9IGEgPT4gYS5tYXAocCA9PiBQKHBbMF0sIHBbMV0pKTsKCiAgbGV0IHMgPSAnJzsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otYm9yZSIgZD0iJHtwYXRoRnJvbShwcihib3JlKSl9IFoiLz5gOwogIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1oYXRjaCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSIke3BhdGhGcm9tKHByKG91dGVyKSl9IFogJHtwYXRoRnJvbShwcihib3JlKSl9IFoiLz5gOwogIGNvbnN0IGNsQXJjID0gYXJjUHRzKDAsMCxSYyxBLEIsc2VnKS5tYXAocCA9PiBQKHBbMF0sIHBbMV0pKTsKICBzICs9IGA8cG9seWxpbmUgY2xhc3M9Ind6LWNlbnRlciIgcG9pbnRzPSIke3BvbHkoW1AoLi4uaW5UaXAoUmMpKSwgUCguLi5vbkMoUmMsIEEpKV0pfSIvPmA7CiAgcyArPSBgPHBvbHlsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHBvaW50cz0iJHtwb2x5KGNsQXJjKX0iLz5gOwogIHMgKz0gYDxwb2x5bGluZSBjbGFzcz0id3otY2VudGVyIiBwb2ludHM9IiR7cG9seShbUCguLi5vbkMoUmMsIEIpKSwgUCguLi5vdXRUaXAoUmMpKV0pfSIvPmA7CiAgY29uc3QgY0MgPSBQKDAsIDApLCBjTWlkID0gUCguLi5vbkMoUmMsIG1pZCkpLCBjTGJsID0gUCguLi5yTGFiZWxQdCk7CiAgY29uc3QgclR4dCA9ICdSICcgKyAoby5wcm92RGltcyA\\\/ICdmb2xndCcgOiBkZShSYykpOwogIGNvbnN0IHJCb3hXID0gbWVhc3VyZShyVHh0KSAqIDI7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWRpbSIgeDE9IiR7ZngoY0NbMF0pfSIgeTE9IiR7ZngoY0NbMV0pfSIgeDI9IiR7ZngoY01pZFswXSl9IiB5Mj0iJHtmeChjTWlkWzFdKX0iIG1hcmtlci1lbmQ9InVybCgjJHtpZH0tYXIpIi8+CiAgICAgICAgPGxpbmUgY2xhc3M9Ind6LWxlYWQiIHgxPSIke2Z4KGNNaWRbMF0pfSIgeTE9IiR7ZngoY01pZFsxXSl9IiB4Mj0iJHtmeChjTGJsWzBdKX0iIHkyPSIke2Z4KGNMYmxbMV0pfSIvPgogICAgICAgIDxyZWN0IGNsYXNzPSJ3ei1iYWRnZS1iZyIgeD0iJHtmeChjTGJsWzBdIC0gckJveFcgLyAyKX0iIHk9IiR7ZngoY0xibFsxXSAtIDkpfSIgd2lkdGg9IiR7ZngockJveFcpfSIgaGVpZ2h0PSIxNiIgcng9IjMiIG9wYWNpdHk9IjAuOTIiLz4KICAgICAgICA8dGV4dCBjbGFzcz0id3otZGltdHh0IiB4PSIke2Z4KGNMYmxbMF0pfSIgeT0iJHtmeChjTGJsWzFdICsgMSl9Ij4ke3JUeHR9PC90ZXh0PmA7CiAgY29uc3QgZXhJbiA9IGluVGlwKFJjKTsKICBzICs9IGRpbVYoaWQsIFAuc3goZXhJblswXSkgLSA4LCBQLnN5KG9uQyhSYyxBKVsxXSkgLSBSKlAuc2NhbGUsIFAuc3kob25DKFJjLEEpWzFdKSArIFIqUC5zY2FsZSwgJ+KMgCAnICsgZGUoby5vZCksIHsgZXh0OiBQLnN4KGV4SW5bMF0pIH0pOwogIHMgKz0gZGltSChpZCwgUC5zeChpblRpcChSYylbMF0pLCBQLnN4KG9uQyhSYyxBKVswXSksIFAuc3kob25DKFJjLEEpWzFdKSArIFIqUC5zY2FsZSArIDI0LCAoby5sZW5ndGhMYWJlbCB8fCAnTDMnKSArICcgJyArIChvLnByb3ZEaW1zID8gJ2ZvbGd0JyA6IGRlKG8ubGVuZ3RoKSksIHsgZXh0OiBQLnN5KG9uQyhSYyxBKVsxXSArIFIpIH0pOwogIGlmIChvLm92ZXJhbGxMZW5ndGggIT0gbnVsbCAmJiBvLm92ZXJhbGxMZW5ndGhMYWJlbCkgewogICAgY29uc3QgeDEgPSBQLnN4KGluVGlwKFJjKVswXSksIHgyID0geDEgKyBvLm92ZXJhbGxMZW5ndGggKiBQLnNjYWxlOwogICAgcyArPSBkaW1IKGlkLCB4MSwgeDIsIFAuc3kob25DKFJjLEEpWzFdKSArIFIqUC5zY2FsZSArIDQ4LCBvLm92ZXJhbGxMZW5ndGhMYWJlbCArICcgJyArIGRlKG8ub3ZlcmFsbExlbmd0aCksIHsgZXh0OiBQLnN5KG9uQyhSYyxBKVsxXSArIFIpIH0pOwogIH0KICBzICs9IGA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngodncvMi03Mil9IiB5PSIxNCIgd2lkdGg9IjE0NCIgaGVpZ2h0PSIyMCIgcng9IjEwIi8+CiAgICAgICAgPHRleHQgY2xhc3M9Ind6LWJhZGdlLXR4IiB4PSIke2Z4KHZ3LzIpfSIgeT0iMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkJvZ2VuICR7ZGVnfcKwIMK3IEROICR7by5kbn0gwrcgRElOIDExODY1PC90ZXh0PmA7CiAgcmV0dXJuIHdyYXBTdmcoaWQsIHZ3LCB2aCwgby5nQ29sLCBzLCBsZWdlbmRCb3goaWQsIHZ3LCB2aCwgbywgJ0zDpG5nc3NjaG5pdHQgKEJvZ2VuICcgKyBkZWcgKyAnwrApJykpOwp9CgovKiAtLSAzKSBULVN0dWVjayAoZ2xlaWNoIC8gcmVkdXppZXJ0LCBESU4gMTE4NjUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmZ1bmN0aW9uIGRyYXdUc3R1ZWNrKG8sIHZ3LCB2aCkgewogIGNvbnN0IFIgPSBvLm9kUiwgcmkgPSBvLmlublIsIEwgPSBvLmxlbmd0aDsKICBjb25zdCBiUiA9IG8uYnJhbmNoT2QgLyAyLCBicmkgPSBNYXRoLm1heCgwLjUsIGJSIC0gby53YWxsKTsKICAvKiBEaWUgQWJnYW5nc2xhZW5nZSBpc3QgaW4gQkVJREVOIEJhdWZvcm1lbiBlaW4gZWNodGVzIE1hc3MgYXVzIGRlciBLdW5kZW50YWJlbGxlCiAgICogKEZvcm0gVDogU3BhbHRlIEwyLCBGb3JtIFRLOiBTcGFsdGUgTDEgLSBCZXJuZCAyNy4wNy4yMDI2KS4gby5icmFuY2hMZW5ndGggbWlzc3QKICAgKiBhYiBMYXVmLU1pdHRlbGxpbmllOyBnZXplaWNobmV0IHdpcmQgZGllIEhvZWhlIHVlYmVyIGRlciBMYXVma29udHVyLiBEaWUgZnJ1ZWhlcgogICAqIGZ1ZXIgVEsgdmVyd2VuZGV0ZSBTY2hhZXR6bGFlbmdlIChvZCowLDcgYnp3LiBMKjAsMjIpIGVudGZhZWxsdCBkYW1pdC4gKi8KICBjb25zdCBiTCA9IG8uYnJhbmNoTGVuZ3RoICE9IG51bGwgPyBNYXRoLm1heCgxLCBvLmJyYW5jaExlbmd0aCAtIFIpIDogTWF0aC5tYXgoby5vZCwgTCAqIDAuNDIpOwogIGNvbnN0IHhjID0gTCAvIDI7CiAgY29uc3Qgb3V0ZXIgPSBbIFswLC1SXSwgW3hjLWJSLC1SXSwgW3hjLWJSLC1SLWJMXSwgW3hjK2JSLC1SLWJMXSwgW3hjK2JSLC1SXSwgW0wsLVJdLCBbTCxSXSwgWzAsUl0gXTsKICBjb25zdCBib3JlICA9IFsgWzAsLXJpXSwgW3hjLWJyaSwtcmldLCBbeGMtYnJpLC1SLWJMXSwgW3hjK2JyaSwtUi1iTF0sIFt4YyticmksLXJpXSwgW0wsLXJpXSwgW0wscmldLCBbMCxyaV0gXTsKICBjb25zdCBQID0gbWFrZVByb2ooMCwgTCwgLVIgLSBiTCAtIDYsIFIgKyA2LCB2dywgdmgsIHsgbDo1OCwgcjo2NCwgdDo4MCwgYjo2NiB9KTsKICBjb25zdCBpZCA9IHVpZCgpOyBjb25zdCBwciA9IGEgPT4gYS5tYXAocCA9PiBQKHBbMF0sIHBbMV0pKTsKICBsZXQgcyA9ICcnOwogIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1ib3JlIiBkPSIke3BhdGhGcm9tKHByKGJvcmUpKX0gWiIvPmA7CiAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWhhdGNoIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9IiR7cGF0aEZyb20ocHIob3V0ZXIpKX0gWiAke3BhdGhGcm9tKHByKGJvcmUpKX0gWiIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWNlbnRlciIgeDE9IiR7ZngoUC5zeCgwKS0xMCl9IiB5MT0iJHtmeChQLnN5KDApKX0iIHgyPSIke2Z4KFAuc3goTCkrMTApfSIgeTI9IiR7ZngoUC5zeSgwKSl9Ii8+YDsKICBzICs9IGA8bGluZSBjbGFzcz0id3otY2VudGVyIiB4MT0iJHtmeChQLnN4KHhjKSl9IiB5MT0iJHtmeChQLnN5KC1SLWJMKS0xMCl9IiB4Mj0iJHtmeChQLnN4KHhjKSl9IiB5Mj0iJHtmeChQLnN5KFIpKX0iLz5gOwogIC8vIEJlcm5kIDI3LjA3LjIwMjY6IERhcyBMYXVmbWFzcyBoZWlzc3QgbnVyIG5vY2ggIkwiICh2b3JoZXIgIkxhdWYiKS4KICBzICs9IGRpbUgoaWQsIFAuc3goMCksIFAuc3goTCksIFAuc3koUikgKyAyOCwgJ0wgJyArIChvLnByb3ZEaW1zID8gJ2ZvbGd0JyA6IGRlKEwpKSwgeyBleHQ6IFAuc3koUikgfSk7CiAgLyogQmVybmQgMjguMDcuMjAyNjogRGVyIEFiZ2FuZyBzdGFtbXQgYmVpIEZvcm0gVEsgYXVzIFNwYWx0ZSBMMSwgd3VyZGUgYWJlciBhdWNoCiAgICogZG9ydCBhbHMgIkwyIiBiZXNjaHJpZnRldCAoYmVpIEROMTUgVEsgc3RhbmQgIj5MMiAxMTwiLCB3YWVocmVuZCBkaWUgV2Vpc3MtVGFiZWxsZQogICAqIGluIFNwYWx0ZSBMMiBkZW4gV2VydCAzNSBmdWVocnQpLiBEYXMgS3VlcnplbCBmb2xndCBqZXR6dCBkZXIgQmF1Zm9ybSAtIEZvcm0gVAogICAqIGJlbWFzc3QgTDIsIEZvcm0gVEsgYmVtYXNzdCBMMS4gRGVyIFdlcnQgc2VsYnN0IGJsZWlidCB1bnZlcmFlbmRlcnQ7IGVyIGtvbW10CiAgICogd2VpdGVyaGluIGF1cyBhYmdhbmdMMigpIGluIGFwcC5qcyAoRm9ybSBUOiBMMiwgRm9ybSBUSzogTDEpLiAqLwogIGNvbnN0IGFiZ2FuZ0t1ZXJ6ZWwgPSBvLnRmb3JtID09PSAnVEsnID8gJ0wxJyA6ICdMMic7CiAgaWYgKG8uYnJhbmNoTGVuZ3RoICE9IG51bGwpIHMgKz0gZGltVihpZCwgUC5zeCh4YyArIGJSKSArIDM0LCBQLnN5KC1vLmJyYW5jaExlbmd0aCksIFAuc3koMCksIGFiZ2FuZ0t1ZXJ6ZWwgKyAnICcgKyBkZShvLmJyYW5jaExlbmd0aCksIHsgZXh0OiBQLnN4KHhjICsgYlIpIH0pOwogIHMgKz0gZGltVihpZCwgUC5zeCgwKSAtIDMwLCBQLnN5KC1SKSwgUC5zeShSKSwgJ+KMgCAnICsgZGUoby5vZCksIHsgZXh0OiBQLnN4KDApIH0pOwogIC8qIEJlcm5kIDI3LjA3LjIwMjY6IERlciBBYmdhbmdzLeKMgCBzdGFuZCBhbHMgU0VOS1JFQ0hURVMgTWFzcyByZWNodHMgbmViZW4gZGVtCiAgICogQWJnYW5nIC0gZG9ydCBtaXNzdCBkaWUgTWFzc2xpbmllIGFiZXIgZGVzc2VuIExhZW5nZSwgbmljaHQgc2VpbmVuIER1cmNobWVzc2VyLgogICAqIEVyIGdlaG9lcnQgYWxzIFF1ZXJtYXNzIHVlYmVyIGRlbiBBYmdhbmcgKEZvcm0gVCB3aWUgRm9ybSBUIHJlZHV6aWVydCkuICovCiAgcyArPSBkaW1IKGlkLCBQLnN4KHhjIC0gYlIpLCBQLnN4KHhjICsgYlIpLCBQLnN5KC1SIC0gYkwpIC0gMjYsICfijIAgJyArIGRlKG8uYnJhbmNoT2QpLCB7IGV4dDogUC5zeSgtUiAtIGJMKSB9KTsKICAvLyBSMy0zL1IzLTQ6IEJhdWZvcm0gKEZvcm0gVCAvIEZvcm0gVEspIG1pdCBpbSBCYWRnZS4KICBzICs9IGA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngodncvMi0xMTUpfSIgeT0iMTQiIHdpZHRoPSIyMzAiIGhlaWdodD0iMjAiIHJ4PSIxMCIvPgogICAgICAgIDx0ZXh0IGNsYXNzPSJ3ei1iYWRnZS10eCIgeD0iJHtmeCh2dy8yKX0iIHk9IjI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5ULVN0w7xjayAke28uYnJhbmNoT2QgPT09IG8ub2QgPyAnZ2xlaWNoJyA6ICdyZWR1emllcnQnfSDCtyBGb3JtICR7by50Zm9ybX0gwrcgRE4gJHtvLmRufTwvdGV4dD5gOwogIHJldHVybiB3cmFwU3ZnKGlkLCB2dywgdmgsIG8uZ0NvbCwgcywgbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sICdMw6RuZ3NzY2huaXR0IChULVN0w7xjayknKSk7Cn0KCi8qIC0tIDQpIFJlZHV6aWVydW5nIChrb256ZW50cmlzY2ggLyBleHplbnRyaXNjaCwgRElOIDExODY1KSAtLS0tLS0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gZHJhd1JlZHV6aWVydW5nKG8sIHZ3LCB2aCkgewogIGNvbnN0IFIgPSBvLm9kUiwgcmkgPSBvLmlublIsIEwgPSBvLmxlbmd0aDsKICBjb25zdCBSMiA9IG8ub2QyIC8gMiwgcmkyID0gTWF0aC5tYXgoMC41LCBSMiAtIG8ud2FsbDIpOwogIGNvbnN0IGVjYyA9ICEhby5lY2NlbnRyaWMsIG9mZiA9IGVjYyA\\\/IChSIC0gUjIpIDogMDsKICBjb25zdCBvdXRlciA9IFsgWzAsLVJdLCBbTCwtUjIrb2ZmXSwgW0wsUjIrb2ZmXSwgWzAsUl0gXTsKICBjb25zdCBib3JlICA9IFsgWzAsLXJpXSwgW0wsLXJpMitvZmZdLCBbTCxyaTIrb2ZmXSwgWzAscmldIF07CiAgY29uc3QgUCA9IG1ha2VQcm9qKDAsIEwsIC1SIC0gNiwgUiArIDYsIHZ3LCB2aCwgeyBsOjU4LCByOjY0LCB0OjQ2LCBiOjYyIH0pOwogIGNvbnN0IGlkID0gdWlkKCk7IGNvbnN0IHByID0gYSA9PiBhLm1hcChwID0+IFAocFswXSwgcFsxXSkpOwogIGxldCBzID0gJyc7CiAgcyArPSBgPHBhdGggY2xhc3M9Ind6LWJvcmUiIGQ9IiR7cGF0aEZyb20ocHIoYm9yZSkpfSBaIi8+YDsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otaGF0Y2giIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iJHtwYXRoRnJvbShwcihvdXRlcikpfSBaICR7cGF0aEZyb20ocHIoYm9yZSkpfSBaIi8+YDsKICBzICs9IGA8bGluZSBjbGFzcz0id3otY2VudGVyIiB4MT0iJHtmeChQLnN4KDApLTEwKX0iIHkxPSIke2Z4KFAuc3koMCkpfSIgeDI9IiR7ZngoUC5zeChMKSsxMCl9IiB5Mj0iJHtmeChQLnN5KGVjYyA\\\/IG9mZiA6IDApKX0iLz5gOwogIHMgKz0gZGltSChpZCwgUC5zeCgwKSwgUC5zeChMKSwgUC5zeShSKSArIDI2LCAnTCAnICsgKG8ucHJvdkRpbXMgPyAnZm9sZ3QnIDogZGUoTCkpLCB7IGV4dDogUC5zeShSKSB9KTsKICBzICs9IGRpbVYoaWQsIFAuc3goMCkgLSAzMCwgUC5zeSgtUiksIFAuc3koUiksICfijIAgJyArIGRlKG8ub2QpLCB7IGV4dDogUC5zeCgwKSB9KTsKICBzICs9IGRpbVYoaWQsIFAuc3goTCkgKyAzNCwgUC5zeSgtUjIgKyBvZmYpLCBQLnN5KFIyICsgb2ZmKSwgJ+KMgCAnICsgKG8ub2QyUHJvdiA\\\/IGRlKG8ub2QyKSA6ICdmb2xndCcpLCB7IGV4dDogUC5zeChMKSB9KTsKICAvLyBSMy0yOiBCYXVmb3JtLUvDvHJ6ZWwgRm9ybSBSSyAoa29uemVudHJpc2NoKSAvIEZvcm0gUkUgKGV4emVudHJpc2NoKSBpbiBkZXIgWmVpY2hudW5nLgogIGNvbnN0IHJlZEZvcm0gPSBlY2MgPyAnZXh6ZW50cmlzY2ggKEZvcm0gUkUpJyA6ICdrb256ZW50cmlzY2ggKEZvcm0gUkspJzsKICBzICs9IGA8cmVjdCBjbGFzcz0id3otYmFkZ2UtYmciIHg9IiR7ZngodncvMi0xMjApfSIgeT0iMTQiIHdpZHRoPSIyNDAiIGhlaWdodD0iMjAiIHJ4PSIxMCIvPgogICAgICAgIDx0ZXh0IGNsYXNzPSJ3ei1iYWRnZS10eCIgeD0iJHtmeCh2dy8yKX0iIHk9IjI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5SZWR1emllcnVuZyAke3JlZEZvcm19IMK3ICR7ZGUoby5vZCl94oaSJHtvLm9kMlByb3YgPyBkZShvLm9kMikgOiAnZm9sZ3QnfTwvdGV4dD5gOwogIHJldHVybiB3cmFwU3ZnKGlkLCB2dywgdmgsIG8uZ0NvbCwgcywgbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sICdMw6RuZ3NzY2huaXR0IChSZWR1emllcnVuZyknKSk7Cn0KCi8qIC0tIDUpIEtsYW1tZXIgLyBTcGFubnJpbmcgKEZyb250YW5zaWNodCwgRElOIDMyNjc2KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUnVuZGUgNyAoVy0wNTkpOiBlY2h0ZSBNYXNzemVpY2hudW5nIG5hY2ggZGVuIGdlbGllZmVydGVuIFdlaXNzLVZvcmxhZ2VuCiAqIChNYXNzemVpY2hudW5nIEtMMS9LTEgvS0xMSS5zdmcsIDIyLjA3LjIwMjYpLiBCZW1hc3N0IHdlcmRlbiBudXIgYmVsZWd0ZQogKiBXZXJ0ZTogQSA9IEtsYW1tZXItQXVzc2VuLcOYIChrbGFtbWVyQSBhdXMgIk1hc3NlIEtsZW1tZW4sIEJsaW5kZGVja2VsLnhsc3giKSwKICogS2xlbW0t4oyAID0gRmxhbnNjaC3DmCAoZmxhbmdlT2QpLiBGZWhsdCBBLCBibGVpYnQgZGVyIFBsYXR6aGFsdGVyLgogKiBLbGFtbWVydHlwZW4gKGJlbGVndCwgQmVybmQgUjItNCk6IEtMMSA9IDEgR2VsZW5rLzEgUGluLCBLTExJID0gMSBHZWxlbmsvCiAqIDIgUGlucywgS0xIID0gSG9jaGRydWNra2xhbW1lciwgendlaSBIYWxic2NoYWxlbiBtaXQgMiBHZWxlbmtlbi4KICogTXV0dGVyIChiZWxlZ3QsIFIyLTQpOiBNID0gRmx1ZWdlbG11dHRlciAoU3RhbmRhcmQpLCBTID0gU2VjaHNrYW50bXV0dGVyLiAqLwpmdW5jdGlvbiBkcmF3S2xhbW1lcihvLCB2dywgdmgpIHsKICBpZiAoIXBvc2l0aXZlKG8ua2xhbW1lckEpIHx8ICFwb3NpdGl2ZShvLmZsYW5nZU9kKSB8fCBvLmtsYW1tZXJBIDw9IG8uZmxhbmdlT2QpIHsKICAgIHJldHVybiBkcmF3UGxhdHpoYWx0ZXIobywgdncsIHZoKTsKICB9CiAgY29uc3Qgck91dCA9IG8ua2xhbW1lckEgLyAyLCBmUiA9IG8uZmxhbmdlT2QgLyAyOwogIGNvbnN0IGJhbmQgPSByT3V0IC0gZlI7CiAgY29uc3QgZXh0ID0gck91dCArIDE0OyAgICAgICAgICAgICAgICAgICAgLy8gUmFuZCBmdWVyIFZlcnNjaGx1c3MvR2VsZW5rIG9iZW4rdW50ZW4KICBjb25zdCBQID0gbWFrZVByb2ooLWV4dCwgZXh0LCAtZXh0LCBleHQsIHZ3LCB2aCwgeyBsOjcwLCByOjU2LCB0OjQ0LCBiOjg2IH0pOwogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgYyA9IFAoMCwgMCksIHNjID0gUC5zY2FsZTsKICBsZXQgcyA9ICcnOwogIC8vIEtsYW1tZXJiYW5kIChWb2xscmluZykgKyBJbm5lbmthbnRlIGFtIEtsZW1tLeKMgAogIHMgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY1swXSl9IiBjeT0iJHtmeChjWzFdKX0iIHI9IiR7ZngoKGZSICsgYmFuZCAvIDIpICogc2MpfSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ2YXIoLS13ei1jbGFtcCwjYzljZWQ0KSIgc3Ryb2tlLXdpZHRoPSIke2Z4KGJhbmQgKiBzYyl9Ii8+YDsKICBzICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGNbMF0pfSIgY3k9IiR7ZngoY1sxXSl9IiByPSIke2Z4KHJPdXQgKiBzYyl9IiBjbGFzcz0id3otZWRnZSIvPmA7CiAgcyArPSBgPGNpcmNsZSBjeD0iJHtmeChjWzBdKX0iIGN5PSIke2Z4KGNbMV0pfSIgcj0iJHtmeChmUiAqIHNjKX0iIGNsYXNzPSJ3ei1lZGdlIi8+YDsKICAvLyBLTEg6IHp3ZWkgSGFsYnNjaGFsZW4gLT4gVHJlbm5mdWdlbiBsaW5rcy9yZWNodHMgKGVyZ2lidCBkaWUgMiBHZWxlbmtlKQogIGlmIChvLmtsYW1tZXJUeXAgPT09ICdLTEgnKSB7CiAgICBbLTEsIDFdLmZvckVhY2goc2lkZSA9PiB7CiAgICAgIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1lZGdlIiB4MT0iJHtmeChjWzBdICsgc2lkZSAqIGZSICogc2MpfSIgeTE9IiR7ZngoY1sxXSl9IiB4Mj0iJHtmeChjWzBdICsgc2lkZSAqIHJPdXQgKiBzYyl9IiB5Mj0iJHtmeChjWzFdKX0iIHN0cm9rZS13aWR0aD0iMiIvPmA7CiAgICB9KTsKICB9CiAgLyogVmVyc2NobHVzczogTGFzY2hlICsgTXV0dGVyIChNID0gRmx1ZWdlbG11dHRlciwgUyA9IFNlY2hza2FudG11dHRlcikuCiAgICogc2duID0gLTEgemVpY2huZXQgbmFjaCBvYmVuLCBzZ24gPSArMSBleGFrdCBnZXNwaWVnZWx0IG5hY2ggdW50ZW4uICovCiAgY29uc3QgdmVyc2NobHVzcyA9ICh5RWRnZSwgc2duKSA9PiB7CiAgICBsZXQgdCA9IGA8cmVjdCBjbGFzcz0id3otY2xhbXAiIHg9IiR7ZngoY1swXSAtIDcpfSIgeT0iJHtmeChzZ24gPCAwID8geUVkZ2UgLSAxMyA6IHlFZGdlIC0gNCl9IiB3aWR0aD0iMTQiIGhlaWdodD0iMTciIHJ4PSIyIi8+YDsKICAgIGlmIChvLmtsYW1tZXJNdXR0ZXIgPT09ICdTJykgewogICAgICByZXR1cm4gdCArIGA8cG9seWdvbiBjbGFzcz0id3otY2xhbXAiIHBvaW50cz0iJHtwb2x5KFsKICAgICAgICBbY1swXSAtIDcsIHlFZGdlICsgc2duICogMTVdLCBbY1swXSAtIDMuNSwgeUVkZ2UgKyBzZ24gKiAyMl0sIFtjWzBdICsgMy41LCB5RWRnZSArIHNnbiAqIDIyXSwKICAgICAgICBbY1swXSArIDcsIHlFZGdlICsgc2duICogMTVdLCBbY1swXSArIDMuNSwgeUVkZ2UgKyBzZ24gKiA4XSwgW2NbMF0gLSAzLjUsIHlFZGdlICsgc2duICogOF1dKX0iLz5gOwogICAgfQogICAgY29uc3QgZXkgPSB5RWRnZSArIHNnbiAqIDE2LCBueSA9IHlFZGdlICsgc2duICogMTU7CiAgICByZXR1cm4gdCArCiAgICAgIGA8ZWxsaXBzZSBjbGFzcz0id3otY2xhbXAiIGN4PSIke2Z4KGNbMF0gLSA5KX0iIGN5PSIke2Z4KGV5KX0iIHJ4PSI3IiByeT0iMy40IiB0cmFuc2Zvcm09InJvdGF0ZSgke2Z4KHNnbiAqIC0yNCl9ICR7ZngoY1swXSAtIDkpfSAke2Z4KGV5KX0pIi8+YCArCiAgICAgIGA8ZWxsaXBzZSBjbGFzcz0id3otY2xhbXAiIGN4PSIke2Z4KGNbMF0gKyA5KX0iIGN5PSIke2Z4KGV5KX0iIHJ4PSI3IiByeT0iMy40IiB0cmFuc2Zvcm09InJvdGF0ZSgke2Z4KHNnbiAqIDI0KX0gJHtmeChjWzBdICsgOSl9ICR7ZngoZXkpfSkiLz5gICsKICAgICAgYDxjaXJjbGUgY2xhc3M9Ind6LWNsYW1wIiBjeD0iJHtmeChjWzBdKX0iIGN5PSIke2Z4KG55KX0iIHI9IjQuNSIvPmA7CiAgfTsKICBjb25zdCB0b3BZID0gY1sxXSAtIHJPdXQgKiBzYywgYm90WSA9IGNbMV0gKyByT3V0ICogc2M7CiAgcyArPSB2ZXJzY2hsdXNzKHRvcFksIC0xKTsKICBpZiAoby5rbGFtbWVyVHlwID09PSAnS0xIJykgewogICAgLyogQmVybmQgMjcuMDcuMjAyNjogRGllIEtMSCBiZXN0ZWh0IGF1cyB6d2VpIEhhbGJzY2hhbGVuIG1pdCBaV0VJIGxvZXNiYXJlbgogICAgICogVmVyYmluZHVuZ2VuLiBTaWUgYmVrb21tdCBkZXNoYWxiIHVudGVuIGRlbnNlbGJlbiBWZXJzY2hsdXNzIHdpZSBvYmVuLAogICAgICogZ2VzcGllZ2VsdCAtIG5pY2h0IGRhcyBlaW56ZWxuZSBHZWxlbmsgZGVyIEtMMS4gKi8KICAgIHMgKz0gdmVyc2NobHVzcyhib3RZLCAxKTsKICB9IGVsc2UgewogICAgLy8gR2VsZW5rIHVudGVuOiBLTDEgZWluIFBpbiwgS0xMSSB6d2VpIFBpbnMKICAgIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1jbGFtcCIgeD0iJHtmeChjWzBdIC0gNyl9IiB5PSIke2Z4KGJvdFkgLSA0KX0iIHdpZHRoPSIxNCIgaGVpZ2h0PSI4IiByeD0iMiIvPmA7CiAgICBpZiAoby5rbGFtbWVyVHlwID09PSAnS0xMSScpIHsKICAgICAgcyArPSBgPGNpcmNsZSBjbGFzcz0id3otY2xhbXAiIGN4PSIke2Z4KGNbMF0gLSA1KX0iIGN5PSIke2Z4KGJvdFkgKyA3KX0iIHI9IjMuNCIvPmA7CiAgICAgIHMgKz0gYDxjaXJjbGUgY2xhc3M9Ind6LWNsYW1wIiBjeD0iJHtmeChjWzBdICsgNSl9IiBjeT0iJHtmeChib3RZICsgNyl9IiByPSIzLjQiLz5gOwogICAgfSBlbHNlIHsKICAgICAgcyArPSBgPGNpcmNsZSBjbGFzcz0id3otY2xhbXAiIGN4PSIke2Z4KGNbMF0pfSIgY3k9IiR7ZngoYm90WSArIDcpfSIgcj0iNCIvPmA7CiAgICB9CiAgfQogIC8vIEJlbWFzc3VuZzogS2xlbW0t4oyAIChGbGFuc2NoKSBsaW5rcywgQSAoQXVzc2VuLeKMgCkgdW50ZW4gLSB3aWUgaW4gZGVyIFZvcmxhZ2UuCiAgcyArPSBkaW1WUm90KGlkLCBjWzBdIC0gck91dCAqIHNjIC0gMjQsIGNbMV0gLSBmUiAqIHNjLCBjWzFdICsgZlIgKiBzYywgJ+KMgCAnICsgZGUoby5mbGFuZ2VPZCksIHsgZXh0OiBjWzBdIH0pOwogIC8vIEJlaSBkZXIgS0xIIHNpdHp0IHVudGVuIGpldHp0IGRlciBnZXNwaWVnZWx0ZSBWZXJzY2hsdXNzIC0+IEEtTWFzcyBldHdhcyB0aWVmZXIuCiAgcyArPSBkaW1IKGlkLCBjWzBdIC0gck91dCAqIHNjLCBjWzBdICsgck91dCAqIHNjLCBib3RZICsgKG8ua2xhbW1lclR5cCA9PT0gJ0tMSCcgPyA0OCA6IDQwKSwgJ0Eg4oyAICcgKyBkZShvLmtsYW1tZXJBKSwgeyBleHQ6IGNbMV0gKyByT3V0ICogc2MgfSk7CiAgcyArPSBmaXR0aW5nQmFkZ2UodncsICdLbGFtbWVyICcgKyBvLmtsYW1tZXJUeXAgKyAnIMK3IEtsZW1tLeKMgCAnICsgZGUoby5mbGFuZ2VPZCkgKyAnIMK3IERJTiAzMjY3NicpOwogIHJldHVybiB3cmFwU3ZnKGlkLCB2dywgdmgsIG8uZ0NvbCwgcywgbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sICdGcm9udGFuc2ljaHQgKEtsYW1tZXIgJyArIG8ua2xhbW1lclR5cCArICcpJykpOwp9CgovKiAtLSA1YikgQmxpbmRkZWNrZWwgKFNlaXRlbmFuc2ljaHQsIERJTiAzMjY3NikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBSdW5kZSA3IChXLTA1OSk6IGVjaHRlIE1hc3N6ZWljaG51bmcgbmFjaCBNYXNzemVpY2hudW5nIEJsaW5kZGVja2VsLnN2ZwogKiAoMjIuMDcuMjAyNikuIEJlbGVndGUgTWFzc2U6IEEgPSBGbGFuc2NoLcOYIChmbGFuZ2VPZCksIEwgPSBEZWNrZWxzdGFlcmtlCiAqIChsZW5ndGggYXVzICJNYXNzZSBLbGVtbWVuLCBCbGluZGRlY2tlbC54bHN4IikuIE9obmUgYmVsZWd0ZSBEZWNrZWxzdGFlcmtlCiAqICgyODYsMS8zMTkvMzM4KSBibGVpYnQgZGVyIFBsYXR6aGFsdGVyIC0gZXMgd2lyZCBrZWluZSBEaWNrZSBnZXJhdGVuLiAqLwpmdW5jdGlvbiBkcmF3QmxpbmRkZWNrZWwobywgdncsIHZoKSB7CiAgaWYgKCFwb3NpdGl2ZShvLmZsYW5nZU9kKSB8fCAhcG9zaXRpdmUoby5sZW5ndGgpKSByZXR1cm4gZHJhd1BsYXR6aGFsdGVyKG8sIHZ3LCB2aCk7CiAgY29uc3QgQSA9IG8uZmxhbmdlT2QsIEwgPSBvLmxlbmd0aCwgciA9IEEgLyAyOwogIGNvbnN0IFAgPSBtYWtlUHJvaigwLCBMLCAtciwgciwgdncsIHZoLCB7IGw6NzgsIHI6NTYsIHQ6NDQsIGI6NzYgfSk7CiAgY29uc3QgaWQgPSB1aWQoKTsKICBsZXQgcyA9ICcnOwogIC8vIEdlc2NobG9zc2VuZSBTY2hlaWJlIGltIFZvbGxzY2huaXR0ICsgU3Rpcm5zZWl0ZSB1bmQgTWl0dGVsbGluaWUKICBzICs9IGA8cmVjdCBjbGFzcz0id3otaGF0Y2giIHg9IiR7ZngoUC5zeCgwKSl9IiB5PSIke2Z4KFAuc3koLXIpKX0iIHdpZHRoPSIke2Z4KEwgKiBQLnNjYWxlKX0iIGhlaWdodD0iJHtmeChBICogUC5zY2FsZSl9Ii8+YDsKICBzICs9IGA8bGluZSBjbGFzcz0id3otZWRnZSIgeDE9IiR7ZngoUC5zeChMKSl9IiB5MT0iJHtmeChQLnN5KC1yKSl9IiB4Mj0iJHtmeChQLnN4KEwpKX0iIHkyPSIke2Z4KFAuc3kocikpfSIgc3Ryb2tlLXdpZHRoPSIxLjYiLz5gOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHgxPSIke2Z4KFAuc3goMCkgLSAxMCl9IiB5MT0iJHtmeChQLnN5KDApKX0iIHgyPSIke2Z4KFAuc3goTCkgKyAxMCl9IiB5Mj0iJHtmeChQLnN5KDApKX0iLz5gOwogIC8vIEJlbWFzc3VuZzogQSAoRmxhbnNjaC3ijIApIGxpbmtzIHZlcnRpa2FsLCBMIChEZWNrZWxzdGFlcmtlKSB1bnRlbiAtIHdpZSBpbiBkZXIgVm9ybGFnZS4KICBzICs9IGRpbVZSb3QoaWQsIFAuc3goMCkgLSAzNCwgUC5zeSgtciksIFAuc3kociksICdBIOKMgCAnICsgZGUoQSksIHsgZXh0OiBQLnN4KDApIH0pOwogIHMgKz0gZGltSChpZCwgUC5zeCgwKSwgUC5zeChMKSwgUC5zeShyKSArIDMyLCAnTCAnICsgZGUoTCksIHsgZXh0OiBQLnN5KHIpIH0pOwogIHMgKz0gZml0dGluZ0JhZGdlKHZ3LCAnQmxpbmRkZWNrZWwgwrcgRmxhbnNjaC3ijIAgJyArIGRlKEEpICsgJyDCtyBESU4gMzI2NzYnKTsKICByZXR1cm4gd3JhcFN2ZyhpZCwgdncsIHZoLCBvLmdDb2wsIHMsIGxlZ2VuZEJveChpZCwgdncsIHZoLCBvLCAnU2VpdGVuYW5zaWNodCAoQmxpbmRkZWNrZWwpJykpOwp9CgovKiAtLSA2KSBDb25uZWN0LUZsYW5zY2ggKENGKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFZlcmJpbmRsaWNoZSBQYXJhbWV0ZXI6IERlPW8ub2QsIERpPW8uaW5uZXJEaWFtZXRlciwgRGY9by5mbGFuZ2VPZCwgTD1vLmxlbmd0aC4KICogQmVybmQgMjcuMDcuMjAyNjogRGllIGZydWVoZXJlbiBTY2hyYXViZW4tLCBLbGVtbS0gdW5kIFB1bmt0ZGV0YWlscyBzaW5kCiAqIGVudGZhbGxlbiAoImRpZSBEZXRhaWxzIGluIGRlaW5lciBTa2l6emUgdmVyd2lycmVuIGVoZXIgLSBrZWVwIGl0IHNpbXBsZSIpLgogKiBHZXplaWNobmV0IHdpcmQgamV0enQgZWluZSBlaW5mYWNoZSwgc3ltbWV0cmlzY2hlIFNjaG5pdHRmb3JtOiBBbnNhdHogbWl0IGRlbQogKiBGbGFuc2NoLeKMgCBEZiwga29uaXNjaGVyIFVlYmVyZ2FuZyBhdWYgZGVuIEF1c3Nlbi3ijIAgRGUgdWViZXIgZGllIEhvZWhlIEwsCiAqIGR1cmNoZ2VoZW5kZSBCb2hydW5nIERpLiBCZW1hc3N0IHdlcmRlbiBhdXNzY2hsaWVzc2xpY2ggZGllc2UgdmllciBXZXJ0ZTsKICogZGllIEhvZWhlIGRlcyBBbnNhdHplcyBpc3Qgc2NoZW1hdGlzY2ggdW5kIHRyYWVndCBkZXNoYWxiIGtlaW5lIE1hc3N6YWhsLiAqLwpmdW5jdGlvbiBkcmF3Q29ubmVjdGZsYW5zY2gobywgdncsIHZoKSB7CiAgY29uc3QgRGUgPSBvLm9kLCBEaSA9IG8uaW5uZXJEaWFtZXRlciwgRGYgPSBvLmZsYW5nZU9kLCBMID0gby5sZW5ndGg7CiAgY29uc3QgckRlID0gRGUgLyAyLCByRGkgPSBEaSAvIDIsIHJEZiA9IERmIC8gMjsKICBjb25zdCBib3NzSCA9IE1hdGgubWF4KEwgKiAxLjIsIERmICogMC41NSk7CiAgY29uc3QgdG9wID0gLUwgLSBib3NzSDsKICBjb25zdCBQID0gbWFrZVByb2ooLXJEZSwgckRlLCB0b3AsIDAsIHZ3LCB2aCwgeyBsOjg4LCByOjk0LCB0OjY0LCBiOjkyIH0pOwogIGNvbnN0IGlkID0gdWlkKCk7CgogIGNvbnN0IG91dGVyID0gW1AoLXJEZiwgdG9wKSwgUChyRGYsIHRvcCksIFAockRmLCAtTCksIFAockRlLCAwKSwgUCgtckRlLCAwKSwgUCgtckRmLCAtTCldOwogIGNvbnN0IGJvcmUgPSBbUCgtckRpLCB0b3ApLCBQKHJEaSwgdG9wKSwgUChyRGksIDApLCBQKC1yRGksIDApXTsKICBsZXQgcyA9ICcnOwogIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1ib3JlIiBkPSIke3BhdGhGcm9tKGJvcmUpfSBaIi8+YDsKICBzICs9IGA8cGF0aCBjbGFzcz0id3otaGF0Y2giIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iJHtwYXRoRnJvbShvdXRlcil9IFogJHtwYXRoRnJvbShib3JlKX0gWiIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWNlbnRlciIgeDE9IiR7ZngoUC5zeCgwKSl9IiB5MT0iJHtmeChQLnN5KHRvcCkgLSAxMil9IiB4Mj0iJHtmeChQLnN4KDApKX0iIHkyPSIke2Z4KFAuc3koMCkgKyAxMil9Ii8+YDsKCiAgcyArPSBkaW1IKGlkLCBQLnN4KC1yRGYpLCBQLnN4KHJEZiksIFAuc3kodG9wKSAtIDI0LCAnRGYgJyArIGRlKERmKSwgeyBleHQ6IFAuc3kodG9wKSB9KTsKICBzICs9IGRpbUgoaWQsIFAuc3goLXJEaSksIFAuc3gockRpKSwgUC5zeSgwKSArIDI2LCAnRGkgJyArIGRlKERpKSwgeyBleHQ6IFAuc3koMCkgfSk7CiAgcyArPSBkaW1IKGlkLCBQLnN4KC1yRGUpLCBQLnN4KHJEZSksIFAuc3koMCkgKyA1MiwgJ0RlICcgKyBkZShEZSksIHsgZXh0OiBQLnN5KDApIH0pOwogIHMgKz0gZGltVihpZCwgUC5zeChyRGUpICsgMzYsIFAuc3koLUwpLCBQLnN5KDApLCAnTCAnICsgZGUoTCksIHsgZXh0OiBQLnN4KHJEZSkgfSk7CiAgcyArPSBmaXR0aW5nQmFkZ2UodncsICdDb25uZWN0LUZsYW5zY2ggKENGKSDCtyAnICsgc2l6ZUxhYmVsKG8pKTsKICByZXR1cm4gd3JhcFN2ZyhpZCwgdncsIHZoLCBvLmdDb2wsIHMsCiAgICBsZWdlbmRCb3goaWQsIHZ3LCB2aCwgbywgJ1NjaG5pdHRzY2hlbWEgKENvbm5lY3QtRmxhbnNjaCBDRiknKSk7Cn0KCi8qIC0tIDcpIENvbm5lY3QtRmxhbnNjaCBJbmxpbmUgLyBDRkkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogVmVyYmluZGxpY2hlIFBhcmFtZXRlcjogRGUsIERpLCBMLCBZIHNvd2llIEFuc2NobHVzc21hc3MgQSAoQlcpIGJ6dy4gVEMuCiAqIERlciBtaXR0bGVyZSBaZXJvLURlYWQtTGVnLUF1ZmJhdSBpc3QgZWluZSB0ZWNobmlzY2hlIFNjaGVtYWZvcm07IHNlaW5lIG5pY2h0CiAqIHVlYmVyZ2ViZW5lbiBFaW56ZWxtYXNzZSB3ZXJkZW4gd2VkZXIgYmVzY2hyaWZ0ZXQgbm9jaCBhbHMgTm9ybXdlcnQgZ2VudXR6dC4gKi8KZnVuY3Rpb24gZHJhd0Nvbm5lY3RpbmxpbmUobywgdncsIHZoKSB7CiAgY29uc3QgRGUgPSBvLm9kLCBEaSA9IG8uaW5uZXJEaWFtZXRlciwgTCA9IG8ubGVuZ3RoLCBZID0gby5icmFuY2hIZWlnaHQ7CiAgY29uc3QgZW5kVmFsdWUgPSBvLmVuZERpYW1ldGVyLCBpc1RDID0gby5lbmRUeXBlID09PSAnVEMnOwogIGNvbnN0IHVwcGVyRGUgPSBvLnVwcGVyT3V0ZXJEaWFtZXRlciwgdXBwZXJEaSA9IG8udXBwZXJJbm5lckRpYW1ldGVyOwogIGNvbnN0IHJEZSA9IERlIC8gMiwgckRpID0gRGkgLyAyLCByRW5kID0gaXNUQyA\\\/IGVuZFZhbHVlIC8gMiA6IHJEZTsKICBjb25zdCB4YyA9IEwgLyAyOwogIGNvbnN0IGJhc2VIYWxmID0gTWF0aC5taW4oTCAqIDAuMjQsIE1hdGgubWF4KDEwLCB1cHBlckRlICogMC41OCkpOwogIGNvbnN0IHVwcGVyTGVmdCA9IHhjIC0gdXBwZXJEZSAvIDIsIHVwcGVyUmlnaHQgPSB4YyArIHVwcGVyRGUgLyAyOwogIGNvbnN0IGlubmVyTGVmdCA9IHhjIC0gdXBwZXJEaSAvIDIsIGlubmVyUmlnaHQgPSB4YyArIHVwcGVyRGkgLyAyOwogIGNvbnN0IHNlYWxZID0gLVk7CiAgY29uc3QgaGVhZEggPSBNYXRoLm1heCg3LCB1cHBlckRlICogMC4yKTsKICBjb25zdCB0b3AgPSBzZWFsWSAtIGhlYWRIOwogIGNvbnN0IGZsYW5nZVQgPSBpc1RDID8gTWF0aC5tYXgoMiwgTWF0aC5taW4oTCAqIDAuMDQ1LCBEZSAqIDAuMTMpKSA6IDA7CiAgY29uc3QgbWluWSA9IE1hdGgubWluKHRvcCAtIGhlYWRIICogMC4zOCwgLXJFbmQpOwogIGNvbnN0IG1heFkgPSBNYXRoLm1heChyRW5kLCByRGUpOwogIGNvbnN0IFAgPSBtYWtlUHJvaigwLCBMLCBtaW5ZLCBtYXhZLCB2dywgdmgsIHsgbDoxMDQsIHI6OTQsIHQ6OTIsIGI6OTIgfSk7CiAgY29uc3QgaWQgPSB1aWQoKTsKICBjb25zdCBwaXBlWDAgPSBpc1RDID8gZmxhbmdlVCA6IDAsIHBpcGVYMSA9IGlzVEMgPyBMIC0gZmxhbmdlVCA6IEw7CiAgbGV0IHMgPSAnJzsKCiAgLy8gUm9ocnNjaG5pdHQ6IERlIHVuZCBEaSBzaW5kIGVjaHRlIHVlYmVyZ2ViZW5lIER1cmNobWVzc2VyLgogIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1oYXRjaCIgeD0iJHtmeChQLnN4KHBpcGVYMCkpfSIgeT0iJHtmeChQLnN5KC1yRGUpKX0iIHdpZHRoPSIke2Z4KChwaXBlWDEgLSBwaXBlWDApICogUC5zY2FsZSl9IiBoZWlnaHQ9IiR7ZngoRGUgKiBQLnNjYWxlKX0iLz5gOwogIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1ib3JlIiB4PSIke2Z4KFAuc3gocGlwZVgwKSAtIDEpfSIgeT0iJHtmeChQLnN5KC1yRGkpKX0iIHdpZHRoPSIke2Z4KChwaXBlWDEgLSBwaXBlWDApICogUC5zY2FsZSArIDIpfSIgaGVpZ2h0PSIke2Z4KERpICogUC5zY2FsZSl9Ii8+YDsKICBzICs9IGA8bGluZSBjbGFzcz0id3otZWRnZSIgeDE9IiR7ZngoUC5zeChwaXBlWDApKX0iIHkxPSIke2Z4KFAuc3koLXJEaSkpfSIgeDI9IiR7ZngoUC5zeChwaXBlWDEpKX0iIHkyPSIke2Z4KFAuc3koLXJEaSkpfSIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWVkZ2UiIHgxPSIke2Z4KFAuc3gocGlwZVgwKSl9IiB5MT0iJHtmeChQLnN5KHJEaSkpfSIgeDI9IiR7ZngoUC5zeChwaXBlWDEpKX0iIHkyPSIke2Z4KFAuc3kockRpKSl9Ii8+YDsKCiAgaWYgKGlzVEMpIHsKICAgIC8vIFRDIHdpcmQgYWxzIHVlYmVyZ2ViZW5lciBFbmRkdXJjaG1lc3NlciBnZXplaWNobmV0OyBGbGFuc2NoZGlja2UgYmxlaWJ0IHNjaGVtYXRpc2NoLgogICAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWhhdGNoIiB4PSIke2Z4KFAuc3goMCkpfSIgeT0iJHtmeChQLnN5KC1yRW5kKSl9IiB3aWR0aD0iJHtmeChmbGFuZ2VUICogUC5zY2FsZSl9IiBoZWlnaHQ9IiR7ZngoMiAqIHJFbmQgKiBQLnNjYWxlKX0iLz5gOwogICAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWhhdGNoIiB4PSIke2Z4KFAuc3goTCAtIGZsYW5nZVQpKX0iIHk9IiR7ZngoUC5zeSgtckVuZCkpfSIgd2lkdGg9IiR7ZngoZmxhbmdlVCAqIFAuc2NhbGUpfSIgaGVpZ2h0PSIke2Z4KDIgKiByRW5kICogUC5zY2FsZSl9Ii8+YDsKICAgIHMgKz0gZGltVlJvdChpZCwgUC5zeCgwKSAtIDYyLCBQLnN5KC1yRW5kKSwgUC5zeShyRW5kKSwgJ1RDIOKMgCAnICsgZGUoZW5kVmFsdWUpLCB7IGV4dDogUC5zeCgwKSB9KTsKICB9IGVsc2UgewogICAgLy8gQSBpc3QgbGF1dCBEYXRlbmJsYXR0IGVpbiBMYWVuZ2VubWFzcyBhbSBCdXR0LVdlbGQtRW5kZSwga2VpbiBEdXJjaG1lc3Nlci4KICAgIGNvbnN0IGFYID0gTWF0aC5taW4oZW5kVmFsdWUsIEwpOwogICAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWVkZ2UiIHgxPSIke2Z4KFAuc3goYVgpKX0iIHkxPSIke2Z4KFAuc3koLXJEZSkpfSIgeDI9IiR7ZngoUC5zeChhWCkpfSIgeTI9IiR7ZngoUC5zeShyRGUpKX0iIHN0cm9rZS1kYXNoYXJyYXk9IjMgMyIvPmA7CiAgICBzICs9IGRpbUgoaWQsIFAuc3goMCksIFAuc3goYVgpLCBQLnN5KHJEZSkgKyAyNywgJ0EgJyArIGRlKGVuZFZhbHVlKSwgeyBleHQ6IFAuc3kockRlKSB9KTsKICB9CgogIC8vIE1pdHRsZXJlciBaZXJvLURlYWQtTGVnLUF1ZmJhdSwgc2NoZW1hdGlzY2ggYW4gZGVyIERhdGVuYmxhdHRrb250dXIgb3JpZW50aWVydC4KICBjb25zdCBsZWZ0ID0geGMgLSBiYXNlSGFsZiwgcmlnaHQgPSB4YyArIGJhc2VIYWxmOwogIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1oYXRjaCIgZD0iTSR7ZngoUC5zeChsZWZ0KSl9LCR7ZngoUC5zeSgtckRlKSl9CiAgICBMJHtmeChQLnN4KHVwcGVyTGVmdCkpfSwke2Z4KFAuc3koc2VhbFkpKX0KICAgIEwke2Z4KFAuc3godXBwZXJSaWdodCkpfSwke2Z4KFAuc3koc2VhbFkpKX0KICAgIEwke2Z4KFAuc3gocmlnaHQpKX0sJHtmeChQLnN5KC1yRGUpKX0gWiIvPmA7CiAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWhhdGNoIiB4PSIke2Z4KFAuc3godXBwZXJMZWZ0KSl9IiB5PSIke2Z4KFAuc3kodG9wKSl9IiB3aWR0aD0iJHtmeCh1cHBlckRlICogUC5zY2FsZSl9IiBoZWlnaHQ9IiR7ZngoaGVhZEggKiBQLnNjYWxlKX0iLz5gOwogIC8vIE9mZmVuZXIsIGdlcnVuZGV0ZXIgSW5uZW5yYXVtOiBrZWluZXJsZWkgbmljaHQgdWViZXJnZWJlbmVzIE1hc3Mgd2lyZCBhbmdlc2NocmllYmVuLgogIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1ib3JlIiBkPSJNJHtmeChQLnN4KGlubmVyTGVmdCkpfSwke2Z4KFAuc3kodG9wKSAtIDEpfQogICAgTCR7ZngoUC5zeChpbm5lckxlZnQpKX0sJHtmeChQLnN5KC1yRGUgKiAwLjIyKSl9CiAgICBRJHtmeChQLnN4KHhjKSl9LCR7ZngoUC5zeShyRGkgKiAwLjkyKSl9ICR7ZngoUC5zeChpbm5lclJpZ2h0KSl9LCR7ZngoUC5zeSgtckRlICogMC4yMikpfQogICAgTCR7ZngoUC5zeChpbm5lclJpZ2h0KSl9LCR7ZngoUC5zeSh0b3ApIC0gMSl9IFoiLz5gOwogIHMgKz0gYDxwYXRoIGNsYXNzPSJ3ei1lZGdlIiBkPSJNJHtmeChQLnN4KGlubmVyTGVmdCkpfSwke2Z4KFAuc3kodG9wKSl9CiAgICBMJHtmeChQLnN4KGlubmVyTGVmdCkpfSwke2Z4KFAuc3koLXJEZSAqIDAuMjIpKX0KICAgIFEke2Z4KFAuc3goeGMpKX0sJHtmeChQLnN5KHJEaSAqIDAuOTIpKX0gJHtmeChQLnN4KGlubmVyUmlnaHQpKX0sJHtmeChQLnN5KC1yRGUgKiAwLjIyKSl9CiAgICBMJHtmeChQLnN4KGlubmVyUmlnaHQpKX0sJHtmeChQLnN5KHRvcCkpfSIvPmA7CiAgWy0xLDFdLmZvckVhY2goc2lkZSA9PiB7CiAgICBjb25zdCBieCA9IHhjICsgc2lkZSAqIHVwcGVyRGUgKiAwLjU2OwogICAgY29uc3QgYnIgPSBNYXRoLm1heCgxLjgsIHVwcGVyRGUgKiAwLjA1NSk7CiAgICBzICs9IGA8cmVjdCBjbGFzcz0id3otY2xhbXAiIHg9IiR7ZngoUC5zeChieCAtIGJyKSl9IiB5PSIke2Z4KFAuc3kodG9wICsgaGVhZEggKiAwLjA4KSl9IiB3aWR0aD0iJHtmeCgyICogYnIgKiBQLnNjYWxlKX0iIGhlaWdodD0iJHtmeChoZWFkSCAqIDAuODYgKiBQLnNjYWxlKX0iIHJ4PSIke2Z4KGJyICogUC5zY2FsZSAqIDAuMzUpfSIvPmA7CiAgICBzICs9IGA8Y2lyY2xlIGNsYXNzPSJ3ei1jbGFtcCIgY3g9IiR7ZngoUC5zeChieCkpfSIgY3k9IiR7ZngoUC5zeSh0b3ApKX0iIHI9IiR7ZngoYnIgKiBQLnNjYWxlKX0iLz5gOwogIH0pOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHgxPSIke2Z4KFAuc3goMCkgLSAxMCl9IiB5MT0iJHtmeChQLnN5KDApKX0iIHgyPSIke2Z4KFAuc3goTCkgKyAxMCl9IiB5Mj0iJHtmeChQLnN5KDApKX0iLz5gOwogIHMgKz0gYDxsaW5lIGNsYXNzPSJ3ei1jZW50ZXIiIHgxPSIke2Z4KFAuc3goeGMpKX0iIHkxPSIke2Z4KFAuc3kodG9wKSAtIDEwKX0iIHgyPSIke2Z4KFAuc3goeGMpKX0iIHkyPSIke2Z4KFAuc3kockRlKSl9Ii8+YDsKCiAgY29uc3QgbGVmdERpbVggPSBQLnN4KDApIC0gKGlzVEMgPyAzOCA6IDQyKTsKICBzICs9IGRpbVZSb3QoaWQsIGxlZnREaW1YLCBQLnN5KC1yRGUpLCBQLnN5KHJEZSksICdEZSAnICsgZGUoRGUpLCB7IGV4dDogUC5zeCgwKSB9KTsKICBzICs9IGRpbVZSb3QoaWQsIFAuc3goMCkgLSAxNiwgUC5zeSgtckRpKSwgUC5zeShyRGkpLCAnRGkgJyArIGRlKERpKSwgeyBleHQ6IFAuc3goMCkgfSk7CiAgcyArPSBkaW1WUm90KGlkLCBQLnN4KHJpZ2h0KSArIDM4LCBQLnN5KHNlYWxZKSwgUC5zeSgwKSwgJ1kgJyArIGRlKFkpLCB7IGV4dDogUC5zeChyaWdodCkgfSk7CiAgcyArPSBkaW1IKGlkLCBQLnN4KDApLCBQLnN4KEwpLCBQLnN5KG1heFkpICsgNTUsICdMICcgKyBkZShMKSwgeyBleHQ6IFAuc3kobWF4WSkgfSk7CiAgcyArPSBkaW1IKGlkLCBQLnN4KHVwcGVyTGVmdCksIFAuc3godXBwZXJSaWdodCksIFAuc3kodG9wKSAtIDIxLCAnb2JlbiBEZSAnICsgZGUodXBwZXJEZSksIHsgZXh0OiBQLnN5KHRvcCkgfSk7CiAgcyArPSBkaW1IKGlkLCBQLnN4KGlubmVyTGVmdCksIFAuc3goaW5uZXJSaWdodCksIFAuc3kodG9wKSAtIDQzLCAnb2JlbiBEaSAnICsgZGUodXBwZXJEaSksIHsgZXh0OiBQLnN5KHRvcCkgfSk7CiAgcyArPSBmaXR0aW5nQmFkZ2UodncsICdDb25uZWN0LUZsYW5zY2ggSW5saW5lIChDRkkpIMK3ICcgKwogICAgKGlzVEMgPyAnVHJpLUNsYW1wJyA6ICdCdXR0IFdlbGQnKSArICcgwrcgJyArIHNpemVMYWJlbChvKSk7CiAgcmV0dXJuIHdyYXBTdmcoaWQsIHZ3LCB2aCwgby5nQ29sLCBzLAogICAgbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sICdTY2huaXR0c2NoZW1hIChDb25uZWN0LUZsYW5zY2ggSW5saW5lIENGSSknKSk7Cn0KCi8qIC0tIDgpIERpY2h0dW5nIChGcm9udGFuc2ljaHQgKyBQcm9maWwsIERJTiAzMjY3NikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFJ1bmRlIDcgKFctMDU5KTogZWNodGUgWmVpY2hudW5nIG5hY2ggZGVuIGdlbGllZmVydGVuIFByb2ZpbGJpbGRlcm4KICogKCJEaWNodHVuZyBUeXBJIG9obmUgTGlwcGUuanBnIiAvICJEaWNodHVuZyBUeXBJSSBtaXQgTGlwcGUuanBnIiwgMjIuMDcuMjAyNikuCiAqIEJlbGVndGUgTWFzc2UgYXVzIGRhdGEuanMgKERJTjMyNjc2LVplaWxlbik6IEUgPSBBdXNzZW4t4oyAIChnYXNrZXRPZCksCiAqIEMgPSBJbm5lbi3ijIAgKGdhc2tldElkKS4gVHlwIEkgPSBvaG5lIExpcHBlLCBUeXAgSUkgPSBtaXQgTGlwcGUgKGJlbGVndCwKICogQmVybmQgUjItMykuIERhcyBQcm9maWwgcmVjaHRzIGlzdCBzY2hlbWF0aXNjaCB1bmQgdW5iZW1hc3N0OyBiZW1hc3N0IHdlcmRlbgogKiBudXIgRSB1bmQgQy4gRmVobHQgZWluZXMgZGVyIGJlaWRlbiBNYXNzZSwgYmxlaWJ0IGRlciBQbGF0emhhbHRlci4gKi8KZnVuY3Rpb24gZHJhd0RpY2h0dW5nKG8sIHZ3LCB2aCkgewogIGlmICghcG9zaXRpdmUoby5nYXNrZXRPZCkgfHwgIXBvc2l0aXZlKG8uZ2Fza2V0SWQpIHx8IG8uZ2Fza2V0SWQgPj0gby5nYXNrZXRPZCkgewogICAgcmV0dXJuIGRyYXdQbGF0emhhbHRlcihvLCB2dywgdmgpOwogIH0KICBjb25zdCBFID0gby5nYXNrZXRPZCwgQyA9IG8uZ2Fza2V0SWQsIHJFID0gRSAvIDIsIHJDID0gQyAvIDI7CiAgY29uc3QgbGlwcGUgPSBvLmdhc2tldFR5cGUgPT09ICdJSSc7CiAgLy8gTGF5b3V0IGluIG1tOiBSaW5nIG1pdCBNaXR0ZSBiZWkgKDAsMCksIHNjaGVtYXRpc2NoZXMgUHJvZmlsIHJlY2h0cyBkYW5lYmVuLgogIGNvbnN0IHByb2ZXID0gKHJFIC0gckMpICogMi4yLCBwcm9mSCA9IEUgKiAwLjQyOwogIGNvbnN0IHByb2ZYMCA9IHJFICsgTWF0aC5tYXgoMTQsIEUgKiAwLjIyKTsKICBjb25zdCBQID0gbWFrZVByb2ooLXJFIC0gNCwgcHJvZlgwICsgcHJvZlcgKyA0LCAtckUgLSA0LCByRSArIDQsIHZ3LCB2aCwgeyBsOjU2LCByOjU2LCB0OjU2LCBiOjc4IH0pOwogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgYyA9IFAoMCwgMCksIHNjID0gUC5zY2FsZTsKICBsZXQgcyA9ICcnOwogIC8vIFJpbmcgaW4gRGljaHR1bmdzZmFyYmUsIEJvaHJ1bmcgZnJlaSwgTWl0dGVsbGluaWVuCiAgcyArPSBgPGNpcmNsZSBjbGFzcz0id3otZ2Fza2V0IiBjeD0iJHtmeChjWzBdKX0iIGN5PSIke2Z4KGNbMV0pfSIgcj0iJHtmeChyRSAqIHNjKX0iLz5gOwogIHMgKz0gYDxjaXJjbGUgY2xhc3M9Ind6LWJvcmUiIGN4PSIke2Z4KGNbMF0pfSIgY3k9IiR7ZngoY1sxXSl9IiByPSIke2Z4KHJDICogc2MpfSIgc3Ryb2tlPSJ2YXIoLS13ei1lZGdlLCMxYzFjMWMpIiBzdHJva2Utd2lkdGg9IjAuOCIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWNlbnRlciIgeDE9IiR7ZngoY1swXSAtIHJFICogc2MgLSA4KX0iIHkxPSIke2Z4KGNbMV0pfSIgeDI9IiR7ZngoY1swXSArIHJFICogc2MgKyA4KX0iIHkyPSIke2Z4KGNbMV0pfSIvPmA7CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWNlbnRlciIgeDE9IiR7ZngoY1swXSl9IiB5MT0iJHtmeChjWzFdIC0gckUgKiBzYyAtIDgpfSIgeDI9IiR7ZngoY1swXSl9IiB5Mj0iJHtmeChjWzFdICsgckUgKiBzYyArIDgpfSIvPmA7CiAgLy8gUHJvZmlsIChzY2hlbWF0aXNjaCk6IFR5cCBJSSBtaXQgTGlwcGUgYW0gQXVzc2VucmFuZCwgVHlwIEkgZ2xhdHQKICBjb25zdCBweDAgPSBQLnN4KHByb2ZYMCksIHB4MSA9IFAuc3gocHJvZlgwICsgcHJvZlcpLCBweTAgPSBQLnN5KC1wcm9mSCAvIDIpLCBweTEgPSBQLnN5KHByb2ZIIC8gMik7CiAgcyArPSBgPHJlY3QgY2xhc3M9Ind6LWdhc2tldCIgeD0iJHtmeChweDApfSIgeT0iJHtmeChweTApfSIgd2lkdGg9IiR7ZngocHgxIC0gcHgwKX0iIGhlaWdodD0iJHtmeChweTEgLSBweTApfSIvPmA7CiAgaWYgKGxpcHBlKSB7CiAgICB2YXIgbHcgPSBNYXRoLm1heCg0LCAocHgxIC0gcHgwKSAqIDAuMzIpLCBsaCA9IE1hdGgubWF4KDMsIChweTEgLSBweTApICogMC4xNik7CiAgICBzICs9IGA8cmVjdCBjbGFzcz0id3otZ2Fza2V0IiB4PSIke2Z4KHB4MSAtIGx3IC8gMil9IiB5PSIke2Z4KHB5MCAtIGxoKX0iIHdpZHRoPSIke2Z4KGx3KX0iIGhlaWdodD0iJHtmeChsaCl9Ii8+YDsKICAgIHMgKz0gYDxyZWN0IGNsYXNzPSJ3ei1nYXNrZXQiIHg9IiR7ZngocHgxIC0gbHcgLyAyKX0iIHk9IiR7ZngocHkxKX0iIHdpZHRoPSIke2Z4KGx3KX0iIGhlaWdodD0iJHtmeChsaCl9Ii8+YDsKICB9CiAgcyArPSBgPGxpbmUgY2xhc3M9Ind6LWNlbnRlciIgeDE9IiR7ZngocHgwIC0gOCl9IiB5MT0iJHtmeCgocHkwICsgcHkxKSAvIDIpfSIgeDI9IiR7ZngocHgxICsgOCl9IiB5Mj0iJHtmeCgocHkwICsgcHkxKSAvIDIpfSIvPmA7CiAgcyArPSBgPHRleHQgY2xhc3M9Ind6LW5vdGUiIHg9IiR7ZngoKHB4MCArIHB4MSkgLyAyKX0iIHk9IiR7ZngocHkxICsgKGxpcHBlID8gTWF0aC5tYXgoMywgKHB5MSAtIHB5MCkgKiAwLjE2KSArIDE2IDogMTgpKX0iIHRleHQtYW5jaG9yPSJtaWRkbGUiPlByb2ZpbCAoc2NoZW1hdGlzY2gpIMK3ICR7bGlwcGUgPyAnVHlwIElJIG1pdCBMaXBwZScgOiAnVHlwIEkgb2huZSBMaXBwZSd9PC90ZXh0PmA7CiAgLy8gQmVtYXNzdW5nOiBDIChJbm5lbi3ijIApIGFscyBEdXJjaG1lc3NlciBxdWVyIGR1cmNoIGRpZSBCb2hydW5nLCBFIChBdXNzZW4t4oyAKSB1bnRlbi4KICBzICs9IGRpbUgoaWQsIGNbMF0gLSByQyAqIHNjLCBjWzBdICsgckMgKiBzYywgY1sxXSwgJ0Mg4oyAICcgKyBkZShDKSk7CiAgcyArPSBkaW1IKGlkLCBjWzBdIC0gckUgKiBzYywgY1swXSArIHJFICogc2MsIGNbMV0gKyByRSAqIHNjICsgMzIsICdFIOKMgCAnICsgZGUoRSksIHsgZXh0OiBjWzFdICsgckUgKiBzYyB9KTsKICBjb25zdCBtYXQgPSBHQVNLRVRfTEFCRUxbby5nYXNrZXRNYXRlcmlhbF0gfHwgby5nYXNrZXRNYXRlcmlhbDsKICBzICs9IGZpdHRpbmdCYWRnZSh2dywgJ0RpY2h0dW5nIMK3IFR5cCAnICsgby5nYXNrZXRUeXBlICsgKGxpcHBlID8gJyAobWl0IExpcHBlKScgOiAnIChvaG5lIExpcHBlKScpICsgJyDCtyBFIOKMgCAnICsgZGUoRSkgKyAnIMK3ICcgKyBtYXQpOwogIHJldHVybiB3cmFwU3ZnKGlkLCB2dywgdmgsIG8uZ0NvbCwgcywgbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sICdGcm9udGFuc2ljaHQgKyBQcm9maWwgKERpY2h0dW5nKScpKTsKfQoKLyogLS0gUGxhdHpoYWx0ZXI6IHVuYmVrYW5udGVyIC8gbmljaHQtemVpY2hlbmJhcmVyIHN2Z1R5cGUgLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEZhZWxsdCBudXIgbm9jaCBhbiwgd2VubiBlaW4gYmVsZWd0ZXMgUGZsaWNodG1hc3MgZmVobHQgKHouIEIuIERpY2h0dW5nIG9obmUKICogRS9DLCBLbGFtbWVyIG9obmUgQSwgQmxpbmRkZWNrZWwgb2huZSBEZWNrZWxzdGFlcmtlKSBvZGVyIGVpbiBzdmdUeXBlIGdhbnoKICogdW5iZWthbm50IGlzdC4gTmFjaHBydWVmLUJlZnVuZCBiICgxNi4wNy4yMDI2KTogQmlzIGhpZXJoZXIgZmllbCBkZXIKICogZGVmYXVsdC1ad2VpZyBhdWYgZHJhd0NsYW1wc3R1dHplbiB6dXJ1ZWNrIHVuZCB6ZWlndGUgc3RpbGwgZWluZSBrb21wbGV0dGUKICogQ2xhbXB2ZXJiaW5kdW5nLCBkaWUgZXMgZnVlciBkZW4gVHlwIGdhciBuaWNodCBnaWJ0LiBTdGF0dCBlcmZ1bmRlbmVyCiAqIEdlb21ldHJpZTogZWluIGtsYXJlciAiWmVpY2hudW5nIGZvbGd0Ii1IaW53ZWlzLiBFcyB3aXJkIEJFV1VTU1Qga2VpbgogKiBGaXR0aW5nIGdlemVpY2huZXQuICovCmZ1bmN0aW9uIGRyYXdQbGF0emhhbHRlcihvLCB2dywgdmgpIHsKICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IGN4ID0gdncgLyAyLCBjeSA9IHZoIC8gMjsKICBjb25zdCBidyA9IE1hdGgubWluKDM4MCwgdncgLSA4OCksIGJoID0gMTMyOwogIGxldCBzID0gJyc7CiAgcyArPSBgPHJlY3QgeD0iJHtmeChjeCAtIGJ3IC8gMil9IiB5PSIke2Z4KGN5IC0gYmggLyAyIC0gNil9IiB3aWR0aD0iJHtmeChidyl9IiBoZWlnaHQ9IiR7ZngoYmgpfSIgcng9IjE0IgogICAgICAgICAgZmlsbD0idmFyKC0td3otYm9yZSwjZjRmNmY4KSIgc3Ryb2tlPSJ2YXIoLS13ei1kaW0sIzhhOGY5NikiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSI3IDUiLz5gOwogIHMgKz0gYDxwYXRoIGQ9Ik0ke2Z4KGN4IC0gMjQpfSwke2Z4KGN5IC0gMTApfSBsMTQsLTE0IDEwLDEwIDIwLC0yMiBNJHtmeChjeCAtIDI0KX0sJHtmeChjeSArIDgpfSBoNTgiCiAgICAgICAgICBmaWxsPSJub25lIiBzdHJva2U9InZhcigtLXd6LWVkZ2UsIzFjMWMxYykiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz5gOwogIHMgKz0gYDx0ZXh0IHg9IiR7ZngoY3gpfSIgeT0iJHtmeChjeSArIDM0KX0iIHRleHQtYW5jaG9yPSJtaWRkbGUiCiAgICAgICAgICBmaWxsPSJ2YXIoLS13ei1pbmssIzFjMWMxYykiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI2MDAiCiAgICAgICAgICBmb250LWZhbWlseT0iJ1BsdXMgSmFrYXJ0YSBTYW5zJywnS3VtYmggU2Fucycsc3lzdGVtLXVpLHNhbnMtc2VyaWYiPlplaWNobnVuZyBmb2xndDwvdGV4dD5gOwogIHJldHVybiB3cmFwU3ZnKGlkLCB2dywgdmgsIG8uZ0NvbCwgcywgbGVnZW5kQm94KGlkLCB2dywgdmgsIG8sICdaZWljaG51bmcgZm9sZ3QnKSk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRGlzcGF0Y2ggKi8KZnVuY3Rpb24gcmVuZGVyRml0dGluZyhwYXJhbXMsIG9wdHMpIHsKICBvcHRzID0gb3B0cyB8fCB7fTsKICBjb25zdCB2dyA9IG9wdHMud2lkdGggfHwgNzYwLCB2aCA9IG9wdHMuaGVpZ2h0IHx8IDQ0MDsKICBjb25zdCByZXF1ZXN0ZWRUeXBlID0gcGFyYW1zICYmIHBhcmFtcy50eXBlOwogIGNvbnN0IGludmFsaWRDb25uZWN0ID0gKHJlcXVlc3RlZFR5cGUgPT09ICdjb25uZWN0ZmxhbnNjaCcgJiYgIXZhbGlkQ29ubmVjdGZsYW5zY2gocGFyYW1zKSkgfHwKICAgIChyZXF1ZXN0ZWRUeXBlID09PSAnY29ubmVjdGlubGluZScgJiYgIXZhbGlkQ29ubmVjdGlubGluZShwYXJhbXMpKTsKICBjb25zdCBvID0gbm9ybWFsaXplKHBhcmFtcyk7CiAgaWYgKGludmFsaWRDb25uZWN0KSByZXR1cm4gZHJhd1BsYXR6aGFsdGVyKG8sIHZ3LCB2aCk7CiAgc3dpdGNoIChvLnR5cGUpIHsKICAgIGNhc2UgJ2NsYW1wc3R1dHplbic6IHJldHVybiBkcmF3Q2xhbXBzdHV0emVuKG8sIHZ3LCB2aCwgZmFsc2UpOwogICAgLy8gRWluemVsbmVyIFN0dXR6ZW4gKFRDRC9UQ1MpOiBrZWluIHp3ZWl0ZXIgU3R1dHplbiwga2VpbmUgRGljaHR1bmcsIGtlaW5lIEtsYW1tZXIuCiAgICBjYXNlICdzdHV0emVuJzogICAgICByZXR1cm4gZHJhd0NsYW1wc3R1dHplbihvLCB2dywgdmgsICdzaW5nbGUnKTsKICAgIGNhc2UgJ2JsaW5ka2FwcGUnOiAgIHJldHVybiBkcmF3Q2xhbXBzdHV0emVuKG8sIHZ3LCB2aCwgdHJ1ZSk7CiAgICAvLyBSdW5kZSA3IChXLTA1OSk6IHJlaW5lIEZsYW5zY2gtWmVpY2hudW5nIG9obmUgUm9ocm1hc3NlIChUeXAgQkQpLgogICAgY2FzZSAnYmxpbmRkZWNrZWwnOiAgcmV0dXJuIGRyYXdCbGluZGRlY2tlbChvLCB2dywgdmgpOwogICAgY2FzZSAnYm9nZW45MCc6ICAgICAgcmV0dXJuIGRyYXdCb2dlbihvLCB2dywgdmgsIDkwKTsKICAgIGNhc2UgJ2JvZ2VuNDUnOiAgICAgIHJldHVybiBkcmF3Qm9nZW4obywgdncsIHZoLCA0NSk7CiAgICBjYXNlICd0c3R1ZWNrJzogICAgICByZXR1cm4gZHJhd1RzdHVlY2sobywgdncsIHZoKTsKICAgIGNhc2UgJ3JlZHV6aWVydW5nJzogIHJldHVybiBkcmF3UmVkdXppZXJ1bmcobywgdncsIHZoKTsKICAgIGNhc2UgJ2tsYW1tZXInOiAgICAgIHJldHVybiBkcmF3S2xhbW1lcihvLCB2dywgdmgpOwogICAgY2FzZSAnY29ubmVjdGZsYW5zY2gnOiByZXR1cm4gZHJhd0Nvbm5lY3RmbGFuc2NoKG8sIHZ3LCB2aCk7CiAgICBjYXNlICdjb25uZWN0aW5saW5lJzogIHJldHVybiBkcmF3Q29ubmVjdGlubGluZShvLCB2dywgdmgpOwogICAgLy8gVHlwIEQgJ2RpY2h0dW5nJzogZWNodGUgWmVpY2hudW5nIG1pdCBiZWxlZ3RlbiBFL0MtTWFzc2VuOyBvaG5lIHNpZQogICAgLy8gZmFlbGx0IGRyYXdEaWNodHVuZyBzZWxic3QgYXVmIGRlbiBQbGF0emhhbHRlciAoTklFIGRyYXdDbGFtcHN0dXR6ZW4pLgogICAgY2FzZSAnZGljaHR1bmcnOiAgICAgcmV0dXJuIGRyYXdEaWNodHVuZyhvLCB2dywgdmgpOwogICAgLy8gU2ljaGVyaGVpdHNuZXR6OiBqZWRlciB1bmJla2FubnRlIHN2Z1R5cGUgYmVrb21tdCBkZW4gUGxhdHpoYWx0ZXIgc3RhdHQgc3RpbGwKICAgIC8vIGVpbmUgZmFsc2NoZSBDbGFtcHZlcmJpbmR1bmcgKE5hY2hwcnVlZi1CZWZ1bmQgYikuCiAgICBkZWZhdWx0OiAgICAgICAgICAgICByZXR1cm4gZHJhd1BsYXR6aGFsdGVyKG8sIHZ3LCB2aCk7CiAgfQp9Cgpjb25zdCBBUEkgPSB7IHJlbmRlckZpdHRpbmcsIEZJVFRJTkdfVFlQRVMsIERFRkFVTFRTLCBHQVNLRVRfQ09MT1JTLCBHQVNLRVRfTEFCRUwgfTsKaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IEFQSTsKaWYgKHJvb3QpIHJvb3QuV2Vpc3NGaXR0aW5nU1ZHID0gQVBJOwoKLyogLS0tLS0tLS0tIE5vZGUtU2VsYnN0dGVzdDogYG5vZGUgZHJhdy5qc2Agc2NocmVpYnQgQmVpc3BpZWxlIG5hY2ggLi9xYSAtLS0gKi8KaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiByZXF1aXJlLm1haW4gPT09IG1vZHVsZSkgewogIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKSwgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTsKICBjb25zdCBvdXQgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAncWEnKTsgdHJ5IHsgZnMubWtkaXJTeW5jKG91dCwgeyByZWN1cnNpdmU6IHRydWUgfSk7IH0gY2F0Y2ggKGUpIHt9CiAgY29uc3Qgc2FtcGxlcyA9IFsKICAgIFsnY2xhbXBzdHV0emVuJyx7dHlwZTonY2xhbXBzdHV0emVuJyxkbjoyNSxvZDoyOSx3YWxsOjEuNSxsZW5ndGg6MjEuNSxjbGFtcFNpemU6J0ROMjUnLGZsYW5nZU9kOjUwLjUsZ2Fza2V0TWF0ZXJpYWw6J0VQRE0nLHN1cmZhY2U6J0g0Jyx3ZXJrc3RvZmY6JzEuNDQzNSd9XSwKICAgIFsnYmxpbmRkZWNrZWwnLCB7dHlwZTonYmxpbmRkZWNrZWwnLGZsYW5nZU9kOjUwLjUsbGVuZ3RoOjYuMzUsc3VyZmFjZTonSDQnLHdlcmtzdG9mZjonMS40NDA0J31dLAogICAgWydrbGFtbWVyJywgICAgIHt0eXBlOidrbGFtbWVyJyxmbGFuZ2VPZDo1MC41LGtsYW1tZXJBOjUzLGtsYW1tZXJUeXA6J0tMMScsa2xhbW1lck11dHRlcjonTScsd2Vya3N0b2ZmOicxLjQzMDgnLHN1cmZhY2U6Jyd9XSwKICAgIFsna2xhbW1lci1rbGgnLCB7dHlwZTona2xhbW1lcicsZmxhbmdlT2Q6NjQsa2xhbW1lckE6NjUuNSxrbGFtbWVyVHlwOidLTEgnLGtsYW1tZXJNdXR0ZXI6J1MnLHdlcmtzdG9mZjonMS40MzA4JyxzdXJmYWNlOicnfV0sCiAgICBbJ2RpY2h0dW5nLXQxJywge3R5cGU6J2RpY2h0dW5nJyxnYXNrZXRPZDoyMi4wLGdhc2tldElkOjkuNyxnYXNrZXRUeXBlOidJJyxnYXNrZXRNYXRlcmlhbDonRVBETScsd2Vya3N0b2ZmOicxLjQ0MDQnLHN1cmZhY2U6Jyd9XSwKICAgIFsnZGljaHR1bmctdDInLCB7dHlwZTonZGljaHR1bmcnLGdhc2tldE9kOjUwLjUsZ2Fza2V0SWQ6MjcuNyxnYXNrZXRUeXBlOidJSScsZ2Fza2V0TWF0ZXJpYWw6J1ZNUScsd2Vya3N0b2ZmOicxLjQ0MDQnLHN1cmZhY2U6Jyd9XSwKICAgIFsnYm9nZW45MCcsICAgICB7dHlwZTonYm9nZW45MCcsZG46MjUsb2Q6Mjksd2FsbDoxLjUsbGVuZ3RoOjQwLGJlbmRSYWRpdXM6NTAsc3VyZmFjZTonSDMnfV0sCiAgICBbJ2JvZ2VuNDUnLCAgICAge3R5cGU6J2JvZ2VuNDUnLGRuOjQwLG9kOjQxLHdhbGw6MS41LGxlbmd0aDo0MCxiZW5kUmFkaXVzOjYwLHN1cmZhY2U6J0g0J31dLAogICAgWyd0c3R1ZWNrJywgICAgIHt0eXBlOid0c3R1ZWNrJyxkbjo0MCxvZDo0MSx3YWxsOjEuNSxsZW5ndGg6MTIwLGJyYW5jaE9kOjQxLHN1cmZhY2U6J0g0J31dLAogICAgWyd0c3R1ZWNrLXJlZCcsIHt0eXBlOid0c3R1ZWNrJyxkbjo0MCxvZDo0MSx3YWxsOjEuNSxsZW5ndGg6MTIwLGJyYW5jaE9kOjI5LHN1cmZhY2U6J0g0J31dLAogICAgWydyZWR1emllcnVuZycsIHt0eXBlOidyZWR1emllcnVuZycsZG46NDAsb2Q6NDEsd2FsbDoxLjUsbGVuZ3RoOjYwLG9kMjoyOSxlY2NlbnRyaWM6ZmFsc2Usc3VyZmFjZTonSDQnfV0sCiAgICBbJ3JlZC1leHonLCAgICAge3R5cGU6J3JlZHV6aWVydW5nJyxkbjo1MCxvZDo1Myx3YWxsOjEuNSxsZW5ndGg6NzAsb2QyOjI5LGVjY2VudHJpYzp0cnVlLHN1cmZhY2U6J0gzJ31dCiAgXTsKICBjb25zdCBwYWdlID0gWyc8IWRvY3R5cGUgaHRtbD48bWV0YSBjaGFyc2V0PSJ1dGYtOCI+PHRpdGxlPldlaXNzIFNWRyBRQTwvdGl0bGU+JywKICAgICc8c3R5bGU+Ym9keXtiYWNrZ3JvdW5kOiNmZmY7Zm9udC1mYW1pbHk6c3lzdGVtLXVpO21hcmdpbjowO3BhZGRpbmc6MjBweH0nLAogICAgJy5jYXJke2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjQyMHB4O21hcmdpbjo4cHg7Ym9yZGVyOjFweCBzb2xpZCAjZWVlO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjhweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9JywKICAgICcuY2FyZCBoM3tmb250OjYwMCAxM3B4IHN5c3RlbS11aTtjb2xvcjojMWMxYzFjO21hcmdpbjo0cHggNnB4fXN2Z3t3aWR0aDoxMDAlO2hlaWdodDphdXRvO2JhY2tncm91bmQ6I2ZmZn08L3N0eWxlPiddOwogIHNhbXBsZXMuZm9yRWFjaCgoW25hbWUsIHBdKSA9PiB7CiAgICBjb25zdCBzdmcgPSByZW5kZXJGaXR0aW5nKHApOwogICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ob3V0LCAnZGVtby0nICsgbmFtZSArICcuc3ZnJyksIHN2Zyk7CiAgICBwYWdlLnB1c2goYDxkaXYgY2xhc3M9ImNhcmQiPjxoMz4ke25hbWV9PC9oMz4ke3N2Z308L2Rpdj5gKTsKICAgIGNvbnNvbGUubG9nKCdvayAgJyArIG5hbWUucGFkRW5kKDE0KSArICcgYnl0ZXM9JyArIHN2Zy5sZW5ndGgpOwogIH0pOwogIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dCwgJ2luZGV4Lmh0bWwnKSwgcGFnZS5qb2luKCdcbicpKTsKICBjb25zb2xlLmxvZygnXG5nZXNjaHJpZWJlbiBuYWNoOiAnICsgb3V0KTsKfQoKfSkodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBudWxsKTsKCjwvc2NyaXB0PgogIDxzY3JpcHQ+Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFdlaXNzIEFwcGFyYXRlYmF1IC0gRml0dGluZ3MtS29uZmlndXJhdG9yCiAqIHJlbmRlci5qcyAgLSAgRm90b3JlYWxpc3Rpc2NoIHdpcmtlbmRlIFByb2R1a3QtQW5zaWNodCAoRWRlbHN0YWhsLUxvb2ssIFNWRykKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogWndlaXRlIERhcnN0ZWxsdW5nIG5lYmVuIGRlciBESU4tWmVpY2hudW5nIChkcmF3LmpzKTogZ2xlaWNoZSBwYXJhbWV0cmlzY2hlCiAqIEdlb21ldHJpZSwgYWJlciBDaHJvbS0vU2F0aW4tVmVybGFldWZlLCBHbGFuemthbnRlbiwgd2VpY2hlciBTY2hhdHRlbiAtCiAqIGFuZ2VsZWhudCBhbiBkaWUgUHJvZHVrdHJlbmRlcnMgYXVmIHdlaXNzLWFwcGFyYXRlYmF1LmRlLgogKgogKiAgIFdlaXNzRml0dGluZ1JlbmRlci5yZW5kZXJGaXR0aW5nKHBhcmFtcywgb3B0cykgLT4gU1ZHLVN0cmluZwogKiAgIHBhcmFtcyB3aWUgZHJhdy5qczoge3R5cGUsIGRuLCBvZCwgd2FsbCwgbGVuZ3RoLCBvZDIsIGJyYW5jaE9kLAogKiAgICAgICAgICAgICAgICAgICAgICAgIGJlbmRSYWRpdXMsIGVjY2VudHJpYywgZmxhbmdlT2QsIGdhc2tldE1hdGVyaWFsLAogKiAgICAgICAgICAgICAgICAgICAgICAgIGdhc2tldENvbG9yLCBzdXJmYWNlLCB3ZXJrc3RvZmYsIGNsYW1wU2l6ZX0KICogICBDRjogICAgICAgICB7dHlwZTonY29ubmVjdGZsYW5zY2gnLCBvZDpEZSwgaW5uZXJEaWFtZXRlcjpEaSwKICogICAgICAgICAgICAgICAgZmxhbmdlT2Q6RGYsIGxlbmd0aDpMLCBwcm9kdWN0U2VyaWVzLCBkbnxsYWJlbH0KICogICBDRkk6ICAgICAgICB7dHlwZTonY29ubmVjdGlubGluZScsIG9kOkRlLCBpbm5lckRpYW1ldGVyOkRpLCBsZW5ndGg6TCwKICogICAgICAgICAgICAgICAgYnJhbmNoSGVpZ2h0OlksIGVuZFR5cGU6J0JXJ3wnVEMnLCBlbmREaWFtZXRlcjpBfFRDLAogKiAgICAgICAgICAgICAgICBwcm9kdWN0U2VyaWVzLCBkbnxsYWJlbH0KICoKICogU3RhdGlzY2hlcyBTVkcsIGtlaW5lIEZpbHRlciBhdWYgZml4ZWQvc3RpY2t5IEViZW5lbiAtIFRhYmxldC1zaWNoZXIuCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCid1c2Ugc3RyaWN0JzsKKGZ1bmN0aW9uIChyb290KSB7CgovKiBOdXIgUnVlY2tmYWxsLCBvLmdhc2tldENvbG9yIGdld2lubnQuIFZQIGVyZ2Flbnp0IGFtIDIxLjA4LjIwMjYgbWl0IGRlbSBXZXJ0CiAqIGF1cyBkYXRhLmpzLCBzaWVoZSBLb21tZW50YXIgaW4gZHJhdy5qcy4gKi8KY29uc3QgR0FTS0VUX0NPTE9SUyA9IHsgRVBETTonIzIzMjgyYycsIFZNUTonI2U3ZTJkOCcsIEZLTTonIzJmN2QzYScsIFBURkU6JyNmNGY0ZjQnLCBWUDonI2VmZTlkZicgfTsKbGV0IFVJRCA9IDA7IGNvbnN0IHVpZCA9ICgpID0+ICd3cicgKyAoKytVSUQpOwpjb25zdCBmeCA9IG4gPT4gTWF0aC5yb3VuZChuICogMTAwKSAvIDEwMDsKY29uc3QgbnVtID0gKHYsIGQpID0+ICh0eXBlb2YgdiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodikpID8gdiA6IGQ7CmNvbnN0IGVzYyA9IHMgPT4gU3RyaW5nKHMgPT0gbnVsbCA\\\/ICcnIDogcykucmVwbGFjZSgvWyY8PiInXS9nLCBjID0+ICh7CiAgJyYnOicmYW1wOycsICc8JzonJmx0OycsICc+JzonJmd0OycsICciJzonJnF1b3Q7JywgIiciOicmIzM5OycKfSlbY10pOwpjb25zdCBwb3NpdGl2ZSA9IHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHYpICYmIHYgPiAwOwovKiBUQy1CdW5kLUhvZWhlLiBNdXNzIFpFSUNIRU5HTEVJQ0ggenUgZHJhdy5qcyBzZWluIChkb3J0IFRDX0JVTkQgLyB0Y0J1bmRIb2VoZSksCiAqIHNvbnN0IHplaWdlbiBBbnNpY2h0IHVuZCBaZWljaG51bmcgZnVlciBkaWVzZWxiZSBLb25maWd1cmF0aW9uIHZlcnNjaGllZGVuIGhvaGUKICogQnVuZGUgLSBnZW5hdSBkYXMgd2FyIGFtIDI4LjA3LjIwMjYgZGVyIEZhbGwgKGJpcyA0LDEwIG1tIFVudGVyc2NoaWVkLCB6LiBCLgogKiBETjEwMCBLTDogWmVpY2hudW5nIDgsNDAgZ2VnZW4gQW5zaWNodCAxMiw1MCkuCiAqIEJlenVnIGlzdCBkZXIgRkxBTlNDSC3ijIAsIHdlaWwgZXIgYWxzIGVpbnppZ2VzIEdyb2Vzc2VubWFzcyBmdWVyIEtLLCBLTCB1bmQgZGVuCiAqIGRpY2t3YW5kaWdlbiBUYW5rc3R1dHplbiBpZGVudGlzY2ggaXN0IC0gZ2VuYXUgZGFzIGhhdHRlIEJlcm5kIHZlcmxhbmd0LgogKiBCZWltIEFlbmRlcm4gSU1NRVIgYmVpZGUgRGF0ZWllbiBhbmZhc3Nlbi4gKi8KY29uc3QgVENfQlVORCA9IHsgbWluOiA0LjUsIG1heDogOC40LCByZWZGbGFuc2NoOiA2NCwgbWF4QW50ZWlsTDogMC41IH07CmZ1bmN0aW9uIHRjQnVuZEhvZWhlKGZsYW5nZU9kLCBMKSB7CiAgY29uc3Qgcm9oID0gcG9zaXRpdmUoZmxhbmdlT2QpID8gZmxhbmdlT2QgLyBUQ19CVU5ELnJlZkZsYW5zY2ggKiBUQ19CVU5ELm1heCA6IFRDX0JVTkQubWluOwogIGNvbnN0IGggPSBNYXRoLm1pbihUQ19CVU5ELm1heCwgTWF0aC5tYXgoVENfQlVORC5taW4sIHJvaCkpOwogIHJldHVybiBwb3NpdGl2ZShMKSA\\\/IE1hdGgubWluKGgsIEwgKiBUQ19CVU5ELm1heEFudGVpbEwpIDogaDsKfQpjb25zdCBzZXJpZXNPayA9IHYgPT4gWycxLjQ0MDQnLCcxLjQ0MzUnXS5pbmNsdWRlcyhTdHJpbmcodiB8fCAnJykudHJpbSgpKTsKY29uc3QgaGFzU2l6ZUxhYmVsID0gcCA9PiAhIShwICYmICgodHlwZW9mIHAubGFiZWwgPT09ICdzdHJpbmcnICYmIHAubGFiZWwudHJpbSgpKSB8fCBwLmRuICE9IG51bGwpKTsKZnVuY3Rpb24gdmFsaWRDb25uZWN0ZmxhbnNjaChwKSB7CiAgcmV0dXJuICEhKHAgJiYgcG9zaXRpdmUocC5vZCkgJiYgcG9zaXRpdmUocC5pbm5lckRpYW1ldGVyKSAmJiBwLmlubmVyRGlhbWV0ZXIgPCBwLm9kICYmCiAgICBwb3NpdGl2ZShwLmZsYW5nZU9kKSAmJiBwLmlubmVyRGlhbWV0ZXIgPCBwLmZsYW5nZU9kICYmIHBvc2l0aXZlKHAubGVuZ3RoKSAmJgogICAgc2VyaWVzT2socC5wcm9kdWN0U2VyaWVzKSAmJiBoYXNTaXplTGFiZWwocCkpOwp9CmZ1bmN0aW9uIHZhbGlkQ29ubmVjdGlubGluZShwKSB7CiAgY29uc3QgZW5kVHlwZSA9IFN0cmluZyhwICYmIHAuZW5kVHlwZSB8fCAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7CiAgcmV0dXJuICEhKHAgJiYgcG9zaXRpdmUocC5vZCkgJiYgcG9zaXRpdmUocC5pbm5lckRpYW1ldGVyKSAmJiBwLmlubmVyRGlhbWV0ZXIgPCBwLm9kICYmCiAgICBwb3NpdGl2ZShwLmxlbmd0aCkgJiYgcG9zaXRpdmUocC5icmFuY2hIZWlnaHQpICYmIHBvc2l0aXZlKHAuZW5kRGlhbWV0ZXIpICYmCiAgICBwb3NpdGl2ZShwLnVwcGVyT3V0ZXJEaWFtZXRlcikgJiYgcG9zaXRpdmUocC51cHBlcklubmVyRGlhbWV0ZXIpICYmIHAudXBwZXJJbm5lckRpYW1ldGVyIDwgcC51cHBlck91dGVyRGlhbWV0ZXIgJiYKICAgIFsnQlcnLCdUQyddLmluY2x1ZGVzKGVuZFR5cGUpICYmIHNlcmllc09rKHAucHJvZHVjdFNlcmllcykgJiYgaGFzU2l6ZUxhYmVsKHApKTsKfQpmdW5jdGlvbiBzaXplTGFiZWwobykgewogIGlmICh0eXBlb2Ygby5sYWJlbCA9PT0gJ3N0cmluZycgJiYgby5sYWJlbC50cmltKCkpIHJldHVybiBvLmxhYmVsLnRyaW0oKTsKICBjb25zdCBkbiA9IFN0cmluZyhvLmRuID09IG51bGwgPyAnJyA6IG8uZG4pLnRyaW0oKTsKICBpZiAoIWRuKSByZXR1cm4gJyc7CiAgcmV0dXJuIC9eRE5ccyovaS50ZXN0KGRuKSA\\\/IGRuIDogJ0ROICcgKyBkbjsKfQoKLyogQ2hyb20tUXVlcnNjaG5pdHQgKEhpZ2hsaWdodCBtaXR0aWcpICsgU2F0aW4gKEtsYW1tZXIpICovCmNvbnN0IENIUk9NRSA9IFsKICBbMC4wMCwgJyM0OTU1NWUnXSwgWzAuMDksICcjN2U4Yzk2J10sIFswLjI2LCAnI2Q0ZGNlMiddLCBbMC40MCwgJyNmOWZiZmMnXSwKICBbMC41MCwgJyNmZmZmZmYnXSwgWzAuNjAsICcjZWFlZmYzJ10sIFswLjc0LCAnI2I0YmZjNyddLCBbMC44OCwgJyM3Njg0OGUnXSwgWzEuMDAsICcjM2Y0YjU0J10KXTsKY29uc3QgU0FUSU4gPSBbCiAgWzAuMDAsICcjNWE2NTZlJ10sIFswLjE1LCAnIzhkOTlhMiddLCBbMC4zOCwgJyNjOGQxZDcnXSwgWzAuNTIsICcjZGRlNGU5J10sCiAgWzAuNjYsICcjYWFiNWJkJ10sIFswLjg0LCAnIzdiODc5MSddLCBbMS4wMCwgJyM1MjVkNjYnXQpdOwpjb25zdCBOQU1FID0geyBjbGFtcHN0dXR6ZW46J0NsYW1wLVZlcmJpbmR1bmcnLCBibGluZGthcHBlOidCbGluZGRlY2tlbCcsIGJsaW5kZGVja2VsOidCbGluZGRlY2tlbCcsIGtsYW1tZXI6J0tsYW1tZXInLAogICAgICAgICAgICAgICBib2dlbjkwOidCb2dlbiA5MMKwJywgYm9nZW40NTonQm9nZW4gNDXCsCcsIHRzdHVlY2s6J1QtU3TDvGNrJywgcmVkdXppZXJ1bmc6J1JlZHV6aWVydW5nJywKICAgICAgICAgICAgICAgZGljaHR1bmc6J0RpY2h0dW5nJywgY29ubmVjdGZsYW5zY2g6J0Nvbm5lY3QtRmxhbnNjaCAoQ0YpJywgY29ubmVjdGlubGluZTonQ29ubmVjdC1GbGFuc2NoIElubGluZSAoQ0ZJKScgfTsKCmNvbnN0IHN0b3BzU3ZnID0gKHN0b3BzLCB0MCkgPT4gc3RvcHMubWFwKChbbywgY10pID0+CiAgYDxzdG9wIG9mZnNldD0iJHtmeCgodDAgPT0gbnVsbCA\\\/IG8gOiB0MCArIG8gKiAoMSAtIHQwKSkgKiAxMDApfSUiIHN0b3AtY29sb3I9IiR7Y30iLz5gKS5qb2luKCcnKTsKY29uc3QgbGluR3JhZEFCID0gKGlkLCB4MSwgeTEsIHgyLCB5Miwgc3RvcHMpID0+CiAgYDxsaW5lYXJHcmFkaWVudCBpZD0iJHtpZH0iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iJHtmeCh4MSl9IiB5MT0iJHtmeCh5MSl9IiB4Mj0iJHtmeCh4Mil9IiB5Mj0iJHtmeCh5Mil9Ij4ke3N0b3BzU3ZnKHN0b3BzKX08L2xpbmVhckdyYWRpZW50PmA7CmNvbnN0IHJhZEdyYWQgPSAoaWQsIGN4LCBjeSwgciwgc3RvcHMsIHQwKSA9PgogIGA8cmFkaWFsR3JhZGllbnQgaWQ9IiR7aWR9IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoY3kpfSIgcj0iJHtmeChyKX0iPiR7c3RvcHNTdmcoc3RvcHMsIHQwKX08L3JhZGlhbEdyYWRpZW50PmA7CmNvbnN0IHNoYWRvd0dyYWQgPSBpZCA9PiBgPHJhZGlhbEdyYWRpZW50IGlkPSIke2lkfS1zaCIgY3g9IjAuNSIgY3k9IjAuNSIgcj0iMC41Ij4KICA8c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSJyZ2JhKDI4LDMyLDM2LDAuMjgpIi8+PHN0b3Agb2Zmc2V0PSI3MCUiIHN0b3AtY29sb3I9InJnYmEoMjgsMzIsMzYsMC4xMSkiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9InJnYmEoMjgsMzIsMzYsMCkiLz48L3JhZGlhbEdyYWRpZW50PmA7CmNvbnN0IGJsdXJEZWYgPSAoaWQsIHMpID0+IGA8ZmlsdGVyIGlkPSIke2lkfS1ibCIgeD0iLTQwJSIgeT0iLTQwJSIgd2lkdGg9IjE4MCUiIGhlaWdodD0iMTgwJSI+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iJHtmeChNYXRoLm1heCgwLjYsIHMpKX0iLz48L2ZpbHRlcj5gOwpjb25zdCBFREdFID0gJ3N0cm9rZT0iIzM5NDM0YiIgc3Ryb2tlLW9wYWNpdHk9IjAuNSIgc3Ryb2tlLXdpZHRoPSIxIic7CmNvbnN0IEZPTlQgPSAiZm9udC1mYW1pbHk9XCInUGx1cyBKYWthcnRhIFNhbnMnLCdLdW1iaCBTYW5zJyxzeXN0ZW0tdWksc2Fucy1zZXJpZlwiIjsKCmZ1bmN0aW9uIG5vcm1hbGl6ZShwKSB7CiAgY29uc3QgbyA9IE9iamVjdC5hc3NpZ24oeyB0eXBlOidjbGFtcHN0dXR6ZW4nLCBkbjoyNSwgb2Q6MjksIHdhbGw6MS41LCBsZW5ndGg6NjAsIGNsYW1wU2l6ZTonRE4yNScsCiAgICBiZW5kUmFkaXVzOjUwLCBvZDI6MjAsIGJyYW5jaE9kOm51bGwsIGVjY2VudHJpYzpmYWxzZSwgZmxhbmdlT2Q6bnVsbCwKICAgIGdhc2tldE1hdGVyaWFsOidFUERNJywgZ2Fza2V0Q29sb3I6bnVsbCwgc3VyZmFjZTonSDMnLCB3ZXJrc3RvZmY6JzEuNDQwNCcgfSwgcCB8fCB7fSk7CiAgY29uc3QgY29ubmVjdFR5cGUgPSBwICYmIChwLnR5cGUgPT09ICdjb25uZWN0ZmxhbnNjaCcgfHwgcC50eXBlID09PSAnY29ubmVjdGlubGluZScpOwogIG8ub2QgPSBNYXRoLm1heCg0LCBudW0oby5vZCwgMjkpKTsKICBvLndhbGwgPSBNYXRoLm1pbihvLm9kIC8gMiAtIDAuMiwgTWF0aC5tYXgoMC4zLCBudW0oby53YWxsLCAxLjUpKSk7CiAgLy8gRGVja2Vsc3RhZXJrZSBkZXMgQmxpbmRkZWNrZWxzIGxpZWd0IGJlaSA0LDc1LTE0IG1tIC0gZGllIDgtbW0tVW50ZXJncmVuemUKICAvLyBkYXJmIHNpZSBuaWNodCB2ZXJmYWVsc2NoZW4uIERlciBXZXJ0IGRhcmYgTlVSIGF1cyBkZW0gQXVmcnVmIGtvbW1lbjsKICAvLyBmZWhsdCBlciAtPiBudWxsIC0+IFBsYXR6aGFsdGVyIChmYWlsLWNsb3NlZCkuCiAgby5sZW5ndGggPSAocCAmJiBwLnR5cGUgPT09ICdibGluZGRlY2tlbCcpCiAgICA\\\/IChpc0Zpbml0ZShwLmxlbmd0aCkgPyBOdW1iZXIocC5sZW5ndGgpIDogbnVsbCkKICAgIDogTWF0aC5tYXgoOCwgbnVtKG8ubGVuZ3RoLCA2MCkpOwogIC8vIG9kMiBudXIgYWxzIGVjaHRlcyBNYXNzIGZ1ZWhyZW4sIHdlbm4gZGVyIEF1ZnJ1ZmVyIHdpcmtsaWNoIGVpbmVuIHp3ZWl0ZW4gw5ggZ2VsaWVmZXJ0CiAgLy8gaGF0IChOYWNocHJ1ZWYtQmVmdW5kIGEpLiBPaG5lIGVjaHRlbiB6d2VpdGVuIMOYOiBuZXV0cmFsZSBHZW9tZXRyaWUsIEJlc2NocmlmdHVuZyAiZm9sZ3QiLgogIG8ub2QyUHJvdiA9ICEhKHAgJiYgaXNGaW5pdGUocC5vZDIpKTsKICBvLm9kMiA9IG8ub2QyUHJvdiA\\\/IE1hdGgubWF4KDQsIE1hdGgubWluKG8ub2QgLSAwLjUsIHAub2QyKSkgOiBNYXRoLm1heCg0LCBNYXRoLm1pbihvLm9kIC0gMC41LCBvLm9kICogMC42NikpOwogIG8uYnJhbmNoT2QgPSBudW0oby5icmFuY2hPZCwgby5vZCk7CiAgby5icmFuY2hMZW5ndGggPSBwICYmIHBvc2l0aXZlKHAuYnJhbmNoTGVuZ3RoKSA\\\/IE51bWJlcihwLmJyYW5jaExlbmd0aCkgOiBudWxsOwogIG8ud2FsbDIgPSBwICYmIHBvc2l0aXZlKHAud2FsbDIpID8gTnVtYmVyKHAud2FsbDIpIDogby53YWxsOwogIC8vIFIzLTMvUjMtNDogQmF1Zm9ybSBkZXMgVC1TdMO8Y2tzLCBleGFrdCB3aWUgaW4gZHJhdy5qcyBub3JtYWxpc2llcnQgLSBudXIgJ1QnCiAgLy8gKEFiZ2FuZyBnbGVpY2ggbGFuZykgb2RlciAnVEsnIChBYmdhbmcga3VyeiksIGFsbGVzIGFuZGVyZSB3aXJkIHp1ICdUJy4KICAvLyBEaWUgQW5zaWNodCBiZXNjaHJpZnRldCBkYW1pdCBudXI7IGRpZSBHZW9tZXRyaWUgaMOkbmd0IHdpZSBpbiBkZXIgWmVpY2hudW5nCiAgLy8gYWxsZWluIGFtIGJlbGVndGVuIEFiZ2FuZ3NtYcOfLCBuaWNodCBhbiBkZXIgQmF1Zm9ybS4KICBvLnRmb3JtID0gKG8udGZvcm0gPT09ICdUSycpID8gJ1RLJyA6ICdUJzsKICBvLmJlbmRSYWRpdXMgPSBNYXRoLm1heChvLm9kLCBudW0oby5iZW5kUmFkaXVzLCBvLm9kICogMS41KSk7CiAgby5mbGFuZ2VPZCA9IG51bShvLmZsYW5nZU9kLCBNYXRoLm1heChvLm9kICsgMjIsIG8ub2QgKiAxLjI1ICsgNikpOwogIG8uaW5uZXJEaWFtZXRlciA9IG51bShvLmlubmVyRGlhbWV0ZXIsIG51bGwpOwogIG8uYnJhbmNoSGVpZ2h0ID0gbnVtKG8uYnJhbmNoSGVpZ2h0LCBudWxsKTsKICBvLmVuZERpYW1ldGVyID0gbnVtKG8uZW5kRGlhbWV0ZXIsIG51bGwpOwogIG8udXBwZXJPdXRlckRpYW1ldGVyID0gbnVtKG8udXBwZXJPdXRlckRpYW1ldGVyLCBudWxsKTsKICBvLnVwcGVySW5uZXJEaWFtZXRlciA9IG51bShvLnVwcGVySW5uZXJEaWFtZXRlciwgbnVsbCk7CiAgby5lbmRUeXBlID0gU3RyaW5nKG8uZW5kVHlwZSB8fCAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7CiAgby5wcm9kdWN0U2VyaWVzID0gU3RyaW5nKG8ucHJvZHVjdFNlcmllcyB8fCAnJykudHJpbSgpLnRvVXBwZXJDYXNlKCk7CiAgby5sYWJlbCA9IHR5cGVvZiBvLmxhYmVsID09PSAnc3RyaW5nJyA\\\/IG8ubGFiZWwudHJpbSgpIDogJyc7CiAgLy8gUnVuZGUgNyAoVy0wNTkpOiBiZWxlZ3RlIFp1c2F0em1hc3NlIGZ1ZXIgS2xhbW1lciAvIEJsaW5kZGVja2VsIC8gRGljaHR1bmcuCiAgLy8gRXMgZ2lsdCBudXIsIHdhcyBkZXIgQXVmcnVmZXIgbGllZmVydCAtIG9obmUgZGllc2UgV2VydGUgYmxlaWJ0IGRlciBQbGF0emhhbHRlci4KICBvLmtsYW1tZXJBID0gbnVtKG8ua2xhbW1lckEsIG51bGwpOwogIG8ua2xhbW1lclR5cCA9IFsnS0wxJywnS0xMSScsJ0tMSCddLmluZGV4T2YoU3RyaW5nKG8ua2xhbW1lclR5cCB8fCAnJykudG9VcHBlckNhc2UoKSkgPj0gMAogICAgPyBTdHJpbmcoby5rbGFtbWVyVHlwKS50b1VwcGVyQ2FzZSgpIDogJ0tMMSc7CiAgby5rbGFtbWVyTXV0dGVyID0gU3RyaW5nKG8ua2xhbW1lck11dHRlciB8fCAnJykudG9VcHBlckNhc2UoKSA9PT0gJ1MnID8gJ1MnIDogJ00nOwogIG8uZ2Fza2V0T2QgPSBudW0oby5nYXNrZXRPZCwgbnVsbCk7CiAgby5nYXNrZXRJZCA9IG51bShvLmdhc2tldElkLCBudWxsKTsKICBvLmdhc2tldFR5cGUgPSBTdHJpbmcoby5nYXNrZXRUeXBlIHx8ICcnKS50b1VwcGVyQ2FzZSgpID09PSAnSScgPyAnSScgOiAnSUknOwogIGlmIChjb25uZWN0VHlwZSkgewogICAgby53ZXJrc3RvZmYgPSB0eXBlb2YgcC53ZXJrc3RvZmYgPT09ICdzdHJpbmcnID8gcC53ZXJrc3RvZmYudHJpbSgpIDogJyc7CiAgICBvLnN1cmZhY2UgPSB0eXBlb2YgcC5zdXJmYWNlID09PSAnc3RyaW5nJyA\\\/IHAuc3VyZmFjZS50cmltKCkgOiAnJzsKICB9CiAgby5vZFIgPSBvLm9kIC8gMjsgby5pbm5SID0gby5vZCAvIDIgLSBvLndhbGw7CiAgby5nQ29sID0gby5nYXNrZXRDb2xvciB8fCBHQVNLRVRfQ09MT1JTW28uZ2Fza2V0TWF0ZXJpYWxdIHx8IEdBU0tFVF9DT0xPUlMuRVBETTsKICByZXR1cm4gbzsKfQoKZnVuY3Rpb24gZml0KG1pblgsIG1heFgsIG1pblksIG1heFksIHZ3LCB2aCwgcGFkKSB7CiAgY29uc3QgcyA9IE1hdGgubWluKCh2dyAtIHBhZCAqIDIpIC8gKG1heFggLSBtaW5YKSwgKHZoIC0gcGFkICogMikgLyAobWF4WSAtIG1pblkpKTsKICBjb25zdCBveCA9IHBhZCAtIG1pblggKiBzICsgKHZ3IC0gcGFkICogMiAtIChtYXhYIC0gbWluWCkgKiBzKSAvIDI7CiAgY29uc3Qgb3kgPSBwYWQgLSBtaW5ZICogcyArICh2aCAtIHBhZCAqIDIgLSAobWF4WSAtIG1pblkpICogcykgLyAyOwogIHJldHVybiB7IHMsIFg6IHggPT4gb3ggKyB4ICogcywgWTogeSA9PiBveSArIHkgKiBzIH07Cn0KCmZ1bmN0aW9uIGJhZGdlKHZ3LCBsYWJlbCkgewogIGNvbnN0IHcgPSBNYXRoLm1pbih2dyAtIDI4LCBsYWJlbC5sZW5ndGggKiA2LjYgKyAyNik7CiAgY29uc3QgZml0dGVkID0gbGFiZWwubGVuZ3RoICogNi42ICsgMjYgPiB3OwogIHJldHVybiBgPHJlY3QgeD0iJHtmeCh2dyAvIDIgLSB3IC8gMil9IiB5PSIxNCIgd2lkdGg9IiR7Zngodyl9IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiNlZWYxZjQiLz4KICA8dGV4dCB4PSIke2Z4KHZ3IC8gMil9IiB5PSIyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgJHtGT05UfSBmb250LXNpemU9IjExIiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMWMxYzFjIiR7Zml0dGVkID8gYCB0ZXh0TGVuZ3RoPSIke2Z4KHcgLSAxOCl9IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiYCA6ICcnfT4ke2VzYyhsYWJlbCl9PC90ZXh0PmA7Cn0KLyogUmEtWnVzYXR6IC0gaWRlbnRpc2NoIHp1IGRyYXcuanM6IG51ciBiZXN0YWV0aWd0ZSBXZXJ0ZSBhdXMgZGF0YS5qcywgc29uc3QgbmljaHRzLgogKiBEaWUgYWx0ZSBoYXJ0a29kaWVydGUgS2V0dGUgaGF0IGplZGVyIE9iZXJmbGFlY2hlIGF1c3NlciBIMS9IMyBwYXVzY2hhbCAiKFJhPDAsNCkiCiAqIGFuZ2VoYWVuZ3QgLSBhbHNvIGF1Y2ggamVkZXIga3VlbmZ0aWdlbiBvaG5lIGJlc3RhZXRpZ3RlbiBXZXJ0LiAqLwpmdW5jdGlvbiByYVN1ZmZpeChzdXJmYWNlKSB7CiAgY29uc3QgbGlzdCA9IHJvb3QgJiYgcm9vdC5XRUlTU19EQVRBICYmIHJvb3QuV0VJU1NfREFUQS5vYmVyZmxhZWNoZW47CiAgaWYgKCFsaXN0KSByZXR1cm4gJyc7CiAgY29uc3QgbyA9IGxpc3QuZmluZCh4ID0+IHguaWQgPT09IHN1cmZhY2UpOwogIGlmICghbyB8fCBvLnJhSW5uZW4gPT0gbnVsbCkgcmV0dXJuICcnOwogIHJldHVybiAnIChSYSZsdDsnICsgU3RyaW5nKG8ucmFJbm5lbikucmVwbGFjZSgnLicsICcsJykgKyAnKSc7Cn0KZnVuY3Rpb24gbGVnZW5kKHZoLCBvKSB7CiAgY29uc3QgaXRlbXMgPSBbWydBbnNpY2h0JywgJ1Byb2R1a3RkYXJzdGVsbHVuZyddLCBbJ1dlcmtzdG9mZicsIG8ud2Vya3N0b2ZmXSwKICAgIFsnT2JlcmZsw6RjaGUnLCBvLnN1cmZhY2UgKyByYVN1ZmZpeChvLnN1cmZhY2UpXV0uZmlsdGVyKGl0ID0+IGl0WzFdKTsKICBjb25zdCB5MCA9IHZoIC0gMTQgLSBpdGVtcy5sZW5ndGggKiAxNTsgbGV0IHJvd3MgPSAnJzsKICBpdGVtcy5mb3JFYWNoKChpdCwgaSkgPT4gewogICAgcm93cyArPSBgPHRleHQgeD0iMTQiIHk9IiR7eTAgKyAxMiArIGkgKiAxNX0iICR7Rk9OVH0gZm9udC1zaXplPSIxMSI+CiAgICAgIDx0c3BhbiBmaWxsPSIjOTk5Ij4ke2l0WzBdfTo8L3RzcGFuPjx0c3BhbiBkeD0iNCIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzFjMWMxYyI+JHtpdFsxXX08L3RzcGFuPjwvdGV4dD5gOwogIH0pOwogIHJldHVybiBgPGcgb3BhY2l0eT0iMC45NSI+JHtyb3dzfTwvZz5gOwp9CmNvbnN0IHN2Z1dyYXAgPSAodncsIHZoLCBkZWZzLCBib2R5LCBiZGcsIGxnZCkgPT4KICBgPHN2ZyB2aWV3Qm94PSIwIDAgJHt2d30gJHt2aH0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcm9sZT0iaW1nIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0Ij4KPGRlZnM+JHtkZWZzfTwvZGVmcz48Zz4ke2JvZHl9PC9nPiR7YmRnfSR7bGdkfTwvc3ZnPmA7CgovKiBGbHVlZ2VsbXV0dGVyIChCb2x6ZW4gKyAyIEZsdWVnZWwgKyBIdWIpLCBHcm9lc3NlIH4gdSAoRWluaGVpdCBweCkgKi8KZnVuY3Rpb24gd2luZ051dChpZGMsIGN4LCB0b3BZLCB1KSB7CiAgbGV0IGIgPSBgPHJlY3QgeD0iJHtmeChjeCAtIHUgKiAwLjQpfSIgeT0iJHtmeCh0b3BZIC0gdSAqIDMpfSIgd2lkdGg9IiR7ZngodSAqIDAuOCl9IiBoZWlnaHQ9IiR7ZngodSAqIDMpfSIgcng9IiR7ZngodSAqIDAuMyl9IiBmaWxsPSJ1cmwoIyR7aWRjfSkiICR7RURHRX0vPmA7CiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMzsgaSsrKSBiICs9IGA8bGluZSB4MT0iJHtmeChjeCAtIHUgKiAwLjQpfSIgeTE9IiR7ZngodG9wWSAtIGkgKiB1ICogMC41NSl9IiB4Mj0iJHtmeChjeCArIHUgKiAwLjQpfSIgeTI9IiR7ZngodG9wWSAtIGkgKiB1ICogMC41NSl9IiBzdHJva2U9IiM1YTY1NmUiIHN0cm9rZS13aWR0aD0iMC44IiBzdHJva2Utb3BhY2l0eT0iMC43Ii8+YDsKICBjb25zdCBueSA9IHRvcFkgLSB1ICogMi42OwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KGN4IC0gdSAqIDEuNTUpfSIgY3k9IiR7ZngobnkpfSIgcng9IiR7ZngodSAqIDEuNSl9IiByeT0iJHtmeCh1ICogMC43KX0iIHRyYW5zZm9ybT0icm90YXRlKC0yNSAke2Z4KGN4IC0gdSAqIDEuNTUpfSAke2Z4KG55KX0pIiBmaWxsPSJ1cmwoIyR7aWRjfSkiICR7RURHRX0vPmA7CiAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoY3ggKyB1ICogMS41NSl9IiBjeT0iJHtmeChueSl9IiByeD0iJHtmeCh1ICogMS41KX0iIHJ5PSIke2Z4KHUgKiAwLjcpfSIgdHJhbnNmb3JtPSJyb3RhdGUoMjUgJHtmeChjeCArIHUgKiAxLjU1KX0gJHtmeChueSl9KSIgZmlsbD0idXJsKCMke2lkY30pIiAke0VER0V9Lz5gOwogIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngobnkpfSIgcj0iJHtmeCh1ICogMC42OCl9IiBmaWxsPSIjZDZkZGUyIiAke0VER0V9Lz5gOwogIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3ggLSB1ICogMC4yKX0iIGN5PSIke2Z4KG55IC0gdSAqIDAuMil9IiByPSIke2Z4KHUgKiAwLjIyKX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuOCIvPmA7CiAgcmV0dXJuIGI7Cn0KCi8qIC0tIDEpIENsYW1wLVZlcmJpbmR1bmcgKEFzc2VtYmx5KSAvIEJsaW5kZGVja2VsIC8gZWluemVsbmVyIFN0dXR6ZW4gLS0tLS0tLQogKiBtb2RlOiBmYWxzZXwnYXNzZW1ibHknIC0+IGtvbXBsZXR0ZSBWZXJiaW5kdW5nIMK3IHRydWV8J2Nsb3NlZCcgLT4gQmxpbmRkZWNrZWwKICogICAgICAgJ3NpbmdsZScgICAgICAgICAtPiBFSU4gU3R1dHplbiAoVENEL1RDUywgQmVybmQgMTYuMDcuMjAyNiBQa3QuIDkuMi85LjMpOgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlaW4gendlaXRlcyBSb2hyLCBrZWluZSBEaWNodHVuZywga2VpbmUgS2xhbW1lci4KICogQWx0ZSBCb29sZWFuLUF1ZnJ1ZmVyIGJsZWliZW4gZ3VlbHRpZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpmdW5jdGlvbiByQ2xhbXAobywgdncsIHZoLCBtb2RlKSB7CiAgY29uc3QgY2xvc2VkID0gbW9kZSA9PT0gdHJ1ZSB8fCBtb2RlID09PSAnY2xvc2VkJzsKICBjb25zdCBzaW5nbGUgPSBtb2RlID09PSAnc2luZ2xlJzsKICBjb25zdCBlaW56ZWxuID0gY2xvc2VkIHx8IHNpbmdsZTsgICAvLyBiZWlkZSB6ZWlnZW4gbnVyIGRlbiBsaW5rZW4gU3R1dHplbgogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgUiA9IG8ub2RSLCBmUiA9IG8uZmxhbmdlT2QgLyAyOwogIC8qIFRDLUJ1bmQ6IEVJTkUgSG9laGUgamUgR3JvZXNzZSwgaWRlbnRpc2NoIGZ1ZXIgS0ssIEtMIHVuZCBkZW4gZGlja3dhbmRpZ2VuCiAgICogVGFua3N0dXR6ZW4gKEJlcm5kIDI3LjA3LjIwMjYsIFdvcmQtQWJzY2huaXR0IDMpLiBSZWdlbCB1bmQgSGVybGVpdHVuZyBzdGVoZW4KICAgKiBiZWkgVENfQlVORCAvIHRjQnVuZEhvZWhlIG9iZW4sIHdvcnRnbGVpY2ggenUgZHJhdy5qcy4KICAgKiBGcnVlaGVyIGhpbmcgZGVyIEJ1bmQgaGllciBhbSBSb2hyLeKMgCBVTkQgYW4gZGVyIFN0dXR6ZW5sYWVuZ2UgLSBkYWR1cmNoIHdhciBlcgogICAqIGplIEdyb2Vzc2UgZnVlciBLSywgS0wgdW5kIGRpY2t3YW5kaWcgdmVyc2NoaWVkZW4gaG9jaCwgdW5kIGRpZSBBbnNpY2h0IHdpZGVyc3ByYWNoCiAgICogZGVyIFplaWNobnVuZy4gQXVmdGVpbHVuZyAyOjEgaW4gQnVuZGhvZWhlIHVuZCBGYXNlIHdpZSBpbiBkcmF3LmpzLgogICAqIEJlenVnc2xhZW5nZSBpc3QgYmV3dXNzdCBvLmxlbmd0aCAoZGFzIGJlbGVndGUgS0svS0wvaC1NYXNzKSwgTklDSFQgZGllIGZ1ZXIgZGllCiAgICogQmlsZHdpcmt1bmcgZ2VzdHJlY2t0ZSBSb2hybGFlbmdlIHRMIC0gc29uc3QgbGllZmUgZGllIERlY2tlbHVuZyBpbnMgTGVlcmUuCiAgICogUmVpbiBzY2hlbWF0aXNjaCwgdHJhZWd0IGluIGRlciBBbnNpY2h0IGtlaW5lIE1hc3N6YWhsLiAqLwogIGNvbnN0IGJ1bmRIID0gdGNCdW5kSG9laGUoby5mbGFuZ2VPZCwgby5sZW5ndGgpOwogIGNvbnN0IHRGbCA9IGJ1bmRIICogMiAvIDM7CiAgY29uc3QgY2ggPSBidW5kSCAvIDM7CiAgY29uc3QgZ1QgPSBNYXRoLm1heCgyLjQsIG8ub2QgKiAwLjEyKTsKICBjb25zdCBjbGFtcFQgPSBNYXRoLm1heCg0LjUsIG8ub2QgKiAwLjIpOwogIGNvbnN0IHRMID0gTWF0aC5tYXgoby5sZW5ndGgsIG8ub2QgKiAwLjkpOwogIC8vICdzaW5nbGUnOiBEZXIgU3R1dHplbiBlbmRldCBhbiBkZXIgRmxhbnNjaHN0aXJuICh4ZikgLSBrZWluIERlY2tlbGF1ZnNjaGxhZyB3aWUgYmVpbQogIC8vIEJsaW5kZGVja2VsLCBrZWluIHp3ZWl0ZXIgU2NoZW5rZWwgd2llIGJlaSBkZXIgVmVyYmluZHVuZy4KICBjb25zdCB4MCA9IDAsIHhiID0gdEwsIHhmID0geGIgKyB0RmwgKyBjaCwgeGcgPSB4ZiArIGdULCB4YjIgPSB4ZyArIHRGbCArIGNoLAogICAgICAgIHhFbmQgPSBjbG9zZWQgPyB4ZiArIHRGbCAqIDAuOSA6IHNpbmdsZSA\\\/IHhmIDogeGIyICsgdEw7CiAgY29uc3QgbnV0VSA9IE1hdGgubWF4KDMuMiwgY2xhbXBUICogMC42Mik7CiAgY29uc3QgbWluWSA9IC0oZlIgKyBjbGFtcFQpIC0gbnV0VSAqIDQuNCwgbWF4WSA9IGZSICsgY2xhbXBUICsgMTQ7CiAgY29uc3QgRiA9IGZpdCgtNCwgeEVuZCArIDQsIG1pblksIG1heFksIHZ3LCB2aCwgNDQpOwogIGNvbnN0IHsgcywgWCwgWSB9ID0gRjsKCiAgY29uc3QgZGVmcyA9CiAgICBsaW5HcmFkQUIoaWQgKyAndHUnLCAwLCBZKC1SKSwgMCwgWShSKSwgQ0hST01FKSArCiAgICBsaW5HcmFkQUIoaWQgKyAnZmwnLCAwLCBZKC1mUiksIDAsIFkoZlIpLCBDSFJPTUUpICsKICAgIGxpbkdyYWRBQihpZCArICdjbCcsIDAsIFkoLShmUiArIGNsYW1wVCkpLCAwLCBZKGZSICsgY2xhbXBUKSwgU0FUSU4pICsKICAgIHNoYWRvd0dyYWQoaWQpICsgYmx1ckRlZihpZCwgUiAqIHMgKiAwLjEpOwoKICBsZXQgYiA9ICcnOwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KFgoeEVuZCAvIDIpKX0iIGN5PSIke2Z4KFkoZlIgKyBjbGFtcFQpICsgMTIpfSIgcng9IiR7ZngoeEVuZCAqIHMgKiAwLjU1KX0iIHJ5PSIke2Z4KE1hdGgubWF4KDgsIFIgKiBzICogMC41KSl9IiBmaWxsPSJ1cmwoIyR7aWR9LXNoKSIvPmA7CiAgLy8gUm9ociBsaW5rcyAoKyByZWNodHMgd2VubiBWZXJiaW5kdW5nKQogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCh4MCkpfSIgeT0iJHtmeChZKC1SKSl9IiB3aWR0aD0iJHtmeCgoeGIgKyBjaCkgKiBzKX0iIGhlaWdodD0iJHtmeCgyICogUiAqIHMpfSIgZmlsbD0idXJsKCMke2lkfXR1KSIgJHtFREdFfS8+YDsKICBpZiAoIWVpbnplbG4pIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCh4YjIgLSBjaCkpfSIgeT0iJHtmeChZKC1SKSl9IiB3aWR0aD0iJHtmeCgoeEVuZCAtIHhiMiArIGNoKSAqIHMpfSIgaGVpZ2h0PSIke2Z4KDIgKiBSICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9dHUpIiAke0VER0V9Lz5gOwogIC8vIEZsYW5zY2gtU2NodWx0ZXJuCiAgY29uc3Qgc2hYMCA9IHhiIC0gMC41LCBzaFgxID0gZWluemVsbiA\\\/IHhFbmQgOiB4YjIgKyAwLjU7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKHNoWDApKX0iIHk9IiR7ZngoWSgtZlIpKX0iIHdpZHRoPSIke2Z4KChzaFgxIC0gc2hYMCkgKiBzKX0iIGhlaWdodD0iJHtmeCgyICogZlIgKiBzKX0iIHJ4PSIke2Z4KGNoICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9ZmwpIiAke0VER0V9Lz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChzaFgwKSAtIDIuNSl9IiB5PSIke2Z4KFkoLVIpKX0iIHdpZHRoPSIzIiBoZWlnaHQ9IiR7ZngoMiAqIFIgKiBzKX0iIGZpbGw9IiMwMDAiIG9wYWNpdHk9IjAuMTYiLz5gOwogIGlmICghZWluemVsbikgYiArPSBgPHJlY3QgeD0iJHtmeChYKHNoWDEpIC0gMC41KX0iIHk9IiR7ZngoWSgtUikpfSIgd2lkdGg9IjMiIGhlaWdodD0iJHtmeCgyICogUiAqIHMpfSIgZmlsbD0iIzAwMCIgb3BhY2l0eT0iMC4xNiIvPmA7CgogIGlmIChjbG9zZWQpIHsKICAgIC8vIEJsaW5kZGVja2VsOiBTdGlybmZsYWVjaGUgbWl0IGhlbGxlciBLYW50ZQogICAgYiArPSBgPHJlY3QgeD0iJHtmeChYKHhFbmQpIC0gMyl9IiB5PSIke2Z4KFkoLWZSKSArIDEpfSIgd2lkdGg9IjMuNSIgaGVpZ2h0PSIke2Z4KDIgKiBmUiAqIHMgLSAyKX0iIHJ4PSIxLjYiIGZpbGw9IiNlZWYyZjUiIG9wYWNpdHk9IjAuOSIvPmA7CiAgfSBlbHNlIGlmICghc2luZ2xlKSB7CiAgICAvLyBLbGFtbWVyLUJhbmQgKyBTaWNrZSAoaW4gRGljaHR1bmdzZmFyYmUgYW5nZWRldXRldCkgKyBHbGFuei4KICAgIC8vIEJlaW0gZWluemVsbmVuIFN0dXR6ZW4gKCdzaW5nbGUnKSBiZXd1c3N0IE5JQ0hUOiBLbGFtbWVyIHVuZCBEaWNodHVuZyBzaW5kIGVpZ2VuZQogICAgLy8gQXJ0aWtlbCB1bmQgZ2Vob2VyZW4gbmljaHQgaW5zIEJpbGQgZWluZXMgZWluemVsbmVuIFN0dXR6ZW5zIChCZXJuZCwgUGt0LiA5LjIvOS4zKS4KICAgIGNvbnN0IGJ4MCA9IHhiICsgY2gsIGJ4MSA9IHhiMiAtIGNoLCBidyA9IChieDEgLSBieDApICogcywgYmggPSAyICogKGZSICsgY2xhbXBUKSAqIHM7CiAgICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoYngwKSl9IiB5PSIke2Z4KFkoLShmUiArIGNsYW1wVCkpKX0iIHdpZHRoPSIke2Z4KGJ3KX0iIGhlaWdodD0iJHtmeChiaCl9IiByeD0iJHtmeChjbGFtcFQgKiBzICogMC45KX0iIGZpbGw9InVybCgjJHtpZH1jbCkiICR7RURHRX0vPmA7CiAgICBiICs9IGA8bGluZSB4MT0iJHtmeChYKChieDAgKyBieDEpIC8gMikpfSIgeTE9IiR7ZngoWSgtKGZSICsgY2xhbXBUICogMC41KSkpfSIgeDI9IiR7ZngoWCgoYngwICsgYngxKSAvIDIpKX0iIHkyPSIke2Z4KFkoZlIgKyBjbGFtcFQgKiAwLjUpKX0iIHN0cm9rZT0iJHtvLmdDb2x9IiBzdHJva2Utb3BhY2l0eT0iMC43NSIgc3Ryb2tlLXdpZHRoPSIyIi8+YDsKICAgIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChieDApICsgMil9IiB5PSIke2Z4KFkoLShmUiArIGNsYW1wVCAqIDAuMzUpKSl9IiB3aWR0aD0iJHtmeChidyAtIDQpfSIgaGVpZ2h0PSIke2Z4KGNsYW1wVCAqIDAuNiAqIHMpfSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iMC4zOCIgcng9IjMiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogICAgYiArPSBgPHJlY3QgeD0iJHtmeChYKGJ4MCkgKyAyKX0iIHk9IiR7ZngoWShmUiAtIGNsYW1wVCAqIDAuNCkpfSIgd2lkdGg9IiR7ZngoYncgLSA0KX0iIGhlaWdodD0iJHtmeChjbGFtcFQgKiAwLjUgKiBzKX0iIGZpbGw9IiMzODQyNGEiIG9wYWNpdHk9IjAuMzIiIHJ4PSIzIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICAgIGIgKz0gd2luZ051dChpZCArICdjbCcsIFgoKGJ4MCArIGJ4MSkgLyAyKSwgWSgtKGZSICsgY2xhbXBUKSksIG51dFUgKiBzICogMC41NSArIDQpOwogIH0KICAvLyBHbGFuei1TdHJlaWZlbiBSb2hyZSArIFNjaHdlaXNzZW5kZW4KICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoeDApICsgMil9IiB5PSIke2Z4KFkoLVIgKiAwLjI1KSl9IiB3aWR0aD0iJHtmeCgoeGIgKyBjaCkgKiBzIC0gNCl9IiBoZWlnaHQ9IiR7ZngoTWF0aC5tYXgoMywgUiAqIDAuMjggKiBzKSl9IiBmaWxsPSIjZmZmIiBvcGFjaXR5PSIwLjYiIHJ4PSIzIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICBpZiAoIWVpbnplbG4pIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCh4YjIgLSBjaCkgKyAyKX0iIHk9IiR7ZngoWSgtUiAqIDAuMjUpKX0iIHdpZHRoPSIke2Z4KCh4RW5kIC0geGIyICsgY2gpICogcyAtIDQpfSIgaGVpZ2h0PSIke2Z4KE1hdGgubWF4KDMsIFIgKiAwLjI4ICogcykpfSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iMC42IiByeD0iMyIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKHgwKSAtIDIpfSIgeT0iJHtmeChZKC1SKSl9IiB3aWR0aD0iMyIgaGVpZ2h0PSIke2Z4KDIgKiBSICogcyl9IiBmaWxsPSIjMmYzOTQwIiBvcGFjaXR5PSIwLjg1IiByeD0iMSIvPmA7CiAgaWYgKCFlaW56ZWxuKSBiICs9IGA8cmVjdCB4PSIke2Z4KFgoeEVuZCkgLSAxKX0iIHk9IiR7ZngoWSgtUikpfSIgd2lkdGg9IjMiIGhlaWdodD0iJHtmeCgyICogUiAqIHMpfSIgZmlsbD0iIzJmMzk0MCIgb3BhY2l0eT0iMC44NSIgcng9IjEiLz5gOwoKICBjb25zdCBiZGcgPSBiYWRnZSh2dywgKGNsb3NlZCA\\\/ICdCbGluZGRlY2tlbCcgOiBzaW5nbGUgPyAnU3R1dHplbicgOiAnQ2xhbXAtVmVyYmluZHVuZycpICsgJyDCtyBETiAnICsgby5kbiArICcgwrcgRElOIDMyNjc2Jyk7CiAgcmV0dXJuIHN2Z1dyYXAodncsIHZoLCBkZWZzLCBiLCBiZGcsIGxlZ2VuZCh2aCwgbykpOwp9CgovKiAtLSAyKSBLbGFtbWVyIChGcm9udGFuc2ljaHQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogUnVuZGUgNyAoVy0wNTkpOiBudXR6dCBkYXMgYmVsZWd0ZSBBdXNzZW5tYXNzIGtsYW1tZXJBICgiTWFzc2UgS2xlbW1lbiwKICogQmxpbmRkZWNrZWwueGxzeCIpLCB3ZW5uIGVzIGRlciBBdWZydWZlciBsaWVmZXJ0LiBLbGFtbWVydHlwZW4gKGJlbGVndCwKICogQmVybmQgUjItNCk6IEtMMSA9IDEgR2VsZW5rLzEgUGluLCBLTExJID0gMSBHZWxlbmsvMiBQaW5zLCBLTEggPSB6d2VpCiAqIEhhbGJzY2hhbGVuIG1pdCAyIEdlbGVua2VuICh6dXNhZXR6bGljaGUgVHJlbm5mdWdlbikuIE11dHRlcjogTSA9IEZsdWVnZWwsCiAqIFMgPSBTZWNoc2thbnQuICovCmZ1bmN0aW9uIHJLbGFtbWVyKG8sIHZ3LCB2aCkgewogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgZlIgPSBvLmZsYW5nZU9kIC8gMjsKICBjb25zdCBoYXNBID0gcG9zaXRpdmUoby5rbGFtbWVyQSkgJiYgby5rbGFtbWVyQSA+IG8uZmxhbmdlT2Q7CiAgLy8gRmFpbC1jbG9zZWQ6IG9obmUgYmVsZWd0ZXMgQXVzc2VubWFzcyBBIGtlaW5lIEtsYW1tZXIgemVpY2huZW4gKFJ1bmRlIDcpLgogIGlmICghaGFzQSkgcmV0dXJuIHJQbGF0emhhbHRlcihvLCB2dywgdmgpOwogIGNvbnN0IGJhbmQgPSBvLmtsYW1tZXJBIC8gMiAtIGZSOwogIC8vIElubmVuZmxhZWNoZSBiZWdyZW56ZW46IG9obmUgUm9oci3ijIAgKHJlaW5lIEZsYW5zY2gtQXVzd2FobCkgZGFyZiBkaWUKICAvLyBCb2hydW5nIGRpZSBEaWNodHNpdHotRmxhZWNoZSBuaWNodCB1ZWJlcmRlY2tlbi4KICBjb25zdCBib3JlID0gTWF0aC5taW4oTWF0aC5tYXgoMywgby5vZFIgKiAwLjkpLCBmUiAqIDAuNik7CiAgY29uc3QgZXh0ID0gZlIgKyBiYW5kOwogIGNvbnN0IEYgPSBmaXQoLWV4dCAtIDE0LCBleHQgKyAxNCwgLWV4dCAtIGJhbmQgKiAyLjYsIGV4dCArIDEwLCB2dywgdmgsIDQ2KTsKICBjb25zdCB7IHMgfSA9IEY7IGNvbnN0IGN4ID0gRi5YKDApLCBjeSA9IEYuWSgwKTsKCiAgY29uc3QgZGVmcyA9CiAgICBsaW5HcmFkQUIoaWQgKyAncmluZycsIDAsIGN5IC0gZXh0ICogcywgMCwgY3kgKyBleHQgKiBzLCBbCiAgICAgIFswLCAnI2U4ZWRmMSddLCBbMC4yOCwgJyNjM2NkZDQnXSwgWzAuNTUsICcjOWFhNmFmJ10sIFswLjgyLCAnIzc4ODU4ZiddLCBbMSwgJyM2NjcyN2MnXV0pICsKICAgIGxpbkdyYWRBQihpZCArICdmYWNlJywgMCwgY3kgLSBmUiAqIHMsIDAsIGN5ICsgZlIgKiBzLCBbCiAgICAgIFswLCAnI2YyZjVmOCddLCBbMC40NSwgJyNkNGRjZTInXSwgWzEsICcjYTJhZWI3J11dKSArCiAgICByYWRHcmFkKGlkICsgJ2JvcmUnLCBjeCwgY3kgLSBib3JlICogcyAqIDAuMjUsIGJvcmUgKiBzICogMS41LCBbCiAgICAgIFswLCAnI2ZmZmZmZiddLCBbMC43LCAnI2VlZjFmNCddLCBbMSwgJyNkZGUzZTgnXV0pICsKICAgIHNoYWRvd0dyYWQoaWQpICsgYmx1ckRlZihpZCwgYmFuZCAqIHMgKiAwLjEyKTsKCiAgbGV0IGIgPSAnJzsKICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSArIGV4dCAqIHMgKyAxMil9IiByeD0iJHtmeChleHQgKiBzICogMC45KX0iIHJ5PSIke2Z4KGV4dCAqIHMgKiAwLjE0KX0iIGZpbGw9InVybCgjJHtpZH0tc2gpIi8+YDsKICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7ZngoKGZSICsgYmFuZCAvIDIpICogcyl9IiBmaWxsPSJub25lIiBzdHJva2U9InVybCgjJHtpZH1yaW5nKSIgc3Ryb2tlLXdpZHRoPSIke2Z4KGJhbmQgKiBzKX0iLz5gOwogIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoY3kpfSIgcj0iJHtmeCgoZlIgKyBiYW5kKSAqIHMpfSIgZmlsbD0ibm9uZSIgJHtFREdFfS8+YDsKICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7ZngoZlIgKiBzKX0iIGZpbGw9Im5vbmUiICR7RURHRX0vPmA7CiAgYiArPSBgPHBhdGggZD0iTSAke2Z4KGN4IC0gKGZSICsgYmFuZCAqIDAuNzgpICogcyAqIDAuNzcpfSAke2Z4KGN5IC0gKGZSICsgYmFuZCAqIDAuNzgpICogcyAqIDAuNjQpfSBBICR7ZngoKGZSICsgYmFuZCAqIDAuNzgpICogcyl9ICR7ZngoKGZSICsgYmFuZCAqIDAuNzgpICogcyl9IDAgMCAxICR7ZngoY3ggKyAoZlIgKyBiYW5kICogMC43OCkgKiBzICogMC43Nyl9ICR7ZngoY3kgLSAoZlIgKyBiYW5kICogMC43OCkgKiBzICogMC42NCl9IgogICAgICAgIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLW9wYWNpdHk9IjAuNTUiIHN0cm9rZS13aWR0aD0iJHtmeChiYW5kICogcyAqIDAuMTgpfSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICAvLyBTZWdtZW50LUZ1Z2VuOiBLTDEvS0xMSSB6d2VpdGVpbGlnIChGdWdlbiBsaW5rcy9yZWNodHMgKyBMYXNjaGVuKS4KICBbMTgwLCAwXS5mb3JFYWNoKGEgPT4gewogICAgY29uc3QgYXIgPSBhICogTWF0aC5QSSAvIDE4MDsKICAgIGIgKz0gYDxsaW5lIHgxPSIke2Z4KGN4ICsgZlIgKiBzICogTWF0aC5jb3MoYXIpKX0iIHkxPSIke2Z4KGN5ICsgZlIgKiBzICogTWF0aC5zaW4oYXIpKX0iIHgyPSIke2Z4KGN4ICsgKGZSICsgYmFuZCkgKiBzICogTWF0aC5jb3MoYXIpKX0iIHkyPSIke2Z4KGN5ICsgKGZSICsgYmFuZCkgKiBzICogTWF0aC5zaW4oYXIpKX0iIHN0cm9rZT0iIzM5NDM0YiIgc3Ryb2tlLW9wYWNpdHk9IjAuNjUiIHN0cm9rZS13aWR0aD0iMS42Ii8+YDsKICAgIGNvbnN0IGx4ID0gY3ggKyAoZlIgKyBiYW5kKSAqIHMgKiBNYXRoLmNvcyhhciksIGx5ID0gY3kgKyAoZlIgKyBiYW5kKSAqIHMgKiBNYXRoLnNpbihhcik7CiAgICBiICs9IGA8cmVjdCB4PSIke2Z4KGx4IC0gYmFuZCAqIHMgKiAwLjMyKX0iIHk9IiR7ZngobHkgLSBiYW5kICogcyAqIDAuNzUpfSIgd2lkdGg9IiR7ZngoYmFuZCAqIHMgKiAwLjY0KX0iIGhlaWdodD0iJHtmeChiYW5kICogcyAqIDEuNSl9IiByeD0iJHtmeChiYW5kICogcyAqIDAuMjIpfSIgZmlsbD0idXJsKCMke2lkfXJpbmcpIiAke0VER0V9Lz5gOwogIH0pOwogIC8vIEtMSDogendlaSBIYWxic2NoYWxlbiAtPiB6dXNhZXR6bGljaGUgRnVnZW4gb2Jlbi91bnRlbiAoendlaXRlcyBHZWxlbmtwYWFyKQogIGlmIChvLmtsYW1tZXJUeXAgPT09ICdLTEgnKSB7CiAgICBbOTAsIDI3MF0uZm9yRWFjaChhID0+IHsKICAgICAgY29uc3QgYXIgPSBhICogTWF0aC5QSSAvIDE4MDsKICAgICAgYiArPSBgPGxpbmUgeDE9IiR7ZngoY3ggKyBmUiAqIHMgKiBNYXRoLmNvcyhhcikpfSIgeTE9IiR7ZngoY3kgKyBmUiAqIHMgKiBNYXRoLnNpbihhcikpfSIgeDI9IiR7ZngoY3ggKyAoZlIgKyBiYW5kKSAqIHMgKiBNYXRoLmNvcyhhcikpfSIgeTI9IiR7ZngoY3kgKyAoZlIgKyBiYW5kKSAqIHMgKiBNYXRoLnNpbihhcikpfSIgc3Ryb2tlPSIjMzk0MzRiIiBzdHJva2Utb3BhY2l0eT0iMC42NSIgc3Ryb2tlLXdpZHRoPSIxLjYiLz5gOwogICAgfSk7CiAgfQogIC8vIEZsYW5zY2gtU2NoZWliZSArIERpY2h0c2l0eiArIEJvaHJ1bmcKICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7ZngoZlIgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1mYWNlKSIvPmA7CiAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSl9IiByPSIke2Z4KChib3JlICsgKGZSIC0gYm9yZSkgKiAwLjUpICogcyl9IiBmaWxsPSJub25lIiBzdHJva2U9IiM4ZDk5YTIiIHN0cm9rZS1vcGFjaXR5PSIwLjU1IiBzdHJva2Utd2lkdGg9IjEuMSIvPmA7CiAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChjeSl9IiByPSIke2Z4KGJvcmUgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1ib3JlKSIgJHtFREdFfS8+YDsKICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5IC0gMC44KX0iIHI9IiR7ZngoTWF0aC5tYXgoMSwgYm9yZSAqIHMgLSAxLjYpKX0iIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzVmNmI3NCIgc3Ryb2tlLW9wYWNpdHk9IjAuOCIgc3Ryb2tlLXdpZHRoPSIxLjYiLz5gOwogIC8vIFZlcnNjaGx1c3Mgb2JlbjogTSA9IEZsdWVnZWxtdXR0ZXIsIFMgPSBTZWNoc2thbnRtdXR0ZXIgKGJlbGVndCwgUjItNCkKICBpZiAoby5rbGFtbWVyTXV0dGVyID09PSAnUycpIHsKICAgIGNvbnN0IGh3ID0gTWF0aC5tYXgoNCwgYmFuZCAqIHMgKiAwLjUpLCBoeSA9IGN5IC0gKGZSICsgYmFuZCkgKiBzIC0gaHcgKiAwLjk7CiAgICBiICs9IGA8cmVjdCB4PSIke2Z4KGN4IC0gaHcgKiAwLjM0KX0iIHk9IiR7ZngoaHkpfSIgd2lkdGg9IiR7ZngoaHcgKiAwLjY4KX0iIGhlaWdodD0iJHtmeChodyAqIDAuOSl9IiBmaWxsPSJ1cmwoIyR7aWR9cmluZykiICR7RURHRX0vPmA7CiAgICBjb25zdCBoZXggPSBbW2N4IC0gaHcsIGh5XSxbY3ggLSBodyAvIDIsIGh5IC0gaHcgKiAwLjcyXSxbY3ggKyBodyAvIDIsIGh5IC0gaHcgKiAwLjcyXSxbY3ggKyBodywgaHldLFtjeCArIGh3IC8gMiwgaHkgKyBodyAqIDAuNzJdLFtjeCAtIGh3IC8gMiwgaHkgKyBodyAqIDAuNzJdXQogICAgICAubWFwKHB0ID0+IGZ4KHB0WzBdKSArICcsJyArIGZ4KHB0WzFdKSkuam9pbignICcpOwogICAgYiArPSBgPHBvbHlnb24gcG9pbnRzPSIke2hleH0iIGZpbGw9InVybCgjJHtpZH1yaW5nKSIgJHtFREdFfS8+YDsKICB9IGVsc2UgewogICAgYiArPSB3aW5nTnV0KGlkICsgJ3JpbmcnLCBjeCwgY3kgLSAoZlIgKyBiYW5kKSAqIHMsIE1hdGgubWF4KDMuNCwgYmFuZCAqIHMgKiAwLjQyKSk7CiAgfQogIC8vIEdlbGVuayB1bnRlbjogS0wxL0tMSCBlaW4gUGluLCBLTExJIHp3ZWkgUGlucwogIGNvbnN0IGd5ID0gY3kgKyAoZlIgKyBiYW5kKSAqIHMgLSA0OwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoY3ggLSBiYW5kICogcyAqIDAuNTUpfSIgeT0iJHtmeChneSl9IiB3aWR0aD0iJHtmeChiYW5kICogcyAqIDEuMSl9IiBoZWlnaHQ9IiR7ZngoYmFuZCAqIHMgKiAwLjg1KX0iIHJ4PSIke2Z4KGJhbmQgKiBzICogMC4zKX0iIGZpbGw9InVybCgjJHtpZH1yaW5nKSIgJHtFREdFfS8+YDsKICBpZiAoby5rbGFtbWVyVHlwID09PSAnS0xMSScpIHsKICAgIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3ggLSBiYW5kICogcyAqIDAuMyl9IiBjeT0iJHtmeChneSArIGJhbmQgKiBzICogMC40Mil9IiByPSIke2Z4KE1hdGgubWF4KDEuNiwgYmFuZCAqIHMgKiAwLjE2KSl9IiBmaWxsPSIjNDU0ZjU3Ii8+YDsKICAgIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3ggKyBiYW5kICogcyAqIDAuMyl9IiBjeT0iJHtmeChneSArIGJhbmQgKiBzICogMC40Mil9IiByPSIke2Z4KE1hdGgubWF4KDEuNiwgYmFuZCAqIHMgKiAwLjE2KSl9IiBmaWxsPSIjNDU0ZjU3Ii8+YDsKICB9IGVsc2UgewogICAgYiArPSBgPGNpcmNsZSBjeD0iJHtmeChjeCl9IiBjeT0iJHtmeChneSArIGJhbmQgKiBzICogMC40Mil9IiByPSIke2Z4KE1hdGgubWF4KDEuOCwgYmFuZCAqIHMgKiAwLjIpKX0iIGZpbGw9IiM0NTRmNTciLz5gOwogIH0KICBjb25zdCBiZGcgPSBiYWRnZSh2dywgJ0tsYW1tZXIgJyArIG8ua2xhbW1lclR5cCArICcgwrcgS2xlbW0t4oyAICcgKyBTdHJpbmcoZngoby5mbGFuZ2VPZCkpLnJlcGxhY2UoJy4nLCAnLCcpICsgJyDCtyBESU4gMzI2NzYnKTsKICByZXR1cm4gc3ZnV3JhcCh2dywgdmgsIGRlZnMsIGIsIGJkZywgbGVnZW5kKHZoLCBvKSk7Cn0KCi8qIC0tIDJiKSBCbGluZGRlY2tlbCAoU2VpdGVuYW5zaWNodCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBSdW5kZSA3IChXLTA1OSk6IFByb2R1a3QtRGFyc3RlbGx1bmcgbmFjaCBNYXNzemVpY2hudW5nIEJsaW5kZGVja2VsLnN2Zy4KICogTnVyIGJlbGVndGUgTWFzc2U6IEEgPSBGbGFuc2NoLcOYIChmbGFuZ2VPZCksIEwgPSBEZWNrZWxzdGFlcmtlIChsZW5ndGgpLgogKiBPaG5lIGJlbGVndGUgRGVja2Vsc3RhZXJrZSAtPiBQbGF0emhhbHRlciBzdGF0dCBnZXJhdGVuZXIgRGlja2UuICovCmZ1bmN0aW9uIHJCbGluZGRlY2tlbChvLCB2dywgdmgpIHsKICBpZiAoIXBvc2l0aXZlKG8uZmxhbmdlT2QpIHx8ICFwb3NpdGl2ZShvLmxlbmd0aCkpIHJldHVybiByUGxhdHpoYWx0ZXIobywgdncsIHZoKTsKICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IEEgPSBvLmZsYW5nZU9kLCBMID0gby5sZW5ndGgsIHIgPSBBIC8gMjsKICBjb25zdCBGID0gZml0KC0yLCBMICsgMiwgLXIsIHIgKyAxNCwgdncsIHZoLCA2MCk7CiAgY29uc3QgeyBzLCBYLCBZIH0gPSBGOwogIGNvbnN0IGRlZnMgPQogICAgbGluR3JhZEFCKGlkICsgJ2NhcCcsIDAsIFkoLXIpLCAwLCBZKHIpLCBDSFJPTUUpICsKICAgIGxpbkdyYWRBQihpZCArICdmYWNlJywgWCgwKSwgMCwgWChMKSwgMCwgWwogICAgICBbMCwgJyM3ZThjOTYnXSwgWzAuMzUsICcjZDRkY2UyJ10sIFswLjcsICcjZjRmN2Y5J10sIFsxLCAnIzk4YTRhZCddXSkgKwogICAgc2hhZG93R3JhZChpZCkgKyBibHVyRGVmKGlkLCBNYXRoLm1heCgwLjgsIHIgKiBzICogMC4wNikpOwogIGxldCBiID0gJyc7CiAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoWChMIC8gMikpfSIgY3k9IiR7ZngoWShyKSArIDEyKX0iIHJ4PSIke2Z4KE1hdGgubWF4KDEwLCBBICogcyAqIDAuMjQpKX0iIHJ5PSIke2Z4KE1hdGgubWF4KDYsIEEgKiBzICogMC4xKSl9IiBmaWxsPSJ1cmwoIyR7aWR9LXNoKSIvPmA7CiAgLy8gU2NoZWliZSAoQ2hyb20pICsgU3Rpcm5zZWl0ZSBtaXQgZWlnZW5lciBTY2hhdHRpZXJ1bmcKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoMCkpfSIgeT0iJHtmeChZKC1yKSl9IiB3aWR0aD0iJHtmeChMICogcyl9IiBoZWlnaHQ9IiR7ZngoQSAqIHMpfSIgZmlsbD0idXJsKCMke2lkfWNhcCkiICR7RURHRX0vPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKEwpIC0gTWF0aC5tYXgoMS41LCBMICogcyAqIDAuMjgpKX0iIHk9IiR7ZngoWSgtcikpfSIgd2lkdGg9IiR7ZngoTWF0aC5tYXgoMS41LCBMICogcyAqIDAuMjgpKX0iIGhlaWdodD0iJHtmeChBICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9ZmFjZSkiICR7RURHRX0vPmA7CiAgLy8gR2xhbnotU3RyZWlmZW4gdWViZXIgZGllIFN0aXJuZmxhZWNoZQogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCgwKSArIDEpfSIgeT0iJHtmeChZKC1yICogMC41NSkpfSIgd2lkdGg9IiR7ZngoTCAqIHMgLSAyKX0iIGhlaWdodD0iJHtmeChNYXRoLm1heCgyLCBBICogcyAqIDAuMTQpKX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuNDUiIHJ4PSIyIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoMCkgKyAxKX0iIHk9IiR7ZngoWShyICogMC40NSkpfSIgd2lkdGg9IiR7ZngoTCAqIHMgLSAyKX0iIGhlaWdodD0iJHtmeChNYXRoLm1heCgyLCBBICogcyAqIDAuMTIpKX0iIGZpbGw9IiMzODQyNGEiIG9wYWNpdHk9IjAuMyIgcng9IjIiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogIGNvbnN0IGJkZyA9IGJhZGdlKHZ3LCAnQmxpbmRkZWNrZWwgwrcgRmxhbnNjaC3ijIAgJyArIFN0cmluZyhmeChBKSkucmVwbGFjZSgnLicsICcsJykgKyAnIMK3IERJTiAzMjY3NicpOwogIHJldHVybiBzdmdXcmFwKHZ3LCB2aCwgZGVmcywgYiwgYmRnLCBsZWdlbmQodmgsIG8pKTsKfQoKLyogLS0gMmMpIERpY2h0dW5nIChQcm9kdWt0LURhcnN0ZWxsdW5nKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBSdW5kZSA3IChXLTA1OSk6IFJpbmcgaW4gRGljaHR1bmdzZmFyYmUgbmFjaCBkZW4gZ2VsaWVmZXJ0ZW4gUHJvZmlsYmlsZGVybgogKiAoVHlwIEkgb2huZSBMaXBwZSAvIFR5cCBJSSBtaXQgTGlwcGUsIDIyLjA3LjIwMjYpLiBCZWxlZ3RlIE1hc3NlOiBFID0KICogZ2Fza2V0T2QsIEMgPSBnYXNrZXRJZC4gVHlwIElJIHRyYWVndCBlaW5lIGVyaGFiZW5lIExpcHBlIGFtIEF1c3NlbnJhbmQsCiAqIFR5cCBJIGlzdCBnbGF0dCAtIGRhZHVyY2ggc2luZCBiZWlkZSBzaWNodGJhciB1bnRlcnNjaGVpZGJhci4gT2huZSBiZWxlZ3RlCiAqIEUvQy1NYXNzZSAtPiBQbGF0emhhbHRlci4gKi8KZnVuY3Rpb24gckRpY2h0dW5nKG8sIHZ3LCB2aCkgewogIGlmICghcG9zaXRpdmUoby5nYXNrZXRPZCkgfHwgIXBvc2l0aXZlKG8uZ2Fza2V0SWQpIHx8IG8uZ2Fza2V0SWQgPj0gby5nYXNrZXRPZCkgewogICAgcmV0dXJuIHJQbGF0emhhbHRlcihvLCB2dywgdmgpOwogIH0KICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IHJFID0gby5nYXNrZXRPZCAvIDIsIHJDID0gby5nYXNrZXRJZCAvIDI7CiAgY29uc3QgbGlwcGUgPSBvLmdhc2tldFR5cGUgPT09ICdJSSc7CiAgY29uc3QgZXh0ID0gckUgKiAobGlwcGUgPyAxLjE0IDogMSk7CiAgY29uc3QgRiA9IGZpdCgtZXh0IC0gOCwgZXh0ICsgOCwgLWV4dCAtIDEwLCBleHQgKyAxNiwgdncsIHZoLCA1MCk7CiAgY29uc3QgeyBzIH0gPSBGOyBjb25zdCBjeCA9IEYuWCgwKSwgY3kgPSBGLlkoMCk7CiAgY29uc3Qgc2hhZGUgPSAoaGV4LCBmKSA9PiB7CiAgICBjb25zdCBuID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEpLCAxNik7CiAgICBjb25zdCBjaCA9IHYgPT4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHYgKiBmKSkpOwogICAgcmV0dXJuICcjJyArIFtjaCgobiA+PiAxNikgJiAyNTUpLCBjaCgobiA+PiA4KSAmIDI1NSksIGNoKG4gJiAyNTUpXS5tYXAodiA9PiB2LnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTsKICB9OwogIGNvbnN0IGRlZnMgPQogICAgcmFkR3JhZChpZCArICdyaW5nJywgY3gsIGN5IC0gckUgKiBzICogMC4zNSwgckUgKiBzICogMS4zNSwgWwogICAgICBbMCwgc2hhZGUoby5nQ29sLCAxLjU1KV0sIFswLjU1LCBvLmdDb2xdLCBbMSwgc2hhZGUoby5nQ29sLCAwLjU1KV1dKSArCiAgICByYWRHcmFkKGlkICsgJ2JvcmUnLCBjeCwgY3kgLSByQyAqIHMgKiAwLjIsIHJDICogcyAqIDEuNCwgWwogICAgICBbMCwgJyNmZmZmZmYnXSwgWzAuNywgJyNlZWYxZjQnXSwgWzEsICcjZGRlM2U4J11dKSArCiAgICBzaGFkb3dHcmFkKGlkKSArIGJsdXJEZWYoaWQsIE1hdGgubWF4KDAuNywgckUgKiBzICogMC4wNSkpOwogIGxldCBiID0gJyc7CiAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoY3kgKyBleHQgKiBzICsgMTIpfSIgcng9IiR7ZngoZXh0ICogcyAqIDAuODgpfSIgcnk9IiR7ZngoZXh0ICogcyAqIDAuMTMpfSIgZmlsbD0idXJsKCMke2lkfS1zaCkiLz5gOwogIGlmIChsaXBwZSkgewogICAgLy8gRXJoYWJlbmUgTGlwcGU6IFRvcnVzIGFtIEF1c3NlbnJhbmQgbWl0IEdsYW56a2FudGUKICAgIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoY3kpfSIgcj0iJHtmeChyRSAqIHMgKiAxLjA1KX0iIGZpbGw9Im5vbmUiIHN0cm9rZT0iJHtzaGFkZShvLmdDb2wsIDAuNil9IiBzdHJva2Utd2lkdGg9IiR7ZngockUgKiBzICogMC4xNCl9Ii8+YDsKICAgIGIgKz0gYDxjaXJjbGUgY3g9IiR7ZngoY3gpfSIgY3k9IiR7ZngoY3kpfSIgcj0iJHtmeChyRSAqIHMgKiAxLjEyKX0iIGZpbGw9Im5vbmUiICR7RURHRX0vPmA7CiAgICBiICs9IGA8cGF0aCBkPSJNICR7ZngoY3ggLSByRSAqIHMgKiAwLjg2KX0gJHtmeChjeSAtIHJFICogcyAqIDAuNjIpfSBBICR7ZngockUgKiBzICogMS4wNSl9ICR7ZngockUgKiBzICogMS4wNSl9IDAgMCAxICR7ZngoY3ggKyByRSAqIHMgKiAwLjg2KX0gJHtmeChjeSAtIHJFICogcyAqIDAuNjIpfSIKICAgICAgICAgIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZmZmZiIgc3Ryb2tlLW9wYWNpdHk9IjAuNjUiIHN0cm9rZS13aWR0aD0iJHtmeChNYXRoLm1heCgyLCByRSAqIHMgKiAwLjA1KSl9IiBzdHJva2UtbGluZWNhcD0icm91bmQiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogIH0KICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7ZngockUgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1yaW5nKSIgJHtFREdFfS8+YDsKICBiICs9IGA8Y2lyY2xlIGN4PSIke2Z4KGN4KX0iIGN5PSIke2Z4KGN5KX0iIHI9IiR7ZngockMgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1ib3JlKSIgJHtFREdFfS8+YDsKICAvLyBHbGFuenB1bmt0IGF1ZiBkZW0gUmluZwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KGN4IC0gckUgKiBzICogMC40KX0iIGN5PSIke2Z4KGN5IC0gckUgKiBzICogMC41Mil9IiByeD0iJHtmeChNYXRoLm1heCgzLCByRSAqIHMgKiAwLjIpKX0iIHJ5PSIke2Z4KE1hdGgubWF4KDIsIHJFICogcyAqIDAuMSkpfSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iMC4zNSIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CiAgLy8gVlAgZXJnYWVuenQgKDExLjA4LjIwMjYpLCBzb25zdCBzdGFuZCBpbiBkZXIgUHJvZHVrdGRhcnN0ZWxsdW5nICJWUCIgc3RhdHQgIlBURkUvRktNIi4KICBjb25zdCBtYXROYW1lID0geyBFUERNOidFUERNJywgVk1ROidTaWxpa29uIChWTVEpJywgRktNOidWaXRvbiAoRktNKScsIFBURkU6J1BURkUnLCBWUDonUFRGRS9GS00nIH1bby5nYXNrZXRNYXRlcmlhbF0gfHwgby5nYXNrZXRNYXRlcmlhbDsKICBjb25zdCBiZGcgPSBiYWRnZSh2dywgJ0RpY2h0dW5nIMK3IFR5cCAnICsgby5nYXNrZXRUeXBlICsgKGxpcHBlID8gJyAobWl0IExpcHBlKScgOiAnIChvaG5lIExpcHBlKScpICsgJyDCtyAnICsgbWF0TmFtZSk7CiAgcmV0dXJuIHN2Z1dyYXAodncsIHZoLCBkZWZzLCBiLCBiZGcsIGxlZ2VuZCh2aCwgbykpOwp9CgovKiAtLSAzKSBCb2dlbiA5MC80NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gckJvZ2VuKG8sIHZ3LCB2aCwgZGVnKSB7CiAgY29uc3QgaWQgPSB1aWQoKTsKICBjb25zdCBSID0gby5vZFIsIFJjID0gby5iZW5kUmFkaXVzLCBMID0gTWF0aC5tYXgoby5sZW5ndGgsIG8ub2QgKiAwLjcpOwogIGNvbnN0IGFuZyA9IGRlZyAqIE1hdGguUEkgLyAxODAsIEEgPSAtTWF0aC5QSSAvIDIsIEIgPSBBICsgYW5nOwogIGNvbnN0IG9uQyA9IChyLCBhKSA9PiBbciAqIE1hdGguY29zKGEpLCByICogTWF0aC5zaW4oYSldOwogIGNvbnN0IHRCID0gWy1NYXRoLnNpbihCKSwgTWF0aC5jb3MoQildOwogIGNvbnN0IGV4aXRQID0gKHIsIHQpID0+IHsgY29uc3QgcCA9IG9uQyhyLCBCKTsgcmV0dXJuIFtwWzBdICsgdEJbMF0gKiB0LCBwWzFdICsgdEJbMV0gKiB0XTsgfTsKICAvLyBFeHRlbnQKICBjb25zdCBwdHMgPSBbWy1MLCAtUmMgLSBSXSwgWy1MLCAtUmMgKyBSXSwgWzAsIC1SYyAtIFJdLCBbMCwgLVJjICsgUl0sCiAgICBvbkMoUmMgKyBSLCBCKSwgb25DKFJjIC0gUiwgQiksIGV4aXRQKFJjICsgUiwgTCksIGV4aXRQKFJjIC0gUiwgTCksCiAgICBvbkMoUmMgKyBSLCAoQSArIEIpIC8gMiksIFswLCAwXV07CiAgY29uc3QgeHMgPSBwdHMubWFwKHAgPT4gcFswXSksIHlzID0gcHRzLm1hcChwID0+IHBbMV0pOwogIGNvbnN0IEYgPSBmaXQoTWF0aC5taW4oLi4ueHMpIC0gNiwgTWF0aC5tYXgoLi4ueHMpICsgNiwgTWF0aC5taW4oLi4ueXMpIC0gNiwgTWF0aC5tYXgoLi4ueXMpICsgMjAsIHZ3LCB2aCwgNDYpOwogIGNvbnN0IHsgcywgWCwgWSB9ID0gRjsKICBjb25zdCBQID0gcCA9PiBbWChwWzBdKSwgWShwWzFdKV07CgogIGNvbnN0IGVtID0gZXhpdFAoUmMgKyBSLCBMIC8gMiksIGVtMiA9IGV4aXRQKFJjIC0gUiwgTCAvIDIpOwogIGNvbnN0IGRlZnMgPQogICAgbGluR3JhZEFCKGlkICsgJ2UnLCAwLCBZKC1SYyAtIFIpLCAwLCBZKC1SYyArIFIpLCBDSFJPTUUpICsKICAgIGxpbkdyYWRBQihpZCArICd4JywgWChlbVswXSksIFkoZW1bMV0pLCBYKGVtMlswXSksIFkoZW0yWzFdKSwgQ0hST01FKSArCiAgICByYWRHcmFkKGlkICsgJ3QnLCBYKDApLCBZKDApLCAoUmMgKyBSKSAqIHMsIENIUk9NRSwgKFJjIC0gUikgLyAoUmMgKyBSKSkgKwogICAgc2hhZG93R3JhZChpZCkgKyBibHVyRGVmKGlkLCBSICogcyAqIDAuMSk7CgogIGxldCBiID0gJyc7CiAgY29uc3QgbG93WSA9IE1hdGgubWF4KC4uLnlzKTsKICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChYKChNYXRoLm1pbiguLi54cykgKyBNYXRoLm1heCguLi54cykpIC8gMikpfSIgY3k9IiR7ZngoWShsb3dZKSArIDEyKX0iIHJ4PSIke2Z4KChNYXRoLm1heCguLi54cykgLSBNYXRoLm1pbiguLi54cykpICogcyAqIDAuNDQpfSIgcnk9IiR7ZngoTWF0aC5tYXgoOSwgUiAqIHMgKiAwLjUpKX0iIGZpbGw9InVybCgjJHtpZH0tc2gpIi8+YDsKICAvLyBGdWVsbHVuZ2VuIE9ITkUgS2FudGVubGluaWVuIChzb25zdCBRdWVybmFlaHRlIGFuIGRlbiBUYW5nZW50ZW4pIC4uLgogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCgtTCkpfSIgeT0iJHtmeChZKC1SYyAtIFIpKX0iIHdpZHRoPSIke2Z4KEwgKiBzICsgMSl9IiBoZWlnaHQ9IiR7ZngoMiAqIFIgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1lKSIvPmA7CiAgY29uc3QgcSA9IFtQKG9uQyhSYyArIFIsIEIpKSwgUChleGl0UChSYyArIFIsIEwpKSwgUChleGl0UChSYyAtIFIsIEwpKSwgUChvbkMoUmMgLSBSLCBCKSldOwogIGIgKz0gYDxwb2x5Z29uIHBvaW50cz0iJHtxLm1hcChwID0+IGZ4KHBbMF0pICsgJywnICsgZngocFsxXSkpLmpvaW4oJyAnKX0iIGZpbGw9InVybCgjJHtpZH14KSIvPmA7CiAgY29uc3QgUm8gPSAoUmMgKyBSKSAqIHMsIFJpID0gKFJjIC0gUikgKiBzOwogIGNvbnN0IG8wID0gUChvbkMoUmMgKyBSLCBBKSksIG8xID0gUChvbkMoUmMgKyBSLCBCKSksIGkxID0gUChvbkMoUmMgLSBSLCBCKSksIGkwID0gUChvbkMoUmMgLSBSLCBBKSk7CiAgYiArPSBgPHBhdGggZD0iTSAke2Z4KG8wWzBdKX0gJHtmeChvMFsxXSl9IEEgJHtmeChSbyl9ICR7ZngoUm8pfSAwIDAgMSAke2Z4KG8xWzBdKX0gJHtmeChvMVsxXSl9IEwgJHtmeChpMVswXSl9ICR7ZngoaTFbMV0pfSBBICR7ZngoUmkpfSAke2Z4KFJpKX0gMCAwIDAgJHtmeChpMFswXSl9ICR7ZngoaTBbMV0pfSBaIiBmaWxsPSJ1cmwoIyR7aWR9dCkiLz5gOwogIC8vIC4uLiBkYWZ1ZXIgRUlORSBkdXJjaGdlaGVuZGUgQXVzc2Vua29udHVyIHVlYmVyIGRhcyBnYW56ZSBUZWlsCiAgY29uc3QgZTFjID0gUChleGl0UChSYyArIFIsIEwpKSwgZTJjID0gUChleGl0UChSYyAtIFIsIEwpKTsKICBiICs9IGA8cGF0aCBkPSJNICR7ZngoWCgtTCkpfSAke2Z4KFkoLVJjIC0gUikpfSBMICR7ZngobzBbMF0pfSAke2Z4KG8wWzFdKX0gQSAke2Z4KFJvKX0gJHtmeChSbyl9IDAgMCAxICR7ZngobzFbMF0pfSAke2Z4KG8xWzFdKX0gTCAke2Z4KGUxY1swXSl9ICR7ZngoZTFjWzFdKX0gTCAke2Z4KGUyY1swXSl9ICR7ZngoZTJjWzFdKX0gTCAke2Z4KGkxWzBdKX0gJHtmeChpMVsxXSl9IEEgJHtmeChSaSl9ICR7ZngoUmkpfSAwIDAgMCAke2Z4KGkwWzBdKX0gJHtmeChpMFsxXSl9IEwgJHtmeChYKC1MKSl9ICR7ZngoWSgtUmMgKyBSKSl9IFoiIGZpbGw9Im5vbmUiICR7RURHRX0vPmA7CiAgLy8gR2xhbnotU3RyZWlmZW4gKEVpbnRyaXR0IC0+IFRvcnVzIC0+IEF1c3RyaXR0KQogIGNvbnN0IGhSID0gKFJjICsgUiAqIDAuMTIpICogczsKICBjb25zdCBoMCA9IFAob25DKFJjICsgUiAqIDAuMTIsIEEpKSwgaDEgPSBQKG9uQyhSYyArIFIgKiAwLjEyLCBCKSksIGhFID0gUChleGl0UChSYyArIFIgKiAwLjEyLCBMICogMC45KSk7CiAgYiArPSBgPHBhdGggZD0iTSAke2Z4KFgoLUwgKiAwLjkyKSl9ICR7ZngoaDBbMV0pfSBMICR7ZngoaDBbMF0pfSAke2Z4KGgwWzFdKX0gQSAke2Z4KGhSKX0gJHtmeChoUil9IDAgMCAxICR7ZngoaDFbMF0pfSAke2Z4KGgxWzFdKX0gTCAke2Z4KGhFWzBdKX0gJHtmeChoRVsxXSl9IgogICAgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZmZmZmZmIiBzdHJva2Utb3BhY2l0eT0iMC43MiIgc3Ryb2tlLXdpZHRoPSIke2Z4KE1hdGgubWF4KDMsIFIgKiBzICogMC4yNikpfSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKICAvLyBTY2h3ZWlzc2VuZGVuIChzZW5rcmVjaHQgenVyIGpld2VpbGlnZW4gQWNoc2UpCiAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWCgtTCkpfSIgeTE9IiR7ZngoWSgtUmMgLSBSKSArIDEpfSIgeDI9IiR7ZngoWCgtTCkpfSIgeTI9IiR7ZngoWSgtUmMgKyBSKSAtIDEpfSIgc3Ryb2tlPSIjMmYzOTQwIiBzdHJva2Utb3BhY2l0eT0iMC44NSIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz5gOwogIGNvbnN0IGUxID0gUChleGl0UChSYyArIFIsIEwpKSwgZTIgPSBQKGV4aXRQKFJjIC0gUiwgTCkpOwogIGIgKz0gYDxsaW5lIHgxPSIke2Z4KGUxWzBdKX0iIHkxPSIke2Z4KGUxWzFdKX0iIHgyPSIke2Z4KGUyWzBdKX0iIHkyPSIke2Z4KGUyWzFdKX0iIHN0cm9rZT0iIzJmMzk0MCIgc3Ryb2tlLW9wYWNpdHk9IjAuODUiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsKICBjb25zdCBiZGcgPSBiYWRnZSh2dywgJ0JvZ2VuICcgKyBkZWcgKyAnwrAgwrcgRE4gJyArIG8uZG4gKyAnIMK3IERJTiAxMTg2NScpOwogIHJldHVybiBzdmdXcmFwKHZ3LCB2aCwgZGVmcywgYiwgYmRnLCBsZWdlbmQodmgsIG8pKTsKfQoKLyogLS0gNCkgVC1TdHVlY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmZ1bmN0aW9uIHJUc3R1ZWNrKG8sIHZ3LCB2aCkgewogIGNvbnN0IGlkID0gdWlkKCk7CiAgY29uc3QgUiA9IG8ub2RSLCBMID0gTWF0aC5tYXgoby5sZW5ndGgsIG8ub2QgKiAyKSwgYlIgPSBvLmJyYW5jaE9kIC8gMjsKICAvKiBBYmdhbmdzbMOkbmdlOiBvLmJyYW5jaExlbmd0aCBpc3QgZGFzIGJlbGVndGUgTWHDnyBhdXMgZGVyIEt1bmRlbnRhYmVsbGUKICAgKiAoRm9ybSBUOiBTcGFsdGUgTDIsIEZvcm0gVEs6IFNwYWx0ZSBMMSAtIEJlcm5kIDI3LjA3LjIwMjYpLCBnZW1lc3NlbiBhYgogICAqIExhdWYtTWl0dGVsbGluaWU7IGdlemVpY2huZXQgd2lyZCBkaWUgSMO2aGUgw7xiZXIgZGVyIExhdWZrb250dXIuCiAgICogQUNIVFVORyAtIG9mZmVuZXIgUHVua3QsIGJld3Vzc3QgTklDSFQgZWlnZW5tw6RjaHRpZyBnZcOkbmRlcnQ6IEZlaGx0CiAgICogYnJhbmNoTGVuZ3RoLCBncmVpZnQgaGllciBkaWVzZWxiZSBTY2jDpHR6cHJvcG9ydGlvbiB3aWUgaW4gZHJhdy5qczo0MzkKICAgKiAoTWF0aC5tYXgob2QsIEwqMCw0MikpLiBTaWUgaXN0IEtFSU4gYmVsZWd0ZXMgTWHDny4gU2llIHN0ZWh0IGhpZXIgbnVyLCBkYW1pdAogICAqIEFuc2ljaHQgdW5kIFplaWNobnVuZyBuaWNodCBhdXNlaW5hbmRlcmxhdWZlbjsgZGllIEFuc2ljaHQgdHLDpGd0IG9obmVoaW4ga2VpbmUKICAgKiBNYcOfemFobCwgYmVoYXVwdGV0IGFsc28ga2VpbiBNYcOfLiBFaW5lIFVtc3RlbGx1bmcgYXVmIGZhaWwtY2xvc2VkCiAgICogKFBsYXR6aGFsdGVyIHN0YXR0IFNjaMOkdHp1bmcpIG11c3MgaW4gQkVJREVOIFNjaGljaHRlbiBnZW1laW5zYW0gcGFzc2llcmVuIC0KICAgKiBzaWVoZSBCZWZ1bmQgQiBpbSDDnGJlcmdhYmViZXJpY2h0LiAqLwogIGNvbnN0IGJMID0gby5icmFuY2hMZW5ndGggIT0gbnVsbCA\\\/IE1hdGgubWF4KDEsIG8uYnJhbmNoTGVuZ3RoIC0gUikgOiBNYXRoLm1heChvLm9kLCBMICogMC40MiksIHhjID0gTCAvIDI7CiAgY29uc3QgRiA9IGZpdCgtMywgTCArIDMsIC1SIC0gYkwgLSA4LCBSICsgMTYsIHZ3LCB2aCwgNDYpOwogIGNvbnN0IHsgcywgWCwgWSB9ID0gRjsKICBjb25zdCBkZWZzID0KICAgIGxpbkdyYWRBQihpZCArICdydW4nLCAwLCBZKC1SKSwgMCwgWShSKSwgQ0hST01FKSArCiAgICBsaW5HcmFkQUIoaWQgKyAnYnInLCBYKHhjIC0gYlIpLCAwLCBYKHhjICsgYlIpLCAwLCBDSFJPTUUpICsKICAgIHNoYWRvd0dyYWQoaWQpICsgYmx1ckRlZihpZCwgUiAqIHMgKiAwLjEpOwogIGxldCBiID0gJyc7CiAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoWChMIC8gMikpfSIgY3k9IiR7ZngoWShSKSArIDEyKX0iIHJ4PSIke2Z4KEwgKiBzICogMC41Mil9IiByeT0iJHtmeChNYXRoLm1heCg5LCBSICogcyAqIDAuNSkpfSIgZmlsbD0idXJsKCMke2lkfS1zaCkiLz5gOwogIC8vIEFiendlaWcgKGhpbnRlciBkZW0gTGF1ZikKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoeGMgLSBiUikpfSIgeT0iJHtmeChZKC1SIC0gYkwpKX0iIHdpZHRoPSIke2Z4KDIgKiBiUiAqIHMpfSIgaGVpZ2h0PSIke2Z4KChiTCArIFIpICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9YnIpIiAke0VER0V9Lz5gOwogIC8vIExhdWYKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoMCkpfSIgeT0iJHtmeChZKC1SKSl9IiB3aWR0aD0iJHtmeChMICogcyl9IiBoZWlnaHQ9IiR7ZngoMiAqIFIgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1ydW4pIiAke0VER0V9Lz5gOwogIC8vIEFPIGFuIGRlciBFaW5tdWVuZHVuZwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KFgoeGMpKX0iIGN5PSIke2Z4KFkoLVIpKX0iIHJ4PSIke2Z4KGJSICogcyAqIDEuMjUpfSIgcnk9IiR7ZngoTWF0aC5tYXgoMi41LCBSICogcyAqIDAuMTYpKX0iIGZpbGw9IiMwMDAiIG9wYWNpdHk9IjAuMTYiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogIC8vIEdsYW56LVN0cmVpZmVuCiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKDApICsgMil9IiB5PSIke2Z4KFkoLVIgKiAwLjI1KSl9IiB3aWR0aD0iJHtmeChMICogcyAtIDQpfSIgaGVpZ2h0PSIke2Z4KE1hdGgubWF4KDMsIFIgKiAwLjI4ICogcykpfSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iMC42IiByeD0iMyIgZmlsdGVyPSJ1cmwoIyR7aWR9LWJsKSIvPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKHhjIC0gYlIgKiAwLjM1KSl9IiB5PSIke2Z4KFkoLVIgLSBiTCkgKyAyKX0iIHdpZHRoPSIke2Z4KE1hdGgubWF4KDMsIGJSICogMC4zICogcykpfSIgaGVpZ2h0PSIke2Z4KGJMICogcyAqIDAuODUpfSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iMC41NSIgcng9IjMiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogIC8vIFNjaHdlaXNzZW5kZW4KICBiICs9IGA8bGluZSB4MT0iJHtmeChYKDApKX0iIHkxPSIke2Z4KFkoLVIpICsgMSl9IiB4Mj0iJHtmeChYKDApKX0iIHkyPSIke2Z4KFkoUikgLSAxKX0iIHN0cm9rZT0iIzJmMzk0MCIgc3Ryb2tlLW9wYWNpdHk9IjAuODUiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsKICBiICs9IGA8bGluZSB4MT0iJHtmeChYKEwpKX0iIHkxPSIke2Z4KFkoLVIpICsgMSl9IiB4Mj0iJHtmeChYKEwpKX0iIHkyPSIke2Z4KFkoUikgLSAxKX0iIHN0cm9rZT0iIzJmMzk0MCIgc3Ryb2tlLW9wYWNpdHk9IjAuODUiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsKICBiICs9IGA8bGluZSB4MT0iJHtmeChYKHhjIC0gYlIpICsgMSl9IiB5MT0iJHtmeChZKC1SIC0gYkwpKX0iIHgyPSIke2Z4KFgoeGMgKyBiUikgLSAxKX0iIHkyPSIke2Z4KFkoLVIgLSBiTCkpfSIgc3Ryb2tlPSIjMmYzOTQwIiBzdHJva2Utb3BhY2l0eT0iMC44NSIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz5gOwogIGNvbnN0IHJlZCA9IG8uYnJhbmNoT2QgIT09IG8ub2Q7CiAgLyogUjMtMy9SMy00OiBCYXVmb3JtIG1pdCBpbnMgQmFkZ2UgLSB2b3JoZXIgc3RhbmQgaW4gZGVyIEFuc2ljaHQgbnVyCiAgICogIlQtU3TDvGNrIGdsZWljaCDCtyBETiAxNSDCtyBESU4gMTE4NjUiLCBGb3JtIFQgdW5kIEZvcm0gVEsgd2FyZW4gYWxzbyBuaWNodAogICAqIHVudGVyc2NoZWlkYmFyLCBvYndvaGwgZGllIFplaWNobnVuZyBzaWUgYXVzd2Vpc3QuIFNjaHJlaWJ3ZWlzZSB3aWUgYmVpIGRlcgogICAqIFJlZHV6aWVydW5nIGRhcnVudGVyICgiKEZvcm0gUkspIiAvICIoRm9ybSBSRSkiKSwgaW5oYWx0bGljaCBpZGVudGlzY2ggenVtCiAgICogWmVpY2hudW5ncy1CYWRnZSBpbiBkcmF3LmpzICgiwrcgRm9ybSBUIMK3IikuICovCiAgY29uc3QgYmRnID0gYmFkZ2UodncsICdULVN0w7xjayAnICsgKHJlZCA\\\/ICdyZWR1emllcnQnIDogJ2dsZWljaCcpICsKICAgICcgKEZvcm0gJyArIG8udGZvcm0gKyAnKSDCtyBETiAnICsgby5kbiArICcgwrcgRElOIDExODY1Jyk7CiAgcmV0dXJuIHN2Z1dyYXAodncsIHZoLCBkZWZzLCBiLCBiZGcsIGxlZ2VuZCh2aCwgbykpOwp9CgovKiAtLSA1KSBSZWR1emllcnVuZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmZ1bmN0aW9uIHJSZWR1emllcnVuZyhvLCB2dywgdmgpIHsKICBjb25zdCBpZCA9IHVpZCgpOwogIGNvbnN0IFIgPSBvLm9kUiwgUjIgPSBvLm9kMiAvIDIsIEwgPSBNYXRoLm1heChvLmxlbmd0aCwgKG8ub2QgLSBvLm9kMikgKiAyLjIsIG8ub2QgKiAwLjkpOwogIGNvbnN0IGVjYyA9ICEhby5lY2NlbnRyaWMsIG9mZiA9IGVjYyA\\\/IChSIC0gUjIpIDogMDsKICBjb25zdCBGID0gZml0KC0zLCBMICsgMywgLVIgLSA4LCBSICsgMTYsIHZ3LCB2aCwgNTApOwogIGNvbnN0IHsgcywgWCwgWSB9ID0gRjsKICBjb25zdCBkZWZzID0KICAgIGxpbkdyYWRBQihpZCArICdrJywgMCwgWSgtUiksIDAsIFkoUiksIENIUk9NRSkgKwogICAgc2hhZG93R3JhZChpZCkgKyBibHVyRGVmKGlkLCBSICogcyAqIDAuMSk7CiAgbGV0IGIgPSAnJzsKICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChYKEwgLyAyKSl9IiBjeT0iJHtmeChZKFIpICsgMTIpfSIgcng9IiR7ZngoTCAqIHMgKiAwLjU1KX0iIHJ5PSIke2Z4KE1hdGgubWF4KDksIFIgKiBzICogMC41KSl9IiBmaWxsPSJ1cmwoIyR7aWR9LXNoKSIvPmA7CiAgYiArPSBgPHBvbHlnb24gcG9pbnRzPSIke2Z4KFgoMCkpfSwke2Z4KFkoLVIpKX0gJHtmeChYKEwpKX0sJHtmeChZKC1SMiArIG9mZikpfSAke2Z4KFgoTCkpfSwke2Z4KFkoUjIgKyBvZmYpKX0gJHtmeChYKDApKX0sJHtmeChZKFIpKX0iIGZpbGw9InVybCgjJHtpZH1rKSIgJHtFREdFfS8+YDsKICAvLyBHbGFuei1TdHJlaWZlbiBlbnRsYW5nIGRlciAoZ2dmLiBnZW5laWd0ZW4pIE1pdHRlCiAgY29uc3QgeTAgPSBZKC1SICogMC4yNSksIHkxID0gWSgtUjIgKiAwLjI1ICsgb2ZmKTsKICBiICs9IGA8cGF0aCBkPSJNICR7ZngoWCgwKSArIDMpfSAke2Z4KHkwKX0gTCAke2Z4KFgoTCkgLSAzKX0gJHtmeCh5MSl9IiBzdHJva2U9IiNmZmYiIHN0cm9rZS1vcGFjaXR5PSIwLjYyIiBzdHJva2Utd2lkdGg9IiR7ZngoTWF0aC5tYXgoMywgUiAqIHMgKiAwLjI2KSl9IiBzdHJva2UtbGluZWNhcD0icm91bmQiIGZpbGw9Im5vbmUiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwogIC8vIFNjaHdlaXNzZW5kZW4KICBiICs9IGA8bGluZSB4MT0iJHtmeChYKDApKX0iIHkxPSIke2Z4KFkoLVIpICsgMSl9IiB4Mj0iJHtmeChYKDApKX0iIHkyPSIke2Z4KFkoUikgLSAxKX0iIHN0cm9rZT0iIzJmMzk0MCIgc3Ryb2tlLW9wYWNpdHk9IjAuODUiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsKICBiICs9IGA8bGluZSB4MT0iJHtmeChYKEwpKX0iIHkxPSIke2Z4KFkoLVIyICsgb2ZmKSArIDEpfSIgeDI9IiR7ZngoWChMKSl9IiB5Mj0iJHtmeChZKFIyICsgb2ZmKSAtIDEpfSIgc3Ryb2tlPSIjMmYzOTQwIiBzdHJva2Utb3BhY2l0eT0iMC44NSIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz5gOwogIGNvbnN0IGRlID0gbiA9PiBTdHJpbmcoZngobikpLnJlcGxhY2UoJy4nLCAnLCcpOwogIC8vIFIzLTI6IGtvbnplbnRyaXNjaCA9IEZvcm0gUkssIGV4emVudHJpc2NoID0gRm9ybSBSRSAoZ2xlaWNoZSBCZXNjaHJpZnR1bmcgd2llIGRpZSBaZWljaG51bmcpLgogIGNvbnN0IGJkZyA9IGJhZGdlKHZ3LCAnUmVkdXppZXJ1bmcgJyArIChlY2MgPyAnZXh6ZW50cmlzY2ggKEZvcm0gUkUpJyA6ICdrb256ZW50cmlzY2ggKEZvcm0gUkspJykgKyAnIMK3ICcgKyBkZShvLm9kKSArICfihpInICsgKG8ub2QyUHJvdiA\\\/IGRlKG8ub2QyKSA6ICdmb2xndCcpICsgJyDCtyBESU4gMTE4NjUnKTsKICByZXR1cm4gc3ZnV3JhcCh2dywgdmgsIGRlZnMsIGIsIGJkZywgbGVnZW5kKHZoLCBvKSk7Cn0KCi8qIC0tIDYpIENvbm5lY3QtRmxhbnNjaCAvIENGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBQcm9kdWt0ZGFyc3RlbGx1bmcgZGVzIERhdGVuYmxhdHQtU2Nobml0dHMuIE51ciBEZSwgRGksIERmIHVuZCBMIHN0ZXVlcm4KICogcHJvcG9ydGlvbnNyZWxldmFudGUgR2VvbWV0cmllOyBIYXJkd2FyZWRldGFpbHMgYmxlaWJlbiBiZXd1c3N0IHNjaGVtYXRpc2NoLiAqLwpmdW5jdGlvbiByQ29ubmVjdGZsYW5zY2gobywgdncsIHZoKSB7CiAgY29uc3QgaWQgPSB1aWQoKTsKICBjb25zdCBEZSA9IG8ub2QsIERpID0gby5pbm5lckRpYW1ldGVyLCBEZiA9IG8uZmxhbmdlT2QsIEwgPSBvLmxlbmd0aDsKICBjb25zdCByRGUgPSBEZSAvIDIsIHJEaSA9IERpIC8gMiwgckRmID0gRGYgLyAyOwogIGNvbnN0IGJvc3NIID0gTWF0aC5tYXgoTCAqIDEuMiwgRGYgKiAwLjU4KTsKICBjb25zdCB0b3AgPSAtTCAtIGJvc3NIOwogIGNvbnN0IGJvbHRYID0gTWF0aC5taW4ockRlICogMC43OCwgckRmICsgTWF0aC5tYXgoNCwgKHJEZSAtIHJEZikgKiAwLjQyKSk7CiAgY29uc3QgYm9sdFIgPSBNYXRoLm1heCgyLjIsIE1hdGgubWluKERmLCBEZSkgKiAwLjA5KTsKICBjb25zdCBGID0gZml0KC1yRGUgLSBib2x0UiwgckRlICsgYm9sdFIsIHRvcCAtIGJvbHRSICogMS44LCAwLCB2dywgdmgsIDUyKTsKICBjb25zdCB7IHMsIFgsIFkgfSA9IEY7CiAgY29uc3QgZGVmcyA9CiAgICBsaW5HcmFkQUIoaWQgKyAnYm9keScsIDAsIFkodG9wKSwgMCwgWSgwKSwgQ0hST01FKSArCiAgICBsaW5HcmFkQUIoaWQgKyAnYm9zcycsIFgoLXJEZiksIDAsIFgockRmKSwgMCwgQ0hST01FKSArCiAgICBsaW5HcmFkQUIoaWQgKyAnYm9sdCcsIDAsIFkodG9wKSwgMCwgWSgtTCksIFNBVElOKSArCiAgICBsaW5HcmFkQUIoaWQgKyAnYm9yZScsIFgoLXJEaSksIDAsIFgockRpKSwgMCwgWwogICAgICBbMCwnIzExMTgyMCddLCBbMC4zNSwnIzM1NDE0YSddLCBbMC41NSwnIzYyNmY3OCddLCBbMSwnIzE4MjEyOSddXSkgKwogICAgc2hhZG93R3JhZChpZCkgKyBibHVyRGVmKGlkLCBNYXRoLm1heCgwLjgsIHJEaSAqIHMgKiAwLjA4KSk7CgogIGxldCBiID0gJyc7CiAgYiArPSBgPGVsbGlwc2UgY3g9IiR7ZngoWCgwKSl9IiBjeT0iJHtmeChZKDApICsgMTMpfSIgcng9IiR7ZngockRlICogcyAqIDEuMDQpfSIgcnk9IiR7ZngoTWF0aC5tYXgoOCwgTCAqIHMgKiAwLjM0KSl9IiBmaWxsPSJ1cmwoIyR7aWR9LXNoKSIvPmA7CiAgYiArPSBgPHBvbHlnb24gcG9pbnRzPSIke2Z4KFgoLXJEZSkpfSwke2Z4KFkoMCkpfSAke2Z4KFgoLXJEaSkpfSwke2Z4KFkoMCkpfSAke2Z4KFgoLXJEaSkpfSwke2Z4KFkoLUwpKX0gJHtmeChYKC1yRGYpKX0sJHtmeChZKC1MKSl9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9keSkiICR7RURHRX0vPmA7CiAgYiArPSBgPHBvbHlnb24gcG9pbnRzPSIke2Z4KFgockRmKSl9LCR7ZngoWSgtTCkpfSAke2Z4KFgockRpKSl9LCR7ZngoWSgtTCkpfSAke2Z4KFgockRpKSl9LCR7ZngoWSgwKSl9ICR7ZngoWChyRGUpKX0sJHtmeChZKDApKX0iIGZpbGw9InVybCgjJHtpZH1ib2R5KSIgJHtFREdFfS8+YDsKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgoLXJEZikpfSIgeT0iJHtmeChZKHRvcCkpfSIgd2lkdGg9IiR7ZngoRGYgKiBzKX0iIGhlaWdodD0iJHtmeChib3NzSCAqIHMpfSIgcng9IiR7ZngoTWF0aC5tYXgoMS41LCBzICogMC44KSl9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9zcykiICR7RURHRX0vPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKC1yRGkpKX0iIHk9IiR7ZngoWSh0b3ApIC0gMSl9IiB3aWR0aD0iJHtmeChEaSAqIHMpfSIgaGVpZ2h0PSIke2Z4KCgtdG9wKSAqIHMgKyAyKX0iIGZpbGw9InVybCgjJHtpZH1ib3JlKSIvPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKC1yRGkpICsgMS41KX0iIHk9IiR7ZngoWSh0b3ApICsgMil9IiB3aWR0aD0iJHtmeChNYXRoLm1heCgyLCBEaSAqIHMgKiAwLjE2KSl9IiBoZWlnaHQ9IiR7ZngoKC10b3ApICogcyAtIDQpfSIgZmlsbD0iI2ZmZiIgb3BhY2l0eT0iMC4xOCIgcng9IjIiIGZpbHRlcj0idXJsKCMke2lkfS1ibCkiLz5gOwoKICBbLTEsMV0uZm9yRWFjaChzaWRlID0+IHsKICAgIGNvbnN0IHggPSBzaWRlICogYm9sdFg7CiAgICBjb25zdCBzaG91bGRlclggPSBzaWRlID4gMCA\\\/IHJEZiA6IC1yRGY7CiAgICBiICs9IGA8cGF0aCBkPSJNJHtmeChYKHggLSBzaWRlICogYm9sdFIgKiAxLjcpKX0sJHtmeChZKC1MICogMC43NCkpfSBMJHtmeChYKHNob3VsZGVyWCkpfSwke2Z4KFkoLUwpKX0iIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzRiNTg2MSIgc3Ryb2tlLXdpZHRoPSIke2Z4KE1hdGgubWF4KDIuMiwgYm9sdFIgKiBzICogMC40NSkpfSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+YDsKICAgIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCh4IC0gYm9sdFIpKX0iIHk9IiR7ZngoWSh0b3AgKyBib3NzSCAqIDAuMSkpfSIgd2lkdGg9IiR7ZngoMiAqIGJvbHRSICogcyl9IiBoZWlnaHQ9IiR7ZngoYm9zc0ggKiAwLjYyICogcyl9IiByeD0iJHtmeChib2x0UiAqIHMgKiAwLjM1KX0iIGZpbGw9InVybCgjJHtpZH1ib2x0KSIgJHtFREdFfS8+YDsKICAgIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KFgoeCkpfSIgY3k9IiR7ZngoWSh0b3AgKyBib3NzSCAqIDAuMDgpKX0iIHJ4PSIke2Z4KGJvbHRSICogMS4yNSAqIHMpfSIgcnk9IiR7ZngoYm9sdFIgKiAwLjcyICogcyl9IiBmaWxsPSJ1cmwoIyR7aWR9Ym9sdCkiICR7RURHRX0vPmA7CiAgfSk7CiAgYiArPSBgPGxpbmUgeDE9IiR7ZngoWCgtckRmKSl9IiB5MT0iJHtmeChZKC1MKSl9IiB4Mj0iJHtmeChYKHJEZikpfSIgeTI9IiR7ZngoWSgtTCkpfSIgc3Ryb2tlPSIjMTUxYzIyIiBzdHJva2Utd2lkdGg9IjIuMiIgb3BhY2l0eT0iMC44MiIvPmA7CiAgYiArPSBgPHBhdGggZD0iTSR7ZngoWCgtckRlICogMC45KSl9LCR7ZngoWSgtTCAqIDAuMTIpKX0gUSR7ZngoWCgwKSl9LCR7ZngoWSgtTCAqIDAuNykpfSAke2Z4KFgockRlICogMC45KSl9LCR7ZngoWSgtTCAqIDAuMTIpKX0iIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIke2Z4KE1hdGgubWF4KDIuNSwgTCAqIHMgKiAwLjE4KSl9IiBzdHJva2Utb3BhY2l0eT0iMC4yOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKCiAgcmV0dXJuIHN2Z1dyYXAodncsIHZoLCBkZWZzLCBiLAogICAgYmFkZ2UodncsICdDb25uZWN0LUZsYW5zY2ggKENGKSDCtyAnICsgc2l6ZUxhYmVsKG8pKSwgbGVnZW5kKHZoLCBvKSk7Cn0KCi8qIC0tIDcpIENvbm5lY3QtRmxhbnNjaCBJbmxpbmUgLyBDRkkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogVGVjaG5pc2NoZXIgQ2hyb20tU2Nobml0dDogRGUsIERpLCBMLCBZIHVuZCBBL1RDIGtvbW1lbiBhdXNzY2hsaWVzc2xpY2gKICogYXVzIGRlbSBBdWZydWZlci4gTmljaHQgZ2VsaWVmZXJ0ZSBFaW56ZWxtYXNzZSBibGVpYmVuIHVuYmVzY2hyaWZ0ZXRlCiAqIFNjaGVtYWVsZW1lbnRlIHVuZCB3ZXJkZW4gbmljaHQgYWxzIHRlY2huaXNjaGUgV2VydGUgYXVzZ2VnZWJlbi4gKi8KZnVuY3Rpb24gckNvbm5lY3RpbmxpbmUobywgdncsIHZoKSB7CiAgY29uc3QgaWQgPSB1aWQoKTsKICBjb25zdCBEZSA9IG8ub2QsIERpID0gby5pbm5lckRpYW1ldGVyLCBMID0gby5sZW5ndGgsIFloID0gby5icmFuY2hIZWlnaHQ7CiAgY29uc3QgZW5kVmFsdWUgPSBvLmVuZERpYW1ldGVyLCBpc1RDID0gby5lbmRUeXBlID09PSAnVEMnOwogIGNvbnN0IHVwcGVyRGUgPSBvLnVwcGVyT3V0ZXJEaWFtZXRlciwgdXBwZXJEaSA9IG8udXBwZXJJbm5lckRpYW1ldGVyOwogIGNvbnN0IHJEZSA9IERlIC8gMiwgckRpID0gRGkgLyAyLCByRW5kID0gaXNUQyA\\\/IGVuZFZhbHVlIC8gMiA6IHJEZTsKICBjb25zdCB4YyA9IEwgLyAyOwogIGNvbnN0IGJhc2VIYWxmID0gTWF0aC5taW4oTCAqIDAuMjQsIE1hdGgubWF4KDEwLCB1cHBlckRlICogMC41OCkpOwogIGNvbnN0IHVwcGVyTGVmdCA9IHhjIC0gdXBwZXJEZSAvIDIsIHVwcGVyUmlnaHQgPSB4YyArIHVwcGVyRGUgLyAyOwogIGNvbnN0IGlubmVyTGVmdCA9IHhjIC0gdXBwZXJEaSAvIDIsIGlubmVyUmlnaHQgPSB4YyArIHVwcGVyRGkgLyAyOwogIGNvbnN0IHNlYWxZID0gLVloOwogIGNvbnN0IGhlYWRIID0gTWF0aC5tYXgoNywgdXBwZXJEZSAqIDAuMik7CiAgY29uc3QgdG9wID0gc2VhbFkgLSBoZWFkSDsKICBjb25zdCBmbGFuZ2VUID0gaXNUQyA\\\/IE1hdGgubWF4KDIsIE1hdGgubWluKEwgKiAwLjA0NSwgRGUgKiAwLjEzKSkgOiAwOwogIGNvbnN0IG1pblkgPSBNYXRoLm1pbih0b3AgLSBoZWFkSCAqIDAuMzQsIC1yRW5kKSwgbWF4WSA9IE1hdGgubWF4KHJFbmQsIHJEZSk7CiAgY29uc3QgRiA9IGZpdCgwLCBMLCBtaW5ZLCBtYXhZLCB2dywgdmgsIDU0KTsKICBjb25zdCB7IHMsIFgsIFkgfSA9IEY7CiAgY29uc3QgcGlwZVgwID0gaXNUQyA\\\/IGZsYW5nZVQgOiAwLCBwaXBlWDEgPSBpc1RDID8gTCAtIGZsYW5nZVQgOiBMOwogIGNvbnN0IGRlZnMgPQogICAgbGluR3JhZEFCKGlkICsgJ3BpcGUnLCAwLCBZKC1yRGUpLCAwLCBZKHJEZSksIENIUk9NRSkgKwogICAgbGluR3JhZEFCKGlkICsgJ2hlYWQnLCBYKHVwcGVyTGVmdCksIDAsIFgodXBwZXJSaWdodCksIDAsIENIUk9NRSkgKwogICAgbGluR3JhZEFCKGlkICsgJ2VuZCcsIDAsIFkoLXJFbmQpLCAwLCBZKHJFbmQpLCBTQVRJTikgKwogICAgbGluR3JhZEFCKGlkICsgJ2JvcmUnLCAwLCBZKC1yRGkpLCAwLCBZKHJEaSksIFsKICAgICAgWzAsJyMyNjMxM2EnXSwgWzAuMzUsJyM0YjU5NjMnXSwgWzAuNTIsJyM2NTczN2QnXSwgWzEsJyMxZDI2MmQnXV0pICsKICAgIHNoYWRvd0dyYWQoaWQpICsgYmx1ckRlZihpZCwgTWF0aC5tYXgoMC44LCByRGUgKiBzICogMC4wOCkpOwoKICBsZXQgYiA9ICcnOwogIGIgKz0gYDxlbGxpcHNlIGN4PSIke2Z4KFgoeGMpKX0iIGN5PSIke2Z4KFkobWF4WSkgKyAxNCl9IiByeD0iJHtmeChMICogcyAqIDAuNDgpfSIgcnk9IiR7ZngoTWF0aC5tYXgoOCwgckRlICogcyAqIDAuNSkpfSIgZmlsbD0idXJsKCMke2lkfS1zaCkiLz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChwaXBlWDApKX0iIHk9IiR7ZngoWSgtckRlKSl9IiB3aWR0aD0iJHtmeCgocGlwZVgxIC0gcGlwZVgwKSAqIHMpfSIgaGVpZ2h0PSIke2Z4KERlICogcyl9IiByeD0iJHtmeChNYXRoLm1heCgxLCByRGUgKiBzICogMC4wOCkpfSIgZmlsbD0idXJsKCMke2lkfXBpcGUpIiAke0VER0V9Lz5gOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChwaXBlWDApIC0gMSl9IiB5PSIke2Z4KFkoLXJEaSkpfSIgd2lkdGg9IiR7ZngoKHBpcGVYMSAtIHBpcGVYMCkgKiBzICsgMil9IiBoZWlnaHQ9IiR7ZngoRGkgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1ib3JlKSIvPmA7CiAgYiArPSBgPHJlY3QgeD0iJHtmeChYKHBpcGVYMCkgKyAzKX0iIHk9IiR7ZngoWSgtckRlICogMC40MikpfSIgd2lkdGg9IiR7ZngoTWF0aC5tYXgoNSwgKHBpcGVYMSAtIHBpcGVYMCkgKiBzIC0gNikpfSIgaGVpZ2h0PSIke2Z4KE1hdGgubWF4KDIuNSwgckRlICogcyAqIDAuMjIpKX0iIGZpbGw9IiNmZmYiIG9wYWNpdHk9IjAuNDIiIHJ4PSIzIiBmaWx0ZXI9InVybCgjJHtpZH0tYmwpIi8+YDsKCiAgaWYgKGlzVEMpIHsKICAgIGIgKz0gYDxyZWN0IHg9IiR7ZngoWCgwKSl9IiB5PSIke2Z4KFkoLXJFbmQpKX0iIHdpZHRoPSIke2Z4KGZsYW5nZVQgKiBzKX0iIGhlaWdodD0iJHtmeCgyICogckVuZCAqIHMpfSIgcng9IiR7ZngoTWF0aC5tYXgoMS4yLCBmbGFuZ2VUICogcyAqIDAuMjUpKX0iIGZpbGw9InVybCgjJHtpZH1lbmQpIiAke0VER0V9Lz5gOwogICAgYiArPSBgPHJlY3QgeD0iJHtmeChYKEwgLSBmbGFuZ2VUKSl9IiB5PSIke2Z4KFkoLXJFbmQpKX0iIHdpZHRoPSIke2Z4KGZsYW5nZVQgKiBzKX0iIGhlaWdodD0iJHtmeCgyICogckVuZCAqIHMpfSIgcng9IiR7ZngoTWF0aC5tYXgoMS4yLCBmbGFuZ2VUICogcyAqIDAuMjUpKX0iIGZpbGw9InVybCgjJHtpZH1lbmQpIiAke0VER0V9Lz5gOwogIH0gZWxzZSB7CiAgICBjb25zdCBhID0gTWF0aC5taW4oZW5kVmFsdWUsIEwpOwogICAgW2EsIEwgLSBhXS5mb3JFYWNoKHggPT4gewogICAgICBiICs9IGA8bGluZSB4MT0iJHtmeChYKHgpKX0iIHkxPSIke2Z4KFkoLXJEZSkgKyAxKX0iIHgyPSIke2Z4KFgoeCkpfSIgeTI9IiR7ZngoWShyRGUpIC0gMSl9IiBzdHJva2U9IiMyZjM5NDAiIHN0cm9rZS1vcGFjaXR5PSIwLjgyIiBzdHJva2Utd2lkdGg9IjIiLz5gOwogICAgfSk7CiAgfQoKICBjb25zdCBsZWZ0ID0geGMgLSBiYXNlSGFsZiwgcmlnaHQgPSB4YyArIGJhc2VIYWxmOwogIGIgKz0gYDxwYXRoIGQ9Ik0ke2Z4KFgobGVmdCkpfSwke2Z4KFkoLXJEZSkpfSBMJHtmeChYKHVwcGVyTGVmdCkpfSwke2Z4KFkoc2VhbFkpKX0gTCR7ZngoWCh1cHBlclJpZ2h0KSl9LCR7ZngoWShzZWFsWSkpfSBMJHtmeChYKHJpZ2h0KSl9LCR7ZngoWSgtckRlKSl9IFoiIGZpbGw9InVybCgjJHtpZH1oZWFkKSIgJHtFREdFfS8+YDsKICBiICs9IGA8cmVjdCB4PSIke2Z4KFgodXBwZXJMZWZ0KSl9IiB5PSIke2Z4KFkodG9wKSl9IiB3aWR0aD0iJHtmeCh1cHBlckRlICogcyl9IiBoZWlnaHQ9IiR7ZngoaGVhZEggKiBzKX0iIHJ4PSIke2Z4KE1hdGgubWF4KDEuNCwgaGVhZEggKiBzICogMC4wOCkpfSIgZmlsbD0idXJsKCMke2lkfWhlYWQpIiAke0VER0V9Lz5gOwogIGIgKz0gYDxwYXRoIGQ9Ik0ke2Z4KFgoaW5uZXJMZWZ0KSl9LCR7ZngoWSh0b3ApIC0gMSl9IEwke2Z4KFgoaW5uZXJMZWZ0KSl9LCR7ZngoWSgtckRlICogMC4yMikpfQogICAgUSR7ZngoWCh4YykpfSwke2Z4KFkockRpICogMC45MikpfSAke2Z4KFgoaW5uZXJSaWdodCkpfSwke2Z4KFkoLXJEZSAqIDAuMjIpKX0KICAgIEwke2Z4KFgoaW5uZXJSaWdodCkpfSwke2Z4KFkodG9wKSAtIDEpfSBaIiBmaWxsPSJ1cmwoIyR7aWR9Ym9yZSkiICR7RURHRX0vPmA7CiAgWy0xLDFdLmZvckVhY2goc2lkZSA9PiB7CiAgICBjb25zdCBieCA9IHhjICsgc2lkZSAqIHVwcGVyRGUgKiAwLjU2LCBiciA9IE1hdGgubWF4KDEuOCwgdXBwZXJEZSAqIDAuMDU1KTsKICAgIGIgKz0gYDxyZWN0IHg9IiR7ZngoWChieCAtIGJyKSl9IiB5PSIke2Z4KFkodG9wICsgaGVhZEggKiAwLjA4KSl9IiB3aWR0aD0iJHtmeCgyICogYnIgKiBzKX0iIGhlaWdodD0iJHtmeChoZWFkSCAqIDAuODYgKiBzKX0iIHJ4PSIke2Z4KGJyICogcyAqIDAuMzUpfSIgZmlsbD0idXJsKCMke2lkfWVuZCkiICR7RURHRX0vPmA7CiAgICBiICs9IGA8ZWxsaXBzZSBjeD0iJHtmeChYKGJ4KSl9IiBjeT0iJHtmeChZKHRvcCkpfSIgcng9IiR7ZngoYnIgKiAxLjI1ICogcyl9IiByeT0iJHtmeChiciAqIDAuNzUgKiBzKX0iIGZpbGw9InVybCgjJHtpZH1lbmQpIiAke0VER0V9Lz5gOwogIH0pOwogIGIgKz0gYDxsaW5lIHgxPSIke2Z4KFgodXBwZXJMZWZ0KSl9IiB5MT0iJHtmeChZKHNlYWxZKSl9IiB4Mj0iJHtmeChYKHVwcGVyUmlnaHQpKX0iIHkyPSIke2Z4KFkoc2VhbFkpKX0iIHN0cm9rZT0iIzE1MWMyMiIgc3Ryb2tlLXdpZHRoPSIyIiBvcGFjaXR5PSIwLjgyIi8+YDsKCiAgcmV0dXJuIHN2Z1dyYXAodncsIHZoLCBkZWZzLCBiLAogICAgYmFkZ2UodncsICdDb25uZWN0LUZsYW5zY2ggSW5saW5lIChDRkkpIMK3ICcgKwogICAgICAoaXNUQyA\\\/ICdUcmktQ2xhbXAnIDogJ0J1dHQgV2VsZCcpICsgJyDCtyAnICsgc2l6ZUxhYmVsKG8pKSwgbGVnZW5kKHZoLCBvKSk7Cn0KCi8qIC0tIFBsYXR6aGFsdGVyOiB1bmJla2FubnRlciAvIG5pY2h0LXplaWNoZW5iYXJlciBzdmdUeXBlIChOYWNocHJ1ZWYtQmVmdW5kIGIpIC0tCiAqIEZhZWxsdCBudXIgbm9jaCBhbiwgd2VubiBlaW4gYmVsZWd0ZXMgUGZsaWNodG1hc3MgZmVobHQgKHouIEIuIERpY2h0dW5nIG9obmUKICogRS9DLCBCbGluZGRlY2tlbCBvaG5lIERlY2tlbHN0YWVya2UpIG9kZXIgZWluIHN2Z1R5cGUgZ2FueiB1bmJla2FubnQgaXN0LgogKiBTdGF0dCBzdGlsbCBlaW5lIGZhbHNjaGUgQ2xhbXB2ZXJiaW5kdW5nIChmcnVlaGVyOiBkZWZhdWx0IC0+IHJDbGFtcCkgenUKICogcmVuZGVybiwgZWluIGtsYXJlciAiWmVpY2hudW5nIGZvbGd0Ii1IaW53ZWlzLiBFcyB3aXJkIEJFV1VTU1Qga2VpbiBGaXR0aW5nCiAqIGdlemVpY2huZXQuICovCmZ1bmN0aW9uIHJQbGF0emhhbHRlcihvLCB2dywgdmgpIHsKICBjb25zdCBjeCA9IHZ3IC8gMiwgY3kgPSB2aCAvIDI7CiAgY29uc3QgYncgPSBNYXRoLm1pbigzODAsIHZ3IC0gODgpLCBiaCA9IDEzMjsKICBsZXQgYiA9ICcnOwogIGIgKz0gYDxyZWN0IHg9IiR7ZngoY3ggLSBidyAvIDIpfSIgeT0iJHtmeChjeSAtIGJoIC8gMiAtIDYpfSIgd2lkdGg9IiR7ZngoYncpfSIgaGVpZ2h0PSIke2Z4KGJoKX0iIHJ4PSIxNCIgZmlsbD0iI2Y0ZjZmOCIgc3Ryb2tlPSIjOGE4Zjk2IiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iNyA1Ii8+YDsKICBiICs9IGA8cGF0aCBkPSJNJHtmeChjeCAtIDI0KX0sJHtmeChjeSAtIDEwKX0gbDE0LC0xNCAxMCwxMCAyMCwtMjIgTSR7ZngoY3ggLSAyNCl9LCR7ZngoY3kgKyA4KX0gaDU4IiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWMiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz5gOwogIGIgKz0gYDx0ZXh0IHg9IiR7ZngoY3gpfSIgeT0iJHtmeChjeSArIDM0KX0iIHRleHQtYW5jaG9yPSJtaWRkbGUiICR7Rk9OVH0gZm9udC1zaXplPSIxNSIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzFjMWMxYyI+WmVpY2hudW5nIGZvbGd0PC90ZXh0PmA7CiAgcmV0dXJuIHN2Z1dyYXAodncsIHZoLCAnJywgYiwgYmFkZ2UodncsICdaZWljaG51bmcgZm9sZ3QnKSwgbGVnZW5kKHZoLCBvKSk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRGlzcGF0Y2ggKi8KZnVuY3Rpb24gcmVuZGVyRml0dGluZyhwYXJhbXMsIG9wdHMpIHsKICBvcHRzID0gb3B0cyB8fCB7fTsKICBjb25zdCB2dyA9IG9wdHMud2lkdGggfHwgNzYwLCB2aCA9IG9wdHMuaGVpZ2h0IHx8IDQ0MDsKICBjb25zdCByZXF1ZXN0ZWRUeXBlID0gcGFyYW1zICYmIHBhcmFtcy50eXBlOwogIGNvbnN0IGludmFsaWRDb25uZWN0ID0gKHJlcXVlc3RlZFR5cGUgPT09ICdjb25uZWN0ZmxhbnNjaCcgJiYgIXZhbGlkQ29ubmVjdGZsYW5zY2gocGFyYW1zKSkgfHwKICAgIChyZXF1ZXN0ZWRUeXBlID09PSAnY29ubmVjdGlubGluZScgJiYgIXZhbGlkQ29ubmVjdGlubGluZShwYXJhbXMpKTsKICBjb25zdCBvID0gbm9ybWFsaXplKHBhcmFtcyk7CiAgaWYgKGludmFsaWRDb25uZWN0KSByZXR1cm4gclBsYXR6aGFsdGVyKG8sIHZ3LCB2aCk7CiAgc3dpdGNoIChvLnR5cGUpIHsKICAgIGNhc2UgJ2NsYW1wc3R1dHplbic6IHJldHVybiByQ2xhbXAobywgdncsIHZoLCBmYWxzZSk7CiAgICAvLyBFaW56ZWxuZXIgU3R1dHplbiAoVENEL1RDUyk6IGtlaW4gendlaXRlcyBSb2hyLCBrZWluZSBEaWNodHVuZywga2VpbmUgS2xhbW1lci4KICAgIGNhc2UgJ3N0dXR6ZW4nOiAgICAgIHJldHVybiByQ2xhbXAobywgdncsIHZoLCAnc2luZ2xlJyk7CiAgICBjYXNlICdibGluZGthcHBlJzogICByZXR1cm4gckNsYW1wKG8sIHZ3LCB2aCwgdHJ1ZSk7CiAgICAvLyBSdW5kZSA3IChXLTA1OSk6IHJlaW5lIEZsYW5zY2gtRGFyc3RlbGx1bmcgb2huZSBSb2hybWFzc2UgKFR5cCBCRCkuCiAgICBjYXNlICdibGluZGRlY2tlbCc6ICByZXR1cm4gckJsaW5kZGVja2VsKG8sIHZ3LCB2aCk7CiAgICBjYXNlICdrbGFtbWVyJzogICAgICByZXR1cm4gcktsYW1tZXIobywgdncsIHZoKTsKICAgIGNhc2UgJ2JvZ2VuOTAnOiAgICAgIHJldHVybiByQm9nZW4obywgdncsIHZoLCA5MCk7CiAgICBjYXNlICdib2dlbjQ1JzogICAgICByZXR1cm4gckJvZ2VuKG8sIHZ3LCB2aCwgNDUpOwogICAgY2FzZSAndHN0dWVjayc6ICAgICAgcmV0dXJuIHJUc3R1ZWNrKG8sIHZ3LCB2aCk7CiAgICBjYXNlICdyZWR1emllcnVuZyc6ICByZXR1cm4gclJlZHV6aWVydW5nKG8sIHZ3LCB2aCk7CiAgICBjYXNlICdjb25uZWN0ZmxhbnNjaCc6IHJldHVybiByQ29ubmVjdGZsYW5zY2gobywgdncsIHZoKTsKICAgIGNhc2UgJ2Nvbm5lY3RpbmxpbmUnOiAgcmV0dXJuIHJDb25uZWN0aW5saW5lKG8sIHZ3LCB2aCk7CiAgICAvLyBUeXAgRCAnZGljaHR1bmcnOiBlY2h0ZSBEYXJzdGVsbHVuZyBtaXQgYmVsZWd0ZW4gRS9DLU1hc3Nlbjsgb2huZSBzaWUKICAgIC8vIGZhZWxsdCByRGljaHR1bmcgc2VsYnN0IGF1ZiBkZW4gUGxhdHpoYWx0ZXIgKE5JRSByQ2xhbXApLgogICAgY2FzZSAnZGljaHR1bmcnOiAgICAgcmV0dXJuIHJEaWNodHVuZyhvLCB2dywgdmgpOwogICAgLy8gU2ljaGVyaGVpdHNuZXR6OiBqZWRlciB1bmJla2FubnRlIHN2Z1R5cGUgYmVrb21tdCBkZW4gUGxhdHpoYWx0ZXIgKE5hY2hwcnVlZi1CZWZ1bmQgYikuCiAgICBkZWZhdWx0OiAgICAgICAgICAgICByZXR1cm4gclBsYXR6aGFsdGVyKG8sIHZ3LCB2aCk7CiAgfQp9Cgpjb25zdCBBUEkgPSB7IHJlbmRlckZpdHRpbmcsIE5BTUUgfTsKaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IEFQSTsKaWYgKHJvb3QpIHJvb3QuV2Vpc3NGaXR0aW5nUmVuZGVyID0gQVBJOwoKLyogLS0tLS0tLS0tIE5vZGUtU2VsYnN0dGVzdDogYG5vZGUgcmVuZGVyLmpzYCAtPiBxYS9yZW5kZXItdmlldy0qLnN2ZyAtLS0tLS0gKi8KaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiByZXF1aXJlLm1haW4gPT09IG1vZHVsZSkgewogIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKSwgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTsKICBjb25zdCBvdXQgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAncWEnKTsgdHJ5IHsgZnMubWtkaXJTeW5jKG91dCwgeyByZWN1cnNpdmU6IHRydWUgfSk7IH0gY2F0Y2ggKGUpIHt9CiAgY29uc3Qgc2FtcGxlcyA9IFsKICAgIFsnY2xhbXAnLCAgICB7IHR5cGU6J2NsYW1wc3R1dHplbicsIGRuOjI1LCBvZDoyOSwgd2FsbDoxLjUsIGxlbmd0aDozNiwgZmxhbmdlT2Q6NTAuNSwgZ2Fza2V0TWF0ZXJpYWw6J1BURkUnLCBzdXJmYWNlOidINCcsIHdlcmtzdG9mZjonMS40NDM1JyB9XSwKICAgIFsnYmxpbmQnLCAgICB7IHR5cGU6J2JsaW5kZGVja2VsJywgZmxhbmdlT2Q6NTAuNSwgbGVuZ3RoOjYuMzUsIHN1cmZhY2U6J0gzJywgd2Vya3N0b2ZmOicxLjQ0MDQnIH1dLAogICAgWydrbGFtbWVyJywgIHsgdHlwZTona2xhbW1lcicsIGZsYW5nZU9kOjY0LCBrbGFtbWVyQTo2Ni41LCBrbGFtbWVyVHlwOidLTExJJywga2xhbW1lck11dHRlcjonUycsIHN1cmZhY2U6JycsIHdlcmtzdG9mZjonMS40MzA4JyB9XSwKICAgIFsnZGljaHR1bmcnLCB7IHR5cGU6J2RpY2h0dW5nJywgZ2Fza2V0T2Q6NTAuNSwgZ2Fza2V0SWQ6MjcuNywgZ2Fza2V0VHlwZTonSUknLCBnYXNrZXRNYXRlcmlhbDonRVBETScsIHN1cmZhY2U6JycsIHdlcmtzdG9mZjonMS40NDA0JyB9XSwKICAgIFsnYm9nZW45MCcsICB7IHR5cGU6J2JvZ2VuOTAnLCBkbjo1MCwgb2Q6NTMsIHdhbGw6MS41LCBsZW5ndGg6NDAsIGJlbmRSYWRpdXM6NzAsIHN1cmZhY2U6J0g0JyB9XSwKICAgIFsnYm9nZW40NScsICB7IHR5cGU6J2JvZ2VuNDUnLCBkbjo0MCwgb2Q6NDEsIHdhbGw6MS41LCBsZW5ndGg6NDAsIGJlbmRSYWRpdXM6NjAsIHN1cmZhY2U6J0gzJyB9XSwKICAgIFsndHN0dWVjaycsICB7IHR5cGU6J3RzdHVlY2snLCBkbjo0MCwgb2Q6NDEsIHdhbGw6MS41LCBsZW5ndGg6MTIwLCBicmFuY2hPZDoyOSwgc3VyZmFjZTonSDQnIH1dLAogICAgWydyZWR1eicsICAgIHsgdHlwZToncmVkdXppZXJ1bmcnLCBkbjo1MCwgb2Q6NTMsIHdhbGw6MS41LCBsZW5ndGg6NjIsIG9kMjoyOSwgZWNjZW50cmljOnRydWUsIHN1cmZhY2U6J0gzJyB9XQogIF07CiAgY29uc3QgcGFnZSA9IFsnPCFkb2N0eXBlIGh0bWw+PG1ldGEgY2hhcnNldD0idXRmLTgiPjx0aXRsZT5SZW5kZXItQW5zaWNodCBRQTwvdGl0bGU+JywKICAgICc8c3R5bGU+Ym9keXttYXJnaW46MDtwYWRkaW5nOjIwcHg7YmFja2dyb3VuZDojZWNlZWYwO2ZvbnQtZmFtaWx5OnN5c3RlbS11aX0nLAogICAgJy5jYXJke2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjQ4MHB4O21hcmdpbjo4cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCNmYWZiZmMsI2U4ZWJlZSk7Ym9yZGVyLXJhZGl1czoxNHB4O3BhZGRpbmc6OHB4O3ZlcnRpY2FsLWFsaWduOnRvcH0nLAogICAgJ2gze2ZvbnQ6NjAwIDEzcHggc3lzdGVtLXVpO21hcmdpbjo0cHggNnB4O2NvbG9yOiMyMjJ9PC9zdHlsZT4nXTsKICBzYW1wbGVzLmZvckVhY2goKFtuLCBwXSkgPT4gewogICAgY29uc3Qgc3ZnID0gcmVuZGVyRml0dGluZyhwKTsKICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKG91dCwgJ3JlbmRlci12aWV3LScgKyBuICsgJy5zdmcnKSwgc3ZnKTsKICAgIHBhZ2UucHVzaChgPGRpdiBjbGFzcz0iY2FyZCI+PGgzPiR7bn08L2gzPiR7c3ZnfTwvZGl2PmApOwogICAgY29uc29sZS5sb2coJ29rICcgKyBuLnBhZEVuZCgxMCkgKyAnIGJ5dGVzPScgKyBzdmcubGVuZ3RoKTsKICB9KTsKICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXQsICdyZW5kZXItdmlldy5odG1sJyksIHBhZ2Uuam9pbignXG4nKSk7CiAgY29uc29sZS5sb2coJy0+ICcgKyBwYXRoLmpvaW4ob3V0LCAncmVuZGVyLXZpZXcuaHRtbCcpKTsKfQoKfSkodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBudWxsKTsKCjwvc2NyaXB0PgogIDxzY3JpcHQ+Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIFdlaXNzIEFwcGFyYXRlYmF1IC0gRml0dGluZ3MtS29uZmlndXJhdG9yICDCtyAgYXBwLmpzCiAqIFN0YXRlLCBCZXJhdGVyLUZsb3csIExpdmUtWmVpY2hudW5nLCBMaXZlLVByZWlzLCBDb25zdHJhaW50cywgVHlwZW5zY2hsdWVzc2VsLAogKiBSRlEgKG1haWx0byksIFRlaWxlbi1MaW5rLCBQREYtRXhwb3J0LiBWYW5pbGxhLCBlaW4gV2lkZ2V0LCBpRnJhbWUtdGF1Z2xpY2guCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCid1c2Ugc3RyaWN0JzsKKGZ1bmN0aW9uICgpIHsKICBjb25zdCBEID0gd2luZG93LldFSVNTX0RBVEEsIFNWRyA9IHdpbmRvdy5XZWlzc0ZpdHRpbmdTVkc7CiAgaWYgKCFEIHx8ICFTVkcpIHsgY29uc29sZS5lcnJvcignV0VJU1M6IGRhdGEuanMvZHJhdy5qcyBmZWhsZW4nKTsgcmV0dXJuOyB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXRpbGl0aWVzICovCiAgY29uc3QgJCA9IHMgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKTsKICBjb25zdCBlc2MgPSBzID0+IFN0cmluZyhzID09IG51bGwgPyAnJyA6IHMpLnJlcGxhY2UoL1smPD4iXS9nLCBjID0+ICh7ICcmJzonJmFtcDsnLCc8JzonJmx0OycsJz4nOicmZ3Q7JywnIic6JyZxdW90OycgfVtjXSkpOwogIGNvbnN0IGV1ciA9IHYgPT4gdi50b0xvY2FsZVN0cmluZygnZGUtREUnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pOwoKICBmdW5jdGlvbiByZW5kZXJQcmljZUhpbnQoKSB7CiAgICBjb25zdCBib3ggPSAkKCcjd3otcHJpY2UtaGludCcpOwogICAgaWYgKCFib3gpIHJldHVybjsKICAgIGNvbnN0IGxhYmVsID0gRC5wcmVpc2UgJiYgRC5wcmVpc2UuZ3J1cHBlID09PSAnb2VtJyA\\\/ICdPRU0tUHJlaXNlJyA6ICdFbmRrdW5kZW5wcmVpc2UnOwogICAgY29uc3QgbGl2ZSA9IGlkID0+IHsKICAgICAgY29uc3QgbiA9IEQubm9ybWVuLmZpbmQoeCA9PiB4LmlkID09PSBpZCk7CiAgICAgIHJldHVybiAhIShuICYmIG4ucHJlaXNNb2R1cyA9PT0gJ2xpdmUnICYmIEQucHJlaXNlICYmIEQucHJlaXNlLmZyZWlnZWdlYmVuID09PSB0cnVlKTsKICAgIH07CiAgICBpZiAoRC5wcmVpc2UgJiYgRC5wcmVpc2UuZ3J1cHBlKSB7CiAgICAgIGJveC5pbm5lckhUTUwgPSBgPGI+JHtsYWJlbH08L2I+IMK3IERJTiAzMjY3NiAke2xpdmUoJ2RpbjMyNjc2JykgPyAnbWl0IFByZWlzZW4nIDogJ2F1ZiBBbmZyYWdlJ30gwrcgRElOIDExODY1ICR7bGl2ZSgnZGluMTE4NjUnKSA\\\/ICdtaXQgUHJlaXNlbicgOiAnYXVmIEFuZnJhZ2UnfWA7CiAgICB9CiAgfQoKICBjb25zdCBJQ09OID0gewogICAgcGhhcm1hOic8cGF0aCBkPSJNOSAzaDZNMTAgM3Y2bC01IDhhMiAyIDAgMCAwIDEuOCAzaDEwLjRBMiAyIDAgMCAwIDE5IDE3bC01LThWM003LjUgMTRoOSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4nLAogICAgc3RlcmlsdGVjaG5pazonPHBhdGggZD0iTTEyIDNsNyAzdjVjMCA0LjQtMyA3LjctNyA5LTQtMS4zLTctNC42LTctOVY2bDctM3pNOSAxMmwyIDIgNC00IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBjaGVtaWU6JzxwYXRoIGQ9Ik0xMCAzdjVsLTQuNSA5QTIgMiAwIDAgMCA3LjMgMjBoOS40YTIgMiAwIDAgMCAxLjgtM0wxNCA4VjNNOSAzaDZNNi41IDE1aDExIiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBsZWJlbnNtaXR0ZWw6JzxwYXRoIGQ9Ik02IDN2N2EzIDMgMCAwIDAgNiAwVjNNOSAzdjE4TTE3IDNjLTEuNSAxLjUtMiAzLTIgNXY0aDNWM00xOCAxMnY5IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBpbmZvOic8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI5IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjciLz48cGF0aCBkPSJNMTIgMTF2NU0xMiA4aC4wMSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4nLAogICAgY29weTonPHJlY3QgeD0iOSIgeT0iOSIgd2lkdGg9IjExIiBoZWlnaHQ9IjExIiByeD0iMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43Ii8+PHBhdGggZD0iTTUgMTVWNWEyIDIgMCAwIDEgMi0yaDEwIiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjciLz4nLAogICAgY2hlY2s6JzxwYXRoIGQ9Ik01IDEybDQgNCAxMC0xMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+JywKICAgIGFycm93UjonPHBhdGggZD0iTTUgMTJoMTRNMTMgNmw2IDYtNiA2IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjkiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicsCiAgICBhcnJvd0w6JzxwYXRoIGQ9Ik0xOSAxMkg1TTExIDZsLTYgNiA2IDYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+JywKICAgIHBkZjonPHBhdGggZD0iTTE0IDNIN2EyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMlY4bC01LTV6TTE0IDN2NWg1IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4nLAogICAgc2hhcmU6JzxwYXRoIGQ9Ik00IDEydjdhMSAxIDAgMCAwIDEgMWgxNGExIDEgMCAwIDAgMS0xdi03TTEyIDE1VjNNOCA3bDQtNCA0IDQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+JywKICAgIHBsdXM6JzxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+JywKICAgIGRyYXc6JzxwYXRoIGQ9Ik00IDE3bDYtNiA0IDQgNi04TTQgMjFoMTYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+JywKICAgIGV4cGFuZDonPHBhdGggZD0iTTQgOVY0aDVNMjAgOVY0aC01TTQgMTV2NWg1TTIwIDE1djVoLTUiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+JywKICAgIGNsb3NlOic8cGF0aCBkPSJNNiA2bDEyIDEyTTE4IDZMNiAxOCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS45IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4nLAogICAgcmVzZXQ6JzxwYXRoIGQ9Ik0zIDEyYTkgOSAwIDEgMCAyLjYtNi40TDMgOE0zIDN2NWg1IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPicKICB9OwogIGNvbnN0IGljID0gKG4sIGNscykgPT4gYDxzdmcgY2xhc3M9IiR7Y2xzIHx8ICdpYyd9IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4ke0lDT05bbl0gfHwgJyd9PC9zdmc+YDsKCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb29rdXBzICovCiAgY29uc3QgdHlwT2JqID0gaWQgPT4gRC50eXBlbi5maW5kKHQgPT4gdC5pZCA9PT0gaWQpOwogIGNvbnN0IGRpY2h0T2JqID0gaWQgPT4gRC5kaWNodHVuZ2VuLmZpbmQoZCA9PiBkLmlkID09PSBpZCk7CiAgY29uc3QgaXNCZW5kID0gdCA9PiB0ICYmICh0LnN2Z1R5cGUgPT09ICdib2dlbjkwJyB8fCB0LnN2Z1R5cGUgPT09ICdib2dlbjQ1Jyk7CiAgY29uc3QgaXNDb25uZWN0ID0gdCA9PiAhISh0ICYmIHQuY29ubmVjdCk7CiAgY29uc3QgaXNEaW4xMTg2NSA9IHQgPT4gISEodCAmJiB0Lm5vcm0gPT09ICdkaW4xMTg2NScpOwogIGNvbnN0IHJvd3MzMiA9IHIgPT4gRC5tYXNzZS5kaW4zMjY3Ni5yZWloZW5bcl0ucm93czsKICBjb25zdCBsYmwgPSByID0+IHIgPyAoci5sYWJlbCB8fCByLmlkKSA6ICcnOwogIGNvbnN0IGNvbm5lY3REYXRhID0gdCA9PiAhdCA\\\/IG51bGwgOiAodC5pZCA9PT0gJ0NGJyA\\\/IEQubWFzc2UuY29ubmVjdC5jZiA6IHQuaWQgPT09ICdDRkknID8gRC5tYXNzZS5jb25uZWN0LmNmaSA6IG51bGwpOwogIC8vIFdlcmtzdG9mZnNlcmllIGRlciBDb25uZWN0LUZsYW5zY2hlOiB3aXJkIHVlYmVyIGRpZSBXZXJrc3RvZmZudW1tZXIgZ2VmdWVocnQKICAvLyAoSGVyc3RlbGxlcmt1ZXJ6ZWwgc2luZCBzZWl0IGRlbSAyNy4wNy4yMDI2IHJhdXMsIHNpZWhlIGRhdGEuanMpLgogIGNvbnN0IGNvbm5lY3RTZXJpZSA9IHMgPT4gZWZmV2Vya3N0b2ZmKHMpOwogIGZ1bmN0aW9uIG9iZXJmbGFlY2hlbk9wdGlvbmVuKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocyAmJiBzLnR5cCk7CiAgICAvLyBEaWUgQ29ubmVjdC1EYXRlbmJsYWV0dGVyIGJlbGVnZW4gZnVlciBDRiBkaWUgQXVzZnVlaHJ1bmcgSDQuCiAgICAvLyBGdWVyIENGSSBpc3QgenVzYWV0emxpY2ggZGllIGVsZWt0cm9wb2xpZXJ0ZSBBdXNmdWVocnVuZyBING8gYXVmZ2VmdWVocnQuCiAgICAvLyBBbmRlcmUgRElOLTExODY2LUtsYXNzZW4gd2VyZGVuIGZ1ZXIgZGllc2UgUHJvZHVrdGZhbWlsaWVuIG5pY2h0IGFuZ2Vib3Rlbi4KICAgIGNvbnN0IGlkcyA9IHQgJiYgdC5pZCA9PT0gJ0NGJyA\\\/IFsnSDQnXSA6IHQgJiYgdC5pZCA9PT0gJ0NGSScgPyBbJ0g0JywgJ0g0byddIDogbnVsbDsKICAgIHJldHVybiBpZHMgPyBpZHMubWFwKGlkID0+IEQub2JlcmZsYWVjaGVuLmZpbmQobyA9PiBvLmlkID09PSBpZCkpLmZpbHRlcihCb29sZWFuKSA6IEQub2JlcmZsYWVjaGVuOwogIH0KICBjb25zdCBvYmVyZmxhZWNoZUVybGF1YnQgPSBzID0+IG9iZXJmbGFlY2hlbk9wdGlvbmVuKHMpLnNvbWUobyA9PiBvLmlkID09PSBzLm9iZXJmbGFlY2hlKTsKCiAgLyogLS0gTWFzc3F1ZWxsZSBqZSBUeXAgKGRhdGEuanM6IHR5cC5tYXNzZVF1ZWxsZSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgKiBEZXIgZGlja3dhbmRpZ2UgVGFua3N0dXR6ZW4gKFRDRCkgaGF0IGVpbmUgRUlHRU5FIE1hc3N0YWJlbGxlIChtYXNzZS50Y2QsCiAgICogemltbWVybGluLURhdGVuYmxhdHQsIEFlbmRlcnVuZ3NwbGFuIEFic2Nobml0dCBGKSAtIGFuZGVyZSBSb2hybWFzc2UgYWxzIGRpZQogICAqIGR1ZW5ud2FuZGlnZSBESU4tMzI2NzYtUmVpaGUuIEJpcyAxNi4wNy4yMDI2IHdhciBkYXMgRmxhZyByZWluZSBEb2t1IHVuZCByb3dzRm9yKCkKICAgKiBsaWVmZXJ0ZSBmdWVyIFRDRCB1bmJlZGluZ3Qgcm93czMyKCkgLT4gVENEL0ROMjUgemVpZ3RlIGRpZSBkdWVubndhbmRpZ2VuIOKMgDI5IHggMSw1CiAgICogc3RhdHQgZGVyIGRpY2t3YW5kaWdlbiDijIAzNCB4IDQuIFdlciBoaWVyIGVpbmVuIFR5cCBlcmdhZW56dDogbWFzc2VRdWVsbGUgaW4gZGF0YS5qcwogICAqIHNldHplbiB1bmQgaGllciBlaW50cmFnZW4gLSBOSUUgc3RpbGxzY2h3ZWlnZW5kIGF1ZiByb3dzMzIoKSB6dXJ1ZWNrZmFsbGVuLgogICAqIERpZSBUQ0QtWmVpbGVuIHRyYWdlbiBiZXd1c3N0IEFOREVSRSBGZWxkbmFtZW4gYWxzIGRpZSBkdWVubndhbmRpZ2VuOgogICAqICAgZHVlbm53YW5kaWc6IHR1YmVPRCAvIHR1YmVJRCAvIGtrIC8ga2wgLyBnYXNrZXRPRCAvIGdhc2tldElECiAgICogICBUQ0Q6ICAgICAgICAgYXVzc2VuRCAoU3BhbHRlIEEpIC8gaG9laGUgKDYwKSAvIHdhbGwgKDQpIC0ga2VpbiB0dWJlT0QsIGtlaW4ga2sva2wsCiAgICogICAgICAgICAgICAgICAga2VpbmUgSW5uZW4tL0RpY2h0dW5nc21hc3NlIChpbSBEYXRlbmJsYXR0IG5pY2h0IGdlbGlzdGV0KS4KICAgKiBEZXNoYWxiIE5JRSB1bmdlcHJ1ZWZ0IHJ3LnR1YmVPRCBsZXNlbiAtPiBpbW1lciBvZE9mKHJ3KS4gKi8KICBjb25zdCBNQVNTUVVFTExFTiA9IHsgdGNkOiByID0+IEQubWFzc2UudGNkLnJlaWhlbltyXS5yb3dzIH07CiAgY29uc3Qgcm93c1F1ZWxsZSA9ICh0LCByZWloZSkgPT4gewogICAgY29uc3QgcSA9IHQgJiYgdC5tYXNzZVF1ZWxsZSA\\\/IE1BU1NRVUVMTEVOW3QubWFzc2VRdWVsbGVdIDogbnVsbDsKICAgIHJldHVybiBxID8gcShyZWloZSkgOiByb3dzMzIocmVpaGUpOwogIH07CiAgLyogQXVzc2VuZHVyY2htZXNzZXIgZWluZXIgWmVpbGUgLSBlZ2FsIGF1cyB3ZWxjaGVyIFRhYmVsbGUuCiAgICogVENEOiBhdXNzZW5EIChTcGFsdGUgQSBkZXMgRGF0ZW5ibGF0dHMpLiBEdWVubndhbmRpZzogdHViZU9ELgogICAqIEJlaWRlcyBzaW5kIGdlbGlzdGV0ZSBRdWVsbHdlcnRlLCBoaWVyIHdpcmQgTklDSFRTIGdlcmVjaG5ldC4gKi8KICBjb25zdCBvZE9mID0gcncgPT4gcncgPyAocncuYXVzc2VuRCAhPSBudWxsID8gcncuYXVzc2VuRCA6IChydy50dWJlT0QgIT0gbnVsbCA\\\/IHJ3LnR1YmVPRCA6IHJ3LkRlKSkgOiBudWxsOwogIGNvbnN0IGlkT2YgPSBydyA9PiBydyA\\\/IChydy50dWJlSUQgIT0gbnVsbCA\\\/IHJ3LnR1YmVJRCA6IHJ3LkRpKSA6IG51bGw7CiAgY29uc3Qgd2FsbE9mID0gcncgPT4gewogICAgaWYgKCFydykgcmV0dXJuIG51bGw7CiAgICBpZiAocncud2FsbCAhPSBudWxsKSByZXR1cm4gcncud2FsbDsKICAgIGNvbnN0IG9kID0gb2RPZihydyksIGlkID0gaWRPZihydyk7CiAgICByZXR1cm4gb2QgIT0gbnVsbCAmJiBpZCAhPSBudWxsID8gKG9kIC0gaWQpIC8gMiA6IG51bGw7CiAgfTsKICAvKiBMYWVuZ2VubWFzcyBlaW5lciBaZWlsZToKICAgKiAgIFRDRCAgLT4gSG9laGUgaCA9IDYwIG1tIChUQ0RfS09OU1QsIFdlaXNzLVN0YW5kYXJkIGxhdXQgQmVybmQpIC0gS0VJTiBLSy9LTC4KICAgKiAgIHNvbnN0IC0+IFN0dXR6ZW5sYWVuZ2UgS0svS0wgYXVzIGRlciBkdWVubndhbmRpZ2VuIFRhYmVsbGUuCiAgICogR2lidCB7d2VydCwgbGFiZWx9IHp1cnVlY2s7IG51bGwsIHdlbm4gZGllIFplaWxlIGtlaW4gTGFlbmdlbm1hc3MgdHJhZWd0LiAqLwogIGZ1bmN0aW9uIGxhZW5nZU9mKHQsIHJ3LCBsYWVuZ2VWYXJpYW50ZSkgewogICAgaWYgKCFydykgcmV0dXJuIG51bGw7CiAgICBpZiAocncuaG9laGUgIT0gbnVsbCkgcmV0dXJuIHsgd2VydDogcncuaG9laGUsIGxhYmVsOiAnaCcsIHRleHQ6ICdIw7ZoZScgfTsKICAgIGlmICh0ICYmIHQubGFlbmdlVmFyaWFudGUpIHsKICAgICAgY29uc3QgdiA9IGxhZW5nZVZhcmlhbnRlID09PSAnS0wnID8gcncua2wgOiBydy5razsKICAgICAgcmV0dXJuIHYgPT0gbnVsbCA\\\/IG51bGwgOiB7IHdlcnQ6IHYsIGxhYmVsOiAnTCcsIHRleHQ6ICdTdHV0emVubMOkbmdlICgnICsgbGFlbmdlVmFyaWFudGUgKyAnKScgfTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLyogLS0gRmxhbnNjaC1UeXBlbiAoQmxpbmRkZWNrZWwgKyBLbGFtbWVyLCBBZW5kZXJ1bmdzcGxhbiBBYnNjaG5pdHQgRCkgLS0tLQogICAqIERpZXNlIFR5cGVuIGtlbm5lbiBLRUlORSBSZWloZSBBL0IvQyB1bmQgS0VJTkUgTmVubndlaXRlIC0gc2llIGhhZW5nZW4KICAgKiBhdXNzY2hsaWVzc2xpY2ggYW0gRmxhbnNjaC3DmCAoQmVybmQgMTYuMDcuMjAyNikuIHN0YXRlLnJlaWhlL3N0YXRlLmdyb2Vzc2UKICAgKiB3ZXJkZW4gZnVlciBzaWUgbmljaHQgZ2VsZXNlbjsgYWxsZXMgbGFldWZ0IHVlYmVyIHN0YXRlLmZsYW5zY2guCiAgICogRGVzaGFsYiBsaWVmZXJ0IHJvd0ZvcigpIGhpZXIgYmV3dXNzdCBudWxsOiBlcyBnaWJ0IGtlaW5lIERJTjMyNjc2LVplaWxlLAogICAqIGRpZSB6dSBlaW5lbSBGbGFuc2NoLcOYIGVpbmRldXRpZyBnZWhvZXJ0IChlaW4gRmxhbnNjaCB0cmFlZ3QgbWVocmVyZSBSb2hyLeKMgCkuCiAgICogSmVkZSBTdGVsbGUsIGRpZSBydyBicmF1Y2h0LCBtdXNzIGRlbiBudXJGbGFuc2NoLUZhbGwgZ2V0cmVubnQgYmVoYW5kZWxuIC0KICAgKiBOSUUgYXVmIHJvd3MzMiguLi4pWzBdIHp1cnVlY2tmYWxsZW4sIGRhcyB3YWVyZSBlaW5lIGZhbHNjaGUgR3JvZXNzZS4gKi8KICBjb25zdCBpc3ROdXJGbGFuc2NoID0gdCA9PiAhISh0ICYmIHQubnVyRmxhbnNjaCk7CiAgLyogLS0gVHlwZW4gb2huZSBiZWxlZ3RlIE1hc3NxdWVsbGUgKENGL0NGSSwgQWVuZGVydW5nc3BsYW4gQWJzY2huaXR0IEcpIC0tLQogICAqIG1hc3NlRm9sZ3Q6dHJ1ZSBoZWlzc3Q6IEZ1ZXIgZGllc2VuIFR5cCBsaWVndCBVRUJFUkhBVVBUIEtFSU4gZnJlaWdlZ2ViZW5lcyBNYXNzIHZvciAtCiAgICogd2VkZXIgZWluZSBSZWloZS9OZW5ud2VpdGUgbm9jaCBlaW4gRmxhbnNjaC3DmC4gQW5kZXJzIGFscyBiZWkgbnVyRmxhbnNjaCAoQmxpbmRkZWNrZWwvCiAgICogS2xhbW1lcjogRmxhbnNjaC3DmCBpc3QgYmVsZWd0LCBkZXIgUmVzdCBmZWhsdCkgZ2lidCBlcyBoaWVyIGdhciBrZWluZW4gQW5rZXIuCiAgICogS29uc2VxdWVueiBhbiBKRURFUiBTdGVsbGU6IHJvd3NGb3IoKSAtPiBbXSwgcGFyYW1zRm9yKCkgLT4gbnVsbCwga2VpbmUgR3JvZXNzZW5saXN0ZSwKICAgKiBrZWluZSBaZWljaG51bmcsIGtlaW4gUHJlaXMuIE5JRSBhdWYgcm93czMyKC4uLikgenVydWVja2ZhbGxlbiAtIGRhcyBzaW5kIGRpZQogICAqIERVRU5OV0FORElHRU4gRElOLTMyNjc2LVJvaHJtYXNzZSwgZGllIG1pdCBDRi9DRkkgbmljaHRzIHp1IHR1biBoYWJlbiAoZ2VuYXUgZGFzIHdhcgogICAqIGRlciBGZWhsZXIgdm9yIGRlbSAxNi4wNy4yMDI2KS4KICAgKiBBQ0hUVU5HIGZ1ZXIgTmFjaGZvbGdlciAtIFN0YW5kIDE2LjA3LjIwMjYsIHdlbGNoZSBkYXRhLmpzLUZsYWdzIHdpcmtsaWNoIHdpcmtlbjoKICAgKiAgIFZFUkRSQUhURVQ6IGBtYXNzZUZvbGd0YCwgYG51ckZsYW5zY2hgLCBgbWFzc2VRdWVsbGVgICgtPiByb3dzUXVlbGxlL3Jvd3NGb3IpLAogICAqICAgICAgICAgICAgICAgYGVpbnplbFN0dXR6ZW5gICgtPiBwYXJhbXNGb3I6IHAudHlwZT0nc3R1dHplbicpLCBgbGFlbmdlVmFyaWFudGVgLgogICAqICAgUkVJTkUgRE9LVTogYHplaWNobnVuZ09obmVNYXNzZWAsIGBrb21wbGV0dGVWZXJiaW5kdW5nYC4gV2VyIHNpY2ggYXVmIGVpbiBEb2t1LUZsYWcKICAgKiAgICAgICAgICAgICAgIHZlcmxhZXNzdCwgYmF1dCBzdGlsbCB3aWVkZXIgZmFsc2NoZSBNYXNzZSBlaW4gLSBlcnN0IHZlcmRyYWh0ZW4uICovCiAgY29uc3QgaXN0TWFzc2VGb2xndCA9IHQgPT4gISEodCAmJiB0Lm1hc3NlRm9sZ3QpOwogIGNvbnN0IGlzdEtsYW1tZXIgPSB0ID0+ICEhKHQgJiYgdC5rbGFtbWVyVHlwZW4pOwogIC8qIC0tIEJhdXRlaWwgIkRpY2h0dW5nIiAoVHlwIEQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCiAgICogQmVybmQgTGlua2VyLCAxMS4wOC4yMDI2OiAiV2Vya3N0b2ZmL09iZXJmbGFlY2hlIGlzdCBoaWVyIHVubnVldHogZGEgbnVyCiAgICogRWRlbHN0YWhsIG1pdCBlbnRzcHJlY2hlbmRlbiBPYmVyZmxhZWNoZW4gYW5nZXplaWd0IHdpcmQuIEthbm5zdCBkdSBkYXMKICAgKiBTcGVycmVuIGJlaSBCYXV0ZWlsIERpY2h0dW5nIGRhcyBtYW4gbnVyOiBCYXV0ZWlsIC0+IEdyb2Vzc2UgLT4gRGljaHR1bmcgLT4KICAgKiBOYWNod2Vpc2UgaGF0PyIgLT4gU2Nocml0dCA1IGVudGZhZWxsdCBmdWVyIFR5cCBEIChhcHBsaWNhYmxlKCkpLCB1bmQgZGVyCiAgICogRWRlbHN0YWhsLVdlcmtzdG9mZiBzYW10IE9iZXJmbGFlY2hlIHZlcnNjaHdpbmRldCB1ZWJlcmFsbCBkb3J0LCB3byBlciBzb25zdAogICAqIGt1bmRlbnNpY2h0YmFyIHd1ZXJkZTogVm9yc2NoYXUtQ2hpcHMsIERhdGVuYmxhdHQgdW5kIEFuZnJhZ2V0ZXh0LiBEZXIKICAgKiBXZXJrc3RvZmYgZGVyIERpY2h0dW5nIHN0ZWh0IHdlaXRlcmhpbiBpbiBkZXIgZWlnZW5lbiBaZWlsZSAiRGljaHR1bmciLgogICAqIE5JQ0hUIHVlYmVyIHQuZGljaHR1bmcgcHJ1ZWZlbiAtIGRhcyBGbGFnIHRyYWVndCBhdWNoIFR5cCBUQyAoa29tcGxldHRlCiAgICogVmVyYmluZHVuZyksIHVuZCBkZXIgYmVzdGVodCBzZWhyIHdvaGwgYXVzIEVkZWxzdGFobC4gKi8KICBjb25zdCBpc3REaWNodHVuZ0JhdXRlaWwgPSB0ID0+ICEhKHQgJiYgdC5pZCA9PT0gJ0QnKTsKICAvKiBBbndlbmR1bmdzYWJoYWVuZ2lnZSBGREEtS29uZm9ybWl0YWV0IChCZXJuZCAxMS4wOC4yMDI2KTogUGhhcm1hIHVuZAogICAqIFN0ZXJpbHRlY2huaWsgLT4gVVNQIENsYXNzIFZJICsgQURJL0JTRS9UU0UsIExlYmVuc21pdHRlbCB1bmQgQ2hlbWllIC0+CiAgICogRUcgMTkzNS8yMDA0LiBFaW5lIFF1ZWxsZSBmdWVyIE5hY2h3ZWlzLVNjaHJpdHQsIERpY2h0dW5ncy1TY2hyaXR0LAogICAqIERhdGVuYmxhdHQgdW5kIEFuZnJhZ2V0ZXh0LiAqLwogIGNvbnN0IGZkYVRleHQgPSAoKSA9PiAoRC5mZGFLb25mb3JtaXRhZXQgfHwge30pW3N0YXRlLmFud2VuZHVuZ10gfHwgRC5mZGFLb25mb3JtaXRhZXRGYWxsYmFjayB8fCAnRkRBJzsKICBjb25zdCBmZGFLdXJ6VGV4dCA9ICgpID0+IChELmZkYUt1cnogfHwge30pW3N0YXRlLmFud2VuZHVuZ10gfHwgbnVsbDsKICAvLyBCZXJuZCBMaW5rZXIsIDAxLjA5LjIwMjY6IERhcyBBYm5haG1lcHJ1ZWZ6ZXVnbmlzIDMuMSBuYWNoIEFELVcyIHdpcmQgZWlubWFsIGplCiAgLy8gQ2hhcmdlIGF1c2dlc3RlbGx0LCBuaWNodCBqZSBCYXV0ZWlsLiBGZXJyaXQtTWVzc3VuZyB1bmQgUmEtTWVzc3Byb3Rva29sbCBibGVpYmVuCiAgLy8gZGFnZWdlbiBhdXNkcnVlY2tsaWNoIGplIFN0dWVjaywgd2VpbCBqZWRlcyBlaW56ZWxuZSBUZWlsIGdlbWVzc2VuIHVuZAogIC8vIHByb3Rva29sbGllcnQgd2lyZC4gU2VpbiBSZWNoZW5iZWlzcGllbDogNSBTdHVlY2sgenUgNzAsODAgc2luZCAzNTQsMDAgcGx1cwogIC8vIGVpbm1hbGlnIDE1LDAwIGZ1ZXIgZGFzIFpldWduaXMsIGFsc28gMzY5LDAwIHVuZCBuaWNodCA0MjksMDAuCiAgY29uc3QgTkFDSFdFSVNfSkVfQ0hBUkdFID0gWydFTjEwMjA0XzMxX0FEVzInXTsKICBjb25zdCBpc3RDaGFyZ2VuTmFjaHdlaXMgPSBpZCA9PiBOQUNIV0VJU19KRV9DSEFSR0UuaW5kZXhPZihpZCkgPj0gMDsKICBjb25zdCBjaGFyZ2VuQXVmcHJlaXNGdWVyID0gaWQgPT4gewogICAgY29uc3QgUCA9IEQucHJlaXNlIHx8IHt9OwogICAgY29uc3QgYmV0cmFnID0gUC5uYWNod2Vpc0F1ZnByZWlzRXVybyAmJiBQLm5hY2h3ZWlzQXVmcHJlaXNFdXJvW2lkXTsKICAgIHJldHVybiAoYmV0cmFnID09IG51bGwpID8gbnVsbCA6IE51bWJlcihiZXRyYWcpICogKFAuZ2xvYmFsRmFrdG9yIHx8IDEpOwogIH07CiAgY29uc3QgbmFjaHdlaXNMYWJlbCA9IG53ID0+IChudyAmJiBudy5hbndlbmR1bmdzTGFiZWwgPT09ICdmZGFLb25mb3JtaXRhZXQnKSA\\\/IGZkYVRleHQoKSA6IChudyA\\\/IG53LmxhYmVsIDogJycpOwogIGNvbnN0IG5hY2h3ZWlzTGFiZWxCeUlkID0gaWQgPT4gbmFjaHdlaXNMYWJlbCgoRC5uYWNod2Vpc2UgfHwgW10pLmZpbmQoeCA9PiB4LmlkID09PSBpZCkpOwogIGNvbnN0IGZsYW5zY2hPYmogPSBpZCA9PiAoRC5mbGFuc2NoZ3JvZXNzZW4gfHwgW10pLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7CiAgY29uc3Qga2xhbW1lclR5cE9iaiA9IGlkID0+IChELmtsYW1tZXJUeXBlbiB8fCBbXSkuZmluZChrID0+IGsuaWQgPT09IGlkKTsKICBjb25zdCBmbGFuc2NoRm9yID0gcyA9PiBmbGFuc2NoT2JqKHMuZmxhbnNjaCkgfHwgKEQuZmxhbnNjaGdyb2Vzc2VuIHx8IFtdKVswXSB8fCBudWxsOwogIC8qIElzdCBmdWVyIERJRVNFUyBCYXV0ZWlsIGluIERJRVNFUiBGbGFuc2NoZ3JvZXNzZSBhdXNzZXIgZGVtIEZsYW5zY2gtw5ggbm9jaCBrZWluCiAgICogTWFzcyBiZWxlZ3Q\\\/IERpZSBGcmFnZSBoYWVuZ3QgYW0gQkFVVEVJTCwgbmljaHQgYW4gZWluZW0gZWluemVsbmVuIEZlbGQuCiAgICogRnJ1ZWhlciBzdGFuZCBoaWVyIHN0ZWxsdmVydHJldGVuZCBgYmxpbmRUaGsgPT0gbnVsbGAuIFNlaXQgQmVybmRzIE5hY2h0cmFnIHZvbQogICAqIDI3LjA3LjIwMjYgKCJCbGluZGRlY2tlbDogMjg2LDE7IDMxOSB1bmQgMzM4IGVpbmZhY2ggTWFzcyBMIG1pdCAxNCBhbmdlYmVuIikgaXN0CiAgICogYmxpbmRUaGsgaW4gSkVERVIgR3JvZXNzZSBiZWxlZ3QgLSBkZXIgVGVzdCB3YXIgZGFtaXQgdG90IHVuZCBoYXQgZGVuIEhpbndlaXMKICAgKiBhdWNoIGJlaSBkZXIgS0xBTU1FUiB2ZXJzY2hsdWNrdCwgb2J3b2hsIGVyIGRvcnQgd2VpdGVyIGdpbHQ6IEtMQU1NRVJfQSBpbiBkYXRhLmpzCiAgICogZW5kZXQgYmVpIEZsYW5zY2gt4oyAIDI2OCwgZnVlciAyODYsMSAvIDMxOSAvIDMzOCBnaWJ0IGVzIGtlaW4gTWFzcyBBICgiQXVmIEFuZnJhZ2UiKS4KICAgKiBLbGFtbWVyIC0+IE1hc3MgQSBkZXMgZ2V3YWVobHRlbiBLbGFtbWVydHlwcywgQmxpbmRkZWNrZWwgLT4gRGVja2Vsc3RhZXJrZSBMLiAqLwogIGZ1bmN0aW9uIGZsYW5zY2hNYXNzT2ZmZW4odCwgZiwga2xhbW1lclR5cCkgewogICAgaWYgKCF0IHx8ICFmKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXN0S2xhbW1lcih0KSkgcmV0dXJuICEoZi5rbGFtbWVyQSAmJiBmLmtsYW1tZXJBW2tsYW1tZXJUeXBdICE9IG51bGwpOwogICAgaWYgKHQuc3ZnVHlwZSA9PT0gJ2JsaW5kZGVja2VsJykgcmV0dXJuIGYuYmxpbmRUaGsgPT0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgLyogRmxhbnNjaC3DmCBhdXMgZGVtIFN0YXRlIC0gZWdhbCBvYiB1ZWJlciBGbGFuc2NoLUxpc3RlIG9kZXIgdWViZXIgZWluZSBSZWloZSBnZXdhZWhsdC4gKi8KICBmdW5jdGlvbiBmbGFuZ2VPZlN0YXRlKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApOwogICAgaWYgKGlzdE51ckZsYW5zY2godCkpIHsgY29uc3QgZiA9IGZsYW5zY2hGb3Iocyk7IHJldHVybiBmID8gZi5mbGFuZ2VPRCA6IG51bGw7IH0KICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHMpOyByZXR1cm4gcncgPyBydy5mbGFuZ2VPRCA6IG51bGw7CiAgfQoKICAvKiAtLSBXZXJrc3RvZmZlOiBLbGFtbWVybiBoYWJlbiBlaWdlbmUgKEFic2Nobml0dCBFKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICogQmVybmQ6ICJBY2h0dW5nLCBkaWUgS2xhbW1lcm4gaGFiZW4gYW5kZXJlIE1hdGVyaWFsaWVuIGFscyBkaWUgRml0dGluZ3MuIgogICAqIC0+IDEuNDMwOC8xLjQ0MDggc3RhdHQgMS40NDA0LzEuNDQzNSwgdW5kIGplIEtsYW1tZXJ0eXAgbnVyIGRpZSBlcmxhdWJ0ZW4uCiAgICogS2xhbW1lci1XZXJrc3RvZmYgbGllZ3QgaW4gc3RhdGUua2xhbW1lcldlcmtzdG9mZiwgZ2V0cmVubnQgdm9uIHN0YXRlLndlcmtzdG9mZiwKICAgKiBkYW1pdCBlaW4gV2VjaHNlbCBLbGFtbWVyIDwtPiBGaXR0aW5nIGRlbiBqZXdlaWxzIGFuZGVyZW4gV2VydCBuaWNodCB1ZWJlcnNjaHJlaWJ0LgogICAqIEFsbGVzLCB3YXMgZWluZW4gV2Vya3N0b2ZmIGF1c2dpYnQsIGxhZXVmdCB1ZWJlciBlZmZXZXJrc3RvZmYoKS4gKi8KICBmdW5jdGlvbiB3ZXJrc3RvZmZPcHRpb25lbihzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKTsKICAgIGlmICghaXN0S2xhbW1lcih0KSkgcmV0dXJuIEQud2Vya3N0b2ZmZTsKICAgIGNvbnN0IGt0ID0ga2xhbW1lclR5cE9iaihzLmtsYW1tZXJUeXApOwogICAgY29uc3QgZXJsYXVidCA9IGt0ID8ga3Qud2Vya3N0b2ZmZSA6IFtdOwogICAgcmV0dXJuIChELmtsYW1tZXJXZXJrc3RvZmZlIHx8IFtdKS5maWx0ZXIodyA9PiBlcmxhdWJ0LmluZGV4T2Yody5pZCkgPj0gMCk7CiAgfQogIGZ1bmN0aW9uIGVmZldlcmtzdG9mZihzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKTsKICAgIGlmICghaXN0S2xhbW1lcih0KSkgcmV0dXJuIHMud2Vya3N0b2ZmOwogICAgY29uc3QgYXYgPSB3ZXJrc3RvZmZPcHRpb25lbihzKS5tYXAodyA9PiB3LmlkKTsKICAgIHJldHVybiBhdi5pbmRleE9mKHMua2xhbW1lcldlcmtzdG9mZikgPj0gMCA\\\/IHMua2xhbW1lcldlcmtzdG9mZiA6IChhdlswXSB8fCBudWxsKTsKICB9CgogIGZ1bmN0aW9uIHJvd3NGb3IocykgewogICAgY29uc3QgdCA9IHR5cE9iaihzLnR5cCk7CiAgICBpZiAoaXN0TnVyRmxhbnNjaCh0KSkgcmV0dXJuIFtdOwogICAgLy8gbWFzc2VGb2xndCAoQ0YvQ0ZJKTogS0VJTkUgR3JvZXNzZW56ZWlsZW4uIE9obmUgZGllc2VzIFtdIHd1ZXJkZSBoaWVyIHJvd3MzMihzLnJlaWhlKQogICAgLy8gZ3JlaWZlbiB1bmQgZGVtIEt1bmRlbiBkaWUgZHVlbm53YW5kaWdlbiBESU4tMzI2NzYtTWFzc2UgYWxzIENGLU1hc3NlIHZlcmthdWZlbi4KICAgIGlmIChpc3RNYXNzZUZvbGd0KHQpKSByZXR1cm4gW107CiAgICBpZiAodCAmJiB0LmlkID09PSAnQ0YnKSB7CiAgICAgIGNvbnN0IGdydXBwZSA9IEQubWFzc2UuY29ubmVjdC5jZi5yZWloZW5bcy5jb25uZWN0Tm9ybV0gfHwgRC5tYXNzZS5jb25uZWN0LmNmLnJlaWhlbi5ESU47CiAgICAgIHJldHVybiBncnVwcGUgPyBncnVwcGUucm93cyA6IFtdOwogICAgfQogICAgaWYgKHQgJiYgdC5pZCA9PT0gJ0NGSScpIHJldHVybiBELm1hc3NlLmNvbm5lY3QuY2ZpLnJvd3MgfHwgW107CiAgICBpZiAodCAmJiB0LmlkID09PSAnVFNSJykgewogICAgICAvLyBSdW5kZSA4OiBnZWxpZWZlcnRlIEtvbWJpbmF0aW9uZW4gKER1cmNoZ2FuZy9BYnp3ZWlnKSBhdXMgZGVyIEt1bmRlbnRhYmVsbGUuCiAgICAgIC8vIFNjaHJpdHQgNCB6ZWlndCBudXIgRHVyY2hnw6RuZ2UsIGbDvHIgZGllIG1pbmRlc3RlbnMgZWluIGJlbGVndGVyIEFiendlaWcgZXhpc3RpZXJ0OwogICAgICAvLyBMMC9MIHNpbmQgamUgRHVyY2hnYW5ncy1HcnVwcGUga29uc3RhbnQgdW5kIGtvbW1lbiBhdXMgZGVtIGVyc3RlbiBQYWFyLgogICAgICBjb25zdCBwYWFyZSA9IChELm1hc3NlLmRpbjExODY1LnRTdHVlY2tSZWR1emllcnQucmVpaGVuW3MucmVpaGVdIHx8IHt9KS5yb3dzIHx8IFtdOwogICAgICBjb25zdCBiYXNpcyA9IEQubWFzc2UuZGluMTE4NjUuYm9lZ2VuW3MucmVpaGVdIHx8IFtdOwogICAgICBjb25zdCBnZXNlaGVuID0gbmV3IFNldCgpOwogICAgICByZXR1cm4gcGFhcmUuZmlsdGVyKHAgPT4gIWdlc2VoZW4uaGFzKHAudm9uSWQpICYmIGdlc2VoZW4uYWRkKHAudm9uSWQpKQogICAgICAgIC5tYXAocCA9PiB7CiAgICAgICAgICBjb25zdCBtZXJnZWQgPSBPYmplY3QuYXNzaWduKHt9LCBiYXNpcy5maW5kKGIgPT4gYi5pZCA9PT0gcC52b25JZCkgfHwge30sIHsgaWQ6IHAudm9uSWQsIEwwOiBwLkwwLCBMOiBwLkwsIEwxOiBudWxsLCBMMjogbnVsbCwgUjogbnVsbCB9KTsKICAgICAgICAgIGlmICghbWVyZ2VkLmxhYmVsKSB7IGNvbnN0IG0gPSByb3dzMzIocy5yZWloZSkuZmluZCh4ID0+IHguaWQgPT09IHAudm9uSWQpOyBpZiAobSkgbWVyZ2VkLmxhYmVsID0gbS5sYWJlbDsgfQogICAgICAgICAgcmV0dXJuIG1lcmdlZDsKICAgICAgICB9KTsKICAgIH0KICAgIGlmICh0ICYmIHQuaWQgPT09ICdUUycpIHsKICAgICAgY29uc3QgcXVlbGxlID0gRC5tYXNzZS5kaW4xMTg2NS50U3R1ZWNrR2xlaWNoLnJlaWhlbltzLnJlaWhlXTsKICAgICAgY29uc3QgYmFzaXMgPSBELm1hc3NlLmRpbjExODY1LmJvZWdlbltzLnJlaWhlXSB8fCBbXTsKICAgICAgcmV0dXJuIChxdWVsbGUgPyBxdWVsbGUucm93cyA6IFtdKS5tYXAociA9PiB7CiAgICAgICAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzaXMuZmluZChiID0+IGIuaWQgPT09IHIuaWQpIHx8IHt9LCByKTsKICAgICAgICBpZiAoIW1lcmdlZC5sYWJlbCkgeyBjb25zdCBtID0gcm93czMyKHMucmVpaGUpLmZpbmQoeCA9PiB4LmlkID09PSByLmlkKTsgaWYgKG0pIG1lcmdlZC5sYWJlbCA9IG0ubGFiZWw7IH0KICAgICAgICByZXR1cm4gbWVyZ2VkOwogICAgICB9KTsKICAgIH0KICAgIGlmICh0ICYmIHQuaWQgPT09ICdSJykgewogICAgICBjb25zdCBwYWFyZSA9IChELm1hc3NlLmRpbjExODY1LnJlZHV6aWVydW5nLnJlaWhlbltzLnJlaWhlXSB8fCB7fSkucm93cyB8fCBbXTsKICAgICAgY29uc3Qgdm9uID0gbmV3IFNldChwYWFyZS5tYXAociA9PiByLnZvbklkKSk7CiAgICAgIHJldHVybiAoRC5tYXNzZS5kaW4xMTg2NS5ib2VnZW5bcy5yZWloZV0gfHwgW10pLmZpbHRlcihyID0+IHZvbi5oYXMoci5pZCkpOwogICAgfQogICAgLy8gbWFzc2VRdWVsbGUgKFRDRCk6IGVpZ2VuZSBUYWJlbGxlIHN0YXR0IGRlciBkdWVubndhbmRpZ2VuIERJTi0zMjY3Ni1SZWloZS4KICAgIGlmICghaXNCZW5kKHQpKSByZXR1cm4gcm93c1F1ZWxsZSh0LCBzLnJlaWhlKTsKICAgIC8vIEJvZ2VuLVRhYmVsbGVuIHRyYWdlbiBrZWluIExhYmVsIC0+IHdlbm4gbW9lZ2xpY2ggYXVzIGRlciAzMjY3Ni1SZWloZSB1ZWJlcm5laG1lbi4KICAgIC8vIEJsb2NraWVydGUgWmVpbGVuIChha3R1ZWxsIEROMjUgbWl0IHdpZGVyc3BydWVjaGxpY2hlbSBMMykgc2luZCBuaWNodCB3YWVobGJhci4KICAgIGNvbnN0IGJhc2UgPSByb3dzMzIocy5yZWloZSk7CiAgICByZXR1cm4gKEQubWFzc2UuZGluMTE4NjUuYm9lZ2VuW3MucmVpaGVdIHx8IFtdKS5maWx0ZXIociA9PiByLnN0YXR1cyAhPT0gJ2Jsb2NraWVydCcpLm1hcChyID0+IHsKICAgICAgaWYgKHIubGFiZWwpIHJldHVybiByOwogICAgICBjb25zdCBtID0gYmFzZS5maW5kKHggPT4geC5pZCA9PT0gci5pZCk7CiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByLCB7IGxhYmVsOiBtID8gbS5sYWJlbCA6IHIuaWQgfSk7CiAgICB9KTsKICB9CiAgLy8gbnVsbCBiZWkgbnVyRmxhbnNjaC1UeXBlbiAocm93c0ZvciBsaWVmZXJ0IGRvcnQgW10pIC0+IEF1ZnJ1ZmVyIG11ZXNzZW4gZGFzIGFiZmFuZ2VuLgogIGZ1bmN0aW9uIHJvd0ZvcihzKSB7IGNvbnN0IHJzID0gcm93c0ZvcihzKTsgcmV0dXJuIHJzLmZpbmQociA9PiByLmlkID09PSBzLmdyb2Vzc2UpIHx8IHJzWzBdIHx8IG51bGw7IH0KICAvKiAtLSBad2VpdGVyIMOYICgiUmVkdXppZXJ0IGF1ZiIgLyAiQWJnYW5nIik6IG51ciBLTEVJTkVSIGFscyBkaWUgTmVubndlaXRlIC0tLS0tLS0tLS0tCiAgICogQmVybmQgUjMtMi9SMy00ICgxNy4wNy4yMDI2KTogIk5lbm53ZWl0ZSBtdXNzIGltbWVyIEdSw5ZTU0VSIHNlaW4gYWxzICdSZWR1emllcnQgYXVmJy4iCiAgICogRGllIFJlaWhlbi1UYWJlbGxlbiAocm93czMyKSBzaW5kIGF1ZnN0ZWlnZW5kIHNvcnRpZXJ0IC0+IGtsZWluZXJlIE5lbm53ZWl0ZSA9IGZyw7xoZXJlcgogICAqIEluZGV4LiByb3dzMkZvcigpIGxpZWZlcnQgZGVzaGFsYiBnZW5hdSBkaWUgWmVpbGVuIFZPUiBkZXIgZ2V3w6RobHRlbiBOZW5ud2VpdGUuCiAgICogSXN0IGRpZSBrbGVpbnN0ZSBHcsO2w59lIGdld8OkaGx0IChJbmRleCAwKSBvZGVyIGlzdCBncm9lc3NlIHVuYmVrYW5udCAtPiBbXSAoa2VpbmUKICAgKiBrbGVpbmVyZSBHcsO2w59lKS4gRGVyIEF1ZnJ1ZmVyIGJlaGFuZGVsdCBkYXMgc2F1YmVyIChQbGF0emhhbHRlci8iZm9sZ3QiLCBrZWluIEFic3R1cnopLgogICAqIERpZSBnZW5hdWVuIGfDvGx0aWdlbiBLb21iaW5hdGlvbmVuIGxpZWZlcnQgQmVybmQgbm9jaCBhbHMgVm9ybGFnZTsgYmlzIGRhaGluIGdpbHQgZGllCiAgICogc2ltcGxlIEtsZWluZXItUmVnZWwgLSBlcyB3aXJkIE5JQ0hUUyBlcmZ1bmRlbiwgbnVyIGdlZmlsdGVydC4gKi8KICBmdW5jdGlvbiByb3dzMkZvcihzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKTsKICAgIGlmICh0ICYmIHQuaWQgPT09ICdSJykgewogICAgICBjb25zdCBwYWFyZSA9IChELm1hc3NlLmRpbjExODY1LnJlZHV6aWVydW5nLnJlaWhlbltzLnJlaWhlXSB8fCB7fSkucm93cyB8fCBbXTsKICAgICAgY29uc3QgaWRzID0gbmV3IFNldChwYWFyZS5maWx0ZXIocCA9PiBwLnZvbklkID09PSBzLmdyb2Vzc2UpLm1hcChwID0+IHAubmFjaElkKSk7CiAgICAgIHJldHVybiAoRC5tYXNzZS5kaW4xMTg2NS5ib2VnZW5bcy5yZWloZV0gfHwgW10pLmZpbHRlcihyID0+IGlkcy5oYXMoci5pZCkpOwogICAgfQogICAgaWYgKHQgJiYgdC5pZCA9PT0gJ1RTUicpIHsKICAgICAgLy8gUnVuZGUgODogZGVyIEFiendlaWcgYmlldGV0IE5VUiBkaWUgZ2VsaWVmZXJ0ZW4sIGJlbGVndGVuIEtvbWJpbmF0aW9uZW4gYW4gLQogICAgICAvLyBuaWNodCBiZWxlZ3RlIFBhYXJlIGJsZWliZW4gdW5zaWNodGJhciAoZmFpbC1jbG9zZWQgc3RhdHQgS2xlaW5lci1SZWdlbCkuCiAgICAgIGNvbnN0IHBhYXJlID0gKEQubWFzc2UuZGluMTE4NjUudFN0dWVja1JlZHV6aWVydC5yZWloZW5bcy5yZWloZV0gfHwge30pLnJvd3MgfHwgW107CiAgICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQocGFhcmUuZmlsdGVyKHAgPT4gcC52b25JZCA9PT0gcy5ncm9lc3NlKS5tYXAocCA9PiBwLm5hY2hJZCkpOwogICAgICByZXR1cm4gKEQubWFzc2UuZGluMTE4NjUuYm9lZ2VuW3MucmVpaGVdIHx8IFtdKS5maWx0ZXIociA9PiBpZHMuaGFzKHIuaWQpKTsKICAgIH0KICAgIGNvbnN0IHJyID0gcm93czMyKHMucmVpaGUpOwogICAgY29uc3QgaSA9IHJyLmZpbmRJbmRleChyID0+IHIuaWQgPT09IHMuZ3JvZXNzZSk7CiAgICByZXR1cm4gaSA+IDAgPyByci5zbGljZSgwLCBpKSA6IFtdOwogIH0KICAvLyBEZWZhdWx0IGbDvHIgZGVuIHp3ZWl0ZW4gw5g6IGRpZSBHUsOWU1NURSBub2NoIGtsZWluZXJlIEdyw7bDn2UgKGVpbiBTY2hyaXR0IHVudGVyIGRlcgogIC8vIE5lbm53ZWl0ZSkgLT4gc29mb3J0IGVpbiBlY2h0ZXIgS2VnZWwgbWl0IHp3ZWkgdmVyc2NoaWVkZW5lbiDDmC4gbnVsbCwgd2VubiBrZWluZQogIC8vIGtsZWluZXJlIEdyw7bDn2UgZXhpc3RpZXJ0IChkYW5uIHplaWd0IGRpZSBaZWljaG51bmcgZGVuICJmb2xndCItUGxhdHpoYWx0ZXIpLgogIGZ1bmN0aW9uIGRlZmF1bHRHcm9lc3NlMihzKSB7IGNvbnN0IGF2ID0gcm93czJGb3Iocyk7IHJldHVybiBhdi5sZW5ndGggPyBhdlthdi5sZW5ndGggLSAxXS5pZCA6IG51bGw7IH0KICAvLyByb3cyRm9yIG51ciBhdXMgZGVuIEfDnExUSUdFTiBrbGVpbmVyZW4gWmVpbGVuIChyb3dzMkZvcikgLSBlaW4gZ3JvZXNzZTIsIGRhcyBuaWNodAogIC8vIGtsZWluZXIgYWxzIGRpZSBOZW5ud2VpdGUgaXN0ICh6LiBCLiBhdXMgZWluZW0gYWx0ZW4gTGluayBvZGVyIG5hY2ggTmVubndlaXRlbi1XZWNoc2VsKSwKICAvLyBsaWVmZXJ0IG51bGwgLT4gaXN0UmVkdXppZXJ1bmdPaG5lWndlaXRPRCBncmVpZnQgLT4gImZvbGd0Iiwgc3RhdHQgZWluZXIgZXJmdW5kZW5lbgogIC8vIFJlZHV6aWVydW5nLiBEYW1pdCBpc3QgZWluIGdlcmFkZXMgUm9ociAob2QgPT0gb2QyKSBuaWNodCBtZWhyIHplaWNoZW5iYXIuCiAgZnVuY3Rpb24gcm93MkZvcihzKSB7IHJldHVybiByb3dzMkZvcihzKS5maW5kKHIgPT4gci5pZCA9PT0gcy5ncm9lc3NlMikgfHwgbnVsbDsgfQogIGZ1bmN0aW9uIHJlZHVjdGlvblBhaXIocykgewogICAgaWYgKCFzIHx8IHMudHlwICE9PSAnUicpIHJldHVybiBudWxsOwogICAgY29uc3Qgcm93cyA9IChELm1hc3NlLmRpbjExODY1LnJlZHV6aWVydW5nLnJlaWhlbltzLnJlaWhlXSB8fCB7fSkucm93cyB8fCBbXTsKICAgIHJldHVybiByb3dzLmZpbmQociA9PiByLnZvbklkID09PSBzLmdyb2Vzc2UgJiYgci5uYWNoSWQgPT09IHMuZ3JvZXNzZTIpIHx8IG51bGw7CiAgfQogIC8vIEJlbGVndGVzIFQtU3TDvGNrLVBhYXIgKER1cmNoZ2FuZy9BYnp3ZWlnKSAtIFJ1bmRlIDguIExpZWZlcnQgZGllIHBhYXJzcGV6aWZpc2NoZW4KICAvLyBNYcOfZSAoTDIgdW5kIEwxIHZhcmlpZXJlbiBqZSBBYnp3ZWlnLCBMMC9MIHNpbmQgZ3J1cHBlbmtvbnN0YW50KS4gT2huZSBQYWFyOiBudWxsLAogIC8vIHVuZCBkaWUgQXVmcnVmZXIgYmxlaWJlbiBmYWlsLWNsb3NlZCAoa2VpbmUgWmVpY2hudW5nLCBrZWluIERhdGVuYmxhdHQtTWHDnykuCiAgZnVuY3Rpb24gdFN0dWVja1BhaXIocykgewogICAgaWYgKCFzIHx8IHMudHlwICE9PSAnVFNSJykgcmV0dXJuIG51bGw7CiAgICBjb25zdCByb3dzID0gKEQubWFzc2UuZGluMTE4NjUudFN0dWVja1JlZHV6aWVydC5yZWloZW5bcy5yZWloZV0gfHwge30pLnJvd3MgfHwgW107CiAgICByZXR1cm4gcm93cy5maW5kKHIgPT4gci52b25JZCA9PT0gcy5ncm9lc3NlICYmIHIubmFjaElkID09PSBzLmdyb2Vzc2UyKSB8fCBudWxsOwogIH0KCiAgLyogLS0gUmVkdXppZXJ1bmcgb2huZSBiZWxlZ3RlbiB6d2VpdGVuIMOYIChOYWNocHJ1ZWYtQmVmdW5kIGEsIDE2LjA3LjIwMjYpIC0tLS0KICAgKiBEaWUgUmVkdXppZXJ1bmcgKHN2Z1R5cGUgJ3JlZHV6aWVydW5nJykgYnJhdWNodCBaV0VJIER1cmNobWVzc2VyOiBkZW4gUm9oci3DmAogICAqIChydykgdW5kIGRlbiDDmCwgYXVmIGRlbiByZWR1emllcnQgd2lyZCAocm93MkZvciAtPiBzdGF0ZS5ncm9lc3NlMikuIEZlaGx0IGRlcgogICAqIHp3ZWl0ZSAtIHouIEIuIGJlaSBlaW5lbSBnZXRlaWx0ZW4gTGluayBtaXQgdHlwPVIgb2huZSBncm9lc3NlMiAtLCB3dXJkZSBlcgogICAqIGZydWVoZXIgYXVzIGRlbSBGYWt0b3IgMC42NiBHRVJFQ0hORVQgKHJ3LnR1YmVPRCowLjY2IC0+IHouIEIuIDM0LDk4IGF1cyA1MykKICAgKiB1bmQgYWxzIGVjaHRlcyBNYXNzIGJlbWFzc3QuIERhcyBpc3QgZXJmdW5kZW4uIE9obmUgendlaXRlbiDDmCBnaWJ0IGVzIEtFSU4KICAgKiBiZWxlZ3RlcyBNYXNzIC0+IHBhcmFtc0ZvcigpIGxpZWZlcnQgbnVsbCB1bmQgcmVuZGVyUHJldmlldygpIHplaWd0IGRpZQogICAqICJmb2xndCItS2FydGUsIGdlbmF1IHdpZSBiZWkgbWFzc2VGb2xndC9udXJGbGFuc2NoLiBOSUUgZWluZW4gendlaXRlbiDDmCByZWNobmVuLiAqLwogIGZ1bmN0aW9uIGlzdFJlZHV6aWVydW5nT2huZVp3ZWl0T0QocykgewogICAgY29uc3QgdCA9IHR5cE9iaihzLnR5cCk7CiAgICByZXR1cm4gISEodCAmJiB0LnN2Z1R5cGUgPT09ICdyZWR1emllcnVuZycgJiYgIXJvdzJGb3IocykpOwogIH0KICAvKiBGb3JtIFRLIC0gQmVybmQgMjcuMDcuMjAyNiBpbSBXb3J0bGF1dDogIk1hc3NlIGZ1ZXIgVEsgc2luZCBpZGVudGlzY2ggd2llCiAgICogRm9ybSBUIGF1c3NlciBkYXMgTDIgZHVyY2ggZGVuIFdlcnQgYXVzIGRlciBUYWJlbGxlIG1pdCBMMSBlcnNldHp0IHdpcmQKICAgKiAod28gU3RyaWNoIGlzdCwgaXN0IGRlciBXZXJ0IDApLiIKICAgKiBEaWUgU3BhbHRlIEwxIHN0ZWh0IGluIGRlbiBLdW5kZW50YWJlbGxlbiBhbHMgVGV4dCBtaXQgVG9sZXJhbnogZGEsIHouIEIuCiAgICogJzE2IMKxIDAsNzUnOyBlaW4gU3RyaWNoIGlzdCBhbHMgbnVsbCBnZWZ1ZWhydC4gdGtBYmdhbmcoKSB6aWVodCBkYXJhdXMgZGllCiAgICogTWFzc3phaGwgKGRldXRzY2hlcyBLb21tYSkgYnp3LiAwIC0gZXMgd2lyZCBuaWNodHMgZ2VzY2hhZXR6dC4gKi8KICBmdW5jdGlvbiB0a0FiZ2FuZyhsMSkgewogICAgaWYgKGwxID09IG51bGwpIHJldHVybiAwOwogICAgaWYgKHR5cGVvZiBsMSA9PT0gJ251bWJlcicpIHJldHVybiBpc0Zpbml0ZShsMSkgPyBsMSA6IG51bGw7CiAgICBjb25zdCBtID0gU3RyaW5nKGwxKS5tYXRjaCgvLT9cZCsoPzpbLixdXGQrKT8vKTsKICAgIGlmICghbSkgcmV0dXJuIG51bGw7CiAgICBjb25zdCB2ID0gcGFyc2VGbG9hdChtWzBdLnJlcGxhY2UoJywnLCAnLicpKTsKICAgIHJldHVybiBpc0Zpbml0ZSh2KSA\\\/IHYgOiBudWxsOwogIH0KICAvLyBBYmdhbmdzbGFlbmdlIEwyIGRlciBnZXdhZWhsdGVuIEJhdWZvcm06IEZvcm0gVCAtPiBTcGFsdGUgTDIsIEZvcm0gVEsgLT4gU3BhbHRlIEwxLgogIGZ1bmN0aW9uIGFiZ2FuZ0wyKHMsIHNyYykgewogICAgaWYgKCFzcmMpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHMuZm9ybVZhcmlhbnRlID09PSAnVEsnID8gdGtBYmdhbmcoc3JjLkwxKSA6IHNyYy5MMjsKICB9CiAgLyogRGFzIE1BU1NLVUVSWkVMIG11c3MgZGVyIEJhdWZvcm0gZm9sZ2VuLCBuaWNodCBudXIgZGVyIFdlcnQ6IEJlaSBGb3JtIFRLIHN0YW1tdCBkZXIKICAgKiBBYmdhbmcgYXVzIFNwYWx0ZSBMMSwgaW0gRGF0ZW5ibGF0dCBzdGFuZCBhYmVyIHdlaXRlciAiQWJnYW5nIEwyIiAtIHVuZCBkaXJla3QKICAgKiBkYXJ1bnRlciBub2NoIGVpbm1hbCBkaWVzZWxiZSBaYWhsIGFscyAiTDEiLiBFaW4gS3VuZGVuZG9rdW1lbnQsIGRhcyBzaWNoIHNlbGJzdAogICAqIHdpZGVyc3ByaWNodC4gRWluZSBRdWVsbGUgZnVlciBEYXRlbmJsYXR0IFVORCBBbmZyYWdlLU1haWwsIGRhbWl0IGJlaWRlIGdsZWljaCBoZWlzc2VuLiAqLwogIGNvbnN0IGFiZ2FuZ0t1ZXJ6ZWwgPSBzID0+IChzICYmIHMuZm9ybVZhcmlhbnRlID09PSAnVEsnKSA\\\/ICdMMScgOiAnTDInOwogIC8qIEluIDE1IGRlciAxMzcgWmVpbGVuIHN0YW5kIGluIGRlciBTcGFsdGUgTDEgZWluIFN0cmljaCAoZGllIGtsZWluc3RlbiBHcm9lc3NlbjoKICAgKiBETjA2L0ROMDgvRE4xMCwgTlcxMCwyL05XMTMsNSwgMS80Ii8zLzgiLzEvMiIgdW5kIGRpZSB6dWdlaG9lcmlnZW4gcmVkdXppZXJ0ZW4KICAgKiBQYWFyZSkuIEZvcm0gVEsgd2FyIGRvcnQgZ2VzcGVycnQsIHdlaWwgIlN0cmljaCA9IDAiIGVpbmVuIEFiZ2FuZyBlcmdlYmVuIGhhZXR0ZSwKICAgKiBkZXIga3VlcnplciBhbHMgZGVyIFJhZGl1cyBkZXMgTGF1ZnJvaHJzIGlzdCAtIHplaWNobmVyaXNjaCB1bm1vZWdsaWNoLgogICAqIEdFS0xBRVJULCBCZXJuZCBMaW5rZXIgMzEuMDcuMjAyNjogImRhIGVzIGluIGRlciBOb3JtIG5pY2h0IGdlbmFubnQgd2lyZCBoYWJlIGljaAogICAqIGJlaSBlaW5lbSBMaWVmZXJhbnRlbiBuYWNoZ2VzZWhlbiwgZGVyIGdpYnQgZGVuIFdlcnQgYmVpIGRlbiBrbGVpbmVuIEdyb2Vzc2VuIG1pdAogICAqIDExbW0gYW4uIERhbm4gbmltbXQgZGllc2UgMTFtbSBmdWVyIGFsbGUgd28gZXMgZGlyIGZlaGx0LiIgLT4gTDEgPSAxMSBpbiBkYXRhLmpzLAogICAqIGFsbGUgMTM3IEtvbWJpbmF0aW9uZW4gc2luZCBmcmVpLiBEaWUgU3BlcnJlIGJsZWlidCBhbHMgU2ljaGVyaGVpdHNuZXR6IHN0ZWhlbjoKICAgKiBrb21tdCBrdWVuZnRpZyBlaW5lIFplaWxlIG9obmUgTDEgZGF6dSwgYmxlaWJ0IEZvcm0gVEsgZG9ydCBhdXRvbWF0aXNjaCB6dSwKICAgKiBzdGF0dCBlaW5lIDAgenUgemVpY2huZW4uICovCiAgZnVuY3Rpb24gdGtRdWVsbGUocykgewogICAgY29uc3QgdCA9IHR5cE9iaihzLnR5cCk7IGlmICghdCB8fCAhdC5mb3JtV2FobCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gdC5yZWR1emllcnQgPyB0U3R1ZWNrUGFpcihzKSA6IHJvd0ZvcihzKTsKICB9CiAgZnVuY3Rpb24gdGtPaG5lTWFzcyhzKSB7CiAgICBpZiAoIXMgfHwgcy5mb3JtVmFyaWFudGUgIT09ICdUSycpIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IHNyYyA9IHRrUXVlbGxlKHMpOwogICAgcmV0dXJuICEhc3JjICYmIHNyYy5MMSA9PSBudWxsOwogIH0KICAvLyBTaWNoZXJoZWl0c25ldHogZnVlciBlaW5lIHVuYmVrYW5udGUgQmF1Zm9ybSAod2VkZXIgVCBub2NoIFRLKS4KICBmdW5jdGlvbiBpc3RGb3JtT2huZU1hc3NlKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApOwogICAgaWYgKCF0IHx8ICF0LmZvcm1XYWhsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAocy5mb3JtVmFyaWFudGUgIT09ICdUJyAmJiBzLmZvcm1WYXJpYW50ZSAhPT0gJ1RLJykgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gdGtPaG5lTWFzcyhzKTsKICB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhdGUgKi8KICBjb25zdCBzdGF0ZSA9IHsKICAgIHN0ZXA6IDEsIGFud2VuZHVuZzogbnVsbCwgbm9ybTogbnVsbCwgdHlwOiBudWxsLCByZWloZTogJ0EnLAogICAgLy8gRGllIFdlaXNzLVByZWlzbGlzdGVuIGJlemllaGVuIHNpY2ggYXVmIEtMLiBEZXNoYWxiIHN0YXJ0ZXQgZGllIHNpY2h0YmFyZQogICAgLy8gQXVzd2FobCBhdWYgZGVyIFByZWlzbGlzdGVuYmFzaXM7IEtLIGJsZWlidCBhbHMgYmV3dXNzdCBnZXdhZWhsdGUsCiAgICAvLyByYWJhdHRpZXJ0ZSBWYXJpYW50ZSB2ZXJmdWVnYmFyLgogICAgZ3JvZXNzZTogbnVsbCwgZ3JvZXNzZTI6IG51bGwsIGxhZW5nZVZhcmlhbnRlOiAnS0wnLCBleHplbnRyaXNjaDogZmFsc2UsCiAgICAvLyBDb25uZWN0LUZsYW5zY2hlIGhhYmVuIGVpbmUgZWlnZW5lIE5vcm1mYW1pbGllLCBCYXVmb3JtIHVuZCBMYWVuZ2Vud2FobC4KICAgIGNvbm5lY3ROb3JtOiAnRElOJywgY29ubmVjdExhZW5nZTogbnVsbCwgY29ubmVjdEFuc2NobHVzczogJ0JXJywKICAgIC8vIFIzLTMvUjMtNDogQmF1Zm9ybSBkZXIgVC1TdMO8Y2tlLiAnVCcgPSBhbGxlIEFiZ8OkbmdlIGdsZWljaCBsYW5nIChEZWZhdWx0LCA9IGJpc2hlcmlnZXMKICAgIC8vIFZlcmhhbHRlbiksICdUSycgPSBEdXJjaGdhbmcgZ2xlaWNoLCBBYmdhbmcga3Vyei4gTnVyIHJlbGV2YW50IGbDvHIgVHlwZW4gbWl0IGZvcm1XYWhsOnRydWUuCiAgICBmb3JtVmFyaWFudGU6ICdUJywKICAgIC8vIE51ciBmdWVyIFR5cGVuIG1pdCBudXJGbGFuc2NoOnRydWUgKEJsaW5kZGVja2VsLCBLbGFtbWVyKSAtIHVuYWJoYWVuZ2lnIHZvbiByZWloZS9ncm9lc3NlLgogICAgZmxhbnNjaDogbnVsbCwKICAgIC8vIE51ciBmdWVyIGRpZSBLbGFtbWVyIChBYnNjaG5pdHQgRSk6IEJhdWZvcm0gKyBlaWdlbmVyIFdlcmtzdG9mZiArIE11dHRlci1BcnQuCiAgICAvLyBrbGFtbWVyTXV0dGVyOiAnTScgPSBNdXR0ZXIgKFN0YW5kYXJkKSwgJ1MnID0gU2VjaHNrYW50bXV0dGVyIChBdWZwcmVpcyksIFIyLTQuCiAgICBrbGFtbWVyVHlwOiAnS0wxJywga2xhbW1lcldlcmtzdG9mZjogJzEuNDMwOCcsIGtsYW1tZXJNdXR0ZXI6ICdNJywKICAgIHdlcmtzdG9mZjogJzEuNDQwNCcsIG9iZXJmbGFlY2hlOiAnSDMnLCBkaWNodHVuZzogbnVsbCwgbGlwcGU6ICdMJywKICAgIG5hY2h3ZWlzZTogKEQucHJlaXNlLm5hY2h3ZWlzU3RhbmRhcmQgfHwgW10pLnNsaWNlKCksIG1lbmdlOiAxLAogICAgdmlldzogJ3plaWNobnVuZycsICAgICAgICAvLyAnemVpY2hudW5nJyAoRElOKSB8ICdhbnNpY2h0JyAoUHJvZHVrdC1SZW5kZXIpCiAgICBwb3NpdGlvbmVuOiBbXSwga29udGFrdDogeyBmaXJtYTonJywgbmFtZTonJywgZW1haWw6JycsIHRlbGVmb246JycsIHRlcm1pbjonJywgZnJlaXRleHQ6JycgfQogIH07CgogIC8qIC0tIFVyc3BydW5nc3p1c3RhbmQgZnVlciBkZW4gWnVydWVja3NldHplbi1CdXR0b24gKEE1LCBCZXJuZCBQa3QuIDgpIC0tLS0KICAgKiBUaWVmZSBLb3BpZSBkZXMgU3RhcnQtU3RhdGVzIC0gR0VOQVUgSElFUiBnZXpvZ2VuLCBhbHNvIGJldm9yIHByZWZpbGwoKSBpaG4KICAgKiB1bnRlbiBhdXMgZGVyIFVSTCB1ZWJlcnNjaHJlaWJ0LiBTb25zdCB3dWVyZGUgZGVyIEJ1dHRvbiBiZWkgZWluZW0gZ2V0ZWlsdGVuCiAgICogS29uZmlndXJhdGlvbnMtTGluayBhdWYgREVTU0VOIFN0YW5kIHp1cnVlY2tzdGVsbGVuIHN0YXR0IGF1ZiBkZW4gZWNodGVuCiAgICogVXJzcHJ1bmcgKCJ3aWUgYmVpbSBlcnN0ZW4gTGFkZW4iOiBTY2hyaXR0IDEsIGtlaW5lIEF1c3dhaGwsIERlZmF1bHRzKS4KICAgKiBKU09OIHJlaWNodCBhbHMgS2xvbiAtIGRlciBTdGF0ZSB0cmFlZ3QgbnVyIFN0cmluZ3MvWmFobGVuL0Jvb2xzL251bGwsCiAgICogZWluIEFycmF5IHVuZCBlaW4gZmxhY2hlcyBPYmpla3QsIGtlaW5lIEZ1bmt0aW9uZW4vRGF0ZXMuICovCiAgY29uc3QgVVJTUFJVTkcgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSk7CiAgY29uc3QgaXN0VXJzcHJ1bmcgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShzdGF0ZSkgPT09IFVSU1BSVU5HOwoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0cmFpbnRzICovCiAgZnVuY3Rpb24gc3BlcnJEaWNodHVuZ2VuKCkgewogICAgY29uc3Qgb3V0ID0gbmV3IFNldCgpOwogICAgRC5jb25zdHJhaW50cy5mb3JFYWNoKGMgPT4gewogICAgICBpZiAoYy5zcGVycmVEaWNodHVuZyAmJiBjLndlbm4gJiYgYy53ZW5uLmFud2VuZHVuZyAmJiBjLndlbm4uYW53ZW5kdW5nLmluY2x1ZGVzKHN0YXRlLmFud2VuZHVuZykpCiAgICAgICAgYy5zcGVycmVEaWNodHVuZy5mb3JFYWNoKHggPT4gb3V0LmFkZCh4KSk7CiAgICB9KTsKICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhcmFtcyAtPiBTVkcgKi8KICBmdW5jdGlvbiBjb25uZWN0TGVuZ3RoRm9yKHMsIHJ3KSB7CiAgICBpZiAoIXJ3IHx8ICFBcnJheS5pc0FycmF5KHJ3LmxhZW5nZW4pKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBydy5sYWVuZ2VuLmZpbmQoeCA9PiBOdW1iZXIoeC5MKSA9PT0gTnVtYmVyKHMuY29ubmVjdExhZW5nZSkpIHx8IHJ3LmxhZW5nZW5bMF0gfHwgbnVsbDsKICB9CiAgZnVuY3Rpb24gY29ubmVjdEVuZEZvcihzLCBydykgewogICAgcmV0dXJuIHJ3ICYmIHJ3LmFuc2NobHVlc3NlID8gcncuYW5zY2hsdWVzc2Vbcy5jb25uZWN0QW5zY2hsdXNzXSB8fCBudWxsIDogbnVsbDsKICB9CiAgZnVuY3Rpb24gcGFyYW1zRm9yKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApOyBpZiAoIXQpIHJldHVybiBudWxsOwogICAgLy8gbnVyRmxhbnNjaC1UeXBlbiAoQmxpbmRkZWNrZWwvS2xhbW1lcik6IEVzIGdpYnQgbnVyIGRlbiBGbGFuc2NoLcOYLiBFaW4gUm9oci3ijIAvCiAgICAvLyBlaW5lIFdhbmRzdGFlcmtlIHdhZXJlIGdlcmF0ZW4gLT4gZGllIFplaWNobnVuZyBiZWtvbW10IE5VUiBkaWUgYmVsZWd0ZW4gRmxhbnNjaC0KICAgIC8vIG1hc3NlLiBSdW5kZSA3IChXLTA1OSk6IGRyYXcuanMvcmVuZGVyLmpzIGhhYmVuIGVjaHRlIFplaWNobnVuZ2VuIGZ1ZXIgZGVuCiAgICAvLyBCbGluZGRlY2tlbCAoQSArIERlY2tlbHN0YWVya2UgTCkgdW5kIGRpZSBLbGFtbWVyIChBICsgS2xlbW0t4oyALCBqZSBLbGFtbWVydHlwKS4KICAgIC8vIEZlaGx0IGRhcyBiZWxlZ3RlIE1hc3MgKEZsYW5zY2ggMjg2LDEvMzE5LzMzOCksIGJsZWlidCBwYXJhbXMgbnVsbCB1bmQKICAgIC8vIHJlbmRlclByZXZpZXcgemVpZ3Qgd2VpdGVyaGluIGRpZSAiWmVpY2hudW5nIGZvbGd0Ii1LYXJ0ZSBzdGF0dCBlcmZ1bmRlbmVyIE1hc3NlLgogICAgaWYgKGlzdE51ckZsYW5zY2godCkpIHsKICAgICAgY29uc3QgZiA9IGZsYW5zY2hGb3Iocyk7IGlmICghZikgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IGJhc2lzID0geyBmbGFuZ2VPZDogZi5mbGFuZ2VPRCwgbGFiZWw6ICdGbGFuc2NoLeKMgCAnICsgZi5sYWJlbCwgcHJvdkRpbXM6IGZhbHNlIH07CiAgICAgIGlmIChpc3RLbGFtbWVyKHQpKSB7CiAgICAgICAgY29uc3QgYSA9IGYua2xhbW1lckEgPyBmLmtsYW1tZXJBW3Mua2xhbW1lclR5cF0gOiBudWxsOwogICAgICAgIGlmICghKGEgPiAwKSkgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYmFzaXMsIHsKICAgICAgICAgIHR5cGU6ICdrbGFtbWVyJywga2xhbW1lckE6IGEsIGtsYW1tZXJUeXA6IHMua2xhbW1lclR5cCwga2xhbW1lck11dHRlcjogcy5rbGFtbWVyTXV0dGVyLAogICAgICAgICAgd2Vya3N0b2ZmOiBlZmZXZXJrc3RvZmYocyksIHN1cmZhY2U6ICcnICAgLy8gUjItNDogS2xhbW1lciBoYXQga2VpbmUgT2JlcmZsYWVjaGUKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoIShmLmJsaW5kVGhrID4gMCkpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihiYXNpcywgewogICAgICAgIHR5cGU6ICdibGluZGRlY2tlbCcsIGxlbmd0aDogZi5ibGluZFRoaywKICAgICAgICB3ZXJrc3RvZmY6IGVmZldlcmtzdG9mZihzKSwgc3VyZmFjZTogcy5vYmVyZmxhZWNoZQogICAgICB9KTsKICAgIH0KICAgIC8vIG1hc3NlRm9sZ3QgKENGL0NGSSk6IGtlaW4gZWluemlnZXMgYmVsZWd0ZXMgTWFzcyAtPiBrZWluZSBQYXJhbXMsIGtlaW5lIFplaWNobnVuZy4KICAgIC8vIChyb3dGb3IoKSBsaWVmZXJ0IGhpZXIgb2huZWhpbiBudWxsLCBkYXMgaXN0IG51ciBkaWUgZXhwbGl6aXRlIEFic2ljaHQuKQogICAgaWYgKGlzdE1hc3NlRm9sZ3QodCkpIHJldHVybiBudWxsOwogICAgLy8gUmVkdXppZXJ1bmcgb2huZSB6d2VpdGVuIMOYOiBrZWluIGJlbGVndGVzIE1hc3MgLT4ga2VpbmUgUGFyYW1zLCBrZWluZSBaZWljaG51bmcuCiAgICAvLyByZW5kZXJQcmV2aWV3KCkgZmFlbmd0IGRhcyBhYiB1bmQgemVpZ3QgZGllICJmb2xndCItS2FydGUsIHN0YXR0IGRyYXcuanMgZWluZW4KICAgIC8vIGF1cyAwLjY2IGdlcmVjaG5ldGVuIMOYICgzNCw5OCAmIENvLikgYmVtYXNzZW4genUgbGFzc2VuLgogICAgaWYgKGlzdFJlZHV6aWVydW5nT2huZVp3ZWl0T0QocykpIHJldHVybiBudWxsOwogICAgY29uc3QgcncgPSByb3dGb3Iocyk7IGlmICghcncpIHJldHVybiBudWxsOwogICAgaWYgKHQuaWQgPT09ICdDRicpIHsKICAgICAgY29uc3QgbGcgPSBjb25uZWN0TGVuZ3RoRm9yKHMsIHJ3KTsKICAgICAgaWYgKCFsZyB8fCBydy5EZSA9PSBudWxsIHx8IHJ3LkRpID09IG51bGwgfHwgcncuRGYgPT0gbnVsbCB8fCBsZy5MID09IG51bGwpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6J2Nvbm5lY3RmbGFuc2NoJywgb2Q6cncuRGUsIGlubmVyRGlhbWV0ZXI6cncuRGksIGZsYW5nZU9kOnJ3LkRmLAogICAgICAgIGxlbmd0aDpsZy5MLCBwcm9kdWN0U2VyaWVzOmNvbm5lY3RTZXJpZShzKSwgbGFiZWw6bGJsKHJ3KSwKICAgICAgICBzdXJmYWNlOnMub2JlcmZsYWVjaGUsIHdlcmtzdG9mZjplZmZXZXJrc3RvZmYocyksIHByb3ZEaW1zOmZhbHNlCiAgICAgIH07CiAgICB9CiAgICBpZiAodC5pZCA9PT0gJ0NGSScpIHsKICAgICAgY29uc3QgZW5kID0gY29ubmVjdEVuZEZvcihzLCBydyk7CiAgICAgIGNvbnN0IHVwcGVyID0gRC5tYXNzZS5jb25uZWN0LmNmaS5vYmVyZXJBbnNjaGx1c3M7CiAgICAgIGNvbnN0IGVuZERpYW1ldGVyID0gZW5kID8gKHMuY29ubmVjdEFuc2NobHVzcyA9PT0gJ1RDJyA\\\/IGVuZC5UQyA6IGVuZC5BKSA6IG51bGw7CiAgICAgIGlmICghZW5kIHx8ICF1cHBlciB8fCBydy5EZSA9PSBudWxsIHx8IHJ3LkRpID09IG51bGwgfHwgcncuWSA9PSBudWxsIHx8IGVuZC5MID09IG51bGwgfHwgZW5kRGlhbWV0ZXIgPT0gbnVsbCB8fCB1cHBlci5EZSA9PSBudWxsIHx8IHVwcGVyLkRpID09IG51bGwpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6J2Nvbm5lY3RpbmxpbmUnLCBvZDpydy5EZSwgaW5uZXJEaWFtZXRlcjpydy5EaSwgbGVuZ3RoOmVuZC5MLAogICAgICAgIGJyYW5jaEhlaWdodDpydy5ZLCBlbmRUeXBlOnMuY29ubmVjdEFuc2NobHVzcywgZW5kRGlhbWV0ZXIsCiAgICAgICAgdXBwZXJPdXRlckRpYW1ldGVyOnVwcGVyLkRlLCB1cHBlcklubmVyRGlhbWV0ZXI6dXBwZXIuRGksCiAgICAgICAgcHJvZHVjdFNlcmllczpjb25uZWN0U2VyaWUocyksIGxhYmVsOmxibChydyksIHN1cmZhY2U6cy5vYmVyZmxhZWNoZSwKICAgICAgICB3ZXJrc3RvZmY6ZWZmV2Vya3N0b2ZmKHMpLCBwcm92RGltczpmYWxzZQogICAgICB9OwogICAgfQogICAgY29uc3QgZE8gPSBkaWNodE9iaihzLmRpY2h0dW5nKTsKICAgIGNvbnN0IHAgPSB7CiAgICAgIC8vIGVpbnplbFN0dXR6ZW4gKFRDRC9UQ1MpOiAnc3R1dHplbicgemVpY2huZXQgRUlORU4gU3R1dHplbiAtIG9obmUgendlaXRlIEZlcnJ1bGUsCiAgICAgIC8vIG9obmUgRGljaHR1bmcsIG9obmUgS2xhbW1lciAoQmVybmQgMTYuMDcuMjAyNiwgUGt0LiA5LjIvOS4zKS4KICAgICAgdHlwZTogKHQuZWluemVsU3R1dHplbiAmJiB0LnN2Z1R5cGUgPT09ICdjbGFtcHN0dXR6ZW4nKSA\\\/ICdzdHV0emVuJyA6IHQuc3ZnVHlwZSwKICAgICAgLy8gb2RPZjogVENEIGxpZWZlcnQgYXVzc2VuRCAoZGlja3dhbmRpZyksIHNvbnN0IHR1YmVPRC4gTklFIGRpcmVrdCBydy50dWJlT0QgLQogICAgICAvLyBkaWUgVENELVplaWxlbiBoYWJlbiBrZWluIHR1YmVPRCwgZGFzIHdhZXJlIHVuZGVmaW5lZCAtPiBkcmF3LmpzLURlZmF1bHQg4oyAMjUuCiAgICAgIG9kOiBvZE9mKHJ3KSwgd2FsbDogd2FsbE9mKHJ3KSwgc3VyZmFjZTogcy5vYmVyZmxhZWNoZSwgd2Vya3N0b2ZmOiBlZmZXZXJrc3RvZmYocyksCiAgICAgIGNsYW1wU2l6ZTogbGJsKHJ3KSwgZ2Fza2V0TWF0ZXJpYWw6IHMuZGljaHR1bmcgfHwgJ0VQRE0nLCBnYXNrZXRDb2xvcjogZE8gPyBkTy5mYXJiZSA6IG51bGwsCiAgICAgIGRuOiBzLnJlaWhlID09PSAnQScgPyBTdHJpbmcocncuaWQpLnJlcGxhY2UoJ0ROJywgJycpIDogbGJsKHJ3KQogICAgfTsKICAgIGlmICh0LnN2Z1R5cGUgPT09ICdjbGFtcHN0dXR6ZW4nKSB7CiAgICAgIHAuZmxhbmdlT2QgPSBydy5mbGFuZ2VPRDsKICAgICAgLy8gbGFlbmdlT2Y6IFRDRCAtPiBIb2VoZSA2MCAoTGFiZWwgJ2gnKSwgc29uc3QgS0svS0wgKExhYmVsICdMJykuIEZlaGx0IGRhcyBNYXNzLAogICAgICAvLyBibGVpYnQgcC5sZW5ndGggdW5nZXNldHp0IC0gZGFubiB6ZWljaG5ldCBkcmF3LmpzIHNlaW5lbiBEZWZhdWx0LiBEYXMgZGFyZiBudXIKICAgICAgLy8gcGFzc2llcmVuLCB3ZW5uIGRpZSBaZWlsZSB3aXJrbGljaCBrZWluIExhZW5nZW5tYXNzIHRyYWVndC4KICAgICAgY29uc3QgbGcgPSBsYWVuZ2VPZih0LCBydywgcy5sYWVuZ2VWYXJpYW50ZSk7CiAgICAgIGlmIChsZykgeyBwLmxlbmd0aCA9IGxnLndlcnQ7IHAubGVuZ3RoTGFiZWwgPSBsZy5sYWJlbDsgfQogICAgfQogICAgZWxzZSBpZiAodC5zdmdUeXBlID09PSAnYmxpbmRrYXBwZScpIHsgcC5mbGFuZ2VPZCA9IHJ3LmZsYW5nZU9EOyBwLmxlbmd0aCA9IHJ3LmtrOyB9CiAgICBlbHNlIGlmICh0LnN2Z1R5cGUgPT09ICdrbGFtbWVyJykgeyBwLmZsYW5nZU9kID0gcncuZmxhbmdlT0Q7IH0KICAgIC8vIFR5cCBEICdkaWNodHVuZycgKFJ1bmRlIDcsIFctMDU5KTogRS9DIGtvbW1lbiBhdXMgZGVyIGJlbGVndGVuIERJTjMyNjc2LVplaWxlOwogICAgLy8gZGVyIFR5cCBmb2xndCBkZXIgYmVsZWd0ZW4gQXVzZnVlaHJ1bmdzcmVnZWwgKFR5cCBJSSA9IG1pdCBMaXBwZSwgVHlwIEkgPSBvaG5lLAogICAgLy8gd2FlaGxiYXIgbnVyIGluIFJlaWhlIEMpLiBkcmF3LmpzL3JlbmRlci5qcyBmYWxsZW4gb2huZSBFL0Mgc2VsYnN0IGF1ZiBkZW4KICAgIC8vIFBsYXR6aGFsdGVyIHp1cnVlY2sgLSBoaWVyIHdpcmQgbmljaHRzIGVyZ2Flbnp0IG9kZXIgZ2VyYXRlbi4KICAgIGVsc2UgaWYgKHQuc3ZnVHlwZSA9PT0gJ2RpY2h0dW5nJykgewogICAgICAvLyBJbm5lbi3DmCBoYWVuZ3Qgc2VpdCBkZW0gMTEuMDguMjAyNiBhbSBEaWNodHVuZ3N3ZXJrc3RvZmYgKEJlcm5kOiB3ZWljaCA9IFN0dXR6ZW4KICAgICAgLy8gKyAwLDIgbW0sIFBURkUgdW5kIFBURkUvRktNID0gU3R1dHplbi1Jbm5lbi3DmCwgVEMyNSBlaWdlbmUgV2VydGUpLiBEZXNoYWxiIE5JRQogICAgICAvLyBydy5nYXNrZXRJRCBkaXJla3QgemVpY2huZW4gLSBkYXMgd2FlcmUgaW1tZXIgZGVyIHdlaWNoZSBGYWxsLgogICAgICBwLmdhc2tldE9kID0gcncuZ2Fza2V0T0Q7IHAuZ2Fza2V0SWQgPSBkaWNodHVuZ0lubmVuRChzLCBydyk7CiAgICAgIHAuZ2Fza2V0VHlwZSA9IGVmZkxpcHBlKHMpID09PSAnTycgPyAnSScgOiAnSUknOwogICAgICAvLyBEaWUgTGVnZW5kZSBkZXIgWmVpY2hudW5nIGZ1ZWhydGUgYmlzIHp1bSAxMS4wOC4yMDI2IGF1Y2ggYmVpIGRlciBEaWNodHVuZwogICAgICAvLyAiV2Vya3N0b2ZmIDEuNDQzNSAvIE9iZXJmbGFlY2hlIEg0IiAtIGdlbmF1IGRpZSB6d2VpIEFuZ2FiZW4sIGRpZSBCZXJuZCBoaWVyCiAgICAgIC8vIHdlZ2hhYmVuIHdpbGwuIGxlZ2VuZEJveCgpIGZpbHRlcnQgbGVlcmUgV2VydGUgc2VsYnN0IGhlcmF1cywgZGVzaGFsYiByZWljaHQKICAgICAgLy8gZXMsIHNpZSBnYXIgbmljaHQgZXJzdCBtaXR6dWdlYmVuLgogICAgICBwLndlcmtzdG9mZiA9ICcnOyBwLnN1cmZhY2UgPSAnJzsKICAgIH0KICAgIGVsc2UgaWYgKGlzQmVuZCh0KSkgewogICAgICBjb25zdCB0YW5nZW50ID0gdC5ib2dlbiA9PT0gNDUgPyBydy5MM180NSA6IHJ3LkwzXzkwOwogICAgICBjb25zdCBvdmVyYWxsID0gdC5ib2dlbiA9PT0gNDUgPyBydy5MMiA6IHJ3LkwxOwogICAgICBpZiAocncuUiA9PSBudWxsIHx8IHRhbmdlbnQgPT0gbnVsbCB8fCBvdmVyYWxsID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBwLmJlbmRSYWRpdXMgPSBydy5SOyBwLmxlbmd0aCA9IHRhbmdlbnQ7IHAubGVuZ3RoTGFiZWwgPSAnTDMnOwogICAgICBwLm92ZXJhbGxMZW5ndGggPSBvdmVyYWxsOyBwLm92ZXJhbGxMZW5ndGhMYWJlbCA9IHQuYm9nZW4gPT09IDQ1ID8gJ0wyJyA6ICdMMSc7CiAgICB9CiAgICAvKiBULVN0dWVjazogRGllIEFiZ2FuZ3NsYWVuZ2UgaXN0IGpldHp0IGluIEJFSURFTiBCYXVmb3JtZW4gZWluIGVjaHRlcyBNYXNzIGF1cwogICAgICogZGVyIEt1bmRlbnRhYmVsbGUgLSBGb3JtIFQgYXVzIFNwYWx0ZSBMMiwgRm9ybSBUSyBhdXMgU3BhbHRlIEwxIChCZXJuZAogICAgICogMjcuMDcuMjAyNikuIEVzIHdpcmQgd2VpdGVyaGluIG5pY2h0cyBnZXNjaGFldHp0OiBmZWhsdCBkZXIgV2VydCwgZ2lidCBlcwogICAgICoga2VpbmUgWmVpY2hudW5nLiAqLwogICAgZWxzZSBpZiAodC5zdmdUeXBlID09PSAndHN0dWVjaycpIHsKICAgICAgLy8gUmVkdXppZXJ0OiBMMiAodW5kIEwxKSBoYWVuZ2VuIGFtIGJlbGVndGVuIFBhYXIsIG5pY2h0IGFuIGRlciBEdXJjaGdhbmdzemVpbGUuCiAgICAgIC8vIE9obmUgYmVsZWd0ZXMgUGFhci9ad2VpdC3DmCAtPiBudWxsIChmYWlsLWNsb3NlZCwga2VpbmUgZXJmdW5kZW5lIFplaWNobnVuZykuCiAgICAgIGNvbnN0IHBhaXIgPSB0LnJlZHV6aWVydCA\\\/IHRTdHVlY2tQYWlyKHMpIDogbnVsbDsKICAgICAgY29uc3Qgc3JjID0gdC5yZWR1emllcnQgPyBwYWlyIDogcnc7CiAgICAgIGlmICh0a09obmVNYXNzKHMpKSByZXR1cm4gbnVsbDsKICAgICAgY29uc3QgYnJhbmNoTDIgPSBhYmdhbmdMMihzLCBzcmMpOwogICAgICBpZiAocncuTCA9PSBudWxsIHx8IHJ3LkwwID09IG51bGwgfHwgYnJhbmNoTDIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGNvbnN0IHIyID0gdC56d2VpdGVHcm9lc3NlID8gcm93MkZvcihzKSA6IG51bGw7CiAgICAgIGlmICh0LnJlZHV6aWVydCAmJiAhcjIpIHJldHVybiBudWxsOwogICAgICBwLmxlbmd0aCA9IHJ3Lkw7IHAuYnJhbmNoTGVuZ3RoID0gYnJhbmNoTDI7CiAgICAgIHAuYnJhbmNoT2QgPSAodC5yZWR1emllcnQgJiYgcjIpID8gb2RPZihyMikgOiBvZE9mKHJ3KTsKICAgICAgcC50Zm9ybSA9IHMuZm9ybVZhcmlhbnRlID09PSAnVEsnID8gJ1RLJyA6ICdUJzsKICAgIH0KICAgIC8vIERlciB6d2VpdGUgw5gga29tbXQgQVVTU0NITElFU1NMSUNIIGF1cyByb3cyRm9yIChzdGF0ZS5ncm9lc3NlMikgLSBuaWUgYXVzIGVpbmVtCiAgICAvLyBGYWt0b3IuIGlzdFJlZHV6aWVydW5nT2huZVp3ZWl0T0QgaGF0IG9iZW4gc2Nob24gbnVsbCBnZWxpZWZlcnQsIGZhbGxzIGVyIGZlaGx0OwogICAgLy8gZGFzIGlmKCFyMikgcmV0dXJuIG51bGwgaXN0IGRpZSBkb3BwZWx0ZSBBYnNpY2hlcnVuZzogbGllYmVyIGtlaW5lIFplaWNobnVuZyBhbHMKICAgIC8vIGVpbmUgZXJmdW5kZW5lIFJlZHV6aWVydW5nLgogICAgZWxzZSBpZiAodC5zdmdUeXBlID09PSAncmVkdXppZXJ1bmcnKSB7CiAgICAgIGNvbnN0IHIyID0gcm93MkZvcihzKSwgcGFpciA9IHJlZHVjdGlvblBhaXIocyk7CiAgICAgIGlmICghcjIgfHwgIXBhaXIgfHwgcGFpci5MID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBwLm9kMiA9IG9kT2YocjIpOyBwLndhbGwyID0gd2FsbE9mKHIyKTsgcC5sZW5ndGggPSBwYWlyLkw7IHAuZWNjZW50cmljID0gcy5leHplbnRyaXNjaDsKICAgIH0KICAgIHAucHJvdkRpbXMgPSBmYWxzZTsKICAgIHJldHVybiBwOwogIH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVpcyAqLwogIC8qIFNwcnVuZ21hcmtlbiB1bnRlciBkZW0gU3R1ZWNremFobGZlbGQuIFZlcmVpbmlndW5nIGF1cyBkZW4gYWxsZ2VtZWluZW4KICAgKiBNZW5nZW52b3JzY2hsYWVnZW4gKEQubWVuZ2Vuc3RhZmZlbCkgdW5kIGRlbiB0YXRzYWVjaGxpY2hlbiBSYWJhdHRzdHVmZW4KICAgKiAoRC5wcmVpc2Uuc3RhZmZlbCkuIE9obmUgZGllIFZlcmVpbmlndW5nIHdhciBlaW5lIGltIEFkbWluIGdlcGZsZWd0ZSBTdHVmZQogICAqIHBlciBLbGljayBuaWNodCBlcnJlaWNoYmFyOiBkaWUgS25vZXBmZSBzdGFuZGVuIGZlc3QgYXVmIDEvMjUvNTAvMTAwLzI1MCwKICAgKiBnZXJlY2huZXQgd3VyZGUgYWJlciBtaXQgZGVuIFN0dWZlbiBhdXMgZGVyIFN0YWZmZWwgKEJlZnVuZCAyMS4wOC4yMDI2KS4gKi8KICBmdW5jdGlvbiBtZW5nZW5TcHJ1bmdtYXJrZW4oKSB7CiAgICBjb25zdCBiYXNpcyA9IEFycmF5LmlzQXJyYXkoRC5tZW5nZW5zdGFmZmVsKSA\\\/IEQubWVuZ2Vuc3RhZmZlbCA6IFsxXTsKICAgIGNvbnN0IHN0dWZlbiA9IChELnByZWlzZSAmJiBBcnJheS5pc0FycmF5KEQucHJlaXNlLnN0YWZmZWwpID8gRC5wcmVpc2Uuc3RhZmZlbCA6IFtdKQogICAgICAuZmlsdGVyKHggPT4geCAmJiB4LnJhYmF0dCA+IDAgJiYgeC5hYiA+IDApCiAgICAgIC5tYXAoeCA9PiB4LmFiKTsKICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYmFzaXMuY29uY2F0KHN0dWZlbikpKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7CiAgfQoKICAvKiBFeGFrdGUgUHJlaXNsaXN0ZW4gdm9uIFdlaXNzICgyMS4wOC4yMDI2KS4gRGllIFplaWxlbnNjaGx1ZXNzZWwgZm9sZ2VuCiAgICogUmVpaGUgKyBHcm9lc3Nlbi1JRCBhdXMgZGF0YS5qcy4gVCB1bmQgVEsgaGFiZW4gZ2V0cmVubnRlIFNwYWx0ZW4uIEtsYW1tZXIKICAgKiB1bmQgQmxpbmRkZWNrZWwgd2VyZGVuIHdpZSBpbSBVSSBudXIgbmFjaCBGbGFuc2NoLcOYIGJlcHJlaXN0LiAqLwogIGZ1bmN0aW9uIGV4YWN0UHJpY2VLZXkocywgdCkgewogICAgaWYgKCFzIHx8ICF0KSByZXR1cm4gbnVsbDsKICAgIGlmICh0LmlkID09PSAnVFMnKSByZXR1cm4gcy5mb3JtVmFyaWFudGUgPT09ICdUSycgPyAnVFNfVEsnIDogJ1RTX1QnOwogICAgcmV0dXJuIHQuaWQ7CiAgfQoKICBmdW5jdGlvbiBleGFjdEJhc2VQcmljZShzLCB0LCBQKSB7CiAgICBpZiAoIXMgfHwgIXQgfHwgIVApIHJldHVybiBudWxsOwogICAgaWYgKGlzdE51ckZsYW5zY2godCkpIHsKICAgICAgY29uc3Qgcm93ID0gUC5mbGFuc2NocHJlaXMgJiYgcy5mbGFuc2NoID8gUC5mbGFuc2NocHJlaXNbcy5mbGFuc2NoXSA6IG51bGw7CiAgICAgIHJldHVybiByb3cgJiYgcm93W3QuaWRdICE9IG51bGwgPyBOdW1iZXIocm93W3QuaWRdKSA6IG51bGw7CiAgICB9CiAgICBjb25zdCByb3dLZXkgPSBzLnJlaWhlICYmIHMuZ3JvZXNzZSA\\\/IHMucmVpaGUgKyAnOicgKyBzLmdyb2Vzc2UgOiBudWxsOwogICAgY29uc3Qgcm93ID0gcm93S2V5ICYmIFAuZXhha3QgPyBQLmV4YWt0W3Jvd0tleV0gOiBudWxsOwogICAgY29uc3QgcHJpY2VLZXkgPSBleGFjdFByaWNlS2V5KHMsIHQpOwogICAgcmV0dXJuIHJvdyAmJiBwcmljZUtleSAmJiByb3dbcHJpY2VLZXldICE9IG51bGwgPyBOdW1iZXIocm93W3ByaWNlS2V5XSkgOiBudWxsOwogIH0KCiAgLyogRGllIFByZWlzbGlzdGVud2VydGUgZnVlciBUQyB1bmQgVENTIGJlemllaGVuIHNpY2ggbGF1dCBCZXJuZCBMaW5rZXIgYXVmCiAgICogZGllIGxhbmdlIFN0dXR6ZW5sYWVuZ2UgS0wgKE1haWwgdm9tIDI4LjA4LjIwMjYpLiBGdWVyIEtLIGdlbHRlbiBkaWUgdm9uCiAgICogaWhtIGJlc3RhZXRpZ3RlbiBBYnNjaGxhZWdlOiBFaW56ZWxzdHV0emVuIC00MCAlLCBrb21wbGV0dGUgVmVyYmluZHVuZwogICAqIC0zNyAlLiBBbGxlIGFuZGVyZW4gVHlwZW4gdW5kIEtMIGJsZWliZW4gdW52ZXJhZW5kZXJ0LiAqLwogIGZ1bmN0aW9uIGxhZW5nZW5QcmVpc0Zha3RvcihzLCB0KSB7CiAgICBpZiAoIXMgfHwgIXQgfHwgcy5sYWVuZ2VWYXJpYW50ZSAhPT0gJ0tLJykgcmV0dXJuIDE7CiAgICBpZiAodC5pZCA9PT0gJ1RDUycpIHJldHVybiAwLjYwOwogICAgaWYgKHQuaWQgPT09ICdUQycpIHJldHVybiAwLjYzOwogICAgcmV0dXJuIDE7CiAgfQoKICBmdW5jdGlvbiBwcmljZUluZm8ocykgewogICAgY29uc3QgdCA9IHR5cE9iaihzLnR5cCksIG4gPSBELm5vcm1lbi5maW5kKHggPT4geC5pZCA9PT0gcy5ub3JtKSwgUCA9IEQucHJlaXNlOwogICAgaWYgKCF0IHx8ICFuKSByZXR1cm4geyBtb2RlOiAnYW5mcmFnZScgfTsKICAgIGlmIChuLnByZWlzTW9kdXMgPT09ICdhbmZyYWdlJykgcmV0dXJuIHsgbW9kZTogJ2FuZnJhZ2UnLCBncnVuZDogbi5sYWJlbCArICcg4oCTIEZpcm1hIFdlaXNzIGthbGt1bGllcnQgaW5kaXZpZHVlbGwuJyB9OwogICAgLy8gRmFpbC1zYWZlOiBBdWNoIHdlbm4gZWluZSBiZXN0ZWhlbmRlIFdvcmRQcmVzcy1JbnN0YWxsYXRpb24gbm9jaCBhbHRlCiAgICAvLyBCZWlzcGllbHdlcnRlIG9kZXIgcGxhdHpoYWx0ZXI6ZmFsc2UgZ2VzcGVpY2hlcnQgaGF0LCBlcnNjaGVpbmVuIEV1cm8tCiAgICAvLyBCZXRyw6RnZSBlcnN0IG5hY2ggZWluZXIgYXVzZHLDvGNrbGljaGVuIFByZWlzZnJlaWdhYmUgaW0gQWRtaW4uCiAgICBpZiAoUC5mcmVpZ2VnZWJlbiAhPT0gdHJ1ZSkgcmV0dXJuIHsgbW9kZTogJ2FuZnJhZ2UnLCBncnVuZDogJ0RpZSBQcmVpc2ZyZWlnYWJlIHZvbiBGaXJtYSBXZWlzcyBzdGVodCBub2NoIGF1cy4nIH07CiAgICBpZiAoUC5wbGF0emhhbHRlciA9PT0gdHJ1ZSkgcmV0dXJuIHsgbW9kZTogJ2FuZnJhZ2UnLCBncnVuZDogJ0Zpcm1hIFdlaXNzIGthbGt1bGllcnQgaW5kaXZpZHVlbGwuJyB9OwogICAgY29uc3QgZXhhY3RNb2RlID0gUC5tb2R1cyA9PT0gJ2V4YWt0JzsKICAgIGNvbnN0IGJhc2UgPSBleGFjdE1vZGUKICAgICAgPyBleGFjdEJhc2VQcmljZShzLCB0LCBQKQogICAgICA6IChQLmdydW5kcHJlaXMgJiYgdCA\\\/IFAuZ3J1bmRwcmVpc1tzLnR5cF0gOiBudWxsKTsKICAgIC8vIEltIGFsdGVuIEdydW5kcHJlaXMtTW9kZWxsIGJsZWliZW4gbnVyRmxhbnNjaC1UeXBlbiAoQmxpbmRkZWNrZWwsIEtsYW1tZXIpCiAgICAvLyBnZXNwZXJydDogRGllIEZvcm1lbCBza2FsaWVydCB1ZWJlciBkZW4gUk9IUi1BdXNzZW5kdXJjaG1lc3NlcgogICAgLy8gKGRuRmFrdG9yUmVmT0QpLiBEZW4gZ2lidCBlcyBiZWkgcmVpbmVyIEZsYW5zY2gtQXVzd2FobCBuaWNodCwgdW5kIGVpbmUgUHJlaXNzdGFmZmVsIG5hY2gKICAgIC8vIEZsYW5zY2gtw5ggaGF0IFdlaXNzIG5pY2h0IGdlbGllZmVydC4gRWluIFJ1ZWNrZmFsbCBhdWYgcm93czMyKHJlaWhlKVswXSB3dWVyZGUgc3RpbGxzY2h3ZWlnZW5kCiAgICAvLyBtaXQgZGVyIGtsZWluc3RlbiBOZW5ud2VpdGUgcmVjaG5lbiAtPiBmYWxzY2hlciBQcmVpcy4gRGVzaGFsYiBlaHJsaWNoICJhdWYgQW5mcmFnZSIuCiAgICAvLyBNVVNTIFZPUiBkZXIgWnVzY2hsYWdzcHJ1ZWZ1bmcgc3RlaGVuOiBEaWUgS2xhbW1lci1XZXJrc3RvZmZlIDEuNDMwOC8xLjQ0MDggc2luZCBpbgogICAgLy8gd2Vya3N0b2ZmWnVzY2hsYWdQcm96ZW50IGJld3Vzc3QgbmljaHQgZW50aGFsdGVuIChzaWVoZSBkYXRhLmpzKS4gU3RhbmQgZGllIFBydWVmdW5nIGRhdm9yLAogICAgLy8gYmVrYW0gZGVyIEt1bmRlIGJlaSBqZWRlciBLbGFtbWVyIGRpZSBmYWxzY2hlIEJlZ3J1ZW5kdW5nICJadXNjaGxhZWdlIG5vY2ggbmljaHQgYmVzdGFldGlndCIKICAgIC8vIHN0YXR0IGRlciB3YWhyZW4gKEJlZnVuZCAyMS4wOC4yMDI2KS4KICAgIC8vIERpZSBuZXVlIFdlaXNzLUxpc3RlIGVudGhhZWx0IGRhZ2VnZW4gZWNodGUgRmxhbnNjaHByZWlzZS4gRGFubiBkYXJmIGRpZQogICAgLy8gU3BlcnJlIHdlZywgYWJlciBudXIgd2VubiBmdWVyIGRlbiBnZXdhZWhsdGVuIEZsYW5zY2ggd2lya2xpY2ggZWluIFdlcnQgZGEgaXN0LgogICAgaWYgKCFleGFjdE1vZGUgJiYgaXN0TnVyRmxhbnNjaCh0KSkgcmV0dXJuIHsgbW9kZTogJ2FuZnJhZ2UnLCBncnVuZDogdC5sYWJlbCArICcgd2lyZCBudXIgbmFjaCBGbGFuc2NoLcOYIHVudGVyc2NoaWVkZW4sIGVpbmUgUHJlaXNzdGFmZmVsIG5hY2ggRmxhbnNjaC3DmCBsaWVndCBub2NoIG5pY2h0IHZvci4nIH07CiAgICBpZiAoYmFzZSA9PSBudWxsKSByZXR1cm4geyBtb2RlOiAnYW5mcmFnZScsIGdydW5kOiAnRsO8ciAnICsgdC5sYWJlbCArICcgbGllZ3Qgbm9jaCBrZWluIFJpY2h0cHJlaXMgdm9uIEZpcm1hIFdlaXNzIHZvci4nIH07CiAgICAvLyBEaWNodHVuZ2VuIGhhYmVuIGtlaW5lbiBFZGVsc3RhaGwtL09iZXJmbGFlY2hlbnNjaHJpdHQuIEtsYW1tZXJuIHRyYWdlbgogICAgLy8gZWlnZW5lIFdlcmtzdG9mZmUsIGZ1ZXIgZGllIFdlaXNzIGtlaW5lbiBNYXRlcmlhbGF1ZnNjaGxhZyBnZWxpZWZlcnQgaGF0LgogICAgY29uc3Qgb2huZUZpdHRpbmdadXNjaGxhZyA9IGlzdERpY2h0dW5nQmF1dGVpbCh0KSB8fCBpc3RLbGFtbWVyKHQpOwogICAgY29uc3QgbWF0WiA9IG9obmVGaXR0aW5nWnVzY2hsYWcgPyAwIDogUC53ZXJrc3RvZmZadXNjaGxhZ1Byb3plbnRbZWZmV2Vya3N0b2ZmKHMpXTsKICAgIGNvbnN0IHN1cmZaID0gb2huZUZpdHRpbmdadXNjaGxhZyA\\\/IDAgOiBQLm9iZXJmbGFlY2hlWnVzY2hsYWdQcm96ZW50W3Mub2JlcmZsYWVjaGVdOwogICAgaWYgKG1hdFogPT0gbnVsbCB8fCBzdXJmWiA9PSBudWxsKSByZXR1cm4geyBtb2RlOidhbmZyYWdlJywgZ3J1bmQ6J0RpZSBadXNjaGzDpGdlIGbDvHIgZGllc2UgQXVzZsO8aHJ1bmcgc2luZCBub2NoIG5pY2h0IHZvbGxzdMOkbmRpZyBiZXN0w6R0aWd0LicgfTsKICAgIGlmICh0LmRpY2h0dW5nICYmIHMuZGljaHR1bmcgJiYgUC5kaWNodHVuZ0F1ZnByZWlzRXVyb1tzLmRpY2h0dW5nXSA9PSBudWxsKSByZXR1cm4geyBtb2RlOidhbmZyYWdlJywgZ3J1bmQ6J0RlciBEaWNodHVuZ3NhdWZwcmVpcyBpc3Qgbm9jaCBuaWNodCBiZXN0w6R0aWd0LicgfTsKICAgIGlmICgocy5uYWNod2Vpc2UgfHwgW10pLnNvbWUoaWQgPT4gUC5uYWNod2Vpc0F1ZnByZWlzRXVyb1tpZF0gPT0gbnVsbCkpIHJldHVybiB7IG1vZGU6J2FuZnJhZ2UnLCBncnVuZDonTWluZGVzdGVucyBlaW4gZ2V3w6RobHRlciBOYWNod2VpcyB3aXJkIGluZGl2aWR1ZWxsIGthbGt1bGllcnQuJyB9OwogICAgY29uc3QgY2hhcmdlbk5hY2h3ZWlzZSA9IChzLm5hY2h3ZWlzZSB8fCBbXSkuZmlsdGVyKGlzdENoYXJnZW5OYWNod2Vpcyk7CiAgICBsZXQgc3RrID0gYmFzZTsKICAgIHN0ayAqPSBsYWVuZ2VuUHJlaXNGYWt0b3IocywgdCk7CiAgICBpZiAoIWV4YWN0TW9kZSkgewogICAgICBjb25zdCBydyA9IHJvd0ZvcihzKTsKICAgICAgLy8gb2RPZiBzdGF0dCBydy50dWJlT0Q6IERlciBkaWNrd2FuZGlnZSBUQ0QgaGF0IGtlaW4gdHViZU9EIC0gZGVyIEZha3RvciB3YWVyZSBzb25zdAogICAgICAvLyBhdWYgdW5kZWZpbmVkIGdlbGF1ZmVuIHVuZCBkZXIgUmljaHRwcmVpcyB1ZWJlciBkZW4gZmFsc2NoZW4gKGR1ZW5ud2FuZGlnZW4pIEFECiAgICAgIC8vIHNrYWxpZXJ0LiBvZE9mIGxpZWZlcnQgZnVlciBUQ0QgZGVuIGdlbGlzdGV0ZW4gYXVzc2VuRC4KICAgICAgY29uc3Qgb2QgPSBvZE9mKHJ3KSAhPSBudWxsID8gb2RPZihydykgOiBQLmRuRmFrdG9yUmVmT0Q7CiAgICAgIGNvbnN0IGZha3RvciA9IE1hdGgubWF4KDAuNywgMSArIFAuZG5GYWt0b3JTdGVpZ3VuZyAqICgob2QgLSBQLmRuRmFrdG9yUmVmT0QpIC8gUC5kbkZha3RvclJlZk9EKSk7CiAgICAgIHN0ayAqPSBmYWt0b3I7CiAgICB9CiAgICAvLyBCZXJuZCBMaW5rZXIgKDI4LjA4LjIwMjYpOiBQcm96ZW50YXVmc2NobGFlZ2Ugd2VyZGVuIG5hY2hlaW5hbmRlciBnZXJlY2huZXQuCiAgICAvLyBCZWlzcGllbDogNzUsODAgRVVSICogMSwxNSAqIDEsMTUgPSAxMDAsMjUgRVVSIChrYXVmbWFlbm5pc2NoIGdlcnVuZGV0KS4KICAgIC8vIEV1cm8tQXVmcHJlaXNlIGJsZWliZW4gZGFuYWNoIHVudmVyYWVuZGVydCBhYnNvbHV0LgogICAgc3RrICo9ICgxICsgbWF0WiAvIDEwMCk7CiAgICBzdGsgKj0gKDEgKyBzdXJmWiAvIDEwMCk7CiAgICBpZiAodC5kaWNodHVuZyAmJiBzLmRpY2h0dW5nKSBzdGsgKz0gUC5kaWNodHVuZ0F1ZnByZWlzRXVyb1tzLmRpY2h0dW5nXTsKICAgIGlmICgodC5pZCA9PT0gJ1RDJyB8fCB0LmlkID09PSAnS0wnKSAmJiBzLmtsYW1tZXJUeXApIHsKICAgICAgY29uc3Qga2xhbW1lclogPSBQLmtsYW1tZXJUeXBBdWZwcmVpc0V1cm8gJiYgUC5rbGFtbWVyVHlwQXVmcHJlaXNFdXJvW3Mua2xhbW1lclR5cF07CiAgICAgIGlmIChrbGFtbWVyWiA9PSBudWxsKSByZXR1cm4geyBtb2RlOidhbmZyYWdlJywgZ3J1bmQ6J0RlciBBdWZwcmVpcyBmw7xyIGRlbiBnZXfDpGhsdGVuIEtsYW1tZXJ0eXAgaXN0IG5vY2ggbmljaHQgYmVzdMOkdGlndC4nIH07CiAgICAgIHN0ayArPSBOdW1iZXIoa2xhbW1lclopOwogICAgfQogICAgLy8gRGllIFNlY2hza2FudG11dHRlciBpc3QgbGF1dCBLdW5kZW51bnRlcmxhZ2UgbnVyICJnZWdlbiBBdWZwcmVpcyIKICAgIC8vIHZlcmZ1ZWdiYXI7IGVpbiBCZXRyYWcgZmVobHQuIFNpZSBkYXJmIGRlc2hhbGIga2VpbmVuIHNjaGVpbmJhciBmZXJ0aWdlbgogICAgLy8gUHJlaXMgYmVrb21tZW4uCiAgICBpZiAodC5pZCA9PT0gJ0tMJyAmJiBzLmtsYW1tZXJNdXR0ZXIgPT09ICdTJykgcmV0dXJuIHsgbW9kZTonYW5mcmFnZScsIGdydW5kOidEZXIgQXVmcHJlaXMgZsO8ciBkaWUgU2VjaHNrYW50bXV0dGVyIHdpcmQgaW5kaXZpZHVlbGwga2Fsa3VsaWVydC4nIH07CiAgICAvLyBOdXIgZGllIE5hY2h3ZWlzZSwgZGllIGplIEJhdXRlaWwgYW5mYWxsZW4sIGdlaGVuIGluIGRlbiBTdHVlY2twcmVpcy4gRmVycml0LU1lc3N1bmcKICAgIC8vIHVuZCBSYS1NZXNzcHJvdG9rb2xsIGdlaG9lcmVuIGRhenU6IGRvcnQgd2lyZCBqZWRlcyBlaW56ZWxuZSBUZWlsIGdlbWVzc2VuLgogICAgKHMubmFjaHdlaXNlIHx8IFtdKS5mb3JFYWNoKGlkID0+IHsgaWYgKCFpc3RDaGFyZ2VuTmFjaHdlaXMoaWQpKSBzdGsgKz0gUC5uYWNod2Vpc0F1ZnByZWlzRXVyb1tpZF07IH0pOwogICAgc3RrICo9IChQLmdsb2JhbEZha3RvciB8fCAxKTsgICAvLyBnbG9iYWxlciBQcmVpc2Zha3RvciAoQWRtaW4vUGx1Z2luLCB6LiBCLiAxLjAyID0gKzIgJSkKICAgIC8vIEZhbGxiYWNrIGJld3Vzc3Qge2FiOjEsIHJhYmF0dDowfSB1bmQgTklDSFQgUC5zdGFmZmVsWzBdOiBCZWdpbm50IGVpbmUgaW0gQWRtaW4KICAgIC8vIGdlcGZsZWd0ZSBTdGFmZmVsIGVyc3QgYmVpIDEwLCBnYWIgUC5zdGFmZmVsWzBdIGRlbiAxMGVyLVJhYmF0dCBhdWNoIGZ1ZXIgZWluCiAgICAvLyBlaW56ZWxuZXMgU3R1ZWNrIChCZWZ1bmQgMjEuMDguMjAyNikuCiAgICBjb25zdCBzdHVmZW4gPSBBcnJheS5pc0FycmF5KFAuc3RhZmZlbCkgPyBQLnN0YWZmZWwgOiBbXTsKICAgIGNvbnN0IHN0YWZmZWwgPSBzdHVmZW4uc2xpY2UoKS5yZXZlcnNlKCkuZmluZCh4ID0+IHMubWVuZ2UgPj0geC5hYikgfHwgeyBhYjogMSwgcmFiYXR0OiAwIH07CiAgICAvLyBDaGFyZ2VuYXVmcHJlaXNlIGhhZW5nZW4gYW4gZGVyIExpZWZlcnVuZywgbmljaHQgYW4gZGVyIFN0dWVja3phaGwuIFNpZSBrb21tZW4KICAgIC8vIGRlc2hhbGIgZXJzdCBOQUNIIGRlciBNZW5nZW5yZWNobnVuZyBkYXp1IHVuZCBiZWtvbW1lbiBiZXd1c3N0IEtFSU5FTiBNZW5nZW5yYWJhdHQ6CiAgICAvLyBlaW4gWmV1Z25pcyB3aXJkIG5pY2h0IGJpbGxpZ2VyLCB3ZWlsIG1laHIgVGVpbGUgaW4gZGVyc2VsYmVuIENoYXJnZSBsaWVnZW4uCiAgICAvLyBEZXIgZ2xvYmFsZSBQcmVpc2Zha3RvciBnaWx0IGRhZ2VnZW4gYXVjaCBoaWVyLCBzb25zdCB3YWVyZSBlciB0ZWlsd2Vpc2Ugd2lya3VuZ3Nsb3MuCiAgICBsZXQgY2hhcmdlQXVmcHJlaXMgPSAwOwogICAgY2hhcmdlbk5hY2h3ZWlzZS5mb3JFYWNoKGlkID0+IHsgY2hhcmdlQXVmcHJlaXMgKz0gUC5uYWNod2Vpc0F1ZnByZWlzRXVyb1tpZF07IH0pOwogICAgY2hhcmdlQXVmcHJlaXMgKj0gKFAuZ2xvYmFsRmFrdG9yIHx8IDEpOwogICAgY29uc3QgZ2VzYW10ID0gc3RrICogcy5tZW5nZSAqICgxIC0gc3RhZmZlbC5yYWJhdHQgLyAxMDApICsgY2hhcmdlQXVmcHJlaXM7CiAgICByZXR1cm4geyBtb2RlOiAnbGl2ZScsIHN0dWVjazogc3RrLCBnZXNhbXQsIGNoYXJnZUF1ZnByZWlzLCByYWJhdHQ6IHN0YWZmZWwucmFiYXR0LCBhYjogc3RhZmZlbC5hYiwgcGxhdHpoYWx0ZXI6ICEhUC5wbGF0emhhbHRlciB9OwogIH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUeXBlbnNjaGx1ZXNzZWwgKi8KICAvLyBHcm9lc3Nlbi1Ub2tlbiBkZXIgS29uZmlndXJhdGlvbnMtTnIuIC0gaWRlbnRpc2NoIG1pdCBkZW0gZGVyIEFydGlrZWxudW1tZXIsCiAgLy8gZGFtaXQgYmVpZGUgTnVtbWVybiBuaWNodCBpbiBkZXIgU2NocmVpYndlaXNlIGF1c2VpbmFuZGVybGF1ZmVuIChCZXJuZCAyNy4wNy4yMDI2OgogIC8vIE5XLi4uIGZ1ZXIgSVNPLCBaLi4uIGZ1ZXIgWm9sbCwgZGV1dHNjaGVzIEtvbW1hKS4KICBmdW5jdGlvbiBzaXplVG9rZW4ocykgewogICAgcmV0dXJuIGFydGlrZWxHcm9lc3NlKHMsIHJvd0ZvcihzKSkgfHwgJyc7CiAgfQogIGNvbnN0IGFydGljbGVOdW1iZXJGb3JtYXQgPSBuID0+IFN0cmluZyhNYXRoLnJvdW5kKE51bWJlcihuKSAqIDEwMCkgLyAxMDApLnJlcGxhY2UoJy4nLCAnLCcpOwogIC8qIEJlcm5kIDI3LjA3LjIwMjY6ICJpY2ggaGFiZSBub2NoIGtlaW5lIEZyZWlnYWJlIGZ1ZXIgZGllIFZlcndlbmR1bmcgZGVyCiAgICogQmV6ZWljaG51bmdlbiBkYSBkaWVzZSBIZXJzdGVsbGVyc3BlemlmaXNjaCBzaW5kLiIgRGllIGhlcnN0ZWxsZXJlaWdlbmVuCiAgICogQXJ0aWtlbGNvZGVzIGRlcyBIZXJzdGVsbGVycyB3ZXJkZW4gZGVzaGFsYiBOSUNIVCBtZWhyIGF1c2dlZ2ViZW4uCiAgICogU2VpbmUgVm9yZ2FiZSBhdWYgZGVtIFNjcmVlbnNob3Q6ICJBcnQgTnIuIHdpZSBLb25maWd1cmF0aW9uIiAtIGRpZQogICAqIEFydGlrZWxudW1tZXIgaXN0IGJlaSBDRi9DRkkgYWxzbyBpZGVudGlzY2ggbWl0IGRlciBLb25maWd1cmF0aW9ucy1Oci4KICAgKiBEaWUgQ29kZXMgYmxlaWJlbiBpbiBkYXRhLmpzIGFscyBRdWVsbGUgZXJoYWx0ZW4sIG51ciB1bnNpY2h0YmFyLiAqLwogIGZ1bmN0aW9uIGNvbm5lY3RBcnRpY2xlTnVtYmVyKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApLCBydyA9IHJvd0ZvcihzKTsKICAgIGlmICghdCB8fCAhcncpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHR5cGVjb2RlKHMpOwogIH0KICAvKiBHcm9lc3Nlbi1Ub2tlbiBkZXIgQXJ0aWtlbG51bW1lciAoQmVybmQgMjcuMDcuMjAyNik6CiAgICogICBSZWloZSBBIChtZXRyaXNjaCkgLT4gRE4wNiwgRE4yNSAuLi4KICAgKiAgIFJlaWhlIEIgKElTTykgICAgICAtPiBOVzMzLDcgICAoImRhcyBOVyBzYWd0IElTTyBhdXMiKQogICAqICAgUmVpaGUgQyAoWm9sbCkgICAgIC0+IFoxLCBaMSw1ICgiZGFzIFogc3RlaHQgZnVlciBab2VsbGlnIikKICAgKiBEZXV0c2NoZSBTY2hyZWlid2Vpc2UgbWl0IEtvbW1hLCB3aWUgaW4gQmVybmRzIEJlaXNwaWVsZW4uICovCiAgZnVuY3Rpb24gZ3JvZXNzZVRva2VuKHJlaWhlLCBydykgewogICAgaWYgKCFydyB8fCAhcmVpaGUpIHJldHVybiBudWxsOwogICAgaWYgKHJlaWhlID09PSAnQScpIHJldHVybiBTdHJpbmcocncuaWQpOwogICAgaWYgKHJlaWhlID09PSAnQicpIHJldHVybiBTdHJpbmcocncuaWQpLnJlcGxhY2UoJy4nLCAnLCcpOwogICAgaWYgKHJlaWhlID09PSAnQycpIHJldHVybiAnWicgKyBTdHJpbmcocncuaWQpLnJlcGxhY2UoJy4nLCAnLCcpOwogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGFydGlrZWxHcm9lc3NlKHMsIHJ3KSB7IHJldHVybiBncm9lc3NlVG9rZW4ocyAmJiBzLnJlaWhlLCBydyk7IH0KICBmdW5jdGlvbiBhcnRpY2xlTnVtYmVyKHMpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmoocy50eXApLCBydyA9IHJvd0ZvcihzKTsKICAgIGlmICghdCB8fCAhcncpIHJldHVybiBudWxsOwogICAgaWYgKGlzQ29ubmVjdCh0KSkgcmV0dXJuIGNvbm5lY3RBcnRpY2xlTnVtYmVyKHMpOwogICAgLyogVEMtU3R1dHplbiBlaW56ZWxuIC0gQmVybmRzIFNjaGVtYSB2b20gMjcuMDcuMjAyNiwgZXMgZXJzZXR6dCBkaWUgYWx0ZQogICAgICogUmV2MDYtTnVtbWVyIHZvbGxzdGFlbmRpZyAoIlNvbGwgZGFzIG5ldWUgU2NoZW1hIGRpZSBhbHRlIE51bW1lciBnYW56CiAgICAgKiBlcnNldHplbj8gSmEiKS4gRGVyIFdlcmtzdG9mZiBzdGVodCBpbSBLbGFydGV4dCAoZnVlciAxLjQ0MzUgZWluZmFjaCAxLjQ0MzUKICAgICAqIGFuIGRpZSBTdGVsbGUgdm9uIDEuNDQwNCksIGRpZSBEaWNodHVuZyBnZWhvZXJ0IE5JQ0hUIGhpbmVpbiAoIk5laW4sIG1laW4KICAgICAqIEZlaGxlciwgZGEgbmF0dWVybGljaCBudXIgVENTLUROMDYtQS0xLjQ0MzUtSDEtS0siKS4KICAgICAqICAgVENTLTxHcm9lc3NlPi08UmVpaGU+LTxXZXJrc3RvZmY+LTxPYmVyZmxhZWNoZT4tPEtLfEtMPiAqLwogICAgaWYgKHQuaWQgPT09ICdUQ1MnKSB7CiAgICAgIGNvbnN0IHNpemUgPSBhcnRpa2VsR3JvZXNzZShzLCBydyksIHdlcmsgPSBlZmZXZXJrc3RvZmYocyk7CiAgICAgIC8vIEZhaWwtY2xvc2VkOiBOVVIgZGllIGJlaWRlbiBiZWxlZ3RlbiBMYWVuZ2VudmFyaWFudGVuIGVyZ2ViZW4gZWluZSBOdW1tZXIuCiAgICAgIC8vIERlciBmcnVlaGVyIGhpZXIgc3RlaGVuZGUgS3VyenNjaGx1c3MgKD09PSAnS0wnID8gJ0tMJyA6ICdLSycpIGhhdCBiZWkgamVkZW0KICAgICAgLy8gZnJlbWRlbiBvZGVyIGZlaGxlbmRlbiBXZXJ0IHN0aWxsc2Nod2VpZ2VuZCAiS0siIGJlaGF1cHRldCAtIGF1cyBlaW5lbQogICAgICAvLyBrYXB1dHRlbiBUZWlsZW4tTGluayB3YWVyZSBzbyBlaW5lIGZhbHNjaGUgQXJ0aWtlbG51bW1lciBlbnRzdGFuZGVuLCBkaWUgZGVyCiAgICAgIC8vIEt1bmRlIG5pZSBnZXdhZWhsdCBoYXQuIE9obmUgYmVsZWd0ZSBWYXJpYW50ZSBnaWJ0IGVzIGxpZWJlciBrZWluZSBOdW1tZXIuCiAgICAgIGNvbnN0IGx2ID0gcy5sYWVuZ2VWYXJpYW50ZSA9PT0gJ0tMJyA\\\/ICdLTCcgOiBzLmxhZW5nZVZhcmlhbnRlID09PSAnS0snID8gJ0tLJyA6IG51bGw7CiAgICAgIGlmICghc2l6ZSB8fCAhd2VyayB8fCAhcy5vYmVyZmxhZWNoZSB8fCAhbHYpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gWydUQ1MnLCBzaXplLCBzLnJlaWhlLCB3ZXJrLCBzLm9iZXJmbGFlY2hlLCBsdl0uam9pbignLScpOwogICAgfQogICAgLyogRGljaHR1bmcgLSBCZXJuZHMgU2NoZW1hIHZvbSAyNy4wNy4yMDI2OgogICAgICogICBELTxHcm9lc3NlPi08UmVpaGU+LTxXZXJrc3RvZmY+LTxMfE8+CiAgICAgKiAgIEQtRE4yNS1BLUVQRE0tTCDCtyBELU5XMzMsNy1CLVZNUS1MIMK3IEQtWjEsNS1DLUZLTS1PCiAgICAgKiBMID0gbWl0IExpcHBlLCBPID0gb2huZSBMaXBwZS4gRGllIExpcHBlIGtvbW10IGF1cyBlZmZMaXBwZSgpLCBkYXMgQmVybmRzCiAgICAgKiBSZWdlbCBhYmJpbGRldCAoRmxhbnNjaCAyNSBuaWUgbWl0IExpcHBlLCBUeXAgSSBzb25zdCBudXIgYmVpIFpvbGwpLiAqLwogICAgaWYgKHQuaWQgPT09ICdEJykgewogICAgICBjb25zdCBzaXplID0gYXJ0aWtlbEdyb2Vzc2UocywgcncpOwogICAgICBjb25zdCBkID0gZGljaHRPYmoocy5kaWNodHVuZyk7CiAgICAgIGNvbnN0IG1hdCA9IGQgPyAoZC5hcnRpa2VsQ29kZSB8fCBkLmlkKSA6IG51bGw7CiAgICAgIGlmICghc2l6ZSB8fCAhbWF0KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIFsnRCcsIHNpemUsIHMucmVpaGUsIG1hdCwgZWZmTGlwcGUocyldLmpvaW4oJy0nKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBmdW5jdGlvbiB0eXBlY29kZShzKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHMudHlwKTsgaWYgKCF0KSByZXR1cm4gJ+KAkyc7CiAgICBpZiAoaXNDb25uZWN0KHQpKSB7CiAgICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHMpOyBpZiAoIXJ3KSByZXR1cm4gJ+KAkyc7CiAgICAgIC8vIEJlcm5kIDI3LjA3LjIwMjY6IGtlaW5lIEhlcnN0ZWxsZXJzZXJpZSBtZWhyIGluIGRlciBOdW1tZXIgLSBudXIgbm9jaCBDRiBiencuIENGSS4KICAgICAgY29uc3QgcGFydHMgPSBbdC5pZCwgcncuaWRdOwogICAgICBpZiAodC5pZCA9PT0gJ0NGJykgcGFydHMucHVzaCgnTCcgKyBhcnRpY2xlTnVtYmVyRm9ybWF0KHMuY29ubmVjdExhZW5nZSkpOwogICAgICBlbHNlIHBhcnRzLnB1c2gocy5jb25uZWN0QW5zY2hsdXNzKTsKICAgICAgcGFydHMucHVzaChlZmZXZXJrc3RvZmYocyksIHMub2JlcmZsYWVjaGUpOwogICAgICByZXR1cm4gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKTsKICAgIH0KICAgIC8vIG51ckZsYW5zY2gtVHlwZW46IGtlaW4gUmVpaGVuLS9OZW5ud2VpdGVuLVRva2VuLCBudXIgZGVyIEZsYW5zY2gtw5guCiAgICAvLyBCZWkgZGVyIEtsYW1tZXIgc3RlaHQgZGVyIEtsYW1tZXJ0eXAgdm9ybiAoS0wxL0tMTEkvS0xIKSAtIG5hZWhlciBhbiBSZXYwNgogICAgLy8gKGRvcnQgei4gQi4gIktMTEktMDgtNTAtTSIpIGFscyBlaW4gZ2VuZXJpc2NoZXMgIktMIi4gRGllIFJldjA2LU1hdGVyaWFsLQogICAgLy8gY29kZXMgKDA4LzQwOCkgc2luZCB1ZWJlciBSMi01IChBcnRpa2VsbnVtbWVyKSBub2NoIGFienViaWxkZW4gLT4gaGllciBibGVpYnQKICAgIC8vIGRpZSBXZXJrc3RvZmZudW1tZXIgdm9yZXJzdCBpbSBLbGFydGV4dC4KICAgIC8vIFIyLTQ6IERpZSBLbGFtbWVyIHRyYWVndCBLRUlORSBPYmVyZmxhZWNoZSAoa2VpbiBPYmVyZmxhZWNoZW4tU2Nocml0dCkgLT4gZGllCiAgICAvLyBPYmVyZmxhZWNoZW5rbGFzc2UgZ2Vob2VydCBOSUNIVCBpbiBkaWUgS2xhbW1lci1UeXAtTnIuIChiZWhlYnQgIktsYW1tZXIgdHJhZWd0IEg0IikuCiAgICAvLyBCZWltIEJsaW5kZGVja2VsIGJsZWlidCBzaWUgZHJpbi4KICAgIGlmIChpc3ROdXJGbGFuc2NoKHQpKSB7CiAgICAgIGNvbnN0IGYgPSBmbGFuc2NoRm9yKHMpOyBpZiAoIWYpIHJldHVybiAn4oCTJzsKICAgICAgY29uc3Qga3QgPSBpc3RLbGFtbWVyKHQpID8ga2xhbW1lclR5cE9iaihzLmtsYW1tZXJUeXApIDogbnVsbDsKICAgICAgY29uc3QgcGFydHMgPSBba3QgPyBrdC5pZCA6IHQuaWQsICfijIAnICsgZi5sYWJlbCwgZWZmV2Vya3N0b2ZmKHMpXTsKICAgICAgLy8gS29uZmlndXJhdGlvbnMtTnIuIChrZWluZSBXZWlzcy1BcnRpa2VsbnVtbWVyKTogTXV0dGVyL1NlY2hza2FudG11dHRlciBtdXNzCiAgICAgIC8vIGVudGhhbHRlbiBzZWluLCBkYW1pdCB6d2VpIHNpY2h0YmFyZSBLbGFtbWVyLUF1c2Z1ZWhydW5nZW4gZWluZGV1dGlnIGJsZWliZW4uCiAgICAgIGlmIChpc3RLbGFtbWVyKHQpKSBwYXJ0cy5wdXNoKHMua2xhbW1lck11dHRlcik7CiAgICAgIGlmICghaXN0S2xhbW1lcih0KSkgcGFydHMucHVzaChzLm9iZXJmbGFlY2hlKTsKICAgICAgaWYgKHQuZGljaHR1bmcgJiYgcy5kaWNodHVuZykgcGFydHMucHVzaChzLmRpY2h0dW5nKTsKICAgICAgcmV0dXJuIHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKCctJyk7CiAgICB9CiAgICAvLyBtYXNzZUZvbGd0IChDRi9DRkkpOiBFcyBnaWJ0IGtlaW4gR3JvZXNzZW4tVG9rZW4gLSBkaWUgTnVtbWVyIHdpcmQgbnVyIGF1cyBkZW0KICAgIC8vIGdlYmF1dCwgd2FzIGRlciBLdW5kZSBXSVJLTElDSCBnZXdhZWhsdCBoYXQgKFR5cCwgV2Vya3N0b2ZmLCBPYmVyZmxhZWNoZSwgRGljaHR1bmcpLgogICAgLy8gS2VpbiBSZWloZW4tL05lbm53ZWl0ZW4tVGVpbCwga2VpbiBLSy9LTDogYmVpZGVzIHdhZXJlIGVyZnVuZGVuLiBEaWUgR3JvZXNzZSB0cmFlZ3QKICAgIC8vIFdlaXNzIG5hY2gsIHNvYmFsZCBkYXMgRGF0ZW5ibGF0dCBkYSBpc3QuCiAgICBpZiAoaXN0TWFzc2VGb2xndCh0KSkgewogICAgICBjb25zdCBwYXJ0cyA9IFt0LmlkLCBlZmZXZXJrc3RvZmYocyksIHMub2JlcmZsYWVjaGVdOwogICAgICBpZiAodC5kaWNodHVuZyAmJiBzLmRpY2h0dW5nKSBwYXJ0cy5wdXNoKHMuZGljaHR1bmcpOwogICAgICByZXR1cm4gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKTsKICAgIH0KICAgIGlmICghcy5ncm9lc3NlKSByZXR1cm4gJ+KAkyc7CiAgICBjb25zdCBwYXJ0cyA9IFt0LmlkLCBzaXplVG9rZW4ocyldOwogICAgLy8gWndlaXRlIEdyb2Vzc2UgaW4gZGVyc2VsYmVuIFNjaHJlaWJ3ZWlzZSB3aWUgZGllIGVyc3RlIChOVy4uLi9aLi4uIG1pdCBLb21tYSkuCiAgICBpZiAodC56d2VpdGVHcm9lc3NlICYmIHMuZ3JvZXNzZTIpIHsgY29uc3QgcjIgPSByb3cyRm9yKHMpOyBpZiAocjIpIHBhcnRzLnB1c2goZ3JvZXNzZVRva2VuKHMucmVpaGUsIHIyKSk7IH0KICAgIC8vIFR5cCBEOiBTZWl0IGRlbSBXZWdmYWxsIHZvbiBTY2hyaXR0IDUgKEJlcm5kIDExLjA4LjIwMjYpIHdhZWhsdCBuaWVtYW5kIG1laHIKICAgIC8vIEVkZWxzdGFobC1XZXJrc3RvZmYgdW5kIE9iZXJmbGFlY2hlIC0gZGFubiBkdWVyZmVuIHNpZSBhdWNoIG5pY2h0IGluIGRlcgogICAgLy8ga3VuZGVuc2ljaHRiYXJlbiBLb25maWd1cmF0aW9ucy1Oci4gYXVmdGF1Y2hlbi4gU29uc3Qgc3R1ZW5kZSBkb3J0IGVpbgogICAgLy8gIjEuNDQwNC1INCIsIGRhcyBkZXIgS3VuZGUgbmllIGFuZ2VrbGlja3QgaGF0LiBVZWJyaWcgYmxlaWJ0CiAgICAvLyBELTxHcm9lc3NlPi08UmVpaGU+LTxEaWNodHVuZz4tPEx8Tz4sIHBhcmFsbGVsIHp1ciBXZWlzcy1BcnRpa2VsbnVtbWVyLgogICAgaWYgKGlzdERpY2h0dW5nQmF1dGVpbCh0KSkgcGFydHMucHVzaChzLnJlaWhlKTsKICAgIGVsc2UgcGFydHMucHVzaChzLnJlaWhlLCBlZmZXZXJrc3RvZmYocyksIHMub2JlcmZsYWVjaGUpOwogICAgaWYgKHQuZGljaHR1bmcgJiYgcy5kaWNodHVuZykgcGFydHMucHVzaChzLmRpY2h0dW5nLCBlZmZMaXBwZShzKSk7CiAgICAvLyBLSy9LTCBoYWVuZ3QgYW0gbGFlbmdlVmFyaWFudGUtRmxhZywgTklDSFQgYW0gc3ZnVHlwZTogVENEIHRyYWVndCB6d2FyCiAgICAvLyBzdmdUeXBlOidjbGFtcHN0dXR6ZW4nLCBoYXQgYWJlciBrZWluZSBLSy9LTC1MYWVuZ2UgKGRpY2t3YW5kaWcsIGZlc3RlIEhvZWhlIDYwIG1tKS4KICAgIC8vIFVlYmVyIGRlbiBzdmdUeXBlIHN0YW5kIGluIGRlciBUeXAtTnIuIGVpbiAiLUtLIiwgZGFzIGVzIGZ1ZXIgVENEIG5pY2h0IGdpYnQuCiAgICBpZiAodC5sYWVuZ2VWYXJpYW50ZSkgcGFydHMucHVzaChzLmxhZW5nZVZhcmlhbnRlKTsKICAgIGlmICh0LnN2Z1R5cGUgPT09ICdyZWR1emllcnVuZycpIHBhcnRzLnB1c2gocy5leHplbnRyaXNjaCA\\\/ICdleHonIDogJ2tvbnonKTsKICAgIC8vIFIzLTMvUjMtNDogQmF1Zm9ybSBUIC8gVEsgaW4gZGllIFR5cC1Oci4gKHouIEIuIFRTLS4uLi1ULCBUU1ItLi4uLVRLKS4KICAgIGlmICh0LmZvcm1XYWhsKSBwYXJ0cy5wdXNoKHMuZm9ybVZhcmlhbnRlKTsKICAgIGlmICh0LmlkID09PSAnVEMnICYmIHMua2xhbW1lclR5cCkgcGFydHMucHVzaChzLmtsYW1tZXJUeXApOwogICAgcmV0dXJuIHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKCctJyk7CiAgfQogIC8vIEF1c2Z1ZWhydW5nIChMaXBwZSkgPSBEaWNodHVuZ3N0eXAuIEJFTEVHVCAoQmVybmQgMTYuMDcuMjAyNiwgQUVOREVSVU5HU1BMQU4gUjItMyk6CiAgLy8gVHlwIEkgPSBvaG5lIExpcHBlIChPKSwgVHlwIElJID0gbWl0IExpcHBlIChMKS4gIkdlbmVyZWxsIG51ciBUeXAgSUk7IFR5cCBJIG51ciBiZWkKICAvLyBSZWloZSBDIChab2xsKS4iIC0+IFJFSUhFTi1iYXNpZXJ0IChsb2VzdCBkaWUgZnJ1ZWhlcmUgZmxhbnNjaC3DmC1TdGFmZmVsdW5nIGFiKToKICAvLyBSZWloZSBDIGJpZXRldCBUeXAgSSArIFR5cCBJSSwgUmVpaGUgQSArIEIgbnVyIFR5cCBJSS4gRGVyIERlZmF1bHQgaXN0IGRhbWl0IHVlYmVyYWxsCiAgLy8gIm1pdCBMaXBwZSAoVHlwIElJKSIgKHN0YXRlLmxpcHBlOidMJykuIG51ckZsYW5zY2gtVHlwZW4gKEJsaW5kZGVja2VsKSBoYWJlbiBrZWluZQogIC8vIHdhZWhsYmFyZSBSZWloZSAtPiBlYmVuZmFsbHMgbnVyIFR5cCBJSS4KICAvKiBFcmdhZW56dW5nIEJlcm5kIDI3LjA3LjIwMjY6ICJMID0gbWl0IExpcHBlLCBhbHNvIGZhc3QgYWxsZSwgdW5kIE8gPSBvaG5lIExpcHBlCiAgICogKG51ciBiZWkgem9lbGxpZ2VuIFVORCBiZWkgYWxsZW4gRGljaHR1bmdlbiBtaXQgVEMyNS4gRGllIERpY2h0dW5nZW4gZnVlcgogICAqIEZsYW5zY2ggMjVtbSBoYWJlbiBiYXVhcnRiZWRpbmd0IG5pZSBlaW5lIExpcHBlLCBhdWNoIGJlaSBESU4gdW5kIElTTyBuaWNodCEpIgogICAqIC0+IEZsYW5zY2gt4oyAIDI1IGxhZXNzdCBudXIgVHlwIEkgenUsIHVuYWJoYWVuZ2lnIHZvbiBkZXIgUmVpaGUuICovCiAgZnVuY3Rpb24gZmxhbnNjaE9kT2YocykgewogICAgaWYgKGlzdE51ckZsYW5zY2godHlwT2JqKHMudHlwKSkpIHsgY29uc3QgZiA9IGZsYW5zY2hGb3Iocyk7IHJldHVybiBmID8gZi5mbGFuZ2VPRCA6IG51bGw7IH0KICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHMpOwogICAgcmV0dXJuIHJ3ICYmIHJ3LmZsYW5nZU9EICE9IG51bGwgPyBydy5mbGFuZ2VPRCA6IG51bGw7CiAgfQogIGZ1bmN0aW9uIGF1c2Z1ZWhydW5nQXZhaWwocykgewogICAgaWYgKGZsYW5zY2hPZE9mKHMpID09PSAyNSkgcmV0dXJuIFsnTyddOwogICAgcmV0dXJuIChzLnJlaWhlID09PSAnQycgJiYgIWlzdE51ckZsYW5zY2godHlwT2JqKHMudHlwKSkpID8gWydMJywgJ08nXSA6IFsnTCddOwogIH0KICBmdW5jdGlvbiBlZmZMaXBwZShzKSB7IGNvbnN0IGF2ID0gYXVzZnVlaHJ1bmdBdmFpbChzKTsgcmV0dXJuIGF2LmluZGV4T2Yocy5saXBwZSkgPj0gMCA\\\/IHMubGlwcGUgOiBhdlswXTsgfQogIC8qIERpY2h0dW5ncy1Jbm5lbi3DmCBmdWVyIGRlbiBHRVdBRUhMVEVOIERpY2h0dW5nc3dlcmtzdG9mZi4gRGllIFJlZ2VsIHN0ZWh0IGluCiAgICogZGF0YS5qcyAoZGljaHR1bmdJbm5lbkQpLCBoaWVyIHdpcmQgbnVyIGRlciBTdGF0ZSBhbmdlbGVndC4gWndlaSBOdXR6ZXI6CiAgICogZGllIFplaWNobnVuZyAocGFyYW1zRm9yKSB1bmQgZGFzIERhdGVuYmxhdHQuIEJlaWRlIG11ZXNzZW4gZGVuc2VsYmVuIFdlcnQKICAgKiB6ZWlnZW4gLSBmcnVlaGVyIHdhciBlcyBhbiBiZWlkZW4gU3RlbGxlbiBzdHVyIGRlciBUYWJlbGxlbndlcnQuICovCiAgZnVuY3Rpb24gZGljaHR1bmdJbm5lbkQocywgcncpIHsKICAgIGlmICghcncpIHJldHVybiBudWxsOwogICAgaWYgKHR5cGVvZiBELmRpY2h0dW5nSW5uZW5EICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gcncuZ2Fza2V0SUQgIT0gbnVsbCA\\\/IHJ3Lmdhc2tldElEIDogbnVsbDsKICAgIHJldHVybiBELmRpY2h0dW5nSW5uZW5EKHJ3LCBzLmRpY2h0dW5nIHx8ICdFUERNJyk7CiAgfQogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RlcHMgKi8KICBjb25zdCBTVEVQUyA9IFsKICAgIHsgbjoxLCBsYWJlbDonQW53ZW5kdW5nJyB9LCB7IG46MiwgbGFiZWw6J05vcm0nIH0sIHsgbjozLCBsYWJlbDonQmF1dGVpbCcgfSwKICAgIHsgbjo0LCBsYWJlbDonR3LDtsOfZScgfSwgeyBuOjUsIGxhYmVsOidXZXJrc3RvZmYgJiBPYmVyZmzDpGNoZScgfSwgeyBuOjYsIGxhYmVsOidEaWNodHVuZycgfSwKICAgIHsgbjo3LCBsYWJlbDonTmFjaHdlaXNlICYgTWVuZ2UnIH0sIHsgbjo4LCBsYWJlbDonQW5mcmFnZScgfQogIF07CiAgZnVuY3Rpb24gaXNUeXBlQmxvY2tlZCh0KSB7CiAgICByZXR1cm4gISEodCAmJiB0LmlkID09PSAnVFNSJyAmJiBELm1hc3NlLmRpbjExODY1LnRTdHVlY2tSZWR1emllcnQuc3RhdHVzID09PSAnYmxvY2tpZXJ0Jyk7CiAgfQogIGZ1bmN0aW9uIHJlaWhlQXZhaWxhYmxlKHQsIHJlaWhlKSB7CiAgICBpZiAoIXQgfHwgaXNDb25uZWN0KHQpIHx8IGlzdE51ckZsYW5zY2godCkpIHJldHVybiBmYWxzZTsKICAgIGlmICh0LmlkID09PSAnVFMnKSByZXR1cm4gISEoKChELm1hc3NlLmRpbjExODY1LnRTdHVlY2tHbGVpY2gucmVpaGVuW3JlaWhlXSB8fCB7fSkucm93cyB8fCBbXSkubGVuZ3RoKTsKICAgIGlmICh0LmlkID09PSAnVFNSJykgcmV0dXJuICEhKCgoRC5tYXNzZS5kaW4xMTg2NS50U3R1ZWNrUmVkdXppZXJ0LnJlaWhlbltyZWloZV0gfHwge30pLnJvd3MgfHwgW10pLmxlbmd0aCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgY29uc3QgZGljaHR1bmdBcHBsaWVzID0gKCkgPT4geyBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7IHJldHVybiAhISh0ICYmIHQuZGljaHR1bmcpOyB9OwogIGZ1bmN0aW9uIGFwcGxpY2FibGUobikgewogICAgLy8gU2Nocml0dCA1IGVudGZhZWxsdCBiZWltIEJhdXRlaWwgIkRpY2h0dW5nIjogZG9ydCBnaWJ0IGVzIGtlaW5lbiBFZGVsc3RhaGwtCiAgICAvLyBXZXJrc3RvZmYgdW5kIGtlaW5lIE9iZXJmbGFlY2hlIHp1IHdhZWhsZW4gKEJlcm5kIDExLjA4LjIwMjYpLgogICAgLy8gR2V3dWVuc2NodGUgRm9sZ2UgZnVlciBUeXAgRDogQmF1dGVpbCAtPiBHcm9lc3NlIC0+IERpY2h0dW5nIC0+IE5hY2h3ZWlzZS4KICAgIGlmIChuID09PSA1KSByZXR1cm4gIWlzdERpY2h0dW5nQmF1dGVpbCh0eXBPYmooc3RhdGUudHlwKSk7CiAgICBpZiAobiA9PT0gNikgcmV0dXJuIGRpY2h0dW5nQXBwbGllcygpOwogICAgcmV0dXJuIHRydWU7CiAgfQogIC8vIEZhZW5ndCBkZW4gRmFsbCBhYiwgZGFzcyBkZXIgYWt0dWVsbGUgU2Nocml0dCBkdXJjaCBlaW5lbiBUeXB3ZWNoc2VsIG9kZXIgZWluZW4KICAvLyBEZWVwLUxpbmsgd2VnZmFlbGx0IC0gc29uc3Qgc3R1ZW5kZSBkZXIgS29uZmlndXJhdG9yIGF1ZiBlaW5lbSBTY2hyaXR0LCBkZW4gZXMKICAvLyBmdWVyIGRpZXNlcyBCYXV0ZWlsIGdhciBuaWNodCBtZWhyIGdpYnQsIHVuZCBkaWUgQnVlaG5lIGJsaWViZSBsZWVyLgogIGZ1bmN0aW9uIGZpeFN0ZXAoKSB7CiAgICBpZiAoYXBwbGljYWJsZShzdGF0ZS5zdGVwKSkgcmV0dXJuOwogICAgY29uc3QgYSA9IGFwcFN0ZXBzKCk7CiAgICBzdGF0ZS5zdGVwID0gYS5maW5kKHggPT4geCA+PSBzdGF0ZS5zdGVwKSB8fCBhW2EubGVuZ3RoIC0gMV0gfHwgMTsKICB9CiAgZnVuY3Rpb24gYXBwU3RlcHMoKSB7IHJldHVybiBTVEVQUy5maWx0ZXIocyA9PiBhcHBsaWNhYmxlKHMubikpLm1hcChzID0+IHMubik7IH0KICAvLyBGb3J0bGF1ZmVuZGUgQW56ZWlnZS1OdW1tZXIgZWluZXMgU2Nocml0dHMgKDEuLk4pIHVudGVyIGRlbiBha3R1ZWxsIGFud2VuZGJhcmVuCiAgLy8gU2Nocml0dGVuLiBCbGVpYnQgbHVlY2tsb3MsIHdlbm4gU2Nocml0dCA2IChEaWNodHVuZykgbmljaHQgYW53ZW5kYmFyIGlzdC4gRGllCiAgLy8gaW50ZXJuZSBMb2dpayBudXR6dCB3ZWl0ZXIgZGllIHN0YWJpbGVuIG4gKGRhdGEtbiksIG51ciBkaWUgQW56ZWlnZSB6YWVobHQgbmV1LgogIGZ1bmN0aW9uIHN0ZXBQb3MobikgeyBjb25zdCBpID0gYXBwU3RlcHMoKS5pbmRleE9mKG4pOyByZXR1cm4gaSA8IDAgPyBuIDogaSArIDE7IH0KICBmdW5jdGlvbiBjb21wbGV0ZShuKSB7CiAgICBzd2l0Y2ggKG4pIHsKICAgICAgY2FzZSAxOiByZXR1cm4gISFzdGF0ZS5hbndlbmR1bmc7CiAgICAgIGNhc2UgMjogcmV0dXJuICEhc3RhdGUubm9ybTsKICAgICAgY2FzZSAzOiB7CiAgICAgICAgY29uc3QgdCA9IHR5cE9iaihzdGF0ZS50eXApOwogICAgICAgIHJldHVybiAhISh0ICYmIHQuYWt0aXYgJiYgIWlzVHlwZUJsb2NrZWQodCkgJiYgdC5ub3JtID09PSBzdGF0ZS5ub3JtKTsKICAgICAgfQogICAgICAvLyBtYXNzZUZvbGd0IChDRi9DRkkpOiBJbiBTY2hyaXR0IDQgZ2lidCBlcyBuaWNodHMgenUgd2FlaGxlbiAoa2VpbmUgYmVsZWd0ZSBHcm9lc3NlKS4KICAgICAgLy8gRGVyIFNjaHJpdHQgZ2lsdCB0cm90emRlbSBhbHMgZXJsZWRpZ3QsIHNvbnN0IGhhZW5nZSBkZXIgS3VuZGUgZmVzdCB1bmQga29lbm50ZSBkZW4KICAgICAgLy8gVHlwIHp3YXIgc2VoZW4sIGFiZXIgbmllIGFuZnJhZ2VuIC0gZGFzIHdhZXJlIGZha3Rpc2NoIGFrdGl2OmZhbHNlLgogICAgICBjYXNlIDQ6IHsKICAgICAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7CiAgICAgICAgaWYgKGlzdE1hc3NlRm9sZ3QodCkpIHJldHVybiB0cnVlOwogICAgICAgIGlmIChpc3ROdXJGbGFuc2NoKHQpKSByZXR1cm4gISFzdGF0ZS5mbGFuc2NoOwogICAgICAgIGlmICh0ICYmIHQuaWQgPT09ICdDRicpIHJldHVybiAhIShzdGF0ZS5ncm9lc3NlICYmIHN0YXRlLmNvbm5lY3RMYWVuZ2UgIT0gbnVsbCk7CiAgICAgICAgaWYgKHQgJiYgdC5pZCA9PT0gJ0NGSScpIHJldHVybiAhIShzdGF0ZS5ncm9lc3NlICYmIHN0YXRlLmNvbm5lY3RBbnNjaGx1c3MpOwogICAgICAgIGlmICh0ICYmIHQuZm9ybVdhaGwgJiYgIVsnVCcsJ1RLJ10uaW5jbHVkZXMoc3RhdGUuZm9ybVZhcmlhbnRlKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChpc3RGb3JtT2huZU1hc3NlKHN0YXRlKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiAhIXN0YXRlLmdyb2Vzc2UgJiYgKCEodCAmJiB0Lnp3ZWl0ZUdyb2Vzc2UpIHx8ICEhc3RhdGUuZ3JvZXNzZTIpOwogICAgICB9CiAgICAgIGNhc2UgNTogewogICAgICAgIGNvbnN0IHQgPSB0eXBPYmooc3RhdGUudHlwKTsKICAgICAgICByZXR1cm4gISEoZWZmV2Vya3N0b2ZmKHN0YXRlKSAmJiAoaXN0S2xhbW1lcih0KSB8fCBvYmVyZmxhZWNoZUVybGF1YnQoc3RhdGUpKSk7CiAgICAgIH0KICAgICAgY2FzZSA2OiByZXR1cm4gIWRpY2h0dW5nQXBwbGllcygpIHx8ICEhc3RhdGUuZGljaHR1bmc7CiAgICAgIGNhc2UgNzogcmV0dXJuIHN0YXRlLm1lbmdlID49IDE7CiAgICAgIGNhc2UgODogcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIHJlYWNoYWJsZShuKSB7IGZvciAoY29uc3QgbSBvZiBhcHBTdGVwcygpKSB7IGlmIChtID49IG4pIGJyZWFrOyBpZiAoIWNvbXBsZXRlKG0pKSByZXR1cm4gZmFsc2U7IH0gcmV0dXJuIHRydWU7IH0KICBmdW5jdGlvbiBnbyhuKSB7IGlmICghYXBwbGljYWJsZShuKSB8fCAhcmVhY2hhYmxlKG4pKSByZXR1cm47IHN0YXRlLnN0ZXAgPSBuOyByZW5kZXJBbGwoKTsgc2Nyb2xsVG9wKCk7IH0KICBmdW5jdGlvbiBuZXh0U3RlcCgpIHsgY29uc3QgYSA9IGFwcFN0ZXBzKCk7IGNvbnN0IGkgPSBhLmluZGV4T2Yoc3RhdGUuc3RlcCk7IGlmIChpIDwgYS5sZW5ndGggLSAxICYmIGNvbXBsZXRlKHN0YXRlLnN0ZXApKSBnbyhhW2kgKyAxXSk7IH0KICBmdW5jdGlvbiBwcmV2U3RlcCgpIHsgY29uc3QgYSA9IGFwcFN0ZXBzKCk7IGNvbnN0IGkgPSBhLmluZGV4T2Yoc3RhdGUuc3RlcCk7IGlmIChpID4gMCkgZ28oYVtpIC0gMV0pOyB9CiAgZnVuY3Rpb24gc2Nyb2xsVG9wKCkgeyB0cnkgeyB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTsgfSBjYXRjaCAoZSkge30gfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNldHRlciAqLwogIGZ1bmN0aW9uIHBpY2socGF0Y2gpIHsgT2JqZWN0LmFzc2lnbihzdGF0ZSwgcGF0Y2gpOyByZW5kZXJBbGwoKTsgfQogIGZ1bmN0aW9uIHNldEFud2VuZHVuZyhpZCkgewogICAgY29uc3QgYSA9IEQuYW53ZW5kdW5nZW4uZmluZCh4ID0+IHguaWQgPT09IGlkKTsgaWYgKCFhKSByZXR1cm47CiAgICBzdGF0ZS5hbndlbmR1bmcgPSBpZDsKICAgIHN0YXRlLndlcmtzdG9mZiA9IGEuZGVmYXVsdHMud2Vya3N0b2ZmOyBzdGF0ZS5vYmVyZmxhZWNoZSA9IGEuZGVmYXVsdHMub2JlcmZsYWVjaGU7IHN0YXRlLmRpY2h0dW5nID0gYS5kZWZhdWx0cy5kaWNodHVuZzsKICAgIHJlbmRlckFsbCgpOwogIH0KICBmdW5jdGlvbiBzZXROb3JtKGlkKSB7IHN0YXRlLm5vcm0gPSBpZDsgc3RhdGUudHlwID0gbnVsbDsgc3RhdGUuZ3JvZXNzZSA9IG51bGw7IHN0YXRlLmdyb2Vzc2UyID0gbnVsbDsgcmVuZGVyQWxsKCk7IH0KICBmdW5jdGlvbiBzZXRUeXAoaWQpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmooaWQpOyBpZiAoIXQpIHJldHVybjsKICAgIGlmICghdC5ha3RpdiB8fCB0Lm5vcm0gIT09IHN0YXRlLm5vcm0gfHwgaXNUeXBlQmxvY2tlZCh0KSkgcmV0dXJuOwogICAgc3RhdGUudHlwID0gaWQ7CiAgICBpZiAoaXN0TnVyRmxhbnNjaCh0KSkgewogICAgICAvLyBSZWloZW4tQXVzd2FobCBnaWx0IGZ1ZXIgZGllc2VuIFR5cCBuaWNodCAtPiBncm9lc3NlIGxlZXJlbiwgZGFtaXQgbmlyZ2VuZHMKICAgICAgLy8gdmVyc2VoZW50bGljaCBlaW5lIE5lbm53ZWl0ZSBhdXMgZWluZW0gZnJ1ZWhlcmVuIFR5cCBtaXRnZXNjaGxlaWZ0IHdpcmQuCiAgICAgIHN0YXRlLmdyb2Vzc2UgPSBudWxsOyBzdGF0ZS5ncm9lc3NlMiA9IG51bGw7CiAgICAgIGlmICghZmxhbnNjaE9iaihzdGF0ZS5mbGFuc2NoKSkgc3RhdGUuZmxhbnNjaCA9IChELmZsYW5zY2hncm9lc3NlblswXSB8fCB7fSkuaWQgfHwgbnVsbDsKICAgICAgaWYgKGlzdEtsYW1tZXIodCkgJiYgIWtsYW1tZXJUeXBPYmooc3RhdGUua2xhbW1lclR5cCkpIHsKICAgICAgICBjb25zdCBkZWYgPSAoRC5rbGFtbWVyVHlwZW4gfHwgW10pLmZpbmQoayA9PiBrLmRlZmF1bHQpIHx8IChELmtsYW1tZXJUeXBlbiB8fCBbXSlbMF07CiAgICAgICAgc3RhdGUua2xhbW1lclR5cCA9IGRlZiA\\\/IGRlZi5pZCA6IG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNDb25uZWN0KHQpKSB7CiAgICAgIHN0YXRlLmdyb2Vzc2UyID0gbnVsbDsKICAgICAgc3RhdGUuY29ubmVjdE5vcm0gPSB0LmlkID09PSAnQ0YnICYmIEQubWFzc2UuY29ubmVjdC5jZi5yZWloZW5bc3RhdGUuY29ubmVjdE5vcm1dID8gc3RhdGUuY29ubmVjdE5vcm0gOiAnRElOJzsKICAgICAgc3RhdGUuY29ubmVjdEFuc2NobHVzcyA9ICdCVyc7CiAgICAgIGNvbnN0IHJzID0gcm93c0ZvcihzdGF0ZSk7CiAgICAgIHN0YXRlLmdyb2Vzc2UgPSBycy5sZW5ndGggPyByc1swXS5pZCA6IG51bGw7CiAgICAgIGNvbnN0IHJ3ID0gcnNbMF0gfHwgbnVsbDsKICAgICAgc3RhdGUuY29ubmVjdExhZW5nZSA9IHQuaWQgPT09ICdDRicgJiYgcncgJiYgcncubGFlbmdlbi5sZW5ndGggPyBydy5sYWVuZ2VuWzBdLkwgOiBudWxsOwogICAgICBpZiAoIW9iZXJmbGFlY2hlRXJsYXVidChzdGF0ZSkpIHN0YXRlLm9iZXJmbGFlY2hlID0gb2JlcmZsYWVjaGVuT3B0aW9uZW4oc3RhdGUpWzBdLmlkOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcnMgPSByb3dzRm9yKHN0YXRlKTsKICAgICAgaWYgKHQuendlaXRlR3JvZXNzZSkgewogICAgICAgIC8vIFJlZHV6aWVydW5nIC8gcmVkdXppZXJ0ZXMgVC1TdMO8Y2s6IGRpZSBOZW5ud2VpdGUgbXVzcyBHUsOWU1NFUiBzZWluIGFscyAiUmVkdXppZXJ0IGF1ZiIKICAgICAgICAvLyAoQmVybmQgUjMtMi9SMy00KS4gRGVmYXVsdC1OZW5ud2VpdGUgZGFoZXIgTklDSFQgZGllIGtsZWluc3RlIChzb25zdCBnw6RiZSBlcyBrZWluZQogICAgICAgIC8vIGtsZWluZXJlIHVuZCBkaWUgWmVpY2hudW5nIGJsaWViZSBsZWVyKSwgc29uZGVybiBlaW5lIGtsZWluZSwgYWJlciByZWR1emllcmJhcmUgR3LDtsOfZTsKICAgICAgICAvLyAiUmVkdXppZXJ0IGF1ZiIgPSBkaWUgZ3LDtsOfdGUgbm9jaCBrbGVpbmVyZSBHcsO2w59lIC0+IHNvZm9ydCBlaW4gZWNodGVyIEtlZ2VsLgogICAgICAgIHN0YXRlLmdyb2Vzc2UgPSBycy5sZW5ndGggPyByc1tNYXRoLm1pbigzLCBycy5sZW5ndGggLSAxKV0uaWQgOiBudWxsOwogICAgICAgIHN0YXRlLmdyb2Vzc2UyID0gZGVmYXVsdEdyb2Vzc2UyKHN0YXRlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0ZS5ncm9lc3NlID0gcnMubGVuZ3RoID8gcnNbMF0uaWQgOiBudWxsOwogICAgICB9CiAgICB9CiAgICBzdGF0ZS5sYWVuZ2VWYXJpYW50ZSA9ICdLTCc7IHN0YXRlLmV4emVudHJpc2NoID0gZmFsc2U7IHN0YXRlLmZvcm1WYXJpYW50ZSA9ICdUJzsKICAgIGlmICghdC5kaWNodHVuZykgeyAvKiBrZWVwIGRpY2h0dW5nIHN0b3JlZCAqLyB9CiAgICBmaXhTdGVwKCk7CiAgICByZW5kZXJBbGwoKTsKICB9CiAgZnVuY3Rpb24gc2V0UmVpaGUocikgewogICAgY29uc3QgdDAgPSB0eXBPYmooc3RhdGUudHlwKTsKICAgIGlmICghcmVpaGVBdmFpbGFibGUodDAsIHIpKSByZXR1cm47CiAgICBzdGF0ZS5yZWloZSA9IHI7CiAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCksIHJzID0gcm93c0ZvcihzdGF0ZSk7CiAgICBpZiAodCAmJiB0Lnp3ZWl0ZUdyb2Vzc2UpIHsKICAgICAgLy8gd2llIGluIHNldFR5cDogcmVkdXppZXJiYXJlIERlZmF1bHQtTmVubndlaXRlICsgZ3LDtsOfdGUga2xlaW5lcmUgR3LDtsOfZSBhbHMgIlJlZHV6aWVydCBhdWYiLgogICAgICBzdGF0ZS5ncm9lc3NlID0gcnMubGVuZ3RoID8gcnNbTWF0aC5taW4oMywgcnMubGVuZ3RoIC0gMSldLmlkIDogbnVsbDsKICAgICAgc3RhdGUuZ3JvZXNzZTIgPSBkZWZhdWx0R3JvZXNzZTIoc3RhdGUpOwogICAgfSBlbHNlIHsKICAgICAgc3RhdGUuZ3JvZXNzZSA9IHJzLmxlbmd0aCA\\\/IHJzWzBdLmlkIDogbnVsbDsKICAgIH0KICAgIHJlbmRlckFsbCgpOwogIH0KICAvLyBOZW5ud2VpdGUgc2V0emVuLiBCZWkgUmVkdXppZXItVHlwZW4gKHp3ZWl0ZUdyb2Vzc2UpIG11c3MgIlJlZHV6aWVydCBhdWYiIEtMRUlORVIgYmxlaWJlbgogIC8vIGFscyBkaWUgbmV1ZSBOZW5ud2VpdGUgKEJlcm5kIFIzLTIvUjMtNCk6IGlzdCBkZXIgYmlzaGVyaWdlIHp3ZWl0ZSDDmCBuaWNodCBtZWhyIGtsZWluZXIKICAvLyAob2RlciBnaWJ0IGVzIGdhciBrZWluZW4ga2xlaW5lcmVuKSwgYXVmIGRpZSBncsO2w590ZSBnw7xsdGlnZSBrbGVpbmVyZSBHcsO2w59lIHp1csO8Y2tzZXR6ZW4gLQogIC8vIGJ6dy4gbnVsbCwgd2VubiBrZWluZSBleGlzdGllcnQgKGRhbm4gUGxhdHpoYWx0ZXIgImZvbGd0IikuIFNvIGthbm4gbmllIG9kID09IG9kMiAoZ2VyYWRlcwogIC8vIFJvaHIpIGVudHN0ZWhlbiB1bmQgZGVyIFN0YXRlIGJsZWlidCBrb25zaXN0ZW50LgogIGZ1bmN0aW9uIHNldEdyb2Vzc2UoaWQpIHsKICAgIHN0YXRlLmdyb2Vzc2UgPSBpZDsKICAgIGNvbnN0IHQgPSB0eXBPYmooc3RhdGUudHlwKTsKICAgIGlmICh0ICYmIHQuaWQgPT09ICdDRicpIHsKICAgICAgY29uc3QgcncgPSByb3dGb3Ioc3RhdGUpOwogICAgICBpZiAoIXJ3IHx8ICFydy5sYWVuZ2VuLnNvbWUoeCA9PiBOdW1iZXIoeC5MKSA9PT0gTnVtYmVyKHN0YXRlLmNvbm5lY3RMYWVuZ2UpKSkgewogICAgICAgIHN0YXRlLmNvbm5lY3RMYWVuZ2UgPSBydyAmJiBydy5sYWVuZ2VuLmxlbmd0aCA\\\/IHJ3LmxhZW5nZW5bMF0uTCA6IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmICh0ICYmIHQuendlaXRlR3JvZXNzZSkgewogICAgICBjb25zdCBhdiA9IHJvd3MyRm9yKHN0YXRlKTsKICAgICAgaWYgKCFhdi5zb21lKHIgPT4gci5pZCA9PT0gc3RhdGUuZ3JvZXNzZTIpKSBzdGF0ZS5ncm9lc3NlMiA9IGF2Lmxlbmd0aCA\\\/IGF2W2F2Lmxlbmd0aCAtIDFdLmlkIDogbnVsbDsKICAgIH0KICAgIHJlbmRlckFsbCgpOwogIH0KICBmdW5jdGlvbiBzZXRDb25uZWN0Tm9ybShpZCkgewogICAgaWYgKCFELm1hc3NlLmNvbm5lY3QuY2YucmVpaGVuW2lkXSkgcmV0dXJuOwogICAgc3RhdGUuY29ubmVjdE5vcm0gPSBpZDsKICAgIGNvbnN0IHJzID0gcm93c0ZvcihzdGF0ZSk7IHN0YXRlLmdyb2Vzc2UgPSBycy5sZW5ndGggPyByc1swXS5pZCA6IG51bGw7CiAgICBzdGF0ZS5jb25uZWN0TGFlbmdlID0gcnNbMF0gJiYgcnNbMF0ubGFlbmdlbi5sZW5ndGggPyByc1swXS5sYWVuZ2VuWzBdLkwgOiBudWxsOwogICAgcmVuZGVyQWxsKCk7CiAgfQogIGZ1bmN0aW9uIHNldENvbm5lY3RMYWVuZ2UodmFsdWUpIHsKICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHN0YXRlKSwgbiA9IE51bWJlcih2YWx1ZSk7CiAgICBpZiAocncgJiYgcncubGFlbmdlbi5zb21lKHggPT4gTnVtYmVyKHguTCkgPT09IG4pKSB7IHN0YXRlLmNvbm5lY3RMYWVuZ2UgPSBuOyByZW5kZXJBbGwoKTsgfQogIH0KICBmdW5jdGlvbiBzZXRDb25uZWN0QW5zY2hsdXNzKGlkKSB7CiAgICBjb25zdCBydyA9IHJvd0ZvcihzdGF0ZSk7CiAgICBpZiAocncgJiYgcncuYW5zY2hsdWVzc2UgJiYgcncuYW5zY2hsdWVzc2VbaWRdKSB7IHN0YXRlLmNvbm5lY3RBbnNjaGx1c3MgPSBpZDsgcmVuZGVyQWxsKCk7IH0KICB9CiAgZnVuY3Rpb24gc2V0RmxhbnNjaChpZCkgeyBpZiAoZmxhbnNjaE9iaihpZCkpIHsgc3RhdGUuZmxhbnNjaCA9IGlkOyByZW5kZXJBbGwoKTsgfSB9CiAgLy8gS2xhbW1lcnR5cCB3ZWNoc2VsbjogRGVyIGJpc2hlcmlnZSBXZXJrc3RvZmYgYmxlaWJ0IG51ciBzdGVoZW4sIHdlbm4gZGVyIG5ldWUgVHlwIGlobgogIC8vIHp1bGFlc3N0IChLTExJIC0+IDEuNDQwOCwgZGFubiBXZWNoc2VsIGF1ZiBLTDEsIGRhcyBudXIgMS40MzA4IGthbm4pLiBTb25zdCBmYWVsbHQgZXIKICAvLyBhdWYgZGVuIGVyc3RlbiBlcmxhdWJ0ZW4gV2Vya3N0b2ZmIGRlcyBUeXBzIHp1cnVlY2sgLSBrZWluIHVuZ3VlbHRpZ2VzIFBhYXIgaW0gU3RhdGUuCiAgZnVuY3Rpb24gc2V0S2xhbW1lclR5cChpZCkgewogICAgY29uc3Qga3QgPSBrbGFtbWVyVHlwT2JqKGlkKTsgaWYgKCFrdCkgcmV0dXJuOwogICAgc3RhdGUua2xhbW1lclR5cCA9IGlkOwogICAgaWYgKGt0LndlcmtzdG9mZmUuaW5kZXhPZihzdGF0ZS5rbGFtbWVyV2Vya3N0b2ZmKSA8IDApIHN0YXRlLmtsYW1tZXJXZXJrc3RvZmYgPSBrdC53ZXJrc3RvZmZlWzBdOwogICAgcmVuZGVyQWxsKCk7CiAgfQogIC8vIE11dHRlci1BcnQgZGVyIEtsYW1tZXIgKFIyLTQpOiBNID0gTXV0dGVyIChTdGFuZGFyZCksIFMgPSBTZWNoc2thbnRtdXR0ZXIgKEF1ZnByZWlzKS4KICBmdW5jdGlvbiBzZXRLbGFtbWVyTXV0dGVyKGlkKSB7CiAgICBpZiAoIShELmtsYW1tZXJNdXR0ZXJuIHx8IFtdKS5zb21lKG0gPT4gbS5pZCA9PT0gaWQpKSByZXR1cm47CiAgICBzdGF0ZS5rbGFtbWVyTXV0dGVyID0gaWQ7CiAgICByZW5kZXJBbGwoKTsKICB9CiAgLyogV2Vya3N0b2ZmIHNldHplbiAoQWJzY2huaXR0IEUpOiBCZWkgS2xhbW1lcm4gZ2VodCBkZXIgV2VydCBpbiBzdGF0ZS5rbGFtbWVyV2Vya3N0b2ZmCiAgICogKDEuNDMwOC8xLjQ0MDgpLCBiZWkgYWxsZW4gYW5kZXJlbiBUeXBlbiBpbiBzdGF0ZS53ZXJrc3RvZmYgKDEuNDQwNC8xLjQ0MzUpLiBCZWlkZQogICAqIEZlbGRlciBibGVpYmVuIGdldHJlbm50IC0gc29uc3Qgd3VlcmRlIGVpbiBLbGljayBhdWYgZWluZW4gS2xhbW1lci1XZXJrc3RvZmYgZGVuCiAgICogRml0dGluZy1XZXJrc3RvZmYgbWl0IDEuNDMwOCB1ZWJlcnNjaHJlaWJlbiAoZG9ydCBnaWJ0IGVzIGRlbiBXZXJrc3RvZmYgZ2FyIG5pY2h0KQogICAqIHVuZCBkZXIgbmFlY2hzdGUgRml0dGluZyB0cmFlZ2UgZWluZSBXZXJrc3RvZmZudW1tZXIsIGRpZSBXZWlzcyBuaWUgZ2VuYW5udCBoYXQuCiAgICogWnVzYWV0emxpY2ggZ2VnZW4gZGllIGpld2VpbGlnZSBMaXN0ZSBnZXBydWVmdCwgZGFtaXQgbnVyIGVjaHRlIFdlcnRlIGltIFN0YXRlIGxhbmRlbi4gKi8KICBmdW5jdGlvbiBzZXRXZXJrc3RvZmYoaWQpIHsKICAgIGNvbnN0IHQgPSB0eXBPYmooc3RhdGUudHlwKTsKICAgIGlmIChpc3RLbGFtbWVyKHQpKSB7CiAgICAgIGlmICghKEQua2xhbW1lcldlcmtzdG9mZmUgfHwgW10pLnNvbWUodyA9PiB3LmlkID09PSBpZCkpIHJldHVybjsKICAgICAgc3RhdGUua2xhbW1lcldlcmtzdG9mZiA9IGlkOwogICAgfSBlbHNlIHsKICAgICAgaWYgKCEoRC53ZXJrc3RvZmZlIHx8IFtdKS5zb21lKHcgPT4gdy5pZCA9PT0gaWQpKSByZXR1cm47CiAgICAgIHN0YXRlLndlcmtzdG9mZiA9IGlkOwogICAgfQogICAgcmVuZGVyQWxsKCk7CiAgfQogIGZ1bmN0aW9uIHNldE9iZXJmbGFlY2hlKGlkKSB7CiAgICBpZiAoIW9iZXJmbGFlY2hlbk9wdGlvbmVuKHN0YXRlKS5zb21lKG8gPT4gby5pZCA9PT0gaWQpKSByZXR1cm47CiAgICBzdGF0ZS5vYmVyZmxhZWNoZSA9IGlkOwogICAgcmVuZGVyQWxsKCk7CiAgfQoKICAvKiAtLSBadXJ1ZWNrc2V0emVuIChBNSwgQmVybmQgUGt0LiA4KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgKiBTdGVsbHQgZGllIEtvbmZpZ3VyYXRpb24gYXVmIGRlbiBVcnNwcnVuZ3N6dXN0YW5kIHp1cnVlY2s6IFNjaHJpdHQgMSwga2VpbmUKICAgKiBBdXN3YWhsLCBEZWZhdWx0cyAtIGlua2x1c2l2ZSBXYXJlbmtvcmItUG9zaXRpb25lbiB1bmQgS29udGFrdGRhdGVuLgogICAqIFp3ZWktS2xpY2stQmVzdGFldGlndW5nIGRpcmVrdCBhbSBCdXR0b24gKExhYmVsIHdlY2hzZWx0IGF1ZiAiV2lya2xpY2gKICAgKiB6dXJ1ZWNrc2V0emVuPyIsIGZhZWxsdCBuYWNoIDQgcyB6dXJ1ZWNrKSBzdGF0dCB3aW5kb3cuY29uZmlybSgpOiBEZXIKICAgKiBLb25maWd1cmF0b3IgbGFldWZ0IHNwYWV0ZXIgaW0gV29yZFByZXNzLWlGcmFtZSwgdW5kIGVpbiBzYW5kYm94ZWQgaUZyYW1lCiAgICogb2huZSBhbGxvdy1tb2RhbHMgdmVyc2NobHVja3QgY29uZmlybSgpIC0gZGVyIEJ1dHRvbiB3dWVyZGUgZG9ydCBzdGlsbAogICAqIG5pY2h0cyB0dW4uIERhcyBMYWJlbC1XZWNoc2VsLU11c3RlciBnaWJ0IGVzIGhpZXIgc2Nob24gYmVpIGNvcHlUZXh0KCkuICovCiAgbGV0IHJlc2V0VGltZXIgPSBudWxsOwogIGNvbnN0IHJlc2V0TGFiZWwgPSB0eHQgPT4gaWMoJ3Jlc2V0JywgJ2ljJykgKyAnICcgKyB0eHQ7CiAgZnVuY3Rpb24gZGlzYXJtUmVzZXQoYnRuKSB7CiAgICBjbGVhclRpbWVvdXQocmVzZXRUaW1lcik7IHJlc2V0VGltZXIgPSBudWxsOwogICAgaWYgKCFidG4pIHJldHVybjsKICAgIGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdhcm1lZCcpOyBidG4ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWFybWVkJyk7CiAgICBidG4uaW5uZXJIVE1MID0gcmVzZXRMYWJlbCgnWnVyw7xja3NldHplbicpOwogIH0KICBmdW5jdGlvbiBhcm1SZXNldChidG4pIHsKICAgIGNsZWFyVGltZW91dChyZXNldFRpbWVyKTsKICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdhcm1lZCcpOyBidG4uc2V0QXR0cmlidXRlKCdkYXRhLWFybWVkJywgJzEnKTsKICAgIGJ0bi5pbm5lckhUTUwgPSByZXNldExhYmVsKCdXaXJrbGljaCB6dXLDvGNrc2V0emVuPycpOwogICAgLy8gTmFjaCA0IHMgd2llZGVyIGVudHNjaGFlcmZlbi4gSXN0IGRlciBCdXR0b24gYmlzIGRhaGluIGR1cmNoIGVpbiBSZS1SZW5kZXIKICAgIC8vIGVyc2V0enQgd29yZGVuLCBsYWV1ZnQgZGFzIFp1cnVlY2tzZXR6ZW4gYXVmIGVpbmVtIGxvc2dlbG9lc3RlbiBLbm90ZW4gLQogICAgLy8gaGFybWxvcywgZGVyIGZyaXNjaCBnZXJlbmRlcnRlIEJ1dHRvbiBzdGFydGV0IG9obmVoaW4gdW5zY2hhcmYuCiAgICByZXNldFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBkaXNhcm1SZXNldChidG4pLCA0MDAwKTsKICB9CiAgZnVuY3Rpb24gcmVzZXRLb25maWd1cmF0aW9uKCkgewogICAgY2xlYXJUaW1lb3V0KHJlc2V0VGltZXIpOyByZXNldFRpbWVyID0gbnVsbDsKICAgIC8vIEdsZWljaGUgU2NobHVlc3NlbG1lbmdlIHdpZSBkZXIgVXJzcHJ1bmcgLT4gT2JqZWN0LmFzc2lnbiBsYWVzc3QgbmljaHRzIHN0ZWhlbi4KICAgIC8vIEpTT04ucGFyc2UgbGllZmVydCBmcmlzY2hlIEtvcGllbiB2b24ga29udGFrdC9uYWNod2Vpc2UvcG9zaXRpb25lbiwgZGFtaXQgZGVyCiAgICAvLyBVcnNwcnVuZ3MtU25hcHNob3QgbmljaHQgdWViZXIgZ2V0ZWlsdGUgUmVmZXJlbnplbiBtaXRtdXRpZXJ0IHdpcmQuCiAgICBPYmplY3QuYXNzaWduKHN0YXRlLCBKU09OLnBhcnNlKFVSU1BSVU5HKSk7CiAgICBpZiAoZnMub3BlbikgZnNDbG9zZSgpOyAgICAgICAgICAvLyBWb2xsYmlsZCB6ZWlndCBzb25zdCBkaWUgWmVpY2hudW5nIGRlcyBhbHRlbiBTdGFuZGVzCiAgICBwcmljZUN1ciA9IDA7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVpcy1BbmltYXRpb24gbmljaHQgdm9tIGFsdGVuIFdlcnQgaGVydW50ZXJ6YWVobGVuIGxhc3NlbgogICAgcmVuZGVyQWxsKCk7ICAgICAgICAgICAgICAgICAgICAgLy8gcmVuZGVyQWxsKCkgcnVmdCByZXBvcnRIZWlnaHQoKSBiZXJlaXRzIG1pdCBhdWYgLi4uCiAgICBzY3JvbGxUb3AoKTsKICAgIHJlcG9ydEhlaWdodCgpOyAgICAgICAgICAgICAgICAgIC8vIC4uLiBoaWVyIG5vY2htYWwsIG5hY2hkZW0gZGFzIExheW91dCBhdWYgU2Nocml0dCAxIHN0ZWh0CiAgfQoKICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUkVOREVSICovCiAgZnVuY3Rpb24gcmVuZGVyQWxsKCkgeyByZW5kZXJQcm9ncmVzcygpOyByZW5kZXJQYW5lbCgpOyByZW5kZXJQcmV2aWV3KCk7IHJlbmRlck5hdigpOyByZXBvcnRIZWlnaHQoKTsgfQoKICBmdW5jdGlvbiByZW5kZXJQcm9ncmVzcygpIHsKICAgIGNvbnN0IHdyYXAgPSAkKCcjd3otcHJvZ3Jlc3MnKTsKICAgIGNvbnN0IGtsYW1tZXIgPSBpc3RLbGFtbWVyKHR5cE9iaihzdGF0ZS50eXApKTsKICAgIHdyYXAuaW5uZXJIVE1MID0gU1RFUFMuZmlsdGVyKHMgPT4gYXBwbGljYWJsZShzLm4pKS5tYXAocyA9PiB7CiAgICAgIGNvbnN0IGNscyA9IHMubiA9PT0gc3RhdGUuc3RlcCA\\\/ICdhY3RpdmUnIDogKGNvbXBsZXRlKHMubikgJiYgcy5uIDwgc3RhdGUuc3RlcCA\\\/ICdkb25lJyA6ICcnKTsKICAgICAgY29uc3QgY2FuQ2xpY2sgPSByZWFjaGFibGUocy5uKTsKICAgICAgLy8gUjItNDogQmVpIGRlciBLbGFtbWVyIGVudGZhZWxsdCBkaWUgT2JlcmZsYWVjaGVuLVdhaGwgLT4gU2Nocml0dCA1IGhlaXNzdCBudXIgIldlcmtzdG9mZiIuCiAgICAgIGNvbnN0IGxhYmVsID0gKHMubiA9PT0gNSAmJiBrbGFtbWVyKSA\\\/ICdXZXJrc3RvZmYnIDogcy5sYWJlbDsKICAgICAgcmV0dXJuIGA8YnV0dG9uIGNsYXNzPSJwc3RlcCAke2Nsc30iIGRhdGEtYWN0PSJnb3RvIiBkYXRhLW49IiR7cy5ufSIgJHtjYW5DbGljayA\\\/ICcnIDogJ2Rpc2FibGVkJ30+CiAgICAgICAgPHNwYW4gY2xhc3M9Im51bSI+JHtjb21wbGV0ZShzLm4pICYmIHMubiA8IHN0YXRlLnN0ZXAgPyBpYygnY2hlY2snLCAnaWMnKSA6IHN0ZXBQb3Mocy5uKX08L3NwYW4+JHtlc2MobGFiZWwpfTwvYnV0dG9uPmA7CiAgICB9KS5qb2luKCcnKTsKICB9CgogIGZ1bmN0aW9uIHRpbGUoc2VsLCBhY3QsIGlkLCB0aXRsZSwgc3ViLCBiYWRnZSwgaWNvbikgewogICAgcmV0dXJuIGA8YnV0dG9uIGNsYXNzPSJ0aWxlICR7c2VsID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSIke2FjdH0iIGRhdGEtaWQ9IiR7aWR9Ij4KICAgICAgJHtpY29uID8gaWMoaWNvbikgOiAnJ30KICAgICAgPHNwYW4gY2xhc3M9InQiPiR7ZXNjKHRpdGxlKX08L3NwYW4+CiAgICAgICR7c3ViID8gYDxzcGFuIGNsYXNzPSJkIj4ke2VzYyhzdWIpfTwvc3Bhbj5gIDogJyd9CiAgICAgICR7YmFkZ2UgPyBgPHNwYW4gY2xhc3M9ImJhZGdlICR7YmFkZ2UuY2xzfSI+JHtlc2MoYmFkZ2UudHh0KX08L3NwYW4+YCA6ICcnfQogICAgPC9idXR0b24+YDsKICB9CiAgLyogS29wZnplaWxlIGplZGVzIFNjaHJpdHRzLiBEZXIgWnVydWVja3NldHplbi1CdXR0b24gKEE1KSBoYWVuZ3QgYmV3dXNzdCBoaWVyCiAgICogZHJpbjogaGVhZCgpIGJhdWVuIEFMTEUgYWNodCBTY2hyaXR0ZSwgZGFtaXQgc2l0enQgZXIgdWViZXJhbGwgYW4gZGVyc2VsYmVuCiAgICogU3RlbGxlIC0gdW5kIGRpZSBSZWloZSBkZXIgU2Nocml0dC1QaWxsZW4gKCN3ei1wcm9ncmVzcykgYmxlaWJ0IHNhdWJlci4KICAgKiBTb2xhbmdlIG5pY2h0cyBnZXdhZWhsdCBpc3QgKD0gVXJzcHJ1bmdzenVzdGFuZCksIHdhZXJlIGVyIGVpbiBOby1PcCAtPiBkaXNhYmxlZC4gKi8KICBmdW5jdGlvbiBoZWFkKGtpY2tlciwgdGl0bGUsIGRlc2MpIHsKICAgIGNvbnN0IGZyaXNjaCA9IGlzdFVyc3BydW5nKCk7CiAgICAvLyBLaWNrZXItTnVtbWVyIGF1ZiBkaWUgbHVlY2tsb3NlIEFuemVpZ2UtUG9zaXRpb24gZGVzIGFrdHVlbGxlbiBTY2hyaXR0cyBzZXR6ZW4KICAgIC8vIChzb25zdCB6ZWlndCBkaWUgUGlsbGUgIjYiLCBkaWUgVWViZXJzY2hyaWZ0IGFiZXIgIlNjaHJpdHQgNyIpLgogICAga2lja2VyID0gU3RyaW5nKGtpY2tlcikucmVwbGFjZSgvXGQrLywgc3RlcFBvcyhzdGF0ZS5zdGVwKSk7CiAgICByZXR1cm4gYDxkaXYgY2xhc3M9InN0ZXAtaGVhZCI+CiAgICAgIDxkaXYgY2xhc3M9InN0ZXAtaGVhZC10b3AiPjxkaXYgY2xhc3M9ImtpY2tlciI+JHtlc2Moa2lja2VyKX08L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZXNldGJ0biIgZGF0YS1hY3Q9InJlc2V0IiAke2ZyaXNjaCA\\\/ICdkaXNhYmxlZCcgOiAnJ30KICAgICAgICAgIHRpdGxlPSIke2ZyaXNjaCA\\\/ICdFcyBpc3Qgbm9jaCBuaWNodHMga29uZmlndXJpZXJ0LicgOiAnS29uZmlndXJhdGlvbiBhdWYgZGVuIFVyc3BydW5nc3p1c3RhbmQgenVyw7xja3NldHplbid9IgogICAgICAgICAgPiR7cmVzZXRMYWJlbCgnWnVyw7xja3NldHplbicpfTwvYnV0dG9uPjwvZGl2PgogICAgICA8aDI+JHtlc2ModGl0bGUpfTwvaDI+JHtkZXNjID8gYDxwPiR7ZXNjKGRlc2MpfTwvcD5gIDogJyd9PC9kaXY+YDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclBhbmVsKCkgewogICAgY29uc3QgcCA9ICQoJyN3ei1wYW5lbCcpOyBsZXQgaCA9ICcnOwogICAgc3dpdGNoIChzdGF0ZS5zdGVwKSB7CiAgICAgIGNhc2UgMToKICAgICAgICBoID0gaGVhZCgnU2Nocml0dCAxJywgJ1dvZsO8ciB3aXJkIGRhcyBGaXR0aW5nIGVpbmdlc2V0enQ\\\/JywgJ0F1cyBkZXIgQW53ZW5kdW5nIHNjaGxhZ2VuIHdpciBXZXJrc3RvZmYsIE9iZXJmbMOkY2hlIHVuZCBEaWNodHVuZyBzaW5udm9sbCB2b3IuIEFucGFzc2VuIGthbm5zdCBkdSBhbGxlcyBzcMOkdGVyLicpOwogICAgICAgIGggKz0gJzxkaXYgY2xhc3M9InRpbGVzIj4nICsgRC5hbndlbmR1bmdlbi5tYXAoYSA9PiB0aWxlKHN0YXRlLmFud2VuZHVuZyA9PT0gYS5pZCwgJ2Fud2VuZHVuZycsIGEuaWQsIGEubGFiZWwsIGEuc3ViLCBudWxsLCBhLmlkKSkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyOgogICAgICAgIGggPSBoZWFkKCdTY2hyaXR0IDInLCAnVmVyYmluZHVuZ3NhcnQgd8OkaGxlbicsICdGaXJtYSBXZWlzcyBrYWxrdWxpZXJ0IGJlaWRlIFByb2R1a3RncnVwcGVuIGluZGl2aWR1ZWxsIGF1ZiBBbmZyYWdlLicpOwogICAgICAgIGggKz0gJzxkaXYgY2xhc3M9InRpbGVzIj4nICsgRC5ub3JtZW4ubWFwKG4gPT4gdGlsZShzdGF0ZS5ub3JtID09PSBuLmlkLCAnbm9ybScsIG4uaWQsIG4ubGFiZWwgKyAnIOKAkyAnICsgbi5zdWIsIG4uaGlud2VpcywKICAgICAgICAgIG4ucHJlaXNNb2R1cyA9PT0gJ2xpdmUnICYmIEQucHJlaXNlLmZyZWlnZWdlYmVuID09PSB0cnVlID8geyBjbHM6J2xpdmUnLCB0eHQ6J21pdCBmcmVpZ2VnZWJlbmVtIFByZWlzJyB9IDogeyBjbHM6J2FuZnJhZ2UnLCB0eHQ6J2F1ZiBBbmZyYWdlJyB9KSkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzOiB7CiAgICAgICAgY29uc3QgdHMgPSBELnR5cGVuLmZpbHRlcih0ID0+IHQubm9ybSA9PT0gc3RhdGUubm9ybSAmJiB0LmFrdGl2ICYmICFpc1R5cGVCbG9ja2VkKHQpKTsKICAgICAgICBoID0gaGVhZCgnU2Nocml0dCAzJywgJ0JhdXRlaWwgd8OkaGxlbicsICdBYiBoaWVyIHfDpGNoc3QgZGllIFplaWNobnVuZyByZWNodHMgbGl2ZSBtaXQgZGVpbmVyIEF1c3dhaGwuJyk7CiAgICAgICAgLy8gQmFkZ2UtUmVpaGVuZm9sZ2U6IG1hc3NlRm9sZ3QgKENGL0NGSSAtIGdhciBrZWluZSBNYXNzZSkgZ2VodCB2b3IgbWFzc2VQbGF0emhhbHRlcgogICAgICAgIC8vIChESU4gMTE4NjUgLSBNYXNzZSBkYSwgYWJlciBub2NoIG5pY2h0IFdlaXNzLXZlcmlmaXppZXJ0KS4gRGVyIEt1bmRlIHNpZWh0IGFtCiAgICAgICAgLy8gQmF1dGVpbCBzZWxic3QsIHdvcmFuIGVyIGlzdCwgYmV2b3IgZXIgaGluZWlua2xpY2t0LgogICAgICAgIGggKz0gJzxkaXYgY2xhc3M9InRpbGVzIj4nICsgdHMubWFwKHQgPT4gdGlsZShzdGF0ZS50eXAgPT09IHQuaWQsICd0eXAnLCB0LmlkLCB0LmxhYmVsLCB0LnN1YiwKICAgICAgICAgIHQubWFzc2VGb2xndCA\\\/IHsgY2xzOidhbmZyYWdlJywgdHh0OidNYcOfZSBmb2xnZW4nIH0KICAgICAgICAgIDogdC5tYXNzZVBsYXR6aGFsdGVyID8geyBjbHM6J2FuZnJhZ2UnLCB0eHQ6J01hw59lIHZvcmzDpHVmaWcnIH0gOiBudWxsKSkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgICAvLyBSMy0xOiBPcmJpdGFsc2Nod2Vpc3MtSGlud2VpcyBmdWVyIGRpZSBnZXNjaHdlaXNzdGVuIEZpdHRpbmdzLiBFcnNldHp0IGRlbiBmcnVlaGVyZW4KICAgICAgICAvLyAiT3JiaXRhbCBnZXNjaHdlacOfdCItVW50ZXJ0aXRlbCBkZXIgQm9lZ2VuIChqZXR6dCAiRm9ybSBCTC05MC9CTC00NSIpIGFuIGVpbmVyIFN0ZWxsZQogICAgICAgIC8vIGZ1ZXIgZGllIGdhbnplIERJTi0xMTg2NS1GYW1pbGllLgogICAgICAgIGlmIChzdGF0ZS5ub3JtID09PSAnZGluMTE4NjUnKSBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPkFsbGUgRElOLTExODY1LUZpdHRpbmdzIGbDvHIgT3JiaXRhbHNjaHdlacOfdW5nLjwvc3Bhbj48L2Rpdj5gOwogICAgICAgIGlmIChzdGF0ZS5ub3JtID09PSAnZGluMTE4NjUnICYmIEQubWFzc2UuZGluMTE4NjUudFN0dWVja1JlZHV6aWVydC5zdGF0dXMgPT09ICdibG9ja2llcnQnKSB7CiAgICAgICAgICBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPlJlZHV6aWVydGUgVC1TdMO8Y2tlIGJsZWliZW4gYXVzZ2VibGVuZGV0LCBiaXMgRmlybWEgV2Vpc3MgZGllIGZlaGxlbmRlbiBHcsO2w59lbmtvbWJpbmF0aW9uZW4gdW5kIE1hw59lIGxpZWZlcnQuPC9zcGFuPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgNDogaCA9IHJlbmRlclN0ZXA0KCk7IGJyZWFrOwogICAgICBjYXNlIDU6IHsKICAgICAgICAvLyBXZXJrc3RvZmZsaXN0ZSBpc3QgdHlwYWJoYWVuZ2lnOiBLbGFtbWVybiBoYWJlbiBlaWdlbmUgV2Vya3N0b2ZmZSAoMS40MzA4LzEuNDQwOCwKICAgICAgICAvLyBBYnNjaG5pdHQgRSksIGdlZmlsdGVydCBuYWNoIGRlbSBnZXdhZWhsdGVuIEtsYW1tZXJ0eXAuIEFsbGVzIGFuZGVyZTogMS40NDA0LzEuNDQzNS4KICAgICAgICBjb25zdCB3TGlzdGUgPSB3ZXJrc3RvZmZPcHRpb25lbihzdGF0ZSksIHdTZWwgPSBlZmZXZXJrc3RvZmYoc3RhdGUpLCBrbGFtbWVyID0gaXN0S2xhbW1lcih0eXBPYmooc3RhdGUudHlwKSk7CiAgICAgICAgLy8gUjItNDogRGllIEtsYW1tZXIgaGF0IEtFSU5FIE9iZXJmbGFlY2hlbi1XYWhsIC0+IFNjaHJpdHQgNSB6ZWlndCBiZWkgaWhyIG51ciBkZW4KICAgICAgICAvLyBXZXJrc3RvZmYgKDEuNDMwOC8xLjQ0MDgpIHVuZCBkZXIgVGl0ZWwvVW50ZXJ0aXRlbCBzcGFydCBkaWUgT2JlcmZsYWVjaGUgYXVzLgogICAgICAgIGggPSBoZWFkKCdTY2hyaXR0IDUnLCBrbGFtbWVyID8gJ1dlcmtzdG9mZicgOiAnV2Vya3N0b2ZmICYgT2JlcmZsw6RjaGUnLCBrbGFtbWVyCiAgICAgICAgICA\\\/ICdLbGFtbWVybiB3ZXJkZW4gYXVzIGFuZGVyZW4gV2Vya3N0b2ZmZW4gZ2VmZXJ0aWd0IGFscyBkaWUgRml0dGluZ3Mg4oCTIHfDpGhsYmFyIGlzdCwgd2FzIGRlciBLbGFtbWVydHlwIHp1bMOkc3N0LiBFaW5lIE9iZXJmbMOkY2hlbmtsYXNzZSB3aXJkIGJlaSBLbGFtbWVybiBuaWNodCBnZXfDpGhsdC4nCiAgICAgICAgICA6ICdCZWlkZSBzaW5kIGF1cyBkZXIgQW53ZW5kdW5nIHZvcmJlbGVndC4nKTsKICAgICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPldlcmtzdG9mZjwvc3Bhbj48ZGl2IGNsYXNzPSJvcHRzIj4nICsgd0xpc3RlLm1hcCh3ID0+IHsKICAgICAgICAgIC8vIHN1Yi9oaW53ZWlzIHNpbmQgYmVpIGRlbiBLbGFtbWVyLVdlcmtzdG9mZmVuIGJld3Vzc3QgbGVlciAoV2Vpc3MgaGF0IGRhenUgbmljaHRzCiAgICAgICAgICAvLyBnZWxpZWZlcnQpIC0+IG51ciBhdXNnZWJlbiwgd2FzIHdpcmtsaWNoIGRhIGlzdC4gTmljaHRzIGRhenVlcmZpbmRlbi4KICAgICAgICAgIGNvbnN0IGQgPSBbdy5zdWIsIHcuaGlud2Vpc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDCtyAnKTsKICAgICAgICAgIHJldHVybiBgPGJ1dHRvbiBjbGFzcz0ib3B0ICR7d1NlbCA9PT0gdy5pZCA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0id2Vya3N0b2ZmIiBkYXRhLWlkPSIke3cuaWR9Ij4KICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Ij4ke2VzYyh3LmxhYmVsKX08L3NwYW4+JHtkID8gYDxzcGFuIGNsYXNzPSJkIj4ke2VzYyhkKX08L3NwYW4+YCA6ICcnfTwvYnV0dG9uPmA7CiAgICAgICAgfSkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgICBpZiAoa2xhbW1lcikgewogICAgICAgICAgY29uc3Qga3QgPSBrbGFtbWVyVHlwT2JqKHN0YXRlLmtsYW1tZXJUeXApOwogICAgICAgICAgaWYgKGt0ICYmIGt0LndlcmtzdG9mZmUubGVuZ3RoID09PSAxKSBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPiR7ZXNjKGt0LmxhYmVsKX0gKCR7ZXNjKGt0LnN1Yil9KSB3aXJkIGluICR7ZXNjKGt0LndlcmtzdG9mZmVbMF0pfSBnZWZlcnRpZ3QuPC9zcGFuPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIC8vIE9iZXJmbGFlY2hlbi1CbG9jayBudXIgZnVlciBOSUNIVC1LbGFtbWVyLVR5cGVuIChSMi00KS4KICAgICAgICBpZiAoIWtsYW1tZXIpIHsKICAgICAgICAgIGNvbnN0IG9MaXN0ZSA9IG9iZXJmbGFlY2hlbk9wdGlvbmVuKHN0YXRlKTsKICAgICAgICAgIGNvbnN0IGVtcGYgPSAoc3RhdGUub2JlcmZsYWVjaGUgPT09ICdING8nKSA\\\/ICcxLjQ0MzUnIDogbnVsbDsKICAgICAgICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+T2JlcmZsw6RjaGUgKERJTiAxMTg2Nik8L3NwYW4+PGRpdiBjbGFzcz0ib3B0cyI+JyArIG9MaXN0ZS5tYXAobyA9PgogICAgICAgICAgICBgPGJ1dHRvbiBjbGFzcz0ib3B0ICR7c3RhdGUub2JlcmZsYWVjaGUgPT09IG8uaWQgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9Im9iZXJmbGFlY2hlIiBkYXRhLWlkPSIke28uaWR9Ij4KICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InQiPiR7ZXNjKG8ubGFiZWwpfTwvc3Bhbj48c3BhbiBjbGFzcz0iZCI+JHtlc2Moby5zdWIpfSDCtyAke2VzYyhvLnZlcmZhaHJlbil9PC9zcGFuPjwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgICBpZiAoZW1wZiAmJiBzdGF0ZS53ZXJrc3RvZmYgIT09IGVtcGYpIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtcGxoIj4ke2ljKCdpbmZvJyl9PHNwYW4+RsO8ciBING8gKGVsZWt0cm9wb2xpZXJ0KSBlbXBmZWhsZW4gd2lyIFdlcmtzdG9mZiAxLjQ0MzUuPC9zcGFuPjwvZGl2PmA7CiAgICAgICAgICBpZiAoaXNDb25uZWN0KHR5cE9iaihzdGF0ZS50eXApKSkgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1vayI+JHtpYygnY2hlY2snLCAnaWMnKX08c3Bhbj5EaWUgQXVzd2FobCBpc3QgYXVmIGRpZSBpbiBkZW4gZ2VwcsO8ZnRlbiBEYXRlbmJsw6R0dGVybiBiZWxlZ3RlbiBPYmVyZmzDpGNoZW4gZWluZ2VzY2hyw6Rua3QuPC9zcGFuPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgNjogewogICAgICAgIGNvbnN0IHNwID0gc3BlcnJEaWNodHVuZ2VuKCk7CiAgICAgICAgLy8gRGVyIEtvbmZvcm1pdGFldHMtWnVzYXR6IGZvbGd0IHNlaXQgZGVtIDExLjA4LjIwMjYgZGVyIEFud2VuZHVuZyBhdXMgU2Nocml0dCAxCiAgICAgICAgLy8gKEJlcm5kOiBQaGFybWEvU3RlcmlsdGVjaG5payAtPiBVU1AgQ2xhc3MgVkksIExlYmVuc21pdHRlbC9DaGVtaWUgLT4gRUcgMTkzNS8yMDA0KS4KICAgICAgICAvLyBWb3JoZXIgc3RhbmQgaGllciBmdWVyIGFsbGUgdmllciBBbndlbmR1bmdlbiBwYXVzY2hhbCAiRkRBL1VTUC1rb25mb3JtIi4KICAgICAgICBjb25zdCBmZGFLID0gZmRhS3VyelRleHQoKTsKICAgICAgICBoID0gaGVhZCgnU2Nocml0dCA2JywgJ0RpY2h0dW5nIHfDpGhsZW4nLCAnRGllIERpY2h0dW5nc2ZhcmJlIGVyc2NoZWludCBkaXJla3QgaW4gZGVyIFplaWNobnVuZy4gQWxsZSBTdGFuZGFyZGRpY2h0dW5nZW4gdm9uIEZpcm1hIFdlaXNzIHNpbmQgJwogICAgICAgICAgKyAoZmRhSyA\\\/ICdGREEtIHVuZCAnICsgZmRhSyArICcta29uZm9ybS4nIDogJ0ZEQS1rb25mb3JtLicpKTsKICAgICAgICBoICs9ICc8ZGl2IGNsYXNzPSJvcHRzIj4nICsgRC5kaWNodHVuZ2VuLm1hcChkID0+IHsKICAgICAgICAgIGNvbnN0IGRpcyA9IHNwLmhhcyhkLmlkKTsKICAgICAgICAgIHJldHVybiBgPGJ1dHRvbiBjbGFzcz0ib3B0ICR7c3RhdGUuZGljaHR1bmcgPT09IGQuaWQgPyAnc2VsJyA6ICcnfSAke2RpcyA\\\/ICdkaXNhYmxlZCcgOiAnJ30iIGRhdGEtYWN0PSJkaWNodHVuZyIgZGF0YS1pZD0iJHtkLmlkfSIgJHtkaXMgPyAnZGlzYWJsZWQnIDogJyd9PgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idCI+PHNwYW4gc3R5bGU9IndpZHRoOjEycHg7aGVpZ2h0OjEycHg7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjMWMxYzFjO2JhY2tncm91bmQ6JHtkLmZhcmJlfSI+PC9zcGFuPiR7ZXNjKGQubGFiZWwpfSR7ZGlzID8gJzxzcGFuIGNsYXNzPSJsb2NrIj5nZXNwZXJydDwvc3Bhbj4nIDogJyd9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZCI+JHtlc2MoZC5zdWIpfSR7ZC5mZGEgPT09IHRydWUgPyAnIMK3IEZEQScgOiAnJ30keyhkLnVzcFZJID09PSB0cnVlICYmIGZkYUspID8gJyDCtyAnICsgZXNjKGZkYUspIDogJyd9PC9zcGFuPjwvYnV0dG9uPmA7CiAgICAgICAgfSkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgICBjb25zdCBhdkwgPSBhdXNmdWVocnVuZ0F2YWlsKHN0YXRlKTsKICAgICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPkF1c2bDvGhydW5nPC9zcGFuPjxkaXYgY2xhc3M9InNlZyI+JyArCiAgICAgICAgICBELmRpY2h0dW5nQXVzZnVlaHJ1bmcuZmlsdGVyKGEgPT4gYXZMLmluZGV4T2YoYS5pZCkgPj0gMCkubWFwKGEgPT4gYDxidXR0b24gY2xhc3M9IiR7ZWZmTGlwcGUoc3RhdGUpID09PSBhLmlkID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJsaXBwZSIgZGF0YS1pZD0iJHthLmlkfSI+JHtlc2MoYS5sYWJlbCl9PC9idXR0b24+YCkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgICBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLW9rIj4ke2ljKCdjaGVjaycsICdpYycpfTxzcGFuPiR7ZXNjKGZkYVRleHQoKSl9IChTdGFuZGFyZCkg4oCUIGJlaSBhbGxlbiBTdGFuZGFyZGRpY2h0dW5nZW4gdm9uIEZpcm1hIFdlaXNzIGlua2x1c2l2ZS48L3NwYW4+PC9kaXY+YDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlIDc6IGggPSByZW5kZXJTdGVwNygpOyBicmVhazsKICAgICAgY2FzZSA4OiBoID0gcmVuZGVyU3RlcDgoKTsgYnJlYWs7CiAgICB9CiAgICBwLmlubmVySFRNTCA9IGg7CiAgICBpZiAoc3RhdGUuc3RlcCA9PT0gOCkgYmluZEZvcm0oKTsKICB9CgogIC8qIFNjaHJpdHQgNCBmdWVyIEJsaW5kZGVja2VsICsgS2xhbW1lciAoQWJzY2huaXR0IEQpOiBLRUlOIFJlaWhlbi1VbXNjaGFsdGVyLgogICAqIEJlcm5kOiAibWV0cmlzY2ggRE4sIElTTy9PRCB1bmQgWm9sbCBrYW5uc3QgZHUgaWdub3JpZXJlbi4gRWluZmFjaCBuYWNoIGRlcgogICAqIEZsYW5zY2hncm9lc3NlIGF1Zmxpc3Rlbi4iIC0+IG51ciBlaW5lIExpc3RlIG1pdCBkZW4gMTggRmxhbnNjaC3DmC4KICAgKiBGdWVyIGRpZSBHcm9lc3NlbiBvaG5lIGhpbnRlcmxlZ3RlIE1hc3NlICgxNDQsNSAvIDIxNyw1IC8gMjY4IC8gMjg2LDEgLyAzMTkpCiAgICogd2lyZCBhdXNzY2hsaWVzc2xpY2ggZGVyIEZsYW5zY2gtw5ggZ2VmdWVocnQsIGFsbGVzIGFuZGVyZSBzdGVodCBhdWYgImZvbGd0Ii4gKi8KICBmdW5jdGlvbiByZW5kZXJTdGVwNEZsYW5zY2godCkgewogICAgY29uc3QgZiA9IGZsYW5zY2hGb3Ioc3RhdGUpOwogICAgbGV0IGggPSBoZWFkKCdTY2hyaXR0IDQnLCAnRmxhbnNjaGdyw7bDn2Ugd8OkaGxlbicsCiAgICAgIHQubGFiZWwgKyAnIHdpcmQgbnVyIG5hY2ggZGVtIEZsYW5zY2gtw5ggdW50ZXJzY2hpZWRlbiDigJMgUmVpaGUgKG1ldHJpc2NoIEROIC8gSVNPIC8gWm9sbCkgc3BpZWx0IGhpZXIga2VpbmUgUm9sbGUuJyk7CiAgICBpZiAoaXN0S2xhbW1lcih0KSkgewogICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPktsYW1tZXJ0eXA8L3NwYW4+PGRpdiBjbGFzcz0ib3B0cyI+JyArIChELmtsYW1tZXJUeXBlbiB8fCBbXSkubWFwKGsgPT4KICAgICAgICBgPGJ1dHRvbiBjbGFzcz0ib3B0ICR7c3RhdGUua2xhbW1lclR5cCA9PT0gay5pZCA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0ia2xhbW1lcnR5cCIgZGF0YS1pZD0iJHtrLmlkfSI+CiAgICAgICAgICAgPHNwYW4gY2xhc3M9InQiPiR7ZXNjKGsubGFiZWwpfTwvc3Bhbj48c3BhbiBjbGFzcz0iZCI+JHtlc2Moay5zdWIpfSDCtyBXZXJrc3RvZmYgJHtlc2Moay53ZXJrc3RvZmZlLmpvaW4oJyBvZGVyICcpKX08L3NwYW4+PC9idXR0b24+YCkuam9pbignJykgKyAnPC9kaXY+JzsKICAgICAgLy8gTXV0dGVyLUFydCAoUjItNCk6IE11dHRlciA9IFN0YW5kYXJkLCBTZWNoc2thbnRtdXR0ZXIgZ2VnZW4gQXVmcHJlaXMuIERlZmF1bHQgPSBNLgogICAgICBpZiAoKEQua2xhbW1lck11dHRlcm4gfHwgW10pLmxlbmd0aCkgewogICAgICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+TXV0dGVyPC9zcGFuPjxkaXYgY2xhc3M9InNlZyI+JyArIEQua2xhbW1lck11dHRlcm4ubWFwKG0gPT4KICAgICAgICAgIGA8YnV0dG9uIGNsYXNzPSIke3N0YXRlLmtsYW1tZXJNdXR0ZXIgPT09IG0uaWQgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9ImtsYW1tZXJtdXR0ZXIiIGRhdGEtaWQ9IiR7bS5pZH0iPiR7ZXNjKG0ubGFiZWwpfTwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgaWYgKEQua2xhbW1lck11dHRlckhpbndlaXMpIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtcGxoIj4ke2ljKCdpbmZvJyl9PHNwYW4+JHtlc2MoRC5rbGFtbWVyTXV0dGVySGlud2Vpcyl9PC9zcGFuPjwvZGl2PmA7CiAgICAgIH0KICAgIH0KICAgIC8vIERlciBadXNhdHogaGFlbmd0IGFtIEJhdXRlaWwgKGZsYW5zY2hNYXNzT2ZmZW4pLCBOSUNIVCBtZWhyIGFuIGJsaW5kVGhrOiBmdWVyIGRlbgogICAgLy8gQmxpbmRkZWNrZWwgaXN0IGluendpc2NoZW4gamVkZSBHcm9lc3NlIGJlbWFzc3QsIGJlaSBkZXIgS2xhbW1lciBibGVpYmVuIDI4NiwxIC8KICAgIC8vIDMxOSAvIDMzOCBsYXV0IEJlcm5kICJBdWYgQW5mcmFnZSIgLSBkZXIgSGlud2VpcyBtdXNzIGRvcnQgc3RlaGVuYmxlaWJlbi4KICAgIGggKz0gYDxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+RmxhbnNjaC3ijIA8L3NwYW4+CiAgICAgIDxkaXYgY2xhc3M9InNlbGVjdC13cmFwIj48c2VsZWN0IGNsYXNzPSJzeiIgaWQ9Ind6LWZsYW5zY2giIGRhdGEtcm9sZT0iZmxhbnNjaCI+JHsoRC5mbGFuc2NoZ3JvZXNzZW4gfHwgW10pLm1hcCh4ID0+CiAgICAgICAgYDxvcHRpb24gdmFsdWU9IiR7eC5pZH0iICR7c3RhdGUuZmxhbnNjaCA9PT0geC5pZCA\\\/ICdzZWxlY3RlZCcgOiAnJ30+4oyAICR7ZXNjKHgubGFiZWwpfSBtbSR7ZmxhbnNjaE1hc3NPZmZlbih0LCB4LCBzdGF0ZS5rbGFtbWVyVHlwKSA\\\/ICcgwrcgd2VpdGVyZSBNYcOfZSBmb2xnZW4nIDogJyd9PC9vcHRpb24+YCkuam9pbignJyl9PC9zZWxlY3Q+PC9kaXY+YDsKICAgIGlmIChmbGFuc2NoTWFzc09mZmVuKHQsIGYsIHN0YXRlLmtsYW1tZXJUeXApKSB7CiAgICAgIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtcGxoIj4ke2ljKCdpbmZvJyl9PHNwYW4+JHtpc3RLbGFtbWVyKHQpCiAgICAgICAgPyAnRsO8ciBGbGFuc2NoLeKMgCAnICsgZXNjKGYubGFiZWwpICsgJyBtbSBpc3QgZGllIEtsYW1tZXIgbm9jaCBuaWNodCBiZW1hw590IOKAkyBkYXMgTWHDnyBBIGJsZWlidCBoaWVyIGF1ZiBBbmZyYWdlLiBBbmZyYWdlbiBsw6Rzc3Qgc2ljaCBkaWUgR3LDtsOfZSB0cm90emRlbS4nCiAgICAgICAgOiAnRsO8ciBGbGFuc2NoLeKMgCAnICsgZXNjKGYubGFiZWwpICsgJyBtbSBsaWVndCB1bnMgYmlzaGVyIG51ciBkZXIgRmxhbnNjaC1EdXJjaG1lc3NlciB2b3IuIERpZSDDvGJyaWdlbiBNYcOfZSByZWljaHQgRmlybWEgV2Vpc3MgbmFjaCDigJMgYW5iaWV0ZW4gbMOkc3N0IHNpY2ggZGllIEdyw7bDn2UgdHJvdHpkZW0uJ308L3NwYW4+PC9kaXY+YDsKICAgIH0KICAgIGggKz0gYDxidXR0b24gY2xhc3M9ImxpbmtidG4iIGRhdGEtYWN0PSJzb25kZXIiPiR7aWMoJ3BsdXMnLCAnaWMnKX0gU29uZGVyYWJtZXNzdW5nIGFuZnJhZ2VuPC9idXR0b24+YDsKICAgIHJldHVybiBoOwogIH0KCiAgLyogU2Nocml0dCA0IGZ1ZXIgVHlwZW4gb2huZSBiZWxlZ3RlIE1hc3NxdWVsbGUgKENGL0NGSSwgQWJzY2huaXR0IEcpLgogICAqIEJld3Vzc3QgS0VJTkUgUmVpaGVuLS9Hcm9lc3NlbmF1c3dhaGw6IERpZSBMaXN0ZSBoYWV0dGUgbnVyIGRpZSBkdWVubndhbmRpZ2VuCiAgICogRElOLTMyNjc2LU1hc3NlIGFuenViaWV0ZW4sIGRpZSBmdWVyIENGL0NGSSBuaWNodCBiZWxlZ3Qgc2luZC4gTGllYmVyIGVpbmUgZWhybGljaGUKICAgKiBMdWVja2UgYWxzIGVpbmUgZmFsc2NoZSBHcm9lc3NlIC0gZGVyIEt1bmRlIGthbm4gc2VpbmUgV3Vuc2NoZ3JvZXNzZSBpbSBGcmVpdGV4dAogICAqICgiU29uZGVyYWJtZXNzdW5nIGFuZnJhZ2VuIikgbWl0Z2ViZW4sIFdlaXNzIGtsYWVydCBzaWUgbWl0IGRlbSBEYXRlbmJsYXR0LiAqLwogIGZ1bmN0aW9uIHJlbmRlclN0ZXA0TWFzc2VGb2xndCh0KSB7CiAgICBsZXQgaCA9IGhlYWQoJ1NjaHJpdHQgNCcsICdNYcOfZSBmb2xnZW4nLAogICAgICAnRsO8ciAnICsgdC5sYWJlbCArICcgbGllZ2VuIHVucyBub2NoIGtlaW5lIGZyZWlnZWdlYmVuZW4gTWHDn2Ugdm9yLicpOwogICAgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1wbGgiPiR7aWMoJ2luZm8nKX08c3Bhbj5Tb2JhbGQgdW5zIGRhcyBwYXNzZW5kZSBEYXRlbmJsYXR0IHZvbiBGaXJtYSBXZWlzcyB2b3JsaWVndCwKICAgICAga2FubnN0IGR1IGhpZXIgZGllIEdyw7bDn2Ugd8OkaGxlbiB1bmQgZGllIFplaWNobnVuZyBiYXV0IHNpY2ggYXVmLiBCaXMgZGFoaW4gemVpZ2VuIHdpciBiZXd1c3N0CiAgICAgIHdlZGVyIE1hw59lIG5vY2ggZWluZW4gUmljaHRwcmVpcyDigJMgbGllYmVyIGVpbmUgTMO8Y2tlIGFscyBlaW5lIGdlc2Now6R0enRlIFphaGwuCiAgICAgIFdlcmtzdG9mZiwgT2JlcmZsw6RjaGUgdW5kIERpY2h0dW5nIGthbm5zdCBkdSB0cm90emRlbSBzY2hvbiBmZXN0bGVnZW47IGRlaW5lIEFuZnJhZ2UgZ2VodAogICAgICBtaXQgZGllc2VuIEFuZ2FiZW4gcmF1cyB1bmQgRmlybWEgV2Vpc3MgbWVsZGV0IHNpY2ggbWl0IGRlbiBNYcOfZW4uPC9zcGFuPjwvZGl2PmA7CiAgICBoICs9IGA8YnV0dG9uIGNsYXNzPSJsaW5rYnRuIiBkYXRhLWFjdD0ic29uZGVyIj4ke2ljKCdwbHVzJywgJ2ljJyl9IFd1bnNjaG1hw58gLyBTb25kZXJhYm1lc3N1bmcgYW5mcmFnZW48L2J1dHRvbj5gOwogICAgcmV0dXJuIGg7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTdGVwNENvbm5lY3QodCkgewogICAgY29uc3QgcncgPSByb3dGb3Ioc3RhdGUpOwogICAgLy8gQmVybmQgMjcuMDcuMjAyNjoga2VpbmUgSGVyc3RlbGxlcmJlemVpY2hudW5nZW4gbWVociBpbSBUZXh0IC0gbnVyIG5vY2gKICAgIC8vIGRpZSBuZXV0cmFsZW4gS3VlcnplbCBDRiB1bmQgQ0ZJLgogICAgbGV0IGggPSBoZWFkKCdTY2hyaXR0IDQnLCB0LmlkID09PSAnQ0YnID8gJ0Nvbm5lY3QtTWHDn2UgZmVzdGxlZ2VuJyA6ICdDb25uZWN0LUlubGluZS1NYcOfZSBmZXN0bGVnZW4nLAogICAgICB0LmlkID09PSAnQ0YnCiAgICAgICAgPyAnUm9ocnN0YW5kYXJkLCBHcsO2w59lIHVuZCBFaW5iYXVsw6RuZ2UgYmVzdGltbWVuIGRpZSBHZW9tZXRyaWUuIERpZSBaZWljaG51bmcgdW5kIGRpZSBNYcOfa2V0dGVuIHdhY2hzZW4gbGl2ZSBtaXQuJwogICAgICAgIDogJ1JvaHJhbnNjaGx1c3MgdW5kIFJvaHJncsO2w59lIGJlc3RpbW1lbiBkaWUgR2VvbWV0cmllLiBEaWUgWmVpY2hudW5nIHVuZCBkaWUgTWHDn2tldHRlbiB3YWNoc2VuIGxpdmUgbWl0LicpOwogICAgaWYgKHQuaWQgPT09ICdDRicpIHsKICAgICAgaCArPSAnPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5Sb2hyc3RhbmRhcmQ8L3NwYW4+PGRpdiBjbGFzcz0ic2VnIj4nICsKICAgICAgICBPYmplY3QuZW50cmllcyhELm1hc3NlLmNvbm5lY3QuY2YucmVpaGVuKS5tYXAoKFtpZCwgZ3J1cHBlXSkgPT4KICAgICAgICAgIGA8YnV0dG9uIGNsYXNzPSIke3N0YXRlLmNvbm5lY3ROb3JtID09PSBpZCA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0iY29ubmVjdG5vcm0iIGRhdGEtaWQ9IiR7aWR9Ij4ke2VzYyhncnVwcGUubGFiZWwpfTwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgIGNvbnN0IHJzID0gcm93c0ZvcihzdGF0ZSk7CiAgICAgIGggKz0gYDxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+R3LDtsOfZTwvc3Bhbj48ZGl2IGNsYXNzPSJzZWxlY3Qtd3JhcCI+PHNlbGVjdCBjbGFzcz0ic3oiIGRhdGEtcm9sZT0ic2l6ZSI+JHtycy5tYXAociA9PgogICAgICAgIGA8b3B0aW9uIHZhbHVlPSIke2VzYyhyLmlkKX0iICR7c3RhdGUuZ3JvZXNzZSA9PT0gci5pZCA\\\/ICdzZWxlY3RlZCcgOiAnJ30+JHtlc2MobGJsKHIpKX0gwrcgRGUgJHtmbXRNTShyLkRlKX0gwrcgRGYgJHtmbXRNTShyLkRmKX0gwrcgRGkgJHtmbXRNTShyLkRpKX0gbW08L29wdGlvbj5gKS5qb2luKCcnKX08L3NlbGVjdD48L2Rpdj5gOwogICAgICBpZiAocncpIHsKICAgICAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPkVpbmJhdWzDpG5nZSBMPC9zcGFuPjxkaXYgY2xhc3M9InNlZyI+JyArIHJ3LmxhZW5nZW4ubWFwKHggPT4KICAgICAgICAgIGA8YnV0dG9uIGNsYXNzPSIke051bWJlcihzdGF0ZS5jb25uZWN0TGFlbmdlKSA9PT0gTnVtYmVyKHguTCkgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9ImNvbm5lY3RsYWVuZ2UiIGRhdGEtaWQ9IiR7eC5MfSI+JHtmbXRNTSh4LkwpfSBtbTwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICAgICAgaCArPSBgPGRpdiBjbGFzcz0icHYtY2hpcHMiPjxzcGFuIGNsYXNzPSJjaGlwIj48Yj5UeXA8L2I+JHtlc2ModC5pZCl9PC9zcGFuPjxzcGFuIGNsYXNzPSJjaGlwIj48Yj5EZTwvYj4ke2ZtdE1NKHJ3LkRlKX0gbW08L3NwYW4+PHNwYW4gY2xhc3M9ImNoaXAiPjxiPkRmPC9iPiR7Zm10TU0ocncuRGYpfSBtbTwvc3Bhbj48c3BhbiBjbGFzcz0iY2hpcCI+PGI+RGk8L2I+JHtmbXRNTShydy5EaSl9IG1tPC9zcGFuPjwvZGl2PmA7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+Um9ocmFuc2NobHVzczwvc3Bhbj48ZGl2IGNsYXNzPSJzZWciPicgKwogICAgICAgIFtbJ0JXJywnQnV0dCBXZWxkJ10sWydUQycsJ1RyaS1DbGFtcCddXS5tYXAoKFtpZCxsYWJlbF0pID0+IGA8YnV0dG9uIGNsYXNzPSIke3N0YXRlLmNvbm5lY3RBbnNjaGx1c3MgPT09IGlkID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJjb25uZWN0YW5zY2hsdXNzIiBkYXRhLWlkPSIke2lkfSI+JHtsYWJlbH08L2J1dHRvbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgICBjb25zdCBycyA9IHJvd3NGb3Ioc3RhdGUpOwogICAgICBoICs9IGA8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPlJvaHJncsO2w59lPC9zcGFuPjxkaXYgY2xhc3M9InNlbGVjdC13cmFwIj48c2VsZWN0IGNsYXNzPSJzeiIgZGF0YS1yb2xlPSJzaXplIj4ke3JzLm1hcChyID0+CiAgICAgICAgYDxvcHRpb24gdmFsdWU9IiR7ZXNjKHIuaWQpfSIgJHtzdGF0ZS5ncm9lc3NlID09PSByLmlkID8gJ3NlbGVjdGVkJyA6ICcnfT4ke2VzYyhsYmwocikpfSDCtyBEZSAke2ZtdE1NKHIuRGUpfSDCtyBEaSAke2ZtdE1NKHIuRGkpfSBtbTwvb3B0aW9uPmApLmpvaW4oJycpfTwvc2VsZWN0PjwvZGl2PmA7CiAgICAgIGlmIChydykgewogICAgICAgIGNvbnN0IGVuZCA9IGNvbm5lY3RFbmRGb3Ioc3RhdGUsIHJ3KTsKICAgICAgICBjb25zdCB1cHBlciA9IEQubWFzc2UuY29ubmVjdC5jZmkub2JlcmVyQW5zY2hsdXNzOwogICAgICAgIGggKz0gYDxkaXYgY2xhc3M9InB2LWNoaXBzIj48c3BhbiBjbGFzcz0iY2hpcCI+PGI+VHlwPC9iPiR7ZXNjKHQuaWQpfTwvc3Bhbj48c3BhbiBjbGFzcz0iY2hpcCI+PGI+Um9ociBEZSAvIERpPC9iPiR7Zm10TU0ocncuRGUpfSAvICR7Zm10TU0ocncuRGkpfSBtbTwvc3Bhbj48c3BhbiBjbGFzcz0iY2hpcCI+PGI+T2JlcmVyIEFuc2NobHVzcyBEZSAvIERpPC9iPiR7Zm10TU0odXBwZXIuRGUpfSAvICR7Zm10TU0odXBwZXIuRGkpfSBtbTwvc3Bhbj48c3BhbiBjbGFzcz0iY2hpcCI+PGI+WTwvYj4ke2ZtdE1NKHJ3LlkpfSBtbTwvc3Bhbj4ke2VuZCA\\\/IGA8c3BhbiBjbGFzcz0iY2hpcCI+PGI+TDwvYj4ke2ZtdE1NKGVuZC5MKX0gbW08L3NwYW4+PHNwYW4gY2xhc3M9ImNoaXAiPjxiPiR7c3RhdGUuY29ubmVjdEFuc2NobHVzcyA9PT0gJ1RDJyA\\\/ICdUQycgOiAnQSd9PC9iPiR7Zm10TU0oc3RhdGUuY29ubmVjdEFuc2NobHVzcyA9PT0gJ1RDJyA\\\/IGVuZC5UQyA6IGVuZC5BKX0gbW08L3NwYW4+YCA6ICcnfTwvZGl2PmA7CiAgICAgIH0KICAgIH0KICAgIGggKz0gYDxidXR0b24gY2xhc3M9ImxpbmtidG4iIGRhdGEtYWN0PSJzb25kZXIiPiR7aWMoJ3BsdXMnLCAnaWMnKX0gU29uZGVyYWJtZXNzdW5nIGFuZnJhZ2VuPC9idXR0b24+YDsKICAgIHJldHVybiBoOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyU3RlcDQoKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7IGNvbnN0IHJzID0gcm93c0ZvcihzdGF0ZSk7CiAgICBpZiAoaXN0TWFzc2VGb2xndCh0KSkgcmV0dXJuIHJlbmRlclN0ZXA0TWFzc2VGb2xndCh0KTsKICAgIGlmIChpc3ROdXJGbGFuc2NoKHQpKSByZXR1cm4gcmVuZGVyU3RlcDRGbGFuc2NoKHQpOwogICAgaWYgKGlzQ29ubmVjdCh0KSkgcmV0dXJuIHJlbmRlclN0ZXA0Q29ubmVjdCh0KTsKICAgIGxldCBoID0gaGVhZCgnU2Nocml0dCA0JywgJ01hw59lIGZlc3RsZWdlbicsICdSZWloZSB1bmQgR3LDtsOfZSBiZXN0aW1tZW4gZGllIEdlb21ldHJpZS4gRGllIFplaWNobnVuZyB1bmQgZGllIE1hw59rZXR0ZW4gd2FjaHNlbiBsaXZlIG1pdC4nKTsKICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+UmVpaGU8L3NwYW4+PGRpdiBjbGFzcz0ic2VnIj4nICsKICAgICAgWydBJywgJ0InLCAnQyddLm1hcChyID0+IHsgY29uc3Qgb2sgPSByZWloZUF2YWlsYWJsZSh0LCByKTsgcmV0dXJuIGA8YnV0dG9uIGNsYXNzPSIke3N0YXRlLnJlaWhlID09PSByID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJyZWloZSIgZGF0YS1pZD0iJHtyfSIgJHtvayA\\\/ICcnIDogJ2Rpc2FibGVkJ30+JHtlc2MoKGlzQmVuZCh0KSA\\\/IHsgQTonbWV0cmlzY2gnLCBCOidJU08vT0QnLCBDOidab2xsJyB9IDogeyBBOidtZXRyaXNjaCBETicsIEI6J0lTTy9PRCcsIEM6J1pvbGwnIH0pW3JdKX0ke29rID8gJycgOiAnIMK3IGZlaGx0J308L2J1dHRvbj5gOyB9KS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgaCArPSAnPGRpdiBjbGFzcz0icm93MiIgc3R5bGU9Im1hcmdpbi10b3A6MTZweCI+JzsKICAgIGggKz0gYDxkaXY+PHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIiBzdHlsZT0ibWFyZ2luLXRvcDowIj4ke2VzYyhpc0JlbmQodCkgPyAnR3LDtsOfZSAoT0QpJyA6IChzdGF0ZS5yZWloZSA9PT0gJ0EnID8gJ05lbm53ZWl0ZScgOiAnR3LDtsOfZScpKX08L3NwYW4+CiAgICAgIDxkaXYgY2xhc3M9InNlbGVjdC13cmFwIj48c2VsZWN0IGNsYXNzPSJzeiIgaWQ9Ind6LXNpemUiIGRhdGEtcm9sZT0ic2l6ZSI+JHtycy5tYXAociA9PiBgPG9wdGlvbiB2YWx1ZT0iJHtyLmlkfSIgJHtzdGF0ZS5ncm9lc3NlID09PSByLmlkID8gJ3NlbGVjdGVkJyA6ICcnfT4ke2VzYyhsYmwocikpfSDCtyDijIAgJHtmbXRNTShvZE9mKHIpKX0gw5cgJHtmbXRNTSh3YWxsT2YocikpfSBtbSR7dC5ub3JtID09PSAnZGluMzI2NzYnICYmIHIuZmxhbmdlT0QgPyAnIMK3IEtsZW1tLeKMgCAnICsgZm10TU0oci5mbGFuZ2VPRCkgOiAnJ308L29wdGlvbj5gKS5qb2luKCcnKX08L3NlbGVjdD48L2Rpdj48L2Rpdj5gOwogICAgaWYgKHQgJiYgdC56d2VpdGVHcm9lc3NlKSB7CiAgICAgIC8vIFIzLTIvUjMtNDogIlJlZHV6aWVydCBhdWYiIC8gIkFiZ2FuZyIgYmlldGV0IE5VUiBHcsO2w59lbiBrbGVpbmVyIGFscyBkaWUgTmVubndlaXRlIGFuLgogICAgICBjb25zdCByciA9IHJvd3MyRm9yKHN0YXRlKSwgZmxkID0gdC5zdmdUeXBlID09PSAncmVkdXppZXJ1bmcnID8gJ1JlZHV6aWVydCBhdWYnIDogJ0FiZ2FuZyc7CiAgICAgIGlmIChyci5sZW5ndGgpIHsKICAgICAgICBoICs9IGA8ZGl2PjxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCIgc3R5bGU9Im1hcmdpbi10b3A6MCI+JHtlc2MoZmxkKX08L3NwYW4+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Qtd3JhcCI+PHNlbGVjdCBjbGFzcz0ic3oiIGlkPSJ3ei1zaXplMiIgZGF0YS1yb2xlPSJzaXplMiI+JHtyci5tYXAociA9PiBgPG9wdGlvbiB2YWx1ZT0iJHtyLmlkfSIgJHtzdGF0ZS5ncm9lc3NlMiA9PT0gci5pZCA\\\/ICdzZWxlY3RlZCcgOiAnJ30+JHtlc2MobGJsKHIpKX0gwrcg4oyAICR7Zm10TU0ob2RPZihyKSl9IG1tPC9vcHRpb24+YCkuam9pbignJyl9PC9zZWxlY3Q+PC9kaXY+PC9kaXY+YDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBLbGVpbnN0ZSBHcsO2w59lIGRlciBSZWloZSBnZXfDpGhsdCAtPiBlcyBnaWJ0IGtlaW5lIGtsZWluZXJlLiBLZWluIGxlZXJlcyBEcm9wZG93biwKICAgICAgICAvLyBzb25kZXJuIGVpbiBrbGFyZXIgSGlud2VpczsgZGllIFplaWNobnVuZyB6ZWlndCBzbyBsYW5nZSBkZW4gImZvbGd0Ii1QbGF0emhhbHRlci4KICAgICAgICBoICs9IGA8ZGl2PjxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCIgc3R5bGU9Im1hcmdpbi10b3A6MCI+JHtlc2MoZmxkKX08L3NwYW4+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlLXBsaCI+JHtpYygnaW5mbycpfTxzcGFuPkbDvHIgZGllIGtsZWluc3RlIEdyw7bDn2UgZGVyIFJlaWhlIGdpYnQgZXMga2VpbmUga2xlaW5lcmUgTmVubndlaXRlLiBXw6RobGUgZWluZSBncsO2w59lcmUgTmVubndlaXRlLCBkYW5uIGzDpHNzdCBzaWNoIOKAniR7ZXNjKGZsZCl94oCcIGZlc3RsZWdlbi48L3NwYW4+PC9kaXY+PC9kaXY+YDsKICAgICAgfQogICAgfQogICAgaCArPSAnPC9kaXY+JzsKICAgIGlmICh0ICYmIHQubGFlbmdlVmFyaWFudGUpIHsKICAgICAgaCArPSAnPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5TdHV0emVubMOkbmdlPC9zcGFuPjxkaXYgY2xhc3M9InNlZyI+JyArCiAgICAgICAgW1snS0snLCAna3VyeiAoS0spJ10sIFsnS0wnLCAnbGFuZyAoS0wpJ11dLm1hcCgoW3YsIGxdKSA9PiBgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS5sYWVuZ2VWYXJpYW50ZSA9PT0gdiA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0ibGFlbmdlIiBkYXRhLWlkPSIke3Z9Ij4ke2VzYyhsKX08L2J1dHRvbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgfQogICAgLy8gVENEIChkaWNrd2FuZGlnKTogS0VJTkUgS0svS0wtQXVzd2FobCAtIGRpZSBaZWlsZW4gdHJhZ2VuIGRpZSBmZXN0ZSBIb2VoZSBoID0gNjAgbW0KICAgIC8vIChXZWlzcy1TdGFuZGFyZCBsYXV0IEJlcm5kKS4gRGVyIFdlcnQga29tbXQgYXVzIGRlciBUYWJlbGxlLCBuaWNodCBhdXMgZGllc2VtIFRleHQuCiAgICAvLyBPRkZFTiAoQmVybmQpOiBvYiBkZXIgS3VuZGUgdm9uIGRlbiA2MCBtbSBhYndlaWNoZW4gZGFyZiwgaXN0IG5pY2h0IGdlc2FndCAtPiBiaXMgenVyCiAgICAvLyBLbGFlcnVuZyBmZXN0LCBLRUlORU4gQXVzd2FobHNjaGFsdGVyIGVyZmluZGVuLgogICAgY29uc3QgcndMID0gdCAmJiAhaXN0TnVyRmxhbnNjaCh0KSAmJiAhaXN0TWFzc2VGb2xndCh0KSA\\\/IHJvd0ZvcihzdGF0ZSkgOiBudWxsOwogICAgaWYgKHJ3TCAmJiByd0wuaG9laGUgIT0gbnVsbCkgewogICAgICBoICs9IGA8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPkjDtmhlPC9zcGFuPjxkaXYgY2xhc3M9Im5vdGUtcGxoIj4ke2ljKCdpbmZvJyl9PHNwYW4+PGI+JHtlc2MoZm10TU0ocndMLmhvZWhlKSl9IG1tPC9iPiDigJMgU3RhbmRhcmRow7ZoZSB2b24gRmlybWEgV2Vpc3MgZsO8ciBkaWNrd2FuZGlnZSBUYW5rc3R1dHplbi4KICAgICAgICBCcmF1Y2hzdCBkdSBlaW5lIGFuZGVyZSBIw7ZoZSwgZ2liIHNpZSBiaXR0ZSB1bnRlciDigJ5Tb25kZXJhYm1lc3N1bmcgYW5mcmFnZW7igJwgYW4uPC9zcGFuPjwvZGl2PmA7CiAgICB9CiAgICBpZiAodCAmJiB0LmlkID09PSAnVEMnKSB7CiAgICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+S2xhbW1lciBkZXIga29tcGxldHRlbiBWZXJiaW5kdW5nPC9zcGFuPjxkaXYgY2xhc3M9Im9wdHMiPicgKyAoRC5rbGFtbWVyVHlwZW4gfHwgW10pLm1hcChrID0+CiAgICAgICAgYDxidXR0b24gY2xhc3M9Im9wdCAke3N0YXRlLmtsYW1tZXJUeXAgPT09IGsuaWQgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9ImtsYW1tZXJ0eXAiIGRhdGEtaWQ9IiR7ay5pZH0iPjxzcGFuIGNsYXNzPSJ0Ij4ke2VzYyhrLmxhYmVsKX08L3NwYW4+PHNwYW4gY2xhc3M9ImQiPiR7ZXNjKGsuc3ViKX08L3NwYW4+PC9idXR0b24+YCkuam9pbignJykgKyAnPC9kaXY+JzsKICAgIH0KICAgIGlmICh0ICYmIHQuZXh6ZW50cmlzY2hXYWhsKSB7CiAgICAgIC8vIFIzLTI6IGtvbnplbnRyaXNjaCA9ICJGb3JtIFJLIiwgZXh6ZW50cmlzY2ggPSAiRm9ybSBSRSIuCiAgICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+QmF1Zm9ybTwvc3Bhbj48ZGl2IGNsYXNzPSJzZWciPicgKwogICAgICAgIFtbZmFsc2UsICdrb256ZW50cmlzY2ggwrcgRm9ybSBSSyddLCBbdHJ1ZSwgJ2V4emVudHJpc2NoIMK3IEZvcm0gUkUnXV0ubWFwKChbdiwgbF0pID0+IGA8YnV0dG9uIGNsYXNzPSIke3N0YXRlLmV4emVudHJpc2NoID09PSB2ID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJleHoiIGRhdGEtaWQ9IiR7dn0iPiR7ZXNjKGwpfTwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICB9CiAgICBpZiAodCAmJiB0LmZvcm1XYWhsKSB7CiAgICAgIC8vIFIzLTMvUjMtNDogRm9ybSBUIChhbGxlIEFiZ8OkbmdlIGdsZWljaCBsYW5nKSAvIEZvcm0gVEsgKER1cmNoZ2FuZyBnbGVpY2gsIEFiZ2FuZyBrdXJ6KS4KICAgICAgaCArPSAnPHNwYW4gY2xhc3M9ImZpZWxkLWxhYmVsIj5CYXVmb3JtPC9zcGFuPjxkaXYgY2xhc3M9InNlZyI+JyArCiAgICAgICAgW1snVCcsICdGb3JtIFQgwrcgQWJnw6RuZ2UgZ2xlaWNoIGxhbmcnXSwgWydUSycsICdGb3JtIFRLIMK3IEFiZ2FuZyBrdXJ6J11dLm1hcCgoW3YsIGxdKSA9PiBgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS5mb3JtVmFyaWFudGUgPT09IHYgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9ImZvcm12YXIiIGRhdGEtaWQ9IiR7dn0iPiR7ZXNjKGwpfTwvYnV0dG9uPmApLmpvaW4oJycpICsgJzwvZGl2Pic7CiAgICB9CiAgICBpZiAoaXNCZW5kKHQpKSBoICs9IGA8ZGl2IGNsYXNzPSJub3RlLW9rIj4ke2ljKCdjaGVjaycsICdpYycpfTxzcGFuPlIsIEwxLCBMMiB1bmQgTDMgc3RhbW1lbiBhdXMgZGVyIGF1c2dlZsO8bGx0ZW4gV2Vpc3MtTWHDn3RhYmVsbGUuIERpZSB2b24gRmlybWEgV2Vpc3Mga29ycmlnaWVydGVuIEROMjUtV2VydGUgc2luZCBlbnRoYWx0ZW4uPC9zcGFuPjwvZGl2PmA7CiAgICBlbHNlIGlmICh0ICYmIHQuaWQgPT09ICdSJykgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1vayI+JHtpYygnY2hlY2snLCAnaWMnKX08c3Bhbj5FcyB3ZXJkZW4gYXVzc2NobGllw59saWNoIGRpZSA3OSB2b24gRmlybWEgV2Vpc3MgZ2VsaWVmZXJ0ZW4gR3LDtsOfZW5wYWFyZSB1bmQgTC1XZXJ0ZSBhbmdlYm90ZW4uPC9zcGFuPjwvZGl2PmA7CiAgICBlbHNlIGlmICh0ICYmIHQuaWQgPT09ICdUUycpIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtb2siPiR7aWMoJ2NoZWNrJywgJ2ljJyl9PHNwYW4+QWxsZSBnbGVpY2h3ZWl0ZW4gVC1TdMO8Y2tlIChtZXRyaXNjaCwgSVNPIHVuZCBab2xsKSBzdGFtbWVuIGF1cyBkZXIgZ2VsaWVmZXJ0ZW4gV2Vpc3MtTWHDn3RhYmVsbGUuIEZvcm0gVEsgw7xiZXJuaW1tdCBkZW4gQWJnYW5nIGF1cyBkZXIgU3BhbHRlIEwxLjwvc3Bhbj48L2Rpdj5gOwogICAgZWxzZSBpZiAodCAmJiB0LmlkID09PSAnVFNSJykgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1vayI+JHtpYygnY2hlY2snLCAnaWMnKX08c3Bhbj5FcyB3ZXJkZW4gYXVzc2NobGllw59saWNoIGRpZSB2b24gRmlybWEgV2Vpc3MgZ2VsaWVmZXJ0ZW4gQWJ6d2VpZy1Lb21iaW5hdGlvbmVuIGFuZ2Vib3Rlbi4gRm9ybSBUSyDDvGJlcm5pbW10IGRlbiBBYmdhbmcgYXVzIGRlciBTcGFsdGUgTDEuPC9zcGFuPjwvZGl2PmA7CiAgICBoICs9IGA8YnV0dG9uIGNsYXNzPSJsaW5rYnRuIiBkYXRhLWFjdD0ic29uZGVyIj4ke2ljKCdwbHVzJywgJ2ljJyl9IFNvbmRlcmFibWVzc3VuZyBhbmZyYWdlbjwvYnV0dG9uPmA7CiAgICByZXR1cm4gaDsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclN0ZXA3KCkgewogICAgbGV0IGggPSBoZWFkKCdTY2hyaXR0IDcnLCAnTmFjaHdlaXNlICYgTWVuZ2UnLCAnWmVydGlmaWthdGUgenVidWNoZW4gdW5kIFN0w7xja3phaGwgd8OkaGxlbi4gQmVpZGVzIGdlaHQgbWl0IGluIGRpZSBBbmZyYWdlLicpOwogICAgY29uc3Qgc3RkID0gRC5wcmVpc2UubmFjaHdlaXNTdGFuZGFyZCB8fCBbXTsKICAgIGggKz0gJzxzcGFuIGNsYXNzPSJmaWVsZC1sYWJlbCI+TmFjaHdlaXNlIC8gWmVydGlmaWthdGU8L3NwYW4+PGRpdiBjbGFzcz0ib3B0cyI+JyArIEQubmFjaHdlaXNlLm1hcChudyA9PiB7CiAgICAgIGNvbnN0IG9uID0gc3RhdGUubmFjaHdlaXNlLmluZGV4T2YobncuaWQpID49IDAsIGlzU3RkID0gc3RkLmluZGV4T2YobncuaWQpID49IDA7CiAgICAgIC8vIEJlcm5kIExpbmtlciwgMDEuMDkuMjAyNjogQmVpbSBBRC1XMiBzb2xsIGltIEthZXN0Y2hlbiBzdGVoZW4sIGRhc3MgZGVyIEF1ZnByZWlzCiAgICAgIC8vIGplIENoYXJnZSBnaWx0IHVuZCBuaWNodCBqZSBTdHVlY2suIERlciBCZXRyYWcga29tbXQgYXVzIGRlbiBQcmVpc2RhdGVuLCBkYW1pdCBlcgogICAgICAvLyBuaWNodCBkb3BwZWx0IGdlcGZsZWd0IHdlcmRlbiBtdXNzIHVuZCBpbSBUZXh0IG5pZSB2ZXJhbHRldC4KICAgICAgY29uc3QgY2hhcmdlQmV0cmFnID0gaXN0Q2hhcmdlbk5hY2h3ZWlzKG53LmlkKSA\\\/IGNoYXJnZW5BdWZwcmVpc0Z1ZXIobncuaWQpIDogbnVsbDsKICAgICAgY29uc3QgY2hhcmdlWmVpbGUgPSBjaGFyZ2VCZXRyYWcgIT0gbnVsbAogICAgICAgID8gYDxzcGFuIGNsYXNzPSJkIj5BdWZwcmVpcyAke2V1cihjaGFyZ2VCZXRyYWcpfSDigqwgamUgQ2hhcmdlPC9zcGFuPmAKICAgICAgICA6ICcnOwogICAgICByZXR1cm4gYDxidXR0b24gY2xhc3M9Im9wdCAke29uID8gJ3NlbCcgOiAnJ30gJHtpc1N0ZCA\\\/ICdkaXNhYmxlZCcgOiAnJ30iIGRhdGEtYWN0PSJuYWNod2VpcyIgZGF0YS1pZD0iJHtudy5pZH0iICR7aXNTdGQgPyAnZGlzYWJsZWQnIDogJyd9PgogICAgICAgIDxzcGFuIGNsYXNzPSJ0Ij4ke29uID8gaWMoJ2NoZWNrJywgJ2ljJykgOiAnJ30ke2VzYyhuYWNod2Vpc0xhYmVsKG53KSl9JHtpc1N0ZCA\\\/ICc8c3BhbiBjbGFzcz0ibG9jayI+U3RhbmRhcmQ8L3NwYW4+JyA6ICcnfTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZCI+JHtlc2Mobncuc3ViKX08L3NwYW4+JHtjaGFyZ2VaZWlsZX08L2J1dHRvbj5gOwogICAgfSkuam9pbignJykgKyAnPC9kaXY+JzsKICAgIGggKz0gYDxkaXYgY2xhc3M9Im5vdGUtcGxoIj4ke2ljKCdpbmZvJyl9PHNwYW4+RGFzIEFibmFobWVwcsO8ZnpldWduaXMgMy4xIGlzdCBrb3N0ZW5sb3MuIDMuMSBuYWNoIEFELVcyLCBGZXJyaXQtTWVzc3VuZyB1bmQgUmEtTWVzc3Byb3Rva29sbCBnaWJ0IGVzIGdlZ2VuIE1laHJrb3N0ZW4uPC9zcGFuPjwvZGl2PmA7CiAgICBoICs9ICc8c3BhbiBjbGFzcz0iZmllbGQtbGFiZWwiPlN0w7xja3phaGw8L3NwYW4+PGRpdiBjbGFzcz0ic3RlcHBlciI+PGJ1dHRvbiBkYXRhLWFjdD0ibWVuZ2UtIiBhcmlhLWxhYmVsPSJ3ZW5pZ2VyIj7iiJI8L2J1dHRvbj4nICsKICAgICAgYDxpbnB1dCBpZD0id3otbWVuZ2UiIGRhdGEtcm9sZT0ibWVuZ2UiIGlucHV0bW9kZT0ibnVtZXJpYyIgdmFsdWU9IiR7c3RhdGUubWVuZ2V9Ii8+YCArICc8YnV0dG9uIGRhdGEtYWN0PSJtZW5nZSsiIGFyaWEtbGFiZWw9Im1laHIiPis8L2J1dHRvbj48L2Rpdj4nOwogICAgaCArPSAnPGRpdiBjbGFzcz0ic3RhZmZlbCI+JyArIG1lbmdlblNwcnVuZ21hcmtlbigpLm1hcChtID0+IGA8c3BhbiBjbGFzcz0icyAke3N0YXRlLm1lbmdlID49IG0gPyAnb24nIDogJyd9IiBkYXRhLWFjdD0ic3RhZmZlbCIgZGF0YS1hYj0iJHttfSI+YWIgJHttfTwvc3Bhbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgcmV0dXJuIGg7CiAgfQoKICBmdW5jdGlvbiBwb3NpdGlvbnNGb3JSZnEoKSB7CiAgICBjb25zdCBvdXQgPSBzdGF0ZS5wb3NpdGlvbmVuLnNsaWNlKCk7CiAgICBpZiAoc3RhdGUudHlwKSBvdXQucHVzaChzbmFwc2hvdCgpKTsKICAgIHJldHVybiBvdXQ7CiAgfQoKICAvKiBTdW1tZSB1ZWJlciBkaWUgUG9zaXRpb25zbGlzdGUuIEF1ZnN1bW1pZXJ0IHdpcmQgQVVTU0NITElFU1NMSUNIIHVlYmVyIFBvc2l0aW9uZW4gbWl0CiAgICogZWNodGVtIFByZWlzIChtb2RlICdsaXZlJywga2VpbiBQbGF0emhhbHRlcikuIEVpbmUgUG9zaXRpb24gImF1ZiBBbmZyYWdlIiBkYXJmIG5pZW1hbHMKICAgKiBzdGlsbHNjaHdlaWdlbmQgYWxzIDAgRVVSIGluIGVpbmUgU3VtbWUgbGF1ZmVuIC0gc2llIHdpcmQgZ2V0cmVubnQgZ2V6YWVobHQgdW5kIGltCiAgICogV2FyZW5rb3JiIHdpZSBpbiBkZXIgQW5mcmFnZS1NYWlsIGF1c2RydWVja2xpY2ggYXVzZ2V3aWVzZW4uIHN0dWVjayB6YWVobHQgYXVzIGRlbQogICAqIGdsZWljaGVuIEdydW5kIG51ciBkaWUgU3R1ZWNremFobGVuIGRlciBiZXByZWlzdGVuIFBvc2l0aW9uZW46IHNvbnN0IHN0dWVuZGUgdWViZXIgZGVyCiAgICogU3VtbWUgZWluZSBNZW5nZSwgZGllIHNpZSBnYXIgbmljaHQgYWJkZWNrdC4gKi8KICBmdW5jdGlvbiBjYXJ0U3VtbWFyeShwb3MpIHsKICAgIGxldCBzdW1tZSA9IDAsIG1pdFByZWlzID0gMCwgb2huZVByZWlzID0gMCwgc3R1ZWNrID0gMDsKICAgIChwb3MgfHwgW10pLmZvckVhY2gocHMgPT4gewogICAgICBjb25zdCBwID0gcHMucHJpY2U7CiAgICAgIGlmIChwICYmIHAubW9kZSA9PT0gJ2xpdmUnICYmICFwLnBsYXR6aGFsdGVyKSB7IHN1bW1lICs9IHAuZ2VzYW10OyBtaXRQcmVpcysrOyBzdHVlY2sgKz0gTnVtYmVyKHBzLm1lbmdlKSB8fCAwOyB9CiAgICAgIGVsc2Ugb2huZVByZWlzKys7CiAgICB9KTsKICAgIHJldHVybiB7IHN1bW1lLCBtaXRQcmVpcywgb2huZVByZWlzLCBzdHVlY2sgfTsKICB9CiAgY29uc3QgcG9zV29ydCA9IG4gPT4gbiA9PT0gMSA\\\/ICdQb3NpdGlvbicgOiAnUG9zaXRpb25lbic7CiAgZnVuY3Rpb24gc25hcHNob3QoKSB7CiAgICBjb25zdCBzID0gc3RhdGUsIHQgPSB0eXBPYmoocy50eXApLCBwaSA9IHByaWNlSW5mbyhzKTsKICAgIHJldHVybiB7IGFud2VuZHVuZzpzLmFud2VuZHVuZywgdHlwOnMudHlwLCBub3JtOnMubm9ybSwgcmVpaGU6cy5yZWloZSwgZ3JvZXNzZTpzLmdyb2Vzc2UsIGdyb2Vzc2UyOnMuZ3JvZXNzZTIsIGxhZW5nZVZhcmlhbnRlOnMubGFlbmdlVmFyaWFudGUsCiAgICAgIGNvbm5lY3ROb3JtOnMuY29ubmVjdE5vcm0sIGNvbm5lY3RMYWVuZ2U6cy5jb25uZWN0TGFlbmdlLCBjb25uZWN0QW5zY2hsdXNzOnMuY29ubmVjdEFuc2NobHVzcywKICAgICAgLy8gRmxhbnNjaC0vS2xhbW1lci1BbmdhYmVuIG1pdHNjaG5laWRlbiwgc29uc3QgZmVobGVuIHNpZSBpbiBXYXJlbmtvcmIgKyBSRlEtTWFpbC4KICAgICAgZmxhbnNjaDpzLmZsYW5zY2gsIGtsYW1tZXJUeXA6cy5rbGFtbWVyVHlwLCBrbGFtbWVyV2Vya3N0b2ZmOnMua2xhbW1lcldlcmtzdG9mZiwga2xhbW1lck11dHRlcjpzLmtsYW1tZXJNdXR0ZXIsCiAgICAgIGV4emVudHJpc2NoOnMuZXh6ZW50cmlzY2gsIGZvcm1WYXJpYW50ZTpzLmZvcm1WYXJpYW50ZSwgd2Vya3N0b2ZmOmVmZldlcmtzdG9mZihzKSwgb2JlcmZsYWVjaGU6cy5vYmVyZmxhZWNoZSwgZGljaHR1bmc6dCAmJiB0LmRpY2h0dW5nID8gcy5kaWNodHVuZyA6IG51bGwsCiAgICAgIG5hY2h3ZWlzZTpzLm5hY2h3ZWlzZS5zbGljZSgpLCBsaXBwZTpzLmxpcHBlLCBtZW5nZTpzLm1lbmdlLCB2aWV3OnMudmlldywKICAgICAgY29kZTp0eXBlY29kZShzKSwgY29uZmlndXJhdGlvbkNvZGU6dHlwZWNvZGUocyksIGFydGljbGVOdW1iZXI6YXJ0aWNsZU51bWJlcihzKSwgcHJpY2U6cGkgfTsKICB9CgogIGZ1bmN0aW9uIGFkZFBvc2l0aW9uKCkgewogICAgaWYgKCFzdGF0ZS50eXApIHJldHVybjsKICAgIHN0YXRlLnBvc2l0aW9uZW4ucHVzaChzbmFwc2hvdCgpKTsKICAgIC8vIERpZSBnZXNwZWljaGVydGUgUG9zaXRpb24gYmxlaWJ0IHVudmVyw6RuZGVydC4gRsO8ciBkaWUgbsOkY2hzdGUgUG9zaXRpb24gbXVzcwogICAgLy8gYmV3dXNzdCBlaW4gbmV1ZXMgQmF1dGVpbCBnZXfDpGhsdCB3ZXJkZW4sIGRhbWl0IGRlciBha3R1ZWxsZSBTdGFuZCBuaWNodCBkb3BwZWx0CiAgICAvLyBpbiBXYXJlbmtvcmIsIEFuZnJhZ2Ugb2RlciBQb3NpdGlvbnNsaW5rcyBsYW5kZXQuCiAgICBzdGF0ZS50eXAgPSBudWxsOyBzdGF0ZS5ncm9lc3NlID0gbnVsbDsgc3RhdGUuZ3JvZXNzZTIgPSBudWxsOwogICAgc3RhdGUuY29ubmVjdExhZW5nZSA9IG51bGw7IHN0YXRlLmZsYW5zY2ggPSBudWxsOyBzdGF0ZS5zdGVwID0gMzsKICAgIHJlbmRlckFsbCgpOyBzY3JvbGxUb3AoKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclN0ZXA4KCkgewogICAgY29uc3QgcG9zID0gcG9zaXRpb25zRm9yUmZxKCk7CiAgICBsZXQgaCA9IGhlYWQoJ1NjaHJpdHQgOCcsICdBbmZyYWdlIHp1c2FtbWVuc3RlbGxlbicsICdQcsO8ZmUgZGllIGJlbGVndGVuIEFuZ2FiZW4gdW5kIGVyZ8OkbnplIGRlaW5lbiBLb250YWt0LiBPZmZlbmUgV2VydGUgYmxlaWJlbiBkZXV0bGljaCBnZWtlbm56ZWljaG5ldC4nKTsKICAgIGNvbnN0IHN1bSA9IGNhcnRTdW1tYXJ5KHBvcyk7CiAgICBoICs9ICc8ZGl2IGNsYXNzPSJjYXJ0Ij4nICsgcG9zLm1hcCgocHMsIGkpID0+IHsKICAgICAgY29uc3QgdCA9IHR5cE9iaihwcy50eXApLCBsaXZlID0gcHMucHJpY2UubW9kZSA9PT0gJ2xpdmUnICYmICFwcy5wcmljZS5wbGF0emhhbHRlcjsKICAgICAgY29uc3QgcHIgPSBsaXZlID8gZXVyKHBzLnByaWNlLmdlc2FtdCkgKyAnIOKCrCcgOiAnYXVmIEFuZnJhZ2UnOwogICAgICAvLyBSZWNoZW53ZWcgZGVyIFplaWxlIG9mZmVubGVnZW46IG9obmUgIlN0dWVja3ByZWlzIHggTWVuZ2UiIGlzdCBpbSBXYXJlbmtvcmIgbmljaHQKICAgICAgLy8gbmFjaHZvbGx6aWVoYmFyLCB3aWUgZGVyIFplaWxlbmJldHJhZyB6dXN0YW5kZSBrb21tdCAtIHVuZCBkaWUgTWVuZ2Vuc3RhZmZlbCB3YWVyZQogICAgICAvLyB1bnNpY2h0YmFyIGluIGRlbiBCZXRyYWcgZWluZ2VyZWNobmV0LgogICAgICBjb25zdCByZWNobnVuZyA9IGxpdmUKICAgICAgICA\\\/ICcgwrcgJyArIGV1cihwcy5wcmljZS5zdHVlY2spICsgJyDigqwgLyBTdMO8Y2snICsgKHBzLnByaWNlLnJhYmF0dCA\\\/ICcgwrcg4oiSJyArIHBzLnByaWNlLnJhYmF0dCArICcgJSBhYiAnICsgcHMucHJpY2UuYWIgOiAnJykKICAgICAgICAgICsgKHBzLnByaWNlLmNoYXJnZUF1ZnByZWlzID8gJyDCtyBwbHVzICcgKyBldXIocHMucHJpY2UuY2hhcmdlQXVmcHJlaXMpICsgJyDigqwgamUgQ2hhcmdlJyA6ICcnKQogICAgICAgIDogJyc7CiAgICAgIGNvbnN0IGRlbEJ0biA9IGkgPCBzdGF0ZS5wb3NpdGlvbmVuLmxlbmd0aCA\\\/IGA8YnV0dG9uIGNsYXNzPSJkZWwiIGRhdGEtYWN0PSJkZWxwb3MiIGRhdGEtaT0iJHtpfSIgYXJpYS1sYWJlbD0iZW50ZmVybmVuIj7DlzwvYnV0dG9uPmAgOiAnJzsKICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJjaSI+PGRpdj48ZGl2IGNsYXNzPSJjb2RlIj4ke2VzYyhwcy5jb2RlKX08L2Rpdj48ZGl2IGNsYXNzPSJtZXRhIj4ke2VzYyh0ID8gdC5sYWJlbCA6ICcnKX0gwrcgJHtlc2MocHMubWVuZ2UpfSBTdMO8Y2ske2VzYyhyZWNobnVuZyl9PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0icHIiPiR7ZXNjKHByKX08L2Rpdj4ke2RlbEJ0bn08L2Rpdj5gOwogICAgfSkuam9pbignJykKICAgIC8vIE9obmUgZWluZSBlaW56aWdlIGJlcHJlaXN0ZSBQb3NpdGlvbiAob2VmZmVudGxpY2hlIFNlaXRlIG9obmUgUHJlaXNmcmVpZ2FiZSwgRElOIDExODY1LAogICAgLy8gUGxhdHpoYWx0ZXItTW9kdXMpIGVudGZhZWxsdCBkZXIgU3VtbWVuYmxvY2sga29tcGxldHQgLSBkb3J0IGdhZWJlIGVzIG5pY2h0cyB6dSBzdW1taWVyZW4KICAgIC8vIHVuZCAiR2VzYW10IDAsMDAg4oKsIiB3YWVyZSBzY2hsaWNodCBmYWxzY2guCiAgICArIChzdW0ubWl0UHJlaXMgPyBgPGRpdiBjbGFzcz0ic3VtIj4KICAgICAgJHtzdW0ub2huZVByZWlzID8gYDxkaXYgY2xhc3M9InNyIG9wZW4iPiR7aWMoJ2luZm8nKX08c3Bhbj4ke3N1bS5vaG5lUHJlaXN9ICR7cG9zV29ydChzdW0ub2huZVByZWlzKX0gYXVmIEFuZnJhZ2Ug4oCUIG5pY2h0IGluIGRlciBTdW1tZSBlbnRoYWx0ZW48L3NwYW4+PC9kaXY+YCA6ICcnfQogICAgICA8ZGl2IGNsYXNzPSJzciB0b3QiPjxkaXY+PGRpdiBjbGFzcz0idCI+R2VzYW10PC9kaXY+PGRpdiBjbGFzcz0icyI+JHtzdW0ubWl0UHJlaXN9ICR7cG9zV29ydChzdW0ubWl0UHJlaXMpfSDCtyAke3N1bS5zdHVlY2t9IFN0w7xjazwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InYgbW9ubyI+JHtldXIoc3VtLnN1bW1lKX0g4oKsPC9kaXY+PC9kaXY+CiAgICA8L2Rpdj5gIDogJycpICsgJzwvZGl2Pic7CiAgICBoICs9IGA8YnV0dG9uIGNsYXNzPSJsaW5rYnRuIiBkYXRhLWFjdD0iYWRkcG9zIj4ke2ljKCdwbHVzJywgJ2ljJyl9IFdlaXRlcmUgUG9zaXRpb24gaGluenVmw7xnZW48L2J1dHRvbj5gOwogICAgaCArPSBgPGZvcm0gaWQ9Ind6LWZvcm0iIGNsYXNzPSJmb3JtIiBub3ZhbGlkYXRlPgogICAgICA8ZGl2IGNsYXNzPSJmbGQiPjxsYWJlbD5GaXJtYSA8c3BhbiBjbGFzcz0icmVxIj4qPC9zcGFuPjwvbGFiZWw+PGlucHV0IGRhdGEtaz0iZmlybWEiIHZhbHVlPSIke2VzYyhzdGF0ZS5rb250YWt0LmZpcm1hKX0iIGF1dG9jb21wbGV0ZT0ib3JnYW5pemF0aW9uIi8+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZsZCI+PGxhYmVsPkFuc3ByZWNocGFydG5lciA8c3BhbiBjbGFzcz0icmVxIj4qPC9zcGFuPjwvbGFiZWw+PGlucHV0IGRhdGEtaz0ibmFtZSIgdmFsdWU9IiR7ZXNjKHN0YXRlLmtvbnRha3QubmFtZSl9IiBhdXRvY29tcGxldGU9Im5hbWUiLz48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZmxkIj48bGFiZWw+RS1NYWlsIDxzcGFuIGNsYXNzPSJyZXEiPio8L3NwYW4+PC9sYWJlbD48aW5wdXQgZGF0YS1rPSJlbWFpbCIgdHlwZT0iZW1haWwiIHZhbHVlPSIke2VzYyhzdGF0ZS5rb250YWt0LmVtYWlsKX0iIGF1dG9jb21wbGV0ZT0iZW1haWwiLz48c3BhbiBjbGFzcz0iZXJybXNnIiBpZD0id3otZXJyLWVtYWlsIj48L3NwYW4+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZsZCI+PGxhYmVsPlRlbGVmb248L2xhYmVsPjxpbnB1dCBkYXRhLWs9InRlbGVmb24iIHR5cGU9InRlbCIgdmFsdWU9IiR7ZXNjKHN0YXRlLmtvbnRha3QudGVsZWZvbil9IiBhdXRvY29tcGxldGU9InRlbCIvPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmbGQgZnVsbCI+PGxhYmVsPld1bnNjaHRlcm1pbiAvIFByb2pla3QgKG9wdGlvbmFsKTwvbGFiZWw+PGlucHV0IGRhdGEtaz0idGVybWluIiB2YWx1ZT0iJHtlc2Moc3RhdGUua29udGFrdC50ZXJtaW4pfSIvPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmbGQgZnVsbCI+PGxhYmVsPlNvbmRlcmFuZm9yZGVydW5nZW4gKG9wdGlvbmFsKTwvbGFiZWw+PHRleHRhcmVhIGRhdGEtaz0iZnJlaXRleHQiIHBsYWNlaG9sZGVyPSJ6LiBCLiBiZXNvbmRlcmUgVG9sZXJhbnplbiwgd2VpdGVyZSBaZXJ0aWZpa2F0ZSwgTGllZmVyYmVkaW5ndW5nZW4iPiR7ZXNjKHN0YXRlLmtvbnRha3QuZnJlaXRleHQpfTwvdGV4dGFyZWE+PC9kaXY+CiAgICA8L2Zvcm0+YDsKICAgIC8vIERpZSBQbGFuc2tpenplIHdpcmQgYXVzIGRlciBMaXZlLVplaWNobnVuZyBkZXMgYWt0dWVsbGVuIFN0YW5kZXMgZ2ViYXV0LiBGdWVyIGRpZQogICAgLy8gbnVyRmxhbnNjaC1UeXBlbiAoQmxpbmRkZWNrZWwvS2xhbW1lciwgQWJzY2huaXR0IEQpIGdpYnQgZXMgbm9jaCBrZWluZSBiZW1hc3N0ZQogICAgLy8gWmVpY2hudW5nIC0+IGJ1aWxkRGF0YXNoZWV0KCkgaGFldHRlIG5pY2h0cyB6dSByZW5kZXJuIHVuZCBkZXIgQnV0dG9uIGxpZWZlIGlucwogICAgLy8gTGVlcmUuIERlc2hhbGIgbnVyIGFuYmlldGVuLCB3ZW5uIHdpcmtsaWNoIGVpbmUgWmVpY2hudW5nIGV4aXN0aWVydC4KICAgIGNvbnN0IGhhdFNraXp6ZSA9ICEhKHN0YXRlLnR5cCAmJiBwYXJhbXNGb3Ioc3RhdGUpKTsKICAgIGggKz0gYDxkaXYgY2xhc3M9Im5hdiIgc3R5bGU9InBvc2l0aW9uOnN0YXRpYztib3gtc2hhZG93Om5vbmU7Ym9yZGVyOm5vbmU7cGFkZGluZzowO21hcmdpbi10b3A6NnB4Ij4KICAgICAgJHtoYXRTa2l6emUgPyBgPGJ1dHRvbiBjbGFzcz0iYnRuIGdob3N0IiBkYXRhLWFjdD0icGRmIj4ke2ljKCdwZGYnLCAnaWMnKX0gUGxhbnNraXp6ZSBhbHMgUERGPC9idXR0b24+YCA6ICcnfQogICAgICA8YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIGRhdGEtYWN0PSJzaGFyZSI+JHtpYygnc2hhcmUnLCAnaWMnKX0gJHtwb3MubGVuZ3RoID4gMSA\\\/ICdQb3NpdGlvbnNsaW5rcyBrb3BpZXJlbicgOiAnS29uZmlndXJhdGlvbiB0ZWlsZW4nfTwvYnV0dG9uPjwvZGl2PgogICAgJHtoYXRTa2l6emUgPyAnPHAgY2xhc3M9ImhlbHBlciI+VGlwcDogTGFkZSBkaWUgUGxhbnNraXp6ZSBhbHMgUERGIGhlcnVudGVyIHVuZCBow6RuZyBzaWUgZGVpbmVyIEFuZnJhZ2UtTWFpbCBhbiDigJQgRmlybWEgV2Vpc3MgYmVrb21tdCBkYW1pdCBkaXJla3QgZGllIGZlcnRpZ2UgU2tpenplIG1pdCBhbGxlbiBNYcOfZW4uPC9wPicgOiAnJ31gOwogICAgLy8gRGVyIFNhdHogIk1hw59lIERJTiAzMjY3NiAuLi4gc2luZCBmaW5hbCIgZ2lsdCBOSUNIVCwgc29iYWxkIGVpbmUgUG9zaXRpb24gZWluZW4KICAgIC8vIG1hc3NlRm9sZ3QtVHlwIChDRi9DRkkpIGVudGhhZWx0IC0gZnVlciBkaWUgZ2lidCBlcyB1ZWJlcmhhdXB0IGtlaW5lIE1hc3NlLiBTb25zdAogICAgLy8gc3R1ZW5kZSBoaWVyICJmaW5hbCIgdW5kIHp3ZWkgWmVudGltZXRlciB3ZWl0ZXIgb2JlbiAiTWHDn2UgZm9sZ2VuIi4gRGVzaGFsYiBkZW4KICAgIC8vIFVtZmFuZyBkZXIgRmluYWwtQXVzc2FnZSBhbiBkZW4gdGF0c2FlY2hsaWNoZW4gUG9zaXRpb25lbiBhdXNyaWNodGVuLgogICAgLy8gU29iYWxkIG9iZW4gZWluIEdlc2FtdGJldHJhZyBzdGVodCwgZGFyZiBoaWVyIG5pY2h0IG1laHIgIlByZWlzZSB3ZXJkZW4gaW5kaXZpZHVlbGwKICAgIC8vIGFuZ2Vib3RlbiIgc3RlaGVuIC0gZGFzIHdpZGVyc3ByYWVjaGUgZGVyIFN1bW1lIHp3ZWkgWmVudGltZXRlciBkYXJ1ZWJlci4gRGVyIFNhdHoKICAgIC8vIGJsZWlidCBudXIgZnVlciBkZW4gRmFsbCBvaG5lIGplZGVuIGJlbGVndGVuIFByZWlzLgogICAgaCArPSBgPGRpdiBjbGFzcz0ibm90ZS1wbGgiPiR7aWMoJ2luZm8nKX08c3Bhbj4ke3N1bS5taXRQcmVpcwogICAgICA\\\/ICdEaWUgZ2V6ZWlndGVuIEJldHLDpGdlIHN0YW1tZW4gYXVzIGRlciBoaW50ZXJsZWd0ZW4gUHJlaXNsaXN0ZSB2b24gRmlybWEgV2Vpc3MgdW5kIHdlcmRlbiBtaXQgZGVtIEFuZ2Vib3QgdmVyYmluZGxpY2guJwogICAgICA6ICdQcmVpc2Ugd2VyZGVuIGluZGl2aWR1ZWxsIGFuZ2Vib3Rlbi4nfSBOaWNodCBiZWxlZ3RlIE1hw59lIG9kZXIgQXJ0aWtlbG51bW1lcm4gZXJnw6RuenQgRmlybWEgV2Vpc3MgaW0gQW5nZWJvdDsgd2lkZXJzcHLDvGNobGljaGUgb2RlciBuaWNodCBnZWxpZWZlcnRlIEJlcmVpY2hlIGJsZWliZW4gZ2VzcGVycnQgdW5kIHdlcmRlbiBuaWNodCBnZXNjaMOkdHp0Ljwvc3Bhbj48L2Rpdj5gOwogICAgcmV0dXJuIGg7CiAgfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByZXZpZXcgKi8KICBsZXQgcHJpY2VDdXIgPSBudWxsLCBwcmljZVJBRiA9IG51bGw7CiAgZnVuY3Rpb24gYW5pbWF0ZVByaWNlKGVsLCB0bykgewogICAgaWYgKCFlbCkgcmV0dXJuOyBjYW5jZWxBbmltYXRpb25GcmFtZShwcmljZVJBRik7CiAgICAvLyBCZWltIGVyc3RlbiBSZW5kZXJuIGRlbiBlY2h0ZW4gQmV0cmFnIHNvZm9ydCBhbnplaWdlbi4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lCiAgICAvLyB3aXJkIGluIG5vY2ggbmljaHQgc2ljaHRiYXJlbiBpRnJhbWVzIGdlZHJvc3NlbHQ7IG1pdCBTdGFydHdlcnQgMCwwMCBzdGFuZAogICAgLy8gc29uc3QgaW0gendlaXRlbiBQcmVpc2JlcmVpY2ggdm9yIGRlbSBTY3JvbGxlbiBlaW4gZmFsc2NoZXIgU3TDvGNrcHJlaXMuCiAgICBpZiAocHJpY2VDdXIgPT0gbnVsbCkgewogICAgICBlbC50ZXh0Q29udGVudCA9IGV1cih0byk7CiAgICAgIHByaWNlQ3VyID0gdG87CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGZyb20gPSBwcmljZUN1ciwgdDAgPSBwZXJmb3JtYW5jZS5ub3coKSwgZHVyID0gMzgwOwogICAgKGZ1bmN0aW9uIHRpY2sodCkgewogICAgICBjb25zdCBrID0gTWF0aC5taW4oMSwgKHQgLSB0MCkgLyBkdXIpLCBlID0gMSAtIE1hdGgucG93KDEgLSBrLCAzKSwgdiA9IGZyb20gKyAodG8gLSBmcm9tKSAqIGU7CiAgICAgIGVsLnRleHRDb250ZW50ID0gZXVyKHYpOwogICAgICBpZiAoayA8IDEpIHByaWNlUkFGID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOyBlbHNlIHByaWNlQ3VyID0gdG87CiAgICB9KSh0MCk7CiAgfQoKICAvKiAiWmVpY2hudW5nIGZvbGd0Ii1LYXJ0ZSBmdWVyIGFsbGUgVHlwZW4gb2huZSAodm9sbHN0YWVuZGlnZSkgTWFzc3F1ZWxsZS4KICAgKiBad2VpIEZhZWxsZSwgYmV3dXNzdCBnZXRyZW5udDoKICAgKiAgYSkgbnVyRmxhbnNjaCAoQmxpbmRkZWNrZWwvS2xhbW1lciwgQWJzY2huaXR0IEQpOiBEZXIgRmxhbnNjaC3DmCBJU1QgYmVsZWd0LCBkZXIgUmVzdAogICAqICAgICBmZWhsdCAtPiBLYXJ0ZSB6ZWlndCBkZW4gRmxhbnNjaC3DmCArIHdhcyBzb25zdCBnZXNpY2hlcnQgaXN0LCBhbGxlcyBhbmRlcmUgImZvbGd0Ii4KICAgKiAgYikgbWFzc2VGb2xndCAoQ0YvQ0ZJLCBBYnNjaG5pdHQgRyk6IEVzIGlzdCBHQVIgTklDSFRTIGJlbGVndCAtIGtlaW4gRmxhbnNjaC3DmCwga2VpbmUKICAgKiAgICAgTmVubndlaXRlLiBEZXNoYWxiIGhpZXIgS0VJTiBmbGFuc2NoRm9yKCk6IGRhcyB3dWVyZGUgc3R1bXBmIGRpZSBlcnN0ZSBGbGFuc2NoLQogICAqICAgICBncm9lc3NlICjijIAyNSkgYXVzIGRlciBMaXN0ZSB6aWVoZW4gdW5kIGFscyBDRi1NYXNzIGFuemVpZ2VuLiBHZXplaWd0IHdpcmQgbnVyLCB3YXMKICAgKiAgICAgZGVyIEt1bmRlIHNlbGJzdCBnZXdhZWhsdCBoYXQgKFdlcmtzdG9mZi9PYmVyZmxhZWNoZS9EaWNodHVuZykuCiAgICogSW4gYmVpZGVuIEZhZWxsZW4gYmV3dXNzdCBLRUlORSBTVkctWmVpY2hudW5nOiBkcmF3LmpzIHd1ZXJkZSBvaG5lIE1hc3NlIHN0aWxsIGF1ZiBzZWluZQogICAqIERlZmF1bHRzICjijIAyNSAvIHMxLDUgLyBMMTAwKSB6dXJ1ZWNrZmFsbGVuIHVuZCBkZW0gS3VuZGVuIGVyZnVuZGVuZSBNYXNzZSB6ZWlnZW4uICovCiAgZnVuY3Rpb24gemVpY2hudW5nRm9sZ3RDYXJkKHQpIHsKICAgIGNvbnN0IG1hc3NlRm9sZ3QgPSBpc3RNYXNzZUZvbGd0KHQpOwogICAgLy8gRWluZW4gRmxhbnNjaC3DmCBnaWJ0IGVzIE5VUiBiZWkgZGVuIG51ckZsYW5zY2gtVHlwZW4gKEJsaW5kZGVja2VsL0tsYW1tZXIpLiBGdWVyIGRpZQogICAgLy8gUmVkdXppZXJ1bmcgKE5hY2hwcnVlZi1CZWZ1bmQgYSkgd2FlcmUgZmxhbnNjaEZvcihzdGF0ZSkgZGllIGVyc3RlIEZsYW5zY2hncm9lc3NlIGRlcgogICAgLy8gTGlzdGUgKOKMgDI1KSAtIGVpbiBlcmZ1bmRlbmVzIE1hc3MuIERlc2hhbGIgaGllciBnZXppZWx0IG51ciBiZWkgbnVyRmxhbnNjaCB6aWVoZW4uCiAgICBjb25zdCBmID0gaXN0TnVyRmxhbnNjaCh0KSA\\\/IGZsYW5zY2hGb3Ioc3RhdGUpIDogbnVsbDsKICAgIGNvbnN0IHJvd3MgPSBbXTsKICAgIGlmIChmKSByb3dzLnB1c2goWydGbGFuc2NoLeKMgCcsIGYubGFiZWwgKyAnIG1tJ10pOwogICAgaWYgKGlzdEtsYW1tZXIodCkpIHsKICAgICAgY29uc3Qga3QgPSBrbGFtbWVyVHlwT2JqKHN0YXRlLmtsYW1tZXJUeXApOyBpZiAoa3QpIHJvd3MucHVzaChbJ0tsYW1tZXJ0eXAnLCBrdC5sYWJlbCArICcg4oCTICcgKyBrdC5zdWJdKTsKICAgICAgaWYgKGYgJiYgZi5rbGFtbWVyQSkgcm93cy5wdXNoKFsnTWHDnyBBJywgZi5rbGFtbWVyQVtzdGF0ZS5rbGFtbWVyVHlwXSA9PSBudWxsID8gJ2F1ZiBBbmZyYWdlJyA6IGZtdE1NKGYua2xhbW1lckFbc3RhdGUua2xhbW1lclR5cF0pICsgJyBtbSddKTsKICAgICAgY29uc3QgbXUgPSAoRC5rbGFtbWVyTXV0dGVybiB8fCBbXSkuZmluZChtID0+IG0uaWQgPT09IHN0YXRlLmtsYW1tZXJNdXR0ZXIpOyBpZiAobXUpIHJvd3MucHVzaChbJ011dHRlcicsIG11LmxhYmVsXSk7CiAgICB9CiAgICAvLyBEZWNrZWxzdGFlcmtlIEwgaXN0IHNlaXQgUnVuZGUgNSBiZWxlZ3Q6IERpZSBXZXJ0ZSBpbiBkYXRhLmpzIChCTElORERFQ0tFTF9MKQogICAgLy8gc3RhbW1lbiBhdXMgZGVyIFdlaXNzLURhdGVpICJNYXNzZSBLbGVtbWVuLCBCbGluZGRlY2tlbC54bHN4IiAoMjIuMDcuMjAyNikgdW5kCiAgICAvLyBkdWVyZmVuIGRlbSBLdW5kZW4gZ2V6ZWlndCB3ZXJkZW4uIG51bGwgKEZsYW5zY2ggMjg2LDEvMzE5LzMzOCkgYmVkZXV0ZXQKICAgIC8vICJhdWYgQW5mcmFnZSIgLSBkZXIgbnVsbC1GYWxsIHN0ZXVlcnQgYXVjaCBpbiByZW5kZXJTdGVwNEZsYW5zY2ggZGllIEtlbm56ZWljaG51bmcKICAgIC8vICJ3ZWl0ZXJlIE1hw59lIGZvbGdlbiIuCiAgICBpZiAodC5zdmdUeXBlID09PSAnYmxpbmRkZWNrZWwnKSByb3dzLnB1c2goWydEZWNrZWxzdMOkcmtlIEwnLCBmICYmIGYuYmxpbmRUaGsgIT0gbnVsbCA\\\/IGZtdE1NKGYuYmxpbmRUaGspICsgJyBtbScgOiAnYXVmIEFuZnJhZ2UnXSk7CiAgICAvLyBSZWR1emllcnVuZyBvaG5lIHp3ZWl0ZW4gw5ggKE5hY2hwcnVlZi1CZWZ1bmQgYSk6IGRlciBFUlNURSDDmCBpc3QgYmVsZWd0IChyZWloZStncm9lc3NlKSwKICAgIC8vIG51ciBkZXIgw5gsIGF1ZiBkZW4gcmVkdXppZXJ0IHdpcmQsIGZlaGx0LiBFaHJsaWNoIHplaWdlbiwgd2FzIGRhIGlzdCAtIGRlciB6d2VpdGUgw5gKICAgIC8vIHN0ZWh0IGF1ZiAiZm9sZ3QiLCBzdGF0dCBpaG4gYXVzIGRlbSBGYWt0b3IgMC42NiB6dSBlcmZpbmRlbi4KICAgIGlmICh0LnN2Z1R5cGUgPT09ICdyZWR1emllcnVuZycpIHsKICAgICAgY29uc3QgcndSID0gcm93Rm9yKHN0YXRlKTsKICAgICAgaWYgKHJ3Uikgcm93cy5wdXNoKFsnUmVkdXppZXJ0IHZvbicsIGxibChyd1IpICsgJyDCtyDijIAgJyArIGZtdE1NKG9kT2YocndSKSkgKyAnIG1tJ10pOwogICAgICByb3dzLnB1c2goWydSZWR1emllcnQgYXVmJywgJ2ZvbGd0J10pOwogICAgfQogICAgaWYgKGlzdEZvcm1PaG5lTWFzc2Uoc3RhdGUpKSByb3dzLnB1c2goWydCYXVmb3JtJywgJ0Zvcm0gVEsgwrcgTDEgbmljaHQgYmVtYcOfdCddKTsKICAgIC8vIERpY2h0dW5ncy1BdcOfZW4t4oyAIGhhZW5ndCBhbSBGbGFuc2NoLcOYLiBCZWkgbWFzc2VGb2xndCBnaWJ0IGVzIGtlaW5lbiAtPiBaZWlsZSB3ZWdsYXNzZW4sCiAgICAvLyBzdGF0dCBlaW4gImZvbGd0IiB6dSB6ZWlnZW4sIGRhcyBzbyB0dXQsIGFscyBzZWkgZGllIEdyb2Vzc2Ugc2Nob24gZWluZ2VncmVuenQuCiAgICBpZiAodC5kaWNodHVuZyAmJiAhbWFzc2VGb2xndCkgcm93cy5wdXNoKFsnRGljaHR1bmdzLUF1w59lbi3ijIAnLCBmICYmIGYuZ2Fza2V0T0QgIT0gbnVsbCA\\\/IGZtdE1NKGYuZ2Fza2V0T0QpICsgJyBtbScgOiAnZm9sZ3QnXSk7CiAgICBpZiAobWFzc2VGb2xndCkgcm93cy5wdXNoKFsnTWHDn2UnLCAnZm9sZ2VuJ10pOwogICAgLy8gQmVpbSBCYXV0ZWlsICJEaWNodHVuZyIgZ2lidCBlcyBrZWluZW4gRWRlbHN0YWhsLVdlcmtzdG9mZiAoQmVybmQgMTEuMDguMjAyNikgLQogICAgLy8gZG9ydCBzdGVodCBzdGF0dGRlc3NlbiBkZXIgRGljaHR1bmdzd2Vya3N0b2ZmLgogICAgaWYgKGlzdERpY2h0dW5nQmF1dGVpbCh0KSkgewogICAgICBjb25zdCBkRCA9IGRpY2h0T2JqKHN0YXRlLmRpY2h0dW5nKTsKICAgICAgaWYgKGREKSByb3dzLnB1c2goWydEaWNodHVuZycsIGRELmxhYmVsXSk7CiAgICB9IGVsc2UgewogICAgICByb3dzLnB1c2goWydXZXJrc3RvZmYnLCBlZmZXZXJrc3RvZmYoc3RhdGUpIHx8ICdmb2xndCddKTsKICAgIH0KICAgIGNvbnN0IGxpID0gcm93cy5tYXAoKFtrLCB2XSkgPT4gYDxkaXYgY2xhc3M9ImNoaXAiPjxiPiR7ZXNjKGspfTwvYj4ke2VzYyh2KX08L2Rpdj5gKS5qb2luKCcnKTsKICAgIGNvbnN0IGhpbnQgPSBtYXNzZUZvbGd0CiAgICAgID8gYDxiPk1hw59lIHVuZCBaZWljaG51bmcgZm9sZ2VuLjwvYj4gRsO8ciAke2VzYyh0LmxhYmVsKX0gbGllZ3QgdW5zIG5vY2gga2VpbiBmcmVpZ2VnZWJlbmVzCiAgICAgICAgIERhdGVuYmxhdHQgdm9uIEZpcm1hIFdlaXNzIHZvci4gU29iYWxkIGVzIGRhIGlzdCwgw7xiZXJuZWhtZW4gd2lyIGRpZSBNYcOfZSAxOjEgdW5kIGRpZSBaZWljaG51bmcKICAgICAgICAgYmF1dCBzaWNoIGhpZXIgYXVmIOKAkyBiaXMgZGFoaW4gemVpZ2VuIHdpciBsaWViZXIgbmljaHRzIGFscyBnZXNjaMOkdHp0ZSBNYcOfZS5gCiAgICAgIDogaXN0TnVyRmxhbnNjaCh0KQogICAgICAvLyBEaWVzZSBLYXJ0ZSBlcnNjaGVpbnQgbnVyLCB3ZW5uIHBhcmFtc0ZvcigpIGtlaW4gYmVsZWd0ZXMgTWFzcyBnZWZ1bmRlbiBoYXQuCiAgICAgIC8vIFNlaXQgZGVtIEJsaW5kZGVja2VsLU5hY2h0cmFnIHZvbSAyNy4wNy4yMDI2IHRyYWVndCBqZWRlciBGbGFuc2NoLcOYIGVpbmUKICAgICAgLy8gRGVja2Vsc3RhZXJrZSBMLCB1bmQgc2VpdCBCZXJuZHMgTmFjaHRyYWcgdm9tIDExLjA4LjIwMjYgKDI4NiwxIC8gMzE5IC8gMzM4KQogICAgICAvLyBhdWNoIGplZGVyIGVpbiBNYXNzIEEuIEZ1ZXIgZGllIG51ckZsYW5zY2gtVHlwZW4gZ3JlaWZ0IGRpZSBLYXJ0ZSBkYW1pdAogICAgICAvLyBha3R1ZWxsIG5pcmdlbmRzIG1laHIgLSBkZXIgVGV4dCBibGVpYnQgYWxzIE5ldHogZnVlciBrdWVuZnRpZ2UgR3JvZXNzZW4KICAgICAgLy8gc3RlaGVuLCBuZW5udCBhYmVyIGtlaW5lIGtvbmtyZXRlbiBGbGFuc2NoLcOYIG1laHIsIGRpZSBsYWVuZ3N0IGJlbGVndCBzaW5kLgogICAgICA\\\/IChpc3RLbGFtbWVyKHQpCiAgICAgICAgPyBgPGI+S2xhbW1lciBpbiBkaWVzZXIgR3LDtsOfZSBub2NoIG5pY2h0IGJlbWHDn3QuPC9iPiBGw7xyIEZsYW5zY2gt4oyACiAgICAgICAgICAgJHtlc2MoZiA\\\/IGYubGFiZWwgOiAnJyl9IG1tIGxpZWd0IHVucyBmw7xyIGRpZSBLbGFtbWVybiBrZWluIE1hw58gQSB2b3Ig4oCTCiAgICAgICAgICAgZG9ydCBibGVpYmVuIGRpZSBNYcOfZSBhdWYgQW5mcmFnZS4gQW5mcmFnZW4gbMOkc3N0IHNpY2ggZGllIEdyw7bDn2UgdHJvdHpkZW0uYAogICAgICAgIDogYDxiPk1hw59lIGZvbGdlbi48L2I+IEbDvHIgRmxhbnNjaC3ijIAgJHtlc2MoZiA\\\/IGYubGFiZWwgOiAnJyl9IG1tIGxpZWd0IHVucyBiaXNoZXIgbnVyIGRlcgogICAgICAgICAgIEZsYW5zY2gtRHVyY2htZXNzZXIgdm9yIOKAkyBkaWUgw7xicmlnZW4gTWHDn2UgcmVpY2h0IEZpcm1hIFdlaXNzIG5hY2guYCkKICAgICAgOiBpc3RGb3JtT2huZU1hc3NlKHN0YXRlKQogICAgICA\\\/IGA8Yj5Gb3JtIFRLIGlzdCBpbiBkaWVzZXIgR3LDtsOfZSBub2NoIG9mZmVuLjwvYj4gSW4gZGVyIFdlaXNzLU1hw590YWJlbGxlIHN0ZWh0IGJlaQogICAgICAgICBMMSBmw7xyIGRpZXNlIEdyw7bDn2UgZWluIFN0cmljaCwgZGFyYXVzIGzDpHNzdCBzaWNoIGRlciBrdXJ6ZSBBYmdhbmcgbmljaHQgYmVtYcOfZW4uCiAgICAgICAgIFfDpGhsZSBGb3JtIFQg4oCTIG9kZXIgZnJhZyBkZW4gQWJnYW5nIMO8YmVyIOKAnlNvbmRlcmFibWVzc3VuZyBhbmZyYWdlbuKAnCBhbi5gCiAgICAgIDogYDxiPlp3ZWl0ZXIgRHVyY2htZXNzZXIgZmVobHQuPC9iPiBGw7xyIGRpZSAke2VzYyh0LmxhYmVsKX0gaXN0IG5vY2ggbmljaHQgZ2V3w6RobHQsIGF1ZgogICAgICAgICB3ZWxjaGUgR3LDtsOfZSByZWR1emllcnQgd2lyZC4gU29iYWxkIGRlciB6d2VpdGUgRHVyY2htZXNzZXIgZmVzdHN0ZWh0LCBiYXV0IHNpY2ggZGllCiAgICAgICAgIGJlbWHDn3RlIFplaWNobnVuZyBoaWVyIGF1ZiDigJMgYmlzIGRhaGluIHplaWdlbiB3aXIgbGllYmVyIG5pY2h0cyBhbHMgZWluZSBnZXNjaMOkdHp0ZSBaYWhsLmA7CiAgICByZXR1cm4gYDxkaXYgY2xhc3M9InB2LWhlYWQiPjxzcGFuIGNsYXNzPSJsYmwiPlZvcnNjaGF1PC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwdi1zdGFnZSBwdi1zYW1wbGUiIHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjE0cHg7cGFkZGluZzoyNHB4Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJwdi1jaGlwcyIgc3R5bGU9Imp1c3RpZnktY29udGVudDpjZW50ZXIiPiR7bGl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icHYtc2FtcGxlLWhpbnQiPiR7aWMoJ2RyYXcnLCAnaWMnKX08c3Bhbj4ke2hpbnR9PC9zcGFuPjwvZGl2PgogICAgICA8L2Rpdj5gOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyUHJldmlldygpIHsKICAgIGNvbnN0IGJveCA9ICQoJyN3ei1wcmV2aWV3Jyk7CiAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7CiAgICBjb25zdCBwID0gc3RhdGUudHlwID8gcGFyYW1zRm9yKHN0YXRlKSA6IG51bGw7CiAgICBjb25zdCBwaSA9IHByaWNlSW5mbyhzdGF0ZSk7CiAgICBsZXQgc3RhZ2U7CiAgICAvLyBtYXNzZUZvbGd0IChDRi9DRkkpIE1VU1MgaGllciBtaXQgcmVpbjogcGFyYW1zRm9yKCkgbGllZmVydCBudWxsLCBzb25zdCBsaWVmZSBkaWUKICAgIC8vIFZvcnNjaGF1IGluIGRlbiBlbHNlLVp3ZWlnIHVudGVuIHVuZCB3dWVyZGUgZGllICJCZWlzcGllbC1EYXJzdGVsbHVuZyIgcmVuZGVybiAtCiAgICAvLyBlaW4gZmVydGlnIGJlbWFzc3RlcyBGaXR0aW5nICjijIAyOcOXMSw1IC8gRmxhbnNjaCA1MCw1KS4gR2VuYXUgZGllIFphaGxlbiwgZGllIGVzCiAgICAvLyBmdWVyIENGL0NGSSBuaWNodCBnaWJ0LgogICAgLy8gbnVyRmxhbnNjaCBtaXQgYmVsZWd0ZW4gTWFzc2VuIChwYXJhbXMgdm9yaGFuZGVuKSBiZWtvbW10IHNlaXQgUnVuZGUgNyAoVy0wNTkpCiAgICAvLyBkaWUgZWNodGUgWmVpY2hudW5nOyBudXIgb2huZSBiZWxlZ3RlIE1hc3NlIGJsZWlidCBkaWUgIlplaWNobnVuZyBmb2xndCItS2FydGUuCiAgICBpZiAoc3RhdGUudHlwICYmICgoaXN0TnVyRmxhbnNjaCh0KSAmJiAhcCkgfHwgaXN0TWFzc2VGb2xndCh0KSB8fCBpc3RSZWR1emllcnVuZ09obmVad2VpdE9EKHN0YXRlKSB8fCBpc3RGb3JtT2huZU1hc3NlKHN0YXRlKSkpIHsgc3RhZ2UgPSB6ZWljaG51bmdGb2xndENhcmQodCk7IH0KICAgIGVsc2UgaWYgKHApIHsKICAgICAgY29uc3QgUiA9IHdpbmRvdy5XZWlzc0ZpdHRpbmdSZW5kZXI7CiAgICAgIGNvbnN0IHN2Z1N0ciA9IChzdGF0ZS52aWV3ID09PSAnYW5zaWNodCcgJiYgUikKICAgICAgICA\\\/IFIucmVuZGVyRml0dGluZyhwLCB7IHdpZHRoOiA3NjAsIGhlaWdodDogNDQwIH0pCiAgICAgICAgOiBTVkcucmVuZGVyRml0dGluZyhwLCB7IHdpZHRoOiA3NjAsIGhlaWdodDogNDQwIH0pOwogICAgICBjb25zdCB0b2dnbGUgPSBgPGRpdiBjbGFzcz0icHYtaGVhZCI+PHNwYW4gY2xhc3M9ImxibCI+Vm9yc2NoYXU8L3NwYW4+CiAgICAgICAgPGRpdiBjbGFzcz0icHYtYWN0aW9ucyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwdi10b2dnbGUiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJEYXJzdGVsbHVuZyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IiR7c3RhdGUudmlldyA9PT0gJ3plaWNobnVuZycgPyAnc2VsJyA6ICcnfSIgZGF0YS1hY3Q9InZpZXciIGRhdGEtaWQ9InplaWNobnVuZyI+WmVpY2hudW5nPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IiR7c3RhdGUudmlldyA9PT0gJ2Fuc2ljaHQnID8gJ3NlbCcgOiAnJ30iIGRhdGEtYWN0PSJ2aWV3IiBkYXRhLWlkPSJhbnNpY2h0Ij5BbnNpY2h0PC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9InB2LWZzYnRuIiBkYXRhLWFjdD0iZnMtb3BlbiIgYXJpYS1sYWJlbD0iVm9sbGJpbGQgw7ZmZm5lbiIgdGl0bGU9IlZvbGxiaWxkICsgWm9vbSI+JHtpYygnZXhwYW5kJywgJ2ljJyl9PC9idXR0b24+CiAgICAgICAgPC9kaXY+PC9kaXY+YDsKICAgICAgc3RhZ2UgPSB0b2dnbGUgKyBgPGRpdiBjbGFzcz0icHYtc3RhZ2UiIGlkPSJ3ei1zdGFnZSI+JHtzdmdTdHJ9PC9kaXY+YDsKICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBSMCA9IHdpbmRvdy5XZWlzc0ZpdHRpbmdSZW5kZXI7CiAgICAgIGNvbnN0IHNhbXBsZSA9IFIwID8gUjAucmVuZGVyRml0dGluZyh7IHR5cGU6J2NsYW1wc3R1dHplbicsIGRuOjI1LCBvZDoyOSwgd2FsbDoxLjUsIGxlbmd0aDozNiwgZmxhbmdlT2Q6NTAuNSwgZ2Fza2V0TWF0ZXJpYWw6J0VQRE0nLCBzdXJmYWNlOidIMycsIHdlcmtzdG9mZjonMS40NDA0JyB9LCB7IHdpZHRoOjc2MCwgaGVpZ2h0OjQ0MCB9KSA6ICcnOwogICAgICBzdGFnZSA9IGA8ZGl2IGNsYXNzPSJwdi1zdGFnZSBwdi1zYW1wbGUiPiR7c2FtcGxlfQogICAgICAgIDxkaXYgY2xhc3M9InB2LXNhbXBsZS1oaW50Ij4ke2ljKCdkcmF3JywgJ2ljJyl9PHNwYW4+PGI+QmVpc3BpZWwtRGFyc3RlbGx1bmcuPC9iPiBXw6RobGUgbGlua3MgZGllIEFud2VuZHVuZyDigJQgZGFubiBiYXV0IHNpY2ggaGllciBkZWluIEZpdHRpbmcgbGl2ZSBtaXQgWmVpY2hudW5nIHVuZCBiZWxlZ3RlbiBNYcOfZW4gYXVmLjwvc3Bhbj48L2Rpdj48L2Rpdj5gOwogICAgfQoKICAgIGxldCBwcmljZUh0bWwgPSAnJzsKICAgIGlmIChzdGF0ZS50eXApIHsKICAgICAgaWYgKHBpLm1vZGUgPT09ICdhbmZyYWdlJykgewogICAgICAgIC8vIEJlZ3J1ZW5kdW5nIGtvbW10IGF1cyBwcmljZUluZm8oKSAtIGplIG5hY2ggRmFsbCBESU4gMTE4NjUsIGZlaGxlbmRlciBHcnVuZHByZWlzCiAgICAgICAgLy8gb2RlciBudXJGbGFuc2NoLVR5cCBvaG5lIFByZWlzc3RhZmZlbCBuYWNoIEZsYW5zY2gtw5guCiAgICAgICAgcHJpY2VIdG1sID0gYDxkaXYgY2xhc3M9InB2LXByaWNlIGFuZnJhZ2UiPjxkaXY+PGRpdiBjbGFzcz0iYW10Ij5BdWYgQW5mcmFnZTwvZGl2PjxkaXYgY2xhc3M9InN1YiI+JHtlc2MocGkuZ3J1bmQgfHwgJ0Zpcm1hIFdlaXNzIGthbGt1bGllcnQgaW5kaXZpZHVlbGwuJyl9PC9kaXY+PC9kaXY+PC9kaXY+YDsKICAgICAgfSBlbHNlIGlmIChwaS5wbGF0emhhbHRlcikgewogICAgICAgIHByaWNlSHRtbCA9IGA8ZGl2IGNsYXNzPSJwdi1wcmljZSBhbmZyYWdlIj48ZGl2PjxkaXYgY2xhc3M9ImFtdCI+QXVmIEFuZnJhZ2U8L2Rpdj48ZGl2IGNsYXNzPSJzdWIiPkZpcm1hIFdlaXNzIGthbGt1bGllcnQgaW5kaXZpZHVlbGwuPC9kaXY+PC9kaXY+PC9kaXY+YDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBTb2JhbGQgZWluIENoYXJnZW5hdWZwcmVpcyBhbmZhZWxsdCwgaXN0IFN0dWVja3ByZWlzIG1hbCBNZW5nZSBOSUNIVCBtZWhyIGRpZQogICAgICAgIC8vIEdlc2FtdHN1bW1lLiBEYXMgbXVzcyBkYXN0ZWhlbiwgc29uc3Qgd2lya3QgZGllIFJlY2hudW5nIGZhbHNjaC4KICAgICAgICBjb25zdCBjaGFyZ2VIaW53ZWlzID0gcGkuY2hhcmdlQXVmcHJlaXMKICAgICAgICAgID8gJyDCtyBwbHVzIGVpbm1hbGlnICcgKyBldXIocGkuY2hhcmdlQXVmcHJlaXMpICsgJyDigqwgamUgQ2hhcmdlJwogICAgICAgICAgOiAnJzsKICAgICAgICBwcmljZUh0bWwgPSBgPGRpdiBjbGFzcz0icHYtcHJpY2UiPjxkaXY+PGRpdiBjbGFzcz0iYW10Ij48c3BhbiBpZD0id3otYW1vdW50Ij4ke2V1cihwaS5zdHVlY2spfTwvc3Bhbj48c3BhbiBjbGFzcz0iY3VyIj7igqwgLyBTdMO8Y2s8L3NwYW4+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWIiPiR7c3RhdGUubWVuZ2V9IFN0w7xjayR7cGkucmFiYXR0ID8gJyDCtyDiiJInICsgcGkucmFiYXR0ICsgJyAlIGFiICcgKyBwaS5hYiA6ICcnfSR7Y2hhcmdlSGlud2Vpc308L2Rpdj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvdGFsIj48ZGl2IGNsYXNzPSJ0Ij5HZXNhbXQ8L2Rpdj48ZGl2IGNsYXNzPSJ2IG1vbm8iPiR7ZXVyKHBpLmdlc2FtdCl9IOKCrDwvZGl2PjwvZGl2PjwvZGl2PmA7CiAgICAgIH0KICAgIH0KCiAgICBsZXQgY2hpcHMgPSAnJzsKICAgIGlmIChzdGF0ZS50eXApIHsKICAgICAgY29uc3QgcncgPSByb3dGb3Ioc3RhdGUpOwogICAgICBjb25zdCBwYXJ0cyA9IFtdOwogICAgICBpZiAoc3RhdGUubm9ybSkgcGFydHMucHVzaChbJ05vcm0nLCBELm5vcm1lbi5maW5kKG4gPT4gbi5pZCA9PT0gc3RhdGUubm9ybSkubGFiZWxdKTsKICAgICAgaWYgKGlzdE51ckZsYW5zY2godCkpIHsKICAgICAgICBjb25zdCBmID0gZmxhbnNjaEZvcihzdGF0ZSk7CiAgICAgICAgaWYgKGYpIHBhcnRzLnB1c2goWydGbGFuc2NoLeKMgCcsIGYubGFiZWwgKyAnIG1tJ10pOwogICAgICAgIGlmIChpc3RLbGFtbWVyKHQpKSB7CiAgICAgICAgICBjb25zdCBrdCA9IGtsYW1tZXJUeXBPYmooc3RhdGUua2xhbW1lclR5cCk7IGlmIChrdCkgcGFydHMucHVzaChbJ0tsYW1tZXJ0eXAnLCBrdC5sYWJlbF0pOwogICAgICAgICAgY29uc3QgbXUgPSAoRC5rbGFtbWVyTXV0dGVybiB8fCBbXSkuZmluZChtID0+IG0uaWQgPT09IHN0YXRlLmtsYW1tZXJNdXR0ZXIpOyBpZiAobXUpIHBhcnRzLnB1c2goWydNdXR0ZXInLCBtdS5sYWJlbF0pOwogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlIGlmIChpc0Nvbm5lY3QodCkgJiYgcncpIHsKICAgICAgICBwYXJ0cy5wdXNoKFsnR3LDtsOfZScsIGxibChydyldKTsKICAgICAgICAvLyBCZXJuZCAyNy4wNy4yMDI2OiBzdGF0dCBkZXIgSGVyc3RlbGxlcnNlcmllIG51ciBub2NoIGRhcyBLw7xyemVsLgogICAgICAgIHBhcnRzLnB1c2goWydUeXAnLCB0LmlkXSk7CiAgICAgICAgcGFydHMucHVzaChbJ0RlIC8gRGknLCBmbXRNTShydy5EZSkgKyAnIC8gJyArIGZtdE1NKHJ3LkRpKSArICcgbW0nXSk7CiAgICAgICAgaWYgKHQuaWQgPT09ICdDRicpIHsKICAgICAgICAgIHBhcnRzLnB1c2goWydEZiAvIEwnLCBmbXRNTShydy5EZikgKyAnIC8gJyArIGZtdE1NKHN0YXRlLmNvbm5lY3RMYWVuZ2UpICsgJyBtbSddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW5kID0gY29ubmVjdEVuZEZvcihzdGF0ZSwgcncpOwogICAgICAgICAgY29uc3QgdXBwZXIgPSBELm1hc3NlLmNvbm5lY3QuY2ZpLm9iZXJlckFuc2NobHVzczsKICAgICAgICAgIHBhcnRzLnB1c2goWydBbnNjaGx1c3MnLCBzdGF0ZS5jb25uZWN0QW5zY2hsdXNzID09PSAnVEMnID8gJ1RyaS1DbGFtcCcgOiAnQnV0dCBXZWxkJ10pOwogICAgICAgICAgaWYgKGVuZCkgcGFydHMucHVzaChbJ1kgLyBMJywgZm10TU0ocncuWSkgKyAnIC8gJyArIGZtdE1NKGVuZC5MKSArICcgbW0nXSk7CiAgICAgICAgICBwYXJ0cy5wdXNoKFsnT2JlcmVyIEFuc2NobHVzcyBEZSAvIERpJywgZm10TU0odXBwZXIuRGUpICsgJyAvICcgKyBmbXRNTSh1cHBlci5EaSkgKyAnIG1tJ10pOwogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlIGlmIChydykgewogICAgICAgIHBhcnRzLnB1c2goWydHcsO2w59lJywgbGJsKHJ3KSArICcgwrcg4oyAJyArIGZtdE1NKG9kT2YocncpKSArICfDlycgKyBmbXRNTSh3YWxsT2YocncpKV0pOwogICAgICAgIC8vIFRDRDogZmVzdGUgSG9laGUgc3RhdHQgS0svS0wgLT4gYWxzIGVpZ2VuZXIgQ2hpcCwgc29uc3QgZmFlbGx0IGRhcyBlaW56aWdlCiAgICAgICAgLy8gTGFlbmdlbm1hc3MgZGVzIFN0dXR6ZW5zIGluIGRlciBWb3JzY2hhdSBnYW56IHdlZy4KICAgICAgICBjb25zdCBsZyA9IGxhZW5nZU9mKHQsIHJ3LCBzdGF0ZS5sYWVuZ2VWYXJpYW50ZSk7CiAgICAgICAgaWYgKGxnICYmIGxnLmxhYmVsID09PSAnaCcpIHBhcnRzLnB1c2goWydIw7ZoZScsIGZtdE1NKGxnLndlcnQpICsgJyBtbSddKTsKICAgICAgfQogICAgICAvLyBUeXAgRCAoQmF1dGVpbCBEaWNodHVuZyk6IGtlaW4gRWRlbHN0YWhsLVdlcmtzdG9mZiwga2VpbmUgT2JlcmZsYWVjaGUgLQogICAgICAvLyBkaWUgRGljaHR1bmcgc2VsYnN0IGtvbW10IGdsZWljaCBhbHMgZWlnZW5lciBDaGlwIChCZXJuZCAxMS4wOC4yMDI2KS4KICAgICAgaWYgKCFpc3REaWNodHVuZ0JhdXRlaWwodCkpIHsKICAgICAgICBwYXJ0cy5wdXNoKFsnV2Vya3N0b2ZmJywgZWZmV2Vya3N0b2ZmKHN0YXRlKSB8fCAnZm9sZ3QnXSk7CiAgICAgICAgLy8gUjItNDogRGllIEtsYW1tZXIgaGF0IGtlaW5lIE9iZXJmbGFlY2hlIC0+IGtlaW5lbiBPYmVyZmxhZWNoZW4tQ2hpcCB6ZWlnZW4uCiAgICAgICAgaWYgKCFpc3RLbGFtbWVyKHQpKSBwYXJ0cy5wdXNoKFsnT2JlcmZsw6RjaGUnLCBzdGF0ZS5vYmVyZmxhZWNoZV0pOwogICAgICB9CiAgICAgIGlmICh0ICYmIHQuZGljaHR1bmcgJiYgc3RhdGUuZGljaHR1bmcpIHBhcnRzLnB1c2goWydEaWNodHVuZycsIGRpY2h0T2JqKHN0YXRlLmRpY2h0dW5nKS5sYWJlbF0pOwogICAgICAvLyBFaW5zYXR6Z3JlbnplbiBzaW5kIG5hY2ggUk9IUi1BdXNzZW5kdXJjaG1lc3NlciBnZXN0YWZmZWx0IChELmVpbnNhdHouZHJ1Y2tCYW5kcykuCiAgICAgIC8vIEJlaSBudXJGbGFuc2NoLVR5cGVuIGZlaGx0IGRlciAtPiBDaGlwIGVudGZhZWxsdCwgc3RhdHQgZGFzIGZhbHNjaGUgQmFuZCB6dSB6ZWlnZW4uCiAgICAgIC8vIFRDRCAoZGlja3dhbmRpZyk6IERpZSBCYWVuZGVyIHNpbmQgZGllIEFELVN0YWZmZWwgZGVyIERVRU5OV0FORElHRU4gRElOLTMyNjc2LVJlaWhlCiAgICAgIC8vICgiUm9oci1BRCA2LDM1IGJpcyA0Miw0IG1tIiB1c3cuKS4gRnVlciBkZW4gZGlja3dhbmRpZ2VuIFN0dXR6ZW4gKFdhbmQgNCBtbSkgbGllZ3QKICAgICAgLy8gS0VJTkUgRHJ1Y2thbmdhYmUgdm9yIC0gd2VkZXIgYmVpIEJlcm5kIG5vY2ggaW0gemltbWVybGluLUF1c3p1Zy4gRGVuIGRpY2t3YW5kaWdlbgogICAgICAvLyBhdXNzZW5EIGluIGRpZXNlIFN0YWZmZWwgenUgc3RlY2tlbiB3YWVyZSBnZXJhdGVuIHVuZCB0ZWlscyBzb2dhciBhYndlaWNoZW5kCiAgICAgIC8vIChUQ0QvRE40MDogYXVzc2VuRCA0NiAtPiAxNiBiYXIsIGR1ZW5ud2FuZGlnIOKMgDQxIC0+IDI1IGJhcikuIERlc2hhbGIgImZvbGd0Ii4KICAgICAgaWYgKHQgJiYgdC5pZCA9PT0gJ1RDJyAmJiBydyAmJiBELmVpbnNhdHogJiYgRC5laW5zYXR6LmRydWNrQmFuZHMpIHsKICAgICAgICBjb25zdCBlYiA9IEQuZWluc2F0ei5kcnVja0JhbmRzLmZpbmQoYiA9PiBydy50dWJlT0QgPD0gYi5hZE1heCk7CiAgICAgICAgaWYgKGViKSBwYXJ0cy5wdXNoKFsnRWluc2F0eicsIGViLmJhciArICcgYmFyIMK3ICcgKyBELmVpbnNhdHoudGVtcE1pbiArICcgYmlzICcgKyBELmVpbnNhdHoudGVtcE1heCArICcgwrBDJ10pOwogICAgICB9IGVsc2UgaWYgKHQgJiYgdC5ub3JtID09PSAnZGluMTE4NjUnKSB7CiAgICAgICAgcGFydHMucHVzaChbJ0VpbnNhdHonLCAnYXVmIEFuZnJhZ2UnXSk7CiAgICAgIH0KICAgICAgY29uc3QgcHJvZHVrdEFydCA9IGFydGljbGVOdW1iZXIoc3RhdGUpOwogICAgICAvLyBCZWkgQ0YvQ0ZJIGlzdCBkaWUgQXJ0aWtlbC1Oci4gamV0enQgaWRlbnRpc2NoIG1pdCBkZXIgS29uZmlndXJhdGlvbnMtTnIuCiAgICAgIC8vIChCZXJuZCAyNy4wNy4yMDI2KSAtIGRhbm4gbmljaHQgendlaW1hbCBkYXNzZWxiZSBhbnplaWdlbi4KICAgICAgaWYgKHByb2R1a3RBcnQgJiYgcHJvZHVrdEFydCAhPT0gdHlwZWNvZGUoc3RhdGUpKSBwYXJ0cy5wdXNoKFsnQXJ0aWtlbC1Oci4nLCBwcm9kdWt0QXJ0XSk7CiAgICAgIGNoaXBzID0gJzxkaXYgY2xhc3M9InB2LWNoaXBzIj4nICsgcGFydHMubWFwKChbaywgdl0pID0+IGA8c3BhbiBjbGFzcz0iY2hpcCI+PGI+JHtlc2Moayl9PC9iPiR7ZXNjKHYpfTwvc3Bhbj5gKS5qb2luKCcnKSArICc8L2Rpdj4nOwogICAgfQoKICAgIGNvbnN0IGNvZGUgPSBzdGF0ZS50eXAgPyB0eXBlY29kZShzdGF0ZSkgOiAn4oCTJywgcHJvZHVrdEFydCA9IHN0YXRlLnR5cCA\\\/IGFydGljbGVOdW1iZXIoc3RhdGUpIDogbnVsbDsKICAgIGNvbnN0IGFydEdsZWljaENvZGUgPSAhIXByb2R1a3RBcnQgJiYgcHJvZHVrdEFydCA9PT0gY29kZTsKICAgIGJveC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0icHYtY2FyZCI+CiAgICAgICR7c3RhZ2V9CiAgICAgIDxkaXYgY2xhc3M9InB2LXR5cGVjb2RlIj48c3BhbiBjbGFzcz0ibGJsIj4ke2FydEdsZWljaENvZGUgPyAnS29uZmlndXJhdGlvbnMtIC8gQXJ0aWtlbC1Oci4nIDogJ0tvbmZpZ3VyYXRpb25zLU5yLid9PC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIiBpZD0id3otY29kZSI+JHtlc2MoY29kZSl9PC9zcGFuPgogICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHkiIGRhdGEtYWN0PSJjb3B5Y29kZSI+JHtpYygnY29weScsICdpYycpfSBrb3BpZXJlbjwvYnV0dG9uPjwvZGl2PgogICAgICAke3Byb2R1a3RBcnQgJiYgIWFydEdsZWljaENvZGUgPyBgPGRpdiBjbGFzcz0icHYtdHlwZWNvZGUiPjxzcGFuIGNsYXNzPSJsYmwiPkFydGlrZWwtTnIuPC9zcGFuPjxzcGFuIGNsYXNzPSJjb2RlIj4ke2VzYyhwcm9kdWt0QXJ0KX08L3NwYW4+PC9kaXY+YCA6ICcnfQogICAgICAke3ByaWNlSHRtbH0ke2NoaXBzfTwvZGl2PmA7CgogICAgaWYgKHBpLm1vZGUgPT09ICdsaXZlJyAmJiAhcGkucGxhdHpoYWx0ZXIpIGFuaW1hdGVQcmljZSgkKCcjd3otYW1vdW50JyksIHBpLnN0dWVjayk7IGVsc2UgcHJpY2VDdXIgPSBudWxsOwogIH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOYXYgKi8KICBmdW5jdGlvbiByZW5kZXJOYXYoKSB7CiAgICBjb25zdCBuYXYgPSAkKCcjd3otbmF2Jyk7CiAgICBjb25zdCBhID0gYXBwU3RlcHMoKSwgaSA9IGEuaW5kZXhPZihzdGF0ZS5zdGVwKSwgbGFzdCA9IGkgPT09IGEubGVuZ3RoIC0gMTsKICAgIGNvbnN0IHBpID0gcHJpY2VJbmZvKHN0YXRlKTsKICAgIGNvbnN0IG5vcm0gPSBELm5vcm1lbi5maW5kKG4gPT4gbi5pZCA9PT0gc3RhdGUubm9ybSk7CiAgICBjb25zdCBtaW5pID0gc3RhdGUudHlwID8gKChwaS5tb2RlID09PSAnbGl2ZScgJiYgIXBpLnBsYXR6aGFsdGVyKQogICAgICA\\\/IGA8ZGl2IGNsYXNzPSJtaW5pcHJpY2UiPjxzcGFuIGNsYXNzPSJhIG1vbm8iPiR7ZXVyKHBpLmdlc2FtdCl9IOKCrDwvc3Bhbj48c3BhbiBjbGFzcz0iYiI+JHtzdGF0ZS5tZW5nZX0gU3TDvGNrPC9zcGFuPjwvZGl2PmAKICAgICAgOiBwaS5tb2RlID09PSAnbGl2ZScKICAgICAgPyBgPGRpdiBjbGFzcz0ibWluaXByaWNlIj48c3BhbiBjbGFzcz0iYSI+QXVmIEFuZnJhZ2U8L3NwYW4+PHNwYW4gY2xhc3M9ImIiPiR7c3RhdGUubWVuZ2V9IFN0w7xjazwvc3Bhbj48L2Rpdj5gCiAgICAgIDogYDxkaXYgY2xhc3M9Im1pbmlwcmljZSI+PHNwYW4gY2xhc3M9ImEiPkF1ZiBBbmZyYWdlPC9zcGFuPjxzcGFuIGNsYXNzPSJiIj4ke2VzYyhub3JtID8gbm9ybS5sYWJlbCA6ICcnKX08L3NwYW4+PC9kaXY+YCkgOiAnJzsKICAgIGNvbnN0IGJhY2sgPSBpID4gMCA\\\/IGA8YnV0dG9uIGNsYXNzPSJidG4gZ2hvc3QiIGRhdGEtYWN0PSJiYWNrIj4ke2ljKCdhcnJvd0wnLCAnaWMnKX0gWnVyw7xjazwvYnV0dG9uPmAgOiAnPHNwYW4+PC9zcGFuPic7CiAgICBsZXQgZndkOwogICAgaWYgKGxhc3QpIGZ3ZCA9IGA8YnV0dG9uIGNsYXNzPSJidG4gcHJpbWFyeSB3aWRlIiBkYXRhLWFjdD0ic2VuZCIgaWQ9Ind6LXNlbmQiPkFuZnJhZ2UgcGVyIEUtTWFpbCBzZW5kZW4gJHtpYygnYXJyb3dSJywgJ2ljJyl9PC9idXR0b24+YDsKICAgIGVsc2UgZndkID0gYDxidXR0b24gY2xhc3M9ImJ0biBwcmltYXJ5IHdpZGUiIGRhdGEtYWN0PSJuZXh0IiAke2NvbXBsZXRlKHN0YXRlLnN0ZXApID8gJycgOiAnZGlzYWJsZWQnfT5XZWl0ZXIgJHtpYygnYXJyb3dSJywgJ2ljJyl9PC9idXR0b24+YDsKICAgIG5hdi5pbm5lckhUTUwgPSBiYWNrICsgbWluaSArIGZ3ZDsKICAgIGlmIChsYXN0KSB2YWxpZGF0ZVNlbmQoKTsKICB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUkZRIC8gQWt0aW9uZW4gKi8KICBmdW5jdGlvbiBjb250YWN0VmFsaWQoKSB7CiAgICBjb25zdCBrID0gc3RhdGUua29udGFrdDsKICAgIHJldHVybiBrLmZpcm1hLnRyaW0oKSAmJiBrLm5hbWUudHJpbSgpICYmIC9eW15cc0BdK0BbXlxzQF0rXC5bXlxzQF0rJC8udGVzdChrLmVtYWlsLnRyaW0oKSk7CiAgfQogIGZ1bmN0aW9uIHZhbGlkYXRlU2VuZCgpIHsgY29uc3QgYiA9ICQoJyN3ei1zZW5kJyk7IGlmIChiKSBiLmRpc2FibGVkID0gIWNvbnRhY3RWYWxpZCgpOyB9CgogIGZ1bmN0aW9uIGJpbmRGb3JtKCkgewogICAgY29uc3QgZiA9ICQoJyN3ei1mb3JtJyk7IGlmICghZikgcmV0dXJuOwogICAgZi5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1rXScpLmZvckVhY2goaW5wID0+IHsKICAgICAgaW5wLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gewogICAgICAgIHN0YXRlLmtvbnRha3RbaW5wLmdldEF0dHJpYnV0ZSgnZGF0YS1rJyldID0gaW5wLnZhbHVlOwogICAgICAgIGlmIChpbnAuZ2V0QXR0cmlidXRlKCdkYXRhLWsnKSA9PT0gJ2VtYWlsJykgewogICAgICAgICAgY29uc3QgZW0gPSAkKCcjd3otZXJyLWVtYWlsJyk7CiAgICAgICAgICBpZiAoZW0pIGVtLnRleHRDb250ZW50ID0gKGlucC52YWx1ZSAmJiAhL15bXlxzQF0rQFteXHNAXStcLlteXHNAXSskLy50ZXN0KGlucC52YWx1ZS50cmltKCkpKSA\\\/ICdCaXR0ZSBnw7xsdGlnZSBFLU1haWwgZWluZ2ViZW4uJyA6ICcnOwogICAgICAgIH0KICAgICAgICB2YWxpZGF0ZVNlbmQoKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHBvc0xpbmUocHMsIGlkeCkgewogICAgY29uc3QgdCA9IHR5cE9iaihwcy50eXApLCBuID0gRC5ub3JtZW4uZmluZCh4ID0+IHguaWQgPT09IHBzLm5vcm0pOwogICAgY29uc3QgYW53ID0gRC5hbndlbmR1bmdlbi5maW5kKGEgPT4gYS5pZCA9PT0gcHMuYW53ZW5kdW5nKTsKICAgIC8vIG51ckZsYW5zY2gtVHlwZW4gaGFiZW4ga2VpbmUgTmVubndlaXRlIC0+IGdhciBuaWNodCBlcnN0IGluIGRlbiBSZWloZW4gc3VjaGVuLgogICAgLy8gcm93c1F1ZWxsZSBzdGF0dCBkZXIgZmVzdCB2ZXJkcmFodGV0ZW4gZGluMzI2NzYtUmVpaGU6IHNvbnN0IHppZWh0IGRpZSBBbmZyYWdlLU1haWwKICAgIC8vIGZ1ZXIgVENEIGRpZSBEVUVOTldBTkRJR0VOIE1hc3NlIChETjI1IC0+IOKMgDI5IHggMSw1IHN0YXR0IOKMgDM0IHggNCkuIERpZSBNYWlsIGdlaHQgYW4KICAgIC8vIFdlaXNzIHVuZCBpc3QgZGllIEJlc3RlbGxncnVuZGxhZ2UgLSBoaWVyIGRhcmYga2VpbmUgZnJlbWRlIFRhYmVsbGUgZ3JlaWZlbi4KICAgIGNvbnN0IHJ3ID0gaXN0TnVyRmxhbnNjaCh0KSA\\\/IG51bGwgOiByb3dGb3IocHMpOwogICAgY29uc3QgcjIgPSAoIWlzdE51ckZsYW5zY2godCkgJiYgcHMuZ3JvZXNzZTIpID8gcm93MkZvcihwcykgOiBudWxsOwogICAgY29uc3QgbncgPSBwcy5uYWNod2Vpc2UubWFwKGlkID0+IG5hY2h3ZWlzTGFiZWxCeUlkKGlkKSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJykgfHwgJ+KAlCc7CiAgICAvLyBaZWlsZW5zdW1tZSBtaXQgaW4gZGllIE1haWw6IE9obmUgc2llIG11ZXNzdGUgV2Vpc3MgU3R1ZWNrcHJlaXMgbWFsIE1lbmdlIG1pbnVzCiAgICAvLyBNZW5nZW5zdGFmZmVsIHZvbiBIYW5kIG5hY2hyZWNobmVuLCB1bmQgZGVyIEdlc2FtdGJldHJhZyBhbSBFbmRlIGRlciBNYWlsIGhhZXR0ZQogICAgLy8ga2VpbmUgbmFjaHZvbGx6aWVoYmFyZW4gRWluemVscG9zdGVuLgogICAgLy8gRGVyIENoYXJnZW5hdWZwcmVpcyBzdGVja3QgaW4gZGVyIFBvc2l0aW9uc3N1bW1lLCBhYmVyIG5pY2h0IGltIFN0dWVja3ByZWlzLgogICAgLy8gT2huZSBkaWVzZW4gWnVzYXR6IGtvZW5udGUgV2Vpc3MgZGllIFplaWxlIG5pY2h0IG5hY2hyZWNobmVuLgogICAgY29uc3QgcHJlaXMgPSAocHMucHJpY2UubW9kZSA9PT0gJ2xpdmUnICYmICFwcy5wcmljZS5wbGF0emhhbHRlcikKICAgICAgPyAoZXVyKHBzLnByaWNlLnN0dWVjaykgKyAnIEVVUiAvIFN0w7xjaycgKyAocHMucHJpY2UucmFiYXR0ID8gJyBhYnrDvGdsaWNoICcgKyBwcy5wcmljZS5yYWJhdHQgKyAnICUgYWIgJyArIHBzLnByaWNlLmFiICsgJyBTdMO8Y2snIDogJycpCiAgICAgICAgICsgKHBzLnByaWNlLmNoYXJnZUF1ZnByZWlzID8gJyB6dXrDvGdsaWNoIGVpbm1hbGlnICcgKyBldXIocHMucHJpY2UuY2hhcmdlQXVmcHJlaXMpICsgJyBFVVIgamUgQ2hhcmdlJyA6ICcnKQogICAgICAgICArICcgwrcgUG9zaXRpb24gJyArIGV1cihwcy5wcmljZS5nZXNhbXQpICsgJyBFVVInKQogICAgICA6ICdhdWYgQW5mcmFnZSc7CiAgICBjb25zdCBMID0gW107CiAgICBMLnB1c2goJy0tLSBQb3NpdGlvbiAnICsgKGlkeCArIDEpICsgJyAtLS0nKTsKICAgIGlmIChhbncpIEwucHVzaCgnQW53ZW5kdW5nOiAnICsgYW53LmxhYmVsKTsKICAgIEwucHVzaCgnS29uZmlndXJhdGlvbnMtTnIuOiAnICsgKHBzLmNvbmZpZ3VyYXRpb25Db2RlIHx8IHBzLmNvZGUpKTsKICAgIGlmIChwcy5hcnRpY2xlTnVtYmVyKSBMLnB1c2goJ0FydGlrZWwtTnIuOiAnICsgcHMuYXJ0aWNsZU51bWJlcik7CiAgICBMLnB1c2goJ05vcm06ICcgKyAobiA\\\/IG4ubGFiZWwgKyAnICgnICsgbi5zdWIgKyAnKScgOiAnJykpOwogICAgTC5wdXNoKCdCYXV0ZWlsOiAnICsgKHQgPyB0LmxhYmVsIDogJycpKTsKICAgIC8vIG51ckZsYW5zY2gtVHlwZW4gKEJsaW5kZGVja2VsL0tsYW1tZXIsIEFic2Nobml0dCBEKTogRXMgZ2lidCBrZWluZSBOZW5ud2VpdGUgLSBkZXIKICAgIC8vIEZsYW5zY2gtw5ggaXN0IGRhcyBFSU5aSUdFIEdyb2Vzc2VubWFzcy4gT2huZSBkaWVzZSBaZWlsZSBiZWthZW1lIFdlaXNzIGVpbmUgUG9zaXRpb24KICAgIC8vIHZvZWxsaWcgb2huZSBHcm9lc3NlbmFuZ2FiZS4gS2xhbW1lcnR5cCAoQWJzY2huaXR0IEUpIGdlaG9lcnQgZWJlbnNvIGluIGRpZSBBbmZyYWdlLgogICAgaWYgKGlzdE51ckZsYW5zY2godCkpIHsKICAgICAgY29uc3QgZiA9IGZsYW5zY2hPYmoocHMuZmxhbnNjaCk7CiAgICAgIEwucHVzaCgnRmxhbnNjaC1EdXJjaG1lc3NlcjogJyArIChmID8gZi5sYWJlbCArICcgbW0nIDogJ2ZvbGd0JykpOwogICAgICBpZiAoaXN0S2xhbW1lcih0KSkgewogICAgICAgIGNvbnN0IGt0ID0ga2xhbW1lclR5cE9iaihwcy5rbGFtbWVyVHlwKTsKICAgICAgICBpZiAoa3QpIEwucHVzaCgnS2xhbW1lcnR5cDogJyArIGt0LmxhYmVsICsgJyAoJyArIGt0LnN1YiArICcpJyk7CiAgICAgICAgaWYgKGYgJiYgZi5rbGFtbWVyQSkgTC5wdXNoKCdNYcOfIEE6ICcgKyAoZi5rbGFtbWVyQVtwcy5rbGFtbWVyVHlwXSA9PSBudWxsID8gJ2F1ZiBBbmZyYWdlJyA6IGZtdE1NKGYua2xhbW1lckFbcHMua2xhbW1lclR5cF0pICsgJyBtbScpKTsKICAgICAgICBjb25zdCBtdSA9IChELmtsYW1tZXJNdXR0ZXJuIHx8IFtdKS5maW5kKG0gPT4gbS5pZCA9PT0gcHMua2xhbW1lck11dHRlcik7CiAgICAgICAgaWYgKG11KSBMLnB1c2goJ011dHRlcjogJyArIG11LmxhYmVsICsgKG11LmF1ZnByZWlzID8gJyAoZ2VnZW4gQXVmcHJlaXMpJyA6ICcnKSk7CiAgICAgIH0KICAgICAgLy8gRGVja2Vsc3RhZXJrZSBMIGlzdCBzZWl0IFJ1bmRlIDUgYmVsZWd0ICgiTWFzc2UgS2xlbW1lbiwgQmxpbmRkZWNrZWwueGxzeCIsCiAgICAgIC8vIDIyLjA3LjIwMjYpIHVuZCBkYXJmIGluIGRlciBBbmZyYWdlLU1haWwgc3RlaGVuLiBudWxsIGJsZWlidCAiYXVmIEFuZnJhZ2UiLAogICAgICAvLyBkYW1pdCBXZWlzcyBzaWVodCwgZGFzcyBkYXMgTWFzcyBvZmZlbiBpc3QsIHN0YXR0IGVzIHN0aWxsc2Nod2VpZ2VuZCBhbnp1bmVobWVuLgogICAgICBpZiAodC5zdmdUeXBlID09PSAnYmxpbmRkZWNrZWwnKSBMLnB1c2goJ0RlY2tlbHN0w6Rya2UgTDogJyArIChmICYmIGYuYmxpbmRUaGsgIT0gbnVsbCA\\\/IGZtdE1NKGYuYmxpbmRUaGspICsgJyBtbScgOiAnYXVmIEFuZnJhZ2UnKSk7CiAgICB9CiAgICAvLyBtYXNzZUZvbGd0IChDRi9DRkkpOiBPaG5lIGRpZXNlIFplaWxlIGJla2FlbWUgV2Vpc3MgZWluZSBQb3NpdGlvbiB2b2VsbGlnIG9obmUgSGlud2VpcywKICAgIC8vIGRhc3MgZGllIEdyb2Vzc2Ugbm9jaCBvZmZlbiBpc3QgLSB1bmQgd3VlcmRlIGVpbmUgc3RpbGxzY2h3ZWlnZW5kIGFubmVobWVuLiBFaHJsaWNoCiAgICAvLyBiZW5lbm5lbiwgd2FzIGZlaGx0OyBkYXMgV3Vuc2NobWFzcyBrb21tdCBnZ2YuIHVlYmVyIGRlbiBGcmVpdGV4dCBkYXp1LgogICAgZWxzZSBpZiAoaXNDb25uZWN0KHQpICYmIHJ3KSB7CiAgICAgIEwucHVzaCgnVHlwOiAnICsgdC5pZCArICcgKCcgKyBlZmZXZXJrc3RvZmYocHMpICsgJyknKTsKICAgICAgTC5wdXNoKCdHcsO2w59lOiAnICsgbGJsKHJ3KSk7CiAgICAgIEwucHVzaCgnTWHDn2U6IERlICcgKyBmbXRNTShydy5EZSkgKyAnIG1tIC8gRGkgJyArIGZtdE1NKHJ3LkRpKSArICcgbW0nKTsKICAgICAgaWYgKHQuaWQgPT09ICdDRicpIHsKICAgICAgICBMLnB1c2goJ1JvaHJzdGFuZGFyZDogJyArIHBzLmNvbm5lY3ROb3JtKTsKICAgICAgICBMLnB1c2goJ01hw59lOiBEZiAnICsgZm10TU0ocncuRGYpICsgJyBtbSAvIEwgJyArIGZtdE1NKHBzLmNvbm5lY3RMYWVuZ2UpICsgJyBtbScpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGVuZCA9IGNvbm5lY3RFbmRGb3IocHMsIHJ3KTsKICAgICAgICBjb25zdCB1cHBlciA9IEQubWFzc2UuY29ubmVjdC5jZmkub2JlcmVyQW5zY2hsdXNzOwogICAgICAgIEwucHVzaCgnUm9ocmFuc2NobHVzczogJyArIChwcy5jb25uZWN0QW5zY2hsdXNzID09PSAnVEMnID8gJ1RyaS1DbGFtcCcgOiAnQnV0dCBXZWxkJykpOwogICAgICAgIGlmIChlbmQpIEwucHVzaCgnTWHDn2U6IFkgJyArIGZtdE1NKHJ3LlkpICsgJyBtbSAvIEwgJyArIGZtdE1NKGVuZC5MKSArICcgbW0gLyAnICsgKHBzLmNvbm5lY3RBbnNjaGx1c3MgPT09ICdUQycgPyAnVEMgJyA6ICdBICcpICsgZm10TU0ocHMuY29ubmVjdEFuc2NobHVzcyA9PT0gJ1RDJyA\\\/IGVuZC5UQyA6IGVuZC5BKSArICcgbW0nKTsKICAgICAgICBMLnB1c2goJ09iZXJlciBBbnNjaGx1c3M6IERlICcgKyBmbXRNTSh1cHBlci5EZSkgKyAnIG1tIC8gRGkgJyArIGZtdE1NKHVwcGVyLkRpKSArICcgbW0nKTsKICAgICAgfQogICAgICAvLyBGcnVlaGVyIHN0YW5kIGhpZXIgZWluIEZhbGxiYWNrICJBcnRpa2VsLU5yLjogd2lyZCB2b24gRmlybWEgV2Vpc3MgZXJnw6RuenQiLgogICAgICAvLyBFciBrb25udGUgbmllIGZldWVybjogSW4gZGllc2VtIFp3ZWlnIGlzdCBydyBiZWxlZ3QsIHVuZCBmdWVyIENGL0NGSSBsaWVmZXJ0CiAgICAgIC8vIGFydGljbGVOdW1iZXIoKSB1ZWJlciBjb25uZWN0QXJ0aWNsZU51bWJlcigpIC0+IHR5cGVjb2RlKCkgaW1tZXIgZWluZSBOdW1tZXIuCiAgICAgIC8vIFRvdGVyIENvZGUgcmF1cywgc3RhdHQgaWhuIGFscyB2ZXJtZWludGxpY2hlcyBTaWNoZXJoZWl0c25ldHogc3RlaGVuenVsYXNzZW4uCiAgICB9CiAgICBlbHNlIGlmIChpc3RNYXNzZUZvbGd0KHQpKSBMLnB1c2goJ0dyb2Vzc2UvTWFzc2U6IE5PQ0ggT0ZGRU4gLSBmdWVyICcgKyAodCA\\\/IHQubGFiZWwgOiAnJykgKyAnIGxpZWd0IGltIEtvbmZpZ3VyYXRvciBub2NoIGtlaW4gZnJlaWdlZ2ViZW5lcyBEYXRlbmJsYXR0IHZvciAoa2VpbmUgTWFzc2UgaGludGVybGVndCkuJyk7CiAgICBlbHNlIGlmIChydykgTC5wdXNoKCdHcsO2w59lOiAnICsgbGJsKHJ3KSArIChyMiA\\\/ICcgYXVmICcgKyBsYmwocjIpIDogJycpICsgJyAtIFJvaHIgJyArIGZtdE1NKG9kT2YocncpKSArICcgeCAnICsgZm10TU0od2FsbE9mKHJ3KSkgKyAnIG1tJyArICh0Lm5vcm0gPT09ICdkaW4zMjY3NicgJiYgcncuZmxhbmdlT0QgPyAnIC0gS2xlbW0tRHVyY2htZXNzZXIgJyArIHJ3LmZsYW5nZU9EICsgJyBtbScgOiAnJykpOwogICAgLy8gQmVkaW5ndW5nIGhhZW5ndCBhbSBsYWVuZ2VWYXJpYW50ZS1GbGFnLCBOSUNIVCBhbSBzdmdUeXBlOiBDRi9DRkkgdHJhZ2VuIHp3YXIKICAgIC8vIHN2Z1R5cGU6J2NsYW1wc3R1dHplbicsIGhhYmVuIGFiZXIga2VpbmUgd2FlaGxiYXJlIFN0dXR6ZW5sYWVuZ2UuIFVlYmVyIGRlbiBzdmdUeXBlCiAgICAvLyBoYWV0dGUgZGllIEFuZnJhZ2UtTWFpbCBmdWVyIENGL0NGSSBlaW4gIkxhZW5nZToga3VyeiAoS0spIiBiZWhhdXB0ZXQsIGRhcyBkZXIgS3VuZGUKICAgIC8vIG5pZSBnZXdhZWhsdCBoYXQuIEZ1ZXIgVEMvVENTIChsYWVuZ2VWYXJpYW50ZTp0cnVlKSBhZW5kZXJ0IHNpY2ggbmljaHRzLgogICAgaWYgKHQgJiYgdC5sYWVuZ2VWYXJpYW50ZSkgTC5wdXNoKCdMYWVuZ2U6ICcgKyAocHMubGFlbmdlVmFyaWFudGUgPT09ICdLTCcgPyAnbGFuZyAoS0wpJyA6ICdrdXJ6IChLSyknKSk7CiAgICAvLyBUQ0Q6IGtlaW4gS0svS0wsIHNvbmRlcm4gZGllIFdlaXNzLVN0YW5kYXJkaG9laGUgYXVzIGRlciBUYWJlbGxlLiBPaG5lIGRpZXNlIFplaWxlCiAgICAvLyBiZWthZW1lIFdlaXNzIGRlbiBTdHV0emVuIG9obmUgc2VpbiBlaW56aWdlcyBMYWVuZ2VubWFzcy4KICAgIGNvbnN0IGxnUCA9IGxhZW5nZU9mKHQsIHJ3LCBwcy5sYWVuZ2VWYXJpYW50ZSk7CiAgICBpZiAobGdQICYmIGxnUC5sYWJlbCA9PT0gJ2gnKSBMLnB1c2goJ0hvZWhlOiAnICsgZm10TU0obGdQLndlcnQpICsgJyBtbSAoU3RhbmRhcmQgdm9uIEZpcm1hIFdlaXNzKScpOwogICAgaWYgKHQgJiYgdC5zdmdUeXBlID09PSAncmVkdXppZXJ1bmcnKSBMLnB1c2goJ0JhdWZvcm06ICcgKyAocHMuZXh6ZW50cmlzY2ggPyAnZXh6ZW50cmlzY2ggKEZvcm0gUkUpJyA6ICdrb256ZW50cmlzY2ggKEZvcm0gUkspJykpOwogICAgLy8gUjMtMy9SMy00OiBCYXVmb3JtIGRlciBULVN0w7xja2UgbWl0IGluIGRpZSBBbmZyYWdlLU1haWwuCiAgICBpZiAodCAmJiB0LmZvcm1XYWhsKSBMLnB1c2goJ0JhdWZvcm06ICcgKyAocHMuZm9ybVZhcmlhbnRlID09PSAnVEsnID8gJ0Zvcm0gVEsgKER1cmNoZ2FuZyBnbGVpY2gsIEFiZ2FuZyBrdXJ6KScgOiAnRm9ybSBUIChhbGxlIEFiZ8OkbmdlIGdsZWljaCBsYW5nKScpKTsKICAgIGlmICh0ICYmIGlzQmVuZCh0KSAmJiBydykgewogICAgICBMLnB1c2goJ01hw59lOiBSICcgKyBmbXRNTShydy5SKSArICcgbW0gLyAnICsgKHQuYm9nZW4gPT09IDQ1ID8gJ0wyICcgKyBmbXRNTShydy5MMikgOiAnTDEgJyArIGZtdE1NKHJ3LkwxKSkgKyAnIG1tIC8gTDMgJyArIGZtdE1NKHQuYm9nZW4gPT09IDQ1ID8gcncuTDNfNDUgOiBydy5MM185MCkgKyAnIG1tJyk7CiAgICB9CiAgICBpZiAodCAmJiB0LmlkID09PSAnUicpIHsgY29uc3QgcGFpciA9IHJlZHVjdGlvblBhaXIocHMpOyBpZiAocGFpcikgTC5wdXNoKCdMw6RuZ2UgTDogJyArIGZtdE1NKHBhaXIuTCkgKyAnIG1tJyk7IH0KICAgIC8qIE1hc3NsaXN0ZSBkZXIgVC1TdHVlY2tlLiBEZXIgRmlsdGVyIHN0YW5kIGZydWVoZXIgYXVmIHQuaWQgPT09ICdUUycgLSBkYWR1cmNoIGdpbmcKICAgICAqIEpFREUgcmVkdXppZXJ0ZSBQb3NpdGlvbiAoVFNSKSBvaG5lIEwwL0wvQWJnYW5nIGFuIFdlaXNzIHJhdXMsIG9id29obCBkaWUgV2VydGUgaW0KICAgICAqIGJlbGVndGVuIFBhYXIgc3RlaGVuLiBRdWVsbGUgZGVzaGFsYiB3aWUgaW0gRGF0ZW5ibGF0dDogVFMgLT4gRHVyY2hnYW5nc3plaWxlLAogICAgICogVFNSIC0+IHRTdHVlY2tQYWlyKCkuIE9obmUgYmVsZWd0ZSBRdWVsbGUgYmxlaWJ0IGRpZSBaZWlsZSB3ZWcgKGZhaWwtY2xvc2VkKSwKICAgICAqIGRhcyBLdWVyemVsIGRlcyBBYmdhbmdzIGZvbGd0IGRlciBCYXVmb3JtIChGb3JtIFQgLT4gTDIsIEZvcm0gVEsgLT4gTDEpLiAqLwogICAgaWYgKHQgJiYgKHQuaWQgPT09ICdUUycgfHwgdC5pZCA9PT0gJ1RTUicpKSB7CiAgICAgIGNvbnN0IHRTcmMgPSB0LmlkID09PSAnVFNSJyA\\\/IHRTdHVlY2tQYWlyKHBzKSA6IHJ3OwogICAgICAvLyBGb3JtIFRLIG9obmUgYmVsZWd0ZSBTcGFsdGUgTDE6IHRrQWJnYW5nKCkgbWFjaHQgYXVzIGRlbSBUYWJlbGxlbi1TdHJpY2ggZWluZSAwLgogICAgICAvLyBJbiBkZXIgQW5mcmFnZS1NYWlsICg9IEJlc3RlbGxncnVuZGxhZ2UgZnVlciBXZWlzcykgd2FlcmUgIkwxIDAgbW0iIGVpbiBlcmZ1bmRlbmVzCiAgICAgIC8vIE1hc3MgLSBkYW5uIGJsZWlidCBkZXIgQWJnYW5nIGF1c2RydWVja2xpY2ggb2ZmZW4sIEwwL0wgZ2VoZW4gdHJvdHpkZW0gbWl0LgogICAgICBjb25zdCB0a09mZmVuID0gcHMuZm9ybVZhcmlhbnRlID09PSAnVEsnICYmICghdFNyYyB8fCB0U3JjLkwxID09IG51bGwpOwogICAgICBjb25zdCB0QWJnID0gdGtPZmZlbiA\\\/IG51bGwgOiBhYmdhbmdMMihwcywgdFNyYyk7CiAgICAgIGlmICh0U3JjICYmIHRTcmMuTDAgIT0gbnVsbCAmJiB0U3JjLkwgIT0gbnVsbCkgewogICAgICAgIEwucHVzaCgnTWHDn2U6IEwwICcgKyBmbXRNTSh0U3JjLkwwKSArICcgbW0gLyBMICcgKyBmbXRNTSh0U3JjLkwpICsgJyBtbSAvICcKICAgICAgICAgICsgYWJnYW5nS3VlcnplbChwcykgKyAnICcgKyAodEFiZyAhPSBudWxsID8gZm10TU0odEFiZykgKyAnIG1tJyA6ICdOT0NIIE9GRkVOJykpOwogICAgICB9CiAgICB9CiAgICBpZiAodCAmJiB0LmlkID09PSAnVEMnKSBMLnB1c2goJ0tsYW1tZXI6ICcgKyBwcy5rbGFtbWVyVHlwKTsKICAgIC8qIFR5cCBEIChCYXV0ZWlsIERpY2h0dW5nKTogV2VkZXIgRWRlbHN0YWhsLVdlcmtzdG9mZiBub2NoIE9iZXJmbGFlY2hlIGdlaG9lcmVuCiAgICAgKiBpbiBkaWUgQW5mcmFnZSAtIGluIGRlciBNYWlsIGFuIFdlaXNzIHN0dWVuZGUgc29uc3QgIjEuNDQwNCAvIEg0IiB1ZWJlciBlaW5lcgogICAgICogRVBETS1EaWNodHVuZyAoQmVybmQgMTEuMDguMjAyNikuIERlciBXZXJrc3RvZmYgZGVyIERpY2h0dW5nIHN0ZWh0IGVpbmUgWmVpbGUKICAgICAqIHRpZWZlciB1bnRlciAiRGljaHR1bmciLCBkaWUgTWFzc2UgRS9DIGluIGRlciBiZWlsaWVnZW5kZW4gWmVpY2hudW5nLiAqLwogICAgaWYgKCFpc3REaWNodHVuZ0JhdXRlaWwodCkpIHsKICAgICAgTC5wdXNoKCdXZXJrc3RvZmY6ICcgKyBwcy53ZXJrc3RvZmYpOwogICAgICAvLyBSMi00OiBEaWUgS2xhbW1lciBoYXQgS0VJTkUgT2JlcmZsYWVjaGUgLT4ga2VpbmUgT2JlcmZsYWVjaGVuLVplaWxlIGluIGRlciBBbmZyYWdlCiAgICAgIC8vIChzb25zdCBzdHVlbmRlICJLbGFtbWVyIHRyYWVndCBINCIgaW4gZGVyIE1haWwgYW4gV2Vpc3MpLgogICAgICBpZiAoIWlzdEtsYW1tZXIodCkpIHsKICAgICAgICBjb25zdCBvbyA9IEQub2JlcmZsYWVjaGVuLmZpbmQobyA9PiBvLmlkID09PSBwcy5vYmVyZmxhZWNoZSk7CiAgICAgICAgLy8gUmEtWnVzYXR6IE5VUiwgd2VubiBiZWlkZSBHcmVuendlcnRlIGJlc3RhZXRpZ3QgaW4gZGF0YS5qcyBzdGVoZW4uIEJlaSBIMSBzaW5kCiAgICAgICAgLy8gcmFJbm5lbi9yYUF1c3NlbiBiZXd1c3N0IG51bGwgKG9mZmVuZSBGcmFnZSA0KSAtPiBadXNhdHogZW50ZmFlbGx0IGtvbXBsZXR0LAogICAgICAgIC8vIHN0YXR0ICJSYSBpbm5lbiA8PW51bGwiIHp1IHNjaGlja2VuLiBLZWluIGdlcmF0ZW5lciBXZXJ0LCBrZWluICJmb2xndCIgaW4gZGVyIEtsYW1tZXIuCiAgICAgICAgY29uc3QgcmFPayA9IG9vICYmIG9vLnJhSW5uZW4gIT0gbnVsbCAmJiBvby5yYUF1c3NlbiAhPSBudWxsOwogICAgICAgIEwucHVzaCgnT2JlcmZsw6RjaGU6ICcgKyBwcy5vYmVyZmxhZWNoZSArIChyYU9rID8gJyAoUmEgaW5uZW4gPD0nICsgb28ucmFJbm5lbiArICcgLyBhdcOfZW4gPD0nICsgb28ucmFBdXNzZW4gKyAnIMK1bSknIDogJycpKTsKICAgICAgfQogICAgfQogICAgaWYgKHQgJiYgdC5kaWNodHVuZykgTC5wdXNoKCdEaWNodHVuZzogJyArIChkaWNodE9iaihwcy5kaWNodHVuZykgPyBkaWNodE9iaihwcy5kaWNodHVuZykubGFiZWwgOiAn4oCUJykpOwogICAgLy8gRGVyIFp1c2F0eiBnaWx0IG51ciwgd2VubiBkaWUgRGljaHR1bmcgZWluIFpVQkVIT0VSVEVJTCBkZXIgUG9zaXRpb24gaXN0IChUeXAgVEMpLgogICAgLy8gQmVpbSBUeXAgRCBJU1QgZGllIERpY2h0dW5nIGRhcyBiZXN0ZWxsdGUgQmF1dGVpbCAtIGRvcnQgc3RlaHQgaWhyZSBOdW1tZXIgYmVyZWl0cwogICAgLy8gb2JlbiBpbiBkZXIgQXJ0aWtlbC1Oci4tWmVpbGUgKFNjaGVtYSBELTxHcm9lc3NlPi08UmVpaGU+LTxXZXJrc3RvZmY+LTxMfE8+KSwgZGVyCiAgICAvLyBadXNhdHogd2FyIGVpbmUgRG9wcGx1bmcgdW5kIGhhdCBkZXIgZWlnZW5lbiBBcnRpa2VsbnVtbWVyIHdpZGVyc3Byb2NoZW4uCiAgICBpZiAodCAmJiB0LmRpY2h0dW5nICYmIHQuaWQgIT09ICdEJykgTC5wdXNoKCdEaWNodHVuZyBBcnRpa2VsLU5yLjogd2lyZCB2b24gRmlybWEgV2Vpc3MgZXJnw6RuenQnKTsKICAgIEwucHVzaCgnTmFjaHdlaXNlOiAnICsgbncpOwogICAgTC5wdXNoKCdNZW5nZTogJyArIHBzLm1lbmdlICsgJyBTdMO8Y2snKTsKICAgIEwucHVzaCgnUHJlaXNzdGF0dXM6ICcgKyBwcmVpcyk7CiAgICByZXR1cm4gTC5qb2luKCdcbicpOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRSZnFCb2R5KCkgewogICAgY29uc3QgayA9IHN0YXRlLmtvbnRha3QsIHBvcyA9IHBvc2l0aW9uc0ZvclJmcSgpOwogICAgY29uc3QgYW53ID0gRC5hbndlbmR1bmdlbi5maW5kKGEgPT4gYS5pZCA9PT0gc3RhdGUuYW53ZW5kdW5nKTsKICAgIGNvbnN0IEwgPSBbXTsKICAgIEwucHVzaCgnQW5mcmFnZSDDvGJlciBkZW4gV2Vpc3MgRml0dGluZ3MtS29uZmlndXJhdG9yJyk7CiAgICBMLnB1c2goJycpOwogICAgaWYgKGFudykgTC5wdXNoKCdBbndlbmR1bmc6ICcgKyBhbncubGFiZWwpOwogICAgTC5wdXNoKCdLb250YWt0OiAnICsgay5maXJtYSArICcgLyAnICsgay5uYW1lICsgJyAvICcgKyBrLmVtYWlsICsgKGsudGVsZWZvbiA\\\/ICcgLyAnICsgay50ZWxlZm9uIDogJycpKTsKICAgIGlmIChrLnRlcm1pbikgTC5wdXNoKCdXdW5zY2h0ZXJtaW4gLyBQcm9qZWt0OiAnICsgay50ZXJtaW4pOwogICAgTC5wdXNoKCcnKTsKICAgIHBvcy5mb3JFYWNoKChwcywgaSkgPT4gewogICAgICBMLnB1c2gocG9zTGluZShwcywgaSkpOwogICAgICBMLnB1c2goJ0tvbmZpZ3VyYXRpb25zLUxpbmsgUG9zaXRpb24gJyArIChpICsgMSkgKyAnOiAnICsgYnVpbGRTaGFyZVVybChwcykpOwogICAgICBMLnB1c2goJycpOwogICAgfSk7CiAgICAvLyBHZXNhbXRiZXRyYWcgZGVyIEFuZnJhZ2UuIEdsZWljaGUgUXVlbGxlIHdpZSBkZXIgV2FyZW5rb3JiIChjYXJ0U3VtbWFyeSksIGRhbWl0CiAgICAvLyBCaWxkc2NoaXJtIHVuZCBNYWlsIG5pY2h0IGF1c2VpbmFuZGVybGF1ZmVuIGtvZW5uZW4uCiAgICBjb25zdCBzdW0gPSBjYXJ0U3VtbWFyeShwb3MpOwogICAgaWYgKHN1bS5taXRQcmVpcykgewogICAgICBMLnB1c2goJy0tLSBHZXNhbXQgLS0tJyk7CiAgICAgIEwucHVzaCgnU3VtbWUgJyArIHN1bS5taXRQcmVpcyArICcgJyArIHBvc1dvcnQoc3VtLm1pdFByZWlzKSArICcgKCcgKyBzdW0uc3R1ZWNrICsgJyBTdMO8Y2spOiAnICsgZXVyKHN1bS5zdW1tZSkgKyAnIEVVUicpOwogICAgICBpZiAoc3VtLm9obmVQcmVpcykgTC5wdXNoKHN1bS5vaG5lUHJlaXMgKyAnICcgKyBwb3NXb3J0KHN1bS5vaG5lUHJlaXMpICsgJyBhdWYgQW5mcmFnZSwgbmljaHQgaW4gZGVyIFN1bW1lIGVudGhhbHRlbi4nKTsKICAgICAgTC5wdXNoKCcnKTsKICAgIH0KICAgIC8vIE51ciB2ZXJzcHJlY2hlbiwgd2FzIGVzIGdpYnQ6IGZ1ZXIgQmxpbmRkZWNrZWwvS2xhbW1lciAoQWJzY2huaXR0IEQpIGV4aXN0aWVydAogICAgLy8gbm9jaCBrZWluZSBiZW1hc3N0ZSBaZWljaG51bmcgLT4gZGFubiBhdWNoIGtlaW5lIFBsYW5za2l6emUgYW5rdWVuZGlnZW4uCiAgICBpZiAoc3RhdGUudHlwICYmIHBhcmFtc0ZvcihzdGF0ZSkpIEwucHVzaCgnUGxhbnNraXp6ZS9EYXRlbmJsYXR0OiDDvGJlciBkZW4gTGluayBhYnJ1ZmJhciAoQnV0dG9uICJEYXRlbmJsYXR0IGFscyBQREYiKS4nKTsKICAgIGlmIChrLmZyZWl0ZXh0KSB7IEwucHVzaCgnJyk7IEwucHVzaCgnU29uZGVyYW5mb3JkZXJ1bmdlbjogJyArIGsuZnJlaXRleHQpOyB9CiAgICBMLnB1c2goJycpOwogICAgTC5wdXNoKHN1bS5taXRQcmVpcwogICAgICA\\\/ICcoRGllIEJldHLDpGdlIHN0YW1tZW4gYXVzIGRlciBoaW50ZXJsZWd0ZW4gUHJlaXNsaXN0ZSB2b24gRmlybWEgV2Vpc3MgdW5kIHdlcmRlbiBtaXQgZGVtIEFuZ2Vib3QgdmVyYmluZGxpY2guKScKICAgICAgOiAnKFByZWlzYW5nYWJlbiBlcmZvbGdlbiBlcnN0IG1pdCBkZW0gaW5kaXZpZHVlbGxlbiBBbmdlYm90IHZvbiBGaXJtYSBXZWlzcy4pJyk7CiAgICByZXR1cm4gTC5qb2luKCdcbicpOwogIH0KCiAgZnVuY3Rpb24gcmZxU2VuZCgpIHsKICAgIGlmICghY29udGFjdFZhbGlkKCkpIHsKICAgICAgY29uc3QgZiA9ICQoJyN3ei1mb3JtJyk7IGlmIChmKSB7IGNvbnN0IGJhZCA9IHN0YXRlLmtvbnRha3QuZmlybWEudHJpbSgpID8gKHN0YXRlLmtvbnRha3QubmFtZS50cmltKCkgPyBmLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9ZW1haWxdJykgOiBmLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9bmFtZV0nKSkgOiBmLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWs9ZmlybWFdJyk7IGlmIChiYWQpIHsgYmFkLmNsYXNzTGlzdC5hZGQoJ2VycicpOyBiYWQuZm9jdXMoKTsgfSB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHBvcyA9IHBvc2l0aW9uc0ZvclJmcSgpOwogICAgY29uc3Qgc3ViaiA9ICdSRlEgJyArIChwb3NbMF0gPyBwb3NbMF0uY29kZSA6ICcnKSArIChwb3MubGVuZ3RoID4gMSA\\\/ICcgKycgKyAocG9zLmxlbmd0aCAtIDEpIDogJycpICsgJyAnICsgc3RhdGUua29udGFrdC5maXJtYTsKICAgIGNvbnN0IGhyZWYgPSAnbWFpbHRvOicgKyBELm1ldGEudmVydHJpZWJFbWFpbCArICc\\\/c3ViamVjdD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHN1YmopICsgJyZib2R5PScgKyBlbmNvZGVVUklDb21wb25lbnQoYnVpbGRSZnFCb2R5KCkpOwogICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBocmVmOwogIH0KCiAgZnVuY3Rpb24gYnVpbGRTaGFyZVVybChzb3VyY2UpIHsKICAgIGNvbnN0IHMgPSBzb3VyY2UgfHwgc3RhdGUsIHEgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCksIHR0ID0gdHlwT2JqKHMudHlwKTsKICAgIFsnYW53ZW5kdW5nJywgJ25vcm0nLCAndHlwJywgJ3JlaWhlJywgJ2dyb2Vzc2UnXS5mb3JFYWNoKGsgPT4gc1trXSAmJiBxLnNldChrLCBzW2tdKSk7CiAgICBpZiAocy5ncm9lc3NlMikgcS5zZXQoJ2dyb2Vzc2UyJywgcy5ncm9lc3NlMik7CiAgICAvLyBGbGFuc2NoLS9LbGFtbWVyLUF1c3dhaGwgKEFic2Nobml0dCBEK0UpIG1pdCBpbiBkZW4gTGluaywgc29uc3QgZ2VodCBkaWUgZWluemlnZQogICAgLy8gR3JvZXNzZW5hbmdhYmUgZWluZXMgQmxpbmRkZWNrZWxzL2VpbmVyIEtsYW1tZXIgYmVpbSBUZWlsZW4gdmVybG9yZW4uCiAgICBpZiAoaXN0TnVyRmxhbnNjaCh0dCkpIHsKICAgICAgaWYgKHMuZmxhbnNjaCkgcS5zZXQoJ2ZsYW5zY2gnLCBzLmZsYW5zY2gpOwogICAgICBpZiAoaXN0S2xhbW1lcih0dCkpIHsgaWYgKHMua2xhbW1lclR5cCkgcS5zZXQoJ2tsYW1tZXJ0eXAnLCBzLmtsYW1tZXJUeXApOyBpZiAocy5rbGFtbWVyV2Vya3N0b2ZmKSBxLnNldCgna3dlcmtzdG9mZicsIHMua2xhbW1lcldlcmtzdG9mZik7IGlmIChzLmtsYW1tZXJNdXR0ZXIpIHEuc2V0KCdrbXV0dGVyJywgcy5rbGFtbWVyTXV0dGVyKTsgfQogICAgfQogICAgaWYgKHR0ICYmIHR0LmlkID09PSAnQ0YnKSB7CiAgICAgIHEuc2V0KCdjc3RhbmRhcmQnLCBzLmNvbm5lY3ROb3JtKTsgaWYgKHMuY29ubmVjdExhZW5nZSAhPSBudWxsKSBxLnNldCgnY2xhZW5nZScsIHMuY29ubmVjdExhZW5nZSk7CiAgICB9CiAgICBpZiAodHQgJiYgdHQuaWQgPT09ICdDRkknKSBxLnNldCgnY2Fuc2NobHVzcycsIHMuY29ubmVjdEFuc2NobHVzcyk7CiAgICBpZiAodHQgJiYgdHQuaWQgPT09ICdUQycgJiYgcy5rbGFtbWVyVHlwKSBxLnNldCgna2xhbW1lcnR5cCcsIHMua2xhbW1lclR5cCk7CiAgICBxLnNldCgnd2Vya3N0b2ZmJywgcy53ZXJrc3RvZmYpOyBxLnNldCgnb2JlcmZsYWVjaGUnLCBzLm9iZXJmbGFlY2hlKTsKICAgIGlmIChzLmRpY2h0dW5nICYmIHR5cE9iaihzLnR5cCkgJiYgdHlwT2JqKHMudHlwKS5kaWNodHVuZykgcS5zZXQoJ2RpY2h0dW5nJywgcy5kaWNodHVuZyk7CiAgICBpZiAocy5kaWNodHVuZyAmJiB0dCAmJiB0dC5kaWNodHVuZykgcS5zZXQoJ2xpcHBlJywgZWZmTGlwcGUocykpOwogICAgaWYgKEFycmF5LmlzQXJyYXkocy5uYWNod2Vpc2UpICYmIHMubmFjaHdlaXNlLmxlbmd0aCkgcS5zZXQoJ25hY2h3ZWlzZScsIHMubmFjaHdlaXNlLmpvaW4oJywnKSk7CiAgICBpZiAocy5sYWVuZ2VWYXJpYW50ZSkgcS5zZXQoJ2xhZW5nZScsIHMubGFlbmdlVmFyaWFudGUpOwogICAgaWYgKHMuZXh6ZW50cmlzY2gpIHEuc2V0KCdleHonLCAnMScpOwogICAgLy8gQmF1Zm9ybTogRm9ybSBUIGlzdCBkZXIgRGVmYXVsdCB1bmQgYnJhdWNodCBrZWluZW4gUGFyYW1ldGVyLCBGb3JtIFRLIHdpcmQKICAgIC8vIHNlaXQgZGVyIE1hw59mcmVpZ2FiZSAoQmVybmQgMjcuMDcuMjAyNikgbWl0Z2V0ZWlsdC4KICAgIGlmICh0dCAmJiB0dC5mb3JtV2FobCAmJiBzLmZvcm1WYXJpYW50ZSA9PT0gJ1RLJykgcS5zZXQoJ2Zvcm0nLCAnVEsnKTsKICAgIGlmIChzLnZpZXcgIT09ICd6ZWljaG51bmcnKSBxLnNldCgndmlldycsIHMudmlldyk7CiAgICBxLnNldCgnbWVuZ2UnLCBzLm1lbmdlKTsKICAgIC8vIEluIGRlciBXb3JkUHJlc3MtQXVzZ2FiZSBsYWV1ZnQgZGFzIFdpZGdldCBhbHMgc3JjZG9jLiBEb3J0IGlzdAogICAgLy8gbG9jYXRpb24ga2VpbiB0ZWlsYmFyZXIgU2VpdGVuLUxpbmsgKGFib3V0OnNyY2RvYyBiencuIGVpbmUgZ2VlcmJ0ZSBVUkwpLAogICAgLy8gZGVzaGFsYiBnaWJ0IGRhcyBQbHVnaW4gZGllIGVjaHRlIFdvcmRQcmVzcy1TZWl0ZSBhbHMgV0VJU1NfU0hBUkVfQkFTRSBtaXQuCiAgICAvLyBGdWVyIGRlbiBzdGF0aXNjaGVuIEVtYmVkIGRpZW50IGRvY3VtZW50LnJlZmVycmVyIGFscyBGYWxsYmFjazsgc3RhbmRhbG9uZQogICAgLy8gYmxlaWJ0IGVzIGJlaSBkZXIgYWt0dWVsbGVuIFNlaXRlLiBRdWVyeSB1bmQgSGFzaCBkZXMgUmVmZXJyZXJzIHdlcmRlbgogICAgLy8gZW50ZmVybnQsIGRhbWl0IGFsdGUgS29uZmlndXJhdGlvbmVuIG5pY2h0IGluZWluYW5kZXIgdmVyc2NoYWNodGVsdCB3ZXJkZW4uCiAgICBsZXQgYmFzZSA9IHdpbmRvdy5XRUlTU19TSEFSRV9CQVNFIHx8ICcnOwogICAgaWYgKCFiYXNlICYmIGRvY3VtZW50LnJlZmVycmVyKSB7CiAgICAgIHRyeSB7IGNvbnN0IHUgPSBuZXcgVVJMKGRvY3VtZW50LnJlZmVycmVyKTsgdS5zZWFyY2ggPSAnJzsgdS5oYXNoID0gJyc7IGJhc2UgPSB1LnRvU3RyaW5nKCk7IH0gY2F0Y2ggKGUpIHt9CiAgICB9CiAgICBpZiAoIWJhc2UpIGJhc2UgPSBsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZTsKICAgIHJldHVybiBiYXNlICsgJz8nICsgcS50b1N0cmluZygpOwogIH0KICBmdW5jdGlvbiBidWlsZFNoYXJlVGV4dCgpIHsKICAgIGNvbnN0IHBvcyA9IHBvc2l0aW9uc0ZvclJmcSgpOwogICAgaWYgKHBvcy5sZW5ndGggPD0gMSkgcmV0dXJuIGJ1aWxkU2hhcmVVcmwocG9zWzBdIHx8IHN0YXRlKTsKICAgIHJldHVybiBbJ1dlaXNzIEZpdHRpbmdzLUtvbmZpZ3VyYXRpb25lbiddLmNvbmNhdCgKICAgICAgcG9zLm1hcCgocHMsIGkpID0+ICdQb3NpdGlvbiAnICsgKGkgKyAxKSArICc6ICcgKyBidWlsZFNoYXJlVXJsKHBzKSkKICAgICkuam9pbignXG4nKTsKICB9CiAgZnVuY3Rpb24gY29weURvbmUoYnRuKSB7CiAgICBpZiAoIWJ0bikgcmV0dXJuOwogICAgYnRuLmNsYXNzTGlzdC5hZGQoJ29rJyk7IGNvbnN0IG9yaWdpbmFsID0gYnRuLmlubmVySFRNTDsKICAgIGJ0bi5pbm5lckhUTUwgPSBpYygnY2hlY2snLCAnaWMnKSArICcgTGluayBrb3BpZXJ0JzsKICAgIHNldFRpbWVvdXQoKCkgPT4geyBidG4uY2xhc3NMaXN0LnJlbW92ZSgnb2snKTsgYnRuLmlubmVySFRNTCA9IG9yaWdpbmFsOyB9LCAxODAwKTsKICB9CiAgZnVuY3Rpb24gc2hvd1NoYXJlRmFsbGJhY2sodHh0KSB7CiAgICBsZXQgYm94ID0gJCgnI3d6LXNoYXJlLWZhbGxiYWNrJyk7CiAgICBpZiAoIWJveCkgewogICAgICBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgYm94LmlkID0gJ3d6LXNoYXJlLWZhbGxiYWNrJzsgYm94LmNsYXNzTmFtZSA9ICdzaGFyZS1mYWxsYmFjayc7CiAgICAgIGJveC5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0ic2hhcmUtZmFsbGJhY2stY2FyZCIgcm9sZT0iZGlhbG9nIiBhcmlhLW1vZGFsPSJ0cnVlIiBhcmlhLWxhYmVsbGVkYnk9Ind6LXNoYXJlLXRpdGxlIj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJzaGFyZS1mYWxsYmFjay1jbG9zZSIgZGF0YS1hY3Q9InNoYXJlLWNsb3NlIiBhcmlhLWxhYmVsPSJTY2hsaWXDn2VuIj7DlzwvYnV0dG9uPgogICAgICAgIDxiIGlkPSJ3ei1zaGFyZS10aXRsZSI+TGluayB6dW0gVGVpbGVuPC9iPjxwPkF1dG9tYXRpc2NoZXMgS29waWVyZW4gaXN0IGluIGRpZXNlbSBCcm93c2VyIG5pY2h0IHZlcmbDvGdiYXIuIE1hcmtpZXJlIGRlbiBUZXh0IHVuZCBrb3BpZXJlIGlobi48L3A+CiAgICAgICAgPHRleHRhcmVhIGlkPSJ3ei1zaGFyZS12YWx1ZSIgcmVhZG9ubHk+PC90ZXh0YXJlYT48L2Rpdj5gOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJveCk7CiAgICB9CiAgICBjb25zdCBmaWVsZCA9ICQoJyN3ei1zaGFyZS12YWx1ZScpOyBmaWVsZC52YWx1ZSA9IHR4dDsgYm94LmhpZGRlbiA9IGZhbHNlOyBmaWVsZC5mb2N1cygpOyBmaWVsZC5zZWxlY3QoKTsKICB9CiAgZnVuY3Rpb24gY29weVRleHQodHh0LCBidG4pIHsKICAgIGNvbnN0IGxlZ2FjeSA9ICgpID0+IHsKICAgICAgY29uc3QgdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOyB0YS52YWx1ZSA9IHR4dDsgdGEuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKTsKICAgICAgdGEuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOyB0YS5zdHlsZS5vcGFjaXR5ID0gJzAnOyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRhKTsgdGEuc2VsZWN0KCk7CiAgICAgIGxldCBvayA9IGZhbHNlOyB0cnkgeyBvayA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykgPT09IHRydWU7IH0gY2F0Y2ggKGUpIHt9IHRhLnJlbW92ZSgpOwogICAgICBpZiAob2spIGNvcHlEb25lKGJ0bik7IGVsc2Ugc2hvd1NoYXJlRmFsbGJhY2sodHh0KTsKICAgIH07CiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodHh0KS50aGVuKCgpID0+IGNvcHlEb25lKGJ0biksIGxlZ2FjeSk7CiAgICBlbHNlIGxlZ2FjeSgpOwogIH0KICBmdW5jdGlvbiBzaGFyZVRleHQodHh0LCBidG4pIHsKICAgIGlmIChuYXZpZ2F0b3Iuc2hhcmUpIHsKICAgICAgbmF2aWdhdG9yLnNoYXJlKHsgdGl0bGU6J1dlaXNzIEZpdHRpbmdzLUtvbmZpZ3VyYXRpb24nLCB0ZXh0OnR4dCB9KS5jYXRjaChlcnIgPT4gewogICAgICAgIGlmICghZXJyIHx8IGVyci5uYW1lICE9PSAnQWJvcnRFcnJvcicpIGNvcHlUZXh0KHR4dCwgYnRuKTsKICAgICAgfSk7CiAgICB9IGVsc2UgY29weVRleHQodHh0LCBidG4pOwogIH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZvbGxiaWxkICsgWm9vbSAqLwogIGNvbnN0IGZzID0geyBvcGVuOiBmYWxzZSwgejogMSwgdHg6IDAsIHR5OiAwLCBkcmFnOiBudWxsLCBwdHM6IG5ldyBNYXAoKSwgcGluY2g6IG51bGwgfTsKICBmdW5jdGlvbiBmc0Vuc3VyZSgpIHsKICAgIGlmICgkKCcjd3otZnMnKSkgcmV0dXJuOwogICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBkLmlkID0gJ3d6LWZzJzsgZC5jbGFzc05hbWUgPSAnd3otZnMnOyBkLmhpZGRlbiA9IHRydWU7CiAgICBkLmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPSJmcy1iYXIiPjxzcGFuIGNsYXNzPSJmcy1jb2RlIiBpZD0id3otZnMtY29kZSI+PC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJwdi10b2dnbGUiIGlkPSJ3ei1mcy10b2dnbGUiPjwvZGl2PgogICAgICA8c3BhbiBjbGFzcz0iZnMtaGludCI+WmllaGVuL1Njcm9sbGVuIHZlcnNjaGllYnQgwrcg4oyYL1N0cmcgKyBTY3JvbGxlbiB6b29tdCDCtyBFU0Mgc2NobGllw590PC9zcGFuPgogICAgICA8ZGl2IGNsYXNzPSJmcy16b29tIj48YnV0dG9uIGRhdGEtYWN0PSJmcy1vdXQiIGFyaWEtbGFiZWw9InZlcmtsZWluZXJuIj7iiJI8L2J1dHRvbj48c3BhbiBpZD0id3otZnMteiI+MTAwICU8L3NwYW4+PGJ1dHRvbiBkYXRhLWFjdD0iZnMtaW4iIGFyaWEtbGFiZWw9InZlcmdyw7bDn2VybiI+KzwvYnV0dG9uPjxidXR0b24gZGF0YS1hY3Q9ImZzLXJlc2V0IiBhcmlhLWxhYmVsPSJab29tIHp1csO8Y2tzZXR6ZW4iPjE6MTwvYnV0dG9uPjwvZGl2PgogICAgICA8YnV0dG9uIGNsYXNzPSJmcy1jbG9zZSIgZGF0YS1hY3Q9ImZzLWNsb3NlIiBhcmlhLWxhYmVsPSJWb2xsYmlsZCBzY2hsaWXDn2VuIj4ke2ljKCdjbG9zZScsICdpYycpfTwvYnV0dG9uPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmcy1zdGFnZSIgaWQ9Ind6LWZzLXN0YWdlIj48ZGl2IGNsYXNzPSJmcy1jYW52YXMiIGlkPSJ3ei1mcy1jYW52YXMiPjwvZGl2PjwvZGl2PmA7CiAgICBkLnRhYkluZGV4ID0gLTE7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpOwogICAgY29uc3Qgc3QgPSAkKCcjd3otZnMtc3RhZ2UnKTsKICAgIHN0LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgZSA9PiB7CiAgICAgIHN0LnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTsgZnMucHRzLnNldChlLnBvaW50ZXJJZCwgW2UuY2xpZW50WCwgZS5jbGllbnRZXSk7CiAgICAgIGlmIChmcy5wdHMuc2l6ZSA9PT0gMSkgZnMuZHJhZyA9IFtlLmNsaWVudFggLSBmcy50eCwgZS5jbGllbnRZIC0gZnMudHldOwogICAgICBlbHNlIGlmIChmcy5wdHMuc2l6ZSA9PT0gMikgeyBjb25zdCBhID0gWy4uLmZzLnB0cy52YWx1ZXMoKV07IGZzLnBpbmNoID0gTWF0aC5oeXBvdChhWzBdWzBdIC0gYVsxXVswXSwgYVswXVsxXSAtIGFbMV1bMV0pIC8gZnMuejsgZnMuZHJhZyA9IG51bGw7IH0KICAgIH0pOwogICAgc3QuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBlID0+IHsKICAgICAgaWYgKCFmcy5wdHMuaGFzKGUucG9pbnRlcklkKSkgcmV0dXJuOyBmcy5wdHMuc2V0KGUucG9pbnRlcklkLCBbZS5jbGllbnRYLCBlLmNsaWVudFldKTsKICAgICAgaWYgKGZzLnB0cy5zaXplID09PSAyICYmIGZzLnBpbmNoKSB7IGNvbnN0IGEgPSBbLi4uZnMucHRzLnZhbHVlcygpXTsgZnNab29tKE1hdGguaHlwb3QoYVswXVswXSAtIGFbMV1bMF0sIGFbMF1bMV0gLSBhWzFdWzFdKSAvIGZzLnBpbmNoKTsgfQogICAgICBlbHNlIGlmIChmcy5kcmFnKSB7IGZzLnR4ID0gZS5jbGllbnRYIC0gZnMuZHJhZ1swXTsgZnMudHkgPSBlLmNsaWVudFkgLSBmcy5kcmFnWzFdOyBmc0FwcGx5KCk7IH0KICAgIH0pOwogICAgY29uc3QgdXAgPSBlID0+IHsgZnMucHRzLmRlbGV0ZShlLnBvaW50ZXJJZCk7IGlmIChmcy5wdHMuc2l6ZSA8IDIpIGZzLnBpbmNoID0gbnVsbDsgaWYgKCFmcy5wdHMuc2l6ZSkgZnMuZHJhZyA9IG51bGw7IH07CiAgICBzdC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB1cCk7IHN0LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJjYW5jZWwnLCB1cCk7CiAgICBzdC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIGUgPT4gewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmIChwZXJmb3JtYW5jZS5ub3coKSAtIChmcy5vcGVuZWRBdCB8fCAwKSA8IDM1MCkgcmV0dXJuOyAgIC8vIFRyYWNrcGFkLU1vbWVudHVtIHZvbSBPZWZmbmVuIGlnbm9yaWVyZW4KICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIGZzWm9vbShmcy56ICogTWF0aC5leHAoLWUuZGVsdGFZICogMC4wMDIyKSk7ICAvLyBQaW5jaC9DbWQrU2Nyb2xsID0gWm9vbQogICAgICBlbHNlIHsgZnMudHggLT0gZS5kZWx0YVg7IGZzLnR5IC09IGUuZGVsdGFZOyBmc0FwcGx5KCk7IH0gICAgICAgICAgICAgICAgICAvLyBTY3JvbGwgPSBWZXJzY2hpZWJlbgogICAgfSwgeyBwYXNzaXZlOiBmYWxzZSB9KTsKICB9CiAgZnVuY3Rpb24gZnNLZXkoZSkgeyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnIHx8IGUua2V5ID09PSAnRXNjJykgeyBlLnByZXZlbnREZWZhdWx0KCk7IGZzQ2xvc2UoKTsgfSB9CiAgZnVuY3Rpb24gZnNab29tKHopIHsgZnMueiA9IE1hdGgubWF4KDAuNCwgTWF0aC5taW4oOCwgeikpOyBmc0FwcGx5KCk7IH0KICBmdW5jdGlvbiBmc0FwcGx5KCkgewogICAgY29uc3QgYyA9ICQoJyN3ei1mcy1jYW52YXMnKTsgaWYgKGMpIGMuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2Z4Mihmcy50eCl9cHgsJHtmeDIoZnMudHkpfXB4KSBzY2FsZSgke2Z4Mihmcy56KX0pYDsKICAgIGNvbnN0IHpsID0gJCgnI3d6LWZzLXonKTsgaWYgKHpsKSB6bC50ZXh0Q29udGVudCA9IE1hdGgucm91bmQoZnMueiAqIDEwMCkgKyAnICUnOwogIH0KICBjb25zdCBmeDIgPSBuID0+IE1hdGgucm91bmQobiAqIDEwMCkgLyAxMDA7CiAgZnVuY3Rpb24gZnNSZW5kZXIoKSB7CiAgICBjb25zdCBwID0gc3RhdGUudHlwID8gcGFyYW1zRm9yKHN0YXRlKSA6IG51bGw7IGlmICghcCkgcmV0dXJuOwogICAgY29uc3QgUiA9IHdpbmRvdy5XZWlzc0ZpdHRpbmdSZW5kZXI7CiAgICBjb25zdCBzdmcgPSAoc3RhdGUudmlldyA9PT0gJ2Fuc2ljaHQnICYmIFIpID8gUi5yZW5kZXJGaXR0aW5nKHAsIHsgd2lkdGg6IDEyMDAsIGhlaWdodDogNzAwIH0pIDogU1ZHLnJlbmRlckZpdHRpbmcocCwgeyB3aWR0aDogMTIwMCwgaGVpZ2h0OiA3MDAgfSk7CiAgICAkKCcjd3otZnMtY2FudmFzJykuaW5uZXJIVE1MID0gc3ZnOwogICAgJCgnI3d6LWZzLWNvZGUnKS50ZXh0Q29udGVudCA9IHR5cGVjb2RlKHN0YXRlKTsKICAgICQoJyN3ei1mcy10b2dnbGUnKS5pbm5lckhUTUwgPSBgPGJ1dHRvbiBjbGFzcz0iJHtzdGF0ZS52aWV3ID09PSAnemVpY2hudW5nJyA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0idmlldyIgZGF0YS1pZD0iemVpY2hudW5nIj5aZWljaG51bmc8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSIke3N0YXRlLnZpZXcgPT09ICdhbnNpY2h0JyA\\\/ICdzZWwnIDogJyd9IiBkYXRhLWFjdD0idmlldyIgZGF0YS1pZD0iYW5zaWNodCI+QW5zaWNodDwvYnV0dG9uPmA7CiAgfQogIGZ1bmN0aW9uIGZzT3BlbigpIHsKICAgIGlmICghc3RhdGUudHlwKSByZXR1cm47IGZzRW5zdXJlKCk7CiAgICBmcy5vcGVuID0gdHJ1ZTsgZnMueiA9IDE7IGZzLnR4ID0gMDsgZnMudHkgPSAwOyBmcy5vcGVuZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpOwogICAgY29uc3QgZCA9ICQoJyN3ei1mcycpOyBkLmhpZGRlbiA9IGZhbHNlOyBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZzS2V5LCB0cnVlKTsKICAgIGZzUmVuZGVyKCk7IGZzQXBwbHkoKTsgZC5mb2N1cygpOwogIH0KICBmdW5jdGlvbiBmc0Nsb3NlKCkgewogICAgZnMub3BlbiA9IGZhbHNlOyBjb25zdCBkID0gJCgnI3d6LWZzJyk7IGlmIChkKSBkLmhpZGRlbiA9IHRydWU7CiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJyc7CiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZzS2V5LCB0cnVlKTsKICB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbnNraXp6ZSAvIERhdGVuYmxhdHQgKEE0KSAqLwogIGNvbnN0IGZtdE1NID0gbiA9PiBuID09IG51bGwgfHwgIWlzRmluaXRlKE51bWJlcihuKSkgPyAnZm9sZ3QnIDogU3RyaW5nKE1hdGgucm91bmQoTnVtYmVyKG4pICogMTAwKSAvIDEwMCkucmVwbGFjZSgnLicsICcsJyk7CiAgZnVuY3Rpb24gZGF0YXNoZWV0Um93cygpIHsKICAgIGNvbnN0IHMgPSBzdGF0ZSwgdCA9IHR5cE9iaihzLnR5cCk7IGNvbnN0IG91dCA9IFtdOwogICAgaWYgKCF0KSByZXR1cm4gb3V0OwogICAgLy8gbnVyRmxhbnNjaCAoQmxpbmRkZWNrZWwvS2xhbW1lcik6IEVzIGdpYnQga2VpbmUgUmVpaGVuemVpbGUgLSBkaWUgTWFzc2Uga29tbWVuCiAgICAvLyBhdXMgZmxhbnNjaGdyb2Vzc2VuLiBSdW5kZSA3IChXLTA1OSk6IE1pdCBkZW4gZWNodGVuIFplaWNobnVuZ2VuIGJla29tbWVuIEJEL0tMCiAgICAvLyBhdWNoIGVpbiBEYXRlbmJsYXR0LiBFcyBlbnRoYWVsdCBudXIgYmVsZWd0ZSBNYXNzZTsgdW5iZWxlZ3RlIEZsYW5zY2hncm9lc3NlbgogICAgLy8gKDI4NiwxLzMxOS8zMzgpIGVycmVpY2hlbiBkYXMgRGF0ZW5ibGF0dCBuaWNodCwgd2VpbCBwYXJhbXNGb3IgZG9ydCBudWxsIGxpZWZlcnQuCiAgICBpZiAoaXN0TnVyRmxhbnNjaCh0KSkgewogICAgICBjb25zdCBmID0gZmxhbnNjaEZvcihzKTsgaWYgKCFmKSByZXR1cm4gb3V0OwogICAgICBvdXQucHVzaChbJ05vcm0nLCAnRElOIDMyNjc2IMK3IE9iZXJmbMOkY2hlbiBuYWNoIERJTiAxMTg2NiddKTsKICAgICAgb3V0LnB1c2goWydCYXV0ZWlsJywgdC5sYWJlbF0pOwogICAgICBvdXQucHVzaChbJ0tvbmZpZ3VyYXRpb25zLU5yLicsIHR5cGVjb2RlKHMpXSk7CiAgICAgIGNvbnN0IGFydEYgPSBhcnRpY2xlTnVtYmVyKHMpOyBpZiAoYXJ0Rikgb3V0LnB1c2goWydBcnRpa2VsLU5yLicsIGFydEZdKTsKICAgICAgb3V0LnB1c2goWydGbGFuc2NoLeKMgCcsIGYubGFiZWwgKyAnIG1tJ10pOwogICAgICBpZiAoaXN0S2xhbW1lcih0KSkgewogICAgICAgIGNvbnN0IGt0ID0ga2xhbW1lclR5cE9iaihzLmtsYW1tZXJUeXApOwogICAgICAgIGlmIChrdCkgb3V0LnB1c2goWydLbGFtbWVydHlwJywga3QubGFiZWwgKyAnIOKAkyAnICsga3Quc3ViXSk7CiAgICAgICAgb3V0LnB1c2goWydNYcOfIEEnLCBmLmtsYW1tZXJBICYmIGYua2xhbW1lckFbcy5rbGFtbWVyVHlwXSAhPSBudWxsID8gZm10TU0oZi5rbGFtbWVyQVtzLmtsYW1tZXJUeXBdKSArICcgbW0nIDogJ2F1ZiBBbmZyYWdlJ10pOwogICAgICAgIGNvbnN0IG11ID0gKEQua2xhbW1lck11dHRlcm4gfHwgW10pLmZpbmQobSA9PiBtLmlkID09PSBzLmtsYW1tZXJNdXR0ZXIpOwogICAgICAgIGlmIChtdSkgb3V0LnB1c2goWydNdXR0ZXInLCBtdS5sYWJlbCArIChtdS5hdWZwcmVpcyA\\\/ICcgKGdlZ2VuIEF1ZnByZWlzKScgOiAnJyldKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvdXQucHVzaChbJ0RlY2tlbHN0w6Rya2UgTCcsIGYuYmxpbmRUaGsgIT0gbnVsbCA\\\/IGZtdE1NKGYuYmxpbmRUaGspICsgJyBtbScgOiAnYXVmIEFuZnJhZ2UnXSk7CiAgICAgIH0KICAgICAgb3V0LnB1c2goWydXZXJrc3RvZmYnLCBlZmZXZXJrc3RvZmYocykgfHwgJ2ZvbGd0J10pOwogICAgICAvLyBSMi00OiBEaWUgS2xhbW1lciBoYXQga2VpbmUgT2JlcmZsYWVjaGUgLT4gYXVjaCBrZWluZSBPYmVyZmxhZWNoZW4tWmVpbGUgaW0gRGF0ZW5ibGF0dC4KICAgICAgaWYgKCFpc3RLbGFtbWVyKHQpKSB7CiAgICAgICAgY29uc3Qgb29GID0gRC5vYmVyZmxhZWNoZW4uZmluZChvID0+IG8uaWQgPT09IHMub2JlcmZsYWVjaGUpOwogICAgICAgIGNvbnN0IHJhRiA9IG9vRiAmJiBvb0YucmFJbm5lbiAhPSBudWxsICYmIG9vRi5yYUF1c3NlbiAhPSBudWxsOwogICAgICAgIG91dC5wdXNoKFsnT2JlcmZsw6RjaGUnLCBzLm9iZXJmbGFlY2hlICsgKHJhRiA\\\/ICcg4oCUIFJhIGlubmVuIOKJpCcgKyBTdHJpbmcob29GLnJhSW5uZW4pLnJlcGxhY2UoJy4nLCAnLCcpICsgJyAvIGF1w59lbiDiiaQnICsgU3RyaW5nKG9vRi5yYUF1c3NlbikucmVwbGFjZSgnLicsICcsJykgKyAnIMK1bScgOiAnJyldKTsKICAgICAgfQogICAgICBjb25zdCBud0YgPSBzLm5hY2h3ZWlzZS5tYXAoaWQgPT4gbmFjaHdlaXNMYWJlbEJ5SWQoaWQpKS5maWx0ZXIoQm9vbGVhbikuam9pbignLCAnKTsKICAgICAgb3V0LnB1c2goWydOYWNod2Vpc2UnLCBud0YgfHwgJ+KAlCddKTsKICAgICAgb3V0LnB1c2goWydNZW5nZScsIHMubWVuZ2UgKyAnIFN0w7xjayddKTsKICAgICAgY29uc3QgcGlGID0gcHJpY2VJbmZvKHMpOwogICAgICAvLyBXaWUgdW50ZW46IHNvbGFuZ2UgcHJlaXNlLnBsYXR6aGFsdGVyIGdpbHQsIG51ciAiYXVmIEFuZnJhZ2UiIC0ga2VpbiBFdXJvLVdlcnQuCiAgICAgIG91dC5wdXNoKFsnUHJlaXNzdGF0dXMnLCAocGlGLm1vZGUgPT09ICdsaXZlJyAmJiAhcGlGLnBsYXR6aGFsdGVyKQogICAgICAgID8gZXVyKHBpRi5zdHVlY2spICsgJyDigqwgLyBTdMO8Y2sgwrcgR2VzYW10ICcgKyBldXIocGlGLmdlc2FtdCkgKyAnIOKCrCcKICAgICAgICA6ICdhdWYgQW5mcmFnZSddKTsKICAgICAgcmV0dXJuIG91dDsKICAgIH0KICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHMpOwogICAgaWYgKCFydykgcmV0dXJuIG91dDsKICAgIGNvbnN0IG5vcm1UZXh0ID0gdC5pZCA9PT0gJ0NGJwogICAgICA\\\/IChELm1hc3NlLmNvbm5lY3QuY2YucmVpaGVuW3MuY29ubmVjdE5vcm1dIHx8IHt9KS5sYWJlbAogICAgICA6IHQuaWQgPT09ICdDRkknID8gRC5tYXNzZS5jb25uZWN0LmNmaS5ub3JtCiAgICAgIDogRC5ub3JtZW4uZmluZChuID0+IG4uaWQgPT09IHMubm9ybSkubGFiZWwgKyAnIMK3IE9iZXJmbMOkY2hlbiBuYWNoIERJTiAxMTg2Nic7CiAgICBvdXQucHVzaChbJ05vcm0nLCBub3JtVGV4dF0pOwogICAgb3V0LnB1c2goWydCYXV0ZWlsJywgdC5sYWJlbF0pOwogICAgb3V0LnB1c2goWydLb25maWd1cmF0aW9ucy1Oci4nLCB0eXBlY29kZShzKV0pOwogICAgY29uc3QgcHJvZHVrdEFydCA9IGFydGljbGVOdW1iZXIocyk7IGlmIChwcm9kdWt0QXJ0KSBvdXQucHVzaChbJ0FydGlrZWwtTnIuJywgcHJvZHVrdEFydF0pOwogICAgb3V0LnB1c2goWydHcsO2w59lJywgbGJsKHJ3KSArIChpc0Nvbm5lY3QodCkgPyAnJyA6ICcgKFJlaWhlICcgKyBzLnJlaWhlICsgJyknKV0pOwogICAgaWYgKGlzQ29ubmVjdCh0KSkgewogICAgICBvdXQucHVzaChbJ1R5cCcsIHQuaWRdKTsKICAgICAgb3V0LnB1c2goWydEZSAvIERpJywgZm10TU0ocncuRGUpICsgJyAvICcgKyBmbXRNTShydy5EaSkgKyAnIG1tJ10pOwogICAgICBpZiAodC5pZCA9PT0gJ0NGJykgewogICAgICAgIG91dC5wdXNoKFsnRGYnLCBmbXRNTShydy5EZikgKyAnIG1tJ10pOwogICAgICAgIG91dC5wdXNoKFsnRWluYmF1bMOkbmdlIEwnLCBmbXRNTShzLmNvbm5lY3RMYWVuZ2UpICsgJyBtbSddKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBlbmQgPSBjb25uZWN0RW5kRm9yKHMsIHJ3KTsKICAgICAgICBjb25zdCB1cHBlciA9IEQubWFzc2UuY29ubmVjdC5jZmkub2JlcmVyQW5zY2hsdXNzOwogICAgICAgIG91dC5wdXNoKFsnUm9ocmFuc2NobHVzcycsIHMuY29ubmVjdEFuc2NobHVzcyA9PT0gJ1RDJyA\\\/ICdUcmktQ2xhbXAnIDogJ0J1dHQgV2VsZCddKTsKICAgICAgICBvdXQucHVzaChbJ1kgLyBMJywgZm10TU0ocncuWSkgKyAnIC8gJyArIGZtdE1NKGVuZCAmJiBlbmQuTCkgKyAnIG1tJ10pOwogICAgICAgIG91dC5wdXNoKFtzLmNvbm5lY3RBbnNjaGx1c3MgPT09ICdUQycgPyAnVEMnIDogJ0EnLCBmbXRNTShlbmQgJiYgKHMuY29ubmVjdEFuc2NobHVzcyA9PT0gJ1RDJyA\\\/IGVuZC5UQyA6IGVuZC5BKSkgKyAnIG1tJ10pOwogICAgICAgIG91dC5wdXNoKFsnT2JlcmVyIEFuc2NobHVzcyBEZSAvIERpJywgZm10TU0odXBwZXIuRGUpICsgJyAvICcgKyBmbXRNTSh1cHBlci5EaSkgKyAnIG1tJ10pOwogICAgICB9CiAgICAgIGlmICghcHJvZHVrdEFydCkgb3V0LnB1c2goWydBcnRpa2VsLU5yLicsICd3aXJkIHZvbiBGaXJtYSBXZWlzcyBlcmfDpG56dCddKTsKICAgIH0gZWxzZSB7CiAgICAvLyBvZE9mOiBUQ0QgLT4gYXVzc2VuRCAoZGlja3dhbmRpZyksIHNvbnN0IHR1YmVPRC4gRGFzIERhdGVuYmxhdHQgaXN0IGVpbiBLdW5kZW5kb2t1bWVudCAtCiAgICAvLyBoaWVyIHN0YW5kIG1pdCBydy50dWJlT0QgZnVlciBUQ0QgInVuZGVmaW5lZCIgYnp3LiBkYXMgZHVlbm53YW5kaWdlIE1hc3MuCiAgICBvdXQucHVzaChbJ1JvaHIg4oyAIMOXIFdhbmRzdMOkcmtlJywgZm10TU0ob2RPZihydykpICsgJyDDlyAnICsgZm10TU0od2FsbE9mKHJ3KSkgKyAnIG1tJ10pOwogICAgaWYgKHQubm9ybSA9PT0gJ2RpbjMyNjc2JyAmJiBydy5mbGFuZ2VPRCkgb3V0LnB1c2goWydLbGVtbS0vRmxhbnNjaC3ijIAnLCBmbXRNTShydy5mbGFuZ2VPRCkgKyAnIG1tJ10pOwogICAgLy8gbGFlbmdlT2Ygc3RhdHQgc3ZnVHlwZS1BYmZyYWdlOiBUQ0QgaGF0IGtlaW4gS0svS0wsIHNvbmRlcm4gZGllIEhvZWhlIDYwIG1tLgogICAgLy8gVWViZXIgZGVuIHN2Z1R5cGUgc3RhbmQgaGllciAiU3R1dHplbmzDpG5nZSAoS0spOiB1bmRlZmluZWQgbW0iLgogICAgY29uc3QgbGdEID0gbGFlbmdlT2YodCwgcncsIHMubGFlbmdlVmFyaWFudGUpOwogICAgaWYgKGxnRCkgb3V0LnB1c2goW2xnRC50ZXh0LCBmbXRNTShsZ0Qud2VydCkgKyAnIG1tJyArIChsZ0QubGFiZWwgPT09ICdoJyA\\\/ICcgKFN0YW5kYXJkIHZvbiBGaXJtYSBXZWlzcyknIDogJycpXSk7CiAgICBpZiAodC5zdmdUeXBlID09PSAnYmxpbmRrYXBwZScpIG91dC5wdXNoKFsnRGVja2Vsc3TDpHJrZScsICdmb2xndCddKTsKICAgIGlmIChpc0JlbmQodCkpIHsKICAgICAgb3V0LnB1c2goWydCaWVnZXJhZGl1cyBSJywgZm10TU0ocncuUikgKyAnIG1tJ10pOwogICAgICBvdXQucHVzaChbdC5ib2dlbiA9PT0gNDUgPyAnR2VzYW10bWHDnyBMMicgOiAnR2VzYW10bWHDnyBMMScsIGZtdE1NKHQuYm9nZW4gPT09IDQ1ID8gcncuTDIgOiBydy5MMSkgKyAnIG1tJ10pOwogICAgICBvdXQucHVzaChbJ0dlcmFkZXMgRW5kZSBMMycsIGZtdE1NKHQuYm9nZW4gPT09IDQ1ID8gcncuTDNfNDUgOiBydy5MM185MCkgKyAnIG1tJ10pOwogICAgfQogICAgaWYgKHQuendlaXRlR3JvZXNzZSkgeyBjb25zdCByMiA9IHJvdzJGb3Iocyk7IGlmIChyMikgb3V0LnB1c2goW3Quc3ZnVHlwZSA9PT0gJ3JlZHV6aWVydW5nJyA\\\/ICdSZWR1emllcnQgYXVmJyA6ICdBYmdhbmcnLCBsYmwocjIpICsgJyDCtyDijIAgJyArIGZtdE1NKG9kT2YocjIpKSArICcgbW0nXSk7IH0KICAgIGlmICh0LmlkID09PSAnUicpIHsgY29uc3QgcGFpciA9IHJlZHVjdGlvblBhaXIocyk7IGlmIChwYWlyKSBvdXQucHVzaChbJ0JhdWzDpG5nZSBMJywgZm10TU0ocGFpci5MKSArICcgbW0nXSk7IH0KICAgIGlmICh0LmV4emVudHJpc2NoV2FobCkgb3V0LnB1c2goWydCYXVmb3JtJywgcy5leHplbnRyaXNjaCA\\\/ICdleHplbnRyaXNjaCAoRm9ybSBSRSknIDogJ2tvbnplbnRyaXNjaCAoRm9ybSBSSyknXSk7CiAgICAvLyBSMy0zL1IzLTQ6IEJhdWZvcm0gZGVyIFQtU3TDvGNrZSBpbnMgRGF0ZW5ibGF0dC4gRGFzIExhdWZtYcOfICgiTGF1ZiIgPSBMIGdlc2FtdCA9CiAgICAvLyAyw5cgTDApIGhlacOfdCBzZWl0IEJlcm5kcyBWb3JnYWJlIHZvbSAyNy4wNy4yMDI2IG51ciBub2NoICJMIiAtIHNvIHN0ZWh0IGVzIGF1Y2gKICAgIC8vIGluIGRlciBaZWljaG51bmcuIEhpZXIgc3RlaHQgbnVyIGRpZSBnZXfDpGhsdGUgRm9ybSwga2VpbiBNYcOfLgogICAgaWYgKHQuZm9ybVdhaGwpIG91dC5wdXNoKFsnQmF1Zm9ybScsIHMuZm9ybVZhcmlhbnRlID09PSAnVEsnID8gJ0Zvcm0gVEsgKER1cmNoZ2FuZyBnbGVpY2gsIEFiZ2FuZyBrdXJ6KScgOiAnRm9ybSBUIChhbGxlIEFiZ8OkbmdlIGdsZWljaCBsYW5nKSddKTsKICAgIGlmICh0LmlkID09PSAnVFMnIHx8IHQuaWQgPT09ICdUU1InKSB7CiAgICAgIC8vIE1hc3NxdWVsbGU6IFRTIC0+IER1cmNoZ2FuZ3N6ZWlsZSwgVFNSIC0+IGJlbGVndGVzIFBhYXIgKEwyL0wxIHZhcmlpZXJlbiBqZSBBYnp3ZWlnKS4KICAgICAgLy8gT2huZSBRdWVsbGUgYmxlaWJlbiBkaWUgWmVpbGVuIHdlZywgc3RhdHQgZWluICJmb2xndCIgenUgYmVoYXVwdGVuLgogICAgICBjb25zdCBzcmMgPSB0LmlkID09PSAnVFNSJyA\\\/IHRTdHVlY2tQYWlyKHMpIDogcnc7CiAgICAgIGlmIChzcmMpIHsKICAgICAgICBvdXQucHVzaChbJ0wwJywgZm10TU0oc3JjLkwwKSArICcgbW0nXSk7CiAgICAgICAgLy8gQmVybmQgMjcuMDcuMjAyNjogIkJlaSBMYXVmIG51ciBMIHNjaHJlaWJlbi4iICh2b3JoZXIgIkxhdWYgTCIpCiAgICAgICAgb3V0LnB1c2goWydMJywgZm10TU0oc3JjLkwpICsgJyBtbSddKTsKICAgICAgICAvKiBGb3JtIFQgYmVtYXNzdCBkZW4gQWJnYW5nIG1pdCBMMiwgRm9ybSBUSyBtaXQgZGVtIFdlcnQgYXVzIFNwYWx0ZSBMMQogICAgICAgICAqIChCZXJuZCAyNy4wNy4yMDI2KS4gRGFzIEvDvHJ6ZWwgZm9sZ3QgamV0enQgZGVyIEJhdWZvcm06IGJlaSBGb3JtIFRLIHN0YW5kCiAgICAgICAgICogaGllciAiQWJnYW5nIEwyIiB1bmQgZGlyZWt0IGRhcnVudGVyIGRpZXNlbGJlIFphaGwgbm9jaCBlaW5tYWwgYWxzICJMMSIgLQogICAgICAgICAqIGRhcyBEYXRlbmJsYXR0IHdpZGVyc3ByYWNoIHNpY2ggc2VsYnN0LiBCZWkgRm9ybSBUSyB0csOkZ3QgZGllIEFiZ2FuZ3N6ZWlsZQogICAgICAgICAqIGRlc2hhbGIgZGllIFRhYmVsbGVuc3BhbHRlIEwxIHNhbXQgVG9sZXJhbnogdW5kIGRpZSBFeHRyYS1aZWlsZSBlbnRmw6RsbHQ7CiAgICAgICAgICogYmVpIEZvcm0gVCBibGVpYnQgTDIgZGllIEFiZ2FuZ3N6ZWlsZSB1bmQgTDEgZGllIHp1c8OkdHpsaWNoZSBTcGFsdGUuICovCiAgICAgICAgaWYgKHMuZm9ybVZhcmlhbnRlID09PSAnVEsnKSB7CiAgICAgICAgICAvKiBPaG5lIGJlbGVndGUgU3BhbHRlIEwxIChTdHJpY2ggaW4gZGVyIFdlaXNzLVRhYmVsbGUpIGdpYnQgZXMgS0VJTiBBYmdhbmdzbWHDny4KICAgICAgICAgICAqIHRrQWJnYW5nKCkgc2V0enQgZG9ydCBuYWNoIEJlcm5kcyBSZWdlbCAwIC0gYWxzIGdlZHJ1Y2t0ZSBNYcOfemFobCBpbQogICAgICAgICAgICogS3VuZGVuZG9rdW1lbnQgd8OkcmUgZGFzIGVpbmUgZXJmdW5kZW5lIE51bGwuIERlc2hhbGIgImZvbGd0Ii4gRGllc2UgR3LDtsOfZW4KICAgICAgICAgICAqIGVycmVpY2hlbiBkYXMgRGF0ZW5ibGF0dCBoZXV0ZSBvaG5laGluIG5pY2h0IChwYXJhbXNGb3IgbGllZmVydCB2b3JoZXIgbnVsbCksCiAgICAgICAgICAgKiBkZXIgU2NodXR6IGdlaMO2cnQgdHJvdHpkZW0gYW4gZGllIFN0ZWxsZSwgZGllIGRpZSBaZWlsZSBlcnpldWd0LiAqLwogICAgICAgICAgb3V0LnB1c2goWydBYmdhbmcgTDEnLCBzcmMuTDEgIT0gbnVsbCA\\\/IFN0cmluZyhzcmMuTDEpICsgJyBtbScgOiAnZm9sZ3QnXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dC5wdXNoKFsnQWJnYW5nIEwyJywgZm10TU0oYWJnYW5nTDIocywgc3JjKSkgKyAnIG1tJ10pOwogICAgICAgICAgaWYgKHNyYy5MMSkgb3V0LnB1c2goWydMMScsIHNyYy5MMSArICcgbW0nXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB9CiAgICAvKiBUeXAgRCAoQmF1dGVpbCBEaWNodHVuZyk6IEVkZWxzdGFobC1XZXJrc3RvZmYgdW5kIE9iZXJmbGFlY2hlIGdlaG9lcmVuIG5pY2h0CiAgICAgKiBpbnMgRGF0ZW5ibGF0dCBlaW5lciBHdW1taS0vUFRGRS1EaWNodHVuZyAoQmVybmQgMTEuMDguMjAyNikuIFN0YXR0ZGVzc2VuCiAgICAgKiBzdGVoZW4gZG9ydCBkaWUgYmVpZGVuIE1hc3NlLCBkaWUgZGllIERpY2h0dW5nIHdpcmtsaWNoIGJlc2NocmVpYmVuIC0gdW5kCiAgICAgKiBkZXIgSW5uZW4tw5ggQyBoYWVuZ3QgYW0gRGljaHR1bmdzd2Vya3N0b2ZmLCBzaWVoZSBkaWNodHVuZ0lubmVuRCgpLiAqLwogICAgaWYgKGlzdERpY2h0dW5nQmF1dGVpbCh0KSkgewogICAgICBpZiAocncgJiYgcncuZ2Fza2V0T0QgIT0gbnVsbCkgb3V0LnB1c2goWydEaWNodHVuZ3MtQXXDn2VuLeKMgCBFJywgZm10TU0ocncuZ2Fza2V0T0QpICsgJyBtbSddKTsKICAgICAgY29uc3QgY0QgPSBkaWNodHVuZ0lubmVuRChzLCBydyk7CiAgICAgIGlmIChjRCAhPSBudWxsKSBvdXQucHVzaChbJ0RpY2h0dW5ncy1Jbm5lbi3ijIAgQycsIGZtdE1NKGNEKSArICcgbW0nXSk7CiAgICB9IGVsc2UgewogICAgICBvdXQucHVzaChbJ1dlcmtzdG9mZicsIHMud2Vya3N0b2ZmICsgJyAoJyArIChzLndlcmtzdG9mZiA9PT0gJzEuNDQzNScgPyAnWDJDck5pTW8xOC0xNC0zJyA6ICdYMkNyTmlNbzE3LTEyLTInKSArICcpJ10pOwogICAgICBjb25zdCBvbyA9IEQub2JlcmZsYWVjaGVuLmZpbmQobyA9PiBvLmlkID09PSBzLm9iZXJmbGFlY2hlKTsKICAgICAgLy8gU2llaGUgUkZRLU1haWw6IFJhIG51ciBiZWkgYmVzdGFldGlndGVuIFdlcnRlbi4gSDEgaGF0IGtlaW5lbiBmZXN0ZW4gUmEtR3Jlbnp3ZXJ0CiAgICAgIC8vIChyYUlubmVuL3JhQXVzc2VuID0gbnVsbCkgLT4gaW4gZGVyIFBsYW5za2l6emUgc3RlaHQgZGFubiBudXIgIkgxIi4KICAgICAgY29uc3QgcmFPazIgPSBvbyAmJiBvby5yYUlubmVuICE9IG51bGwgJiYgb28ucmFBdXNzZW4gIT0gbnVsbDsKICAgICAgb3V0LnB1c2goWydPYmVyZmzDpGNoZScsIHMub2JlcmZsYWVjaGUgKyAocmFPazIgPyAnIOKAlCBSYSBpbm5lbiDiiaQnICsgU3RyaW5nKG9vLnJhSW5uZW4pLnJlcGxhY2UoJy4nLCAnLCcpICsgJyAvIGF1w59lbiDiiaQnICsgU3RyaW5nKG9vLnJhQXVzc2VuKS5yZXBsYWNlKCcuJywgJywnKSArICcgwrVtJyA6ICcnKV0pOwogICAgfQogICAgLy8gS29uZm9ybWl0YWV0cy1adXNhdHogZm9sZ3QgZGVyIEFud2VuZHVuZyAoQmVybmQgMTEuMDguMjAyNiksIGZydWVoZXIgc3RhbmQgaGllcgogICAgLy8gZnVlciBhbGxlIHZpZXIgQW53ZW5kdW5nZW4gIlVTUCBDbGFzcyBWSSIuCiAgICBpZiAodC5kaWNodHVuZyAmJiBzLmRpY2h0dW5nKSB7CiAgICAgIGNvbnN0IGRkID0gZGljaHRPYmoocy5kaWNodHVuZyksIGZrID0gZmRhS3VyelRleHQoKTsKICAgICAgb3V0LnB1c2goWydEaWNodHVuZycsIGRkLmxhYmVsICsgKGRkLmZkYSA9PT0gdHJ1ZSA\\\/ICcgwrcgRkRBJyA6ICcnKSArICgoZGQudXNwVkkgPT09IHRydWUgJiYgZmspID8gJyDCtyAnICsgZmsgOiAnJyldKTsKICAgIH0KICAgIC8vIERydWNrc3RhZmZlbCBnaWx0IGZ1ZXIgZGllIERVRU5OV0FORElHRSBESU4tMzI2NzYtUmVpaGUgKFN0YWZmZWwgbmFjaCBSb2hyLUFEKS4KICAgIC8vIEZ1ZXIgZGVuIGRpY2t3YW5kaWdlbiBUQ0QgKGtlaW4gdHViZU9EKSBsaWVndCBrZWluZSBEcnVja2FuZ2FiZSB2b3IgLT4gImZvbGd0Ii4KICAgIC8vIERlbiBkaWNrd2FuZGlnZW4gYXVzc2VuRCBpbiBkaWVzZSBTdGFmZmVsIHp1IHN0ZWNrZW4gd2FlcmUgZ2VyYXRlbiAodW5kIHdlaWNodAogICAgLy8gdGVpbHdlaXNlIGFiLCB6LiBCLiBUQ0QvRE40MDogYXVzc2VuRCA0NiAtPiAxNiBiYXIgdnMuIGR1ZW5ud2FuZGlnIOKMgDQxIC0+IDI1IGJhcikuCiAgICAvLyBEZXIgVGVtcGVyYXR1cmJlcmVpY2ggaGFlbmd0IGRhZ2VnZW4gbmljaHQgYW0gQUQsIHNvbmRlcm4gYW4gS2xhbW1lci9EaWNodHVuZwogICAgLy8gKEQuZWluc2F0ei50ZW1wSGlud2VpcykgdW5kIGdpbHQgZnVlciBkaWUgQ2xhbXB2ZXJiaW5kdW5nIG5hY2ggRElOIDMyNjc2IGdlbmVyZWxsLgogICAgaWYgKHQuaWQgPT09ICdUQycgJiYgRC5laW5zYXR6ICYmIEQuZWluc2F0ei5kcnVja0JhbmRzKSB7CiAgICAgIGNvbnN0IGViID0gcncudHViZU9EICE9IG51bGwgPyBELmVpbnNhdHouZHJ1Y2tCYW5kcy5maW5kKGIgPT4gcncudHViZU9EIDw9IGIuYWRNYXgpIDogbnVsbDsKICAgICAgb3V0LnB1c2goWydadWzDpHNzaWdlciBEcnVjaycsIGViCiAgICAgICAgPyAnYmlzICcgKyBlYi5iYXIgKyAnIGJhciAoJyArIFN0cmluZyhlYi5tcGEpLnJlcGxhY2UoJy4nLCAnLCcpICsgJyBNUGEpIG5hY2ggRElOIDMyNjc2JwogICAgICAgIDogJ2ZvbGd0J10pOwogICAgICBvdXQucHVzaChbJ1RlbXBlcmF0dXJiZXJlaWNoJywgRC5laW5zYXR6LnRlbXBNaW4gKyAnIGJpcyAnICsgRC5laW5zYXR6LnRlbXBNYXggKyAnIMKwQyDCtyAnICsgRC5laW5zYXR6LnRlbXBIaW53ZWlzXSk7CiAgICB9CiAgICBjb25zdCBudyA9IHMubmFjaHdlaXNlLm1hcChpZCA9PiBuYWNod2Vpc0xhYmVsQnlJZChpZCkpLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpOwogICAgb3V0LnB1c2goWydOYWNod2Vpc2UnLCBudyB8fCAn4oCUJ10pOwogICAgb3V0LnB1c2goWydNZW5nZScsIHMubWVuZ2UgKyAnIFN0w7xjayddKTsKICAgIGNvbnN0IHBpID0gcHJpY2VJbmZvKHMpOwogICAgLy8gRGFzIERhdGVuYmxhdHQgaXN0IGVpbiBoZXJ1bnRlcmxhZGJhcmVzIEt1bmRlbmRva3VtZW50IC0+IGhpZXIgZGFyZiBOSUUgZWluZQogICAgLy8gUGxhdHpoYWx0ZXItWmFobCBzdGVoZW4uIFNvbGFuZ2UgcHJlaXNlLnBsYXR6aGFsdGVyIGdpbHQsIG51ciAiUmljaHRwcmVpcyBmb2xndCIKICAgIC8vIChnbGVpY2hlIExvZ2lrIHdpZSBWb3JzY2hhdSB1bmQgQW5mcmFnZS1NYWlsKS4gS2VpbiBFdXJvLVdlcnQsIGtlaW4gU3VmZml4LgogICAgb3V0LnB1c2goWydQcmVpc3N0YXR1cycsIChwaS5tb2RlID09PSAnbGl2ZScgJiYgIXBpLnBsYXR6aGFsdGVyKQogICAgICA\\\/IGV1cihwaS5zdHVlY2spICsgJyDigqwgLyBTdMO8Y2sgwrcgR2VzYW10ICcgKyBldXIocGkuZ2VzYW10KSArICcg4oKsJwogICAgICA6ICdhdWYgQW5mcmFnZSddKTsKICAgIHJldHVybiBvdXQ7CiAgfQogIGZ1bmN0aW9uIGJ1aWxkRGF0YXNoZWV0KHNraXBQcmludCkgewogICAgY29uc3QgcCA9IHN0YXRlLnR5cCA\\\/IHBhcmFtc0ZvcihzdGF0ZSkgOiBudWxsOyBpZiAoIXApIHJldHVybjsKICAgIGxldCBkcyA9ICQoJyN3ei1kcycpOyBpZiAoIWRzKSB7IGRzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGRzLmlkID0gJ3d6LWRzJzsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkcyk7IH0KICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ2RlLURFJyk7CiAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7CiAgICBjb25zdCBub3JtUmVmID0gdCAmJiB0LmlkID09PSAnQ0YnID8gKEQubWFzc2UuY29ubmVjdC5jZi5yZWloZW5bc3RhdGUuY29ubmVjdE5vcm1dIHx8IHt9KS5sYWJlbAogICAgICA6IHQgJiYgdC5pZCA9PT0gJ0NGSScgPyBELm1hc3NlLmNvbm5lY3QuY2ZpLm5vcm0KICAgICAgOiBzdGF0ZS5ub3JtID09PSAnZGluMzI2NzYnID8gJ0RJTiAzMjY3NiDCtyBESU4gMTE4NjYnIDogJ0RJTiAxMTg2NSDCtyBESU4gMTE4NjYnOwogICAgY29uc3Qgcm93cyA9IGRhdGFzaGVldFJvd3MoKS5tYXAoKFtrLCB2XSkgPT4gYDx0cj48dGQ+JHtlc2Moayl9PC90ZD48dGQ+JHtlc2Modil9PC90ZD48L3RyPmApLmpvaW4oJycpOwogICAgY29uc3QgUiA9IHdpbmRvdy5XZWlzc0ZpdHRpbmdSZW5kZXI7CiAgICBkcy5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz0iZHMtaGVhZCI+CiAgICAgIDxkaXYgY2xhc3M9ImRzLWJyYW5kIj48c3BhbiBjbGFzcz0ibWFyayI+PC9zcGFuPjxzcGFuPjxiPldFSVNTPC9iPjxpPkFwcGFyYXRlYmF1IMK3IFN0ZXJpbHRlY2huaWs8L2k+PC9zcGFuPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJkcy1tZXRhIj48Yj5QbGFuc2tpenplIC8gRGF0ZW5ibGF0dDwvYj48c3Bhbj4ke2VzYyh0eXBlY29kZShzdGF0ZSkpfTwvc3Bhbj48c3Bhbj4ke3RvZGF5fTwvc3Bhbj48L2Rpdj48L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZHMtZHJhdyI+JHtTVkcucmVuZGVyRml0dGluZyhwLCB7IHdpZHRoOiA3NjAsIGhlaWdodDogNDMwIH0pfTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJkcy1ncmlkIj48ZGl2IGNsYXNzPSJkcy1yZW5kZXIiPiR7UiA\\\/IFIucmVuZGVyRml0dGluZyhwLCB7IHdpZHRoOiA1MjAsIGhlaWdodDogMzQwIH0pIDogJyd9PC9kaXY+CiAgICAgIDx0YWJsZSBjbGFzcz0iZHMtdGFibGUiPjx0Ym9keT4ke3Jvd3N9PC90Ym9keT48L3RhYmxlPjwvZGl2PgogICAgICA8dGFibGUgY2xhc3M9ImRzLXRpdGxlYmxvY2siPjx0Ym9keT48dHI+CiAgICAgICAgPHRkPjxpPlplaWNobnVuZ3MtTnIuPC9pPjxiPiR7ZXNjKHR5cGVjb2RlKHN0YXRlKSl9PC9iPjwvdGQ+CiAgICAgICAgPHRkPjxpPkRhdHVtPC9pPjxiPiR7dG9kYXl9PC9iPjwvdGQ+CiAgICAgICAgPHRkPjxpPk1hw59zdGFiPC9pPjxiPm9obmUgTWHDn3N0YWI8L2I+PC90ZD4KICAgICAgICA8dGQ+PGk+RWluaGVpdDwvaT48Yj5tbTwvYj48L3RkPgogICAgICAgIDx0ZD48aT5Ob3JtYmV6dWc8L2k+PGI+JHtlc2Mobm9ybVJlZil9PC9iPjwvdGQ+CiAgICAgIDwvdHI+PC90Ym9keT48L3RhYmxlPgogICAgICA8cCBjbGFzcz0iZHMtbm90ZSI+VW52ZXJiaW5kbGljaGUgUGxhbnNraXp6ZSBhdXMgZGVtIFdlaXNzIEZpdHRpbmdzLUtvbmZpZ3VyYXRvciwgU2NocmlmdGZlbGQgYW5nZWxlaG50IGFuIERJTiBFTiBJU08gNzIwMC4gTWHDn2Ugc2luZCBSaWNodHdlcnRlIGJpcyB6dXIgQXVmdHJhZ3NiZXN0w6R0aWd1bmcg4oCUIHZlcmJpbmRsaWNoZSBGZXJ0aWd1bmdzemVpY2hudW5nIHVuZCBBdXNsZWd1bmcgZHVyY2ggV2Vpc3MgQXBwYXJhdGViYXUuIEFsbGUgTWHDn2UgaW4gbW0uPC9wPmA7CiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3d6LXByaW50aW5nJyk7CiAgICBpZiAoc2tpcFByaW50KSByZXR1cm47CiAgICBjb25zdCBkb25lID0gKCkgPT4gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCd3ei1wcmludGluZycpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2FmdGVycHJpbnQnLCBkb25lLCB7IG9uY2U6IHRydWUgfSk7CiAgICB3aW5kb3cucHJpbnQoKTsKICB9CgogIGZ1bmN0aW9uIHNvbmRlckFuZnJhZ2UoKSB7CiAgICBjb25zdCB0ID0gdHlwT2JqKHN0YXRlLnR5cCk7CiAgICBjb25zdCBzdWJqID0gJ0FuZnJhZ2UgU29uZGVyYWJtZXNzdW5nJyArICh0ID8gJyAnICsgdC5sYWJlbCA6ICcnKSArIChzdGF0ZS5ncm9lc3NlID8gJyAnICsgbGJsKHJvd0ZvcihzdGF0ZSkpIDogJycpOwogICAgY29uc3QgYm9keSA9IFsnQW5mcmFnZSBmw7xyIGVpbmUgU29uZGVyYWJtZXNzdW5nIMO8YmVyIGRlbiBXZWlzcyBGaXR0aW5ncy1Lb25maWd1cmF0b3InLCAnJywKICAgICAgJ0Jhc2lzLUtvbmZpZ3VyYXRpb246Jywgc3RhdGUudHlwID8gdHlwZWNvZGUoc3RhdGUpIDogJyhub2NoIGtlaW5lIGdld8OkaGx0KScsICcnLAogICAgICAnR2V3w7xuc2NodGUgQWJ3ZWljaHVuZyAvIFNvbmRlcm1hw586JywgJyAgJywgJycsICdLb250YWt0IChGaXJtYSAvIE5hbWUgLyBFLU1haWwpOicsICcgICddLmpvaW4oJ1xuJyk7CiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdtYWlsdG86JyArIEQubWV0YS52ZXJ0cmllYkVtYWlsICsgJz9zdWJqZWN0PScgKyBlbmNvZGVVUklDb21wb25lbnQoc3ViaikgKyAnJmJvZHk9JyArIGVuY29kZVVSSUNvbXBvbmVudChib2R5KTsKICB9CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZlbnRzICovCiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgY29uc3QgYiA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFjdF0nKTsgaWYgKCFiIHx8IGIuZGlzYWJsZWQpIHJldHVybjsKICAgIGNvbnN0IGFjdCA9IGIuZ2V0QXR0cmlidXRlKCdkYXRhLWFjdCcpLCBpZCA9IGIuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7CiAgICBzd2l0Y2ggKGFjdCkgewogICAgICBjYXNlICdhbndlbmR1bmcnOiBzZXRBbndlbmR1bmcoaWQpOyBpZiAoc3RhdGUuc3RlcCA9PT0gMSkgbmV4dFN0ZXAoKTsgYnJlYWs7CiAgICAgIGNhc2UgJ25vcm0nOiBzZXROb3JtKGlkKTsgaWYgKHN0YXRlLnN0ZXAgPT09IDIpIG5leHRTdGVwKCk7IGJyZWFrOwogICAgICBjYXNlICd0eXAnOiBzZXRUeXAoaWQpOyBpZiAoc3RhdGUuc3RlcCA9PT0gMykgbmV4dFN0ZXAoKTsgYnJlYWs7CiAgICAgIGNhc2UgJ3JlaWhlJzogc2V0UmVpaGUoaWQpOyBicmVhazsKICAgICAgY2FzZSAnY29ubmVjdG5vcm0nOiBzZXRDb25uZWN0Tm9ybShpZCk7IGJyZWFrOwogICAgICBjYXNlICdjb25uZWN0bGFlbmdlJzogc2V0Q29ubmVjdExhZW5nZShpZCk7IGJyZWFrOwogICAgICBjYXNlICdjb25uZWN0YW5zY2hsdXNzJzogc2V0Q29ubmVjdEFuc2NobHVzcyhpZCk7IGJyZWFrOwogICAgICAvLyBLbGFtbWVydHlwIChBYnNjaG5pdHQgRSk6IEtMMSAvIEtMTEkgLyBLTEggLSB6aWVodCBnZ2YuIGRlbiBLbGFtbWVyLVdlcmtzdG9mZiBuYWNoLgogICAgICBjYXNlICdrbGFtbWVydHlwJzogc2V0S2xhbW1lclR5cChpZCk7IGJyZWFrOwogICAgICAvLyBNdXR0ZXItQXJ0IGRlciBLbGFtbWVyIChSMi00KTogTSA9IE11dHRlciAoU3RhbmRhcmQpIC8gUyA9IFNlY2hza2FudG11dHRlciAoQXVmcHJlaXMpLgogICAgICBjYXNlICdrbGFtbWVybXV0dGVyJzogc2V0S2xhbW1lck11dHRlcihpZCk7IGJyZWFrOwogICAgICBjYXNlICd3ZXJrc3RvZmYnOiBzZXRXZXJrc3RvZmYoaWQpOyBicmVhazsKICAgICAgY2FzZSAnb2JlcmZsYWVjaGUnOiBzZXRPYmVyZmxhZWNoZShpZCk7IGJyZWFrOwogICAgICBjYXNlICdkaWNodHVuZyc6IHBpY2soeyBkaWNodHVuZzogaWQgfSk7IGJyZWFrOwogICAgICBjYXNlICdsYWVuZ2UnOiBwaWNrKHsgbGFlbmdlVmFyaWFudGU6IGlkIH0pOyBicmVhazsKICAgICAgY2FzZSAnbGlwcGUnOiBwaWNrKHsgbGlwcGU6IGlkIH0pOyBicmVhazsKICAgICAgY2FzZSAnc29uZGVyJzogc29uZGVyQW5mcmFnZSgpOyBicmVhazsKICAgICAgLy8gQTU6IGVyc3RlciBLbGljayBzY2hhZXJmdCwgendlaXRlciBzZXR6dCB6dXJ1ZWNrIChzaWVoZSBhcm1SZXNldCgpKS4KICAgICAgY2FzZSAncmVzZXQnOiBpZiAoYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYXJtZWQnKSA9PT0gJzEnKSByZXNldEtvbmZpZ3VyYXRpb24oKTsgZWxzZSBhcm1SZXNldChiKTsgYnJlYWs7CiAgICAgIGNhc2UgJ3ZpZXcnOiBwaWNrKHsgdmlldzogaWQgfSk7IGlmIChmcy5vcGVuKSBmc1JlbmRlcigpOyBicmVhazsKICAgICAgY2FzZSAnZnMtb3Blbic6IGZzT3BlbigpOyBicmVhazsKICAgICAgY2FzZSAnZnMtY2xvc2UnOiBmc0Nsb3NlKCk7IGJyZWFrOwogICAgICBjYXNlICdmcy1pbic6IGZzWm9vbShmcy56ICogMS4yNSk7IGJyZWFrOwogICAgICBjYXNlICdmcy1vdXQnOiBmc1pvb20oZnMueiAvIDEuMjUpOyBicmVhazsKICAgICAgY2FzZSAnZnMtcmVzZXQnOiBmcy56ID0gMTsgZnMudHggPSAwOyBmcy50eSA9IDA7IGZzQXBwbHkoKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2V4eic6IHBpY2soeyBleHplbnRyaXNjaDogaWQgPT09ICd0cnVlJyB9KTsgYnJlYWs7CiAgICAgIC8vIFIzLTMvUjMtNDogQmF1Zm9ybSBUIC8gVEsgZGVyIFQtU3TDvGNrZS4KICAgICAgY2FzZSAnZm9ybXZhcic6IGlmIChpZCA9PT0gJ1QnIHx8IGlkID09PSAnVEsnKSBwaWNrKHsgZm9ybVZhcmlhbnRlOiBpZCB9KTsgYnJlYWs7CiAgICAgIGNhc2UgJ25hY2h3ZWlzJzogewogICAgICAgIGNvbnN0IGkgPSBzdGF0ZS5uYWNod2Vpc2UuaW5kZXhPZihpZCk7CiAgICAgICAgaWYgKGkgPj0gMCkgc3RhdGUubmFjaHdlaXNlLnNwbGljZShpLCAxKTsgZWxzZSBzdGF0ZS5uYWNod2Vpc2UucHVzaChpZCk7CiAgICAgICAgcmVuZGVyUGFuZWwoKTsgcmVuZGVyUHJldmlldygpOyByZW5kZXJOYXYoKTsgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAnbWVuZ2UrJzogc2V0TWVuZ2Uoc3RhdGUubWVuZ2UgKyAxKTsgYnJlYWs7CiAgICAgIGNhc2UgJ21lbmdlLSc6IHNldE1lbmdlKHN0YXRlLm1lbmdlIC0gMSk7IGJyZWFrOwogICAgICBjYXNlICdzdGFmZmVsJzogc2V0TWVuZ2UocGFyc2VJbnQoYi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWInKSwgMTApKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2dvdG8nOiBnbyhwYXJzZUludChiLmdldEF0dHJpYnV0ZSgnZGF0YS1uJyksIDEwKSk7IGJyZWFrOwogICAgICBjYXNlICduZXh0JzogbmV4dFN0ZXAoKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2JhY2snOiBwcmV2U3RlcCgpOyBicmVhazsKICAgICAgY2FzZSAnY29weWNvZGUnOiBjb3B5VGV4dCh0eXBlY29kZShzdGF0ZSksIGIpOyBicmVhazsKICAgICAgY2FzZSAnc2hhcmUnOiBzaGFyZVRleHQoYnVpbGRTaGFyZVRleHQoKSwgYik7IGJyZWFrOwogICAgICBjYXNlICdzaGFyZS1jbG9zZSc6IHsgY29uc3QgYm94ID0gJCgnI3d6LXNoYXJlLWZhbGxiYWNrJyk7IGlmIChib3gpIGJveC5oaWRkZW4gPSB0cnVlOyBicmVhazsgfQogICAgICBjYXNlICdwZGYnOiBidWlsZERhdGFzaGVldCgpOyBicmVhazsKICAgICAgY2FzZSAnYWRkcG9zJzogYWRkUG9zaXRpb24oKTsgYnJlYWs7CiAgICAgIGNhc2UgJ2RlbHBvcyc6IHN0YXRlLnBvc2l0aW9uZW4uc3BsaWNlKHBhcnNlSW50KGIuZ2V0QXR0cmlidXRlKCdkYXRhLWknKSwgMTApLCAxKTsgcmVuZGVyUGFuZWwoKTsgYnJlYWs7CiAgICAgIGNhc2UgJ3NlbmQnOiByZnFTZW5kKCk7IGJyZWFrOwogICAgfQogIH0pOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uIChlKSB7CiAgICBjb25zdCByID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlICYmIGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1yb2xlJyk7CiAgICBpZiAociA9PT0gJ3NpemUnKSBzZXRHcm9lc3NlKGUudGFyZ2V0LnZhbHVlKTsKICAgIGVsc2UgaWYgKHIgPT09ICdzaXplMicpIHBpY2soeyBncm9lc3NlMjogZS50YXJnZXQudmFsdWUgfSk7CiAgICAvLyBGbGFuc2NoLcOYIChBYnNjaG5pdHQgRCk6IGVpbnppZ2VzIEdyb2Vzc2VubWVya21hbCBiZWkgQmxpbmRkZWNrZWwgKyBLbGFtbWVyLgogICAgZWxzZSBpZiAociA9PT0gJ2ZsYW5zY2gnKSBzZXRGbGFuc2NoKGUudGFyZ2V0LnZhbHVlKTsKICAgIGVsc2UgaWYgKHIgPT09ICdtZW5nZScpIHNldE1lbmdlKHBhcnNlSW50KGUudGFyZ2V0LnZhbHVlLCAxMCkpOwogIH0pOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKGUpIHsKICAgIGlmIChlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXJvbGUnKSA9PT0gJ21lbmdlJykgewogICAgICBjb25zdCB2ID0gcGFyc2VJbnQoZS50YXJnZXQudmFsdWUsIDEwKTsgaWYgKGlzRmluaXRlKHYpICYmIHYgPj0gMSkgeyBzdGF0ZS5tZW5nZSA9IHY7IHJlbmRlclByZXZpZXcoKTsgcmVuZGVyTmF2KCk7IH0KICAgIH0KICB9KTsKICBmdW5jdGlvbiBzZXRNZW5nZSh2KSB7IHN0YXRlLm1lbmdlID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oMTAwMDAwLCBpc0Zpbml0ZSh2KSA\\\/IHYgOiAxKSk7IHJlbmRlclBhbmVsKCk7IHJlbmRlclByZXZpZXcoKTsgcmVuZGVyTmF2KCk7IH0KCiAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcmVmaWxsIChGdW5uZWwtVWViZXJnYWJlKSAqLwogIC8vIHNyY2RvYy1FaW5iZXR0dW5nIChXUC1QbHVnaW4pIGhhdCBrZWluIGxvY2F0aW9uLnNlYXJjaCAtPiB3aW5kb3cuV0VJU1NfUFJFTE9BRCBhbHMgRmFsbGJhY2suCiAgZnVuY3Rpb24gcHJlbG9hZFF1ZXJ5KCkgewogICAgY29uc3QgcyA9IChsb2NhdGlvbi5zZWFyY2ggJiYgbG9jYXRpb24uc2VhcmNoLmxlbmd0aCA+IDEpID8gbG9jYXRpb24uc2VhcmNoIDogKHdpbmRvdy5XRUlTU19QUkVMT0FEIHx8ICcnKTsKICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHMpOwogIH0KICBmdW5jdGlvbiBwcmVmaWxsKCkgewogICAgY29uc3QgcSA9IHByZWxvYWRRdWVyeSgpOyBpZiAoIVsuLi5xLmtleXMoKV0ubGVuZ3RoKSByZXR1cm47CiAgICBjb25zdCBzZXQgPSAoaywgYWxsb3cpID0+IHsgY29uc3QgdiA9IHEuZ2V0KGspOyBpZiAodiAmJiAoIWFsbG93IHx8IGFsbG93LmluZGV4T2YodikgPj0gMCkpIHJldHVybiB2OyByZXR1cm4gbnVsbDsgfTsKICAgIGNvbnN0IGFudyA9IHNldCgnYW53ZW5kdW5nJywgRC5hbndlbmR1bmdlbi5tYXAoYSA9PiBhLmlkKSk7IGlmIChhbncpIHNldEFud2VuZHVuZ1NpbGVudChhbncpOwogICAgY29uc3Qgbm9ybSA9IHNldCgnbm9ybScsIEQubm9ybWVuLm1hcChuID0+IG4uaWQpKTsgaWYgKG5vcm0pIHN0YXRlLm5vcm0gPSBub3JtOwogICAgY29uc3QgdHlwID0gc2V0KCd0eXAnLCBELnR5cGVuLmZpbHRlcih0ID0+IHQuYWt0aXYgJiYgIWlzVHlwZUJsb2NrZWQodCkpLm1hcCh0ID0+IHQuaWQpKTsKICAgIGlmICh0eXAgJiYgdHlwT2JqKHR5cCkgJiYgdHlwT2JqKHR5cCkubm9ybSA9PT0gc3RhdGUubm9ybSkgc3RhdGUudHlwID0gdHlwOwogICAgY29uc3QgcmVpaGUgPSBzZXQoJ3JlaWhlJywgWydBJywgJ0InLCAnQyddKTsgaWYgKHJlaWhlKSBzdGF0ZS5yZWloZSA9IHJlaWhlOwogICAgLy8gQWJzY2huaXR0IEQrRTogQmxpbmRkZWNrZWwvS2xhbW1lciBrZW5uZW4ga2VpbmUgUmVpaGUvTmVubndlaXRlIC0gbnVyIEZsYW5zY2gtw5gKICAgIC8vICgrIEtsYW1tZXJ0eXAvLVdlcmtzdG9mZikuIERlc2hhbGIgaGllciBnZXRyZW5udCB2b20gUmVpaGVuLS9Hcm9lc3Nlbi1QZmFkLgogICAgY29uc3QgdFByZSA9IHR5cE9iaihzdGF0ZS50eXApOwogICAgaWYgKHRQcmUgJiYgIWlzQ29ubmVjdCh0UHJlKSAmJiAhaXN0TnVyRmxhbnNjaCh0UHJlKSAmJiAhcmVpaGVBdmFpbGFibGUodFByZSwgc3RhdGUucmVpaGUpKSBzdGF0ZS5yZWloZSA9ICdBJzsKICAgIGlmIChzdGF0ZS50eXAgJiYgaXN0TnVyRmxhbnNjaCh0UHJlKSkgewogICAgICBjb25zdCBmbCA9IHNldCgnZmxhbnNjaCcsIChELmZsYW5zY2hncm9lc3NlbiB8fCBbXSkubWFwKHggPT4geC5pZCkpOwogICAgICBzdGF0ZS5mbGFuc2NoID0gZmwgfHwgKChELmZsYW5zY2hncm9lc3NlbiB8fCBbXSlbMF0gfHwge30pLmlkIHx8IG51bGw7CiAgICAgIGlmIChpc3RLbGFtbWVyKHRQcmUpKSB7CiAgICAgICAgY29uc3Qga3QgPSBzZXQoJ2tsYW1tZXJ0eXAnLCAoRC5rbGFtbWVyVHlwZW4gfHwgW10pLm1hcCh4ID0+IHguaWQpKTsKICAgICAgICBpZiAoa3QpIHN0YXRlLmtsYW1tZXJUeXAgPSBrdDsKICAgICAgICBjb25zdCBrdE8gPSBrbGFtbWVyVHlwT2JqKHN0YXRlLmtsYW1tZXJUeXApOwogICAgICAgIGNvbnN0IGt3ID0gc2V0KCdrd2Vya3N0b2ZmJywgKEQua2xhbW1lcldlcmtzdG9mZmUgfHwgW10pLm1hcCh4ID0+IHguaWQpKTsKICAgICAgICAvLyBXZXJrc3RvZmYgbnVyIHVlYmVybmVobWVuLCB3ZW5uIGRlciBnZXdhZWhsdGUgS2xhbW1lcnR5cCBpaG4gbGF1dCBCZXJuZHMgTGlzdGUKICAgICAgICAvLyB6dWxhZXNzdCAtIGVpbiBMaW5rIGRhcmYga2VpbmUgS29tYmluYXRpb24gZXJ6ZXVnZW4sIGRpZSBlcyBuaWNodCBnaWJ0LgogICAgICAgIGlmIChrdyAmJiBrdE8gJiYga3RPLndlcmtzdG9mZmUuaW5kZXhPZihrdykgPj0gMCkgc3RhdGUua2xhbW1lcldlcmtzdG9mZiA9IGt3OwogICAgICAgIGVsc2UgaWYgKGt0TyAmJiBrdE8ud2Vya3N0b2ZmZS5pbmRleE9mKHN0YXRlLmtsYW1tZXJXZXJrc3RvZmYpIDwgMCkgc3RhdGUua2xhbW1lcldlcmtzdG9mZiA9IGt0Ty53ZXJrc3RvZmZlWzBdOwogICAgICAgIC8vIE11dHRlci1BcnQgYXVzIGRlbSBMaW5rIChSMi00KTogbnVyIHVlYmVybmVobWVuLCB3ZW5uIGVzIGRpZSBPcHRpb24gZ2lidC4KICAgICAgICBjb25zdCBrbSA9IHNldCgna211dHRlcicsIChELmtsYW1tZXJNdXR0ZXJuIHx8IFtdKS5tYXAoeCA9PiB4LmlkKSk7CiAgICAgICAgaWYgKGttKSBzdGF0ZS5rbGFtbWVyTXV0dGVyID0ga207CiAgICAgIH0KICAgIH0KICAgIC8vIG1hc3NlRm9sZ3QgKENGL0NGSSk6IHJvd3NGb3IoKSBpc3QgbGVlciAtPiBlcyBnaWJ0IGtlaW5lIGd1ZWx0aWdlIEdyb2Vzc2UgYXVzIGRlbSBMaW5rCiAgICAvLyB6dSB1ZWJlcm5laG1lbi4gRXhwbGl6aXQgbnVsbCAobmljaHQgdW5kZWZpbmVkIGF1cyByc1swXSksIGRhbWl0IGRlciBTdGF0ZSBzYXViZXIgYmxlaWJ0CiAgICAvLyB1bmQgZWluIG1hbmlwdWxpZXJ0ZXIgP2dyb2Vzc2U9RE4yNSBuaWNodCBkb2NoIGFscyBDRi1Hcm9lc3NlIGltIFN0YXRlIGxhbmRldC4KICAgIGVsc2UgaWYgKHN0YXRlLnR5cCAmJiBpc0Nvbm5lY3QodFByZSkpIHsKICAgICAgaWYgKHRQcmUuaWQgPT09ICdDRicpIHsKICAgICAgICBjb25zdCBjcyA9IHNldCgnY3N0YW5kYXJkJywgT2JqZWN0LmtleXMoRC5tYXNzZS5jb25uZWN0LmNmLnJlaWhlbikpOwogICAgICAgIHN0YXRlLmNvbm5lY3ROb3JtID0gY3MgfHwgJ0RJTic7CiAgICAgIH0KICAgICAgaWYgKHRQcmUuaWQgPT09ICdDRkknKSB7CiAgICAgICAgY29uc3QgY2EgPSBzZXQoJ2NhbnNjaGx1c3MnLCBbJ0JXJywgJ1RDJ10pOyBzdGF0ZS5jb25uZWN0QW5zY2hsdXNzID0gY2EgfHwgJ0JXJzsKICAgICAgfQogICAgICBjb25zdCBycyA9IHJvd3NGb3Ioc3RhdGUpLCBnID0gc2V0KCdncm9lc3NlJyk7CiAgICAgIHN0YXRlLmdyb2Vzc2UgPSAoZyAmJiBycy5zb21lKHIgPT4gci5pZCA9PT0gZykpID8gZyA6ICgocnNbMF0gJiYgcnNbMF0uaWQpIHx8IG51bGwpOwogICAgICBpZiAodFByZS5pZCA9PT0gJ0NGJykgewogICAgICAgIGNvbnN0IHJ3ID0gcm93Rm9yKHN0YXRlKSwgY2wgPSBOdW1iZXIocS5nZXQoJ2NsYWVuZ2UnKSk7CiAgICAgICAgc3RhdGUuY29ubmVjdExhZW5nZSA9IHJ3ICYmIHJ3LmxhZW5nZW4uc29tZSh4ID0+IE51bWJlcih4LkwpID09PSBjbCkgPyBjbCA6IChydyAmJiBydy5sYWVuZ2VuWzBdID8gcncubGFlbmdlblswXS5MIDogbnVsbCk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHN0YXRlLnR5cCAmJiBpc3RNYXNzZUZvbGd0KHR5cE9iaihzdGF0ZS50eXApKSkgeyBzdGF0ZS5ncm9lc3NlID0gbnVsbDsgc3RhdGUuZ3JvZXNzZTIgPSBudWxsOyB9CiAgICBlbHNlIGlmIChzdGF0ZS50eXApIHsgY29uc3QgcnMgPSByb3dzRm9yKHN0YXRlKTsgY29uc3QgZyA9IHNldCgnZ3JvZXNzZScpOyBzdGF0ZS5ncm9lc3NlID0gKGcgJiYgcnMuZmluZChyID0+IHIuaWQgPT09IGcpKSA\\\/IGcgOiAoKHJzWzBdICYmIHJzWzBdLmlkKSB8fCBudWxsKTsgfQogICAgLy8gZ3JvZXNzZTIgYXVzIGRlbSBMaW5rIG51ciDDvGJlcm5laG1lbiwgd2VubiBlcyBLTEVJTkVSIGFscyBkaWUgKG9iZW4gZ2VzZXR6dGUpIE5lbm53ZWl0ZQogICAgLy8gaXN0IChSMy0yL1IzLTQpIC0gZWluIG1hbmlwdWxpZXJ0ZXIvdmVyYWx0ZXRlciBMaW5rIGRhcmYga2VpbiBnZXJhZGVzIFJvaHIgZXJ6ZXVnZW4uCiAgICBjb25zdCBnMiA9IHNldCgnZ3JvZXNzZTInKTsgaWYgKGcyICYmIHJvd3MyRm9yKHN0YXRlKS5zb21lKHIgPT4gci5pZCA9PT0gZzIpKSBzdGF0ZS5ncm9lc3NlMiA9IGcyOwogICAgY29uc3QgdyA9IHNldCgnd2Vya3N0b2ZmJywgRC53ZXJrc3RvZmZlLm1hcCh4ID0+IHguaWQpKTsgaWYgKHcpIHN0YXRlLndlcmtzdG9mZiA9IHc7CiAgICBjb25zdCBvID0gc2V0KCdvYmVyZmxhZWNoZScsIEQub2JlcmZsYWVjaGVuLm1hcCh4ID0+IHguaWQpKTsgaWYgKG8pIHN0YXRlLm9iZXJmbGFlY2hlID0gbzsKICAgIGlmIChzdGF0ZS50eXAgJiYgIW9iZXJmbGFlY2hlRXJsYXVidChzdGF0ZSkpIHN0YXRlLm9iZXJmbGFlY2hlID0gb2JlcmZsYWVjaGVuT3B0aW9uZW4oc3RhdGUpWzBdLmlkOwogICAgY29uc3QgZCA9IHNldCgnZGljaHR1bmcnLCBELmRpY2h0dW5nZW4ubWFwKHggPT4geC5pZCkpOyBpZiAoZCkgc3RhdGUuZGljaHR1bmcgPSBkOwogICAgY29uc3QgbHAgPSBzZXQoJ2xpcHBlJywgWydMJywgJ08nXSk7IGlmIChscCAmJiBhdXNmdWVocnVuZ0F2YWlsKHN0YXRlKS5pbmNsdWRlcyhscCkpIHN0YXRlLmxpcHBlID0gbHA7CiAgICBjb25zdCBud1JhdyA9IHEuZ2V0KCduYWNod2Vpc2UnKTsKICAgIGlmIChud1JhdyAhPSBudWxsKSB7CiAgICAgIGNvbnN0IGFsbG93ZWROdyA9IG5ldyBTZXQoRC5uYWNod2Vpc2UubWFwKHggPT4geC5pZCkpOwogICAgICBjb25zdCBzZWxlY3RlZE53ID0gU3RyaW5nKG53UmF3KS5zcGxpdCgnLCcpLmZpbHRlcihpZCA9PiBhbGxvd2VkTncuaGFzKGlkKSk7CiAgICAgIGlmIChzZWxlY3RlZE53Lmxlbmd0aCkgc3RhdGUubmFjaHdlaXNlID0gWy4uLm5ldyBTZXQoWy4uLihELnByZWlzZS5uYWNod2Vpc1N0YW5kYXJkIHx8IFtdKSwgLi4uc2VsZWN0ZWROd10pXTsKICAgIH0KICAgIGNvbnN0IGx2ID0gc2V0KCdsYWVuZ2UnLCBbJ0tLJywgJ0tMJ10pOyBpZiAobHYpIHN0YXRlLmxhZW5nZVZhcmlhbnRlID0gbHY7CiAgICBpZiAocS5nZXQoJ2V4eicpID09PSAnMScpIHN0YXRlLmV4emVudHJpc2NoID0gdHJ1ZTsKICAgIC8vIEJhdWZvcm0gVCAvIFRLIGF1cyBkZW0gTGluay4gVW5iZWthbm50ZSBXZXJ0ZSBibGVpYmVuIG51bGwgdW5kIGhhbHRlbiBkZW4KICAgIC8vIExpbmsgaW4gU2Nocml0dCA0IHp1ciBLb3JyZWt0dXIgc3RlaGVuLCBzdGF0dCBzdGlsbCBGb3JtIFQgYW56dW5laG1lbi4KICAgIHsgY29uc3QgZnYgPSBzZXQoJ2Zvcm0nLCBbJ1QnLCAnVEsnXSk7IGlmIChmdikgc3RhdGUuZm9ybVZhcmlhbnRlID0gZnY7IH0KICAgIGlmICh0UHJlICYmIHRQcmUuaWQgPT09ICdUQycpIHsKICAgICAgY29uc3Qga3QgPSBzZXQoJ2tsYW1tZXJ0eXAnLCAoRC5rbGFtbWVyVHlwZW4gfHwgW10pLm1hcCh4ID0+IHguaWQpKTsgaWYgKGt0KSBzdGF0ZS5rbGFtbWVyVHlwID0ga3Q7CiAgICB9CiAgICBjb25zdCB2dyA9IHNldCgndmlldycsIFsnemVpY2hudW5nJywgJ2Fuc2ljaHQnXSk7IGlmICh2dykgc3RhdGUudmlldyA9IHZ3OwogICAgY29uc3QgbSA9IHBhcnNlSW50KHEuZ2V0KCdtZW5nZScpLCAxMCk7IGlmIChpc0Zpbml0ZShtKSAmJiBtID49IDEpIHN0YXRlLm1lbmdlID0gbTsKICAgIC8vIEVpbiBMaW5rIGRhcmYgbmllIHVudm9sbHN0w6RuZGlnZSBHcsO2w59lbi0gb2RlciBPcHRpb25zZGF0ZW4gw7xiZXJzcHJpbmdlbi4KICAgIC8vIERlciBlcnN0ZSBuaWNodCBlcmbDvGxsdGUsIGbDvHIgZGVuIFR5cCByZWxldmFudGUgU2Nocml0dCB3aXJkIGdlw7ZmZm5ldC4KICAgIGNvbnN0IGZpcnN0SW5jb21wbGV0ZSA9IGFwcFN0ZXBzKCkuZmluZChuID0+ICFjb21wbGV0ZShuKSk7CiAgICBzdGF0ZS5zdGVwID0gZmlyc3RJbmNvbXBsZXRlIHx8IDg7CiAgfQogIGZ1bmN0aW9uIHNldEFud2VuZHVuZ1NpbGVudChpZCkgeyBjb25zdCBhID0gRC5hbndlbmR1bmdlbi5maW5kKHggPT4geC5pZCA9PT0gaWQpOyBpZiAoIWEpIHJldHVybjsgc3RhdGUuYW53ZW5kdW5nID0gaWQ7IHN0YXRlLndlcmtzdG9mZiA9IGEuZGVmYXVsdHMud2Vya3N0b2ZmOyBzdGF0ZS5vYmVyZmxhZWNoZSA9IGEuZGVmYXVsdHMub2JlcmZsYWVjaGU7IHN0YXRlLmRpY2h0dW5nID0gYS5kZWZhdWx0cy5kaWNodHVuZzsgfQoKICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaUZyYW1lLUF1dG8tSMO2aGUgKFdvcmRQcmVzcy1FaW5iZXR0dW5nKSAqLwogIC8vIE1lbGRldCBkaWUgSW5oYWx0c2jDtmhlIGFucyDDvGJlcmdlb3JkbmV0ZSBGZW5zdGVyLCBkYW1pdCBkYXMgaUZyYW1lIG9obmUKICAvLyBpbm5lcmVuIFNjcm9sbGJhbGtlbiBtaXR3w6RjaHN0LiBTdGFuZGFsb25lIChrZWluIFBhcmVudCkgPSBOby1PcC4KICBmdW5jdGlvbiByZXBvcnRIZWlnaHQoKSB7CiAgICBpZiAod2luZG93LnBhcmVudCA9PT0gd2luZG93KSByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBoID0gTWF0aC5jZWlsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpOwogICAgICBpZiAoaCA+IDEwMCkgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSh7IHdlaXNzS29uZmlnSGVpZ2h0OiBoIH0sICcqJyk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0KICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVwb3J0SGVpZ2h0KTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlcG9ydEhlaWdodCk7CgogIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5pdCAqLwogIGlmICh3aW5kb3cucGFyZW50ICE9PSB3aW5kb3cpIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCd3ei1lbWJlZGRlZCcpOwogIHJlbmRlclByaWNlSGludCgpOwogIHByZWZpbGwoKTsKICByZW5kZXJBbGwoKTsKICAvLyBRQS0vRGVlcC1MaW5rLUhvb2tzOiA\\\/ZnM9MSBvZWZmbmV0IFZvbGxiaWxkLCA\\\/ZHM9MSBiYXV0IGRhcyBEYXRlbmJsYXR0IChvaG5lIERydWNrZGlhbG9nKQogIGNvbnN0IHEwID0gcHJlbG9hZFF1ZXJ5KCk7CiAgaWYgKHEwLmdldCgnZnMnKSA9PT0gJzEnKSBmc09wZW4oKTsKICBpZiAocTAuZ2V0KCdkcycpID09PSAnMScpIGJ1aWxkRGF0YXNoZWV0KHRydWUpOwogIHNldFRpbWVvdXQocmVwb3J0SGVpZ2h0LCAzNTApOwp9KSgpOwoKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=\";\n    try {\n        frame.srcdoc = new TextDecoder('utf-8').decode(\n            Uint8Array.from(atob(b64), function (c) { return c.charCodeAt(0); })\n        );\n    } catch (err) {\n        try { frame.srcdoc = decodeURIComponent(escape(atob(b64))); } catch (e2) {}\n    }\n    var last = 680;\n    \/\/ Auf Desktop die Hoehe auf ~Viewport deckeln -> das iFrame scrollt intern,\n    \/\/ die sticky Vorschau bleibt rechts stehen. Auf Mobil volle Inhaltshoehe.\n    function setHeight(h) {\n        var desktop = window.innerWidth > 960;\n        var cap = desktop ? Math.max(600, Math.round((window.innerHeight || 800) * 0.92)) : 1e7;\n        frame.style.height = Math.min(h, cap) + 'px';\n    }\n    window.addEventListener('message', function (e) {\n        if (e.source !== frame.contentWindow) { return; } \/\/ srcdoc-Quelle -> kein origin-Check\n        var h = e.data && e.data.weissKonfigHeight;\n        if (typeof h === 'number' && h > 100) { last = h; setHeight(h); }\n    }, false);\n    window.addEventListener('resize', function () { setHeight(last); });\n})();\n<\/script>\n<!--\/noptimize-->\n    <\/div><\/div><\/div><\/div><style>.weiss-config-trigger{min-height:44px}\n.weiss-product-cta{margin-top:8px!important;margin-bottom:20px!important}\n.weiss-fittings-modal .modal-dialog{width:calc(100% - 32px);max-width:1180px;margin:24px auto}\n.weiss-fittings-modal .modal-content{background:#fff;color:#1c1c1c;border-radius:0}\n.weiss-fittings-modal .modal-header{background:var(--awb-custom_color_1);color:#fff;padding:16px 24px;display:flex;align-items:center;gap:16px}\n.weiss-fittings-modal .modal-title{color:#fff!important;font-size:22px!important;line-height:1.4!important;margin:0!important}\n.weiss-fittings-modal .modal-header .close{color:#fff!important;opacity:1;min-width:44px;min-height:44px;font-size:30px;order:2;margin-left:auto;float:none}\n.weiss-fittings-modal .modal-body{max-height:calc(100dvh - 150px);overflow-y:auto;padding:0;overscroll-behavior:contain}\n.weiss-fittings-modal .weiss-config-status{padding:20px 24px;margin:0}\n.weiss-fittings-modal .weiss-konfigurator-embed{margin:0!important}\n@media(max-width:640px){.weiss-fittings-modal .modal-dialog{width:100%;margin:0;max-width:none}.weiss-fittings-modal .modal-header{padding:10px 14px}.weiss-fittings-modal .modal-title{font-size:18px!important}.weiss-fittings-modal .modal-body{max-height:calc(100dvh - 70px)}.weiss-config-trigger{max-width:100%;white-space:normal!important}.weiss-product-cta{margin-bottom:24px!important}}\n\n.weiss-config-action{display:flow-root;clear:both}.weiss-config-trigger{margin-bottom:12px!important;max-width:100%;white-space:normal!important;line-height:1.4!important}.weiss-inline-cta{margin-top:14px!important}.weiss-fittings-modal .modal-body{background:#fff}.weiss-fittings-modal .modal-title{text-transform:none!important}\n<\/style><script>(function () {\n  'use strict';\n  const modalSelector = '.weiss-fittings-modal';\n  let lastNorm = null;\n  let lastType = null;\n  let lastSeries = null;\n  let boundDocument = null;\n  let pending = 0;\n\n  function action(doc, act, id) {\n    const control = doc.createElement('button');\n    control.type = 'button';\n    control.hidden = true;\n    control.setAttribute('data-act', act);\n    if (act === 'goto') control.setAttribute('data-n', id);\n    else control.setAttribute('data-id', id);\n    doc.body.appendChild(control);\n    control.click();\n    control.remove();\n  }\n\n  function applyPreset(norm, type, series, token, started) {\n    if (token !== pending) return;\n    const modal = document.querySelector(modalSelector);\n    const frame = modal && modal.querySelector('.weiss-konfigurator-embed iframe');\n    const status = modal && modal.querySelector('.weiss-config-status');\n    let doc;\n    try { doc = frame && frame.contentDocument; } catch (error) { doc = null; }\n    if (!doc || !doc.querySelector('#wz-panel .step-head')) {\n      if (Date.now() - started < 20000) {\n        window.setTimeout(function () { applyPreset(norm, type, series, token, started); }, 100);\n      } else if (status) {\n        status.hidden = false;\n        status.textContent = 'The configurator could not be loaded. Please close it and open it again.';\n      }\n      return;\n    }\n    if (boundDocument !== doc) {\n      boundDocument = doc;\n      doc.addEventListener('click', function (event) {\n        const control = event.target.closest('[data-act]');\n        if (!control || control.hidden) return;\n        const act = control.getAttribute('data-act');\n        if (act === 'anwendung' && lastType) action(doc, 'goto', '4');\n        if (act === 'typ') { lastType = control.getAttribute('data-id'); lastSeries = null; }\n        if (act === 'reihe') lastSeries = control.getAttribute('data-id');\n        if (act === 'norm') lastNorm = control.getAttribute('data-id');\n        if (act === 'norm' || act === 'reset' || act === 'addpos') { lastType = null; lastSeries = null; }\n      });\n    }\n    if (norm !== lastNorm) {\n      action(doc, 'goto', '2');\n      action(doc, 'norm', norm);\n      lastNorm = norm; lastType = null; lastSeries = null;\n      action(doc, 'goto', '3');\n    }\n    if (type && type !== lastType) {\n      action(doc, 'typ', type);\n      lastType = type;\n      lastSeries = null;\n      action(doc, 'goto', '4');\n    }\n    if (type && series && series !== lastSeries) {\n      action(doc, 'reihe', series);\n      lastSeries = series;\n      action(doc, 'goto', '4');\n    }\n    if (status) status.hidden = true;\n    frame.setAttribute('data-weiss-preset', type || lastType || 'all');\n    frame.contentWindow.dispatchEvent(new Event('resize'));\n  }\n\n  document.addEventListener('click', function (event) {\n    const trigger = event.target.closest('.weiss-config-trigger');\n    if (!trigger) return;\n    const match = Array.from(trigger.classList).find(function (name) { return name.indexOf('weiss-type-') === 0; });\n    const type = match ? match.slice(11) : null;\n    const norm = trigger.classList.contains('weiss-norm-din11865') ? 'din11865' : 'din32676';\n    const series = trigger.classList.contains('weiss-series-a') ? 'A'\n      : trigger.classList.contains('weiss-series-b') ? 'B'\n      : trigger.classList.contains('weiss-series-c') ? 'C' : null;\n    const modal = document.querySelector(modalSelector);\n    if (!modal) return;\n    const heading = modal.querySelector('.modal-title');\n    const labels = {B90:'Configure bend',R:'Configure reducer',TS:'Configure tee',TC:'Configure Tri-Clamp',TCS:'Configure ferrule',KL:'Configure clamp',D:'Configure gasket',BD:'Configure blank cap'};\n    if (heading) heading.textContent = type && labels[type] ? labels[type] : 'Project configurator';\n    const status = modal.querySelector('.weiss-config-status');\n    if (status) { status.hidden = false; status.textContent = 'Configurator is loading ...'; }\n    applyPreset(norm, type, series, ++pending, Date.now());\n  }, true);\n})();\n<\/script><!--noptimize-->\n<style id=\"weiss-modal-ci\">\n\/* Weiss Projektkonfigurator: gemeinsamer Modal-Stil, Stand 14.09.2026. *\/\n.weiss-fittings-modal {\n  --weiss-ci-red: var(--awb-color4, #cc0000);\n  --weiss-ci-dark: var(--awb-custom_color_1, #4c0000);\n  --weiss-ci-ink: var(--awb-color8, #1c1c1c);\n  --weiss-modal-gap: 24px;\n  --weiss-admin-height: 0px;\n  position: fixed !important;\n  inset: var(--weiss-admin-height) 0 0 !important;\n  height: auto !important;\n  padding: var(--weiss-modal-gap) !important;\n  overflow-x: hidden;\n  overflow-y: auto;\n  box-sizing: border-box;\n  font-family: var(--awb-typography4-font-family, 'Plus Jakarta Sans', Arial, sans-serif);\n}\n.weiss-fittings-modal .modal-dialog {\n  display: flex;\n  align-items: center;\n  width: 100% !important;\n  max-width: 1180px !important;\n  min-height: 100%;\n  margin: 0 auto !important;\n  transform: none !important;\n  transition: none !important;\n}\n.weiss-fittings-modal .modal-content {\n  width: 100%;\n  min-width: 0;\n  max-height: calc(100dvh - var(--weiss-admin-height) - 2 * var(--weiss-modal-gap));\n  display: flex;\n  flex-direction: column;\n  background: #fff;\n  color: var(--weiss-ci-ink);\n  border: 0;\n  border-top: 4px solid var(--weiss-ci-red);\n  border-radius: 0;\n  box-shadow: 0 24px 72px rgba(28,28,28,.22);\n  overflow: hidden;\n}\n.weiss-fittings-modal .modal-header {\n  display: grid;\n  grid-template-columns: 44px minmax(0, 1fr) 44px;\n  align-items: center;\n  gap: 12px;\n  flex: 0 0 auto;\n  padding: 14px 24px;\n  background: #fff;\n  border-bottom: 1px solid #e5e5e5;\n  color: var(--weiss-ci-ink);\n}\n.weiss-fittings-modal .modal-header::before,\n.weiss-fittings-modal .modal-header::after { display: none; }\n.weiss-fittings-modal .modal-title {\n  grid-column: 2;\n  grid-row: 1;\n  margin: 0 !important;\n  color: var(--weiss-ci-ink) !important;\n  font-family: inherit !important;\n  font-size: 22px !important;\n  font-weight: 600 !important;\n  line-height: 1.3 !important;\n  text-align: center;\n  text-transform: none !important;\n  overflow-wrap: break-word;\n}\n.weiss-fittings-modal .modal-header .close {\n  grid-column: 3;\n  grid-row: 1;\n  order: initial;\n  display: grid;\n  place-items: center;\n  float: none;\n  margin: 0 !important;\n  padding: 0;\n  width: 44px;\n  height: 44px;\n  min-width: 44px;\n  min-height: 44px;\n  border: 1px solid #e5e5e5;\n  border-radius: 0;\n  background: #fff;\n  color: var(--weiss-ci-ink) !important;\n  opacity: 1;\n  font: 28px\/1 Arial, sans-serif;\n  text-shadow: none;\n  cursor: pointer;\n}\n.weiss-fittings-modal .modal-header .close:hover { background: #f1f1f1; color: var(--weiss-ci-red) !important; }\n.weiss-fittings-modal .modal-header .close:focus-visible { outline: 2px solid var(--weiss-ci-red); outline-offset: 3px; }\n.weiss-fittings-modal .modal-body {\n  flex: 1 1 auto;\n  min-height: 0;\n  max-height: none !important;\n  padding: 0 !important;\n  background: #fff;\n  overflow: auto;\n  overscroll-behavior: contain;\n  scrollbar-gutter: stable;\n}\n.weiss-fittings-modal .weiss-konfigurator-embed { margin: 0 !important; padding: 0 !important; }\n.weiss-fittings-modal .weiss-konfigurator-embed iframe { display: block; width: 100%; min-height: 0 !important; border: 0; }\n.weiss-fittings-modal .weiss-config-status { margin: 0; padding: 24px 28px; color: #555; }\n.weiss-fittings-modal .weiss-config-status[hidden] { display: none !important; }\n@media(max-width:767px) {\n  .weiss-fittings-modal { --weiss-modal-gap: 12px; }\n  .weiss-fittings-modal .modal-header { padding: 10px 12px; gap: 8px; }\n  .weiss-fittings-modal .modal-title { font-size: 18px !important; }\n}\n@media(max-width:374px) {\n  .weiss-fittings-modal { --weiss-modal-gap: 8px; }\n  .weiss-fittings-modal .modal-header { padding: 8px; gap: 4px; }\n  .weiss-fittings-modal .modal-title { font-size: 16px !important; }\n}\n@media(prefers-reduced-motion:reduce) { .weiss-fittings-modal, .weiss-fittings-modal * { scroll-behavior: auto !important; transition: none !important; } }\n\n<\/style>\n<script>\n(function () {\n  'use strict';\n  if (window.weissModalCiInstalled) return;\n  window.weissModalCiInstalled = true;\n  const widgetCss = \"@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 200;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 300;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 400;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 600;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n@font-face {\\n  font-family: 'Plus Jakarta Sans';\\n  font-style: normal;\\n  font-weight: 700;\\n  font-display: swap;\\n  src: url(https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/fusion-gfonts\/LDIoaomQNQcsA88c7O9yZ4KMCoOg4Ko20yw.woff2) format('woff2');\\n  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n}\\n\/* Nur in eingebettete Projektkonfigurator-Popups einsetzen. *\/\\n:root {\\n  --red: var(--weiss-brand-red, #cc0000);\\n  --red-dark: var(--weiss-brand-dark, #4c0000);\\n  --red-tint: #fff4f4;\\n  --ink: #1c1c1c;\\n  --radius: 2px;\\n  --radius-sm: 2px;\\n  --ff: var(--weiss-brand-font, 'Plus Jakarta Sans', Arial, sans-serif);\\n}\\nbody, button, input, select, textarea { font-family: var(--ff); }\\n.app { max-width: none; padding: 18px 28px 24px; }\\n.topbar { padding: 0 0 16px; }\\n.topbar .hint { color: #555; }\\n.brand .mark { border-radius: 0; background: var(--red); }\\n.brand .n { font-size: 16px; letter-spacing: .04em; }\\n.brand .s { color: #555; }\\n.progress { gap: 4px; padding-bottom: 20px; margin-bottom: 2px; }\\n.pstep { border-radius: 0; padding: 9px 10px; font-size: 12px; border-color: #e5e5e5; }\\n.pstep.active { color: var(--red-dark); background: var(--red-tint); border-color: var(--red); }\\n.pstep[disabled] { opacity: 1; color: #727272; background: #fafafa; }\\n.pstep[disabled] .num { background: #eee; color: #727272; }\\n.layout { gap: 28px; }\\n.step-head h2 { font-size: 24px; line-height: 1.3; font-weight: 600; }\\n.step-head p { font-size: 13px; line-height: 1.6; }\\n.kicker { color: var(--red); }\\n.resetbtn, .pv-toggle, .pv-typecode .copy, .btn, .chip, .seg, .stepper { border-radius: 0; }\\n.resetbtn { padding: 0 12px; color: #555; }\\n.tiles { gap: 12px; }\\n.tile { border-width: 1px; border-radius: 2px; min-height: 112px; padding: 16px; box-shadow: none; }\\n.tile .t { font-size: 15px; font-weight: 600; }\\n.tile .d { font-size: 12px; }\\n.tile:hover, .opt:hover { border-color: var(--red); box-shadow: none; }\\n.tile.sel, .opt.sel { background: var(--red-tint); box-shadow: inset 3px 0 0 var(--red); }\\n.pv-card { border-radius: 2px; box-shadow: none; }\\n.pv-typecode { flex-wrap: wrap; }\\n.pv-typecode .code { min-width: 0; flex: 1 1 120px; }\\n.pv-typecode .copy { flex-shrink: 0; }\\n.pv-typecode .lbl { color: #555; }\\n.preview { position: static; }\\n.nav { justify-content: flex-end; gap: 12px; margin-top: 24px; padding-top: 20px; border-top: 1px solid #e5e5e5; }\\n.nav .btn.primary { flex: 0 1 auto; width: auto; min-width: 176px; justify-content: center; background: var(--red); border-color: var(--red); box-shadow: none; }\\n.nav .btn.primary:hover:not([disabled]) { background: var(--red-dark); border-color: var(--red-dark); }\\n.nav .btn.primary[disabled] { background: #e5e5e5; color: #626262; border-color: #e5e5e5; }\\nbutton:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible { outline: 2px solid var(--red); outline-offset: 3px; }\\n@media(max-width:767px) {\\n  .app { padding: 14px 16px 20px; }\\n  .topbar { flex-wrap: wrap; gap: 10px; }\\n  .topbar .hint { font-size: 11px; }\\n  .layout { grid-template-columns: minmax(0,1fr); gap: 20px; }\\n  .step-head h2 { font-size: 21px; }\\n  .nav .btn.primary { min-width: 0; flex: 1; }\\n  .nav { margin-top: 18px; }\\n  .pv-typecode { gap: 8px; }\\n}\\n@media(max-width:359px) {\\n  .app { padding: 12px; }\\n  .tiles { grid-template-columns: minmax(0,1fr); }\\n  .tile { min-height: 96px; }\\n  .step-head-top { gap: 8px; }\\n  .resetbtn { padding: 0 8px; font-size: 11px; }\\n}\\n@media(prefers-reduced-motion:reduce) { *, *::before, *::after { transition: none !important; scroll-behavior: auto !important; } }\\n@media(max-width:767px) {\\n  .app { display: flex; flex-direction: column; }\\n  .app > .topbar { order: 0; }\\n  .app > .progress { order: 1; }\\n  .layout { display: contents; }\\n  .panel { order: 2; }\\n  .app > .nav { order: 3; }\\n  .preview { order: 4; width: 100%; margin-top: 20px; }\\n}\\n@media(min-width:320px) and (max-width:767px) {\\n  .tiles { grid-template-columns: repeat(2,minmax(0,1fr)); }\\n  .tile { padding: 14px 12px; }\\n  .tile .t { font-size: 13px; }\\n}\\n\";\n  const bound = new WeakMap();\n  function install(frame) {\n    let doc;\n    try { doc = frame.contentDocument; } catch (_) { return; }\n    if (!doc || !doc.querySelector('.app')) return;\n    const modal = frame.closest('.weiss-fittings-modal');\n    if (!modal) return;\n    const old = bound.get(frame);\n    if (old && old.doc === doc) { old.size(); return; }\n    if (old) { old.resize.disconnect(); old.mutation.disconnect(); }\n    const style = doc.createElement('style');\n    style.id = 'weiss-modal-ci-widget';\n    style.textContent = widgetCss;\n    doc.head.appendChild(style);\n    const ci = getComputedStyle(modal);\n    doc.documentElement.style.setProperty('--weiss-brand-red', ci.getPropertyValue('--awb-color4').trim() || '#cc0000');\n    doc.documentElement.style.setProperty('--weiss-brand-dark', ci.getPropertyValue('--awb-custom_color_1').trim() || '#4c0000');\n    doc.documentElement.style.setProperty('--weiss-brand-font', ci.fontFamily);\n    const app = doc.querySelector('.app');\n    let pending = 0;\n    let gesetzt = 0;\n    \/\/ Die Hoehe wird ueber eine eigene Stilregel gesetzt, nicht ueber das style-Attribut.\n    \/\/ Grund: Das Konfigurator-Plugin setzt die Hoehe ebenfalls und deckelt sie auf die\n    \/\/ Fensterhoehe. Beide Setzer haben sich gegenseitig ueberschrieben, jede Aenderung\n    \/\/ loeste im iFrame ein resize aus, das Widget meldete erneut, und das Fenster sprang\n    \/\/ rund 230 mal pro Sekunde zwischen zwei Hoehen. Eine Regel mit !important gewinnt\n    \/\/ gegen das style-Attribut, damit ist die Hoehe stabil und die Rueckkopplung beendet.\n    \/\/ Befund vom 17.09.2026, gemeldet von Bernd Linker als Flackern im Anfrageschritt.\n    const hoeheSetzen = function (id, hoehe) {\n      if (!id) return;\n      let regelBlock = document.getElementById('weiss-modal-hoehe');\n      if (!regelBlock) {\n        regelBlock = document.createElement('style');\n        regelBlock.id = 'weiss-modal-hoehe';\n        document.head.appendChild(regelBlock);\n      }\n      const regeln = {};\n      regelBlock.textContent.split('}').forEach(function (teil) {\n        const m = teil.match(\/#([\\w-]+)\\s*\\{\\s*height:\\s*(\\d+)px\/);\n        if (m) regeln[m[1]] = m[2];\n      });\n      regeln[id] = String(hoehe);\n      regelBlock.textContent = Object.keys(regeln)\n        .map(function (k) { return '#' + k + ' { height: ' + regeln[k] + 'px !important; }'; })\n        .join('\\n');\n    };\n    const size = function () {\n      if (pending) return;\n      pending = requestAnimationFrame(function () {\n        pending = 0;\n        if (!frame.isConnected || !frame.getBoundingClientRect().width) return;\n        const height = Math.ceil(app.getBoundingClientRect().height);\n        if (height > 100 && Math.abs(gesetzt - height) > 1) {\n          gesetzt = height;\n          hoeheSetzen(frame.id, height);\n        }\n      });\n    };\n    const resize = new ResizeObserver(size);\n    resize.observe(app);\n    const mutation = new MutationObserver(size);\n    mutation.observe(app, {childList:true, subtree:true, characterData:true});\n    bound.set(frame, {doc:doc, size:size, resize:resize, mutation:mutation});\n    if (doc.fonts) doc.fonts.ready.then(size);\n    size();\n  }\n  function scan() {\n    const admin = document.getElementById('wpadminbar');\n    const adminHeight = admin && getComputedStyle(admin).position === 'fixed' ? Math.max(0, admin.getBoundingClientRect().bottom) : 0;\n    document.querySelectorAll('.weiss-fittings-modal').forEach(function (modal) {\n      const value = Math.round(adminHeight) + 'px';\n      if (modal.style.getPropertyValue('--weiss-admin-height') !== value) modal.style.setProperty('--weiss-admin-height', value);\n      modal.querySelectorAll('.weiss-konfigurator-embed iframe').forEach(function (frame) {\n        if (!frame.hasAttribute('data-weiss-ci-bound')) {\n          frame.setAttribute('data-weiss-ci-bound', 'true');\n          frame.addEventListener('load', function () { install(frame); });\n        }\n        install(frame);\n      });\n    });\n  }\n  let scheduled = false;\n  function schedule() {\n    if (scheduled) return;\n    scheduled = true;\n    requestAnimationFrame(function () { scheduled = false; scan(); });\n  }\n  const observer = new MutationObserver(schedule);\n  observer.observe(document.documentElement, {childList:true, subtree:true, attributes:true, attributeFilter:['class','style']});\n  window.addEventListener('resize', schedule);\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule, {once:true});\n  else schedule();\n})();\n<\/script>\n<!--\/noptimize-->\n\n<style id=\"weiss-landing-hero-20260914\">\n.weiss-landing-hero .weiss-hero-title h1{font-size:clamp(28px,3vw,40px)!important;line-height:1.18!important;letter-spacing:-.035em;overflow-wrap:break-word}\n.weiss-landing-hero .weiss-hero-intro{max-width:38em}\n.weiss-landing-hero .weiss-hero-intro p{margin-bottom:14px}\n.weiss-landing-hero .weiss-hero-cta{min-height:48px;max-width:100%;white-space:normal;box-sizing:border-box}\n.weiss-landing-hero .weiss-hero-cta:focus-visible{outline:3px solid #cc0000;outline-offset:4px}\n.weiss-masstabellen .weiss-tabellen-scroll{max-width:100%;overflow-x:auto;overscroll-behavior-x:contain;margin:12px 0}\n.weiss-masstabellen .weiss-tabellen-scroll:focus-visible{outline:3px solid #cc0000;outline-offset:2px}\n.weiss-masstabellen table.weiss-masstabelle{border-collapse:collapse;width:100%;font-size:14px}\n.weiss-masstabellen table.weiss-masstabelle th,.weiss-masstabellen table.weiss-masstabelle td{padding:10px 12px;border-bottom:1px solid #ddd;text-align:left;white-space:nowrap}\n.weiss-masstabellen table.weiss-masstabelle thead{background:#f3f1ef}\n.weiss-masstabellen table.weiss-masstabelle caption{text-align:left;font-weight:700;white-space:normal;padding:12px 0}\n.weiss-masstabellen .weiss-masshinweis{font-size:14px;line-height:1.6}\n@media(max-width:767px){.weiss-landing-hero .weiss-hero-cta{width:100%;padding-left:16px!important;padding-right:16px!important}.weiss-landing-hero .fusion-imageframe{margin-top:24px}}\n<\/style><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-17 fusion-flex-container has-pattern-background has-mask-background weiss-zugang-abschnitt nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:56px;--awb-padding-bottom:56px;--awb-padding-top-small:28px;--awb-padding-bottom-small:28px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-46 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-flex-grow:0;--awb-flex-shrink:0;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-flex-grow-medium:0;--awb-flex-shrink-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-flex-grow-small:0;--awb-flex-shrink-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><section class=\"weiss-zugang\" id=\"weiss-zugang\">\n  <div class=\"weiss-zugang-haupt\">\n  <h2 class=\"weiss-zugang-titel\">Request access to prices<\/h2>\n  <p class=\"weiss-zugang-text\">Prices in the configurator are kept in a protected area. Tell us briefly who you are and you will receive your password by e-mail.<\/p>\n    <form method=\"post\" class=\"weiss-zugang-form\" novalidate>\n    <input type=\"hidden\" id=\"weiss_zugang_nonce\" name=\"weiss_zugang_nonce\" value=\"202e93742b\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/pages\/4344\" \/>    <input type=\"hidden\" name=\"weiss_zugang_absenden\" value=\"1\">\n    <input type=\"hidden\" name=\"weiss_zugang_lang\" value=\"en\">\n    <input type=\"hidden\" name=\"weiss_zugang_empfaenger\" value=\"steriltechnik@weiss-apparatebau.de\">\n    <input type=\"hidden\" name=\"weiss_zugang_bestaetigung\" value=\"ja\">\n    <input type=\"hidden\" name=\"weiss_zeit\" value=\"1790208092\">\n    <input type=\"hidden\" name=\"weiss_zugang_sig\" value=\"62aa94fa471c3bcc105d446c82792b9fa88c7c83fe8ad22c426e257250a55c14\">\n    <fieldset class=\"weiss-zugang-art\">\n      <legend>You are enquiring as<\/legend>\n      <label><input type=\"radio\" name=\"weiss_art\" value=\"endkunde\"  required> End customer<\/label>\n      <label><input type=\"radio\" name=\"weiss_art\" value=\"oem\" > OEM<\/label>\n    <\/fieldset>\n    <label class=\"weiss-zugang-feld\"><span>Company and location<\/span>\n      <input type=\"text\" name=\"weiss_firma\" value=\"\" required autocomplete=\"organization\"><\/label>\n    <label class=\"weiss-zugang-feld\"><span>Contact, first and last name<\/span>\n      <input type=\"text\" name=\"weiss_name\" value=\"\" required autocomplete=\"name\"><\/label>\n    <label class=\"weiss-zugang-feld\"><span>E-mail address<\/span>\n      <input type=\"email\" name=\"weiss_mail\" value=\"\" required autocomplete=\"email\"><\/label>\n    <label class=\"weiss-zugang-feld\"><span>Phone number<\/span>\n      <input type=\"tel\" name=\"weiss_telefon\" value=\"\" required autocomplete=\"tel\"><\/label>\n    <label class=\"weiss-zugang-falle\" aria-hidden=\"true\"><span>Firma<\/span>\n      <input type=\"text\" name=\"weiss_firma_2\" value=\"\" tabindex=\"-1\" autocomplete=\"off\"><\/label>\n    <label class=\"weiss-zugang-pflicht\"><input type=\"checkbox\" name=\"weiss_datenschutz\" value=\"1\" required>\n      <span>I agree to my details being processed in order to handle this enquiry.        <a href=\"https:\/\/weiss-apparatebau.de\/en\/datenschutzerklaerung\/\" target=\"_blank\" rel=\"noopener\">Privacy policy<\/a><\/span><\/label>\n    <button type=\"submit\" class=\"weiss-zugang-knopf\">Request access<\/button>\n  <\/form>\n  <\/div>\n  <aside class=\"weiss-zugang-leiste\" aria-labelledby=\"weiss-zugang-leiste-titel\">\n    <p class=\"weiss-zugang-marke\">How it works<\/p>\n    <h3 class=\"weiss-zugang-leiste-titel\" id=\"weiss-zugang-leiste-titel\">Three steps to your prices<\/h3>\n    <ol class=\"weiss-zugang-schritte\">\n            <li><span class=\"weiss-zugang-nr\" aria-hidden=\"true\">1<\/span>\n        <span class=\"weiss-zugang-schritt\"><strong>Send your request<\/strong> As an end customer or OEM. The confirmation arrives by <span class=\"weiss-zugang-nb\">e-mail<\/span> straight away.<\/span><\/li>\n            <li><span class=\"weiss-zugang-nr\" aria-hidden=\"true\">2<\/span>\n        <span class=\"weiss-zugang-schritt\"><strong>Receive your password<\/strong> The link and password for your price area come by <span class=\"weiss-zugang-nb\">e-mail<\/span>.<\/span><\/li>\n            <li><span class=\"weiss-zugang-nr\" aria-hidden=\"true\">3<\/span>\n        <span class=\"weiss-zugang-schritt\"><strong>Configure with prices<\/strong> See the prices for your price group and send your inquiry with the configuration no.<\/span><\/li>\n          <\/ol>\n    <p class=\"weiss-zugang-zwischentitel\">Good to know<\/p>\n    <ul class=\"weiss-zugang-gut\">\n            <li>Separate price areas for end customers and OEMs.<\/li>\n            <li>Inspection certificate 3.1 free of charge, further certificates at extra cost.<\/li>\n            <li>Without a password: components, dimensions and materials selectable, prices on request.<\/li>\n          <\/ul>\n    <div class=\"weiss-zugang-kontakt\">\n      <p class=\"weiss-zugang-zwischentitel\">Questions first?<\/p>\n      <p class=\"weiss-zugang-kontakt-name\">Weiss Steriltechnik<\/p>\n      <a href=\"tel:+4951284044981\">Phone 0 51 28 - 40 44 981<\/a>\n      <a href=\"mailto:steriltechnik@weiss-apparatebau.de\">steriltechnik@weiss-apparatebau.de<\/a>\n    <\/div>\n  <\/aside>\n<\/section>\n<style>\n.weiss-zugang{max-width:1248px;margin:0 auto;scroll-margin-top:120px}\n.weiss-zugang-haupt{min-width:0}\n@media(min-width:1200px){.weiss-zugang{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,440px);gap:56px;align-items:start}}\n.weiss-zugang-leiste{background:#800000;color:#fff;border-top:6px solid #cc0000;padding:32px 28px 34px;margin-top:48px;min-width:0}\n@media(min-width:1200px){.weiss-zugang-leiste{margin-top:0;padding:34px 36px 30px}}\n.weiss-zugang .weiss-zugang-leiste p{color:#fff}\n.weiss-zugang-leiste .weiss-zugang-marke{margin:0 0 10px;font-size:14px;line-height:1.5;opacity:.9}\n.weiss-zugang-leiste .weiss-zugang-leiste-titel{margin:0 0 22px;color:#fff;font-size:26px;line-height:1.25;font-weight:800}\n.weiss-zugang-schritte{list-style:none;margin:0 0 24px;padding:0;display:grid;gap:14px}\n.weiss-zugang-schritte li{display:grid;grid-template-columns:36px minmax(0,1fr);gap:14px;align-items:start;margin:0;font-size:15px;line-height:1.5}\n.weiss-zugang-nr{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #fff;font-weight:700;font-size:15px}\n.weiss-zugang-schritt strong{display:block;font-size:16px;margin-bottom:2px}\n.weiss-zugang-leiste .weiss-zugang-zwischentitel{margin:0 0 10px;padding-top:20px;border-top:1px solid rgba(255,255,255,.28);font-weight:700;font-size:16px}\n.weiss-zugang-gut{list-style:none;margin:0 0 22px;padding:0;display:grid;gap:8px}\n.weiss-zugang-gut li{position:relative;margin:0;padding-left:28px;font-size:15px;line-height:1.5}\n.weiss-zugang-gut li:before{content:\"\";position:absolute;left:3px;top:6px;width:6px;height:11px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}\n.weiss-zugang-kontakt{display:grid;gap:2px}\n.weiss-zugang-nb{white-space:nowrap}\n.weiss-zugang-leiste .weiss-zugang-kontakt-name{margin:0;font-size:15px}\n.weiss-zugang .weiss-zugang-kontakt a{display:flex;align-items:center;min-height:44px;color:#fff;font-weight:700;font-size:15px;text-decoration:underline;text-underline-offset:3px;overflow-wrap:anywhere}\n.weiss-zugang .weiss-zugang-kontakt a:hover{color:#fff;text-decoration-thickness:2px}\n.weiss-zugang-titel{margin:0 0 8px}\n.weiss-zugang-text{margin:0 0 20px}\n.weiss-zugang-form{display:grid;gap:14px}\n@media(min-width:700px){.weiss-zugang-form{grid-template-columns:1fr 1fr}\n.weiss-zugang-art,.weiss-zugang-pflicht,.weiss-zugang-knopf{grid-column:1\/-1}}\n.weiss-zugang-feld{display:grid;grid-template-rows:1fr auto;gap:5px;font-size:14px}\n.weiss-zugang-feld span{align-self:end}\n.weiss-zugang-feld input{padding:11px 12px;border:1px solid #d7dbe0;border-radius:3px;font:inherit;min-height:44px}\n.weiss-zugang-art{border:0;padding:0;margin:0;font-size:14px}\n.weiss-zugang-art legend{padding:0;margin-bottom:4px}\n.weiss-zugang-art label{display:inline-flex;align-items:center;gap:8px;margin-right:18px;min-height:44px}\n.weiss-zugang-pflicht{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;line-height:1.5;min-height:44px;padding:4px 0}\n.weiss-zugang-pflicht input{margin-top:3px;width:18px;height:18px}\n.weiss-zugang-knopf{min-height:44px;padding:12px 24px;border:0;border-radius:3px;background:#d60a0a;color:#fff;\n  font:inherit;font-weight:700;letter-spacing:.02em;cursor:pointer;justify-self:start}\n.weiss-zugang-knopf:hover{background:#4c0000}\n.weiss-zugang a{color:#4c0000;text-decoration:underline}\n.weiss-zugang a:hover{color:#d60a0a}\n.weiss-zugang-falle{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}\n.weiss-zugang-ok{background:#eefaf1;border-left:4px solid #1f7a3d;padding:12px 14px;margin:0 0 18px}\n.weiss-zugang-fehler{background:#fdecec;border-left:4px solid #d60a0a;padding:12px 14px;margin:0 0 18px}\n<\/style>\n<script>\n(function () {\n  document.addEventListener('click', function (e) {\n    var a = e.target && e.target.closest ? e.target.closest('a[href=\"#weiss-zugang\"]') : null;\n    if (!a) { return; }\n    var ziel = document.getElementById('weiss-zugang');\n    if (!ziel) { return; }\n    \/\/ Dreimal, weil das Fenster beim Schliessen die alte Position zurueckholt und\n    \/\/ der Zeitpunkt davon nicht zugesichert ist.\n    var hin = function () { ziel.scrollIntoView({block: 'start'}); };\n    setTimeout(hin, 300);\n    setTimeout(hin, 800);\n    setTimeout(hin, 1400);\n  });\n})();\n<\/script>\n    <\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":2827,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"100-width.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-4344","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Stainless steel weld fittings to DIN 11865 | Weiss<\/title>\n<meta name=\"description\" content=\"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stainless steel weld fittings to DIN 11865 | Weiss\" \/>\n<meta property=\"og:description\" content=\"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/\" \/>\n<meta property=\"og:site_name\" content=\"Weiss Apparatebau GmbH\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-23T12:41:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/1weiss\u00a9patrik.labitzke\u00a9candidateflow.de_B-9.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"798\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"163 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/\",\"url\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/\",\"name\":\"Stainless steel weld fittings to DIN 11865 | Weiss\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#website\"},\"datePublished\":\"2026-09-17T03:54:24+00:00\",\"dateModified\":\"2026-09-23T12:41:04+00:00\",\"description\":\"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/weld-fittings-stainless-steel\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/precision-engineering-in-stainless-steel-made-in-germany\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Services\",\"item\":\"https:\\\/\\\/weiss-apparatebau.de\\\/en\\\/service\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Stainless steel weld fittings\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#website\",\"url\":\"https:\\\/\\\/weiss-apparatebau.de\\\/\",\"name\":\"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.\",\"description\":\"Spezialist f\u00fcr Edelstahl Beh\u00e4lterbau, Rohrleitungsbau &amp; Steriltechnik in der Industrie\",\"publisher\":{\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/weiss-apparatebau.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#organization\",\"name\":\"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.\",\"url\":\"https:\\\/\\\/weiss-apparatebau.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/weiss-apparatebau.de\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/WEISS-Logo.png\",\"contentUrl\":\"https:\\\/\\\/weiss-apparatebau.de\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/WEISS-Logo.png\",\"width\":400,\"height\":176,\"caption\":\"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.\"},\"image\":{\"@id\":\"https:\\\/\\\/weiss-apparatebau.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Stainless steel weld fittings to DIN 11865 | Weiss","description":"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","og_locale":"en_US","og_type":"article","og_title":"Stainless steel weld fittings to DIN 11865 | Weiss","og_description":"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.","og_url":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","og_site_name":"Weiss Apparatebau GmbH","article_modified_time":"2026-09-23T12:41:04+00:00","og_image":[{"width":1200,"height":798,"url":"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/05\/1weiss\u00a9patrik.labitzke\u00a9candidateflow.de_B-9.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"163 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","url":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/","name":"Stainless steel weld fittings to DIN 11865 | Weiss","isPartOf":{"@id":"https:\/\/weiss-apparatebau.de\/#website"},"datePublished":"2026-09-17T03:54:24+00:00","dateModified":"2026-09-23T12:41:04+00:00","description":"Bends, tees and reducers in stainless steel to DIN 11865. Select design, dimensions and material and send a technical inquiry.","breadcrumb":{"@id":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/weiss-apparatebau.de\/en\/service\/weld-fittings-stainless-steel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/weiss-apparatebau.de\/en\/precision-engineering-in-stainless-steel-made-in-germany\/"},{"@type":"ListItem","position":2,"name":"Services","item":"https:\/\/weiss-apparatebau.de\/en\/service\/"},{"@type":"ListItem","position":3,"name":"Stainless steel weld fittings"}]},{"@type":"WebSite","@id":"https:\/\/weiss-apparatebau.de\/#website","url":"https:\/\/weiss-apparatebau.de\/","name":"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.","description":"Spezialist f\u00fcr Edelstahl Beh\u00e4lterbau, Rohrleitungsbau &amp; Steriltechnik in der Industrie","publisher":{"@id":"https:\/\/weiss-apparatebau.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/weiss-apparatebau.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/weiss-apparatebau.de\/#organization","name":"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany.","url":"https:\/\/weiss-apparatebau.de\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/weiss-apparatebau.de\/#\/schema\/logo\/image\/","url":"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/03\/WEISS-Logo.png","contentUrl":"https:\/\/weiss-apparatebau.de\/wp-content\/uploads\/2025\/03\/WEISS-Logo.png","width":400,"height":176,"caption":"Ihr Partner f\u00fcr pr\u00e4zise Schwei\u00dfmontagen & Apparatebau \u2013 Made in Germany."},"image":{"@id":"https:\/\/weiss-apparatebau.de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages\/4344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/comments?post=4344"}],"version-history":[{"count":7,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages\/4344\/revisions"}],"predecessor-version":[{"id":4390,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages\/4344\/revisions\/4390"}],"up":[{"embeddable":true,"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/pages\/2827"}],"wp:attachment":[{"href":"https:\/\/weiss-apparatebau.de\/en\/wp-json\/wp\/v2\/media?parent=4344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}