[fusion_builder_container type=”flex” hundred_percent=”no” hundred_percent_height=”no” min_height=”” hundred_percent_height_scroll=”no” align_content=”stretch” flex_align_items=”flex-start” flex_justify_content=”flex-start” flex_column_spacing=”” hundred_percent_height_center_content=”yes” equal_height_columns=”no” container_tag=”div” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” status=”published” publish_date=”” class=”” id=”” link_color=”” link_hover_color=”” border_sizes=”” border_sizes_top=”” border_sizes_right=”” border_sizes_bottom=”” border_sizes_left=”” border_color=”” border_style=”solid” spacing_medium=”” margin_top_medium=”” margin_bottom_medium=”” spacing_small=”” margin_top_small=”” margin_bottom_small=”” margin_top=”” margin_bottom=”” padding_dimensions_medium=”” padding_top_medium=”” padding_right_medium=”” padding_bottom_medium=”” padding_left_medium=”” padding_dimensions_small=”” padding_top_small=”” padding_right_small=”” padding_bottom_small=”” padding_left_small=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” box_shadow=”no” box_shadow_vertical=”” box_shadow_horizontal=”” box_shadow_blur=”0″ box_shadow_spread=”0″ box_shadow_color=”” box_shadow_style=”” z_index=”” overflow=”” gradient_start_color=”” gradient_end_color=”” gradient_start_position=”0″ gradient_end_position=”100″ gradient_type=”linear” radial_direction=”center center” linear_angle=”180″ background_color=”” background_image=”” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” enable_mobile=”no” parallax_speed=”0.3″ background_blend_mode=”none” video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” video_preview_image=”” absolute=”off” absolute_devices=”small,medium,large” sticky=”off” sticky_devices=”small-visibility,medium-visibility,large-visibility” sticky_background_color=”” sticky_height=”” sticky_offset=”” sticky_transition_offset=”0″ scroll_offset=”0″ animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=”” filter_hue=”0″ filter_saturation=”100″ filter_brightness=”100″ filter_contrast=”100″ filter_invert=”0″ filter_sepia=”0″ filter_opacity=”100″ filter_blur=”0″ filter_hue_hover=”0″ filter_saturation_hover=”100″ filter_brightness_hover=”100″ filter_contrast_hover=”100″ filter_invert_hover=”0″ filter_sepia_hover=”0″ filter_opacity_hover=”100″ filter_blur_hover=”0″][fusion_builder_row][fusion_builder_column type=”1_1″ layout=”1_4″ last=”true” spacing=”yes” center_content=”no” hide_on_mobile=”no” background_color=”” background_image=”” background_repeat=”no-repeat” background_position=”left top” border_position=”all” border_color=”” border_style=”solid” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” margin_top=”” margin_bottom=”” animation_type=”0″ animation_direction=”down” animation_speed=”0.1″ class=”” id=”” min_height=”” hover_type=”none” link=”” border_sizes_top=”0px” border_sizes_bottom=”0px” border_sizes_left=”0px” border_sizes_right=”0px” first=”true” spacing_right=”2%” spacing_left=”2%” type=”1_1″][fusion_imageframe image_id=”18485|full” max_width=”” sticky_max_width=”” style_type=”none” blur=”” stylecolor=”” hover_type=”none” bordersize=”0px” bordercolor=”” borderradius=”0″ align_medium=”none” align_small=”none” align=”center” margin_top=”” margin_right=”” margin_bottom=”” margin_left=”” lightbox=”no” gallery_id=”” lightbox_image=”” lightbox_image_id=”” alt=”” link=”https://www.youtube.com/playlist?list=PLr3BNc199hQ6NpfK63R8EO9XrZf82NSEb” linktarget=”_blank” hide_on_mobile=”no” sticky_display=”normal,sticky” class=”” id=”” animation_type=”” animation_direction=”down” animation_speed=”0.1″ animation_offset=”” filter_hue=”0″ filter_saturation=”100″ filter_brightness=”100″ filter_contrast=”100″ filter_invert=”0″ filter_sepia=”0″ filter_opacity=”100″ filter_blur=”0″ filter_hue_hover=”0″ filter_saturation_hover=”100″ filter_brightness_hover=”100″ filter_contrast_hover=”100″ filter_invert_hover=”0″ filter_sepia_hover=”0″ filter_opacity_hover=”100″ filter_blur_hover=”0″]https://www.bucksindependence.com/wp-content/uploads/2023/05/Yardley-Memorial-Day-Parade_s_o.jpg[/fusion_imageframe][fusion_title title_type=”text” rotation_effect=”bounceIn” display_time=”1200″ highlight_effect=”circle” loop_animation=”off” highlight_width=”9″ highlight_top_margin=”0″ before_text=”” rotation_text=”” highlight_text=”” after_text=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” content_align_medium=”” content_align_small=”” content_align=”left” size=”3″ font_size=”” animated_font_size=”” fusion_font_family_title_font=”” fusion_font_variant_title_font=”” line_height=”” letter_spacing=”” margin_top_medium=”” margin_bottom_medium=”” margin_top_small=”” margin_bottom_small=”” margin_top=”18px” margin_bottom=”9px” margin_top_mobile=”” margin_bottom_mobile=”” text_color=”” animated_text_color=”” highlight_color=”” style_type=”none” sep_color=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]Yardley Boro Memorial Day Ceremony[/fusion_title][fusion_text columns=”” column_min_width=”” column_spacing=”” rule_style=”default” rule_size=”” rule_color=”” content_alignment_medium=”” content_alignment_small=”” content_alignment=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” font_size=”” fusion_font_family_text_font=”” fusion_font_variant_text_font=”” line_height=”” letter_spacing=”” text_color=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]Join WBCB as we broadcast live from Yardley Borough Memorial Day Ceremony.[/fusion_text][fusion_button link=”https://www.youtube.com/playlist?list=PLr3BNc199hQ6NpfK63R8EO9XrZf82NSEb” text_transform=”” title=”Yardley Boro Memorial Day Ceremony” target=”_blank” link_attributes=”” alignment_medium=”” alignment_small=”” alignment=”left” modal=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” color=”default” button_gradient_top_color=”#004953″ button_gradient_bottom_color=”#004953″ button_gradient_top_color_hover=”#acc0c6″ button_gradient_bottom_color_hover=”#acc0c6″ accent_color=”#ffffff” accent_hover_color=”#ffffff” type=”” bevel_color=”” border_width=”1px” border_radius=”2″ border_color=”#ffffff” border_hover_color=”#ffffff” size=”small” stretch=”yes” margin_top=”” margin_right=”” margin_bottom=”2px” margin_left=”” icon=”fa-video fas” icon_position=”left” icon_divider=”yes” animation_type=”” animation_direction=”left” animation_speed=”1.0″ animation_offset=””]Watch Now[/fusion_button][fusion_button link=”https://www.youtube.com/playlist?list=PLr3BNc199hQ6NpfK63R8EO9XrZf82NSEb” text_transform=”” title=”Join Yardley Boro Memorial Day Ceremony” target=”_blank” link_attributes=”” alignment_medium=”” alignment_small=”” alignment=”left” modal=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” color=”default” button_gradient_top_color=”#004953″ button_gradient_bottom_color=”#004953″ button_gradient_top_color_hover=”#acc0c6″ button_gradient_bottom_color_hover=”#acc0c6″ accent_color=”#ffffff” accent_hover_color=”#ffffff” type=”” bevel_color=”” border_width=”1px” border_radius=”2″ border_color=”#ffffff” border_hover_color=”#ffffff” size=”small” stretch=”yes” margin_top=”” margin_right=”” margin_bottom=”2px” margin_left=”” icon=”fa-video fas” icon_position=”left” icon_divider=”yes” animation_type=”” animation_direction=”left” animation_speed=”1.0″ animation_offset=””]Past Episodes[/fusion_button][fusion_code]PHN0eWxlPgovKiBZb3VUdWJlIFRWICovCgovKiBCYXNlIENhbnZhcyAqLwoueXR2LWNhbnZhc3sKCWRpc3BsYXk6IGJsb2NrOwoJYmFja2dyb3VuZDogIzI4MjgyODsKCW92ZXJmbG93OiBoaWRkZW47Cglmb250LWZhbWlseTogYXJpYWwsIHNhbnMtc2VyaWY7Cn0KLnl0di1jYW52YXMgOjotd2Via2l0LXNjcm9sbGJhcnsKCWJvcmRlci1sZWZ0OiAxcHggc29saWQgIzAwMDsKCXdpZHRoOiAxMHB4Owp9Ci55dHYtY2FudmFzIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7CgliYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7Cn0KCi8qIFZpZGVvICovCi55dHYtdmlkZW97Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IDA7CglyaWdodDogMzAwcHg7Cglib3R0b206IDA7CglsZWZ0OiAwOwoJaGVpZ2h0OiAxMDAlOwp9Ci55dHYtdmlkZW8gaWZyYW1lewoJd2lkdGg6IDEwMCU7CgloZWlnaHQ6IDEwMCU7Cglib3JkZXI6IG5vbmU7CglvdXRsaW5lOiBub25lOwoJZGlzcGxheTogYmxvY2s7Cn0KCi8qIExpc3QgKi8KLnl0di1saXN0ewoJcG9zaXRpb246IGFic29sdXRlOwoJdG9wOiAwOwoJcmlnaHQ6IDA7Cglib3R0b206IDA7CgloZWlnaHQ6IDEwMCU7Cgl3aWR0aDogMzAwcHg7Cn0KLnl0di1saXN0LWlubmVyewoJb3ZlcmZsb3c6IGF1dG87Cglwb3NpdGlvbjogYWJzb2x1dGU7Cgl0b3A6IDUycHg7CglyaWdodDogMDsKCWJvdHRvbTogMDsKCWxlZnQ6IDA7Cgktd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7Cn0KLnl0di1saXN0IHVsewoJbWFyZ2luOiAwOwoJcGFkZGluZzogMDsKCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKfQoueXR2LWxpc3QgLnl0di1hY3RpdmUgYXsKCWJvcmRlci1sZWZ0OiAycHggc29saWQgI2ZmZjsKCWJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7Owp9Ci55dHYtbGlzdCBhewoJZGlzcGxheTogYmxvY2s7Cgl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cglmb250LXNpemU6IDExcHg7Cgljb2xvcjogI0ZFRkVGRTsKCXBhZGRpbmc6IDEwcHg7CglwYWRkaW5nLWxlZnQ6IDhweDsKCWJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7Cglib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjUpOwoJYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKfQoueXR2LWxpc3QgYSBiewoJbWF4LWhlaWdodDogNDVweDsKCW92ZXJmbG93OiBoaWRkZW47CglkaXNwbGF5OiBibG9jazsKCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci55dHYtbGlzdCBsaTpmaXJzdC1jaGlsZCBheyBib3JkZXItdG9wOiBub25lOyB9Ci55dHYtbGlzdCBsaTpsYXN0LWNoaWxkIGF7IGJvcmRlci1ib3R0b206IG5vbmU7IH0KLnl0di1saXN0IGE6aG92ZXIsCi55dHYtbGlzdC1oZWFkZXIgLnl0di1wbGF5bGlzdHMgYTpob3ZlcnsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsgfQoueXR2LWxpc3QgYTphY3RpdmUsCi55dHYtbGlzdC1oZWFkZXIgLnl0di1wbGF5bGlzdHMgYTphY3RpdmV7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7IH0KCi55dHYtbGlzdCAueXR2LWNvbnRlbnR7IHBhZGRpbmctbGVmdDogMTI1cHg7IH0KLnl0di1saXN0IC55dHYtdGh1bWItc3Ryb2tlewoJcG9zaXRpb246IGFic29sdXRlOwoJdG9wOiAxcHg7CglsZWZ0OiAxcHg7Cglib3R0b206IDFweDsKCXJpZ2h0OiAxcHg7Cgl6LWluZGV4OiAyOwoJb3V0bGluZTogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKfQoueXR2LWxpc3QgLnl0di10aHVtYnsKCWZsb2F0OiBsZWZ0OwoJcG9zaXRpb246IHJlbGF0aXZlOwoJb3V0bGluZTogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41KTsKfQoueXR2LWxpc3QgLnl0di10aHVtYiBpbWd7Cgl3aWR0aDogMTIwcHg7CglkaXNwbGF5OiBibG9jazsKfQoueXR2LWxpc3QgLnl0di10aHVtYiBzcGFuewoJcG9zaXRpb246IGFic29sdXRlOwoJYm90dG9tOiA1cHg7CglyaWdodDogNXB4OwoJY29sb3I6ICNlZWU7CgliYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNyk7Cglmb250LXNpemU6IDExcHg7Cglmb250LXdlaWdodDogYm9sZDsKCXBhZGRpbmc6IDBweCA0cHg7CgoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CgktbW96LWJvcmRlci1yYWRpdXM6IDNweDsKCWJvcmRlci1yYWRpdXM6IDNweDsKfQoueXR2LXZpZXdzewoJZGlzcGxheTogYmxvY2s7CgltYXJnaW4tdG9wOiA1cHg7Cglmb250LXNpemU6IDEwcHg7Cglmb250LXdlaWdodDogbm9ybWFsOwoJb3BhY2l0eTogMC4zOwp9CgoueXR2LWxpc3QtaGVhZGVyewoJaGVpZ2h0OiA1MnB4OwoJLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpOwoJLW1vei1ib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpOwoJYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKfQoueXR2LWxpc3QtaGVhZGVyIGF7CgliYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOwoJcG9zaXRpb246IHJlbGF0aXZlOwoJei1pbmRleDogMTA7Cn0KLnl0di1saXN0LWhlYWRlciBpbWcsCi55dHYtbGlzdCAueXR2LXBsYXlsaXN0cyAueXR2LXRodW1iIGltZ3sKCXdpZHRoOiAzMHB4OwoJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoueXR2LWxpc3QtaGVhZGVyIHNwYW57CglwYWRkaW5nLWxlZnQ6IDEwcHg7Cglmb250LXNpemU6IDEycHg7Cglmb250LXdlaWdodDogYm9sZDsKfQoKLyogUGxheWxpc3RzICovCi55dHYtcGxheWxpc3RzewoJei1pbmRleDogOTsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCWJhY2tncm91bmQ6ICMyODI4Mjg7Cgl0b3A6NTJweDsKCWxlZnQ6IDA7CglyaWdodDogMDsKCWJvdHRvbTogMDsKCW92ZXJmbG93OiBhdXRvOwoJZGlzcGxheTogbm9uZTsKfQoueXR2LXBsYXlsaXN0cyBpbWcsCi55dHYtbGlzdC1oZWFkZXIgaW1newoJZmxvYXQ6IGxlZnQ7Cn0KLnl0di1wbGF5bGlzdHMgYSBzcGFuLAoueXR2LWxpc3QtaGVhZGVyIGEgc3BhbnsKCXdoaXRlLXNwYWNlOiBub3dyYXA7CglwYWRkaW5nLWxlZnQ6IDEwcHg7CglkaXNwbGF5OiBibG9jazsKCW92ZXJmbG93OiBoaWRkZW47Cgl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoueXR2LWxpc3QtaGVhZGVyID4gYSBzcGFuewoJbGluZS1oZWlnaHQ6IDMwcHg7Cn0KLnl0di1saXN0LWhlYWRlciAueXR2LXBsYXlsaXN0cyBhewoJYmFja2dyb3VuZDogbm9uZTsKfQoueXR2LXBsYXlsaXN0LW9wZW4gLnl0di1wbGF5bGlzdHN7CglkaXNwbGF5OiBibG9jazsKfQoKLyogTW9kaWZpZXJzICovCi55dHYtcmVsYXRpdmV7Cglwb3NpdGlvbjogcmVsYXRpdmU7Cgl3aWR0aDogMTAwJTsKCWhlaWdodDogMTAwJTsKfQoueXR2LWZ1bGx7Cglwb3NpdGlvbjogZml4ZWQ7Cgl0b3A6IDA7CglsZWZ0OiAwOwoJd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKCWhlaWdodDogMTAwJSAhaW1wb3J0YW50OwoJbWFyZ2luOiAwICFpbXBvcnRhbnQ7Cn0KLnl0di1hcnJvdyB7CgloZWlnaHQ6IDEwcHg7Cgl3aWR0aDogMDsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCXRvcDogMTBweDsKCXJpZ2h0OiA1cHg7Cglib3JkZXI6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7CglmbG9hdDogcmlnaHQ7Cglib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsMCwwLDAuNCk7CglkaXNwbGF5OiBub25lOwp9Ci55dHYtaGFzLXBsYXlsaXN0cyAueXR2LWFycm93ewoJZGlzcGxheTogaW5saW5lLWJsb2NrOwp9Ci55dHYtcGxheWxpc3Qtb3BlbiAueXR2LWFycm93ewoJYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKCWJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwwLDAsMC40KTsKCXRvcDogLTEwcHg7Cn0KCi55dHYtbGlzdC1oZWFkZXIgYTphZnRlciwKLnl0di1jbGVhcjphZnRlciB7Cgljb250ZW50OiAiLiI7CglkaXNwbGF5OiBibG9jazsKCWNsZWFyOiBib3RoOwoJdmlzaWJpbGl0eTogaGlkZGVuOwoJbGluZS1oZWlnaHQ6IDA7CgloZWlnaHQ6IDA7Cn0KPC9zdHlsZT4KCgoKCgo8c2NyaXB0PgovKgogKiBZb3VUdWJlIFRWCiAqCiAqIENvcHlyaWdodCAyMDEzLCBKYWNvYiBLZWxsZXkgLSBodHRwOi8vamFraWVzdGZ1LmNvbS8KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbmNlCiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKICoKICogR2l0aHViOiAgCiAqIFZlcnNpb246IDMuMC41CiAqLwovKmpzbGludCBicm93c2VyOiB0cnVlLCB1bmRlZjp0cnVlLCB1bnVzZWQ6dHJ1ZSwgbGF4YnJlYWs6dHJ1ZSwgbG9vcGZ1bmM6dHJ1ZSovCi8qZ2xvYmFsIGRlZmluZSwgbW9kdWxlLCBlbmRlciAqLwoKKGZ1bmN0aW9uKHdpbiwgZG9jKSB7CgkndXNlIHN0cmljdCc7Cgl2YXIgYXBpS2V5ID0gJ0FJemFTeUFGb1J5bFc3SWZLQ2lVTWFOZlh0bGVvQTZCaC1LR3V0Zyc7Cgl2YXIgWVRWID0gWVRWIHx8IGZ1bmN0aW9uKGlkLCBvcHRzKXsKCgkJdmFyIG5vb3AgPSBmdW5jdGlvbigpe30sCgkJCXNldHRpbmdzID0gewoJCQkJYXBpS2V5OiBhcGlLZXksCgkJCQllbGVtZW50OiBudWxsLAoJCQkJdXNlcjogbnVsbCwKCQkJCWNoYW5uZWxJZDogbnVsbCwKCQkJCWZ1bGxzY3JlZW46IGZhbHNlLAoJCQkJYWNjZW50OiAnI2ZmZicsCgkJCQljb250cm9sczogdHJ1ZSwKCQkJCWFubm90YXRpb25zOiBmYWxzZSwKCQkJCWF1dG9wbGF5OiBmYWxzZSwKCQkJCWNoYWluVmlkZW9zOiB0cnVlLAoJCQkJYnJvd3NlUGxheWxpc3RzOiBmYWxzZSwKCQkJCXBsYXllclRoZW1lOiAnZGFyaycsCgkJCQlsaXN0VGhlbWU6ICdkYXJrJywKCQkJCXJlc3BvbnNpdmU6IGZhbHNlLAoJCQkJcGxheUlkOicnLAoJCQkJc29ydExpc3Q6IGZhbHNlLAoJCQkJcmV2ZXJzZUxpc3Q6IGZhbHNlLAoJCQkJc2h1ZmZsZUxpc3Q6IGZhbHNlLAoJCQkJd21vZGU6ICdvcGFxdWUnLAoJCQkJZXZlbnRzOiB7CgkJCQkJdmlkZW9SZWFkeTogbm9vcCwKCQkJCQlzdGF0ZUNoYW5nZTogbm9vcAoJCQkJfQoJCQl9LAoJCQkKCQkJY2FjaGUgPSB7CgkJCQlkYXRhOiB7fSwKCQkJCXJlbW92ZTogZnVuY3Rpb24gKHVybCkgewoJCQkJCWRlbGV0ZSBjYWNoZS5kYXRhW3VybF07CgkJCQl9LAoJCQkJZXhpc3Q6IGZ1bmN0aW9uICh1cmwpIHsKCQkJCQlyZXR1cm4gY2FjaGUuZGF0YS5oYXNPd25Qcm9wZXJ0eSh1cmwpICYmIGNhY2hlLmRhdGFbdXJsXSAhPT0gbnVsbDsKCQkJCX0sCgkJCQlnZXQ6IGZ1bmN0aW9uICh1cmwpIHsKCQkJCQlyZXR1cm4gY2FjaGUuZGF0YVt1cmxdOwoJCQkJfSwKCQkJCXNldDogZnVuY3Rpb24gKHVybCwgZGF0YSkgewoJCQkJCWNhY2hlLnJlbW92ZSh1cmwpOwoJCQkJCWNhY2hlLmRhdGFbdXJsXSA9IGRhdGE7CgkJCQl9CgkJCX0sCgkJCXV0aWxzID0gewoJCQkJZXZlbnRzOiB7CgkJCQkJYWRkRXZlbnQ6IGZ1bmN0aW9uIGFkZEV2ZW50KGVsZW1lbnQsIGV2ZW50TmFtZSwgZnVuYykgewoJCQkJCQlpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7CgkJCQkJCQlyZXR1cm4gZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwoJCQkJCQl9IGVsc2UgaWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpIHsKCQkJCQkJCXJldHVybiBlbGVtZW50LmF0dGFjaEV2ZW50KCJvbiIgKyBldmVudE5hbWUsIGZ1bmMpOwoJCQkJCQl9CgkJCQkJfSwKCQkJCQlyZW1vdmVFdmVudDogZnVuY3Rpb24gYWRkRXZlbnQoZWxlbWVudCwgZXZlbnROYW1lLCBmdW5jKSB7CgkJCQkJCWlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKCQkJCQkJCXJldHVybiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CgkJCQkJCX0gZWxzZSBpZiAoZWxlbWVudC5hdHRhY2hFdmVudCkgewoJCQkJCQkJcmV0dXJuIGVsZW1lbnQuZGV0YWNoRXZlbnQoIm9uIiArIGV2ZW50TmFtZSwgZnVuYyk7CgkJCQkJCX0KCQkJCQl9LAoJCQkJCXByZXZlbnQ6IGZ1bmN0aW9uKGUpIHsKCQkJCQkJaWYgKGUucHJldmVudERlZmF1bHQpIHsKCQkJCQkJCWUucHJldmVudERlZmF1bHQoKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWUucmV0dXJuVmFsdWUgPSBmYWxzZTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0sCgkJCQlhZGRDU1M6IGZ1bmN0aW9uKGNzcyl7CgkJCQkJdmFyIGhlYWQgPSBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSwKCQkJCQkJc3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKCQkJCQkJc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7CgkJCQkJaWYgKHN0eWxlLnN0eWxlU2hlZXQpewoJCQkJCQlzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7CgkJCQkJfSBlbHNlIHsKCQkJCQkJc3R5bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzcykpOwoJCQkJCX0KCQkJCQloZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsKCQkJCX0sCgkJCQlhZGRDb21tYXM6IGZ1bmN0aW9uKHN0cil7CgkJCQkJdmFyIHggPSBzdHIuc3BsaXQoJy4nKSwKCQkJCQkJeDEgPSB4WzBdLAoJCQkJCQl4MiA9IHgubGVuZ3RoID4gMSA/ICcuJyArIHhbMV0gOiAnJywKCQkJCQkJcmd4ID0gLyhcZCspKFxkezN9KS87CgkJCQkJd2hpbGUgKHJneC50ZXN0KHgxKSkgewoJCQkJCQl4MSA9IHgxLnJlcGxhY2Uocmd4LCAnJDEnICsgJywnICsgJyQyJyk7CgkJCQkJfQoJCQkJCXJldHVybiB4MSArIHgyOwoJCQkJfSwKCQkJCXBhcmVudFVudGlsOiBmdW5jdGlvbihlbCwgYXR0cikgewoJCQkJCXdoaWxlIChlbC5wYXJlbnROb2RlKSB7CgkJCQkJCWlmIChlbC5nZXRBdHRyaWJ1dGUgJiYgZWwuZ2V0QXR0cmlidXRlKGF0dHIpKXsKCQkJCQkJCXJldHVybiBlbDsKCQkJCQkJfQoJCQkJCQllbCA9IGVsLnBhcmVudE5vZGU7CgkJCQkJfQoJCQkJCXJldHVybiBudWxsOwoJCQkJfSwKCQkJCWFqYXg6IHsKCQkJCQlnZXQ6IGZ1bmN0aW9uKHVybCwgZm4pewoJCQkJCQlpZiAoY2FjaGUuZXhpc3QodXJsKSkgewoJCQkJCQkJZm4uY2FsbCh0aGlzLCBKU09OLnBhcnNlKGNhY2hlLmdldCh1cmwpKSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQl2YXIgaGFuZGxlOwoJCQkJCQkJaWYgKHdpbi5YRG9tYWluUmVxdWVzdCAmJiAhKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIk1TSUUgOCIpPT0tMSB8fCBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNU0lFIDkiKT09LTEpKSB7IC8vIENPUlMgZm9yIElFOCw5CgkJCQkJCQkJaGFuZGxlID0gbmV3IFhEb21haW5SZXF1ZXN0KCk7CgkJCQkJCQkJaGFuZGxlLm9ubG9hZCA9IGZ1bmN0aW9uKCl7CgkJCQkJCQkJCWNhY2hlLnNldCh1cmwsIGhhbmRsZS5yZXNwb25zZVRleHQpOwoJCQkJCQkJCQlmbi5jYWxsKHRoaXMsIEpTT04ucGFyc2UoaGFuZGxlLnJlc3BvbnNlVGV4dCkpOwoJCQkJCQkJCQlpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEpTT04ucGFyc2UoaGFuZGxlLnJlc3BvbnNlVGV4dCksICdlcnJvcicpKXsKCQkJCQkJCQkJCWNhY2hlLnJlbW92ZSh1cmwpOwoJCQkJCQkJCQkJdmFyIGUgPSBKU09OLnBhcnNlKGhhbmRsZS5yZXNwb25zZVRleHQpOwoJCQkJCQkJCQkJY29uc29sZS5sb2coJ1lvdXR1YmUtVFYgRXJyb3I6IFlvdXR1YmUgQVBJIFJlc3BvbnNlOiAnK2UuZXJyb3IuZXJyb3JzWzBdLnJlYXNvbisnXG4nKyAnRGV0YWlsczogJytlLmVycm9yLmVycm9yc1swXS5tZXNzYWdlKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX07CgkJCQkJCQl9IGVsc2UgaWYgKHdpbi5YTUxIdHRwUmVxdWVzdCl7IC8vIE1vZGVybiBCcm93c2VycwoJCQkJCQkJCWhhbmRsZSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOyAKCQkJCQkJCX0KCQkJCQkJCWhhbmRsZS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpewoJCQkJCQkJCWlmIChoYW5kbGUucmVhZHlTdGF0ZSA9PT0gNCAmJiBoYW5kbGUuc3RhdHVzID09PSAyMDApewoJCQkJCQkJCQljYWNoZS5zZXQodXJsLCBoYW5kbGUucmVzcG9uc2VUZXh0KTsKCQkJCQkJCQkJZm4uY2FsbCh0aGlzLCBKU09OLnBhcnNlKGhhbmRsZS5yZXNwb25zZVRleHQpKTsKCQkJCQkJCQl9IGVsc2UgaWYgKGhhbmRsZS5yZWFkeVN0YXRlID09PSA0KXsKCQkJCQkJCQkJdmFyIGUgPSBKU09OLnBhcnNlKGhhbmRsZS5yZXNwb25zZVRleHQpOwoJCQkJCQkJCQljb25zb2xlLmxvZygnWW91dHViZS1UViBFcnJvcjogWW91dHViZSBBUEkgUmVzcG9uc2U6ICcrZS5lcnJvci5lcnJvcnNbMF0ucmVhc29uKydcbicrICdEZXRhaWxzOiAnK2UuZXJyb3IuZXJyb3JzWzBdLm1lc3NhZ2UpOwoJCQkJCQkJCX0KCQkJCQkJCX07CgkJCQkJCQloYW5kbGUub3BlbigiR0VUIix1cmwsdHJ1ZSk7CgkJCQkJCQloYW5kbGUuc2VuZCgpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfSwKCQkJCWVuZHBvaW50czogewoJCQkJCWJhc2U6ICdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS95b3V0dWJlL3YzLycsCgkJCQkJdXNlckluZm86IGZ1bmN0aW9uKCl7CgkJCQkJCXJldHVybiB1dGlscy5lbmRwb2ludHMuYmFzZSsnY2hhbm5lbHM/JytzZXR0aW5ncy5jaWQrJyZrZXk9JythcGlLZXkrJyZwYXJ0PXNuaXBwZXQsY29udGVudERldGFpbHMsc3RhdGlzdGljcyc7CgkJCQkJfSwKCQkJCQlwbGF5bGlzdEluZm86IGZ1bmN0aW9uKHBpZCl7CgkJCQkJCXJldHVybiB1dGlscy5lbmRwb2ludHMuYmFzZSsncGxheWxpc3RzP2lkPScrcGlkKycma2V5PScrYXBpS2V5KycmbWF4UmVzdWx0cz01MCZwYXJ0PXNuaXBwZXQnOwoJCQkJCX0sCgkJCQkJdXNlclBsYXlsaXN0czogZnVuY3Rpb24oKXsKCQkJCQkJcmV0dXJuIHV0aWxzLmVuZHBvaW50cy5iYXNlKydwbGF5bGlzdHM/Y2hhbm5lbElkPScrc2V0dGluZ3MuY2hhbm5lbElkKycma2V5PScrYXBpS2V5KycmbWF4UmVzdWx0cz01MCZwYXJ0PXNuaXBwZXQnOwoJCQkJCX0sCgkJCQkJcGxheWxpc3RWaWRzOiBmdW5jdGlvbigpewoJCQkJCQlyZXR1cm4gdXRpbHMuZW5kcG9pbnRzLmJhc2UrJ3BsYXlsaXN0SXRlbXM/cGxheWxpc3RJZD0nK3NldHRpbmdzLnBpZCsnJmtleT0nK2FwaUtleSsnJm1heFJlc3VsdHM9NTAmcGFydD1jb250ZW50RGV0YWlscyc7CgkJCQkJfSwKCQkJCQl2aWRlb0luZm86IGZ1bmN0aW9uKCl7CgkJCQkJCXJldHVybiB1dGlscy5lbmRwb2ludHMuYmFzZSsndmlkZW9zP2lkPScrc2V0dGluZ3MudmlkZW9TdHJpbmcrJyZrZXk9JythcGlLZXkrJyZtYXhSZXN1bHRzPTUwJnBhcnQ9c25pcHBldCxjb250ZW50RGV0YWlscyxzdGF0dXMsc3RhdGlzdGljcyc7CgkJCQkJfQoJCQkJfSwKCQkJCWRlZXBFeHRlbmQ6IGZ1bmN0aW9uKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHsKCQkJCQl2YXIgcHJvcGVydHk7CgkJCQkJZm9yIChwcm9wZXJ0eSBpbiBzb3VyY2UpIHsKCQkJCQkJaWYgKHNvdXJjZVtwcm9wZXJ0eV0gJiYgc291cmNlW3Byb3BlcnR5XS5jb25zdHJ1Y3RvciAmJiBzb3VyY2VbcHJvcGVydHldLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHsKCQkJCQkJCWRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IGRlc3RpbmF0aW9uW3Byb3BlcnR5XSB8fCB7fTsKCQkJCQkJCXV0aWxzLmRlZXBFeHRlbmQoZGVzdGluYXRpb25bcHJvcGVydHldLCBzb3VyY2VbcHJvcGVydHldKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CgkJCQkJCX0KCQkJCQl9CgkJCQkJcmV0dXJuIGRlc3RpbmF0aW9uOwoJCQkJfQoJCQl9LAoJCQlwcmVwYXJlID0gewoJCQkJeW91dHViZTogZnVuY3Rpb24oKXsKCQkJCQlpZih0eXBlb2YgWVQ9PSd1bmRlZmluZWQnKXsKCQkJCQkJdmFyIHRhZyA9IGRvYy5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKCQkJCQkJdGFnLnNyYyA9ICJodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpIjsKCQkJCQkJdmFyIGZpcnN0U2NyaXB0VGFnID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsKCQkJCQkJZmlyc3RTY3JpcHRUYWcucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGFnLCBmaXJzdFNjcmlwdFRhZyk7CgkJCQkJfQoJCQkJfSwKCQkJCWJ1aWxkOiBmdW5jdGlvbigpewoJCQkJCWlmIChzZXR0aW5ncy5jaGFubmVsSWQpewoJCQkJCQlzZXR0aW5ncy5jaWQgPSAnaWQ9JytzZXR0aW5ncy5jaGFubmVsSWQ7CgkJCQkJfSBlbHNlIGlmKHNldHRpbmdzLnVzZXIpewoJCQkJCQlzZXR0aW5ncy5jaWQgPSAnZm9yVXNlcm5hbWU9JytzZXR0aW5ncy51c2VyOwoJCQkJCX0KCQkJCQlzZXR0aW5ncy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ5dHYtY2FudmFzIjsKCQkJCQlpZihzZXR0aW5ncy5mdWxsc2NyZWVuKXsKCQkJCQkJc2V0dGluZ3MuZWxlbWVudC5jbGFzc05hbWUgKz0gIiB5dHYtZnVsbCI7CgkJCQkJfQoJCQkJCXV0aWxzLmFkZENTUyggJyMnK2lkKycgLnl0di1saXN0IC55dHYtYWN0aXZlIGF7Ym9yZGVyLWxlZnQtY29sb3I6ICcrKHNldHRpbmdzLmFjY2VudCkrJzt9JyApOwoJCQkJCS8vIFJlc3BvbnNpdmUgQ1NTCgkJCQkJaWYoc2V0dGluZ3MucmVzcG9uc2l2ZSl7CgkJCQkJCXV0aWxzLmFkZENTUygnIycraWQrJyAueXR2LXZpZGVveycKCQkJCQkJCSsncG9zaXRpb246IHJlbGF0aXZlOyBwYWRkaW5nLWJvdHRvbTogMzkuNCU7IC8qIDE2Ojkgb2YgNzAlKi8nCgkJCQkJCQkrJ2hlaWdodDogMDsgd2lkdGg6IDcwJTsnCgkJCQkJCQkrJ30gIycraWQrJyAueXR2LXZpZGVvIGlmcmFtZXsnCgkJCQkJCQkrJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOycKCQkJCQkJCSsnfSAjJytpZCsnIC55dHYtbGlzdHsnCgkJCQkJCQkrJ3dpZHRoOiAzMCU7JwoJCQkJCQkJKyd9ICMnK2lkKycgLnl0di1wbGF5bGlzdC1vcGVuIC55dHYtYXJyb3d7JwoJCQkJCQkJKyd0b3A6IDBweDt9JwoJCQkJCQkJKydAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6OTkycHgpIHsnCgkJCQkJCQkrJyMnK2lkKycgLnl0di1saXN0eycKCQkJCQkJCSsncG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBibG9jazsnCgkJCQkJCQkrJ3dpZHRoOiAwOyBwYWRkaW5nLWJvdHRvbTogNDAlOycKCQkJCQkJCSsnbGVmdDogYXV0bzsgcmlnaHQ6IGF1dG87JwoJCQkJCQkJKyd0b3A6IGF1dG87IHdpZHRoOiAxMDAlOycKCQkJCQkJCSsnfSAjJytpZCsnIC55dHYtdmlkZW97JwoJCQkJCQkJKydwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmctYm90dG9tOiA1Ni4yNSU7IC8qIDE2OjkgKi8nCgkJCQkJCQkrJ2hlaWdodDogMDsgcG9zaXRpb246IHJlbGF0aXZlOycKCQkJCQkJCSsnZGlzcGxheTogYmxvY2s7IGxlZnQ6IGF1dG87JwoJCQkJCQkJKydyaWdodDogYXV0bzsgdG9wOiBhdXRvOyB3aWR0aDogMTAwJTsnCgkJCQkJCQkrJ319JwoJCQkJCQkJKTsKCQkJCQl9CgkJCQkJLy8gVGVtcCBTY3JvbGwgQmFyIGZpeAoJCQkJCWlmIChzZXR0aW5ncy5saXN0VGhlbWUgPT0gJ2RhcmsnKXsKCQkJCQkJdXRpbHMuYWRkQ1NTKCAnICMnK2lkKycueXR2LWNhbnZhcyA6Oi13ZWJraXQtc2Nyb2xsYmFye2JvcmRlci1sZWZ0OiAxcHggc29saWQgIzAwMDt9JwoJCQkJCQkJKyAnICMnK2lkKycueXR2LWNhbnZhcyA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTt9Jyk7CgkJCQkJfQoJCQkJCS8vIE9wdGlvbmFsIExpZ2h0IExpc3QgVGhlbWUKCQkJCQlpZihzZXR0aW5ncy5saXN0VGhlbWUgPT0gJ2xpZ2h0Jyl7CgkJCQkJCXV0aWxzLmFkZENTUyggJyAjJytpZCsnLnl0di1jYW52YXN7YmFja2dyb3VuZDogI2NjYzt9JwoJCQkJCQkJKyAnICMnK2lkKycueXR2LWNhbnZhcyA6Oi13ZWJraXQtc2Nyb2xsYmFye2JvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgyOCwyOCwyOCwwLjEpO30nCgkJCQkJCQkrICcgIycraWQrJy55dHYtY2FudmFzIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7YmFja2dyb3VuZDogcmdiYSgyOCwyOCwyOCwwLjMpO30nCgkJCQkJCQkrICcgIycraWQrJyAueXR2LWxpc3QgLnl0di1hY3RpdmUgYXtiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7fScKCQkJCQkJCSsgJyAjJytpZCsnIC55dHYtbGlzdCBhe2NvbG9yOiAjMjgyODI4OyBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEpOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyMDQsMjA0LDIwNCwwLjUpO30nCgkJCQkJCQkrICcgIycraWQrJyAueXR2LWxpc3QgYTpob3ZlciwgIycraWQrJyAueXR2LWxpc3QtaGVhZGVyIC55dHYtcGxheWxpc3RzIGE6aG92ZXJ7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4yKTt9JwoJCQkJCQkJKyAnICMnK2lkKycgLnl0di1saXN0IGE6YWN0aXZlLCAjJytpZCsnIC55dHYtbGlzdC1oZWFkZXIgLnl0di1wbGF5bGlzdHMgYTphY3RpdmV7IGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4yKTt9JwoJCQkJCQkJKyAnICMnK2lkKycgLnl0di1saXN0IC55dHYtdGh1bWItc3Ryb2tle291dGxpbmU6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7fScKCQkJCQkJCSsgJyAjJytpZCsnIC55dHYtbGlzdCAueXR2LXRodW1ie291dGxpbmU6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7fScKCQkJCQkJCSsgJyAjJytpZCsnIC55dHYtbGlzdC1oZWFkZXJ7LXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOyAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7IGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7fScKCQkJCQkJCSsgJyAjJytpZCsnIC55dHYtbGlzdC1oZWFkZXIgYXtiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7fScKCQkJCQkJCSsgJyAjJytpZCsnIC55dHYtcGxheWxpc3Rze2JhY2tncm91bmQ6ICNjY2M7fScKCQkJCQkJCSk7CgkJCQkJfQoJCQkJfSwKCQkJCXVzZXJVcGxvYWRzOiBmdW5jdGlvbih1c2VySW5mbyl7CgkJCQkJaWYgKHVzZXJJbmZvICYmIHVzZXJJbmZvLml0ZW1zLmxlbmd0aCA+IDApewoJCQkJCQlzZXR0aW5ncy5waWQgPSB1c2VySW5mby5pdGVtc1swXS5jb250ZW50RGV0YWlscy5yZWxhdGVkUGxheWxpc3RzLnVwbG9hZHM7CgkJCQkJCXV0aWxzLmFqYXguZ2V0KCB1dGlscy5lbmRwb2ludHMucGxheWxpc3RWaWRzKCksIHByZXBhcmUuY29tcGlsZVZpZGVvcyApOwoJCQkJCX0gZWxzZSBjb25zb2xlLmxvZyAoJ1lvdXR1YmUtVFYgRXJyb3I6IEFQSSByZXR1cm5lZCBubyBtYXRjaGVzIGZvcjogJysoc2V0dGluZ3MuY2hhbm5lbElkID8gc2V0dGluZ3MuY2hhbm5lbElkIDogc2V0dGluZ3MudXNlcikrJ1xuUGxlYXNlIGVuc3VyZSBpdCB3YXMgZW50ZXJlZCBjb3JyZWN0bHkgYW5kIGluIHRoZSBhcHByb3ByaWF0ZSBmaWVsZCBzaG93biBiZWxvdy4gXG51c2VyOiBcJ3VzZXJuYW1lXCcgb3IgY2hhbm5lbElkOiBcJ1VDeHh4eC4uLlwnJyk7CgkJCQl9LAoJCQkJc2VsZWN0ZWRQbGF5bGlzdDogZnVuY3Rpb24ocGxheWxpc3RJbmZvKXsKCQkJCQlpZiAocGxheWxpc3RJbmZvICYmIHBsYXlsaXN0SW5mby5pdGVtcy5sZW5ndGggPiAwKSB7CgkJCQkJCWlmICghc2V0dGluZ3MuY2hhbm5lbElkICYmICFzZXR0aW5ncy51c2VyKXsKCQkJCQkJCXNldHRpbmdzLmNpZCA9ICgnaWQ9Jysoc2V0dGluZ3MuY2hhbm5lbElkID0gcGxheWxpc3RJbmZvLml0ZW1zWzBdLnNuaXBwZXQuY2hhbm5lbElkKSk7CgkJCQkJCX0KCQkJCQkJc2V0dGluZ3MuY3VycmVudFBsYXlsaXN0ID0gcGxheWxpc3RJbmZvLml0ZW1zWzBdLnNuaXBwZXQudGl0bGU7CgkJCQkJCXNldHRpbmdzLnBpZCA9IHBsYXlsaXN0SW5mby5pdGVtc1swXS5pZDsKCQkJCQkJdXRpbHMuYWpheC5nZXQoIHV0aWxzLmVuZHBvaW50cy5wbGF5bGlzdFZpZHMoKSwgcHJlcGFyZS5jb21waWxlVmlkZW9zICk7CgkJCQkJfSBlbHNlIGNvbnNvbGUubG9nICgnWW91dHViZS1UViBFcnJvcjogQVBJIHJldHVybmVkIG5vIG1hdGNoZXMgZm9yIHBsYXlsaXN0KHMpOiAnK3NldHRpbmdzLnBsYXlsaXN0KTsKCQkJCX0sCgkJCQljb21waWxlVmlkZW9zOiBmdW5jdGlvbihyZXMpewoJCQkJCWlmIChyZXMgJiYgcmVzLml0ZW1zLmxlbmd0aCA+IDApewoJCQkJCQl2YXIgcGxheWxpc3RzID0gcmVzLml0ZW1zLAoJCQkJCQlpOwoJCQkJCQlzZXR0aW5ncy52aWRlb1N0cmluZyA9ICcnOwoJCQkJCQlmb3IoaT0wOyBpPHBsYXlsaXN0cy5sZW5ndGg7IGkrKyl7CgkJCQkJCQlzZXR0aW5ncy52aWRlb1N0cmluZyArPSBwbGF5bGlzdHNbaV0uY29udGVudERldGFpbHMudmlkZW9JZDsKCQkJCQkJCWlmIChpPHBsYXlsaXN0cy5sZW5ndGgtMSl7IHNldHRpbmdzLnZpZGVvU3RyaW5nICs9ICcsJzt9CgkJCQkJCX0KCQkJCQkJdXRpbHMuYWpheC5nZXQoIHV0aWxzLmVuZHBvaW50cy52aWRlb0luZm8oKSwgcHJlcGFyZS5jb21waWxlTGlzdCApOwoJCQkJCX0gZWxzZSBjb25zb2xlLmxvZyAoJ1lvdXR1YmUtVFYgRXJyb3I6IEVtcHR5IHBsYXlsaXN0Jyk7CgkJCQl9LAoJCQkJcGxheWxpc3RzOiBmdW5jdGlvbihyZXMpewoJCQkJCWlmKHJlcyAmJiByZXMuaXRlbXMubGVuZ3RoID4gMCl7CgkJCQkJCXZhciBsaXN0ID0gJzxkaXYgY2xhc3M9Inl0di1wbGF5bGlzdHMiPjx1bD4nLAoJCQkJCQkJcGxheWxpc3RzID0gcmVzLml0ZW1zLAoJCQkJCQkJaTsKCQkJCQkJZm9yKGk9MDsgaTxwbGF5bGlzdHMubGVuZ3RoOyBpKyspewoJCQkJCQkJdmFyIGRhdGEgPSB7CgkJCQkJCQkJdGl0bGU6IHBsYXlsaXN0c1tpXS5zbmlwcGV0LnRpdGxlLAoJCQkJCQkJCXBsaWQ6IHBsYXlsaXN0c1tpXS5pZCwKCQkJCQkJCQl0aHVtYjogcGxheWxpc3RzW2ldLnNuaXBwZXQudGh1bWJuYWlscy5tZWRpdW0udXJsCgkJCQkJCQl9OwoJCQkJCQkJbGlzdCArPSAnPGEgaHJlZj0iIyIgZGF0YS15dHYtcGxheWxpc3Q9IicrKGRhdGEucGxpZCkrJyI+JzsKCQkJCQkJCQlsaXN0ICs9ICc8ZGl2IGNsYXNzPSJ5dHYtdGh1bWIiPjxkaXYgY2xhc3M9Inl0di10aHVtYi1zdHJva2UiPjwvZGl2PjxpbWcgc3JjPSInKyhkYXRhLnRodW1iKSsnIj48L2Rpdj4nOwoJCQkJCQkJCWxpc3QgKz0gJzxzcGFuPicrKGRhdGEudGl0bGUpKyc8L3NwYW4+JzsKCQkJCQkJCWxpc3QgKz0gJzwvYT4nOwoJCQkJCQl9CgkJCQkJCWxpc3QgKz0gJzwvdWw+PC9kaXY+JzsKCQkJCQkJCgkJCQkJCXZhciBsaCA9IHNldHRpbmdzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXR2LWxpc3QtaGVhZGVyJylbMF0sCgkJCQkJCQloZWFkZXJMaW5rID0gbGguY2hpbGRyZW5bMF07CgkJCQkJCWhlYWRlckxpbmsuaHJlZj0iIyI7CgkJCQkJCWhlYWRlckxpbmsudGFyZ2V0PSIiOwoJCQkJCQloZWFkZXJMaW5rLnNldEF0dHJpYnV0ZSgnZGF0YS15dHYtcGxheWxpc3QtdG9nZ2xlJywgJ3RydWUnKTsKCQkJCQkJc2V0dGluZ3MuZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5dHYtbGlzdC1oZWFkZXInKVswXS5pbm5lckhUTUwgKz0gbGlzdDsKCQkJCQkJbGguY2xhc3NOYW1lICs9ICcgeXR2LWhhcy1wbGF5bGlzdHMnOwoJCQkJCX0gZWxzZSBjb25zb2xlLmxvZyAoJ1lvdXR1YmUtVFYgRXJyb3I6IFJldHVybmVkIG5vIHBsYXlsaXN0cycpOwoJCQkJfSwKCQkJCWNvbXBpbGVMaXN0OiBmdW5jdGlvbihkYXRhKXsKCQkJCQlpZihkYXRhICYmIGRhdGEuaXRlbXMubGVuZ3RoID4gMCl7CgkJCQkJCXV0aWxzLmFqYXguZ2V0KCB1dGlscy5lbmRwb2ludHMudXNlckluZm8oKSwgZnVuY3Rpb24odXNlckluZm8pewoJCQkJCQkJdmFyIGxpc3QgPSAnJywKCQkJCQkJCQl1c2VyID0gewoJCQkJCQkJCQl0aXRsZTogdXNlckluZm8uaXRlbXNbMF0uc25pcHBldC50aXRsZSwKCQkJCQkJCQkJdXJsOiAnLy95b3V0dWJlLmNvbS9jaGFubmVsLycrdXNlckluZm8uaXRlbXNbMF0uaWQsCgkJCQkJCQkJCXRodW1iOiB1c2VySW5mby5pdGVtc1swXS5zbmlwcGV0LnRodW1ibmFpbHNbJ2RlZmF1bHQnXS51cmwsCgkJCQkJCQkJCXN1bW1hcnk6IHVzZXJJbmZvLml0ZW1zWzBdLnNuaXBwZXQuZGVzY3JpcHRpb24sCgkJCQkJCQkJCXN1YnNjcmliZXJzOiB1c2VySW5mby5pdGVtc1swXS5zdGF0aXN0aWNzLnN1YnNjcmliZXJDb3VudCwKCQkJCQkJCQkJdmlld3M6IHVzZXJJbmZvLml0ZW1zWzBdLnN0YXRpc3RpY3Mudmlld0NvdW50CgkJCQkJCQkJfSwKCQkJCQkJCQl2aWRlb3MgPSBkYXRhLml0ZW1zLAoJCQkJCQkJCWZpcnN0ID0gdHJ1ZSwKCQkJCQkJCQlpOwoJCQkJCQkJc2V0dGluZ3MuY2hhbm5lbElkID0gdXNlckluZm8uaXRlbXNbMF0uaWQ7IAoJCQkJCQkJaWYoc2V0dGluZ3MuY3VycmVudFBsYXlsaXN0KSB1c2VyLnRpdGxlICs9ICcgJm1pZGRvdDsgJysoc2V0dGluZ3MuY3VycmVudFBsYXlsaXN0KTsKCQkJCQkJCWlmIChzZXR0aW5ncy5zb3J0TGlzdCkgdmlkZW9zLnNvcnQoZnVuY3Rpb24oYSxiKXtpZihhLnNuaXBwZXQucHVibGlzaGVkQXQgPiBiLnNuaXBwZXQucHVibGlzaGVkQXQpIHJldHVybiAtMTtpZihhLnNuaXBwZXQucHVibGlzaGVkQXQgPCBiLnNuaXBwZXQucHVibGlzaGVkQXQpIHJldHVybiAxO3JldHVybiAwO30pOwoJCQkJCQkJaWYgKHNldHRpbmdzLnJldmVyc2VMaXN0KSB2aWRlb3MucmV2ZXJzZSgpOwoJCQkJCQkJaWYgKHNldHRpbmdzLnNodWZmbGVMaXN0KSB7CgkJCQkJCQkJdmlkZW9zID0gZnVuY3Rpb24gKCl7Zm9yKHZhciBqLCB4LCBpID0gdmlkZW9zLmxlbmd0aDsgaTsgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGkpLCB4ID0gdmlkZW9zWy0taV0sIHZpZGVvc1tpXSA9IHZpZGVvc1tqXSwgdmlkZW9zW2pdID0geCk7cmV0dXJuIHZpZGVvczt9KCk7CgkJCQkJCQl9CgoJCQkJCQkJbGlzdCArPSAnPGRpdiBjbGFzcz0ieXR2LWxpc3QtaGVhZGVyIj4nOwoJCQkJCQkJCWxpc3QgKz0gJzxhIGhyZWY9IicrKHVzZXIudXJsKSsnIiB0YXJnZXQ9Il9ibGFuayI+JzsKCQkJCQkJCQkJbGlzdCArPSAnPGltZyBzcmM9IicrKHVzZXIudGh1bWIpKyciPic7CgkJCQkJCQkJCWxpc3QgKz0gJzxzcGFuPjxpIGNsYXNzPSJ5dHYtYXJyb3cgZG93biI+PC9pPicrKHVzZXIudGl0bGUpKyc8L3NwYW4+JzsKCQkJCQkJCQlsaXN0ICs9ICc8L2E+JzsKCQkJCQkJCWxpc3QgKz0gJzwvZGl2Pic7CgkJCQkJCQkKCQkJCQkJCWxpc3QgKz0gJzxkaXYgY2xhc3M9Inl0di1saXN0LWlubmVyIj48dWw+JzsKCQkJCQkJCWZvcihpPTA7IGk8dmlkZW9zLmxlbmd0aDsgaSsrKXsKCQkJCQkJCQlpZih2aWRlb3NbaV0uc3RhdHVzLmVtYmVkZGFibGUpewoJCQkJCQkJCQl2YXIgdmlkZW8gPSB7CgkJCQkJCQkJCQl0aXRsZTogdmlkZW9zW2ldLnNuaXBwZXQudGl0bGUsCgkJCQkJCQkJCQlzbHVnOiB2aWRlb3NbaV0uaWQsCgkJCQkJCQkJCQlsaW5rOiAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nK3ZpZGVvc1tpXS5pZCwKCQkJCQkJCQkJCXB1Ymxpc2hlZDogdmlkZW9zW2ldLnNuaXBwZXQucHVibGlzaGVkQXQsCgkJCQkJCQkJCQlzdGF0czogdmlkZW9zW2ldLnN0YXRpc3RpY3MsCgkJCQkJCQkJCQlkdXJhdGlvbjogKHZpZGVvc1tpXS5jb250ZW50RGV0YWlscy5kdXJhdGlvbiksCgkJCQkJCQkJCQl0aHVtYjogdmlkZW9zW2ldLnNuaXBwZXQudGh1bWJuYWlscy5tZWRpdW0udXJsCgkJCQkJCQkJCX07CgkJCQkJCQkJCQoJCQkJCQkJCQl2YXIgZHVyYXRpb25TdHJpbmcgPSB2aWRlby5kdXJhdGlvbi5tYXRjaCgvWzAtOV0rW0hNU10vZyk7CgkJCQkJCQkJCXZhciBoID0gMCwgbSA9IDAsIHMgPSAwLCB0aW1lID0gJyc7CgkJCQkJCQkJCWR1cmF0aW9uU3RyaW5nLmZvckVhY2goZnVuY3Rpb24gKGR1cmF0aW9uKSB7CgkJCQkJCQkJCQl2YXIgdW5pdCA9IGR1cmF0aW9uLmNoYXJBdChkdXJhdGlvbi5sZW5ndGgtMSk7CgkJCQkJCQkJCQl2YXIgYW1vdW50ID0gcGFyc2VJbnQoZHVyYXRpb24uc2xpY2UoMCwtMSkpOwoJCQkJCQkJCQkJc3dpdGNoICh1bml0KSB7CgkJCQkJCQkJCQkJY2FzZSAnSCc6IGggPSAoYW1vdW50ID4gOSA/ICcnICsgYW1vdW50IDogJzAnICsgYW1vdW50KTsgYnJlYWs7CgkJCQkJCQkJCQkJY2FzZSAnTSc6IG0gPSAoYW1vdW50ID4gOSA/ICcnICsgYW1vdW50IDogJzAnICsgYW1vdW50KTsgYnJlYWs7CgkJCQkJCQkJCQkJY2FzZSAnUyc6IHMgPSAoYW1vdW50ID4gOSA/ICcnICsgYW1vdW50IDogJzAnICsgYW1vdW50KTsgYnJlYWs7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0pOwoJCQkJCQkJCQlpZiAoaCl7IHRpbWUgKz0gaCsnOic7fQoJCQkJCQkJCQlpZiAobSl7IHRpbWUgKz0gbSsnOic7fSBlbHNlIHsgdGltZSArPSAnMDA6Jzt9CgkJCQkJCQkJCWlmIChzKXsgdGltZSArPSBzO30gZWxzZSB7IHRpbWUgKz0gJzAwJzt9CgkJCQkJCQkJCQoJCQkJCQkJCQl2YXIgaXNGaXJzdCA9ICcnOwoJCQkJCQkJCQlpZihzZXR0aW5ncy5wbGF5SWQ9PXZpZGVvLnNsdWcpewoJCQkJCQkJCQkJaXNGaXJzdCA9ICcgY2xhc3M9Inl0di1hY3RpdmUiJzsKCQkJCQkJCQkJCWZpcnN0ID0gdmlkZW8uc2x1ZzsKCQkJCQkJCQkJfSBlbHNlIGlmKGZpcnN0PT09dHJ1ZSl7CgkJCQkJCQkJCQlmaXJzdCA9IHZpZGVvLnNsdWc7CgkJCQkJCQkJCX0KCgkJCQkJCQkJCWxpc3QgKz0gJzxsaScraXNGaXJzdCsnPjxhIGhyZWY9IiMiIGRhdGEteXR2PSInKyh2aWRlby5zbHVnKSsnIiBjbGFzcz0ieXR2LWNsZWFyIj4nOwoJCQkJCQkJCQlsaXN0ICs9ICc8ZGl2IGNsYXNzPSJ5dHYtdGh1bWIiPjxkaXYgY2xhc3M9Inl0di10aHVtYi1zdHJva2UiPjwvZGl2PjxzcGFuPicrKHRpbWUpKyc8L3NwYW4+PGltZyBzcmM9IicrKHZpZGVvLnRodW1iKSsnIj48L2Rpdj4nOwoJCQkJCQkJCQlsaXN0ICs9ICc8ZGl2IGNsYXNzPSJ5dHYtY29udGVudCI+PGI+JysodmlkZW8udGl0bGUpKyc8L2I+JzsKCQkJCQkJCQkJaWYgKHZpZGVvLnN0YXRzKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQlsaXN0Kz0nPC9iPjxzcGFuIGNsYXNzPSJ5dHYtdmlld3MiPicrdXRpbHMuYWRkQ29tbWFzKHZpZGVvLnN0YXRzLnZpZXdDb3VudCkrJyBWaWV3czwvc3Bhbj4nOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWxpc3QgKz0gJzwvZGl2PjwvYT48L2xpPic7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJbGlzdCArPSAnPC91bD48L2Rpdj4nOwoJCQkJCQkJc2V0dGluZ3MuZWxlbWVudC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0ieXR2LXJlbGF0aXZlIj48ZGl2IGNsYXNzPSJ5dHYtdmlkZW8iPjxkaXYgaWQ9Inl0di12aWRlby1wbGF5ZXIiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9Inl0di1saXN0Ij4nK2xpc3QrJzwvZGl2PjwvZGl2Pic7CgkJCQkJCQlpZihzZXR0aW5ncy5lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3l0di1hY3RpdmUnKS5sZW5ndGg9PT0wKXsKCQkJCQkJCQlzZXR0aW5ncy5lbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpWzBdLmNsYXNzTmFtZSA9ICJ5dHYtYWN0aXZlIjsKCQkJCQkJCX0KCQkJCQkJCXZhciBhY3RpdmUgPSBzZXR0aW5ncy5lbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3l0di1hY3RpdmUnKVswXTsKCQkJCQkJCWFjdGl2ZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuc2Nyb2xsVG9wID0gYWN0aXZlLm9mZnNldFRvcDsKCQkJCQkJCWFjdGlvbi5sb2dpYy5sb2FkVmlkZW8oZmlyc3QsIHNldHRpbmdzLmF1dG9wbGF5KTsKCQkJCQkJCQoJCQkJCQkJaWYgKHNldHRpbmdzLnBsYXlsaXN0KXsKCQkJCQkJCQl1dGlscy5hamF4LmdldCggdXRpbHMuZW5kcG9pbnRzLnBsYXlsaXN0SW5mbyhzZXR0aW5ncy5wbGF5bGlzdCksIHByZXBhcmUucGxheWxpc3RzICk7CgkJCQkJCQl9IGVsc2UgaWYoc2V0dGluZ3MuYnJvd3NlUGxheWxpc3RzKXsKCQkJCQkJCQl1dGlscy5hamF4LmdldCggdXRpbHMuZW5kcG9pbnRzLnVzZXJQbGF5bGlzdHMoKSwgcHJlcGFyZS5wbGF5bGlzdHMgKTsKCQkJCQkJCX0KCQkJCQkJCQoJCQkJCQl9KTsKCQkJCQl9IGVsc2UgY29uc29sZS5sb2cgKCdZb3V0dWJlLVRWIEVycm9yOiBFbXB0eSB2aWRlbyBsaXN0Jyk7CgkJCQl9CgkJCX0sCgkJCWFjdGlvbiA9IHsKCQkJCQoJCQkJbG9naWM6IHsKCQkJCQkKCQkJCQlwbGF5ZXJTdGF0ZUNoYW5nZTogZnVuY3Rpb24oZCl7CgkJCQkJCWNvbnNvbGUubG9nKGQpOwoJCQkJCX0sCgkJCQkJCgkJCQkJbG9hZFZpZGVvOiBmdW5jdGlvbihzbHVnLCBhdXRvcGxheSl7CgkJCQkJCXZhciBob3VzZSA9IHNldHRpbmdzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXR2LXZpZGVvJylbMF07CgkJCQkJCXZhciBjb3VudGVyID0gc2V0dGluZ3MuZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5dHYtdmlkZW8tcGxheWVyQ29udGFpbmVyJykubGVuZ3RoOwoJCQkJCQlob3VzZS5pbm5lckhUTUwgPSAnPGRpdiBpZD0ieXR2LXZpZGVvLXBsYXllcicraWQrY291bnRlcisnIiBjbGFzcz0ieXR2LXZpZGVvLXBsYXllckNvbnRhaW5lciI+PC9kaXY+JzsKCQkJCQkJCgkJCQkJCWNhY2hlLnBsYXllciA9IG5ldyBZVC5QbGF5ZXIoJ3l0di12aWRlby1wbGF5ZXInK2lkK2NvdW50ZXIsIHsKCQkJCQkJCXZpZGVvSWQ6IHNsdWcsCgkJCQkJCQlldmVudHM6IHsKCQkJCQkJCQlvblJlYWR5OiBzZXR0aW5ncy5ldmVudHMudmlkZW9SZWFkeSwKCQkJCQkJCQlvblN0YXRlQ2hhbmdlOiBmdW5jdGlvbihlKXsKCQkJCQkJCQkJaWYoIChlLnRhcmdldC5nZXRQbGF5ZXJTdGF0ZSgpPT09MCkgJiYgc2V0dGluZ3MuY2hhaW5WaWRlb3MgKXsKCQkJCQkJCQkJCXZhciBucyA9IHNldHRpbmdzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXR2LWFjdGl2ZScpWzBdLm5leHRTaWJsaW5nLAoJCQkJCQkJCQkJCWxpbmsgPSBucy5jaGlsZHJlblswXTsKCQkJCQkJCQkJCWxpbmsuY2xpY2soKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlzZXR0aW5ncy5ldmVudHMuc3RhdGVDaGFuZ2UuY2FsbCh0aGlzLCBlKTsKCQkJCQkJCQl9CgkJCQkJCQl9LAoJCQkJCQkJcGxheWVyVmFyczogewoJCQkJCQkJCWVuYWJsZWpzYXBpOiAxLAoJCQkJCQkJCW9yaWdpbjogZG9jLmRvbWFpbiwKCQkJCQkJCQljb250cm9sczogc2V0dGluZ3MuY29udHJvbHMgPyAxIDogMCwKCQkJCQkJCQlyZWw6IDAsCgkJCQkJCQkJc2hvd2luZm86IDAsCgkJCQkJCQkJaXZfbG9hZF9wb2xpY3k6IHNldHRpbmdzLmFubm90YXRpb25zID8gJycgOiAzLCAKCQkJCQkJCQlhdXRvcGxheTogYXV0b3BsYXkgPyAxIDogMCwKCQkJCQkJCQl0aGVtZTogc2V0dGluZ3MucGxheWVyVGhlbWUsCgkJCQkJCQkJd21vZGU6IHNldHRpbmdzLndtb2RlCgkJCQkJCQl9CgkJCQkJCX0pOwoJCQkJCX0KCQkJCX0sCgkJCQkKCQkJCWVuZHBvaW50czogewoJCQkJCXZpZGVvQ2xpY2s6IGZ1bmN0aW9uKGUpewoJCQkJCQl2YXIgdGFyZ2V0ID0gdXRpbHMucGFyZW50VW50aWwoZS50YXJnZXQgPyBlLnRhcmdldCA6IGUuc3JjRWxlbWVudCwgJ2RhdGEteXR2Jyk7CgkJCQkJCWlmKHRhcmdldCl7CgkJCQkJCQlpZih0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXl0dicpKXsKCQkJCQkJCQkvLyBMb2FkIFZpZGVvCgkJCQkJCQkJdXRpbHMuZXZlbnRzLnByZXZlbnQoZSk7CgkJCQkJCQkJdmFyIGFjdGl2ZUVscyA9IHNldHRpbmdzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXR2LWFjdGl2ZScpLAoJCQkJCQkJCQlpOwoJCQkJCQkJCWZvcihpPTA7IGk8YWN0aXZlRWxzLmxlbmd0aDsgaSsrKXsKCQkJCQkJCQkJYWN0aXZlRWxzW2ldLmNsYXNzTmFtZT0iIjsKCQkJCQkJCQl9CgkJCQkJCQkJdGFyZ2V0LnBhcmVudE5vZGUuY2xhc3NOYW1lPSJ5dHYtYWN0aXZlIjsKCQkJCQkJCQlhY3Rpb24ubG9naWMubG9hZFZpZGVvKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteXR2JyksIHRydWUpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSwKCQkJCQlwbGF5bGlzdFRvZ2dsZTogZnVuY3Rpb24oZSl7CgkJCQkJCXZhciB0YXJnZXQgPSB1dGlscy5wYXJlbnRVbnRpbChlLnRhcmdldCA/IGUudGFyZ2V0IDogZS5zcmNFbGVtZW50LCAnZGF0YS15dHYtcGxheWxpc3QtdG9nZ2xlJyk7CgkJCQkJCWlmKHRhcmdldCAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXl0di1wbGF5bGlzdC10b2dnbGUnKSl7CgkJCQkJCQkvLyBUb2dnbGUgUGxheWxpc3QKCQkJCQkJCXV0aWxzLmV2ZW50cy5wcmV2ZW50KGUpOwoJCQkJCQkJdmFyIGxoID0gc2V0dGluZ3MuZWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5dHYtbGlzdC1oZWFkZXInKVswXTsKCQkJCQkJCWlmKGxoLmNsYXNzTmFtZS5pbmRleE9mKCd5dHYtcGxheWxpc3Qtb3BlbicpPT09LTEpewoJCQkJCQkJCWxoLmNsYXNzTmFtZSArPSAnIHl0di1wbGF5bGlzdC1vcGVuJzsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJbGguY2xhc3NOYW1lID0gbGguY2xhc3NOYW1lLnJlcGxhY2UoJyB5dHYtcGxheWxpc3Qtb3BlbicsICcnKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0sCgkJCQkJcGxheWxpc3RDbGljazogZnVuY3Rpb24oZSl7CgkJCQkJCXZhciB0YXJnZXQgPSB1dGlscy5wYXJlbnRVbnRpbChlLnRhcmdldCA/IGUudGFyZ2V0IDogZS5zcmNFbGVtZW50LCAnZGF0YS15dHYtcGxheWxpc3QnKTsKCQkJCQkJCgkJCQkJCWlmKHRhcmdldCAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXl0di1wbGF5bGlzdCcpKXsKCQkJCQkJCQoJCQkJCQkJLy8gTG9hZCBQbGF5bGlzdAoJCQkJCQkJdXRpbHMuZXZlbnRzLnByZXZlbnQoZSk7CgkJCQkJCQkKCQkJCQkJCXNldHRpbmdzLnBpZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteXR2LXBsYXlsaXN0Jyk7CgkJCQkJCQl0YXJnZXQuY2hpbGRyZW5bMV0uaW5uZXJIVE1MID0gJ0xvYWRpbmcuLi4nOwoJCQkJCQkJCgkJCQkJCQl1dGlscy5hamF4LmdldCggdXRpbHMuZW5kcG9pbnRzLnBsYXlsaXN0SW5mbyhzZXR0aW5ncy5waWQpLCBmdW5jdGlvbihyZXMpewoJCQkJCQkJCXZhciBsaCA9IHNldHRpbmdzLmVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXR2LWxpc3QtaGVhZGVyJylbMF07CgkJCQkJCQkJbGguY2xhc3NOYW1lID0gbGguY2xhc3NOYW1lLnJlcGxhY2UoJyB5dHYtcGxheWxpc3Qtb3BlbicsICcnKTsKCQkJCQkJCQlwcmVwYXJlLnNlbGVjdGVkUGxheWxpc3QocmVzKTsKCQkJCQkJCX0pOwoJCQkJCQl9CgkJCQkJfQoJCQkJfSwKCQkJCWJpbmRFdmVudHM6IGZ1bmN0aW9uKCl7CgkJCQkJdXRpbHMuZXZlbnRzLmFkZEV2ZW50KCBzZXR0aW5ncy5lbGVtZW50LCAnY2xpY2snLCBhY3Rpb24uZW5kcG9pbnRzLnZpZGVvQ2xpY2sgKTsKCQkJCQl1dGlscy5ldmVudHMuYWRkRXZlbnQoIHNldHRpbmdzLmVsZW1lbnQsICdjbGljaycsIGFjdGlvbi5lbmRwb2ludHMucGxheWxpc3RUb2dnbGUgKTsKCQkJCQl1dGlscy5ldmVudHMuYWRkRXZlbnQoIHNldHRpbmdzLmVsZW1lbnQsICdjbGljaycsIGFjdGlvbi5lbmRwb2ludHMucGxheWxpc3RDbGljayApOwoJCQkJfQoJCQl9LAoJCQkKCQkJaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKGlkLCBvcHRzKXsKCQkJCXV0aWxzLmRlZXBFeHRlbmQoc2V0dGluZ3MsIG9wdHMpOwoJCQkJaWYoc2V0dGluZ3MuYXBpS2V5Lmxlbmd0aD09PTApewoJCQkJCWFsZXJ0KCJNaXNzaW5nIEFQSWtleSBpbiBzZXR0aW5ncyBvciBhcyBnbG9iYWwgdmFpYWJsZS4iKTsKCQkJCX0KCQkJCWFwaUtleSA9IHNldHRpbmdzLmFwaUtleTsKCQkJCXNldHRpbmdzLmVsZW1lbnQgPSAodHlwZW9mIGlkPT09J3N0cmluZycpID8gZG9jLmdldEVsZW1lbnRCeUlkKGlkKSA6IGlkOwoJCQkJaWYoc2V0dGluZ3MuZWxlbWVudCAmJiAoc2V0dGluZ3MudXNlciB8fCBzZXR0aW5ncy5jaGFubmVsSWQgfHwgc2V0dGluZ3MucGxheWxpc3QpKXsKCQkJCQlwcmVwYXJlLnlvdXR1YmUoKTsKCQkJCQlwcmVwYXJlLmJ1aWxkKCk7CgkJCQkJYWN0aW9uLmJpbmRFdmVudHMoKTsKCQkJCQlpZiAoc2V0dGluZ3MucGxheWxpc3QpIHsKCQkJCQkJdXRpbHMuYWpheC5nZXQoIHV0aWxzLmVuZHBvaW50cy5wbGF5bGlzdEluZm8oc2V0dGluZ3MucGxheWxpc3QpLCBwcmVwYXJlLnNlbGVjdGVkUGxheWxpc3QgKTsKCQkJCQl9IGVsc2UgewoJCQkJCQl1dGlscy5hamF4LmdldCggdXRpbHMuZW5kcG9pbnRzLnVzZXJJbmZvKCksIHByZXBhcmUudXNlclVwbG9hZHMgKTsKCQkJCQl9CgkJCQl9IGVsc2UgY29uc29sZS5sb2cgKCdZb3V0dWJlLVRWIEVycm9yOiBNaXNzaW5nIGVpdGhlciB1c2VyLCBjaGFubmVsSWQsIG9yIHBsYXlsaXN0Jyk7CgkJCX07CgoJCQkvKiBQdWJsaWMgKi8KCgkJCXRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCl7CgkJCQl1dGlscy5ldmVudHMucmVtb3ZlRXZlbnQoIHNldHRpbmdzLmVsZW1lbnQsICdjbGljaycsIGFjdGlvbi5lbmRwb2ludHMudmlkZW9DbGljayApOwoJCQkJdXRpbHMuZXZlbnRzLnJlbW92ZUV2ZW50KCBzZXR0aW5ncy5lbGVtZW50LCAnY2xpY2snLCBhY3Rpb24uZW5kcG9pbnRzLnBsYXlsaXN0VG9nZ2xlICk7CgkJCQl1dGlscy5ldmVudHMucmVtb3ZlRXZlbnQoIHNldHRpbmdzLmVsZW1lbnQsICdjbGljaycsIGFjdGlvbi5lbmRwb2ludHMucGxheWxpc3RDbGljayApOwoJCQkJc2V0dGluZ3MuZWxlbWVudC5jbGFzc05hbWUgPSAnJzsKCQkJCXNldHRpbmdzLmVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgkJCX07CgkJCXRoaXMuZnVsbHNjcmVlbiA9IHsKCQkJCXN0YXRlOiBmdW5jdGlvbigpewoJCQkJCXJldHVybiAoc2V0dGluZ3MuZWxlbWVudC5jbGFzc05hbWUpLmluZGV4T2YoJ3l0di1mdWxsJykgIT09IC0xOwoJCQkJfSwKCQkJCWVudGVyOiBmdW5jdGlvbigpewoJCQkJCWlmKCAoc2V0dGluZ3MuZWxlbWVudC5jbGFzc05hbWUpLmluZGV4T2YoJ3l0di1mdWxsJykgPT09IC0xICl7CgkJCQkJCXNldHRpbmdzLmVsZW1lbnQuY2xhc3NOYW1lICs9ICd5dHYtZnVsbCc7CgkJCQkJfQoJCQkJfSwKCQkJCWV4aXQ6IGZ1bmN0aW9uKCl7CgkJCQkJaWYoIChzZXR0aW5ncy5lbGVtZW50LmNsYXNzTmFtZSkuaW5kZXhPZigneXR2LWZ1bGwnKSAhPT0gLTEgKXsKCQkJCQkJc2V0dGluZ3MuZWxlbWVudC5jbGFzc05hbWUgPSAoc2V0dGluZ3MuZWxlbWVudC5jbGFzc05hbWUpLnJlcGxhY2UoJ3l0di1mdWxsJywgJycpOwoJCQkJCX0KCQkJCX0KCQkJfTsKCQkJCgkJaW5pdGlhbGl6ZShpZCwgb3B0cyk7Cgl9OwoKCWlmICgodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmIG1vZHVsZS5leHBvcnRzKSB7CgkJbW9kdWxlLmV4cG9ydHMgPSBZVFY7Cgl9CglpZiAodHlwZW9mIGVuZGVyID09PSAndW5kZWZpbmVkJykgewoJCXRoaXMuWVRWID0gWVRWOwoJfQoJaWYgKCh0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iKSAmJiBkZWZpbmUuYW1kKSB7CgkJZGVmaW5lKCJZVFYiLCBbXSwgZnVuY3Rpb24oKSB7CgkJCXJldHVybiBZVFY7CgkJfSk7Cgl9CglpZiAoKHR5cGVvZiBqUXVlcnkgIT09ICd1bmRlZmluZWQnKSkgewoJCWpRdWVyeS5mbi5leHRlbmQoewoJCQl5dHY6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKCQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQkJbmV3IFlUVih0aGlzLmlkLCBvcHRpb25zKTsKCQkJCX0pOwoJCQl9CgkJfSk7Cgl9Cn0pLmNhbGwodGhpcywgd2luZG93LCBkb2N1bWVudCk7Cjwvc2NyaXB0PgoKCgoKPGRpdiBzdHlsZT0id2lkdGg6MTAwJTsgbWF4LXdpZHRoOjEyMDBweDttYXJnaW46IDAgYXV0bzsiPgogICAgPGRpdiBpZD0ibmVlZEZvclNwZWVkIj48L2Rpdj4KPC9kaXY+CiAgICAKPHNjcmlwdD4KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgWVRWKCduZWVkRm9yU3BlZWQnLCB7CiAgICBwbGF5bGlzdDogJ1BMcjNCTmMxOTloUTZOcGZLNjNSOEVPOVhyWmY4Mk5TRWInLAogICAgYWNjZW50OiAnIzAwNjRiNScsCiAgICByZXNwb25zaXZlOiB0cnVlLAogICAgc29ydExpc3Q6IHRydWUKICB9KTsKfSk7Cjwvc2NyaXB0Pg==[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]