[fusion_builder_container admin_label=”Testing” type=”flex” hundred_percent=”yes” hundred_percent_height=”min” min_height_medium=”” min_height_small=”” min_height=”50vh” 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=”” margin_top_medium=”” margin_bottom_medium=”” margin_top_small=”” margin_bottom_small=”” margin_top=”64px” margin_bottom=”128px” padding_top_medium=”” padding_right_medium=”” padding_bottom_medium=”” padding_left_medium=”” padding_top_small=”” padding_right_small=”” padding_bottom_small=”” padding_left_small=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” link_color=”” hue=”” saturation=”” lightness=”” alpha=”” link_hover_color=”” border_sizes_top=”” border_sizes_right=”” border_sizes_bottom=”” border_sizes_left=”” border_color=”” border_style=”solid” 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=”” skip_lazy_load=”” 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=”” render_logics=”” 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_1″ align_self=”auto” content_layout=”column” align_content=”flex-start” valign_content=”flex-start” content_wrap=”wrap” spacing=”” center_content=”no” link=”” target=”_self” link_description=”” min_height=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” type_medium=”” type_small=”” order_medium=”0″ order_small=”0″ dimension_spacing_medium=”” dimension_spacing_small=”” dimension_spacing=”” dimension_margin_medium=”” dimension_margin_small=”” margin_top=”” margin_bottom=”” padding_medium=”” padding_small=”” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” hover_type=”none” border_sizes=”” border_color=”” border_style=”solid” border_radius=”” box_shadow=”no” dimension_box_shadow=”” box_shadow_blur=”0″ box_shadow_spread=”0″ box_shadow_color=”” box_shadow_style=”” overflow=”” background_type=”single” 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_image_id=”” background_position=”left top” background_repeat=”no-repeat” background_blend_mode=”none” render_logics=”” filter_type=”regular” 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″ animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=”” last=”true” border_position=”all” first=”true”][fusion_code]PHN0eWxlPgogICAgc2VjdGlvbi5tZC1zdHJlYW0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtaW4taGVpZ2h0OiA0MHZoOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtZmFtaWx5OiAnTGF0bycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAuODc1cmVtOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIH0KCiAgICAubWQtc3RyZWFtIC5xdW90ZVRhYmxlIHsKICAgICAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogbWF4LWNvbnRlbnQ7CiAgICAgICAgY29sb3I6ICMyOTJEM0U7CiAgICAgICAgZm9udC1mYW1pbHk6ICdMYXRvJywgc2Fucy1zZXJpZjsKICAgICAgICBmb250LXNpemU6IG1heCgxZW0sIDEwcHgpOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsgLyogVHJpZ2dlciB2ZXJ0aWNhbCBzY3JvbGwgICAgKi8KICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICB9CgogICAgLm1kLXN0cmVhbSAudHJhZGVUYWJsZSB7CiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IG1heC1jb250ZW50OwogICAgICAgIGNvbG9yOiAjMjkyRDNFOwogICAgICAgIGZvbnQtZmFtaWx5OiAnTGF0bycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiBtYXgoMWVtLCAxMHB4KTsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87IC8qIFRyaWdnZXIgdmVydGljYWwgc2Nyb2xsICAgICovCiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgfQoKICAgIC5tZC1zdHJlYW0gdGQsIAogICAgLm1kLXN0cmVhbSB0aCB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3M7IC8qIFNpbXBsZSB0cmFuc2l0aW9uIGZvciBob3ZlciBlZmZlY3QgKi8KICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIH0KCiAgICAubWQtc3RyZWFtIHRkOmZpcnN0LW9mLXR5cGUsCiAgICAubWQtc3RyZWFtIHRoOmZpcnN0LW9mLXR5cGUgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB9CgogICAgLm1kLXN0cmVhbSB0aCB7CiAgICAgICAgYmFja2dyb3VuZDogI0QyRDZFODsgLyogRGFya2VuIGhlYWRlciBhIGJpdCAqLwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGNvbG9yOiAjMjkyRDNFOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQoKICAgIC5tZC1zdHJlYW0gdGQgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0VDRUVGNjsKICAgIH0KCiAgICAubWQtc3RyZWFtIHRyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUNFRUY2OwogICAgfQoKICAgIC5tZC1zdHJlYW0gLmRpc3BsYXlXcmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgfQoKICAgIC5tZC1zdHJlYW0gLnF1b3RlRGlzcGxheSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjkyRDNFOwogICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB6LWluZGV4OiAyOwogICAgICAgIGhlaWdodDogbWF4LWNvbnRlbnQ7CiAgICB9CgogICAgLm1kLXN0cmVhbSAudHJhZGVEaXNwbGF5IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyOTJEM0U7CiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgaGVpZ2h0OiBtYXgtY29udGVudDsKICAgIH0KCiAgICAubWQtc3RyZWFtIC5tb2RhbCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjkyRDNFOwogICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgICAgd2lkdGg6IDMyMHB4OwogICAgICAgIG1heC1oZWlnaHQ6IG1heC1jb250ZW50OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLm1kLXN0cmVhbSAuYWxlcnRNb2RhbCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzI5MkQzRTsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAycHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICB6LWluZGV4OiA1OwogICAgICAgIHdpZHRoOiAzMjBweDsKICAgICAgICBtYXgtaGVpZ2h0OiBtYXgtY29udGVudDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5tZC1zdHJlYW0gI2FsZXJ0TXNnIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm1kLXN0cmVhbSAubG9nbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTZweDsKICAgICAgICBsZWZ0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgLm1kLXN0cmVhbSAubG9nbyBpbWcsCiAgICAubWQtc3RyZWFtIC5sb2dvMiBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgfQoKICAgIC5tZC1zdHJlYW0gbGFiZWwgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICB9CgogICAgLm1kLXN0cmVhbSBpbnB1dCwKICAgIC5tZC1zdHJlYW0gc2VsZWN0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjRUNFRUY3OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNFQ0VFRjc7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIH0KCiAgICAubWQtc3RyZWFtIGlucHV0OmZvY3VzLAogICAgLm1kLXN0cmVhbSBzZWxlY3Q6Zm9jdXMgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNEMkQ2RTg7CiAgICB9CgogICAgLm1kLXN0cmVhbSBidXR0b24gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjkyRDNFOwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICB9CgogICAgLm1kLXN0cmVhbSBidXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICMxQjFFMkI7CiAgICB9CgogICAgLm1kLXN0cmVhbSAjbWt0RGF0YVF1b3RlRGlzcGxheSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAubWQtc3RyZWFtICNta3REYXRhVHJhZGVEaXNwbGF5IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5tZC1zdHJlYW0gI2FsZXJ0RGlzcGxheSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAubWQtc3RyZWFtIC5oZWFkZXJXcmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgfQoKICAgIC5tZC1zdHJlYW0gI2Nsb3NlQnV0dG9uIHsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgY29sb3I6ICNCQUMwREQ7CiAgICAgICAgYmFja2dyb3VuZDogI0ZGRkZGRjsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIH0KCiAgICAubWQtc3RyZWFtICNjbG9zZUJ1dHRvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICMyOTJEM0U7CiAgICB9CgogICAgLm1kLXN0cmVhbSAjY2xvc2VCdXR0b246YWN0aXZlIHsKICAgICAgICBjb2xvcjogIzc1N0NBMTsKICAgIH0KPC9zdHlsZT4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiAgICAvLyBTVVBQT1JURURfRVhDSEFOR0VfTkFNRVMgPSBsaXN0T2YoImNvaW5iYXNlIiwgImdlbWluaSIsICJrcmFrZW4iLCAiYml0c3RhbXAiKQogICAgLy8gU1VQUE9SVEVEX0JBU0VfQ1VSUkVOQ1lfTkFNRVMgPSBsaXN0T2YoImJ0YyIsICJldGgiLCAibHRjIiwgImJjaCIsICJldGMiLCAiZG9nZSIpCiAgICAvLyBTVVBQT1JURURfUVVPVEVfQ1VSUkVOQ1lfTkFNRVMgPSBsaXN0T2YoInVzZCIpCgogICAgYXNzZXRzID0gWyJidGMtdXNkIiwgImV0aC11c2QiLCAibHRjLXVzZCIsICJiY2gtdXNkIiwgImV0Yy11c2QiLCAiZG9nZS11c2QiXTsKICAgIG1hcmtldHMgPSBbImNvaW5iYXNlLWJ0Yy11c2Qtc3BvdCIsImdlbWluaS1idGMtdXNkLXNwb3QiLCJrcmFrZW4tYnRjLXVzZC1zcG90IiwiYml0c3RhbXAtYnRjLXVzZC1zcG90Il07CiAgICBjb25zdCB0b3RhbFFzID0gW107CiAgICBjb25zdCB0b3RhbFVDUXMgPSBbXTsKICAgIGNvbnN0IHRvdGFsVHMgPSBbXTsKICAgIGNvbnN0IG5lZ1NwcmRDbnQgPSBbXTsKICAgIGNvbnN0IG5lZ1VDU3ByZENudCA9IFtdOwoKICAgIGxldCBhcGlLZXkgPSAiIjsKCiAgICAvLyBJbml0IGFuZCBwUG9wdWxhdGUgIGFwaUtleSBmcm9tIGxvY2FsIHN0b3JhZ2UgaWYgb25lIGV4aXN0cwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgIGluaXQoKTsKICAgICAgICBnZXRBcGlLZXkoKTsKICAgIH0pCgogICAgZnVuY3Rpb24gaW5pdCgpIHsKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgd2hpbGUgKGkgPCBhc3NldHMubGVuZ3RoICsgMikgeyAgLy8gZXh0cmEgcm93IGZvciBidGMgdW4tY29uZmxhdGVkCiAgICAgICAgICAgIHRvdGFsUXNbaV0gPSAwOwogICAgICAgICAgICB0b3RhbFVDUXNbaV0gPSAwOwogICAgICAgICAgICB0b3RhbFRzW2ldID0gMDsKICAgICAgICAgICAgbmVnU3ByZENudFtpXSA9IDA7CiAgICAgICAgICAgIG5lZ1VDU3ByZENudFtpXSA9IDA7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcmFpc2VBbGVydChhbGVydE1zZykgewogICAgICAgIGNvbnN0IGFsZXJ0RGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFsZXJ0RGlzcGxheSIpOwogICAgICAgIGFsZXJ0RGlhbG9nLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbGVydE1zZyIpLmlubmVySFRNTCA9ICI8bGFiZWw+QUxFUlQ8L2xhYmVsPiIgKyBhbGVydE1zZzsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRBcGlLZXkoKSB7CiAgICAgICAgLy8gb25seSBsb29rcyBhdCB0aGUgZmlyc3QgMTAwMCBvYmplY3RzIGZvciBub3cKICAgICAgICBsZXQgaSA9IDA7CiAgICAgICAgbGV0IGtleU5hbWU7CiAgICAgICAgd2hpbGUgKGkgPCAxMDAwKSB7CiAgICAgICAgICAgIGtleU5hbWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmtleShpKTsKICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXlOYW1lICE9PSAndW5kZWZpbmVkJyAmJiBrZXlOYW1lICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZSA9PT0gIk1LVERJU1A6YXBpX2tleSIpIHsKICAgICAgICAgICAgICAgICAgICAvLyBBcGkga2V5IGZvdW5kIGxvYWQgaXQgdG8gdGhlIGRpYWxvZwogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcGlLZXkiKS52YWx1ZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXlOYW1lKTsKICAgICAgICAgICAgICAgICAgICBhcGlLZXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBpS2V5IikudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpID0gaSArIDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBicmVhazsgLy8gcmFuIG91dCBvZiBrZXlzCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2F2ZUFwaUtleShhcGlLZXkpIHsKICAgICAgICAvLyBTYXZlIGtleSBpbiBicm93c2VyIHN0b3JhZ2UgYXMgY29udmVuaWVuY2UgZm9yIHVzZXIKICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oIk1LVERJU1A6YXBpX2tleSIsIGFwaUtleSk7CiAgICB9CgoKICAgIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgICAgIGNvbm5lY3RXUygpCiAgICAgICAgY29ubmVjdFVDV1MoKSAvLyB1bi1jb25mbGF0ZWQgYnRjIG9ubHkKICAgICAgICBzdGFydE1hcmtldFF1b3RlRGlzcGxheSgpCiAgICAgICAgc3RhcnRNYXJrZXRUcmFkZURpc3BsYXkoKQogICAgfQoKICAgIGZ1bmN0aW9uIHN0YXJ0TWFya2V0UXVvdGVEaXNwbGF5KCkgewogICAgICAgIC8vY29uc29sZS5sb2coIlN0YXJ0IFF1b3RlRGlzcGxheSIpCiAgICAgICAgY29uc3QgbWt0RGF0YVF1b3RlRGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJta3REYXRhUXVvdGVEaXNwbGF5Iik7CiAgICAgICAgbWt0RGF0YVF1b3RlRGlzcGxheS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICAvLyBhbGwgcHJpY2UgZGlzcGxheSBkaWFsb2cgdG8gYmUgZHJhZ2dhYmxlCiAgICAgICAgZHJhZ0VsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1rdERhdGFRdW90ZURpc3BsYXkiKSk7CiAgICAgICAgY29uc3QgdGJsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1rdERhdGFRdW90ZVRhYmxlIik7CiAgICAgICAgbGV0IG5yb3c7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhc3NldHMubGVuZ3RoKzE7IGkrKykgeyAvLyBleHRyYSByb3cgZm9yIGJ0YyB1bi1jb25mbGF0ZWQgZGF0YQogICAgICAgICAgICBucm93ID0gdGJsLmluc2VydFJvdygtMSk7IC8vIGJ1aWxkIG91dCBlbm91Z2ggcm93cwogICAgICAgICAgICBucm93Lmluc2VydENlbGwoMCk7CiAgICAgICAgICAgIG5yb3cuaW5zZXJ0Q2VsbCgxKTsKICAgICAgICAgICAgbnJvdy5pbnNlcnRDZWxsKDIpOwogICAgICAgICAgICBucm93Lmluc2VydENlbGwoMyk7CiAgICAgICAgICAgIG5yb3cuaW5zZXJ0Q2VsbCg0KTsKICAgICAgICAgICAgbnJvdy5pbnNlcnRDZWxsKDUpOwogICAgICAgICAgICBucm93Lmluc2VydENlbGwoNik7CiAgICAgICAgICAgIG5yb3cuaW5zZXJ0Q2VsbCg3KTsKICAgICAgICAgICAgbnJvdy5pbnNlcnRDZWxsKDgpOwogICAgICAgICAgICBucm93Lmluc2VydENlbGwoOSk7CiAgICAgICAgICAgIG5yb3cuaW5zZXJ0Q2VsbCgxMCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHN0YXJ0TWFya2V0VHJhZGVEaXNwbGF5KCkgewogICAgICAgIC8vY29uc29sZS5sb2coIlN0YXJ0IFRyYWRlRGlzcGxheSIpCiAgICAgICAgY29uc3QgbWt0RGF0YVRyYWRlRGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJta3REYXRhVHJhZGVEaXNwbGF5Iik7CiAgICAgICAgbWt0RGF0YVRyYWRlRGlzcGxheS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICAvLyBhbGwgcHJpY2UgZGlzcGxheSBkaWFsb2cgdG8gYmUgZHJhZ2dhYmxlCiAgICAgICAgZHJhZ0VsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1rdERhdGFUcmFkZURpc3BsYXkiKSk7CiAgICAgICAgY29uc3QgdGJsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1rdERhdGFUcmFkZVRhYmxlIik7CiAgICAgICAgbGV0IG5yb3c7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgbnJvdyA9IHRibC5pbnNlcnRSb3coLTEpOyAvLyBidWlsZCBvdXQgZW5vdWdoIHJvd3MKICAgICAgICAgICAgbnJvdy5pbnNlcnRDZWxsKDApOwogICAgICAgICAgICBucm93Lmluc2VydENlbGwoMSk7CiAgICAgICAgICAgIG5yb3cuaW5zZXJ0Q2VsbCgyKTsKICAgICAgICAgICAgbnJvdy5pbnNlcnRDZWxsKDMpOwogICAgICAgICAgICBucm93Lmluc2VydENlbGwoNCk7CiAgICAgICAgICAgIG5yb3cuaW5zZXJ0Q2VsbCg1KTsKICAgICAgICAgICAgbnJvdy5pbnNlcnRDZWxsKDYpOwogICAgICAgICAgICBucm93Lmluc2VydENlbGwoNyk7CiAgICAgICAgICAgIG5yb3cuaW5zZXJ0Q2VsbCg4KTsKICAgICAgICAgICAgbnJvdy5pbnNlcnRDZWxsKDkpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBjb25uZWN0V1MoKSB7CiAgICAgICAgYXBpS2V5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwaUtleSIpLnZhbHVlOwogICAgICAgIGNvbnN0IHdzID0gbmV3IFdlYlNvY2tldCgid3NzOi8vYXBpLmNvaW5tZXRyaWNzLmlvL2ZpZGVsaXR5L3YxL3N0cmVhbT9hcGlfa2V5PSIrYXBpS2V5KQogICAgICAgIHdzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgICBjb25zdCBkaWN0ID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgICAgICAgICAgaWYgKCEoImVycm9yIiBpbiBkaWN0KSkgewogICAgICAgICAgICAgICAgdXBkYXRlTWt0RGF0YURpc3BsYXkoZXZlbnQuZGF0YSkKICAgICAgICAgICAgfSBlbHNlIHsgLy8gZm91bmQgYW4gZXJyb3IKICAgICAgICAgICAgICAgIGNvbnN0IGFsZXJ0VGV4dCA9IGRpY3QuZXJyb3IubWVzc2FnZTsKICAgICAgICAgICAgICAgIHJhaXNlQWxlcnQoYWxlcnRUZXh0KTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgd3Mub25vcGVuID0gZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIHdzLnNlbmQoJ3siY29tbWFuZCI6InN1YnNjcmliZSIsInBhaXJzIjpbImJ0Yy11c2QiLCJldGgtdXNkIiwibHRjLXVzZCIsImJjaC11c2QiLCJldGMtdXNkIiwiZG9nZS11c2QiXSwiY2hhbm5lbHMiOlsidHJhZGUiLCJxdW90ZSIsIm1ldHJpY3MiXSwiZXhjaGFuZ2VzIjpbImNvaW5iYXNlIiwgImdlbWluaSIsICJrcmFrZW4iLCAiYml0c3RhbXAiXX0nKTsKICAgICAgICB9OwogICAgICAgIHdzLm9uY2xvc2UgPSBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgaWYoZXZlbnQuY29kZSAhPSAxMDAwKSB7IC8vIG5vcm1hbCBjbG9zZQogICAgICAgICAgICAgIGNvbnN0IGFsZXJ0VGV4dCA9IGdldEFsZXJ0RnJvbUNvZGUoZXZlbnQuY29kZSk7CiAgICAgICAgICAgICAgcmFpc2VBbGVydChhbGVydFRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB3cy5vbmVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJvbmVycm9yIGNhbGxlZCIpOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gY29ubmVjdFVDV1MoKSB7CiAgICAgICAgYXBpS2V5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwaUtleSIpLnZhbHVlOwogICAgICAgIGNvbnN0IHdzdWMgPSBuZXcgV2ViU29ja2V0KCJ3c3M6Ly9hcGkuY29pbm1ldHJpY3MuaW8vdjQvdGltZXNlcmllcy1zdHJlYW0vbWFya2V0LXF1b3Rlcz9tYXJrZXRzPWNvaW5iYXNlLWJ0Yy11c2Qtc3BvdCxnZW1pbmktYnRjLXVzZC1zcG90LGtyYWtlbi1idGMtdXNkLXNwb3QsYml0c3RhbXAtYnRjLXVzZC1zcG90JnByZXR0eT10cnVlJmFwaV9rZXk9IiArIGFwaUtleSkKICAgICAgICB3c3VjLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgICBjb25zdCBkaWN0ID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTsKICAgICAgICAgICAgaWYgKCEoImVycm9yIiBpbiBkaWN0KSkgewogICAgICAgICAgICAgICAgdXBkYXRlVUNRdW90ZURpc3BsYXkoZXZlbnQuZGF0YSkKICAgICAgICAgICAgfSBlbHNlIHsgLy8gZm91bmQgYW4gZXJyb3IKICAgICAgICAgICAgICAgIGNvbnN0IGFsZXJ0VGV4dCA9IGRpY3QuZXJyb3IubWVzc2FnZTsKICAgICAgICAgICAgICAgIHJhaXNlQWxlcnQoYWxlcnRUZXh0KTsKICAgICAgICAgICAgICAgIHdzT2sgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgd3N1Yy5vbm9wZW4gPSBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgc2F2ZUFwaUtleShhcGlLZXkpOwogICAgICAgIH07CiAgICAgICAgd3N1Yy5vbmNsb3NlID0gZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGNvbnN0IGFsZXJ0VGV4dCA9IGdldEFsZXJ0RnJvbUNvZGUoZXZlbnQuY29kZSk7CiAgICAgICAgICAgIC8vcmFpc2VBbGVydChhbGVydFRleHQpOwogICAgICAgIH07CiAgICAgICAgd3N1Yy5vbmVycm9yID0gZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJvbmVycm9yIGNhbGxlZCIpOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0QWxlcnRGcm9tQ29kZShjb2RlKSB7CiAgICAgICAgbGV0IHJlYXNvbjsKICAgICAgICBpZiAoY29kZSA9PT0gMTAwMCkKICAgICAgICAgICAgcmVhc29uID0gIk5vcm1hbCBjbG9zdXJlLCBtZWFuaW5nIHRoYXQgdGhlIHB1cnBvc2UgZm9yIHdoaWNoIHRoZSBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCBoYXMgYmVlbiBmdWxmaWxsZWQuIjsKICAgICAgICBlbHNlIGlmIChjb2RlID09PSAxMDAxKQogICAgICAgICAgICByZWFzb24gPSAiQW4gZW5kcG9pbnQgaXMgXCJnb2luZyBhd2F5XCIsIHN1Y2ggYXMgYSBzZXJ2ZXIgZ29pbmcgZG93biBvciBhIGJyb3dzZXIgaGF2aW5nIG5hdmlnYXRlZCBhd2F5IGZyb20gYSBwYWdlLiI7CiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gMTAwMikKICAgICAgICAgICAgcmVhc29uID0gIkFuIGVuZHBvaW50IGlzIHRlcm1pbmF0aW5nIHRoZSBjb25uZWN0aW9uIGR1ZSB0byBhIHByb3RvY29sIGVycm9yIjsKICAgICAgICBlbHNlIGlmIChjb2RlID09PSAxMDAzKQogICAgICAgICAgICByZWFzb24gPSAiQW4gZW5kcG9pbnQgaXMgdGVybWluYXRpbmcgdGhlIGNvbm5lY3Rpb24gYmVjYXVzZSBpdCBoYXMgcmVjZWl2ZWQgYSB0eXBlIG9mIGRhdGEgaXQgY2Fubm90IGFjY2VwdCAoZS5nLiwgYW4gZW5kcG9pbnQgdGhhdCB1bmRlcnN0YW5kcyBvbmx5IHRleHQgZGF0YSBNQVkgc2VuZCB0aGlzIGlmIGl0IHJlY2VpdmVzIGEgYmluYXJ5IG1lc3NhZ2UpLiI7CiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gMTAwNCkKICAgICAgICAgICAgcmVhc29uID0gIlJlc2VydmVkLiBUaGUgc3BlY2lmaWMgbWVhbmluZyBtaWdodCBiZSBkZWZpbmVkIGluIHRoZSBmdXR1cmUuIjsKICAgICAgICBlbHNlIGlmIChjb2RlID09PSAxMDA1KQogICAgICAgICAgICByZWFzb24gPSAiTm8gc3RhdHVzIGNvZGUgd2FzIGFjdHVhbGx5IHByZXNlbnQuIjsKICAgICAgICBlbHNlIGlmIChjb2RlID09PSAxMDA2KQogICAgICAgICAgICByZWFzb24gPSAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBhYm5vcm1hbGx5LCBlLmcuLCB3aXRob3V0IHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSI7CiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gMTAwNykKICAgICAgICAgICAgcmVhc29uID0gIkFuIGVuZHBvaW50IGlzIHRlcm1pbmF0aW5nIHRoZSBjb25uZWN0aW9uIGJlY2F1c2UgaXQgaGFzIHJlY2VpdmVkIGRhdGEgd2l0aGluIGEgbWVzc2FnZSB0aGF0IHdhcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIChlLmcuLCBub24tVVRGLTggW2h0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMzNjI5XSBkYXRhIHdpdGhpbiBhIHRleHQgbWVzc2FnZSkuIjsKICAgICAgICBlbHNlIGlmIChjb2RlID09PSAxMDA4KQogICAgICAgICAgICByZWFzb24gPSAiQW4gZW5kcG9pbnQgaXMgdGVybWluYXRpbmcgdGhlIGNvbm5lY3Rpb24gYmVjYXVzZSBpdCBoYXMgcmVjZWl2ZWQgYSBtZXNzYWdlIHRoYXQgXCJ2aW9sYXRlcyBpdHMgcG9saWN5XCIuIFRoaXMgcmVhc29uIGlzIGdpdmVuIGVpdGhlciBpZiB0aGVyZSBpcyBubyBvdGhlciBzdXRpYmxlIHJlYXNvbiwgb3IgaWYgdGhlcmUgaXMgYSBuZWVkIHRvIGhpZGUgc3BlY2lmaWMgZGV0YWlscyBhYm91dCB0aGUgcG9saWN5LiI7CiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gMTAwOSkKICAgICAgICAgICAgcmVhc29uID0gIkFuIGVuZHBvaW50IGlzIHRlcm1pbmF0aW5nIHRoZSBjb25uZWN0aW9uIGJlY2F1c2UgaXQgaGFzIHJlY2VpdmVkIGEgbWVzc2FnZSB0aGF0IGlzIHRvbyBiaWcgZm9yIGl0IHRvIHByb2Nlc3MuIjsKICAgICAgICBlbHNlIGlmIChjb2RlID09PSAxMDEwKSAvLyBOb3RlIHRoYXQgdGhpcyBzdGF0dXMgY29kZSBpcyBub3QgdXNlZCBieSB0aGUgc2VydmVyLCBiZWNhdXNlIGl0IGNhbiBmYWlsIHRoZSBXZWJTb2NrZXQgaGFuZHNoYWtlIGluc3RlYWQuCiAgICAgICAgICAgIHJlYXNvbiA9ICJBbiBlbmRwb2ludCAoY2xpZW50KSBpcyB0ZXJtaW5hdGluZyB0aGUgY29ubmVjdGlvbiBiZWNhdXNlIGl0IGhhcyBleHBlY3RlZCB0aGUgc2VydmVyIHRvIG5lZ290aWF0ZSBvbmUgb3IgbW9yZSBleHRlbnNpb24sIGJ1dCB0aGUgc2VydmVyIGRpZG4ndCByZXR1cm4gdGhlbSBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSBvZiB0aGUgV2ViU29ja2V0IGhhbmRzaGFrZS4gPGJyIC8+IFNwZWNpZmljYWxseSwgdGhlIGV4dGVuc2lvbnMgdGhhdCBhcmUgbmVlZGVkIGFyZTogIjsKICAgICAgICBlbHNlIGlmIChjb2RlID09PSAxMDExKQogICAgICAgICAgICByZWFzb24gPSAiQSBzZXJ2ZXIgaXMgdGVybWluYXRpbmcgdGhlIGNvbm5lY3Rpb24gYmVjYXVzZSBpdCBlbmNvdW50ZXJlZCBhbiB1bmV4cGVjdGVkIGNvbmRpdGlvbiB0aGF0IHByZXZlbnRlZCBpdCBmcm9tIGZ1bGZpbGxpbmcgdGhlIHJlcXVlc3QuIjsKICAgICAgICBlbHNlIGlmIChjb2RlID09PSAxMDE1KQogICAgICAgICAgICByZWFzb24gPSAiVGhlIGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBkdWUgdG8gYSBmYWlsdXJlIHRvIHBlcmZvcm0gYSBUTFMgaGFuZHNoYWtlIChlLmcuLCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGNhbid0IGJlIHZlcmlmaWVkKS4iOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmVhc29uID0gIlVua25vd24gcmVhc29uIjsKCiAgICAgICAgcmV0dXJuIChyZWFzb24pOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZU1rdERhdGFEaXNwbGF5KGRhdGEpIHsKICAgICAgICBsZXQgcXRibDsKICAgICAgICBsZXQgdGJsOwogICAgICAgIGxldCBpZHg7CiAgICAgICAgbGV0IHNwcmVhZDsKICAgICAgICBjb25zdCBkaWN0ID0gSlNPTi5wYXJzZShkYXRhKTsKCiAgICAgICAgLy8gU2V0IHRoZSB0YWJsZSByb3cgaW5kZXgKICAgICAgICAvL2NvbnNvbGUubG9nKCJtYWRlIGl0IHRvIHVwZGF0ZU1rdERhdGEiKTsKICAgICAgICBjb25zdCBzeW0gPSBkaWN0LnBhaXI7CgogICAgICAgIC8vIERldGVybWluZSB0eXBlIG9mIG1lc2FnZQogICAgICAgIGlmIChkaWN0LnR5cGUgPT09ICdxdW90ZScpIHsKICAgICAgICAgICAgaWR4ID0gZ2V0VUNUYmxJZHgoZGljdCkKICAgICAgICAgICAgdG90YWxRc1tpZHhdKys7CiAgICAgICAgICAgIHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJta3REYXRhUXVvdGVUYWJsZSIpOwoKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1swXS5pbm5lckhUTUwgPSBzeW07CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbMV0uaW5uZXJIVE1MID0gZGljdC5iaWRfZXhjaGFuZ2U7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbMl0uaW5uZXJIVE1MID0gYWRkRm9ybWF0KGRpY3QuYmlkX3NpemUsNCk7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbMl0uc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1szXS5pbm5lckhUTUwgPSBhZGRGb3JtYXQoZGljdC5iaWRfcHJpY2UsMik7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbM10uc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgICAgICAgLy8gbGFzdCB0cmFkZSB3b3VsZCBnbyBoZXJlCiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbNV0uaW5uZXJIVE1MID0gYWRkRm9ybWF0KGRpY3QuYXNrX3ByaWNlLDIpOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzVdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbNl0uaW5uZXJIVE1MID0gYWRkRm9ybWF0KGRpY3QuYXNrX3NpemUsNCk7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbNl0uc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1s3XS5pbm5lckhUTUwgPSBkaWN0LmFza19leGNoYW5nZTsKICAgICAgICAgICAgc3ByZWFkID0gcGFyc2VGbG9hdChkaWN0LmFza19wcmljZSAtIGRpY3QuYmlkX3ByaWNlKS50b0ZpeGVkKDIpOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzhdLmlubmVySFRNTCA9IGFkZEZvcm1hdChzcHJlYWQsMik7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbOF0uc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgICAgICAgaWYgKHNwcmVhZCA8IDAuMCkgeyAgLy8gQ3Jvc3NlZCBNYXJrZXQKICAgICAgICAgICAgICAgIG5lZ1NwcmRDbnRbaWR4XSsrOwogICAgICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1s4XS5zdHlsZS5jb2xvciA9ICIjRTYxOTRCIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbOF0uc3R5bGUuY29sb3IgPSAiIzAwMDAwMCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1s5XS5pbm5lckhUTUwgPSBwYXJzZUZsb2F0KG5lZ1NwcmRDbnRbaWR4XSAvIHRvdGFsUXNbaWR4XSAqIDEwMCkudG9GaXhlZCgyKTsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1s5XS5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzEwXS5pbm5lckhUTUwgPSBhZGRGb3JtYXQodG90YWxRc1tpZHhdLDApOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzEwXS5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwoKICAgICAgICB9IGVsc2UgdmFyIHFpZHg7CiAgICAgICAgaWYgKGRpY3QudHlwZSA9PT0gJ3RyYWRlJykgewoKICAgICAgICAgICAgaWR4ID0gZ2V0VGJsSWR4KGRpY3QpCiAgICAgICAgICAgIHFpZHggPSBnZXRVQ1RibElkeChkaWN0KTsKICAgICAgICAgICAgdG90YWxUc1tpZHhdKys7CiAgICAgICAgICAgIHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJta3REYXRhVHJhZGVUYWJsZSIpOwogICAgICAgICAgICBxdGJsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1rdERhdGFRdW90ZVRhYmxlIik7CgogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzBdLmlubmVySFRNTCA9IHN5bTsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1sxXS5pbm5lckhUTUwgPSBkaWN0LmV4Y2hhbmdlOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzJdLmlubmVySFRNTCA9IGFkZEZvcm1hdChkaWN0LnRyYWRlX3ByaWNlLCAyKTsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1syXS5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwogICAgICAgICAgICBxdGJsLnJvd3NbcWlkeF0uY2VsbHNbNF0uaW5uZXJIVE1MID0gYWRkRm9ybWF0KGRpY3QudHJhZGVfcHJpY2UsIDIpOwogICAgICAgICAgICBxdGJsLnJvd3NbcWlkeF0uY2VsbHNbNF0uc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgICAgICAgaWYgKGlkeCA9PT0gMSkgeyAvLyBmb3IgYnRjIHVwZGF0ZSB0aGUgdW5jb25mbGF0ZWQgcHJpY2UgdG9vCiAgICAgICAgICAgICAgICBxdGJsLnJvd3NbMl0uY2VsbHNbNF0uaW5uZXJIVE1MID0gYWRkRm9ybWF0KGRpY3QudHJhZGVfcHJpY2UsIDIpOwogICAgICAgICAgICAgICAgcXRibC5yb3dzWzJdLmNlbGxzWzRdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1szXS5pbm5lckhUTUwgPSBhZGRGb3JtYXQoZGljdC50cmFkZV9hbW91bnQsIDYpOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzNdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbNF0uaW5uZXJIVE1MID0gZGljdC50cmFkZV9zaWRlOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzRdLnN0eWxlLnRleHRBbGlnbiA9ICJjZW50ZXIiOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzVdLmlubmVySFRNTCA9IGFkZEZvcm1hdChkaWN0LnByaWNlX2NoYW5nZV91c2QsIDIpOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzVdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbNl0uaW5uZXJIVE1MID0gYWRkRm9ybWF0KGRpY3QucHJpY2VfY2hhbmdlX3BjdCwgMik7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbNl0uc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1s3XS5pbm5lckhUTUwgPSBhZGRGb3JtYXQoZGljdC5wcmljZV92d2FwLCAyKTsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1s3XS5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwogICAgICAgICAgICBsZXQgdm9sID0gYWRkRm9ybWF0KChkaWN0LnRvdGFsX3ZvbHVtZV91c2QpIC8gMTAwMDAwMCwgMik7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbOF0uaW5uZXJIVE1MID0gdm9sICsgIk0iOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzhdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbOV0uaW5uZXJIVE1MID0gYWRkRm9ybWF0KHRvdGFsVHNbaWR4XSwgMCk7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbOV0uc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlVUNRdW90ZURpc3BsYXkoZGF0YSkKICAgIHsKICAgICAgICBsZXQgdGJsOwogICAgICAgIGxldCBpZHg7CiAgICAgICAgbGV0IHNwcmVhZDsKICAgICAgICBjb25zdCBkaWN0ID0gSlNPTi5wYXJzZShkYXRhKTsKCiAgICAgICAgLy8gU2V0IHRoZSB0YWJsZSByb3cgaW5kZXgKICAgICAgICAvL2NvbnNvbGUubG9nKCJtYWRlIGl0IHRvIHVwZGF0ZU1rdERhdGEiKTsKICAgICAgICBjb25zdCBzeW0gPSAiYnRjLXVzZCAodWMpIjsKCiAgICAgICAgLy8gRGV0ZXJtaW5lIHR5cGUgb2YgbWVzYWdlCiAgICAgICAgaWR4ID0gMgogICAgICAgIHRvdGFsVUNRc1tpZHhdKys7CiAgICAgICAgdGJsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1rdERhdGFRdW90ZVRhYmxlIik7CgogICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbMF0uaW5uZXJIVE1MID0gc3ltOwogICAgICAgIGNvbnN0IG1rdCA9IGRpY3QubWFya2V0LnNwbGl0KCctJyk7CiAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1sxXS5pbm5lckhUTUwgPSBta3RbMF07CiAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1syXS5pbm5lckhUTUwgPSBhZGRGb3JtYXQoZGljdC5iaWRfc2l6ZSw0KTsKICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzJdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbM10uaW5uZXJIVE1MID0gYWRkRm9ybWF0KGRpY3QuYmlkX3ByaWNlLDIpOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzNdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIC8vIGxhc3QgdHJhZGUgd291bGQgZ28gaGVyZQogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzVdLmlubmVySFRNTCA9IGFkZEZvcm1hdChkaWN0LmFza19wcmljZSwyKTsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1s1XS5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzZdLmlubmVySFRNTCA9IGFkZEZvcm1hdChkaWN0LmFza19zaXplLDQpOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzZdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbN10uaW5uZXJIVE1MID0gbWt0WzBdOwogICAgICAgICAgICBzcHJlYWQgPSBwYXJzZUZsb2F0KGRpY3QuYXNrX3ByaWNlIC0gZGljdC5iaWRfcHJpY2UpLnRvRml4ZWQoMik7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbOF0uaW5uZXJIVE1MID0gYWRkRm9ybWF0KHNwcmVhZCwyKTsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1s4XS5zdHlsZS50ZXh0QWxpZ24gPSAicmlnaHQiOwogICAgICAgICAgICBpZiAoc3ByZWFkIDwgMC4wKSB7ICAvLyBDcm9zc2VkIE1hcmtldAogICAgICAgICAgICAgICAgbmVnVUNTcHJkQ250W2lkeF0rKzsKICAgICAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbOF0uc3R5bGUuY29sb3IgPSAiI0U2MTk0QiI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzhdLnN0eWxlLmNvbG9yID0gIiMwMDAwMDAiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbOV0uaW5uZXJIVE1MID0gcGFyc2VGbG9hdChuZWdVQ1NwcmRDbnRbaWR4XSAvIHRvdGFsVUNRc1tpZHhdICogMTAwKS50b0ZpeGVkKDIpOwogICAgICAgICAgICB0Ymwucm93c1tpZHhdLmNlbGxzWzldLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIHRibC5yb3dzW2lkeF0uY2VsbHNbMTBdLmlubmVySFRNTCA9IGFkZEZvcm1hdCh0b3RhbFVDUXNbaWR4XSwwKTsKICAgICAgICAgICAgdGJsLnJvd3NbaWR4XS5jZWxsc1sxMF0uc3R5bGUudGV4dEFsaWduID0gInJpZ2h0IjsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRGb3JtYXQoc3RyLGRlYykgewogICAgICAgIGxldCBudW0gPSBwYXJzZUZsb2F0KHN0cik7CiAgICAgICAgbGV0IG51bXN0cjsKICAgICAgICBpZihudW0gPiAxMDAwKSB7CiAgICAgICAgICAgIG51bSA9IG51bS8xMDAwOwogICAgICAgICAgICBudW1zdHIgPSBudW0udG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7CiAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiwKICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyCiAgICAgICAgfSkgKyAiSyI7IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKG51bSA+IDEwMDAwMDApIHsKICAgICAgICAgICAgICAgIG51bT1udW0vMTAwMDAwMDsKICAgICAgICAgICAgICAgIG51bXN0ciA9IG51bS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsKICAgICAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsCiAgICAgICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyCiAgICAgICAgICAgICAgICB9KSArICJNIjsgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG51bXN0ciA9IG51bS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHsKICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZGVjLAogICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkZWMKICAgICAgICAgICAgfSkgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVtc3RyOwogICAgfQoKICAgIC8vIGdyZWVuIHRibC5yb3dzW2orMV0uY2VsbHNbMl0uc3R5bGUuY29sb3IgPSAiIzRFQjI2NSI7CiAgICAvLyB0Ymwucm93c1tqKzFdLmNlbGxzWzJdLnN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAvLyByZWQgdGJsLnJvd3NbaisxXS5jZWxsc1syXS5zdHlsZS5jb2xvciA9ICIjRTYxOTRCIjsKCiAgICBmdW5jdGlvbiBnZXRUYmxJZHgoZGljdCkgewogICAgICAgIC8vY29uc29sZS5sb2coc3ltKTsKICAgICAgICBsZXQgaWR4ID0gMDsKICAgICAgICBjb25zdCBzeW0gPSBkaWN0LnBhaXI7CgogICAgICAgIGlmIChzeW0gPT09ICJidGMtdXNkIikgewogICAgICAgICAgICBpZHggPSAxOwogICAgICAgIH0gZWxzZSBpZiAoc3ltID09PSAiZXRoLXVzZCIpIHsKICAgICAgICAgICAgaWR4ID0gMjsKICAgICAgICB9IGVsc2UgaWYgKHN5bSA9PT0gImx0Yy11c2QiKSB7CiAgICAgICAgICAgIGlkeCA9IDM7CiAgICAgICAgfSBlbHNlIGlmIChzeW0gPT09ICJiY2gtdXNkIikgewogICAgICAgICAgICBpZHggPSA0OwogICAgICAgIH0gZWxzZSBpZiAoc3ltID09PSAiZXRjLXVzZCIpIHsKICAgICAgICAgICAgaWR4ID0gNTsKICAgICAgICB9IGVsc2UgaWYgKHN5bSA9PT0gImRvZ2UtdXNkIikgewogICAgICAgICAgICBpZHggPSA2OwogICAgICAgIH0KICAgICAgICBpZiAoaWR4ID09PSAwKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRpY3QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaWR4OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFVDVGJsSWR4KGRpY3QpIHsKICAgICAgICAvL2NvbnNvbGUubG9nKHN5bSk7CiAgICAgICAgbGV0IGlkeCA9IDA7CiAgICAgICAgY29uc3Qgc3ltID0gZGljdC5wYWlyOwoKICAgICAgICBpZiAoc3ltID09PSAiYnRjLXVzZCIpIHsKICAgICAgICAgICAgaWR4ID0gMTsKICAgICAgICB9IGVsc2UgaWYgKHN5bSA9PT0gImV0aC11c2QiKSB7CiAgICAgICAgICAgIGlkeCA9IDM7CiAgICAgICAgfSBlbHNlIGlmIChzeW0gPT09ICJsdGMtdXNkIikgewogICAgICAgICAgICBpZHggPSA0OwogICAgICAgIH0gZWxzZSBpZiAoc3ltID09PSAiYmNoLXVzZCIpIHsKICAgICAgICAgICAgaWR4ID0gNTsKICAgICAgICB9IGVsc2UgaWYgKHN5bSA9PT0gImV0Yy11c2QiKSB7CiAgICAgICAgICAgIGlkeCA9IDY7CiAgICAgICAgfSBlbHNlIGlmIChzeW0gPT09ICJkb2dlLXVzZCIpIHsKICAgICAgICAgICAgaWR4ID0gNzsKICAgICAgICB9CiAgICAgICAgaWYgKGlkeCA9PT0gMCkgewogICAgICAgICAgICBjb25zb2xlLmxvZyhkaWN0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGlkeDsKICAgIH0KCiAgICAvLyBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZHJhZ2dhYmxlIGRpYWxvZwogICAgZnVuY3Rpb24gZHJhZ0VsZW1lbnQoZWxtbnQpIHsKICAgICAgICBsZXQgcG9zMSA9IDA7CiAgICAgICAgbGV0IHBvczIgPSAwOwogICAgICAgIGxldCBwb3MzID0gMDsKICAgICAgICBsZXQgcG9zNCA9IDA7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsbW50LmlkICsgImhlYWRlciIpKSB7CiAgICAgICAgICAgIC8vIGlmIHByZXNlbnQsIHRoZSBoZWFkZXIgaXMgd2hlcmUgeW91IG1vdmUgdGhlIERJViBmcm9tOgogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbG1udC5pZCArICJoZWFkZXIiKS5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBtb3ZlIHRoZSBESVYgZnJvbSBhbnl3aGVyZSBpbnNpZGUgdGhlIERJVjoKICAgICAgICAgICAgZWxtbnQub25tb3VzZWRvd24gPSBkcmFnTW91c2VEb3duOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZHJhZ01vdXNlRG93bihlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgLy8gZ2V0IHRoZSBtb3VzZSBjdXJzb3IgcG9zaXRpb24gYXQgc3RhcnR1cDoKICAgICAgICAgICAgcG9zMyA9IGUuY2xpZW50WDsKICAgICAgICAgICAgcG9zNCA9IGUuY2xpZW50WTsKICAgICAgICAgICAgZG9jdW1lbnQub25tb3VzZXVwID0gY2xvc2VEcmFnRWxlbWVudDsKICAgICAgICAgICAgLy8gY2FsbCBhIGZ1bmN0aW9uIHdoZW5ldmVyIHRoZSBjdXJzb3IgbW92ZXM6CiAgICAgICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBlbGVtZW50RHJhZyhlKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBuZXcgY3Vyc29yIHBvc2l0aW9uOgogICAgICAgICAgICBwb3MxID0gcG9zMyAtIGUuY2xpZW50WDsKICAgICAgICAgICAgcG9zMiA9IHBvczQgLSBlLmNsaWVudFk7CiAgICAgICAgICAgIHBvczMgPSBlLmNsaWVudFg7CiAgICAgICAgICAgIHBvczQgPSBlLmNsaWVudFk7CiAgICAgICAgICAgIC8vIHNldCB0aGUgZWxlbWVudCdzIG5ldyBwb3NpdGlvbjoKICAgICAgICAgICAgZWxtbnQuc3R5bGUudG9wID0gKGVsbW50Lm9mZnNldFRvcCAtIHBvczIpICsgInB4IjsKICAgICAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IChlbG1udC5vZmZzZXRMZWZ0IC0gcG9zMSkgKyAicHgiOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2xvc2VEcmFnRWxlbWVudCgpIHsKICAgICAgICAgICAgLy8gc3RvcCBtb3Zpbmcgd2hlbiBtb3VzZSBidXR0b24gaXMgcmVsZWFzZWQ6CiAgICAgICAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7CiAgICAgICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gbnVsbDsKICAgICAgICB9CiAgICB9Cgo8L3NjcmlwdD4KCjxzZWN0aW9uIGNsYXNzPSJtZC1zdHJlYW0iPgo8ZGl2IGlkPSJhbGVydERpc3BsYXkiIGNsYXNzPSJhbGVydE1vZGFsIj4KICAgIDxhIGhyZWY9IiQiIGNsYXNzPSJsb2dvMiI+CiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vY29pbm1ldHJpY3MuaW8vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMTIvY29pbm1ldHJpY3MtbG9nb0AyeC5wbmciPgogICAgPC9hPgogICAgPHAgaWQ9ImFsZXJ0TXNnIj5BbGVydDwvcD4KICAgIDxidXR0b24gb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FsZXJ0RGlzcGxheScpLnN0eWxlLmRpc3BsYXk9J25vbmUnO2xvY2F0aW9uLnJlbG9hZCgpOyI+T0s8L2J1dHRvbj4KPC9kaXY+CjxkaXYgaWQ9ImxvZ2luIiBjbGFzcz0ibW9kYWwiPgogICAgPGEgaHJlZj0iIyIgY2xhc3M9ImxvZ28yIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9jb2lubWV0cmljcy5pby93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8xMi9jb2lubWV0cmljcy1sb2dvQDJ4LnBuZyI+CiAgICA8L2E+CiAgICA8bGFiZWw+QVBJIEtFWTwvbGFiZWw+CiAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGlkPSJhcGlLZXkiIG5hbWU9ImFwaUtleSIgcGxhY2Vob2xkZXI9IlJlcXVpcmVkIEZvciBEYXRhIEFjY2VzcyIgYXV0b2ZvY3VzPgogICAgPGJ1dHRvbiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9naW4nKS5zdHlsZS5kaXNwbGF5PSdub25lJztzdGFydCgpOyI+R288L2J1dHRvbj4KPC9kaXY+CjxkaXYgY2xhc3M9ImRpc3BsYXlXcmFwcGVyIj4KICAgIDxkaXYgaWQ9Im1rdERhdGFRdW90ZURpc3BsYXkiIGNsYXNzPSJxdW90ZURpc3BsYXkiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlcldyYXBwZXIiPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OmJvbGQiPlFVT1RFIERJU1BMQVk8L2xhYmVsPgogICAgICAgICAgICA8YnV0dG9uIGlkPSJjbG9zZUJ1dHRvbiIgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21rdERhdGFRdW90ZURpc3BsYXknKS5zdHlsZS5kaXNwbGF5PSdub25lJzsiPiYjeDI3MTU7PC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRhYmxlIGlkPSJta3REYXRhUXVvdGVUYWJsZSIgY2xhc3M9InF1b3RlVGFibGUiIGNlbGxzcGFjaW5nPSIwIj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoPlN5Ym1vbDwvdGg+CiAgICAgICAgICAgICAgICA8dGg+QmlkIEV4Y2g8L3RoPgogICAgICAgICAgICAgICAgPHRoPkJpZCBTaXplPC90aD4KICAgICAgICAgICAgICAgIDx0aD5CaWQ8L3RoPgogICAgICAgICAgICAgICAgPHRoPkxhc3Q8L3RoPgogICAgICAgICAgICAgICAgPHRoPkFzazwvdGg+CiAgICAgICAgICAgICAgICA8dGg+QXNrIFNpemU8L3RoPgogICAgICAgICAgICAgICAgPHRoPkFzayBFeGNoPC90aD4KICAgICAgICAgICAgICAgIDx0aD5TcHJlYWQ8L3RoPgogICAgICAgICAgICAgICAgPHRoPlBjdCBOZWc8L3RoPgogICAgICAgICAgICAgICAgPHRoPiMgUXVvdGVzPC90aD4KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJta3REYXRhVHJhZGVEaXNwbGF5IiBjbGFzcz0idHJhZGVEaXNwbGF5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXJXcmFwcGVyIj4KICAgICAgICAgICAgPGxhYmVsIHN0eWxlPSJmb250LXNpemU6MjRweDtmb250LXdlaWdodDpib2xkIj5UUkFERSBESVNQTEFZPC9sYWJlbD4KICAgICAgICAgICAgPGJ1dHRvbiBpZD0iY2xvc2VCdXR0b24iIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdta3REYXRhVHJhZGVEaXNwbGF5Jykuc3R5bGUuZGlzcGxheT0nbm9uZSc7Ij4mI3gyNzE1OzwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDx0YWJsZSBpZD0ibWt0RGF0YVRyYWRlVGFibGUiIGNsYXNzPSJ0cmFkZVRhYmxlIiBjZWxsc3BhY2luZz0iMCI+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5TeWJtb2w8L3RoPgogICAgICAgICAgICAgICAgPHRoPkV4Y2g8L3RoPgogICAgICAgICAgICAgICAgPHRoPlByaWNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5BbW91bnQ8L3RoPgogICAgICAgICAgICAgICAgPHRoPlNpZGU8L3RoPgogICAgICAgICAgICAgICAgPHRoPkNoZyBVU0Q8L3RoPgogICAgICAgICAgICAgICAgPHRoPiUgQ2hnPC90aD4KICAgICAgICAgICAgICAgIDx0aD5WV0FQPC90aD4KICAgICAgICAgICAgICAgIDx0aD5Wb2wgVVNEPC90aD4KICAgICAgICAgICAgICAgIDx0aD4jIFRyYWRlczwvdGg+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZGl2Pgo8L2Rpdj4KPC9zZWN0aW9uPg==[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]