You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

643 lines
1.9 MiB

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tutorial: Interactive Maps with Python and Folium, Part 1\n",
"## Basic Maps and Circle Markers\n",
"#### Using data from NYC CitiBike program\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:13.849242Z",
"start_time": "2018-11-28T12:43:12.776957Z"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import folium"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To test that everything is working, let’s pull up a map of New York City and add a circle marker."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:13.884669Z",
"start_time": "2018-11-28T12:43:13.851475Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4zLjQvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4zLjQvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzIyNGQ5Y2MxYzVjNjQxZjA4YjJiNDg1OTk1M2QyYzBhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8yMjRkOWNjMWM1YzY0MWYwOGIyYjQ4NTk5NTNkMmMwYSIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfMjI0ZDljYzFjNWM2NDFmMDhiMmI0ODU5OTUzZDJjMGEgPSBMLm1hcCgKICAgICAgICAnbWFwXzIyNGQ5Y2MxYzVjNjQxZjA4YjJiNDg1OTk1M2QyYzBhJywgewogICAgICAgIGNlbnRlcjogWzQwLjczOCwgLTczLjk4XSwKICAgICAgICB6b29tOiAxMywKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CgoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfMTMzNDU2NTAyMWMwNDk5NGEwNWVjNzY1ZDZkMDc5MmUgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLXtzfS5nbG9iYWwuc3NsLmZhc3RseS5uZXQvZGFya19hbGwve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF8yMjRkOWNjMWM1YzY0MWYwOGIyYjQ4NTk5NTNkMmMwYSk7CiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmI5Y2UwMzYwNzAxNDRmMTgzODFmMjZiZjc4YjlhMjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzgsIC03My45OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMzM4OGZmIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzMzODhmZiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8yMjRkOWNjMWM1YzY0MWYwOGIyYjQ4NTk5NTNkMmMwYSk7CiAgICAgICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x11e272c50>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"folium_map = folium.Map(location=[40.738, -73.98],\n",
" zoom_start=13,\n",
" tiles=\"CartoDB dark_matter\")\n",
"\n",
"folium.CircleMarker(location=[40.738, -73.98],fill=True).add_to(folium_map)\n",
"folium_map"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Showing some real data, NYC bike trips\n",
"Next, we’ll load some data. The NYC bike share program makes its data public, you can download it here:\n",
"https://www.citibikenyc.com/system-data.\n",
"Just one month of data will do for this example. \n",
"\n",
"We’ll use pandas to load the data into python, we’ll convert time strings into DateTime objects"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:32.653296Z",
"start_time": "2018-11-28T12:43:13.890081Z"
}
},
"outputs": [],
"source": [
"bike_data = pd.read_csv(\"201610-citibike-tripdata.csv\")\n",
"bike_data[\"Start Time\"] = pd.to_datetime(bike_data[\"Start Time\"])\n",
"bike_data[\"Stop Time\"] = pd.to_datetime(bike_data[\"Stop Time\"])\n",
"bike_data[\"hour\"] = bike_data[\"Start Time\"].map(lambda x: x.hour)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:32.688022Z",
"start_time": "2018-11-28T12:43:32.657573Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Trip Duration</th>\n",
" <th>Start Time</th>\n",
" <th>Stop Time</th>\n",
" <th>Start Station ID</th>\n",
" <th>Start Station Name</th>\n",
" <th>Start Station Latitude</th>\n",
" <th>Start Station Longitude</th>\n",
" <th>End Station ID</th>\n",
" <th>End Station Name</th>\n",
" <th>End Station Latitude</th>\n",
" <th>End Station Longitude</th>\n",
" <th>Bike ID</th>\n",
" <th>User Type</th>\n",
" <th>Birth Year</th>\n",
" <th>Gender</th>\n",
" <th>hour</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>328</td>\n",
" <td>2016-10-01 00:00:07</td>\n",
" <td>2016-10-01 00:05:35</td>\n",
" <td>471</td>\n",
" <td>Grand St &amp; Havemeyer St</td>\n",
" <td>40.712868</td>\n",
" <td>-73.956981</td>\n",
" <td>3077</td>\n",
" <td>Stagg St &amp; Union Ave</td>\n",
" <td>40.708771</td>\n",
" <td>-73.950953</td>\n",
" <td>25254</td>\n",
" <td>Subscriber</td>\n",
" <td>1992.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>398</td>\n",
" <td>2016-10-01 00:00:11</td>\n",
" <td>2016-10-01 00:06:49</td>\n",
" <td>3147</td>\n",
" <td>E 85 St &amp; 3 Ave</td>\n",
" <td>40.778012</td>\n",
" <td>-73.954071</td>\n",
" <td>3140</td>\n",
" <td>1 Ave &amp; E 78 St</td>\n",
" <td>40.771404</td>\n",
" <td>-73.953517</td>\n",
" <td>17810</td>\n",
" <td>Subscriber</td>\n",
" <td>1988.0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>430</td>\n",
" <td>2016-10-01 00:00:14</td>\n",
" <td>2016-10-01 00:07:25</td>\n",
" <td>345</td>\n",
" <td>W 13 St &amp; 6 Ave</td>\n",
" <td>40.736494</td>\n",
" <td>-73.997044</td>\n",
" <td>470</td>\n",
" <td>W 20 St &amp; 8 Ave</td>\n",
" <td>40.743453</td>\n",
" <td>-74.000040</td>\n",
" <td>20940</td>\n",
" <td>Subscriber</td>\n",
" <td>1965.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>351</td>\n",
" <td>2016-10-01 00:00:21</td>\n",
" <td>2016-10-01 00:06:12</td>\n",
" <td>3307</td>\n",
" <td>West End Ave &amp; W 94 St</td>\n",
" <td>40.794165</td>\n",
" <td>-73.974124</td>\n",
" <td>3357</td>\n",
" <td>W 106 St &amp; Amsterdam Ave</td>\n",
" <td>40.800836</td>\n",
" <td>-73.966449</td>\n",
" <td>19086</td>\n",
" <td>Subscriber</td>\n",
" <td>1993.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2693</td>\n",
" <td>2016-10-01 00:00:21</td>\n",
" <td>2016-10-01 00:45:15</td>\n",
" <td>3428</td>\n",
" <td>8 Ave &amp; W 16 St</td>\n",
" <td>40.740983</td>\n",
" <td>-74.001702</td>\n",
" <td>3323</td>\n",
" <td>W 106 St &amp; Central Park West</td>\n",
" <td>40.798186</td>\n",
" <td>-73.960591</td>\n",
" <td>26502</td>\n",
" <td>Subscriber</td>\n",
" <td>1991.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Trip Duration Start Time Stop Time Start Station ID \\\n",
"0 328 2016-10-01 00:00:07 2016-10-01 00:05:35 471 \n",
"1 398 2016-10-01 00:00:11 2016-10-01 00:06:49 3147 \n",
"2 430 2016-10-01 00:00:14 2016-10-01 00:07:25 345 \n",
"3 351 2016-10-01 00:00:21 2016-10-01 00:06:12 3307 \n",
"4 2693 2016-10-01 00:00:21 2016-10-01 00:45:15 3428 \n",
"\n",
" Start Station Name Start Station Latitude Start Station Longitude \\\n",
"0 Grand St & Havemeyer St 40.712868 -73.956981 \n",
"1 E 85 St & 3 Ave 40.778012 -73.954071 \n",
"2 W 13 St & 6 Ave 40.736494 -73.997044 \n",
"3 West End Ave & W 94 St 40.794165 -73.974124 \n",
"4 8 Ave & W 16 St 40.740983 -74.001702 \n",
"\n",
" End Station ID End Station Name End Station Latitude \\\n",
"0 3077 Stagg St & Union Ave 40.708771 \n",
"1 3140 1 Ave & E 78 St 40.771404 \n",
"2 470 W 20 St & 8 Ave 40.743453 \n",
"3 3357 W 106 St & Amsterdam Ave 40.800836 \n",
"4 3323 W 106 St & Central Park West 40.798186 \n",
"\n",
" End Station Longitude Bike ID User Type Birth Year Gender hour \n",
"0 -73.950953 25254 Subscriber 1992.0 1 0 \n",
"1 -73.953517 17810 Subscriber 1988.0 2 0 \n",
"2 -74.000040 20940 Subscriber 1965.0 1 0 \n",
"3 -73.966449 19086 Subscriber 1993.0 1 0 \n",
"4 -73.960591 26502 Subscriber 1991.0 1 0 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bike_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### pre-processing data\n",
"We'll write a function that does the following: \n",
"- generate a DataFrame containing locations of stations\n",
"- generates a DataFrame containing the number of trips originating at each station. \n",
"- generates a DataFrame containing the number of trips arriving at each station. \n",
"- join the three dataframes into one."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:33.438458Z",
"start_time": "2018-11-28T12:43:32.690255Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Departure Count</th>\n",
" <th>Start Station Latitude</th>\n",
" <th>Start Station Longitude</th>\n",
" <th>Start Station Name</th>\n",
" <th>Arrival Count</th>\n",
" </tr>\n",
" <tr>\n",
" <th>Start Station ID</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>72</th>\n",
" <td>42</td>\n",
" <td>40.767272</td>\n",
" <td>-73.993929</td>\n",
" <td>W 52 St &amp; 11 Ave</td>\n",
" <td>96.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td>29</td>\n",
" <td>40.719116</td>\n",
" <td>-74.006667</td>\n",
" <td>Franklin St &amp; W Broadway</td>\n",
" <td>79.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>31</td>\n",
" <td>40.711174</td>\n",
" <td>-74.000165</td>\n",
" <td>St James Pl &amp; Pearl St</td>\n",
" <td>13.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>32</td>\n",
" <td>40.683826</td>\n",
" <td>-73.976323</td>\n",
" <td>Atlantic Ave &amp; Fort Greene Pl</td>\n",
" <td>35.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>64</td>\n",
" <td>40.741776</td>\n",
" <td>-74.001497</td>\n",
" <td>W 17 St &amp; 8 Ave</td>\n",
" <td>85.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Departure Count Start Station Latitude \\\n",
"Start Station ID \n",
"72 42 40.767272 \n",
"79 29 40.719116 \n",
"82 31 40.711174 \n",
"83 32 40.683826 \n",
"116 64 40.741776 \n",
"\n",
" Start Station Longitude Start Station Name \\\n",
"Start Station ID \n",
"72 -73.993929 W 52 St & 11 Ave \n",
"79 -74.006667 Franklin St & W Broadway \n",
"82 -74.000165 St James Pl & Pearl St \n",
"83 -73.976323 Atlantic Ave & Fort Greene Pl \n",
"116 -74.001497 W 17 St & 8 Ave \n",
"\n",
" Arrival Count \n",
"Start Station ID \n",
"72 96.0 \n",
"79 79.0 \n",
"82 13.0 \n",
"83 35.0 \n",
"116 85.0 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def get_trip_counts_by_hour(selected_hour):\n",
" # make a DataFrame with locations for each bike station\n",
" locations = bike_data.groupby(\"Start Station ID\").first()\n",
" locations = locations.loc[:, [\"Start Station Latitude\",\n",
" \"Start Station Longitude\",\n",
" \"Start Station Name\"]]\n",
" \n",
" #select one time of day\n",
" subset = bike_data[bike_data[\"hour\"]==selected_hour]\n",
" \n",
" # count trips for each destination\n",
" departure_counts = subset.groupby(\"Start Station ID\").count()\n",
" departure_counts = departure_counts.iloc[:,[0]]\n",
" departure_counts.columns= [\"Departure Count\"]\n",
" \n",
" # count trips for each origin\n",
" arrival_counts = subset.groupby(\"End Station ID\").count().iloc[:,[0]]\n",
" arrival_counts.columns= [\"Arrival Count\"]\n",
"\n",
" #join departure counts, arrival counts, and locations\n",
" trip_counts = departure_counts.join(locations).join(arrival_counts)\n",
" return trip_counts\n",
"\n",
"# print a sample to check our code works\n",
"get_trip_counts_by_hour(6).head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we'll write a function that generates a new folium map and adds circle markers for each station."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:33.451717Z",
"start_time": "2018-11-28T12:43:33.441093Z"
}
},
"outputs": [],
"source": [
"def plot_station_counts(trip_counts):\n",
" # generate a new map\n",
" folium_map = folium.Map(location=[40.738, -73.98],\n",
" zoom_start=13,\n",
" tiles=\"CartoDB dark_matter\",\n",
" width='50%')\n",
"\n",
" # for each row in the data, add a cicle marker\n",
" for index, row in trip_counts.iterrows():\n",
" # calculate net departures\n",
" net_departures = (row[\"Departure Count\"]-row[\"Arrival Count\"])\n",
" \n",
" # generate the popup message that is shown on click.\n",
" popup_text = \"{}<br> total departures: {}<br> total arrivals: {}<br> net departures: {}\"\n",
" popup_text = popup_text.format(row[\"Start Station Name\"],\n",
" row[\"Arrival Count\"],\n",
" row[\"Departure Count\"],\n",
" net_departures)\n",
" \n",
" # radius of circles\n",
" radius = net_departures/20\n",
" \n",
" # choose the color of the marker\n",
" if net_departures>0:\n",
" # color=\"#FFCE00\" # orange\n",
" # color=\"#007849\" # green\n",
" color=\"#E37222\" # tangerine\n",
" else:\n",
" # color=\"#0375B4\" # blue\n",
" # color=\"#FFCE00\" # yellow \n",
" color=\"#0A8A9F\" # teal\n",
" \n",
" # add marker to the map\n",
" folium.CircleMarker(location=(row[\"Start Station Latitude\"],\n",
" row[\"Start Station Longitude\"]),\n",
" radius=radius,\n",
" color=color,\n",
" popup=popup_text,\n",
" fill=True).add_to(folium_map)\n",
" return folium_map"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Showing Real data\n",
"We'll make 2 maps to show the different patterns for bike migration at 9 am and 6pm."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:35.683522Z",
"start_time": "2018-11-28T12:43:33.455012Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4zLjQvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4zLjQvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliIiA+PC9kaXY+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5YiA9IEwubWFwKAogICAgICAgICdtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWInLCB7CiAgICAgICAgY2VudGVyOiBbNDAuNzM4LCAtNzMuOThdLAogICAgICAgIHpvb206IDEzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKCgogICAgCiAgICB2YXIgdGlsZV9sYXllcl81MDkxNTExNTYyZTc0ODAxOWU5MWRmYWFmYjkyZTFhMCA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL2NhcnRvZGItYmFzZW1hcHMte3N9Lmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9kYXJrX2FsbC97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDdmZjliNjgyZjg0ZDc4ODdlZTliNzlkZWY4ZWJhNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NzI3MjE2LCAtNzMuOTkzOTI4ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NTZmNTNmNWI2ODI0NmUwODg5NDQ2Y2ZkNjYxY2M5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjODhkMzdkMWI2MDRlNzZhMjUzMzhlNTExOWM1ODg0ID0gJChgPGRpdiBpZD0iaHRtbF8xYzg4ZDM3ZDFiNjA0ZTc2YTI1MzM4ZTUxMTljNTg4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA1MiBTdCAmIDExIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjExLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNzY8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzU2ZjUzZjViNjgyNDZlMDg4OTQ0NmNmZDY2MWNjOWEuc2V0Q29udGVudChodG1sXzFjODhkMzdkMWI2MDRlNzZhMjUzMzhlNTExOWM1ODg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwN2ZmOWI2ODJmODRkNzg4N2VlOWI3OWRlZjhlYmE3LmJpbmRQb3B1cChwb3B1cF83NTZmNTNmNWI2ODI0NmUwODg5NDQ2Y2ZkNjYxY2M5YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWVjNjVjMDg4MDZlNDAxZmE0NWM5NDViNmRjMzRkYTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkxMTU1MiwgLTc0LjAwNjY2NjYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2ZDQxNGVmNDc4ZDQ0NGM5YTVmOWZkNDZhNTE4MTdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGU5MzNhMWIzMTFiNGYwOWFhZGQ4YjhkYjEwOThlNzAgPSAkKGA8ZGl2IGlkPSJodG1sXzRlOTMzYTFiMzExYjRmMDlhYWRkOGI4ZGIxMDk4ZTcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmFua2xpbiBTdCAmIFcgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI3MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTU5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTExMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NmQ0MTRlZjQ3OGQ0NDRjOWE1ZjlmZDQ2YTUxODE3ZC5zZXRDb250ZW50KGh0bWxfNGU5MzNhMWIzMTFiNGYwOWFhZGQ4YjhkYjEwOThlNzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWVjNjVjMDg4MDZlNDAxZmE0NWM5NDViNmRjMzRkYTMuYmluZFBvcHVwKHBvcHVwXzY2ZDQxNGVmNDc4ZDQ0NGM5YTVmOWZkNDZhNTE4MTdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lODc0NGY5NmEwOGY0NTVkOGNjMjA3MDZhMzVkNjdkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTE3NDE2LCAtNzQuMDAwMTY1NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzZjZTdiN2Y4Y2Y0NzRjOTgyNGUzZDRhMzUwZDJjYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzOWRlNDdkM2IyMTQxNmY5ODA4NTUyM2ZiNzY2MzUyID0gJChgPGRpdiBpZD0iaHRtbF9iMzlkZTQ3ZDNiMjE0MTZmOTgwODU1MjNmYjc2NjM1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QgSmFtZXMgUGwgJiBQZWFybCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjc2Y2U3YjdmOGNmNDc0Yzk4MjRlM2Q0YTM1MGQyY2Muc2V0Q29udGVudChodG1sX2IzOWRlNDdkM2IyMTQxNmY5ODA4NTUyM2ZiNzY2MzUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4NzQ0Zjk2YTA4ZjQ1NWQ4Y2MyMDcwNmEzNWQ2N2RhLmJpbmRQb3B1cChwb3B1cF8yNzZjZTdiN2Y4Y2Y0NzRjOTgyNGUzZDRhMzUwZDJjYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDE2YmI1Y2YwZGFkNDlkMWI3ZDgzM2M1MDcwZjVmZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODM4MjYwNCwgLTczLjk3NjMyMzI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlNmVhZmFmNDU1MTRjOTU5ZWI0N2Y0NDZhZDgyNzBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdlNDdhYWJlZTQ5NDM3M2FlZTFhNTNkNGU1NjJlODMgPSAkKGA8ZGl2IGlkPSJodG1sXzE3ZTQ3YWFiZWU0OTQzNzNhZWUxYTUzZDRlNTYyZTgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BdGxhbnRpYyBBdmUgJiBGb3J0IEdyZWVuZSBQbDxicj4gdG90YWwgZGVwYXJ0dXJlczogOTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlNmVhZmFmNDU1MTRjOTU5ZWI0N2Y0NDZhZDgyNzBlLnNldENvbnRlbnQoaHRtbF8xN2U0N2FhYmVlNDk0MzczYWVlMWE1M2Q0ZTU2MmU4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MTZiYjVjZjBkYWQ0OWQxYjdkODMzYzUwNzBmNWZkOS5iaW5kUG9wdXAocG9wdXBfZWU2ZWFmYWY0NTUxNGM5NTllYjQ3ZjQ0NmFkODI3MGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhNzNkNjI1OGViYzQ1ZjZiNjI1OGUxMGNiOWIyYjE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQxNzc2MDMsIC03NC4wMDE0OTc0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMTUyMjQyYWY3ZGM0Zjg3OGM4NmUzODk1M2Q1ODk1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjNDE3NTkxZGI2YTQ0NWM4MWJiODY2N2QxZDQxMzZiID0gJChgPGRpdiBpZD0iaHRtbF9lYzQxNzU5MWRiNmE0NDVjODFiYjg2NjdkMWQ0MTM2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAxNyBTdCAmIDggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzOTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDMzNzxicj4gbmV0IGRlcGFydHVyZXM6IC02MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMTUyMjQyYWY3ZGM0Zjg3OGM4NmUzODk1M2Q1ODk1NC5zZXRDb250ZW50KGh0bWxfZWM0MTc1OTFkYjZhNDQ1YzgxYmI4NjY3ZDFkNDEzNmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWE3M2Q2MjU4ZWJjNDVmNmI2MjU4ZTEwY2I5YjJiMTQuYmluZFBvcHVwKHBvcHVwX2YxNTIyNDJhZjdkYzRmODc4Yzg2ZTM4OTUzZDU4OTU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTQwYTEyMzcwMjc0Mzk2YTJjNjBlMjIyOWI1Y2RmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NjA4OTQxLCAtNzMuOTc4MDM0MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViMzAxYjA1ZjAyZTQxZTlhNDQ2ODgzMjg0NjdhYTMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWNkY2ViZjIyNWFmNGFkYzk5ZjMyNjBhZjc4MmYzMzQgPSAkKGA8ZGl2IGlkPSJodG1sX2VjZGNlYmYyMjVhZjRhZGM5OWYzMjYwYWY3ODJmMzM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXJrIEF2ZSAmIFN0IEVkd2FyZHMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM0PGJyPiBuZXQgZGVwYXJ0dXJlczogMjguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWIzMDFiMDVmMDJlNDFlOWE0NDY4ODMyODQ2N2FhMzIuc2V0Q29udGVudChodG1sX2VjZGNlYmYyMjVhZjRhZGM5OWYzMjYwYWY3ODJmMzM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1NDBhMTIzNzAyNzQzOTZhMmM2MGUyMjI5YjVjZGY1LmJpbmRQb3B1cChwb3B1cF9lYjMwMWIwNWYwMmU0MWU5YTQ0Njg4MzI4NDY3YWEzMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQ5MzI5ZjhjNDVkNDVhYTg1NjU5ZGNmODFiYzlhZDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODY3Njc5MywgLTczLjk1OTI4MTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDk1YTFjMGNjMmQ0ZWZjYjNmNmM0NDY1ZmU5MmJjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAyYjQ5ZWRkYmM4YzQyNzQ5ZDdmZWQyNWJlZmVlY2JmID0gJChgPGRpdiBpZD0iaHRtbF8wMmI0OWVkZGJjOGM0Mjc0OWQ3ZmVkMjViZWZlZWNiZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGV4aW5ndG9uIEF2ZSAmIENsYXNzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjc8YnI+IG5ldCBkZXBhcnR1cmVzOiA1Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDk1YTFjMGNjMmQ0ZWZjYjNmNmM0NDY1ZmU5MmJjYS5zZXRDb250ZW50KGh0bWxfMDJiNDllZGRiYzhjNDI3NDlkN2ZlZDI1YmVmZWVjYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGQ5MzI5ZjhjNDVkNDVhYTg1NjU5ZGNmODFiYzlhZDQuYmluZFBvcHVwKHBvcHVwXzAwOTVhMWMwY2MyZDRlZmNiM2Y2YzQ0NjVmZTkyYmNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZGM3YTk1OTFhZDg0ZGZjYTk0Yzk4Y2MxYjMwZTFkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMTcyNDI4LCAtNzQuMDA2NzQ0MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80OGQxMWM5N2QzODI0ODQ5YTU5ZDQ2NTMyYzdkOWU0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiMTMzNGJiZTU4YzRlMmM4Yzc3NzY2ZWFjZWRkYmU0ID0gJChgPGRpdiBpZD0iaHRtbF8zYjEzMzRiYmU1OGM0ZTJjOGM3Nzc2NmVhY2VkZGJlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmFycm93IFN0ICYgSHVkc29uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY2Mzxicj4gbmV0IGRlcGFydHVyZXM6IC00Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OGQxMWM5N2QzODI0ODQ5YTU5ZDQ2NTMyYzdkOWU0YS5zZXRDb250ZW50KGh0bWxfM2IxMzM0YmJlNThjNGUyYzhjNzc3NjZlYWNlZGRiZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGRjN2E5NTkxYWQ4NGRmY2E5NGM5OGNjMWIzMGUxZDguYmluZFBvcHVwKHBvcHVwXzQ4ZDExYzk3ZDM4MjQ4NDlhNTlkNDY1MzJjN2Q5ZTRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOWYyYzE1YzVkYjY0YzU3OTlkODkwOTUyNDRmOGI3ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNzEwMjU4LCAtNzQuMDAyOTcwODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTk4NWMwNGVjODM0YzA2OTFlNzk0Yjg1MTc4N2VhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhMDVmZDcwZGYxYjQ0NDFhOWZkZDliMTBlMzYwYmM5ID0gJChgPGRpdiBpZD0iaHRtbF9hYTA1ZmQ3MGRmMWI0NDQxYTlmZGQ5YjEwZTM2MGJjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFjRG91Z2FsIFN0ICYgUHJpbmNlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ1ODxicj4gbmV0IGRlcGFydHVyZXM6IDI3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlOTg1YzA0ZWM4MzRjMDY5MWU3OTRiODUxNzg3ZWExLnNldENvbnRlbnQoaHRtbF9hYTA1ZmQ3MGRmMWI0NDQxYTlmZGQ5YjEwZTM2MGJjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOWYyYzE1YzVkYjY0YzU3OTlkODkwOTUyNDRmOGI3Zi5iaW5kUG9wdXAocG9wdXBfMmU5ODVjMDRlYzgzNGMwNjkxZTc5NGI4NTE3ODdlYTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwZWFkMWY1ZTIyMzQ4ZmY4NzI5Yjc5OTIzZDJhNjA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYxNjI4LCAtNzMuOTcyOTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0YzJkYmFjZDc4NDQ1MWVhYzUwMWZhZDcwMmE2OGIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGQ5ZDhmN2NlNDM1NGQyNzlhY2Y2M2Y0Y2NjNWIyZGQgPSAkKGA8ZGl2IGlkPSJodG1sXzBkOWQ4ZjdjZTQzNTRkMjc5YWNmNjNmNGNjYzViMmRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDU2IFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTY3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0YzJkYmFjZDc4NDQ1MWVhYzUwMWZhZDcwMmE2OGIxLnNldENvbnRlbnQoaHRtbF8wZDlkOGY3Y2U0MzU0ZDI3OWFjZjYzZjRjY2M1YjJkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MGVhZDFmNWUyMjM0OGZmODcyOWI3OTkyM2QyYTYwNS5iaW5kUG9wdXAocG9wdXBfYzRjMmRiYWNkNzg0NDUxZWFjNTAxZmFkNzAyYTY4YjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5ZWNhMGFhMDcyYzQwYzdiYTJkYWJiZjhhZWY0YmExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkyMzk1MDIsIC03My45OTMzNzkwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyYmEwNmNjNTYwZDQ2MDY4MDk4NjJmNzkxMDEzYzU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTFiMWM5OWJkMTdjNGYxOWExZmIzNmJiYWQyNmUyMDMgPSAkKGA8ZGl2IGlkPSJodG1sXzUxYjFjOTliZDE3YzRmMTlhMWZiMzZiYmFkMjZlMjAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGludG9uIFN0ICYgSm9yYWxlbW9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3MTxicj4gbmV0IGRlcGFydHVyZXM6IDcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzJiYTA2Y2M1NjBkNDYwNjgwOTg2MmY3OTEwMTNjNTQuc2V0Q29udGVudChodG1sXzUxYjFjOTliZDE3YzRmMTlhMWZiMzZiYmFkMjZlMjAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY5ZWNhMGFhMDcyYzQwYzdiYTJkYWJiZjhhZWY0YmExLmJpbmRQb3B1cChwb3B1cF8zMmJhMDZjYzU2MGQ0NjA2ODA5ODYyZjc5MTAxM2M1NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzU4ZWM0NGUwMzcxNGZkM2E3Njg0Y2YzY2VkZDIzZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTgzOTg5NSwgLTczLjk4MDY4OTE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTAzNzY1ZGY2MWNlNDZlYTgzZGM1NzZjYjZhMmIxMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjkzNWVkMTBkMjc0OGM1YTdiYTlhMmQwYWJhM2VkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDI5MzVlZDEwZDI3NDhjNWE3YmE5YTJkMGFiYTNlZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5hc3NhdSBTdCAmIE5hdnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzOTxicj4gbmV0IGRlcGFydHVyZXM6IC0yNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDM3NjVkZjYxY2U0NmVhODNkYzU3NmNiNmEyYjEwOC5zZXRDb250ZW50KGh0bWxfMDI5MzVlZDEwZDI3NDhjNWE3YmE5YTJkMGFiYTNlZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzU4ZWM0NGUwMzcxNGZkM2E3Njg0Y2YzY2VkZDIzZmEuYmluZFBvcHVwKHBvcHVwX2UwMzc2NWRmNjFjZTQ2ZWE4M2RjNTc2Y2I2YTJiMTA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMGQxZDM0NmMwN2Y0YmRmODc5MGNjNzdlNTc1MmRmZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNjI1MDA4LCAtNzQuMDA5MTA1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjYTdlYWIyZDg4ODRkOGI4MjI5M2RmZWFlZDZlMjc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTg3NzIxMDRiNjE2NGI1OTlmMzA1MDM4MTM3YjUyMGUgPSAkKGA8ZGl2IGlkPSJodG1sXzE4NzcyMTA0YjYxNjRiNTk5ZjMwNTAzODEzN2I1MjBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IdWRzb24gU3QgJiBSZWFkZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTk5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNhN2VhYjJkODg4NGQ4YjgyMjkzZGZlYWVkNmUyNzQuc2V0Q29udGVudChodG1sXzE4NzcyMTA0YjYxNjRiNTk5ZjMwNTAzODEzN2I1MjBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwZDFkMzQ2YzA3ZjRiZGY4NzkwY2M3N2U1NzUyZGZlLmJpbmRQb3B1cChwb3B1cF9kY2E3ZWFiMmQ4ODg0ZDhiODIyOTNkZmVhZWQ2ZTI3NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzAxOWE5YzZhM2I0NDQ1NGJmYmVjMmYzMThjNjQzMWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTU0MjE5NywgLTc0LjAxMTIxOTc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlMjdmZmM4NmE5MDRiZTBiZWU1YWU0MGI4M2FlOGM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzNiMTM2ZmQ3M2ZmNDA2Y2E0Mzg3ZjA3MDM5MzRmMzIgPSAkKGA8ZGl2IGlkPSJodG1sXzMzYjEzNmZkNzNmZjQwNmNhNDM4N2YwNzAzOTM0ZjMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbndpY2ggU3QgJiBXYXJyZW4gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTU0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FlMjdmZmM4NmE5MDRiZTBiZWU1YWU0MGI4M2FlOGM2LnNldENvbnRlbnQoaHRtbF8zM2IxMzZmZDczZmY0MDZjYTQzODdmMDcwMzkzNGYzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MDE5YTljNmEzYjQ0NDU0YmZiZWMyZjMxOGM2NDMxZC5iaW5kUG9wdXAocG9wdXBfYWUyN2ZmYzg2YTkwNGJlMGJlZTVhZTQwYjgzYWU4YzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0MjE2NTJiMGZiOTQ3NmE4YTIyYzU0MjQ4YjZkNDkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIwODczNjAwMDAwMDA0LCAtNzMuOTgwODU3OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmMTRlZGNmNmFhODQ5ZDJhNmM0YmVmMDRkZGY2M2JiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTkwZTRjNGE3YjkwNDVjMTgxNDkxMDhhNzgyN2I1YjYgPSAkKGA8ZGl2IGlkPSJodG1sX2U5MGU0YzRhN2I5MDQ1YzE4MTQ5MTA4YTc4MjdiNWI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDIgU3QgJiBBdmVudWUgQzxicj4gdG90YWwgZGVwYXJ0dXJlczogNDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3ODxicj4gbmV0IGRlcGFydHVyZXM6IDEzNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZjE0ZWRjZjZhYTg0OWQyYTZjNGJlZjA0ZGRmNjNiYi5zZXRDb250ZW50KGh0bWxfZTkwZTRjNGE3YjkwNDVjMTgxNDkxMDhhNzgyN2I1YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzQyMTY1MmIwZmI5NDc2YThhMjJjNTQyNDhiNmQ0OTIuYmluZFBvcHVwKHBvcHVwXzNmMTRlZGNmNmFhODQ5ZDJhNmM0YmVmMDRkZGY2M2JiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YWQxNTMwZDFlZmQ0NGZkODQ3NTM1NmQyMjRlYzBjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMjEwMzc4NjY4NjAzLCAtNzMuOTk3MjQ5MDA3MjI1MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yMC42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5Y2IwOWNhYTNmMzQ0OWU4YzI0ZDljNTcxZjA1NjNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjM2ZTk5ZWI2NDhlNDkxOGI1MDdlZTIzNzM3NmM4NGQgPSAkKGA8ZGl2IGlkPSJodG1sXzYzNmU5OWViNjQ4ZTQ5MThiNTA3ZWUyMzczNzZjODRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGV2ZWxhbmQgUGwgJiBTcHJpbmcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgxMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTQxMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOWNiMDljYWEzZjM0NDllOGMyNGQ5YzU3MWYwNTYzYS5zZXRDb250ZW50KGh0bWxfNjM2ZTk5ZWI2NDhlNDkxOGI1MDdlZTIzNzM3NmM4NGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWFkMTUzMGQxZWZkNDRmZDg0NzUzNTZkMjI0ZWMwY2EuYmluZFBvcHVwKHBvcHVwXzM5Y2IwOWNhYTNmMzQ0OWU4YzI0ZDljNTcxZjA1NjNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDM3YmY3YjgwMGQ0ZTZhYjc2OWFmMDY5Y2U5YjllNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDczOTkzLCAtNzQuMDA5MTA2MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTUzYWU3ZmEwMDIzNGRkMGEyMmRmZjVlOTJmNDVhMjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYjMxMTFkNzY0ZTY0ZDIyYWE2OTJkY2I1YjlhMTk4OCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGIzMTExZDc2NGU2NGQyMmFhNjkyZGNiNWI5YTE5ODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhcnJlbiBTdCAmIENodXJjaCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTUzYWU3ZmEwMDIzNGRkMGEyMmRmZjVlOTJmNDVhMjEuc2V0Q29udGVudChodG1sX2RiMzExMWQ3NjRlNjRkMjJhYTY5MmRjYjViOWExOTg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwMzdiZjdiODAwZDRlNmFiNzY5YWYwNjljZTliOWU1LmJpbmRQb3B1cChwb3B1cF85NTNhZTdmYTAwMjM0ZGQwYTIyZGZmNWU5MmY0NWEyMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzI2ZTkxNDYxNDYxNDUwMjhjYmNmYzU4MWEwZjljMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTIwNjIzMDY5OTk5OTYsIC03My45ODE2MzI0MDQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwZGVjNDk5YzFmODRiMTBhOTdhNWY0YzgyMDQyMzJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2IyYzQ3ZTU1ZmUxNGM5NGIwY2JhMjc4MWZhZDI1Y2MgPSAkKGA8ZGl2IGlkPSJodG1sXzdiMmM0N2U1NWZlMTRjOTRiMGNiYTI3ODFmYWQyNWNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDQwIFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM3Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjk2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTgxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwZGVjNDk5YzFmODRiMTBhOTdhNWY0YzgyMDQyMzJlLnNldENvbnRlbnQoaHRtbF83YjJjNDdlNTVmZTE0Yzk0YjBjYmEyNzgxZmFkMjVjYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MjZlOTE0NjE0NjE0NTAyOGNiY2ZjNTgxYTBmOWMxYS5iaW5kUG9wdXAocG9wdXBfOTBkZWM0OTljMWY4NGIxMGE5N2E1ZjRjODIwNDIzMmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwNGI2ZjVhNDBlZjQ2MDViMWRmNTMwZWE5OTZhMzA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkwODkyNzIsIC03My45OTYxMjM0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDI2MGEzMGJmYjc1NDE0MzhhMjdhZjY3MDdjZWY3YTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NDBiYTAxZTA4N2I0YWJjYjY1N2Y3N2U0OWMwZDM3YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzQwYmEwMWUwODdiNGFiY2I2NTdmNzdlNDljMGQzN2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhlbnJ5IFN0ICYgQXRsYW50aWMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMjYwYTMwYmZiNzU0MTQzOGEyN2FmNjcwN2NlZjdhNy5zZXRDb250ZW50KGh0bWxfNzQwYmEwMWUwODdiNGFiY2I2NTdmNzdlNDljMGQzN2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDA0YjZmNWE0MGVmNDYwNWIxZGY1MzBlYTk5NmEzMDUuYmluZFBvcHVwKHBvcHVwX2QyNjBhMzBiZmI3NTQxNDM4YTI3YWY2NzA3Y2VmN2E3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZmI5NWVjNGU5MGY0N2ExODljNmZmNGVmY2VhNjUxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyOTE3MDI1LCAtNzMuOTk4MTAyMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xMy41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjFlNjY5MTRkZWRiNDYzMGJlMTk1NzU1YTMxYTUwYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Y2QyYTA2ODJmMzc0ZDkzOTBkOGU4YTE1NzIxMTFhYiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWNkMmEwNjgyZjM3NGQ5MzkwZDhlOGExNTcyMTExYWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhR3VhcmRpYSBQbCAmIFcgMyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjAwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMzA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjcwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxZTY2OTE0ZGVkYjQ2MzBiZTE5NTc1NWEzMWE1MGMxLnNldENvbnRlbnQoaHRtbF85Y2QyYTA2ODJmMzc0ZDkzOTBkOGU4YTE1NzIxMTFhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZmI5NWVjNGU5MGY0N2ExODljNmZmNGVmY2VhNjUxNS5iaW5kUG9wdXAocG9wdXBfMjFlNjY5MTRkZWRiNDYzMGJlMTk1NzU1YTMxYTUwYzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmYzFiZDY1NGNjZDRmMDc5MDA0MDkwZGFiNTY2MWJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUzMjMwOTgsIC03My45NzAzMjUxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NzhmYmZmNWE3OTQ0NjhjYTllNGEwNWRhZDU1YTM4ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1MjdiZmM5NzljYzRiOTRiYWY1MGI0ZDkwZTgxNjlhID0gJChgPGRpdiBpZD0iaHRtbF9iNTI3YmZjOTc5Y2M0Yjk0YmFmNTBiNGQ5MGU4MTY5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0NyBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI5Mjxicj4gbmV0IGRlcGFydHVyZXM6IC0zOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzhmYmZmNWE3OTQ0NjhjYTllNGEwNWRhZDU1YTM4ZS5zZXRDb250ZW50KGh0bWxfYjUyN2JmYzk3OWNjNGI5NGJhZjUwYjRkOTBlODE2OWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmZjMWJkNjU0Y2NkNGYwNzkwMDQwOTBkYWI1NjYxYmEuYmluZFBvcHVwKHBvcHVwXzQ3OGZiZmY1YTc5NDQ2OGNhOWU0YTA1ZGFkNTVhMzhlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYWM5MzViN2QzOTc0ZTljYTU4ZDZjNjRlMDY1NzRlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0ODkwMDYsIC03My45NzYwNDg4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTFhYzM1ODlmMmViNGQ2OTljNWIxZWNjYTdjNWVmYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MmQ3N2JkNzk5ZjQ0YWRjYWRlMTQxMWQ5MGY0ODM0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjJkNzdiZDc5OWY0NGFkY2FkZTE0MTFkOTBmNDgzNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMzkgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzc0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MDg8YnI+IG5ldCBkZXBhcnR1cmVzOiAzNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMWFjMzU4OWYyZWI0ZDY5OWM1YjFlY2NhN2M1ZWZiYS5zZXRDb250ZW50KGh0bWxfNjJkNzdiZDc5OWY0NGFkY2FkZTE0MTFkOTBmNDgzNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGFjOTM1YjdkMzk3NGU5Y2E1OGQ2YzY0ZTA2NTc0ZWUuYmluZFBvcHVwKHBvcHVwX2UxYWMzNTg5ZjJlYjRkNjk5YzViMWVjY2E3YzVlZmJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMDVlMjI5OGIwODM0OTNiOTk5ZTMxNzljYmM1YjgzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTcxMzAxLCAtNzMuOTk0NTY0MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDI1ZTM4NGJjZTk3NDc5MGJkMGVlMDJmZjk5ZmRjMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NjUxNTlhZGIwNTQ0OGQ4YmZmOTI5ZjkzMzAzOGM4NCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzY1MTU5YWRiMDU0NDhkOGJmZjkyOWY5MzMwMzhjODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTggU3QgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDkyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzODU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTA3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyNWUzODRiY2U5NzQ3OTBiZDBlZTAyZmY5OWZkYzAyLnNldENvbnRlbnQoaHRtbF83NjUxNTlhZGIwNTQ0OGQ4YmZmOTI5ZjkzMzAzOGM4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMDVlMjI5OGIwODM0OTNiOTk5ZTMxNzljYmM1YjgzMi5iaW5kUG9wdXAocG9wdXBfNDI1ZTM4NGJjZTk3NDc5MGJkMGVlMDJmZjk5ZmRjMDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiMTFkYmE0OTU2ZTRlMDM5ZjFjYTVkMjdkOGY3MTI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYwNjgzMjcwOTY1OTIsIC03My45ODQ1MjcyODk4Njc0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5NjNhOTM5MDQwYTQxYTBhM2Y0NjBlYWZjNTJjYjkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTMxYzBkODI2MTlhNDY0YzhkNDk3MDFlZDhhYWQ3NjAgPSAkKGA8ZGl2IGlkPSJodG1sX2EzMWMwZDgyNjE5YTQ2NGM4ZDQ5NzAxZWQ4YWFkNzYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgNDkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM0OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzc2PGJyPiBuZXQgZGVwYXJ0dXJlczogMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDk2M2E5MzkwNDBhNDFhMGEzZjQ2MGVhZmM1MmNiOTIuc2V0Q29udGVudChodG1sX2EzMWMwZDgyNjE5YTQ2NGM4ZDQ5NzAxZWQ4YWFkNzYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiMTFkYmE0OTU2ZTRlMDM5ZjFjYTVkMjdkOGY3MTI4LmJpbmRQb3B1cChwb3B1cF80OTYzYTkzOTA0MGE0MWEwYTNmNDYwZWFmYzUyY2I5MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWZlZGYwZjY2OWZmNGQ0ODgyMDA2YTJiNDAzYWQ1ZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzgxNzY1LCAtNzMuOTc3Mzg2NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMmU2NDY5NDEzMjQ0YTY3ODNkNjc2NGMzNmNjYTU2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhMGU1NzFjYTUwZjRkM2M5ZGE5YzBlMzNjYjAxZjQ4ID0gJChgPGRpdiBpZD0iaHRtbF9lYTBlNTcxY2E1MGY0ZDNjOWRhOWMwZTMzY2IwMWY0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAyNSBTdCAmIDEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQxNDxicj4gbmV0IGRlcGFydHVyZXM6IDE3OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMmU2NDY5NDEzMjQ0YTY3ODNkNjc2NGMzNmNjYTU2Ny5zZXRDb250ZW50KGh0bWxfZWEwZTU3MWNhNTBmNGQzYzlkYTljMGUzM2NiMDFmNDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWZlZGYwZjY2OWZmNGQ0ODgyMDA2YTJiNDAzYWQ1ZTcuYmluZFBvcHVwKHBvcHVwXzAyZTY0Njk0MTMyNDRhNjc4M2Q2NzY0YzM2Y2NhNTY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYmI3NGQxYmIwNWY0MDViOGQwZDEyMDk2NDQwYzc1ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwOTA1NjIzLCAtNzQuMDEwNDMzODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDkxOWJhYjBjOTAxNDQwNjlkMjUxZjRiNzc3ZjU1OGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTFmMjRjZThlOTU0ZGJjODc1ZGY2MjEwMDBkMjdlMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGExZjI0Y2U4ZTk1NGRiYzg3NWRmNjIxMDAwZDI3ZTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxpYmVydHkgU3QgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDQzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDkxOWJhYjBjOTAxNDQwNjlkMjUxZjRiNzc3ZjU1OGMuc2V0Q29udGVudChodG1sX2RhMWYyNGNlOGU5NTRkYmM4NzVkZjYyMTAwMGQyN2UxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FiYjc0ZDFiYjA1ZjQwNWI4ZDBkMTIwOTY0NDBjNzVmLmJpbmRQb3B1cChwb3B1cF9kOTE5YmFiMGM5MDE0NDA2OWQyNTFmNGI3NzdmNTU4YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjZmYTFlMWU2Njg4NDc5MGI4Zjg0MWJlODY0YjA3NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDMzNDkzNSwgLTc0LjAwNjgxNzUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmOTExOGMxNGY1NDQyMTg5NWFkZDllZTgyZjQwNTExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTkzYmYwNzgzMDI3NGQ0MGE0MjlkODJiN2NlNTZjMGEgPSAkKGA8ZGl2IGlkPSJodG1sXzk5M2JmMDc4MzAyNzRkNDBhNDI5ZDgyYjdjZTU2YzBhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDE2IFN0ICYgVGhlIEhpZ2ggTGluZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzAyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Y5MTE4YzE0ZjU0NDIxODk1YWRkOWVlODJmNDA1MTEuc2V0Q29udGVudChodG1sXzk5M2JmMDc4MzAyNzRkNDBhNDI5ZDgyYjdjZTU2YzBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY2ZmExZTFlNjY4ODQ3OTBiOGY4NDFiZTg2NGIwNzUxLmJpbmRQb3B1cChwb3B1cF83ZjkxMThjMTRmNTQ0MjE4OTVhZGQ5ZWU4MmY0MDUxMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjEzYzQwYjVlOTQ4NGFkOGJhODcxMDZiM2MwNTJlYzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDAzNzg2NywgLTczLjk5NTQ4MDU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFlNjhkYmNmMTZiNGZmZGEwOTA5NDE0NmZkOGY4OTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNDJhOThiOTA1YTc0NGY3OWYwNTJmYTUwNzBmM2ExMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzQyYTk4YjkwNWE3NDRmNzlmMDUyZmE1MDcwZjNhMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbHVtYmlhIEhlaWdodHMgJiBDcmFuYmVycnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzxicj4gbmV0IGRlcGFydHVyZXM6IDEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFlNjhkYmNmMTZiNGZmZGEwOTA5NDE0NmZkOGY4OTguc2V0Q29udGVudChodG1sX2M0MmE5OGI5MDVhNzQ0Zjc5ZjA1MmZhNTA3MGYzYTEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YxM2M0MGI1ZTk0ODRhZDhiYTg3MTA2YjNjMDUyZWM2LmJpbmRQb3B1cChwb3B1cF9mYWU2OGRiY2YxNmI0ZmZkYTA5MDk0MTQ2ZmQ4Zjg5OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2UzODIyODkzY2YxNDU5YWFlMjEzY2I5Mjc0YTQ4NzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDI3NzE1OSwgLTczLjk5MzgzNjA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOS4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyNjkyNzIxMWUxNzQ2YjdhMTUwNDZjMDJlOWRmNzczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdhYzI2ODQ4ZGRmNGVhNmFkMDEwNzBkYWE0MzIxMGIgPSAkKGA8ZGl2IGlkPSJodG1sXzE3YWMyNjg0OGRkZjRlYTZhZDAxMDcwZGFhNDMyMTBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbGQgRnVsdG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MjY5MjcyMTFlMTc0NmI3YTE1MDQ2YzAyZTlkZjc3My5zZXRDb250ZW50KGh0bWxfMTdhYzI2ODQ4ZGRmNGVhNmFkMDEwNzBkYWE0MzIxMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2UzODIyODkzY2YxNDU5YWFlMjEzY2I5Mjc0YTQ4NzQuYmluZFBvcHVwKHBvcHVwXzYyNjkyNzIxMWUxNzQ2YjdhMTUwNDZjMDJlOWRmNzczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OWI0ZTg1ZWIzYTg0N2Q0ODE2NzlkN2UwNTZlYTcwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTQ2MzY0LCAtNzQuMDA1NTI0MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGUzOGRmM2QyZmFkNDIyMzk4ZGI4OTFkYTlkYTBiYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTM3NmQyMDMyMTA0ZWQ3ODNiZjY1YmQyZTliOGNiYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzUzNzZkMjAzMjEwNGVkNzgzYmY2NWJkMmU5YjhjYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNwcnVjZSBTdCAmIE5hc3NhdSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTk3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGUzOGRmM2QyZmFkNDIyMzk4ZGI4OTFkYTlkYTBiYWUuc2V0Q29udGVudChodG1sXzM1Mzc2ZDIwMzIxMDRlZDc4M2JmNjViZDJlOWI4Y2JjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5YjRlODVlYjNhODQ3ZDQ4MTY3OWQ3ZTA1NmVhNzBiLmJpbmRQb3B1cChwb3B1cF84ZTM4ZGYzZDJmYWQ0MjIzOThkYjg5MWRhOWRhMGJhZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWRlMDdkMzllYTA5NDc5MmI0OTA5ODc5OWRhMmUyYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDE5NTEzOCwgLTc0LjAwODAzMDEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhYjY4NzllNGQzYTRiYWQ4NjFiYzMxMzg0NGVjMmZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDU1YWY4MmVlZmI3NDM5YTkyODFlZWExMmVkZmIyYzQgPSAkKGA8ZGl2IGlkPSJodG1sXzQ1NWFmODJlZWZiNzQzOWE5MjgxZWVhMTJlZGZiMmM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDE0IFN0ICYgVGhlIEhpZ2ggTGluZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjMzLjA8YnI+IHRvdGFsIGFycml2YWxzOiA4ODxicj4gbmV0IGRlcGFydHVyZXM6IC0xNDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2FiNjg3OWU0ZDNhNGJhZDg2MWJjMzEzODQ0ZWMyZmUuc2V0Q29udGVudChodG1sXzQ1NWFmODJlZWZiNzQzOWE5MjgxZWVhMTJlZGZiMmM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFkZTA3ZDM5ZWEwOTQ3OTJiNDkwOTg3OTlkYTJlMmE2LmJpbmRQb3B1cChwb3B1cF83YWI2ODc5ZTRkM2E0YmFkODYxYmMzMTM4NDRlYzJmZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWMzYTUzNDUzNWI3NGJkZTk4ZDcxMTNiODljOGNmMTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTQ2MDExMDI2LCAtNzMuOTcxODc4ODU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxMDYyN2YxYTUwNDRkZTM5MzE0YTM4NTY0MThjMWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDM0MmI5NWU5ZTA5NDI3NTlmMDYwMTdhNjM1NTIzYjQgPSAkKGA8ZGl2IGlkPSJodG1sXzAzNDJiOTVlOWUwOTQyNzU5ZjA2MDE3YTYzNTUyM2I0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDQ4IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjEwNjI3ZjFhNTA0NGRlMzkzMTRhMzg1NjQxOGMxZjEuc2V0Q29udGVudChodG1sXzAzNDJiOTVlOWUwOTQyNzU5ZjA2MDE3YTYzNTUyM2I0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VjM2E1MzQ1MzViNzRiZGU5OGQ3MTEzYjg5YzhjZjExLmJpbmRQb3B1cChwb3B1cF8yMTA2MjdmMWE1MDQ0ZGUzOTMxNGEzODU2NDE4YzFmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWQ5MTk3YjFjOTc0NDNmNzkyM2FhYTI2ZmZjNTE0NzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mjc0MzQyMywgLTczLjk5Mzc5MDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzQxNTY5Y2E5YzYxNDk5MDlhYWJkMjcwOTJjYjg4NzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NTgzYjgzMWIzMzM0YzViYTc1YzhjY2ZhM2FiMzQ0YiA9ICQoYDxkaXYgaWQ9Imh0bWxfODU4M2I4MzFiMzMzNGM1YmE3NWM4Y2NmYTNhYjM0NGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWF0IEpvbmVzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2MzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUyMTxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzQxNTY5Y2E5YzYxNDk5MDlhYWJkMjcwOTJjYjg4NzEuc2V0Q29udGVudChodG1sXzg1ODNiODMxYjMzMzRjNWJhNzVjOGNjZmEzYWIzNDRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VkOTE5N2IxYzk3NDQzZjc5MjNhYWEyNmZmYzUxNDc4LmJpbmRQb3B1cChwb3B1cF9jNDE1NjljYTljNjE0OTkwOWFhYmQyNzA5MmNiODg3MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWYzYzdkMmQyMWYyNGE1NmE1MDE1ZWUwYTVjNWZjZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTU5NzY4MywgLTczLjk5MDE0ODkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWU0Y2YyMjE4NWRlNDNkMWFlMmIwMDI3Y2I5NTYzZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OTY3NDYxMDYxMTA0MmY2YmQ3MTdjZDlhNzczMjRlMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjk2NzQ2MTA2MTEwNDJmNmJkNzE3Y2Q5YTc3MzI0ZTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhZG1hbiBQbGF6YSBFICYgVGlsbGFyeSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4Nzxicj4gbmV0IGRlcGFydHVyZXM6IC0zOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZTRjZjIyMTg1ZGU0M2QxYWUyYjAwMjdjYjk1NjNlYy5zZXRDb250ZW50KGh0bWxfNjk2NzQ2MTA2MTEwNDJmNmJkNzE3Y2Q5YTc3MzI0ZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWYzYzdkMmQyMWYyNGE1NmE1MDE1ZWUwYTVjNWZjZDYuYmluZFBvcHVwKHBvcHVwX2FlNGNmMjIxODVkZTQzZDFhZTJiMDAyN2NiOTU2M2VjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjU2ZGI0MTFmOGM0ZWYyYjk4YTdmZTBmNzQ2ODY3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyODQxODYsIC03My45ODcxMzk1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzZDRmY2VkOTAxZjQ2NTI4Y2JjMDhkY2Q5MGJlMDA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2ZiNTE1ZjE4YzFmNGUzZTg0NzcwNDc4NjVkMTJhZTcgPSAkKGA8ZGl2IGlkPSJodG1sXzNmYjUxNWYxOGMxZjRlM2U4NDc3MDQ3ODY1ZDEyYWU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdCBNYXJrcyBQbCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMwMDxicj4gbmV0IGRlcGFydHVyZXM6IDk1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzZDRmY2VkOTAxZjQ2NTI4Y2JjMDhkY2Q5MGJlMDA2LnNldENvbnRlbnQoaHRtbF8zZmI1MTVmMThjMWY0ZTNlODQ3NzA0Nzg2NWQxMmFlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZjU2ZGI0MTFmOGM0ZWYyYjk4YTdmZTBmNzQ2ODY3Yy5iaW5kUG9wdXAocG9wdXBfMDNkNGZjZWQ5MDFmNDY1MjhjYmMwOGRjZDkwYmUwMDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFkZDBiOWVmZjk4MDQxZWE4ZDQ2MGVkNjUyOTRmYmMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMwNDczMDksIC03My45ODY3MjM3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmI5MGU0MzIyZTY1NGVmODhlNDZjNWExMmYzODY2MTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Njc3Y2E0MWMyZTM0ODI0YTY5NGExMzNmYmE3OTU0ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTY3N2NhNDFjMmUzNDgyNGE2OTRhMTMzZmJhNzk1NGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTEgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTc4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjY8YnI+IG5ldCBkZXBhcnR1cmVzOiA0OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYjkwZTQzMjJlNjU0ZWY4OGU0NmM1YTEyZjM4NjYxNC5zZXRDb250ZW50KGh0bWxfOTY3N2NhNDFjMmUzNDgyNGE2OTRhMTMzZmJhNzk1NGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWRkMGI5ZWZmOTgwNDFlYThkNDYwZWQ2NTI5NGZiYzEuYmluZFBvcHVwKHBvcHVwX2ZiOTBlNDMyMmU2NTRlZjg4ZTQ2YzVhMTJmMzg2NjE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzlhNzNmZjMxYTg0M2VmYTJhNzNhNTQ5M2EwNzUwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNjE5NjcsIC03NC4wMDg1OTIwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4ZDEzMGQ0NjNjODQ0NDJhNzU5OGExOTMwMThmYWU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGI3MDkxYjYzMGJiNGJjZWIzYmVkNWRkOWYwOWZmZDggPSAkKGA8ZGl2IGlkPSJodG1sXzhiNzA5MWI2MzBiYjRiY2ViM2JlZDVkZDlmMDlmZmQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYW5rIFN0ICYgV2FzaGluZ3RvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQ3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDhkMTMwZDQ2M2M4NDQ0MmE3NTk4YTE5MzAxOGZhZTcuc2V0Q29udGVudChodG1sXzhiNzA5MWI2MzBiYjRiY2ViM2JlZDVkZDlmMDlmZmQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZjOWE3M2ZmMzFhODQzZWZhMmE3M2E1NDkzYTA3NTBiLmJpbmRQb3B1cChwb3B1cF8wOGQxMzBkNDYzYzg0NDQyYTc1OThhMTkzMDE4ZmFlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDJiZDkzMTMxNDMyNDIxZTkzNTMxOWNiYWJjMmE2NmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTE5NjU2NiwgLTczLjk4MTMwMThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZjQ4NzMyZjU2ODI0ODhmOGQ0MzkyMjkwMDYyMmM5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3NTRmZmUwNjk5OTQ1OWNhMDExZWRjNmYwNGQyOWQzID0gJChgPGRpdiBpZD0iaHRtbF8wNzU0ZmZlMDY5OTk0NTljYTAxMWVkYzZmMDRkMjlkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsbG91Z2hieSBTdCAmIEZsZWV0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwMTxicj4gbmV0IGRlcGFydHVyZXM6IC0zOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZjQ4NzMyZjU2ODI0ODhmOGQ0MzkyMjkwMDYyMmM5ZC5zZXRDb250ZW50KGh0bWxfMDc1NGZmZTA2OTk5NDU5Y2EwMTFlZGM2ZjA0ZDI5ZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDJiZDkzMTMxNDMyNDIxZTkzNTMxOWNiYWJjMmE2NmYuYmluZFBvcHVwKHBvcHVwX2NmNDg3MzJmNTY4MjQ4OGY4ZDQzOTIyOTAwNjIyYzlkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNWEyYzRhYjUyMzk0NjhiYjNkNzQ5ZmMwODM4MzFhNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4OTgxMDM1LCAtNzMuOTc0OTMxMjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NzcwNTk5MjE3NTE0ODYwOThiNTMxYzYxZmI0YjU5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk2NTViYjYwNDVhYjQ1YWRiMjczOTg2NDZkODYxYjcwID0gJChgPGRpdiBpZD0iaHRtbF85NjU1YmI2MDQ1YWI0NWFkYjI3Mzk4NjQ2ZDg2MWI3MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGVLYWxiIEF2ZSAmIFMgUG9ydGxhbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTEwPGJyPiBuZXQgZGVwYXJ0dXJlczogNjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDc3MDU5OTIxNzUxNDg2MDk4YjUzMWM2MWZiNGI1OTUuc2V0Q29udGVudChodG1sXzk2NTViYjYwNDVhYjQ1YWRiMjczOTg2NDZkODYxYjcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA1YTJjNGFiNTIzOTQ2OGJiM2Q3NDlmYzA4MzgzMWE3LmJpbmRQb3B1cChwb3B1cF80NzcwNTk5MjE3NTE0ODYwOThiNTMxYzYxZmI0YjU5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTI2OTM5YTVkNmRkNDk0YjhlOWM1Y2UzZDAzYzg0ZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTc3ODcsIC03My45NzM3MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDczY2MxZDUzMzM0ZjA2ODA5MzVlYzNmODhjMTRkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5MWExYzFmYzczNjQ2OTRiMzNjNWU5NWQxMDhkYTUxID0gJChgPGRpdiBpZD0iaHRtbF9iOTFhMWMxZmM3MzY0Njk0YjMzYzVlOTVkMTA4ZGE1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FybHRvbiBBdmUgJiBGbHVzaGluZyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQ3M2NjMWQ1MzMzNGYwNjgwOTM1ZWMzZjg4YzE0ZGQuc2V0Q29udGVudChodG1sX2I5MWExYzFmYzczNjQ2OTRiMzNjNWU5NWQxMDhkYTUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyNjkzOWE1ZDZkZDQ5NGI4ZTljNWNlM2QwM2M4NGUwLmJpbmRQb3B1cChwb3B1cF85ZDczY2MxZDUzMzM0ZjA2ODA5MzVlYzNmODhjMTRkZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTFmNjgxMjAwODZhNGViNzk3NzJmYTZjMjNkOTk4MTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODgyMjYsIC03My45NzkzODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYzQxMjljMDYyYWQ0YTQzOWI2OTgzMzFiY2NhOTVjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjZmRkZDQ2MDVmMTQ0ODQ5NGY4MDNjYjAxZmI3Njk4ID0gJChgPGRpdiBpZD0iaHRtbF9kY2ZkZGQ0NjA1ZjE0NDg0OTRmODAzY2IwMWZiNzY5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnVsdG9uIFN0ICYgUm9ja3dlbGwgUGw8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEyOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWM0MTI5YzA2MmFkNGE0MzliNjk4MzMxYmNjYTk1Yzguc2V0Q29udGVudChodG1sX2RjZmRkZDQ2MDVmMTQ0ODQ5NGY4MDNjYjAxZmI3Njk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExZjY4MTIwMDg2YTRlYjc5NzcyZmE2YzIzZDk5ODEwLmJpbmRQb3B1cChwb3B1cF9lYzQxMjljMDYyYWQ0YTQzOWI2OTgzMzFiY2NhOTVjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGRkYWJmNGQ2YjkzNDczZmFjNTk1MmU5ZGM3MjgzMDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTE5NjAzNSwgLTczLjk2NTM2ODUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjhmM2I2ZjBhODlhNDA1ZmE1MWQzZjQxZDM3MzEzZWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTJiZTNhZDNmZjM0NGY3OWFlN2Y4NmE3NWMxMjYxMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmEyYmUzYWQzZmYzNDRmNzlhZTdmODZhNzVjMTI2MTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxvdWdoYnkgQXZlICYgSGFsbCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzMzxicj4gbmV0IGRlcGFydHVyZXM6IDg5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4ZjNiNmYwYTg5YTQwNWZhNTFkM2Y0MWQzNzMxM2VkLnNldENvbnRlbnQoaHRtbF82YTJiZTNhZDNmZjM0NGY3OWFlN2Y4NmE3NWMxMjYxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZGRhYmY0ZDZiOTM0NzNmYWM1OTUyZTlkYzcyODMwOC5iaW5kUG9wdXAocG9wdXBfMjhmM2I2ZjBhODlhNDA1ZmE1MWQzZjQxZDM3MzEzZWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwNGY5Mjc1MzkzYTQ5ODY5NGMzYTBlOWM3OWQ5YjBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkzMjcwMTgsIC03My45NzcwMzg3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U2M2Q5ZjcxMzFiNzRkMzBiOGM0YmVhY2UyYjJiODMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODljOGJlN2Q3MjcyNDM4MmJmOWNkY2RjZGNhZmFhM2UgPSAkKGA8ZGl2IGlkPSJodG1sXzg5YzhiZTdkNzI3MjQzODJiZjljZGNkY2RjYWZhYTNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NeXJ0bGUgQXZlICYgU3QgRWR3YXJkcyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTg8YnI+IG5ldCBkZXBhcnR1cmVzOiA0OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjNkOWY3MTMxYjc0ZDMwYjhjNGJlYWNlMmIyYjgzMS5zZXRDb250ZW50KGh0bWxfODljOGJlN2Q3MjcyNDM4MmJmOWNkY2RjZGNhZmFhM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzA0ZjkyNzUzOTNhNDk4Njk0YzNhMGU5Yzc5ZDliMGUuYmluZFBvcHVwKHBvcHVwX2U2M2Q5ZjcxMzFiNzRkMzBiOGM0YmVhY2UyYjJiODMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTdmNTBkNDVmY2Y0YmNlOTVhMDhkMjU2YWUwZmY1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNTM1Mzk4LCAtNzQuMDA0ODMwOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOWU0MGU0YmNjNjI0N2MxYjdiZWMxMzA4YWVhNDU2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViMWU0OWJjYzI4NDQzMWViNDk3N2EzODlkNzE1MzMyID0gJChgPGRpdiBpZD0iaHRtbF81YjFlNDliY2MyODQ0MzFlYjQ5NzdhMzg5ZDcxNTMzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVycnkgU3QgJiBCbGVlY2tlciBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQ0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yOWU0MGU0YmNjNjI0N2MxYjdiZWMxMzA4YWVhNDU2MS5zZXRDb250ZW50KGh0bWxfNWIxZTQ5YmNjMjg0NDMxZWI0OTc3YTM4OWQ3MTUzMzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzE3ZjUwZDQ1ZmNmNGJjZTk1YTA4ZDI1NmFlMGZmNWMuYmluZFBvcHVwKHBvcHVwXzI5ZTQwZTRiY2M2MjQ3YzFiN2JlYzEzMDhhZWE0NTYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMWViNzc5YjkzNTE0Yjk5ODAwNGEwODMzYTM4M2EzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMTg1Mzc5LCAtNzQuMDA3NzE3NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzE5YmFhMWE3ODgyNDMzZjgwNzM1NmY4OTdmNTA2ZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMmZiOTcwMzZhNWI0Yzk3YTQxMWI4MDBkYzZjODFhMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjJmYjk3MDM2YTViNGM5N2E0MTFiODAwZGM2YzgxYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhaWdodCBTdCAmIEh1ZHNvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1MTxicj4gbmV0IGRlcGFydHVyZXM6IC03Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MTliYWExYTc4ODI0MzNmODA3MzU2Zjg5N2Y1MDZlZS5zZXRDb250ZW50KGh0bWxfZjJmYjk3MDM2YTViNGM5N2E0MTFiODAwZGM2YzgxYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDFlYjc3OWI5MzUxNGI5OTgwMDRhMDgzM2EzODNhMzIuYmluZFBvcHVwKHBvcHVwXzcxOWJhYTFhNzg4MjQzM2Y4MDczNTZmODk3ZjUwNmVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODdiZjdlNDBiYTU0NTk2OWVhNWVjYWJhYjdiZjgyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxODcwOTg3LCAtNzQuMDA5MDAwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4ZTE4NWU0OTRlNjQwMDdiYTQ3MGUyM2IwMmMzMGYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODk5NDcwM2MxMzgzNDM4NTk3MjNkMWEwMjkxZDIxOWEgPSAkKGA8ZGl2IGlkPSJodG1sXzg5OTQ3MDNjMTM4MzQzODU5NzIzZDFhMDI5MWQyMTlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYXJyaXNvbiBTdCAmIEh1ZHNvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkzPGJyPiBuZXQgZGVwYXJ0dXJlczogMTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjhlMTg1ZTQ5NGU2NDAwN2JhNDcwZTIzYjAyYzMwZjEuc2V0Q29udGVudChodG1sXzg5OTQ3MDNjMTM4MzQzODU5NzIzZDFhMDI5MWQyMTlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I4N2JmN2U0MGJhNTQ1OTY5ZWE1ZWNhYmFiN2JmODJiLmJpbmRQb3B1cChwb3B1cF9iOGUxODVlNDk0ZTY0MDA3YmE0NzBlMjNiMDJjMzBmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjUwYjVlZTdiMDMxNDlhNjkwNzE3ZWFmNWI0MjUxNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjMxNzk1OCwgLTczLjk5NDgwMDEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwNmQ2NjlhN2U2MzRjYjdhZWNlMzk5MmIwOTUwMDliID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjk2OWUwNTc1YzMwNDJkZGE0MGU5YTNlYzg3NzcxNzYgPSAkKGA8ZGl2IGlkPSJodG1sXzY5NjllMDU3NWMzMDQyZGRhNDBlOWEzZWM4Nzc3MTc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3R0IFN0ICYgUHJpbmNlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMwNDxicj4gbmV0IGRlcGFydHVyZXM6IC0xNDEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDA2ZDY2OWE3ZTYzNGNiN2FlY2UzOTkyYjA5NTAwOWIuc2V0Q29udGVudChodG1sXzY5NjllMDU3NWMzMDQyZGRhNDBlOWEzZWM4Nzc3MTc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1MGI1ZWU3YjAzMTQ5YTY5MDcxN2VhZjViNDI1MTRlLmJpbmRQb3B1cChwb3B1cF9kMDZkNjY5YTdlNjM0Y2I3YWVjZTM5OTJiMDk1MDA5YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmU4M2ZlMWEzMjY1NGQwNzhlOGY5MmQzYWE1NWRkOGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzIyNjM5OCwgLTczLjk5ODUyMjA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZTk1ZDFmZGU1YzQ0MWNlYTlkNWNkNmZjNzY2YTE1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0MTk2NDE0N2RiNzRhOTM4YzY2MTIzNGZkN2U2YmQyID0gJChgPGRpdiBpZD0iaHRtbF83NDE5NjQxNDdkYjc0YTkzOGM2NjEyMzRmZDdlNmJkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFjRG91Z2FsIFN0ICYgV2FzaGluZ3RvbiBTcTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjUzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMTE8YnI+IG5ldCBkZXBhcnR1cmVzOiA1OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZTk1ZDFmZGU1YzQ0MWNlYTlkNWNkNmZjNzY2YTE1ZS5zZXRDb250ZW50KGh0bWxfNzQxOTY0MTQ3ZGI3NGE5MzhjNjYxMjM0ZmQ3ZTZiZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmU4M2ZlMWEzMjY1NGQwNzhlOGY5MmQzYWE1NWRkOGIuYmluZFBvcHVwKHBvcHVwX2VlOTVkMWZkZTVjNDQxY2VhOWQ1Y2Q2ZmM3NjZhMTVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NTFmNmI4OWM1OWU0ZmRjYTE0NjZlY2VjMzg3OTMwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNTQzOTM0LCAtNzMuOTk0NTM5NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC05Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTA0ZTQ0YzM0OTQ3NGVmMTk5MWVlZDU3OGE1MDgyYTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTliZjI3MDA5Y2M0MTIyYjVkYmZiZWVjNmRhNzcxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTU5YmYyNzAwOWNjNDEyMmI1ZGJmYmVlYzZkYTc3MTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTMgU3QgJiA1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDQyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTk1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwNGU0NGMzNDk0NzRlZjE5OTFlZWQ1NzhhNTA4MmE4LnNldENvbnRlbnQoaHRtbF9lNTliZjI3MDA5Y2M0MTIyYjVkYmZiZWVjNmRhNzcxNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NTFmNmI4OWM1OWU0ZmRjYTE0NjZlY2VjMzg3OTMwMS5iaW5kUG9wdXAocG9wdXBfNTA0ZTQ0YzM0OTQ3NGVmMTk5MWVlZDU3OGE1MDgyYTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JhYzllZjIyYmM1MTQzM2U4OWM5MmI5ZTQwN2FmMDcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM1MzI0MjcsIC03My45OTgwMDQxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmOWY3ODBmZjZjZjRlYmNiOTFiMTU1NTlkNzIwNGRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzA2ODMzMTE0NzAxNDExZGIyMzNmMzk1Zjg4NzJkMzMgPSAkKGA8ZGl2IGlkPSJodG1sX2MwNjgzMzExNDcwMTQxMWRiMjMzZjM5NWY4ODcyZDMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDExIFN0ICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjEzPGJyPiBuZXQgZGVwYXJ0dXJlczogNTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGY5Zjc4MGZmNmNmNGViY2I5MWIxNTU1OWQ3MjA0ZGYuc2V0Q29udGVudChodG1sX2MwNjgzMzExNDcwMTQxMWRiMjMzZjM5NWY4ODcyZDMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JhYzllZjIyYmM1MTQzM2U4OWM5MmI5ZTQwN2FmMDcxLmJpbmRQb3B1cChwb3B1cF8wZjlmNzgwZmY2Y2Y0ZWJjYjkxYjE1NTU5ZDcyMDRkZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTliZDgwZGQwZjY5NDcyOGEwZTAzMzc3ZDY2NzRlZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NDY3NjgsIC03NC4wMTY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5ZGMzZDcwYjUyMzRjOGJiODI3ODRhZmI5Y2Q4ZDQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDc2ZGU0NzQwZmNjNGIxMzgyN2E4NjI5YjkzYmUzMDQgPSAkKGA8ZGl2IGlkPSJodG1sX2Q3NmRlNDc0MGZjYzRiMTM4MjdhODYyOWI5M2JlMzA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OWUNCUyBEZXBvdCAtIFNTUDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjlkYzNkNzBiNTIzNGM4YmI4Mjc4NGFmYjljZDhkNDMuc2V0Q29udGVudChodG1sX2Q3NmRlNDc0MGZjYzRiMTM4MjdhODYyOWI5M2JlMzA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU5YmQ4MGRkMGY2OTQ3MjhhMGUwMzM3N2Q2Njc0ZWQ2LmJpbmRQb3B1cChwb3B1cF82OWRjM2Q3MGI1MjM0YzhiYjgyNzg0YWZiOWNkOGQ0MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDI3YzRkMzgwYzNmNGE0Mjg2NTcyZjEyMzgzMmVjOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkzOTIyNiwgLTc0LjAwMjQ3MjE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTEuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzOTlkMGI1YTk2ODRjM2M4ODc4OTU5OTZhYTEzN2Y2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTc2ZDBmNTllNDZlNDg2M2E5NzkwZDE0MmI2NTM5MTAgPSAkKGA8ZGl2IGlkPSJodG1sXzU3NmQwZjU5ZTQ2ZTQ4NjNhOTc5MGQxNDJiNjUzOTEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MaXNwZW5hcmQgU3QgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzYwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjIyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzOTlkMGI1YTk2ODRjM2M4ODc4OTU5OTZhYTEzN2Y2LnNldENvbnRlbnQoaHRtbF81NzZkMGY1OWU0NmU0ODYzYTk3OTBkMTQyYjY1MzkxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMjdjNGQzODBjM2Y0YTQyODY1NzJmMTIzODMyZWM5ZC5iaW5kUG9wdXAocG9wdXBfZDM5OWQwYjVhOTY4NGMzYzg4Nzg5NTk5NmFhMTM3ZjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNjNDRmYzg5NjJiZDQ1YTFiNTI3NjRiYzUxZGZhZjI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg5NDA3NDcsIC03My45Njg4NTQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4YmMwMzM4N2IxZTQ3NDc4MDFhMTBlNzZlYWI3OWRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmE1NDVkMWNkNzViNGE0OWIyMWNlNGI3OGYxMDhmZjkgPSAkKGA8ZGl2IGlkPSJodG1sXzJhNTQ1ZDFjZDc1YjRhNDliMjFjZTRiNzhmMTA4ZmY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZUthbGIgQXZlICYgVmFuZGVyYmlsdCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3NDxicj4gbmV0IGRlcGFydHVyZXM6IDI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4YmMwMzM4N2IxZTQ3NDc4MDFhMTBlNzZlYWI3OWRhLnNldENvbnRlbnQoaHRtbF8yYTU0NWQxY2Q3NWI0YTQ5YjIxY2U0Yjc4ZjEwOGZmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYzQ0ZmM4OTYyYmQ0NWExYjUyNzY0YmM1MWRmYWYyNi5iaW5kUG9wdXAocG9wdXBfMDhiYzAzMzg3YjFlNDc0NzgwMWExMGU3NmVhYjc5ZGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0NjNiMzk2ZGRmNTQzMGQ4NTQ0MDU1MzlhMjVmMzYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAxMjIxMjgsIC03NC4wMTIzNDIxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OTQxZWQ2ODU1M2E0N2YzOTAzMmU4ZTAyYjNiMzFiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NiYjJhNTE0ODllZTQ4MTdiODk4N2E1Yjk0ZDJlNzk3ID0gJChgPGRpdiBpZD0iaHRtbF9jYmIyYTUxNDg5ZWU0ODE3Yjg5ODdhNWI5NGQyZTc5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGggU3QgJiBXaGl0ZWhhbGwgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTYzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5NDFlZDY4NTUzYTQ3ZjM5MDMyZThlMDJiM2IzMWJjLnNldENvbnRlbnQoaHRtbF9jYmIyYTUxNDg5ZWU0ODE3Yjg5ODdhNWI5NGQyZTc5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NDYzYjM5NmRkZjU0MzBkODU0NDA1NTM5YTI1ZjM2My5iaW5kUG9wdXAocG9wdXBfNjk0MWVkNjg1NTNhNDdmMzkwMzJlOGUwMmIzYjMxYmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwZTU2NDQxZjhiMzQ3OTM4MmE2NDA1ZDVkYWMwY2E1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAzNjUxODIsIC03NC4wMTE2Nzc5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTExLjc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTE1M2Y4YTE1ZmYxNGI0MWIwZmRhMmUxOGIwMDU2ZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjlmOTA0ZWFhMDI0NzU1YjZkNjVjZTZjOWRhN2MzNSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWY5ZjkwNGVhYTAyNDc1NWI2ZDY1Y2U2YzlkYTdjMzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2FkIFN0ICYgQnJpZGdlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIzNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTUzZjhhMTVmZjE0YjQxYjBmZGEyZTE4YjAwNTZlYy5zZXRDb250ZW50KGh0bWxfOWY5ZjkwNGVhYTAyNDc1NWI2ZDY1Y2U2YzlkYTdjMzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTBlNTY0NDFmOGIzNDc5MzgyYTY0MDVkNWRhYzBjYTUuYmluZFBvcHVwKHBvcHVwXzExNTNmOGExNWZmMTRiNDFiMGZkYTJlMThiMDA1NmVjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZTg2YjMzNjc1ZDY0ZmI4OTZlNDIxNDU5MDI4MjRmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NDc0ODgxLCAtNzMuOTgzNjI0NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZGI4NWQ0NzdjMTg0YTZkYTY0Y2MyYmE1ZmRlMGEwYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2YjliODg3NWVhYjQ4NGI4OTQ3MGQ5ZDk2ODUzYmZjID0gJChgPGRpdiBpZD0iaHRtbF8yNmI5Yjg4NzVlYWI0ODRiODk0NzBkOWQ5Njg1M2JmYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Sm9obnNvbiBTdCAmIEdvbGQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDk1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZGI4NWQ0NzdjMTg0YTZkYTY0Y2MyYmE1ZmRlMGEwYS5zZXRDb250ZW50KGh0bWxfMjZiOWI4ODc1ZWFiNDg0Yjg5NDcwZDlkOTY4NTNiZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGU4NmIzMzY3NWQ2NGZiODk2ZTQyMTQ1OTAyODI0ZmIuYmluZFBvcHVwKHBvcHVwX2NkYjg1ZDQ3N2MxODRhNmRhNjRjYzJiYTVmZGUwYTBhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hY2RiYzhjOTc4NDA0NzJlYmRjZmJlZDZmMmVmMTZhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MTc4MjMsIC03My45NzM3Mjk5MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzJlZDkzMjg3YjBlNGU3YWFkMjJiOGFjYWQ3YmQ2ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOGRiNTA4Y2M5ODQ0NTZlOTQ3NGFjZmQ3MDE2YWM5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDhkYjUwOGNjOTg0NDU2ZTk0NzRhY2ZkNzAxNmFjOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhc2hpbmd0b24gUGFyazxicj4gdG90YWwgZGVwYXJ0dXJlczogMTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU1PGJyPiBuZXQgZGVwYXJ0dXJlczogMzguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzJlZDkzMjg3YjBlNGU3YWFkMjJiOGFjYWQ3YmQ2ZDYuc2V0Q29udGVudChodG1sXzA4ZGI1MDhjYzk4NDQ1NmU5NDc0YWNmZDcwMTZhYzkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjZGJjOGM5Nzg0MDQ3MmViZGNmYmVkNmYyZWYxNmE0LmJpbmRQb3B1cChwb3B1cF8zMmVkOTMyODdiMGU0ZTdhYWQyMmI4YWNhZDdiZDZkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGYwZTk5OWE2YzllNGNkYzllODg2YzQwYWJlOTExMTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDcwNjQ1NiwgLTc0LjAwNzMxODUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzNjNDQ5ZmZhNTg3NDkwNGJmM2EyOTdkZjg3YjNjZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGVhZjY1MmQ2ODE0ODhmODQ3MjU1NTdlMDFjMjFkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjRlYWY2NTJkNjgxNDg4Zjg0NzI1NTU3ZTAxYzIxZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1haWRlbiBMbiAmIFBlYXJsIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogODQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzNjNDQ5ZmZhNTg3NDkwNGJmM2EyOTdkZjg3YjNjZGYuc2V0Q29udGVudChodG1sXzY0ZWFmNjUyZDY4MTQ4OGY4NDcyNTU1N2UwMWMyMWRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRmMGU5OTlhNmM5ZTRjZGM5ZTg4NmM0MGFiZTkxMTE4LmJpbmRQb3B1cChwb3B1cF9jM2M0NDlmZmE1ODc0OTA0YmYzYTI5N2RmODdiM2NkZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTcwMTAzNTZmYTQ3NDEwMThiYjYzN2FhNzRlNTQ0NTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjIyOTM0NiwgLTczLjk5MTQ3NTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMi4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiNmFkZDI1ODlmMDRiYzg5YzA0MTUxZDBjOGI2MjM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzc5NzZmZjQzZmZmNGIzZTk2OGQzZDI4YjgyOGNjZWEgPSAkKGA8ZGl2IGlkPSJodG1sX2M3OTc2ZmY0M2ZmZjRiM2U5NjhkM2QyOGI4MjhjY2VhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdGFudG9uIFN0ICYgQ2hyeXN0aWUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE4MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDI0PGJyPiBuZXQgZGVwYXJ0dXJlczogMjQzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiNmFkZDI1ODlmMDRiYzg5YzA0MTUxZDBjOGI2MjM0LnNldENvbnRlbnQoaHRtbF9jNzk3NmZmNDNmZmY0YjNlOTY4ZDNkMjhiODI4Y2NlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NzAxMDM1NmZhNDc0MTAxOGJiNjM3YWE3NGU1NDQ1Ni5iaW5kUG9wdXAocG9wdXBfY2I2YWRkMjU4OWYwNGJjODljMDQxNTFkMGM4YjYyMzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5MDllMzAyNmNkODQxZTk4YWZmMzdiMzg5ZmVhYjFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIzNjgzNjEsIC03My45NzU3NDgxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjOGEzZGNiODVlZTQxOTViZDU4ZGM1YTgxZDI3ZGQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDJmODVkOTg1OGUyNDNjN2E4OThmNDAxMzIyZTUwYzcgPSAkKGA8ZGl2IGlkPSJodG1sXzQyZjg1ZDk4NThlMjQzYzdhODk4ZjQwMTMyMmU1MGM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BdmVudWUgRCAmIEUgOCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcxPGJyPiBuZXQgZGVwYXJ0dXJlczogNDEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGM4YTNkY2I4NWVlNDE5NWJkNThkYzVhODFkMjdkZDcuc2V0Q29udGVudChodG1sXzQyZjg1ZDk4NThlMjQzYzdhODk4ZjQwMTMyMmU1MGM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ5MDllMzAyNmNkODQxZTk4YWZmMzdiMzg5ZmVhYjFlLmJpbmRQb3B1cChwb3B1cF80YzhhM2RjYjg1ZWU0MTk1YmQ1OGRjNWE4MWQyN2RkNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Y3Y2MyYzZiYTNjNDEwZDlkNDM5OTgzNDQ1NTE1NDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTA5NzcxMSwgLTczLjk4NzY1NDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wM2UyN2Y2MzI0NjM0MTkyYjFjMTJmY2RkMGM4NDhjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3M2JkMDcxYTBhNTQ3YjA5NGI1OTdjMmQ4NDBjOGZlID0gJChgPGRpdiBpZD0iaHRtbF80NzNiZDA3MWEwYTU0N2IwOTRiNTk3YzJkODQwYzhmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDM2IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMwMDxicj4gbmV0IGRlcGFydHVyZXM6IDQ0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzZTI3ZjYzMjQ2MzQxOTJiMWMxMmZjZGQwYzg0OGM4LnNldENvbnRlbnQoaHRtbF80NzNiZDA3MWEwYTU0N2IwOTRiNTk3YzJkODQwYzhmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZjdjYzJjNmJhM2M0MTBkOWQ0Mzk5ODM0NDU1MTU0Mi5iaW5kUG9wdXAocG9wdXBfMDNlMjdmNjMyNDYzNDE5MmIxYzEyZmNkZDBjODQ4YzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlNTg4ZjJmYmI5MzRjZjdiZmEwNzI2MGFhODkzMmUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE5MTA1MzcsIC03My45OTk3MzMzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MGY2NGRhYmZiNGE0MTA1YTZiNWQ5YTkwNTdlNjI1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiMDcxM2Y5ZDBiMDQ0YzZhZDgwMzY5Y2U1MTBjNGJhID0gJChgPGRpdiBpZD0iaHRtbF84YjA3MTNmOWQwYjA0NGM2YWQ4MDM2OWNlNTEwYzRiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG93YXJkIFN0ICYgQ2VudHJlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxMTxicj4gbmV0IGRlcGFydHVyZXM6IC05MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGY2NGRhYmZiNGE0MTA1YTZiNWQ5YTkwNTdlNjI1YS5zZXRDb250ZW50KGh0bWxfOGIwNzEzZjlkMGIwNDRjNmFkODAzNjljZTUxMGM0YmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2U1ODhmMmZiYjkzNGNmN2JmYTA3MjYwYWE4OTMyZTIuYmluZFBvcHVwKHBvcHVwXzUwZjY0ZGFiZmI0YTQxMDVhNmI1ZDlhOTA1N2U2MjVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MTRjZjQzM2JhNTY0OTJmYjdkYjI3OGQ1ZWI3ZjcwZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MzA4MjU3LCAtNzMuOTcxNzg5MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZDg3MmNkYzMwNmM0NDE4YTQ0NGIxMjE2NWFjM2NmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViYTNjNTYxMTczOTRmY2M5MTU5ZWViZGRlYjI2Mzk4ID0gJChgPGRpdiBpZD0iaHRtbF81YmEzYzU2MTE3Mzk0ZmNjOTE1OWVlYmRkZWIyNjM5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWRlbHBoaSBTdCAmIE15cnRsZSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Mzxicj4gbmV0IGRlcGFydHVyZXM6IDM3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkODcyY2RjMzA2YzQ0MThhNDQ0YjEyMTY1YWMzY2ZiLnNldENvbnRlbnQoaHRtbF81YmEzYzU2MTE3Mzk0ZmNjOTE1OWVlYmRkZWIyNjM5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MTRjZjQzM2JhNTY0OTJmYjdkYjI3OGQ1ZWI3ZjcwZS5iaW5kUG9wdXAocG9wdXBfOGQ4NzJjZGMzMDZjNDQxOGE0NDRiMTIxNjVhYzNjZmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0ZjVlNWQ0YmU2YTQ0ZTJhZjI5ZjgyNjYwZjU4ZTI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg2OTE4NjUsIC03My45NzY2ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkNDc1MzkyYjdlMjQ2Y2E4ZGYyODg5ODVmNGJkNjU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWJkMjVhZTM4MjZmNGViZDgyOWQ5ZGM3YmY5YTI3MGIgPSAkKGA8ZGl2IGlkPSJodG1sXzFiZDI1YWUzODI2ZjRlYmQ4MjlkOWRjN2JmOWEyNzBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYWZheWV0dGUgQXZlICYgRm9ydCBHcmVlbmUgUGw8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDE8YnI+IG5ldCBkZXBhcnR1cmVzOiA2MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDQ3NTM5MmI3ZTI0NmNhOGRmMjg4OTg1ZjRiZDY1NC5zZXRDb250ZW50KGh0bWxfMWJkMjVhZTM4MjZmNGViZDgyOWQ5ZGM3YmY5YTI3MGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDRmNWU1ZDRiZTZhNDRlMmFmMjlmODI2NjBmNThlMjcuYmluZFBvcHVwKHBvcHVwXzBkNDc1MzkyYjdlMjQ2Y2E4ZGYyODg5ODVmNGJkNjU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYmZhN2Y0Y2MzZTI0M2Y1OWI2NWY3ZjhmY2ExODQ0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NjUwMDY1LCAtNzMuOTY1NjMzMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0YzU5YTgyOTdhMTRkM2I4YWQyMzFjMGFhOTBkNDJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmJlZWQ0ZWU0YTQ3NDY2MTgxZDJmMzNhZmVlNTI2MDYgPSAkKGA8ZGl2IGlkPSJodG1sXzZiZWVkNGVlNGE0NzQ2NjE4MWQyZjMzYWZlZTUyNjA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXNoaW5ndG9uIEF2ZSAmIEdyZWVuZSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Mzxicj4gbmV0IGRlcGFydHVyZXM6IDM0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0YzU5YTgyOTdhMTRkM2I4YWQyMzFjMGFhOTBkNDJhLnNldENvbnRlbnQoaHRtbF82YmVlZDRlZTRhNDc0NjYxODFkMmYzM2FmZWU1MjYwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYmZhN2Y0Y2MzZTI0M2Y1OWI2NWY3ZjhmY2ExODQ0MS5iaW5kUG9wdXAocG9wdXBfYjRjNTlhODI5N2ExNGQzYjhhZDIzMWMwYWE5MGQ0MmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBhYWI1MTczNjFlZTQ1MDk5ODcwNDU2ZGZlZWUwYTg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE3NDg3NTIsIC03NC4wMTA0NTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VmMmRkNGViODdkMTRlY2M4Y2Q4MGMzYjA3YmQ3MGVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmI3ODkzZmI0NTYyNGNjYWI1MTA0MzRmMWM5NTYyZGUgPSAkKGA8ZGl2IGlkPSJodG1sXzJiNzg5M2ZiNDU2MjRjY2FiNTEwNDM0ZjFjOTU2MmRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EdWFuZSBTdCAmIEdyZWVud2ljaCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTYwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjJkZDRlYjg3ZDE0ZWNjOGNkODBjM2IwN2JkNzBlZi5zZXRDb250ZW50KGh0bWxfMmI3ODkzZmI0NTYyNGNjYWI1MTA0MzRmMWM5NTYyZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGFhYjUxNzM2MWVlNDUwOTk4NzA0NTZkZmVlZTBhODUuYmluZFBvcHVwKHBvcHVwX2VmMmRkNGViODdkMTRlY2M4Y2Q4MGMzYjA3YmQ3MGVmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMmVkMTIzOWM0NjA0ODUxYmUzZWE2MDk0MGZhYTYzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NzY2NTY0LCAtNzMuOTg0NzY0MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzJjYmZhMzExZGU0NjY1OGNjZDYxMjZkNTlhZDllYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhYWZmMTQ3MDJjZDQ1NzViNTAzNTIxNmU0MmJhMjI4ID0gJChgPGRpdiBpZD0iaHRtbF8xYWFmZjE0NzAyY2Q0NTc1YjUwMzUyMTZlNDJiYTIyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uY29yZCBTdCAmIEJyaWRnZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcyPGJyPiBuZXQgZGVwYXJ0dXJlczogMjEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzcyY2JmYTMxMWRlNDY2NThjY2Q2MTI2ZDU5YWQ5ZWEuc2V0Q29udGVudChodG1sXzFhYWZmMTQ3MDJjZDQ1NzViNTAzNTIxNmU0MmJhMjI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAyZWQxMjM5YzQ2MDQ4NTFiZTNlYTYwOTQwZmFhNjNiLmJpbmRQb3B1cChwb3B1cF9jNzJjYmZhMzExZGU0NjY1OGNjZDYxMjZkNTlhZDllYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRkMjY3OWRkMmJiNGE3NWFhOWFjMTE1MDYzNDhmZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDc4NzMsIC03NC4wMDE2Njk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5MWRlNjBlOGQ4MjQ5MjZiNmY3YzJjNzA0ZDNiMmY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGU2MTY5M2JkM2NlNGEyOGFjMTE0ODI4NmIzNThhODAgPSAkKGA8ZGl2IGlkPSJodG1sX2RlNjE2OTNiZDNjZTRhMjhhYzExNDgyODZiMzU4YTgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZWNrIFNsaXAgJiBGcm9udCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTg2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOTFkZTYwZThkODI0OTI2YjZmN2MyYzcwNGQzYjJmNC5zZXRDb250ZW50KGh0bWxfZGU2MTY5M2JkM2NlNGEyOGFjMTE0ODI4NmIzNThhODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjRkMjY3OWRkMmJiNGE3NWFhOWFjMTE1MDYzNDhmZmQuYmluZFBvcHVwKHBvcHVwXzM5MWRlNjBlOGQ4MjQ5MjZiNmY3YzJjNzA0ZDNiMmY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOTFkNzRkZGYyNTc0MGFhOTJhZTZiYjYxNTRmOTVhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMzMxOTY3LCAtNzMuOTk1MTAxMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NTA5OWFkNzBhNzM0NTZiOTI1ZmEwNzU1ZGMzN2MxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UzYTM0OWU4N2YxNTQwMzBhNTBkYTJkZGVjZGZkODgzID0gJChgPGRpdiBpZD0iaHRtbF9lM2EzNDllODdmMTU0MDMwYTUwZGEyZGRlY2RmZDg4MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMCBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOTUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE5Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0yLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1MDk5YWQ3MGE3MzQ1NmI5MjVmYTA3NTVkYzM3YzE1LnNldENvbnRlbnQoaHRtbF9lM2EzNDllODdmMTU0MDMwYTUwZGEyZGRlY2RmZDg4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOTFkNzRkZGYyNTc0MGFhOTJhZTZiYjYxNTRmOTVhMC5iaW5kUG9wdXAocG9wdXBfNzUwOTlhZDcwYTczNDU2YjkyNWZhMDc1NWRjMzdjMTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjMDkxYTRmOGU0ODQ1NzQ4MWU3NDQyZTkwYWJmNzg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY0Mzk3MTAwMDAwMDA0LCAtNzMuOTczNzE0NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGFjOTgzZTM1YTQ1NDE5ODg4MGU4YzQyOGQxMmQ1ZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83N2IyMWQ0ZTM0Nzk0ZDRiODdkYzUzNzU1MDc0MWJkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzdiMjFkNGUzNDc5NGQ0Yjg3ZGM1Mzc1NTA3NDFiZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYW5kIEFybXkgUGxhemEgJiBDZW50cmFsIFBhcmsgUzxicj4gdG90YWwgZGVwYXJ0dXJlczogMjg3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMDg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGFjOTgzZTM1YTQ1NDE5ODg4MGU4YzQyOGQxMmQ1Zjguc2V0Q29udGVudChodG1sXzc3YjIxZDRlMzQ3OTRkNGI4N2RjNTM3NTUwNzQxYmRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRjMDkxYTRmOGU0ODQ1NzQ4MWU3NDQyZTkwYWJmNzg4LmJpbmRQb3B1cChwb3B1cF9kYWM5ODNlMzVhNDU0MTk4ODgwZThjNDI4ZDEyZDVmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDc1YTQ4MTUxNmFjNGZiZDhhZThjNjczNWRhMDNiM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDc2NDQ5NDQxNzU3LCAtNzMuOTY4NDE1MjYwMzE0OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmNjQ5NTQ4Y2VlZTRhZjM5OGRkNWY5MDdkZDI5MzkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODRlMjBkZmIwYWFlNGRjNGI4MTgzOWM0NzU4ZWY5MzkgPSAkKGA8ZGl2IGlkPSJodG1sXzg0ZTIwZGZiMGFhZTRkYzRiODE4MzljNDc1OGVmOTM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LZW50IEF2ZSAmIFMgMTEgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjI8YnI+IG5ldCBkZXBhcnR1cmVzOiA3Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZjY0OTU0OGNlZWU0YWYzOThkZDVmOTA3ZGQyOTM5MC5zZXRDb250ZW50KGh0bWxfODRlMjBkZmIwYWFlNGRjNGI4MTgzOWM0NzU4ZWY5MzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDc1YTQ4MTUxNmFjNGZiZDhhZThjNjczNWRhMDNiM2QuYmluZFBvcHVwKHBvcHVwXzdmNjQ5NTQ4Y2VlZTRhZjM5OGRkNWY5MDdkZDI5MzkwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMGY3YzNjZGEzOGQ0MWNhYjJjNzVjNjgyOTRiNTQxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTAxNjkxMjEsIC03NC4wMDI2Mzc2MTAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTk3NzVlYjhlMjkzNDRjZTgxNTRmMWQ0YjI0MmI5ODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTA1YjJlNjk4ZDI0NDI0YWViMjJlNDI0YjQxNzE1MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTUwNWIyZTY5OGQyNDQyNGFlYjIyZTQyNGI0MTcxNTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVud2ljaCBBdmUgJiA4IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzMyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2MzI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTAwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5Nzc1ZWI4ZTI5MzQ0Y2U4MTU0ZjFkNGIyNDJiOTg0LnNldENvbnRlbnQoaHRtbF9hNTA1YjJlNjk4ZDI0NDI0YWViMjJlNDI0YjQxNzE1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMGY3YzNjZGEzOGQ0MWNhYjJjNzVjNjgyOTRiNTQxMy5iaW5kUG9wdXAocG9wdXBfMTk3NzVlYjhlMjkzNDRjZTgxNTRmMWQ0YjI0MmI5ODQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2YWFlOTg5N2ZjNzRiNzA5OWQ3NjQ3ZWMxOGNjZTdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM0NTQ1NjcsIC03My45OTA3NDE0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84M2ViNDgyYWU0YTc0M2E3ODQ2NjI2NzE3MGIwNWJlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjZGFkMGMzZWQ0MDQzZWVhMWU5NWNjZTNiY2EyODcxID0gJChgPGRpdiBpZD0iaHRtbF9jY2RhZDBjM2VkNDA0M2VlYTFlOTVjY2UzYmNhMjg3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBFIDE0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2MjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUwNjxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODNlYjQ4MmFlNGE3NDNhNzg0NjYyNjcxNzBiMDViZTEuc2V0Q29udGVudChodG1sX2NjZGFkMGMzZWQ0MDQzZWVhMWU5NWNjZTNiY2EyODcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2YWFlOTg5N2ZjNzRiNzA5OWQ3NjQ3ZWMxOGNjZTdmLmJpbmRQb3B1cChwb3B1cF84M2ViNDgyYWU0YTc0M2E3ODQ2NjI2NzE3MGIwNWJlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWI4YWIwYjlhNGY3NDhmMDkyZDY1MTQ0NjU0MTBmYmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODQ1NjgyOTk5OTk5OTUsIC03My45NTg4MTA4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2UyNmRmZGQwMjhhNDgwMGI0NzExMmVhYWY3MjFhZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTg0NDkxZDEwYWI0MTlkOThlNzU0NDNlNGNlZjIxYiA9ICQoYDxkaXYgaWQ9Imh0bWxfN2U4NDQ5MWQxMGFiNDE5ZDk4ZTc1NDQzZTRjZWYyMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vbnJvZSBTdCAmIENsYXNzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Nzxicj4gbmV0IGRlcGFydHVyZXM6IDYyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlMjZkZmRkMDI4YTQ4MDBiNDcxMTJlYWFmNzIxYWQxLnNldENvbnRlbnQoaHRtbF83ZTg0NDkxZDEwYWI0MTlkOThlNzU0NDNlNGNlZjIxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYjhhYjBiOWE0Zjc0OGYwOTJkNjUxNDQ2NTQxMGZiYS5iaW5kUG9wdXAocG9wdXBfY2UyNmRmZGQwMjhhNDgwMGI0NzExMmVhYWY3MjFhZDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjYWNlOWJkOWMyNjRjNjQ5OTU2NjE3ZmIyYWY0NDNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEzMTI2LCAtNzMuOTg0ODQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTM4NjIzMzA3MTRiNDg2MTk0OWE4ZTBiZDkyMWFmNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2FlZjA4YmU4Y2M0M2UwOWNiMGM5ODk5Mzc3YTczZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjNhZWYwOGJlOGNjNDNlMDljYjBjOTg5OTM3N2E3M2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hZGlzb24gU3QgJiBNb250Z29tZXJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Mzg2MjMzMDcxNGI0ODYxOTQ5YThlMGJkOTIxYWY3MC5zZXRDb250ZW50KGh0bWxfZjNhZWYwOGJlOGNjNDNlMDljYjBjOTg5OTM3N2E3M2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGNhY2U5YmQ5YzI2NGM2NDk5NTY2MTdmYjJhZjQ0M2UuYmluZFBvcHVwKHBvcHVwXzUzODYyMzMwNzE0YjQ4NjE5NDlhOGUwYmQ5MjFhZjcwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjNjZjA1MWIzZDA0MjEzYTQ5ZTE3MTVjYTQzNWIyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDA2NjY3LCAtNzMuOTkyOTM5MTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYTIyNzRiMDdiNmQ0NmI4YmZmOWIwZjMxZGE3ZmRlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlZDA3YTVlZGNiMDRhMTM5MzNkZDVkNzk1M2Q1ODU0ID0gJChgPGRpdiBpZD0iaHRtbF8wZWQwN2E1ZWRjYjA0YTEzOTMzZGQ1ZDc5NTNkNTg1NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGlrZSBTdCAmIEUgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMDg8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2EyMjc0YjA3YjZkNDZiOGJmZjliMGYzMWRhN2ZkZTkuc2V0Q29udGVudChodG1sXzBlZDA3YTVlZGNiMDRhMTM5MzNkZDVkNzk1M2Q1ODU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmM2NmMDUxYjNkMDQyMTNhNDllMTcxNWNhNDM1YjIwLmJpbmRQb3B1cChwb3B1cF8zYTIyNzRiMDdiNmQ0NmI4YmZmOWIwZjMxZGE3ZmRlOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmM5YjI0NzkyNDk2NGEzYzk2MjFmZDhlMTE3OGJmZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTQxMzA4OSwgLTczLjk5NzA0Njc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGM2Yjk2Y2Y2MjMyNGVmYTgxMmNlMmQ3OThhMGQ5MzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTJlZDQ4Zjg3M2Y0ZGE2OTg0YWYyOGNjNTM5ZTdmNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTkyZWQ0OGY4NzNmNGRhNjk4NGFmMjhjYzUzOWU3ZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpdmlzaW9uIFN0ICYgQm93ZXJ5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxODkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE0MTxicj4gbmV0IGRlcGFydHVyZXM6IC00OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYzZiOTZjZjYyMzI0ZWZhODEyY2UyZDc5OGEwZDkzOC5zZXRDb250ZW50KGh0bWxfZTkyZWQ0OGY4NzNmNGRhNjk4NGFmMjhjYzUzOWU3ZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmM5YjI0NzkyNDk2NGEzYzk2MjFmZDhlMTE3OGJmZGIuYmluZFBvcHVwKHBvcHVwX2RjNmI5NmNmNjIzMjRlZmE4MTJjZTJkNzk4YTBkOTM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZGI2Njk0NzU4Y2I0ZjVmOTEzOWI5YjhhOTljNmU1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNDIzMiwgLTczLjk4NjkyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4NWMxNTc3MWE0YzRhYTBhMTFhNTllNzUyMTA1ODMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjdlOTgxMjQ4MGY5NDg4N2IyMjgzZmRkYjFmZDc1NGMgPSAkKGA8ZGl2IGlkPSJodG1sX2I3ZTk4MTI0ODBmOTQ4ODdiMjI4M2ZkZGIxZmQ3NTRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDE1IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMwNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDA4PGJyPiBuZXQgZGVwYXJ0dXJlczogMTAxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4NWMxNTc3MWE0YzRhYTBhMTFhNTllNzUyMTA1ODMwLnNldENvbnRlbnQoaHRtbF9iN2U5ODEyNDgwZjk0ODg3YjIyODNmZGRiMWZkNzU0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZGI2Njk0NzU4Y2I0ZjVmOTEzOWI5YjhhOTljNmU1My5iaW5kUG9wdXAocG9wdXBfYTg1YzE1NzcxYTRjNGFhMGExMWE1OWU3NTIxMDU4MzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0Mzg5Nzg3ZDQzMzRjYWM4YjQzNzk5YThhMTA4ZTM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg2ODMyMDgsIC03My45Nzk2NzcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNWEzOTNkNTJlMmU0ODdiOTFjOTQ0MTBjNWFmOGY0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4YWNhNTg3MDViMTQ3ODJhYTRhYmRkNDUzOTk4ODYwID0gJChgPGRpdiBpZD0iaHRtbF8wOGFjYTU4NzA1YjE0NzgyYWE0YWJkZDQ1Mzk5ODg2MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MyBBdmUgJiBTY2hlcm1lcmhvcm4gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Nzxicj4gbmV0IGRlcGFydHVyZXM6IDEyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1YTM5M2Q1MmUyZTQ4N2I5MWM5NDQxMGM1YWY4ZjQxLnNldENvbnRlbnQoaHRtbF8wOGFjYTU4NzA1YjE0NzgyYWE0YWJkZDQ1Mzk5ODg2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNDM4OTc4N2Q0MzM0Y2FjOGI0Mzc5OWE4YTEwOGUzOC5iaW5kUG9wdXAocG9wdXBfZjVhMzkzZDUyZTJlNDg3YjkxYzk0NDEwYzVhZjhmNDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwZGIzNjIxMDM2NTQ2ZmFiZGNiMjViOWE1NWRlZmY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIyMTc0NDQsIC03My45ODM2ODc3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiMWYzOWJkNTRhZTRiYTRhZDI2ZTdkNWQ2MGVlOWRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBiMjhlOGIzNmZlNGUzYWIzNGU0ODQwMzY0ZmM0NzEgPSAkKGA8ZGl2IGlkPSJodG1sX2MwYjI4ZThiMzZmZTRlM2FiMzRlNDg0MDM2NGZjNDcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDIgU3QgJiBBdmVudWUgQjxicj4gdG90YWwgZGVwYXJ0dXJlczogMTEwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNjc8YnI+IG5ldCBkZXBhcnR1cmVzOiA1Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YjFmMzliZDU0YWU0YmE0YWQyNmU3ZDVkNjBlZTlkYS5zZXRDb250ZW50KGh0bWxfYzBiMjhlOGIzNmZlNGUzYWIzNGU0ODQwMzY0ZmM0NzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODBkYjM2MjEwMzY1NDZmYWJkY2IyNWI5YTU1ZGVmZjYuYmluZFBvcHVwKHBvcHVwXzhiMWYzOWJkNTRhZTRiYTRhZDI2ZTdkNWQ2MGVlOWRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMThhNjhjNmEwNGQ0NGY2YTRlMWY1NWU2ODlkMmExMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMDgyODM0LCAtNzMuOTc3OTMxNzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzM3YzMyYzc3OGM0ZmMwYTczM2IyZjBjOGJiZjIwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyNzcwOTAzMGFkZTQ1Nzg4ZTQxZTkwOTYxM2VmNDIxID0gJChgPGRpdiBpZD0iaHRtbF9mMjc3MDkwMzBhZGU0NTc4OGU0MWU5MDk2MTNlZjQyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXZlbnVlIEQgJiBFIDMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Mzxicj4gbmV0IGRlcGFydHVyZXM6IDQ3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjMzdjMzJjNzc4YzRmYzBhNzMzYjJmMGM4YmJmMjBlLnNldENvbnRlbnQoaHRtbF9mMjc3MDkwMzBhZGU0NTc4OGU0MWU5MDk2MTNlZjQyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMThhNjhjNmEwNGQ0NGY2YTRlMWY1NWU2ODlkMmExMy5iaW5kUG9wdXAocG9wdXBfMWMzN2MzMmM3NzhjNGZjMGE3MzNiMmYwYzhiYmYyMGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FhNDc5NjM0NDc4MDRkOTc5MmE5YWFhOTU1NDhmNDAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIzNjI3MzgsIC03My45OTk0OTYwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3Y2FkNTg0OTA1ZTQzNzM4OTJlMTRiOTlmNTg0NDBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTA1MzVmZDlkYzlkNDMxNjgyMTY5ZWY0MjllMDQxYTUgPSAkKGA8ZGl2IGlkPSJodG1sX2EwNTM1ZmQ5ZGM5ZDQzMTY4MjE2OWVmNDI5ZTA0MWE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZXJjZXIgU3QgJiBTcHJpbmcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI0OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTU2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3Y2FkNTg0OTA1ZTQzNzM4OTJlMTRiOTlmNTg0NDBiLnNldENvbnRlbnQoaHRtbF9hMDUzNWZkOWRjOWQ0MzE2ODIxNjllZjQyOWUwNDFhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYTQ3OTYzNDQ3ODA0ZDk3OTJhOWFhYTk1NTQ4ZjQwMC5iaW5kUG9wdXAocG9wdXBfOTdjYWQ1ODQ5MDVlNDM3Mzg5MmUxNGI5OWY1ODQ0MGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlYzdlN2Y0MTkxYjRkNzNiMzUwMWFiYjczN2FlOWFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA0NjMzMzQsIC03NC4wMTM2MTcwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTI4LjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGI2NmY2OGQ4ZWJiNGVlNjkzYWQ1YTQ3ZWQzMjkyZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YWJmM2MxYmM5MzA0YzZjYTM3YzVkM2YzZmVmMGFmMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWFiZjNjMWJjOTMwNGM2Y2EzN2M1ZDNmM2ZlZjBhZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2Fkd2F5ICYgQmF0dGVyeSBQbDxicj4gdG90YWwgZGVwYXJ0dXJlczogNzU5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxOTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTYzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiNjZmNjhkOGViYjRlZTY5M2FkNWE0N2VkMzI5MmY1LnNldENvbnRlbnQoaHRtbF81YWJmM2MxYmM5MzA0YzZjYTM3YzVkM2YzZmVmMGFmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZWM3ZTdmNDE5MWI0ZDczYjM1MDFhYmI3MzdhZTlhYi5iaW5kUG9wdXAocG9wdXBfZGI2NmY2OGQ4ZWJiNGVlNjkzYWQ1YTQ3ZWQzMjkyZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxYzlmYjJjMTc0YzQwYWNiZWE5ZWZiYWFjYmI4MzFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYwOTU3NTYsIC03My45NjcyNDQ2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE0ZjIwOTFhODAwNDBhYWJkMmNkODYyYjFkZmE4ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzM2NzQ2ZDgyODQ0MDFlYTU5ZTdhMjkyYjRlN2RkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWMzNjc0NmQ4Mjg0NDAxZWE1OWU3YTI5MmI0ZTdkZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTggU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjYzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxNGYyMDkxYTgwMDQwYWFiZDJjZDg2MmIxZGZhOGZjLnNldENvbnRlbnQoaHRtbF9hYzM2NzQ2ZDgyODQ0MDFlYTU5ZTdhMjkyYjRlN2RkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMWM5ZmIyYzE3NGM0MGFjYmVhOWVmYmFhY2JiODMxYi5iaW5kUG9wdXAocG9wdXBfMjE0ZjIwOTFhODAwNDBhYWJkMmNkODYyYjFkZmE4ZmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmMGM5MDAwNGYzZTQyYmY5YTBjMWVlOGEwNTZiMGY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA4MjM1MDIsIC03NC4wMDUzMDA2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjYTM5YmE5NWRhMjQzOGRhY2M5MjhkOTQzOTM0MDZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGQ5MWQ1OTI4ZGQ4NGM1OWJhOWIxMjJkZTc0ODVkZDMgPSAkKGA8ZGl2IGlkPSJodG1sXzhkOTFkNTkyOGRkODRjNTliYTliMTIyZGU3NDg1ZGQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGlmZiBTdCAmIEZ1bHRvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTgwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWNhMzliYTk1ZGEyNDM4ZGFjYzkyOGQ5NDM5MzQwNmMuc2V0Q29udGVudChodG1sXzhkOTFkNTkyOGRkODRjNTliYTliMTIyZGU3NDg1ZGQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhmMGM5MDAwNGYzZTQyYmY5YTBjMWVlOGEwNTZiMGY4LmJpbmRQb3B1cChwb3B1cF9lY2EzOWJhOTVkYTI0MzhkYWNjOTI4ZDk0MzkzNDA2YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjZkZTU1YjAwZjI3NGI2N2JkNDhiNzM4MTExMjRhNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTQyNzQ4NywgLTczLjk4OTkwMDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYzdmMjUwZDE4N2E0Nzg0OTAxYTM3YTg5NzllZjlkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0OWQwYTAzNDhjNDQ5YzM4MGI3MjRiYWNmZTUyZTEzID0gJChgPGRpdiBpZD0iaHRtbF9iNDlkMGEwMzQ4YzQ0OWMzODBiNzI0YmFjZmU1MmUxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FuYWwgU3QgJiBSdXRnZXJzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxODguMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0Njxicj4gbmV0IGRlcGFydHVyZXM6IDU4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FjN2YyNTBkMTg3YTQ3ODQ5MDFhMzdhODk3OWVmOWQ0LnNldENvbnRlbnQoaHRtbF9iNDlkMGEwMzQ4YzQ0OWMzODBiNzI0YmFjZmU1MmUxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NmRlNTViMDBmMjc0YjY3YmQ0OGI3MzgxMTEyNGE3My5iaW5kUG9wdXAocG9wdXBfYWM3ZjI1MGQxODdhNDc4NDkwMWEzN2E4OTc5ZWY5ZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxMWZkMGE0ODcxNzQzZDFhMDI0M2ZjYWE4ZDkzYzU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEzMDc5MTYsIC03My45OTg1MTE5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzg5MTVmNDBkMjUzNDM2YTgxOGNiZjVmNjAxYjljMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zY2VkMmQ2NjdmNzA0MDVmYWY0NGFhZGM0ZjhlOTJmMyA9ICQoYDxkaXYgaWQ9Imh0bWxfM2NlZDJkNjY3ZjcwNDA1ZmFmNDRhYWRjNGY4ZTkyZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0IEphbWVzIFBsICYgT2xpdmVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3MTxicj4gbmV0IGRlcGFydHVyZXM6IDM0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4OTE1ZjQwZDI1MzQzNmE4MThjYmY1ZjYwMWI5YzMwLnNldENvbnRlbnQoaHRtbF8zY2VkMmQ2NjdmNzA0MDVmYWY0NGFhZGM0ZjhlOTJmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTFmZDBhNDg3MTc0M2QxYTAyNDNmY2FhOGQ5M2M1NC5iaW5kUG9wdXAocG9wdXBfYzg5MTVmNDBkMjUzNDM2YTgxOGNiZjVmNjAxYjljMzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZjMjI2ZTQ0MzE4ZjQ0MDk5YWI0ZGFhMmU1MmJmNjE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE0OTc4NywgLTc0LjAxMzAxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ1YzUzOTE4OTBlZTRmNDViNjJlZGNlYmIzMzdlMWNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDFjODhmZmQ3YTVkNGEwZjkwMTZhYmNiOGZhNzNhZDkgPSAkKGA8ZGl2IGlkPSJodG1sXzQxYzg4ZmZkN2E1ZDRhMGY5MDE2YWJjYjhmYTczYWQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NdXJyYXkgU3QgJiBXZXN0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1YzUzOTE4OTBlZTRmNDViNjJlZGNlYmIzMzdlMWNlLnNldENvbnRlbnQoaHRtbF80MWM4OGZmZDdhNWQ0YTBmOTAxNmFiY2I4ZmE3M2FkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YzIyNmU0NDMxOGY0NDA5OWFiNGRhYTJlNTJiZjYxNS5iaW5kUG9wdXAocG9wdXBfNDVjNTM5MTg5MGVlNGY0NWI2MmVkY2ViYjMzN2UxY2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczNDZjZjYxZTJhMTQyNWZhOGY3ZjE0NWM4MDc3OTU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg5MjY5NDIsIC03My45ODkxMjg2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2NmMGI2NjAwZWY0MTI0OGRjZDg1MzE4OTJjZTg1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4NGE4YTMxMDU2ZTQ4YjdhMDg4NzhlZWM0Njc3ZWU0ID0gJChgPGRpdiBpZD0iaHRtbF9jODRhOGEzMTA1NmU0OGI3YTA4ODc4ZWVjNDY3N2VlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhdGUgU3QgJiBTbWl0aCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4MTxicj4gbmV0IGRlcGFydHVyZXM6IC00Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iN2NmMGI2NjAwZWY0MTI0OGRjZDg1MzE4OTJjZTg1ZS5zZXRDb250ZW50KGh0bWxfYzg0YThhMzEwNTZlNDhiN2EwODg3OGVlYzQ2NzdlZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzM0NmNmNjFlMmExNDI1ZmE4ZjdmMTQ1YzgwNzc5NTcuYmluZFBvcHVwKHBvcHVwX2I3Y2YwYjY2MDBlZjQxMjQ4ZGNkODUzMTg5MmNlODVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTI2NjRlODNiNmE0YWY0OWNhMzg0NzBlZWI2NDNkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNzIyNzQsIC03My45ODgwMjA4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjJkZGY3NGIzZmM0NDNjMGFhMzdhNmJhNDJlZTRmZWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNzRmZDQwZTQ0ZDI0YzFhOGRjODE0MWY1NTc1Y2U2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjc0ZmQ0MGU0NGQyNGMxYThkYzgxNDFmNTU3NWNlNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcmZvbGsgU3QgJiBCcm9vbWUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjYyPGJyPiBuZXQgZGVwYXJ0dXJlczogMTU0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyZGRmNzRiM2ZjNDQzYzBhYTM3YTZiYTQyZWU0ZmVkLnNldENvbnRlbnQoaHRtbF9iNzRmZDQwZTQ0ZDI0YzFhOGRjODE0MWY1NTc1Y2U2YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNTI2NjRlODNiNmE0YWY0OWNhMzg0NzBlZWI2NDNkMC5iaW5kUG9wdXAocG9wdXBfZjJkZGY3NGIzZmM0NDNjMGFhMzdhNmJhNDJlZTRmZWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwZmI1ZmE0M2M0YzRmYzhiZDU5ZmVlYWJhYWMyNzBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIyMDU1LCAtNzMuOTg5MTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjU4ODFmMDhmYjA0NDhmNjkwOTI2YTBhNGQzMWZhYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNzY2NzNiZjYzYmE0OGY4YmVhNDg2MWUwNmFhMDBkYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTc2NjczYmY2M2JhNDhmOGJlYTQ4NjFlMDZhYTAwZGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFsbGVuIFN0ICYgU3RhbnRvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAxOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTg4MWYwOGZiMDQ0OGY2OTA5MjZhMGE0ZDMxZmFiMC5zZXRDb250ZW50KGh0bWxfMTc2NjczYmY2M2JhNDhmOGJlYTQ4NjFlMDZhYTAwZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjBmYjVmYTQzYzRjNGZjOGJkNTlmZWVhYmFhYzI3MGIuYmluZFBvcHVwKHBvcHVwX2I1ODgxZjA4ZmIwNDQ4ZjY5MDkyNmEwYTRkMzFmYWIwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xY2E2MTliMWI4NDA0NzFjYjVlMzVjMmY2MzkzNTcxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NjEwMjI2LCAtNzMuOTY3NTEwMzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4YWM1MWIzMWM4NzQ1NDdiNDVmYjgxYTMxMTkwMmI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjliZDRmZmU0Mzk5NDRhODgwMzMyYTM1MzhhZjE4ZGQgPSAkKGA8ZGl2IGlkPSJodG1sX2I5YmQ0ZmZlNDM5OTQ0YTg4MDMzMmEzNTM4YWYxOGRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXNoaW5ndG9uIEF2ZSAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzOTxicj4gbmV0IGRlcGFydHVyZXM6IDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjhhYzUxYjMxYzg3NDU0N2I0NWZiODFhMzExOTAyYjguc2V0Q29udGVudChodG1sX2I5YmQ0ZmZlNDM5OTQ0YTg4MDMzMmEzNTM4YWYxOGRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjYTYxOWIxYjg0MDQ3MWNiNWUzNWMyZjYzOTM1NzE1LmJpbmRQb3B1cChwb3B1cF8yOGFjNTFiMzFjODc0NTQ3YjQ1ZmI4MWEzMTE5MDJiOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWJhMGFkMDllMTdkNDgzNzg2MDA5YjkwYzExMDU2NTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDM1NTM3NywgLTc0LjAwNjcwMjI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTg4MDNkZTMyYTRmNGM1YWI0OTBmNWRhNzQ2ODBiMTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MWE4Y2EwNzNiNjA0ZDI4YjJlZjU5MmE3NzY1NDhkMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTFhOGNhMDczYjYwNGQyOGIyZWY1OTJhNzc2NTQ4ZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoIFN0ICYgR291dmVybmV1ciBMbjxicj4gdG90YWwgZGVwYXJ0dXJlczogMjYzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg4MDNkZTMyYTRmNGM1YWI0OTBmNWRhNzQ2ODBiMTcuc2V0Q29udGVudChodG1sXzUxYThjYTA3M2I2MDRkMjhiMmVmNTkyYTc3NjU0OGQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliYTBhZDA5ZTE3ZDQ4Mzc4NjAwOWI5MGMxMTA1NjU2LmJpbmRQb3B1cChwb3B1cF85ODgwM2RlMzJhNGY0YzVhYjQ5MGY1ZGE3NDY4MGIxNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWIxYzcyYjAyNTIzNDRlNmEyMzdlYTAwOTNhZWQ2NjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDk1NTk1OCwgLTc0LjAwNjUzNjA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyZTczYmVjMzYzZjRmOWY4OWE5Njc2ZDRlZmZhNmY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjNhN2FlNDczM2U3NDZlNTkyMTQwMmNiOTE4ZGRkNjcgPSAkKGA8ZGl2IGlkPSJodG1sXzIzYTdhZTQ3MzNlNzQ2ZTU5MjE0MDJjYjkxOGRkZDY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GdWx0b24gU3QgJiBXaWxsaWFtIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyODIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2OTxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDJlNzNiZWMzNjNmNGY5Zjg5YTk2NzZkNGVmZmE2ZjQuc2V0Q29udGVudChodG1sXzIzYTdhZTQ3MzNlNzQ2ZTU5MjE0MDJjYjkxOGRkZDY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzViMWM3MmIwMjUyMzQ0ZTZhMjM3ZWEwMDkzYWVkNjY4LmJpbmRQb3B1cChwb3B1cF8wMmU3M2JlYzM2M2Y0ZjlmODlhOTY3NmQ0ZWZmYTZmNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzRhOGM2MTU1Mjk0NDRiMmIzMGI0ZjMzMWU1Yzc0ODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjQ1MzczNCwgLTczLjk4MTg1NDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTE1NzNmMmVkYzhmNDAxMjk2NWRkMjg3OWEwNzM4NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MDQ3MGI5NDhkYTQ0ZmQxOTVmMGU0MTQ4YTRjNjljYiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTA0NzBiOTQ4ZGE0NGZkMTk1ZjBlNDE0OGE0YzY5Y2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNiBTdCAmIEF2ZW51ZSBCPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg4PGJyPiBuZXQgZGVwYXJ0dXJlczogMTA5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExNTczZjJlZGM4ZjQwMTI5NjVkZDI4NzlhMDczODYzLnNldENvbnRlbnQoaHRtbF85MDQ3MGI5NDhkYTQ0ZmQxOTVmMGU0MTQ4YTRjNjljYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNGE4YzYxNTUyOTQ0NGIyYjMwYjRmMzMxZTVjNzQ4Ni5iaW5kUG9wdXAocG9wdXBfYTE1NzNmMmVkYzhmNDAxMjk2NWRkMjg3OWEwNzM4NjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjNTE5MWE1ZjUxODRlODFhNTk5MTBlMjgyODU1YTNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzExMDY1OTk5OTk5OTk1LCAtNzQuMDA5NDQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwYzAzZDZkOTY3NDRmZWQ4M2VmZWQ0YmEyODBhODIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWYzODIzOGE3ZTM5NDA2N2IwMjlmYTk2MjhkNTBkNTggPSAkKGA8ZGl2IGlkPSJodG1sXzVmMzgyMzhhN2UzOTQwNjdiMDI5ZmE5NjI4ZDUwZDU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GdWx0b24gU3QgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjYxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTE1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwYzAzZDZkOTY3NDRmZWQ4M2VmZWQ0YmEyODBhODIzLnNldENvbnRlbnQoaHRtbF81ZjM4MjM4YTdlMzk0MDY3YjAyOWZhOTYyOGQ1MGQ1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYzUxOTFhNWY1MTg0ZTgxYTU5OTEwZTI4Mjg1NWEzYS5iaW5kUG9wdXAocG9wdXBfNjBjMDNkNmQ5Njc0NGZlZDgzZWZlZDRiYTI4MGE4MjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkyZTAxOWNiNzlkYzRkYWJiY2YzNGFjODY3ZjEyOWEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE3NTcxLCAtNzQuMDA1NTQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGEwMDFlNDliMTY4NGJmNzk1ODA3ZGRmMjllMWUzMWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNWRjNjRiZTc3OTQ0ZDIyOTI1YTE3YmU2YjgzYTQzYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTVkYzY0YmU3Nzk0NGQyMjkyNWExN2JlNmI4M2E0M2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxlb25hcmQgU3QgJiBDaHVyY2ggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI1NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTkxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTY0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhMDAxZTQ5YjE2ODRiZjc5NTgwN2RkZjI5ZTFlMzFmLnNldENvbnRlbnQoaHRtbF8xNWRjNjRiZTc3OTQ0ZDIyOTI1YTE3YmU2YjgzYTQzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MmUwMTljYjc5ZGM0ZGFiYmNmMzRhYzg2N2YxMjlhMy5iaW5kUG9wdXAocG9wdXBfNGEwMDFlNDliMTY4NGJmNzk1ODA3ZGRmMjllMWUzMWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllZTk0MjdkNWI0NTQzOGFiM2RmMTc0NGM1YTBiZTRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk5OTE3NTUsIC03My45ODk3MTc3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTYuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhNmMyMjUyOTMyMjRlYzk5MDk4Yjc1MmYzOTJiYzljID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzg0Y2JhZWNkMmVhNDM4MmIyYmFkZGZkNGNkY2IxYTggPSAkKGA8ZGl2IGlkPSJodG1sXzM4NGNiYWVjZDJlYTQzODJiMmJhZGRmZDRjZGNiMWE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYWRtYW4gUGxhemEgRSAmIFJlZCBDcm9zcyBQbDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTg0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1ODxicj4gbmV0IGRlcGFydHVyZXM6IC0xMjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2E2YzIyNTI5MzIyNGVjOTkwOThiNzUyZjM5MmJjOWMuc2V0Q29udGVudChodG1sXzM4NGNiYWVjZDJlYTQzODJiMmJhZGRmZDRjZGNiMWE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzllZTk0MjdkNWI0NTQzOGFiM2RmMTc0NGM1YTBiZTRhLmJpbmRQb3B1cChwb3B1cF9jYTZjMjI1MjkzMjI0ZWM5OTA5OGI3NTJmMzkyYmM5YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDE3NTQzY2UwNjMyNDQ0NThhZmMxOWM5ZWZlYTEzMzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTYxOTE5OTk5OTk5OTYsIC03My45OTEyMThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yY2EzODc2MjJiNzM0MmJlYWM2NmY3MGZmMTk2ZjQzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk2YmVmNDM2ZTFhZjQ1YzRhYTY1MGExNjcyOTA3MzQ4ID0gJChgPGRpdiBpZD0iaHRtbF85NmJlZjQzNmUxYWY0NWM0YWE2NTBhMTY3MjkwNzM0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xpbnRvbiBTdCAmIFRpbGxhcnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogODY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmNhMzg3NjIyYjczNDJiZWFjNjZmNzBmZjE5NmY0M2Uuc2V0Q29udGVudChodG1sXzk2YmVmNDM2ZTFhZjQ1YzRhYTY1MGExNjcyOTA3MzQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQxNzU0M2NlMDYzMjQ0NDU4YWZjMTljOWVmZWExMzM1LmJpbmRQb3B1cChwb3B1cF8yY2EzODc2MjJiNzM0MmJlYWM2NmY3MGZmMTk2ZjQzZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmRkZmViYmM4OGViNGYwYzgwNGMwNWIxNjYwNWJlM2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTIzNjE3OCwgLTczLjk4NjMxNzQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjQwN2UyY2MxZTUxNDFiMGEzOTNjODE1MjFlODAyOGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODVhYThkNzg5ZWY0NWE0YTdmMWFlNjAwNTEwNzI0NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjg1YWE4ZDc4OWVmNDVhNGE3ZjFhZTYwMDUxMDcyNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhd3JlbmNlIFN0ICYgV2lsbG91Z2hieSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjM2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4ODxicj4gbmV0IGRlcGFydHVyZXM6IC0xNDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjQwN2UyY2MxZTUxNDFiMGEzOTNjODE1MjFlODAyOGUuc2V0Q29udGVudChodG1sX2Y4NWFhOGQ3ODllZjQ1YTRhN2YxYWU2MDA1MTA3MjQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JkZGZlYmJjODhlYjRmMGM4MDRjMDViMTY2MDViZTNjLmJpbmRQb3B1cChwb3B1cF9iNDA3ZTJjYzFlNTE0MWIwYTM5M2M4MTUyMWU4MDI4ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmE4YjkyNjU5ZmU0NDViMTlkNjJmYTM2YmFkYzgxM2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODk4ODgsIC03My45ODEwMTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMjYzZGY3YWJkMWU0MDhlOWU5MTgyM2JkMmZlODc5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4MDZjMzE0NzYwMTQzMjQ5NjFmNGEwYjZhNGViNzNlID0gJChgPGRpdiBpZD0iaHRtbF82ODA2YzMxNDc2MDE0MzI0OTYxZjRhMGI2YTRlYjczZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGVLYWxiIEF2ZSAmIEh1ZHNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTI2M2RmN2FiZDFlNDA4ZTllOTE4MjNiZDJmZTg3OWQuc2V0Q29udGVudChodG1sXzY4MDZjMzE0NzYwMTQzMjQ5NjFmNGEwYjZhNGViNzNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZhOGI5MjY1OWZlNDQ1YjE5ZDYyZmEzNmJhZGM4MTNmLmJpbmRQb3B1cChwb3B1cF9hMjYzZGY3YWJkMWU0MDhlOWU5MTgyM2JkMmZlODc5ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI2OWYzZjhjYTc2NGM2MGIyMGZhY2I0OGNhNDc3YTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzYyNDUyNywgLTczLjk4NDczNzY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZDc0ZTFhMzZjNjM0YTY2YjE1N2ZlZmRlOTIzODE0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E2MmYzMjllZDc4YTRkMTZhMzQwOTEyNzg2NDhjNjY1ID0gJChgPGRpdiBpZD0iaHRtbF9hNjJmMzI5ZWQ3OGE0ZDE2YTM0MDkxMjc4NjQ4YzY2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxOSBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI1NTxicj4gbmV0IGRlcGFydHVyZXM6IDM2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkNzRlMWEzNmM2MzRhNjZiMTU3ZmVmZGU5MjM4MTQ3LnNldENvbnRlbnQoaHRtbF9hNjJmMzI5ZWQ3OGE0ZDE2YTM0MDkxMjc4NjQ4YzY2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MjY5ZjNmOGNhNzY0YzYwYjIwZmFjYjQ4Y2E0NzdhMi5iaW5kUG9wdXAocG9wdXBfM2Q3NGUxYTM2YzYzNGE2NmIxNTdmZWZkZTkyMzgxNDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5OWJkNjIxMGE0YjRjYzFiNzhjMDgwODdhM2M0NGQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI5NTM4MzcsIC03My45ODQyNjcyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjY2VhNTgxY2NkYjRkNmVhZDcwYTJjNWRmZGQ4MmJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjg5OWRjY2YwZWU1NDk3Zjk2MGYzZGMzNTZiMjJmMDggPSAkKGA8ZGl2IGlkPSJodG1sX2I4OTlkY2NmMGVlNTQ5N2Y5NjBmM2RjMzU2YjIyZjA4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDExIFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTgyPGJyPiBuZXQgZGVwYXJ0dXJlczogNDMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGNjZWE1ODFjY2RiNGQ2ZWFkNzBhMmM1ZGZkZDgyYmIuc2V0Q29udGVudChodG1sX2I4OTlkY2NmMGVlNTQ5N2Y5NjBmM2RjMzU2YjIyZjA4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5OWJkNjIxMGE0YjRjYzFiNzhjMDgwODdhM2M0NGQ4LmJpbmRQb3B1cChwb3B1cF84Y2NlYTU4MWNjZGI0ZDZlYWQ3MGEyYzVkZmRkODJiYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTM4YmRjMDNjNjA2NDYyOTkwZGQ2NTgwMTE0Y2M1MjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTUzMzc4OTk5OTk5OTQsIC03NC4wMTY1ODM1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhZmQzZmI3NWE0MDRmNWI4MjIzNzM5MTQ1NGMxMTdlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmIyNTM5N2I1NWE4NDgwYjg4NDIxNWFhOWE2YzZlM2MgPSAkKGA8ZGl2IGlkPSJodG1sX2ZiMjUzOTdiNTVhODQ4MGI4ODQyMTVhYTlhNmM2ZTNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WZXNleSBQbCAmIFJpdmVyIFRlcnJhY2U8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMzNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzkxPGJyPiBuZXQgZGVwYXJ0dXJlczogNTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmFmZDNmYjc1YTQwNGY1YjgyMjM3MzkxNDU0YzExN2Uuc2V0Q29udGVudChodG1sX2ZiMjUzOTdiNTVhODQ4MGI4ODQyMTVhYTlhNmM2ZTNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzOGJkYzAzYzYwNjQ2Mjk5MGRkNjU4MDExNGNjNTI4LmJpbmRQb3B1cChwb3B1cF9iYWZkM2ZiNzVhNDA0ZjViODIyMzczOTE0NTRjMTE3ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWQ0YzUxNzhiMGMwNDRjNzhjNzRkNWVhMGY0YWQ3NDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjQwNTU0OSwgLTc0LjAwOTY1OTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGU3ZmExNDRiYzIzNDc0YTllNDI5ZTAxODYyZjVlZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMmY5YmE5ZGEwN2M0YjZiODJhOTVkZmU5YTA4MGM2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzJmOWJhOWRhMDdjNGI2YjgyYTk1ZGZlOWEwODBjNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhdHRzIFN0ICYgR3JlZW53aWNoIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExMjxicj4gbmV0IGRlcGFydHVyZXM6IC0yLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlN2ZhMTQ0YmMyMzQ3NGE5ZTQyOWUwMTg2MmY1ZWY4LnNldENvbnRlbnQoaHRtbF9jMmY5YmE5ZGEwN2M0YjZiODJhOTVkZmU5YTA4MGM2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZDRjNTE3OGIwYzA0NGM3OGM3NGQ1ZWEwZjRhZDc0MS5iaW5kUG9wdXAocG9wdXBfOGU3ZmExNDRiYzIzNDc0YTllNDI5ZTAxODYyZjVlZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IyYmI1M2UyY2Y0YjQ3MjBhYTM1NDQ4YWE2ODYyMTI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE0NTA0NTEsIC03NC4wMDU2Mjc4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMWIzOTdmODg4YjY0MGEwOTEzNmU3NzFhYjg0ZmYyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcyODMzYmFlNTYwMzQ2OWU4MDkwMTIwZTU3Zjk4YWIxID0gJChgPGRpdiBpZD0iaHRtbF83MjgzM2JhZTU2MDM0NjllODA5MDEyMGU1N2Y5OGFiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVhZGUgU3QgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTAzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExYjM5N2Y4ODhiNjQwYTA5MTM2ZTc3MWFiODRmZjJhLnNldENvbnRlbnQoaHRtbF83MjgzM2JhZTU2MDM0NjllODA5MDEyMGU1N2Y5OGFiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMmJiNTNlMmNmNGI0NzIwYWEzNTQ0OGFhNjg2MjEyOS5iaW5kUG9wdXAocG9wdXBfMTFiMzk3Zjg4OGI2NDBhMDkxMzZlNzcxYWI4NGZmMmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2NGI5YmMwZDRmNTRiZWY5YjZhZmJmZTIyYWZlZjQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzExNzMxMDcsIC03My45OTE5MzA0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNi4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE3MzBiZjU4NWM0NDk3NzlhMzVjOWJlOGEyYjRmNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGE2MzdlZjQ1NmQ0OTBjOGRhNzFhNTZjNTY5YjgzYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjhhNjM3ZWY0NTZkNDkwYzhkYTcxYTU2YzU2OWI4M2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpa2UgU3QgJiBNb25yb2UgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNjE8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWE3MzBiZjU4NWM0NDk3NzlhMzVjOWJlOGEyYjRmNDIuc2V0Q29udGVudChodG1sXzY4YTYzN2VmNDU2ZDQ5MGM4ZGE3MWE1NmM1NjliODNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ2NGI5YmMwZDRmNTRiZWY5YjZhZmJmZTIyYWZlZjQ3LmJpbmRQb3B1cChwb3B1cF8xYTczMGJmNTg1YzQ0OTc3OWEzNWM5YmU4YTJiNGY0MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmMxMGE2MTc2NzQxNGYwMjg0M2ZiZDIxNWNjZjA4ODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTIxOTkwNiwgLTczLjk3OTQ4MTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2M0NDEzY2E0ZDE5NGYxMzlkNTNjMGVhODQ4NTFjMmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMWJkYmY5N2VlNDQ0ZjBiOTUzYWRkMTBiNDNiNmJkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfYjFiZGJmOTdlZTQ0NGYwYjk1M2FkZDEwYjQzYjZiZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoZXJyeSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcyPGJyPiBuZXQgZGVwYXJ0dXJlczogNDMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2M0NDEzY2E0ZDE5NGYxMzlkNTNjMGVhODQ4NTFjMmUuc2V0Q29udGVudChodG1sX2IxYmRiZjk3ZWU0NDRmMGI5NTNhZGQxMGI0M2I2YmRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjMTBhNjE3Njc0MTRmMDI4NDNmYmQyMTVjY2YwODg4LmJpbmRQb3B1cChwb3B1cF83YzQ0MTNjYTRkMTk0ZjEzOWQ1M2MwZWE4NDg1MWMyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTllZmZlMjQ4MmU2NDU3ZjkxZDgxYjU4ZWM3MzYyZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDIzODc4NywgLTczLjk5NzI2MjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjZTM5OWVkMjk4YzQ1NWJiZWM4ZGIzZTI0MmNjY2M3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjA5Zjg1MmFhNWVkNDMwYWE0Zjc3ZmJiNDQzOWRmYzQgPSAkKGA8ZGl2IGlkPSJodG1sXzYwOWY4NTJhYTVlZDQzMGFhNGY3N2ZiYjQ0MzlkZmM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDIwIFN0ICYgNyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ4My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTg5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjZTM5OWVkMjk4YzQ1NWJiZWM4ZGIzZTI0MmNjY2M3LnNldENvbnRlbnQoaHRtbF82MDlmODUyYWE1ZWQ0MzBhYTRmNzdmYmI0NDM5ZGZjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OWVmZmUyNDgyZTY0NTdmOTFkODFiNThlYzczNjJlMC5iaW5kUG9wdXAocG9wdXBfY2NlMzk5ZWQyOThjNDU1YmJlYzhkYjNlMjQyY2NjYzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3YmUzOTI2ZDVhMjQ3MTBhZGQ3MTNjN2I0OTBiMWNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI5MDM5MTcsIC03My45OTQwNDY0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTYuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlMWQ5ZWNhNDg0MTRhNGM4MzJjMzdmOTU4ZjI3OTNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWYwZDljNWI0OWJlNGJkOTljZmU4MGUzMjYzMTA3ZDkgPSAkKGA8ZGl2IGlkPSJodG1sXzlmMGQ5YzViNDliZTRiZDk5Y2ZlODBlMzI2MzEwN2Q5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXNoaW5ndG9uIFBsICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTk2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTEzMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZTFkOWVjYTQ4NDE0YTRjODMyYzM3Zjk1OGYyNzkzYi5zZXRDb250ZW50KGh0bWxfOWYwZDljNWI0OWJlNGJkOTljZmU4MGUzMjYzMTA3ZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjdiZTM5MjZkNWEyNDcxMGFkZDcxM2M3YjQ5MGIxY2EuYmluZFBvcHVwKHBvcHVwX2NlMWQ5ZWNhNDg0MTRhNGM4MzJjMzdmOTU4ZjI3OTNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYzlmNzJjNWIyY2Y0NWEyODQ4YzliYWM4ZDRmOWQzOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMDQ3NzQ3LCAtNzMuOTk5MDYwNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYWFiNzY0MDUzMWU0MmZjYTk5YTdmZTg2OGQ5ZjZhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIzMzIzNzczMmJlMDQ4MzFhOWUyODUxODhiNGQ1ZDMwID0gJChgPGRpdiBpZD0iaHRtbF8yMzMyMzc3MzJiZTA0ODMxYTllMjg1MTg4YjRkNWQzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3VsbGl2YW4gU3QgJiBXYXNoaW5ndG9uIFNxPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxNzxicj4gbmV0IGRlcGFydHVyZXM6IC05NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYWFiNzY0MDUzMWU0MmZjYTk5YTdmZTg2OGQ5ZjZhYy5zZXRDb250ZW50KGh0bWxfMjMzMjM3NzMyYmUwNDgzMWE5ZTI4NTE4OGI0ZDVkMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2M5ZjcyYzViMmNmNDVhMjg0OGM5YmFjOGQ0ZjlkMzkuYmluZFBvcHVwKHBvcHVwX2RhYWI3NjQwNTMxZTQyZmNhOTlhN2ZlODY4ZDlmNmFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YWNkNjYwZTRkOGQ0NDQ4OWYzYTNlMzc0MzRjY2RhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzc5OTIwMDAwMDAwNiwgLTc0LjAwODM4Njc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGZjYjEwMjc1NDliNDg1NGFiOGI2ZDUxZTdmODUyNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMzYwMjA5ZTgzOWY0ZmIyODUyNGU0YjI2OGJhMWI2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDM2MDIwOWU4MzlmNGZiMjg1MjRlNGIyNjhiYTFiNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9sZCBTbGlwICYgRnJvbnQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTQ4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmY2IxMDI3NTQ5YjQ4NTRhYjhiNmQ1MWU3Zjg1MjQyLnNldENvbnRlbnQoaHRtbF8wMzYwMjA5ZTgzOWY0ZmIyODUyNGU0YjI2OGJhMWI2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YWNkNjYwZTRkOGQ0NDQ4OWYzYTNlMzc0MzRjY2RhNi5iaW5kUG9wdXAocG9wdXBfMGZjYjEwMjc1NDliNDg1NGFiOGI2ZDUxZTdmODUyNDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhZTc0NWVkOTJhZTQ2N2Y4OWNhYWI0MjcwY2EwMTc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI1ODA2MTQsIC03My45NzQyMjQ5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjBlZDA1NzFmYzk1NDU5YmFmYjhiMGVlYmMwNWM3YTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDg0Yzc4Njc1ZTA0NDhhOWRiMTAzMGI2Mjk0ZGI3ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTA4NGM3ODY3NWUwNDQ4YTlkYjEwMzBiNjI5NGRiN2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkF2ZW51ZSBEICYgRSAxMiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzMTxicj4gbmV0IGRlcGFydHVyZXM6IDExNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMGVkMDU3MWZjOTU0NTliYWZiOGIwZWViYzA1YzdhNy5zZXRDb250ZW50KGh0bWxfMTA4NGM3ODY3NWUwNDQ4YTlkYjEwMzBiNjI5NGRiN2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGFlNzQ1ZWQ5MmFlNDY3Zjg5Y2FhYjQyNzBjYTAxNzkuYmluZFBvcHVwKHBvcHVwX2IwZWQwNTcxZmM5NTQ1OWJhZmI4YjBlZWJjMDVjN2E3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjc2M2U1OTRkNDM0ZjZjYmJkMzU5MGIyYTkzMTVjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjY5MDQyLCAtNzMuOTg3NzYzMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MWQyZjRhY2QxMWE0NmNjYmQzZjA4NTU3MGRjZWU3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5YjU5YmE2MGNjZjRjNmM5ZjE5MjFlY2ViMGZmZjQ2ID0gJChgPGRpdiBpZD0iaHRtbF83OWI1OWJhNjBjY2Y0YzZjOWYxOTIxZWNlYjBmZmY0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFkaXNvbiBTdCAmIENsaW50b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMDkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjFkMmY0YWNkMTFhNDZjY2JkM2YwODU1NzBkY2VlN2Yuc2V0Q29udGVudChodG1sXzc5YjU5YmE2MGNjZjRjNmM5ZjE5MjFlY2ViMGZmZjQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiNzYzZTU5NGQ0MzRmNmNiYmQzNTkwYjJhOTMxNWNjLmJpbmRQb3B1cChwb3B1cF82MWQyZjRhY2QxMWE0NmNjYmQzZjA4NTU3MGRjZWU3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODI2NDI3ZjE2MmU4NDNmNzgxNjliY2MxMTc5ZjY4MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTc4MjE0MywgLTczLjk3NjI4OTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjFlNTU2ZDg0YjI0NmY5OGUyMjBiZTAzYjNkNTdhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhNzRlOTNkZmI5OTRhOTNhNTFmOTQxMzc3ZjhlYmU0ID0gJChgPGRpdiBpZD0iaHRtbF80YTc0ZTkzZGZiOTk0YTkzYTUxZjk0MTM3N2Y4ZWJlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhbnRvbiBTdCAmIE1hbmdpbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxMDxicj4gbmV0IGRlcGFydHVyZXM6IDE0OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjFlNTU2ZDg0YjI0NmY5OGUyMjBiZTAzYjNkNTdhYy5zZXRDb250ZW50KGh0bWxfNGE3NGU5M2RmYjk5NGE5M2E1MWY5NDEzNzdmOGViZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODI2NDI3ZjE2MmU4NDNmNzgxNjliY2MxMTc5ZjY4MTEuYmluZFBvcHVwKHBvcHVwXzBiMWU1NTZkODRiMjQ2Zjk4ZTIyMGJlMDNiM2Q1N2FjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YmUyNTY5YmJiMTE0MzZjODA5OGNjZDZmODkwYjdjNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNzM5OTczLCAtNzMuOTgwMTY1NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MmJhY2NmNWU1YTY0YTExOTBlM2NhY2QxY2JlZWU1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyYzVmNDgwYjFjMzQ4ZDJiNjU2N2FkODJhN2I5MjUwID0gJChgPGRpdiBpZD0iaHRtbF9mMmM1ZjQ4MGIxYzM0OGQyYjY1NjdhZDgyYTdiOTI1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1iaWEgU3QgJiBSaXZpbmd0b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzY8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMzUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODJiYWNjZjVlNWE2NGExMTkwZTNjYWNkMWNiZWVlNTAuc2V0Q29udGVudChodG1sX2YyYzVmNDgwYjFjMzQ4ZDJiNjU2N2FkODJhN2I5MjUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliZTI1NjliYmIxMTQzNmM4MDk4Y2NkNmY4OTBiN2M3LmJpbmRQb3B1cChwb3B1cF84MmJhY2NmNWU1YTY0YTExOTBlM2NhY2QxY2JlZWU1MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTE4OGRiNGNmMzAxNGUzYjg4NDVjNjBhNDg0YWQwZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTc5NCwgLTczLjk2OTg2ODQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3OGI5NzNlZWQyNDQ4ZTNiNmM2NDI0ZjE1ODkzZTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGE3Y2NkMTVmYjQ1NGIzZTllNzZjZGNjNmEwMmNmYjkgPSAkKGA8ZGl2IGlkPSJodG1sXzBhN2NjZDE1ZmI0NTRiM2U5ZTc2Y2RjYzZhMDJjZmI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGludG9uIEF2ZSAmIEZsdXNoaW5nIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTE1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3MDxicj4gbmV0IGRlcGFydHVyZXM6IC00NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzhiOTczZWVkMjQ0OGUzYjZjNjQyNGYxNTg5M2U3Mi5zZXRDb250ZW50KGh0bWxfMGE3Y2NkMTVmYjQ1NGIzZTllNzZjZGNjNmEwMmNmYjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTE4OGRiNGNmMzAxNGUzYjg4NDVjNjBhNDg0YWQwZDUuYmluZFBvcHVwKHBvcHVwXzg3OGI5NzNlZWQyNDQ4ZTNiNmM2NDI0ZjE1ODkzZTcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWJmMGM3ZjhlZTQ0MGQ4OTNlZDkxNjFlNDY1YjUyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NTE0NDMsIC03My45NTM4MDkwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0YTlkYzFkNDUzODQxNTk5NmU4NjY5MDc3MWQ4MDVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTdkMTEyNDMyNjcwNDgwODk2YmY1OTI1YjNmZTkyMDEgPSAkKGA8ZGl2IGlkPSJodG1sX2U3ZDExMjQzMjY3MDQ4MDg5NmJmNTkyNWIzZmU5MjAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb25yb2UgU3QgJiBCZWRmb3JkIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYwPGJyPiBuZXQgZGVwYXJ0dXJlczogMzEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDRhOWRjMWQ0NTM4NDE1OTk2ZTg2NjkwNzcxZDgwNWMuc2V0Q29udGVudChodG1sX2U3ZDExMjQzMjY3MDQ4MDg5NmJmNTkyNWIzZmU5MjAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ5YmYwYzdmOGVlNDQwZDg5M2VkOTE2MWU0NjViNTI5LmJpbmRQb3B1cChwb3B1cF9kNGE5ZGMxZDQ1Mzg0MTU5OTZlODY2OTA3NzFkODA1YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2E1Yjg5ZDM4ZDRhNDllMTg0MzlmOTY5MWQyOTlmZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzY0OTQwMywgLTczLjk5NzA0Mzc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzJjZGEyZThmZmQzNGM3MWIxYTFkMWU3NTg5MDU0NWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDhiYmMyYTk3N2U0MjFjYmI1NDUwNWVlNTFiZTY3ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfODQ4YmJjMmE5NzdlNDIxY2JiNTQ1MDVlZTUxYmU2N2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTMgU3QgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MmNkYTJlOGZmZDM0YzcxYjFhMWQxZTc1ODkwNTQ1YS5zZXRDb250ZW50KGh0bWxfODQ4YmJjMmE5NzdlNDIxY2JiNTQ1MDVlZTUxYmU2N2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2E1Yjg5ZDM4ZDRhNDllMTg0MzlmOTY5MWQyOTlmZWEuYmluZFBvcHVwKHBvcHVwXzcyY2RhMmU4ZmZkMzRjNzFiMWExZDFlNzU4OTA1NDVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNTg4MTc1MGI3MzE0Zjg3OGUzMzhlY2U0OWMxNTEzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNjUyODg5LCAtNzQuMDA2MTgwMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzNTdjY2Q1ZGI5NTQ4NzZiYWFlNmYzMDQzZjE0ZmRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODljNjZkY2U2MjZjNDk1NmFlNmZhMTA5OGFjYzEzOGUgPSAkKGA8ZGl2IGlkPSJodG1sXzg5YzY2ZGNlNjI2YzQ5NTZhZTZmYTEwOThhY2MxMzhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYW5rIFN0ICYgSHVkc29uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMjUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE1OTxicj4gbmV0IGRlcGFydHVyZXM6IDM0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzNTdjY2Q1ZGI5NTQ4NzZiYWFlNmYzMDQzZjE0ZmRmLnNldENvbnRlbnQoaHRtbF84OWM2NmRjZTYyNmM0OTU2YWU2ZmExMDk4YWNjMTM4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNTg4MTc1MGI3MzE0Zjg3OGUzMzhlY2U0OWMxNTEzNC5iaW5kUG9wdXAocG9wdXBfZTM1N2NjZDVkYjk1NDg3NmJhYWU2ZjMwNDNmMTRmZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IyMzVmNmVlNGJlYzQ3MjE5NmFlZmEzYjU2OWMxZDYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI4ODQ2MDAwMDAwMDA0LCAtNzQuMDA4NTkxMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JlYmYxMmI2ZmI4MTQ3ZDJhM2VlZWM4MWI1ZGEyNzkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODE3N2JmMTczZmJkNGU1ZDgxYjY5Mzg1YzA2ZWRmNjkgPSAkKGA8ZGl2IGlkPSJodG1sXzgxNzdiZjE3M2ZiZDRlNWQ4MWI2OTM4NWMwNmVkZjY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbndpY2ggU3QgJiBXIEhvdXN0b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjU4PGJyPiBuZXQgZGVwYXJ0dXJlczogNDAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmViZjEyYjZmYjgxNDdkMmEzZWVlYzgxYjVkYTI3OTEuc2V0Q29udGVudChodG1sXzgxNzdiZjE3M2ZiZDRlNWQ4MWI2OTM4NWMwNmVkZjY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IyMzVmNmVlNGJlYzQ3MjE5NmFlZmEzYjU2OWMxZDYzLmJpbmRQb3B1cChwb3B1cF9iZWJmMTJiNmZiODE0N2QyYTNlZWVjODFiNWRhMjc5MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFiYTUwY2JhNWQwNDc5NGFjZjY3MzBkMDVkYzAyMDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjQ5MDk4NSwgLTc0LjAwMTU0NzAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTEuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMTI4ZDk0NmM4MzRhYTNiYzJjNGUyZTIwODE0MjQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjcxMTM2OGIwYWU1NGVlMjkwMDI2NDUwZmY1OWEwOTUgPSAkKGA8ZGl2IGlkPSJodG1sXzI3MTEzNjhiMGFlNTRlZTI5MDAyNjQ1MGZmNTlhMDk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIEJyb2Fkd2F5ICYgU3ByaW5nIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0yMzAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWUxMjhkOTQ2YzgzNGFhM2JjMmM0ZTJlMjA4MTQyNDguc2V0Q29udGVudChodG1sXzI3MTEzNjhiMGFlNTRlZTI5MDAyNjQ1MGZmNTlhMDk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhYmE1MGNiYTVkMDQ3OTRhY2Y2NzMwZDA1ZGMwMjA3LmJpbmRQb3B1cChwb3B1cF81ZTEyOGQ5NDZjODM0YWEzYmMyYzRlMmUyMDgxNDI0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDdiNWE2NzM4YmVhNDhhNWFiMmNhOGFhNmQ5MzliMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTg1MDIxMSwgLTczLjk4MzI5ODU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTIyZjg1MGRjNzUxNDg5MGFiNjJhZTU3ZDI5NGEyOTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYWI1ODlhOTZkYmI0ODZlYjgwMDk2Y2RkN2YwNjM5NCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2FiNTg5YTk2ZGJiNDg2ZWI4MDA5NmNkZDdmMDYzOTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpdmluZ3RvbiBTdCAmIFJpZGdlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg0PGJyPiBuZXQgZGVwYXJ0dXJlczogMTQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEyMmY4NTBkYzc1MTQ4OTBhYjYyYWU1N2QyOTRhMjkzLnNldENvbnRlbnQoaHRtbF9jYWI1ODlhOTZkYmI0ODZlYjgwMDk2Y2RkN2YwNjM5NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kN2I1YTY3MzhiZWE0OGE1YWIyY2E4YWE2ZDkzOWIxOS5iaW5kUG9wdXAocG9wdXBfMTIyZjg1MGRjNzUxNDg5MGFiNjJhZTU3ZDI5NGEyOTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxNDc0MGJkZGNlZDRmODA4MDY5ZWRiNjhiOWJmZWFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE1NTk1MDksIC03My45ODcwMjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MWQwNDg4MzBkNWI0OGFjODE3YTNiYzlkYzIzMGJkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjOGU4NTBlYjRkZDQ3NGU5MGQ2ZjM2YmU3NzRmMDM2ID0gJChgPGRpdiBpZD0iaHRtbF9jYzhlODUwZWI0ZGQ0NzRlOTBkNmYzNmJlNzc0ZjAzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xpbnRvbiBTdCAmIEdyYW5kIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTMxPGJyPiBuZXQgZGVwYXJ0dXJlczogNzIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDFkMDQ4ODMwZDViNDhhYzgxN2EzYmM5ZGMyMzBiZGUuc2V0Q29udGVudChodG1sX2NjOGU4NTBlYjRkZDQ3NGU5MGQ2ZjM2YmU3NzRmMDM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxNDc0MGJkZGNlZDRmODA4MDY5ZWRiNjhiOWJmZWFmLmJpbmRQb3B1cChwb3B1cF80MWQwNDg4MzBkNWI0OGFjODE3YTNiYzlkYzIzMGJkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWM2NDI5MzQ1NjJlNDI0NTkyYzZjOWQwYTI2NjgyMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDUzMDk1NCwgLTc0LjAwNjEyNTcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTdiNzI3NWIxOWQ4NDQxMGEwYTk2OTRmMDIxYjUxZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wM2M0YWUzMWFkMDM0NzFlOTY0NjlhYTM3ZjFlZDg3NiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDNjNGFlMzFhZDAzNDcxZTk2NDY5YWEzN2YxZWQ4NzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyb250IFN0ICYgTWFpZGVuIExuPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTdiNzI3NWIxOWQ4NDQxMGEwYTk2OTRmMDIxYjUxZGEuc2V0Q29udGVudChodG1sXzAzYzRhZTMxYWQwMzQ3MWU5NjQ2OWFhMzdmMWVkODc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjNjQyOTM0NTYyZTQyNDU5MmM2YzlkMGEyNjY4MjMyLmJpbmRQb3B1cChwb3B1cF81N2I3Mjc1YjE5ZDg0NDEwYTBhOTY5NGYwMjFiNTFkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTAzYmM3NWZjMTY4NDYxM2E1MDM4ZjFjN2RmODgzZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjM0MDYxMywgLTczLjk3NzIyNDc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjMTczMmQwMGMzODRjNGY4Y2NhOWMzZDhmMzI1ZWRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWY0NWE3OThiNzBlNDIxOGI1ZGRkOWNiYTc4ZWQ4MGUgPSAkKGA8ZGl2IGlkPSJodG1sX2FmNDVhNzk4YjcwZTQyMThiNWRkZDljYmE3OGVkODBlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDU2IFN0ICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Mjxicj4gbmV0IGRlcGFydHVyZXM6IC05LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjMTczMmQwMGMzODRjNGY4Y2NhOWMzZDhmMzI1ZWRlLnNldENvbnRlbnQoaHRtbF9hZjQ1YTc5OGI3MGU0MjE4YjVkZGQ5Y2JhNzhlZDgwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMDNiYzc1ZmMxNjg0NjEzYTUwMzhmMWM3ZGY4ODNlMi5iaW5kUG9wdXAocG9wdXBfNWMxNzMyZDAwYzM4NGM0ZjhjY2E5YzNkOGYzMjVlZGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhNjQyMWYwY2EzYTQ3NzY4NDZmOWY3OGJkZTMyYjhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg1Mzk1NjcsIC03My45NzQzMTQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4MWE4ZjM5NTkxMDRlZDg4NmM0MmEzYTU4MDE1NmQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjBkZjkwN2E0ZWYzNDRjNTgxZGMxM2EyNDVmMWNhYTYgPSAkKGA8ZGl2IGlkPSJodG1sX2IwZGY5MDdhNGVmMzQ0YzU4MWRjMTNhMjQ1ZjFjYWE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TIFBvcnRsYW5kIEF2ZSAmIEhhbnNvbiBQbDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4MWE4ZjM5NTkxMDRlZDg4NmM0MmEzYTU4MDE1NmQ0LnNldENvbnRlbnQoaHRtbF9iMGRmOTA3YTRlZjM0NGM1ODFkYzEzYTI0NWYxY2FhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYTY0MjFmMGNhM2E0Nzc2ODQ2ZjlmNzhiZGUzMmI4ZC5iaW5kUG9wdXAocG9wdXBfYTgxYThmMzk1OTEwNGVkODg2YzQyYTNhNTgwMTU2ZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxMmE4ODZmNGJkMTQ2OTU4ZTZhZmI3MjBjY2FlZmZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkzNjMxMzcsIC03My45NjIyMzU1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyMGNkNjlkNTlkZTQ4ZTFiMzYwYjkxMWQ0NWYzMjI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmEzMjcyMmY3ZGQzNGFiOGJkMDY4MDljNjg3MjEyOTYgPSAkKGA8ZGl2IGlkPSJodG1sX2JhMzI3MjJmN2RkMzRhYjhiZDA2ODA5YzY4NzIxMjk2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbWVyc29uIFBsICYgTXlydGxlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDg3PGJyPiBuZXQgZGVwYXJ0dXJlczogMzkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTIwY2Q2OWQ1OWRlNDhlMWIzNjBiOTExZDQ1ZjMyMjUuc2V0Q29udGVudChodG1sX2JhMzI3MjJmN2RkMzRhYjhiZDA2ODA5YzY4NzIxMjk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcxMmE4ODZmNGJkMTQ2OTU4ZTZhZmI3MjBjY2FlZmZhLmJpbmRQb3B1cChwb3B1cF85MjBjZDY5ZDU5ZGU0OGUxYjM2MGI5MTFkNDVmMzIyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODc0NTVkOWVjODAyNGQzODljYmM1MmNlNmRiZTY0ZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTYwMjExOCwgLTczLjk5OTc0MzcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZiYmM3YzgzZWZmMDRlYjdiMjc4NjFmYTkyMmNjNmY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2VmN2ZlNDEwZWUyNDM3MWJmOTdjZmYxZTU1OWU1ZWMgPSAkKGA8ZGl2IGlkPSJodG1sX2NlZjdmZTQxMGVlMjQzNzFiZjk3Y2ZmMWU1NTllNWVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXlhcmQgU3QgJiBCYXh0ZXIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI1Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjIxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTMxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiYmM3YzgzZWZmMDRlYjdiMjc4NjFmYTkyMmNjNmY1LnNldENvbnRlbnQoaHRtbF9jZWY3ZmU0MTBlZTI0MzcxYmY5N2NmZjFlNTU5ZTVlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NzQ1NWQ5ZWM4MDI0ZDM4OWNiYzUyY2U2ZGJlNjRkNy5iaW5kUG9wdXAocG9wdXBfNmJiYzdjODNlZmYwNGViN2IyNzg2MWZhOTIyY2M2ZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2NzY5OTNiZjg5NjQ3ODVhNjI5ZmQxZDU3ZTViOWYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2MjI2NDQsIC03My45ODI2MTIwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTguMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiOTI5Y2NjMGRhMzQ4ZmE5MzJmMWFjYWUzZWU5Mzg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWYxYTQxY2JiZjNjNDQ4OGJjN2E2NzdjODQ4MDYwNDkgPSAkKGA8ZGl2IGlkPSJodG1sX2VmMWE0MWNiYmYzYzQ0ODhiYzdhNjc3Yzg0ODA2MDQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CaWFseXN0b2tlciBQbCAmIERlbGFuY2V5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDAyPGJyPiBuZXQgZGVwYXJ0dXJlczogMzY2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiOTI5Y2NjMGRhMzQ4ZmE5MzJmMWFjYWUzZWU5Mzg2LnNldENvbnRlbnQoaHRtbF9lZjFhNDFjYmJmM2M0NDg4YmM3YTY3N2M4NDgwNjA0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNjc2OTkzYmY4OTY0Nzg1YTYyOWZkMWQ1N2U1YjlmMS5iaW5kUG9wdXAocG9wdXBfMWI5MjljY2MwZGEzNDhmYTkzMmYxYWNhZTNlZTkzODYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM2ZTU0ZjIyMmYzZTQ4MTc5ZWI3NjljMDVmMTkxMDRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMyNjE3ODcsIC03My45OTE1ODA0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlYmMwNmJkNjEyMTQwOWNhNTJjYmEyMTliNmI2YmUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjQ5MTcyYTNhOTU1NDA0Zjk2NjZjMWE4ODEwYzU3ZmMgPSAkKGA8ZGl2IGlkPSJodG1sXzI0OTE3MmEzYTk1NTQwNGY5NjY2YzFhODgxMGM1N2ZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDExIFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMzNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjgwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTU2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlYmMwNmJkNjEyMTQwOWNhNTJjYmEyMTliNmI2YmUzLnNldENvbnRlbnQoaHRtbF8yNDkxNzJhM2E5NTU0MDRmOTY2NmMxYTg4MTBjNTdmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNmU1NGYyMjJmM2U0ODE3OWViNzY5YzA1ZjE5MTA0ZC5iaW5kUG9wdXAocG9wdXBfNWViYzA2YmQ2MTIxNDA5Y2E1MmNiYTIxOWI2YjZiZTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiZGExM2EwYThmMTRhYjc4NDU0NGMzYWI0OGM1YWE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMyOTE1NTMsIC03NC4wMDcxMTM4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4NDI0MzNiMGIzZjQ3NzNiZTI0N2JjM2I3OGJiNDkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTM4NTQzNTUxNzc0NGFjMzg2Nzc2MzAxYjRjNTJmMzggPSAkKGA8ZGl2IGlkPSJodG1sX2EzODU0MzU1MTc3NDRhYzM4Njc3NjMwMWI0YzUyZjM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DaHJpc3RvcGhlciBTdCAmIEdyZWVud2ljaCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzgyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzODk8YnI+IG5ldCBkZXBhcnR1cmVzOiA3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4NDI0MzNiMGIzZjQ3NzNiZTI0N2JjM2I3OGJiNDkyLnNldENvbnRlbnQoaHRtbF9hMzg1NDM1NTE3NzQ0YWMzODY3NzYzMDFiNGM1MmYzOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYmRhMTNhMGE4ZjE0YWI3ODQ1NDRjM2FiNDhjNWFhOS5iaW5kUG9wdXAocG9wdXBfMDg0MjQzM2IwYjNmNDc3M2JlMjQ3YmMzYjc4YmI0OTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhZGIzNjAzYzA5MzRmYmI5YjYxNzVhZGI3MmRhYmZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1MTAyNjcsIC03My45NzQ5ODY5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMzLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTU3ZmRhNzhlMDk0NzVjYTVkNzU3NjRmOTU1N2U5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExNzMwZGE2ZjZlNTQ3NWJiOTZiMWFmZDc0ODAxNmIzID0gJChgPGRpdiBpZD0iaHRtbF8xMTczMGRhNmY2ZTU0NzViYjk2YjFhZmQ3NDgwMTZiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0NyBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDkyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MjY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjY2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhNTdmZGE3OGUwOTQ3NWNhNWQ3NTc2NGY5NTU3ZTljLnNldENvbnRlbnQoaHRtbF8xMTczMGRhNmY2ZTU0NzViYjk2YjFhZmQ3NDgwMTZiMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YWRiMzYwM2MwOTM0ZmJiOWI2MTc1YWRiNzJkYWJmYi5iaW5kUG9wdXAocG9wdXBfZWE1N2ZkYTc4ZTA5NDc1Y2E1ZDc1NzY0Zjk1NTdlOWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0ZWI0MTc4MmVjNzQ1NmViMTNjNDE3MWQyMTU0OWEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA3MTc5MzYsIC03NC4wMDg4NzMwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4ZWVmYWQ1NmYwZDRlZjdiMWRkYmU2ZmE5MTM0N2JhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTcxZDc0YWRhMjFlNDY0YTg5OGQ3ODUwYWFlYjk2ZjggPSAkKGA8ZGl2IGlkPSJodG1sXzU3MWQ3NGFkYTIxZTQ2NGE4OThkNzg1MGFhZWI5NmY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxsaWFtIFN0ICYgUGluZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTg1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDhlZWZhZDU2ZjBkNGVmN2IxZGRiZTZmYTkxMzQ3YmEuc2V0Q29udGVudChodG1sXzU3MWQ3NGFkYTIxZTQ2NGE4OThkNzg1MGFhZWI5NmY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0ZWI0MTc4MmVjNzQ1NmViMTNjNDE3MWQyMTU0OWEwLmJpbmRQb3B1cChwb3B1cF80OGVlZmFkNTZmMGQ0ZWY3YjFkZGJlNmZhOTEzNDdiYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTNmYmMwYzdiM2VkNDQzMzhlMzcyODcxMWRjNGIyMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTYwNTg2NiwgLTczLjk5MTkwNzU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMC41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3NWY2MDEyMDA0NzQ4ZTBiY2MwNWFjMGI4ZTJhMmVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQyNDZkNWM1NWQ1NDQ1NWIyZWI4YmJlYTI2NjZiNDggPSAkKGA8ZGl2IGlkPSJodG1sXzRkMjQ2ZDVjNTVkNTQ0NTViMmViOGJiZWEyNjY2YjQ4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BbGxlbiBTdCAmIEhlc3RlciBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTkwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc1ZjYwMTIwMDQ3NDhlMGJjYzA1YWMwYjhlMmEyZWUuc2V0Q29udGVudChodG1sXzRkMjQ2ZDVjNTVkNTQ0NTViMmViOGJiZWEyNjY2YjQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UzZmJjMGM3YjNlZDQ0MzM4ZTM3Mjg3MTFkYzRiMjA1LmJpbmRQb3B1cChwb3B1cF84NzVmNjAxMjAwNDc0OGUwYmNjMDVhYzBiOGUyYTJlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjNiNTQ2MTU3MGZmNGNmZDhjOWQxNzY0MDQxNjE2ZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTE3MjYzMiwgLTczLjk4NzUzNTIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTEuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YjEwZjRlMjRlMjU0ZjZkYTdiNWY4YTk4MGEyNjI0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM2ZWE3ODU1ZDc0NjQ1NzQ5MzRjN2RiOGYwNDcyZDk1ID0gJChgPGRpdiBpZD0iaHRtbF8zNmVhNzg1NWQ3NDY0NTc0OTM0YzdkYjhmMDQ3MmQ5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDM3IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzOTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3MDxicj4gbmV0IGRlcGFydHVyZXM6IC0yMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2IxMGY0ZTI0ZTI1NGY2ZGE3YjVmOGE5ODBhMjYyNDguc2V0Q29udGVudChodG1sXzM2ZWE3ODU1ZDc0NjQ1NzQ5MzRjN2RiOGYwNDcyZDk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIzYjU0NjE1NzBmZjRjZmQ4YzlkMTc2NDA0MTYxNmViLmJpbmRQb3B1cChwb3B1cF83YjEwZjRlMjRlMjU0ZjZkYTdiNWY4YTk4MGEyNjI0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzYyOTM3ODAxM2ExNDI0MTg5MjYxN2JiNDVlYzJlODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDgzNDY5OCwgLTc0LjAxNzEzNDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTVhYjBiOTZkY2MzNDVlZDkyMzQzY2JkOTNmZTAyM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNzU2MjFhMWFmMjk0MWRjOGIyNjkwZTVkZjc1ZWY1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDc1NjIxYTFhZjI5NDFkYzhiMjY5MGU1ZGY3NWVmNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgVGhhbWVzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI2MTxicj4gbmV0IGRlcGFydHVyZXM6IDE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1YWIwYjk2ZGNjMzQ1ZWQ5MjM0M2NiZDkzZmUwMjNmLnNldENvbnRlbnQoaHRtbF8wNzU2MjFhMWFmMjk0MWRjOGIyNjkwZTVkZjc1ZWY1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNjI5Mzc4MDEzYTE0MjQxODkyNjE3YmI0NWVjMmU4MC5iaW5kUG9wdXAocG9wdXBfYTVhYjBiOTZkY2MzNDVlZDkyMzQzY2JkOTNmZTAyM2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1NmZhMTg0NDU2NzRiODI4YmJmNTJmMDgwYmE3NmQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg5MDA0NDMsIC03My45NjAyMzg1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDgwMTJkZWEwYTQyNGYyZTg4Zjc1NzM1Y2RjZWMxODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OWVjZjk0ZjgyY2I0OTMyOTQyNmZkNjE1MTZkOTViMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTllY2Y5NGY4MmNiNDkzMjk0MjZmZDYxNTE2ZDk1YjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhZmF5ZXR0ZSBBdmUgJiBDbGFzc29uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExMjxicj4gbmV0IGRlcGFydHVyZXM6IDc2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ4MDEyZGVhMGE0MjRmMmU4OGY3NTczNWNkY2VjMTgyLnNldENvbnRlbnQoaHRtbF81OWVjZjk0ZjgyY2I0OTMyOTQyNmZkNjE1MTZkOTViMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NTZmYTE4NDQ1Njc0YjgyOGJiZjUyZjA4MGJhNzZkMy5iaW5kUG9wdXAocG9wdXBfNDgwMTJkZWEwYTQyNGYyZTg4Zjc1NzM1Y2RjZWMxODIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YzOWUwZTY4ZGZiNjRkNTlhZjFiMDBkYmFjN2ZiNmRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyMjMxNjYsIC03My45NjE0NTgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMWNhYjUxYzRkY2M0ZDgxOTdjMmFiZjFiMTJjZjc0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlNmM4Nzk1MzI4ZTQ5ZmNhNDMyNjBlMzE3ZTkwM2IxID0gJChgPGRpdiBpZD0iaHRtbF81ZTZjODc5NTMyOGU0OWZjYTQzMjYwZTMxN2U5MDNiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnVsdG9uIFN0ICYgR3JhbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTAzPGJyPiBuZXQgZGVwYXJ0dXJlczogODAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDFjYWI1MWM0ZGNjNGQ4MTk3YzJhYmYxYjEyY2Y3NDQuc2V0Q29udGVudChodG1sXzVlNmM4Nzk1MzI4ZTQ5ZmNhNDMyNjBlMzE3ZTkwM2IxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YzOWUwZTY4ZGZiNjRkNTlhZjFiMDBkYmFjN2ZiNmRjLmJpbmRQb3B1cChwb3B1cF9kMWNhYjUxYzRkY2M0ZDgxOTdjMmFiZjFiMTJjZjc0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTYzMTMwOTQ2YjllNGVmMmE5ODlhMTQyNjNjNmFjMjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTMyNjEsIC03My45Njg4OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YzQ4NzYxMTczNDM0ODM5YThjNmVhMDk2ZWMyNzM4ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwMDliM2I2N2U2YjRjOThiOWNjNDg0ZjNlZDk0NDQzID0gJChgPGRpdiBpZD0iaHRtbF9jMDA5YjNiNjdlNmI0Yzk4YjljYzQ4NGYzZWQ5NDQ0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xpbnRvbiBBdmUgJiBNeXJ0bGUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzQ4NzYxMTczNDM0ODM5YThjNmVhMDk2ZWMyNzM4ZS5zZXRDb250ZW50KGh0bWxfYzAwOWIzYjY3ZTZiNGM5OGI5Y2M0ODRmM2VkOTQ0NDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTYzMTMwOTQ2YjllNGVmMmE5ODlhMTQyNjNjNmFjMjEuYmluZFBvcHVwKHBvcHVwXzVjNDg3NjExNzM0MzQ4MzlhOGM2ZWEwOTZlYzI3MzhlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Y2JlNmMyMjliM2I0OWZmYTA2MTE3Yzg3YzU1MzRjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1ODI4MDY1LCAtNzMuOTcwNjk0MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zNS4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWMxZDc0MzVkMzQwNGM0NjgxYzIxNDRkOGJlNTBiNTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NmYxOTcyZDRlZGM0ZTIyODljNjcyNjFjNzY5OWJmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTZmMTk3MmQ0ZWRjNGUyMjg5YzY3MjYxYzc2OTliZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTMgU3QgJiBMZXhpbmd0b24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4MDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDk4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTcwNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzFkNzQzNWQzNDA0YzQ2ODFjMjE0NGQ4YmU1MGI1My5zZXRDb250ZW50KGh0bWxfNTZmMTk3MmQ0ZWRjNGUyMjg5YzY3MjYxYzc2OTliZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWNiZTZjMjI5YjNiNDlmZmEwNjExN2M4N2M1NTM0Y2UuYmluZFBvcHVwKHBvcHVwXzVjMWQ3NDM1ZDM0MDRjNDY4MWMyMTQ0ZDhiZTUwYjUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNmQ0ODQyOWVjZmU0YTA2YjcxZGM4OGI3NmY4MjM3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMDM4NTk5LCAtNzQuMDAyMTQ5ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjg3MjY4N2QxYzk0NzYyOWE3YjEzYmUwMjMzZTVjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkxYThjNDRhZjY4NDRkZGRiMWQ5NTIwZDFhMzRiNWJmID0gJChgPGRpdiBpZD0iaHRtbF85MWE4YzQ0YWY2ODQ0ZGRkYjFkOTUyMGQxYTM0YjViZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FybWluZSBTdCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1NDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ2NDxicj4gbmV0IGRlcGFydHVyZXM6IC04MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjg3MjY4N2QxYzk0NzYyOWE3YjEzYmUwMjMzZTVjNC5zZXRDb250ZW50KGh0bWxfOTFhOGM0NGFmNjg0NGRkZGIxZDk1MjBkMWEzNGI1YmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDZkNDg0MjllY2ZlNGEwNmI3MWRjODhiNzZmODIzNzcuYmluZFBvcHVwKHBvcHVwX2ZmODcyNjg3ZDFjOTQ3NjI5YTdiMTNiZTAyMzNlNWM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjI3YzY4ODA4NTQ0NzJkYWNmOWU2MzliMTAzYjc3MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMjI0MTE5LCAtNzQuMDAwMjYzOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNmU5NGQ5MTUxYWU0Njg5YWIyYjM5MzZmZDYwZjdiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1Y2Q5MTE3ZDE5NjQyMTJiOWIzOWYwYWI2MDFhMzFmID0gJChgPGRpdiBpZD0iaHRtbF9kNWNkOTExN2QxOTY0MjEyYjliMzlmMGFiNjAxYTMxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FzaGluZ3RvbiBQbCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjIxPGJyPiBuZXQgZGVwYXJ0dXJlczogMTMxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2ZTk0ZDkxNTFhZTQ2ODlhYjJiMzkzNmZkNjBmN2I3LnNldENvbnRlbnQoaHRtbF9kNWNkOTExN2QxOTY0MjEyYjliMzlmMGFiNjAxYTMxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjI3YzY4ODA4NTQ0NzJkYWNmOWU2MzliMTAzYjc3MS5iaW5kUG9wdXAocG9wdXBfMzZlOTRkOTE1MWFlNDY4OWFiMmIzOTM2ZmQ2MGY3YjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzMWE1MTA5NzU2ZTQ5YjhhN2I5MGZmZDg1ZTAwOTM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk0NTI4MDAwMDAwMDA1LCAtNzMuOTU4MDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MjY5ZjAxYWI5YTY0YjI1YjFmMzY5NzI1NmY5ZGIxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkZGQ3Y2U4OGVkNDQ0NjFiZWE4MDQ5NmVlOWRmMTQxID0gJChgPGRpdiBpZD0iaHRtbF8wZGRkN2NlODhlZDQ0NDYxYmVhODA0OTZlZTlkZjE0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnJhbmtsaW4gQXZlICYgTXlydGxlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc0PGJyPiBuZXQgZGVwYXJ0dXJlczogNDAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODI2OWYwMWFiOWE2NGIyNWIxZjM2OTcyNTZmOWRiMTcuc2V0Q29udGVudChodG1sXzBkZGQ3Y2U4OGVkNDQ0NjFiZWE4MDQ5NmVlOWRmMTQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIzMWE1MTA5NzU2ZTQ5YjhhN2I5MGZmZDg1ZTAwOTM2LmJpbmRQb3B1cChwb3B1cF84MjY5ZjAxYWI5YTY0YjI1YjFmMzY5NzI1NmY5ZGIxNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmYwMDg1NWVlOTdiNGRlZmJhMzdkNDQ3MjM3MjM0MjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTMzMTcxNiwgLTczLjk1MzgxOTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWFkMzc3ODMxYzYxNDViOGFjOTMxZWMxMDBiYzJlNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNWUyMDVhZDM1MDQ0ZDNmYTEwNTZmMmUyMDJlZDg1NyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTVlMjA1YWQzNTA0NGQzZmExMDU2ZjJlMjAyZWQ4NTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxvdWdoYnkgQXZlICYgV2Fsd29ydGggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM3PGJyPiBuZXQgZGVwYXJ0dXJlczogMzMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWFkMzc3ODMxYzYxNDViOGFjOTMxZWMxMDBiYzJlNzYuc2V0Q29udGVudChodG1sX2E1ZTIwNWFkMzUwNDRkM2ZhMTA1NmYyZTIwMmVkODU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZmMDA4NTVlZTk3YjRkZWZiYTM3ZDQ0NzIzNzIzNDIyLmJpbmRQb3B1cChwb3B1cF9hYWQzNzc4MzFjNjE0NWI4YWM5MzFlYzEwMGJjMmU3NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTE2NjAyNmM2NTAzNDhkZTkyZjM0MWExMzk1ZWUxNjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDg2MjE0NCwgLTc0LjAwNzIyMTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjA4MmQ1NGMzNTJiNDg5M2I5NGJjMmRkY2U3OTljMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOGUwOGE3ZGQwNmE0YTQwODBlNTE5YWE4MDllYzQ2ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzhlMDhhN2RkMDZhNGE0MDgwZTUxOWFhODA5ZWM0NmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpvaG4gU3QgJiBXaWxsaWFtIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxODQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDk4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTg2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwODJkNTRjMzUyYjQ4OTNiOTRiYzJkZGNlNzk5YzAwLnNldENvbnRlbnQoaHRtbF9jOGUwOGE3ZGQwNmE0YTQwODBlNTE5YWE4MDllYzQ2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMTY2MDI2YzY1MDM0OGRlOTJmMzQxYTEzOTVlZTE2My5iaW5kUG9wdXAocG9wdXBfNjA4MmQ1NGMzNTJiNDg5M2I5NGJjMmRkY2U3OTljMDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2OTE1MDhlYzk1ODQzYmM4MzVjNzNjYjAwYjM0M2E1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIyNDM3OTcsIC03NC4wMDU2NjQ0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTM5LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDVjYzNjNmJhMjU0ZTY1OTNjODM0YzJmODFjZDY1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExNzAyYTgyYjkzYzQ3ZmY5YjM0ZTQ1YTY4ZTQzNjZiID0gJChgPGRpdiBpZD0iaHRtbF9hMTcwMmE4MmI5M2M0N2ZmOWIzNGU0NWE2OGU0MzY2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NiBBdmUgJiBDYW5hbCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODczLjA8YnI+IHRvdGFsIGFycml2YWxzOiA4NTxicj4gbmV0IGRlcGFydHVyZXM6IC03ODguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODA1Y2MzYzZiYTI1NGU2NTkzYzgzNGMyZjgxY2Q2NWQuc2V0Q29udGVudChodG1sX2ExNzAyYTgyYjkzYzQ3ZmY5YjM0ZTQ1YTY4ZTQzNjZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI2OTE1MDhlYzk1ODQzYmM4MzVjNzNjYjAwYjM0M2E1LmJpbmRQb3B1cChwb3B1cF84MDVjYzNjNmJhMjU0ZTY1OTNjODM0YzJmODFjZDY1ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2I1MDhlNjc0NjNhNDc1MDlkOTA3NDc4ZTM5ODU2M2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDkxNTYsIC03My45OTE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzljMGNhZDlhNDYwNDQ1Zjg4ZTFhN2ZjYzA4YzcyOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NTFiZGU3MmJjOGQ0YmY2OTIwNTlhZjNhM2VhNjIyMSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTUxYmRlNzJiYzhkNGJmNjkyMDU5YWYzYTNlYTYyMjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMzEgU3QgJiA3IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1OTc8YnI+IG5ldCBkZXBhcnR1cmVzOiA3OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOWMwY2FkOWE0NjA0NDVmODhlMWE3ZmNjMDhjNzI5MS5zZXRDb250ZW50KGh0bWxfOTUxYmRlNzJiYzhkNGJmNjkyMDU5YWYzYTNlYTYyMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2I1MDhlNjc0NjNhNDc1MDlkOTA3NDc4ZTM5ODU2M2IuYmluZFBvcHVwKHBvcHVwX2M5YzBjYWQ5YTQ2MDQ0NWY4OGUxYTdmY2MwOGM3MjkxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGNkYTcyMmE1MjY0Zjc2OGM1ODJmMDg3OWJmZjI2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNDAxMTQzLCAtNzQuMDAyOTM4NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OTg3NGFjNjAzYWY0NGU0YWI1OTQwYzZiMzYzMzA5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzOGY2MTQ1YmRmZDQyZGNiOTk3ZGNjZDg3MjhhZWNhID0gJChgPGRpdiBpZD0iaHRtbF9jMzhmNjE0NWJkZmQ0MmRjYjk5N2RjY2Q4NzI4YWVjYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA0IFN0ICYgNyBBdmUgUzxicj4gdG90YWwgZGVwYXJ0dXJlczogMTkzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OTg3NGFjNjAzYWY0NGU0YWI1OTQwYzZiMzYzMzA5Ni5zZXRDb250ZW50KGh0bWxfYzM4ZjYxNDViZGZkNDJkY2I5OTdkY2NkODcyOGFlY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzRjZGE3MjJhNTI2NGY3NjhjNTgyZjA4NzliZmYyNmIuYmluZFBvcHVwKHBvcHVwXzY5ODc0YWM2MDNhZjQ0ZTRhYjU5NDBjNmIzNjMzMDk2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ODBlNGMwYzE1NTk0YWY1YWRkYzczZmM4OWFmZjVjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNDkyNjk1LCAtNzMuOTkyMDA1MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzJiNTdmYzk1NmNkNDA2M2IxMzQxYWUxMDVhNmFmY2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kODExMTlhNTZlZWY0MGZlYmJkMzllNTQ0YWU2MjJmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDgxMTE5YTU2ZWVmNDBmZWJiZDM5ZTU0NGFlNjIyZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaXZlcnNpdHkgUGwgJiBFIDE0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNjcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI1NDxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzJiNTdmYzk1NmNkNDA2M2IxMzQxYWUxMDVhNmFmY2Euc2V0Q29udGVudChodG1sX2Q4MTExOWE1NmVlZjQwZmViYmQzOWU1NDRhZTYyMmY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ4MGU0YzBjMTU1OTRhZjVhZGRjNzNmYzg5YWZmNWNkLmJpbmRQb3B1cChwb3B1cF83MmI1N2ZjOTU2Y2Q0MDYzYjEzNDFhZTEwNWE2YWZjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTNhOWZkMjY4N2JkNGRlNzk4OTE5YTEzOThjODUzODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzUyMzgsIC03NC4wMDAyNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0Zjk4YTdiM2IyOTQxMjhiMDhmOWMwYmYwY2NmOTVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGYzN2QxZjM0ZTVmNDQ0MmFkMTAyOTQwZmE4Njk5ZDQgPSAkKGA8ZGl2IGlkPSJodG1sX2RmMzdkMWYzNGU1ZjQ0NDJhZDEwMjk0MGZhODY5OWQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbndpY2ggQXZlICYgQ2hhcmxlcyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTM3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMDk8YnI+IG5ldCBkZXBhcnR1cmVzOiA3Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNGY5OGE3YjNiMjk0MTI4YjA4ZjljMGJmMGNjZjk1ZC5zZXRDb250ZW50KGh0bWxfZGYzN2QxZjM0ZTVmNDQ0MmFkMTAyOTQwZmE4Njk5ZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTNhOWZkMjY4N2JkNGRlNzk4OTE5YTEzOThjODUzODguYmluZFBvcHVwKHBvcHVwXzA0Zjk4YTdiM2IyOTQxMjhiMDhmOWMwYmYwY2NmOTVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMGZlYTdiMTFjMGU0MzM2YWMxNGRjMTBmYWNjMWU3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MzA0OCwgLTczLjk2NDkxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmNTU2ZTU5YTAyZjQ4OWI5ZDZmYTBjNWVlYmM4YjBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBiZTJjOGFjMmU2NGUwM2E2YzNiY2RkNWExMDc3M2UgPSAkKGA8ZGl2IGlkPSJodG1sXzcwYmUyYzhhYzJlNjRlMDNhNmMzYmNkZDVhMTA3NzNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GdWx0b24gU3QgJiBXYXNoaW5ndG9uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwMTxicj4gbmV0IGRlcGFydHVyZXM6IDU3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmNTU2ZTU5YTAyZjQ4OWI5ZDZmYTBjNWVlYmM4YjBiLnNldENvbnRlbnQoaHRtbF83MGJlMmM4YWMyZTY0ZTAzYTZjM2JjZGQ1YTEwNzczZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMGZlYTdiMTFjMGU0MzM2YWMxNGRjMTBmYWNjMWU3ZC5iaW5kUG9wdXAocG9wdXBfYmY1NTZlNTlhMDJmNDg5YjlkNmZhMGM1ZWViYzhiMGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2ZTA0ZTdlYzZkNzRhMWJiMzczZDU0ZGQ4MzcyNjJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU3OTczMjIsIC03My45NjYwMzMwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGIyMWEyYjRjYThjNDIzODk0NTc1YjUyMmJiOGVkNTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jODAyM2NjYmMxNzE0MTBjYWQwZDViZjNkMWI2MTYxNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzgwMjNjY2JjMTcxNDEwY2FkMGQ1YmYzZDFiNjE2MTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTUgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMzY8YnI+IG5ldCBkZXBhcnR1cmVzOiAyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBiMjFhMmI0Y2E4YzQyMzg5NDU3NWI1MjJiYjhlZDUyLnNldENvbnRlbnQoaHRtbF9jODAyM2NjYmMxNzE0MTBjYWQwZDViZjNkMWI2MTYxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNmUwNGU3ZWM2ZDc0YTFiYjM3M2Q1NGRkODM3MjYyZS5iaW5kUG9wdXAocG9wdXBfMGIyMWEyYjRjYThjNDIzODk0NTc1YjUyMmJiOGVkNTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjOTViODdiMjE0YTQwOWFiYzhlZGRiYWU3MGZiYTk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE0OTQ4MDcsIC03NC4wMDIzNDQ4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3ODJjOWVjMjVkZjQ0Njg4Y2QzMjBjMGIzYWI3MWQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDQ2ZjQwM2Y2NzU4NGJiZGE2MTRkYmU5OTc2YjEwN2IgPSAkKGA8ZGl2IGlkPSJodG1sXzA0NmY0MDNmNjc1ODRiYmRhNjE0ZGJlOTk3NmIxMDdiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmUgU3QgJiBXb3J0aCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjMyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTA2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3ODJjOWVjMjVkZjQ0Njg4Y2QzMjBjMGIzYWI3MWQwLnNldENvbnRlbnQoaHRtbF8wNDZmNDAzZjY3NTg0YmJkYTYxNGRiZTk5NzZiMTA3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Yzk1Yjg3YjIxNGE0MDlhYmM4ZWRkYmFlNzBmYmE5OC5iaW5kUG9wdXAocG9wdXBfZjc4MmM5ZWMyNWRmNDQ2ODhjZDMyMGMwYjNhYjcxZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2MzI1N2NjNjUwYjRjYTI4NDNkNzNjYzU1YmQ4Nzk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEyNzMyNjYsIC03NC4wMDQ2MDczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2NzEwZjQzZDFkNDRhMjQ5NmY2MzkwMWY5NDExYzdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmJkMWQ4ODQyYjczNGZhOTk1ZDliZGZiNGI2ZjQyOWIgPSAkKGA8ZGl2IGlkPSJodG1sXzZiZDFkODg0MmI3MzRmYTk5NWQ5YmRmYjRiNmY0MjliIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmUgU3QgJiBDaGFtYmVycyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzM2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTY3MTBmNDNkMWQ0NGEyNDk2ZjYzOTAxZjk0MTFjN2Iuc2V0Q29udGVudChodG1sXzZiZDFkODg0MmI3MzRmYTk5NWQ5YmRmYjRiNmY0MjliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2MzI1N2NjNjUwYjRjYTI4NDNkNzNjYzU1YmQ4Nzk1LmJpbmRQb3B1cChwb3B1cF8xNjcxMGY0M2QxZDQ0YTI0OTZmNjM5MDFmOTQxMWM3YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM5YTYxOGIxM2NlNGU0M2E1NzczYWQzNjBkY2IzNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDk3MTc3NTMsIC03NC4wMDI5NTAzNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC02LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDUzYTQwYTVmYjA0OTVkOGM5YmRkNjE1NDIxMjlhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJiNTVmY2ZkMDE1OTRiZjdhYmNmZTEyYTU0OWEyMDYxID0gJChgPGRpdiBpZD0iaHRtbF8yYjU1ZmNmZDAxNTk0YmY3YWJjZmUxMmE1NDlhMjA2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyNiBTdCAmIDEwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDI2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTIwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkNTNhNDBhNWZiMDQ5NWQ4YzliZGQ2MTU0MjEyOWExLnNldENvbnRlbnQoaHRtbF8yYjU1ZmNmZDAxNTk0YmY3YWJjZmUxMmE1NDlhMjA2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYzlhNjE4YjEzY2U0ZTQzYTU3NzNhZDM2MGRjYjM0YS5iaW5kUG9wdXAocG9wdXBfNWQ1M2E0MGE1ZmIwNDk1ZDhjOWJkZDYxNTQyMTI5YTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlYTUzMTJiMzBjZDQ2YTQ5NmE1YjZiMzBhNWRiZjJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEwNDQ1NTQsIC03My45NjUyNTA2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE2N2Q0MDRmYWUyNGJlYzg3MDFlZGYxMWZlZjkzNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOGU3NTAxNTNhNDQ0NTBlYmE5ZGFhMWVhMDJkMGE4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMThlNzUwMTUzYTQ0NDUwZWJhOWRhYTFlYTAyZDBhODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2Fkd2F5ICYgQmVycnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Njxicj4gbmV0IGRlcGFydHVyZXM6IDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE2N2Q0MDRmYWUyNGJlYzg3MDFlZGYxMWZlZjkzNjguc2V0Q29udGVudChodG1sXzE4ZTc1MDE1M2E0NDQ1MGViYTlkYWExZWEwMmQwYTg3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlYTUzMTJiMzBjZDQ2YTQ5NmE1YjZiMzBhNWRiZjJlLmJpbmRQb3B1cChwb3B1cF81MTY3ZDQwNGZhZTI0YmVjODcwMWVkZjExZmVmOTM2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDg0Njg4YmRhZjllNDczNTkxOWM1YjBiYTczMjU1NzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTIyMTU4OSwgLTczLjk4NDI4NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTc1N2Q5OTM2ZTA2NDRkMjk3ZWRjYWNlMWMwZTE3MGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTAwYzhlY2Q2ZGM0NjJjYWZiMTM5OWVlNzI3OWRiNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmUwMGM4ZWNkNmRjNDYyY2FmYjEzOTllZTcyNzlkYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkR1ZmZpZWxkIFN0ICYgV2lsbG91Z2hieSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMzLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Njxicj4gbmV0IGRlcGFydHVyZXM6IC02Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNzU3ZDk5MzZlMDY0NGQyOTdlZGNhY2UxYzBlMTcwZS5zZXRDb250ZW50KGh0bWxfZmUwMGM4ZWNkNmRjNDYyY2FmYjEzOTllZTcyNzlkYjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDg0Njg4YmRhZjllNDczNTkxOWM1YjBiYTczMjU1NzMuYmluZFBvcHVwKHBvcHVwX2U3NTdkOTkzNmUwNjQ0ZDI5N2VkY2FjZTFjMGUxNzBlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZjBlOWM1OWUxZWI0Mzg2OTNmZjRlNWE2NTliYTUzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NzYwMTI3LCAtNzMuOTkzNDQ1NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4YzYzNzc2OTdhYTRiMTFiN2IyOWZkMjQzODBkMjk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTlmNjI1NzhlZjhhNDFjNzg5MGI1NjI4Mzc0YmIwZmQgPSAkKGA8ZGl2IGlkPSJodG1sX2U5ZjYyNTc4ZWY4YTQxYzc4OTBiNTYyODM3NGJiMGZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGFyayBTdCAmIEhlbnJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMjguMDxicj4gdG90YWwgYXJyaXZhbHM6IDE4Mjxicj4gbmV0IGRlcGFydHVyZXM6IDU0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4YzYzNzc2OTdhYTRiMTFiN2IyOWZkMjQzODBkMjk2LnNldENvbnRlbnQoaHRtbF9lOWY2MjU3OGVmOGE0MWM3ODkwYjU2MjgzNzRiYjBmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZjBlOWM1OWUxZWI0Mzg2OTNmZjRlNWE2NTliYTUzZS5iaW5kUG9wdXAocG9wdXBfYjhjNjM3NzY5N2FhNGIxMWI3YjI5ZmQyNDM4MGQyOTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwMzFhNGM2NDkxYjRiNWM5ZTE5MGYxYzRkYTg5NmI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk1MDY1LCAtNzMuOTg3MTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0NmFkMjE5MDRhMDRmNWU4ODRkODNmYzcxODk3Yzk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmU5ZWRhM2ZjODNkNGRlYzg4MDk3NmViNTc5ZjYwYmMgPSAkKGA8ZGl2IGlkPSJodG1sXzJlOWVkYTNmYzgzZDRkZWM4ODA5NzZlYjU3OWY2MGJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KYXkgU3QgJiBUZWNoIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNjcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTk3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0NmFkMjE5MDRhMDRmNWU4ODRkODNmYzcxODk3Yzk1LnNldENvbnRlbnQoaHRtbF8yZTllZGEzZmM4M2Q0ZGVjODgwOTc2ZWI1NzlmNjBiYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MDMxYTRjNjQ5MWI0YjVjOWUxOTBmMWM0ZGE4OTZiOS5iaW5kUG9wdXAocG9wdXBfZjQ2YWQyMTkwNGEwNGY1ZTg4NGQ4M2ZjNzE4OTdjOTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhkYTUyYzRhOTA2MjRmYjM5NzA1MGRjNTgyMDczZTNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIyOTkyMDgsIC03My45Nzk5NTQ2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNi4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmZGMyZjNjOTViZDQwNDA4YTUyYWUwOWRlODk5MTk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDlmZmE2ZjBkZDg2NGE2Y2IxMzE5ZWI5NGEwY2YwYTUgPSAkKGA8ZGl2IGlkPSJodG1sXzA5ZmZhNmYwZGQ4NjRhNmNiMTMxOWViOTRhMGNmMGE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDUgU3QgJiBBdmVudWUgQzxicj4gdG90YWwgZGVwYXJ0dXJlczogMzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE1NTxicj4gbmV0IGRlcGFydHVyZXM6IDEyMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZmRjMmYzYzk1YmQ0MDQwOGE1MmFlMDlkZTg5OTE5Ni5zZXRDb250ZW50KGh0bWxfMDlmZmE2ZjBkZDg2NGE2Y2IxMzE5ZWI5NGEwY2YwYTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGRhNTJjNGE5MDYyNGZiMzk3MDUwZGM1ODIwNzNlM2QuYmluZFBvcHVwKHBvcHVwXzRmZGMyZjNjOTViZDQwNDA4YTUyYWUwOWRlODk5MTk2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYWQ5MTliMzMxYWI0OTYxYWNlNTJmOTg2Mjg5ZjRmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNTIxMzExLCAtNzMuOTc3Njg3NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMTQyMjNiMTZmODg0ZTcxYTk1MjlmZjFiNDc5OGVjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwMWI4Y2I5MjAzZjQwYjg4Y2ZlNDU0NmMzMGE1MWIyID0gJChgPGRpdiBpZD0iaHRtbF9iMDFiOGNiOTIwM2Y0MGI4OGNmZTQ1NDZjMzBhNTFiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA5IFN0ICYgQXZlbnVlIEM8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzE0MjIzYjE2Zjg4NGU3MWE5NTI5ZmYxYjQ3OThlYzguc2V0Q29udGVudChodG1sX2IwMWI4Y2I5MjAzZjQwYjg4Y2ZlNDU0NmMzMGE1MWIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJhZDkxOWIzMzFhYjQ5NjFhY2U1MmY5ODYyODlmNGZkLmJpbmRQb3B1cChwb3B1cF8zMTQyMjNiMTZmODg0ZTcxYTk1MjlmZjFiNDc5OGVjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTMwNDI0M2Q2MjA5NDU0ZWFmZmQ3MDdjYmQ0ZTVkNTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODgwNzAwMywgLTczLjk4NDEwNjM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWJiMjQzNjcxNWUyNGI2ZGI5Yzk3ZjZiNGVlYjUxZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZmZjNTkwMzRhYTM0OGIwYjlkYzAxNTUxM2JiMTVmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWZmYzU5MDM0YWEzNDhiMGI5ZGMwMTU1MTNiYjE1ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJvbmQgU3QgJiBTY2hlcm1lcmhvcm4gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzM8YnI+IG5ldCBkZXBhcnR1cmVzOiA1NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YmIyNDM2NzE1ZTI0YjZkYjljOTdmNmI0ZWViNTFmZS5zZXRDb250ZW50KGh0bWxfZWZmYzU5MDM0YWEzNDhiMGI5ZGMwMTU1MTNiYjE1ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTMwNDI0M2Q2MjA5NDU0ZWFmZmQ3MDdjYmQ0ZTVkNTEuYmluZFBvcHVwKHBvcHVwXzViYjI0MzY3MTVlMjRiNmRiOWM5N2Y2YjRlZWI1MWZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNTdiODYzNWE5NmI0MmYwOWM0YTc3NTUyMzQ4NDY1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MDM0MjQyMywgLTczLjk1NTc2ODkzOTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmNjA1YjI0NmQ3YzQ5NzRiZmExNWRlYTNmNGEwNmJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWMxOTdlZDViNDEyNDE5YWE0NzNmYzRlZDFkMjdiYjMgPSAkKGA8ZGl2IGlkPSJodG1sXzljMTk3ZWQ1YjQxMjQxOWFhNDczZmM0ZWQxZDI3YmIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZWZmZXJ0cyBQbCAmIEZyYW5rbGluIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkwPGJyPiBuZXQgZGVwYXJ0dXJlczogNTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2Y2MDViMjQ2ZDdjNDk3NGJmYTE1ZGVhM2Y0YTA2YmYuc2V0Q29udGVudChodG1sXzljMTk3ZWQ1YjQxMjQxOWFhNDczZmM0ZWQxZDI3YmIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1N2I4NjM1YTk2YjQyZjA5YzRhNzc1NTIzNDg0NjUyLmJpbmRQb3B1cChwb3B1cF83ZjYwNWIyNDZkN2M0OTc0YmZhMTVkZWEzZjRhMDZiZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTQ0MGQzZjdiZjAxNDA1YmJhYjk3MWU5MWRkYzZkZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODQxNTc0OCwgLTczLjk2OTIyMjczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWQ1YjNlNzg4YmI0N2M0YWRlYmNlYzkyMmY5MTVhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwYTY4ZWE1OTAwNTRiYjE5YzVmMGQwOWI5MzlhYzNkID0gJChgPGRpdiBpZD0iaHRtbF8zMGE2OGVhNTkwMDU0YmIxOWM1ZjBkMDliOTM5YWMzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnVsdG9uIFN0ICYgQ2xlcm1vbnQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjA8YnI+IG5ldCBkZXBhcnR1cmVzOiA0NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YWQ1YjNlNzg4YmI0N2M0YWRlYmNlYzkyMmY5MTVhMi5zZXRDb250ZW50KGh0bWxfMzBhNjhlYTU5MDA1NGJiMTljNWYwZDA5YjkzOWFjM2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTQ0MGQzZjdiZjAxNDA1YmJhYjk3MWU5MWRkYzZkZTAuYmluZFBvcHVwKHBvcHVwXzVhZDViM2U3ODhiYjQ3YzRhZGViY2VjOTIyZjkxNWEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NDU4ZmNjMTBjZjY0YzczYjM0NmI4ZDc5NTI3MjFiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MTY1MTgzLCAtNzMuOTk5OTc4NTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4ZTFmNDg0M2JhMzRmYWE4Y2FjZmQyYWZlZGJjMGYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWRmN2E3NTE3NTRiNGVjYmEyOGQ2ZjFkZjhmODVjNDQgPSAkKGA8ZGl2IGlkPSJodG1sXzVkZjdhNzUxNzU0YjRlY2JhMjhkNmYxZGY4Zjg1YzQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BdGxhbnRpYyBBdmUgJiBGdXJtYW4gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2MTxicj4gbmV0IGRlcGFydHVyZXM6IDEwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4ZTFmNDg0M2JhMzRmYWE4Y2FjZmQyYWZlZGJjMGYzLnNldENvbnRlbnQoaHRtbF81ZGY3YTc1MTc1NGI0ZWNiYTI4ZDZmMWRmOGY4NWM0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NDU4ZmNjMTBjZjY0YzczYjM0NmI4ZDc5NTI3MjFiYS5iaW5kUG9wdXAocG9wdXBfMDhlMWY0ODQzYmEzNGZhYThjYWNmZDJhZmVkYmMwZjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjY2YwYmQ1MzBjODQ2ZTBhMzdlNjcyNDA1NTg2ZmUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg4NTE1MzQsIC03My45NjQ3NjI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYTdiYmYxNjVkY2Y0NDEyOTA5ZWQzYzIxNTc3YzFiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxNzQ0MTY4ZWMzZDQ3YTA5Y2VmYzc1NjRkZDg1NmUxID0gJChgPGRpdiBpZD0iaHRtbF9kMTc0NDE2OGVjM2Q0N2EwOWNlZmM3NTY0ZGQ4NTZlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGFmYXlldHRlIEF2ZSAmIFN0IEphbWVzIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI3PGJyPiBuZXQgZGVwYXJ0dXJlczogODIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmE3YmJmMTY1ZGNmNDQxMjkwOWVkM2MyMTU3N2MxYmUuc2V0Q29udGVudChodG1sX2QxNzQ0MTY4ZWMzZDQ3YTA5Y2VmYzc1NjRkZDg1NmUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjY2YwYmQ1MzBjODQ2ZTBhMzdlNjcyNDA1NTg2ZmUzLmJpbmRQb3B1cChwb3B1cF9mYTdiYmYxNjVkY2Y0NDEyOTA5ZWQzYzIxNTc3YzFiZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGYwN2UwM2M3ZmJmNDcxOTkyMThmZjRjYzg4NjgwMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkyNjA4MSwgLTczLjk4MTc4MDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjIzOGRkMGEwNDU0ZjlhODgzMTg5YTg0NzExMmRiMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmMmQ3NDg1YWYwYzQxZTY4ZWIyYzQ4ODFlMDQ5ZGE1ID0gJChgPGRpdiBpZD0iaHRtbF8xZjJkNzQ4NWFmMGM0MWU2OGViMmM0ODgxZTA0OWRhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGl0dCBTdCAmIFN0YW50b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ3PGJyPiBuZXQgZGVwYXJ0dXJlczogNDIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTYyMzhkZDBhMDQ1NGY5YTg4MzE4OWE4NDcxMTJkYjAuc2V0Q29udGVudChodG1sXzFmMmQ3NDg1YWYwYzQxZTY4ZWIyYzQ4ODFlMDQ5ZGE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhmMDdlMDNjN2ZiZjQ3MTk5MjE4ZmY0Y2M4ODY4MDE2LmJpbmRQb3B1cChwb3B1cF8xNjIzOGRkMGEwNDU0ZjlhODgzMTg5YTg0NzExMmRiMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWJiZjg1ZmE4MjcyNDY1N2FiMmM2NzkzMjlkM2VlYWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjAxOTU3NiwgLTczLjk4OTk3ODI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzhkOTRiZTkwZDhlNDQyMWE4NzI2NzQ3NjZmNDc0OWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTZhMTEyN2VmZGU0ZTU3ODUyNmIwYzdiNDUzZGRhOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNzE2YTExMjdlZmRlNGU1Nzg1MjZiMGM3YjQ1M2RkYTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFsbGVuIFN0ICYgUml2aW5ndG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxMDxicj4gbmV0IGRlcGFydHVyZXM6IDQ5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4ZDk0YmU5MGQ4ZTQ0MjFhODcyNjc0NzY2ZjQ3NDljLnNldENvbnRlbnQoaHRtbF83MTZhMTEyN2VmZGU0ZTU3ODUyNmIwYzdiNDUzZGRhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYmJmODVmYTgyNzI0NjU3YWIyYzY3OTMyOWQzZWVhZi5iaW5kUG9wdXAocG9wdXBfNzhkOTRiZTkwZDhlNDQyMWE4NzI2NzQ3NjZmNDc0OWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlYmY0ODk4ZGRjNDQ5MGJiNjZhOTdjZTkwMjQ2NzdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQwMzQzMjAwMDAwMDA1LCAtNzMuOTg5NTUxMDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC04Ny40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlZjI4MjM4ZGM1YTQ1NGFhNGRhZTc2N2I2NGFlMzJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQ5NDg4MmJjMGJkNDNmZGIzMGQ1OGY1ZTc3ZWQxNzEgPSAkKGA8ZGl2IGlkPSJodG1sXzc0OTQ4ODJiYzBiZDQzZmRiMzBkNThmNWU3N2VkMTcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIEUgMjIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwOTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDM0OTxicj4gbmV0IGRlcGFydHVyZXM6IC0xNzQ5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlZjI4MjM4ZGM1YTQ1NGFhNGRhZTc2N2I2NGFlMzJhLnNldENvbnRlbnQoaHRtbF83NDk0ODgyYmMwYmQ0M2ZkYjMwZDU4ZjVlNzdlZDE3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZWJmNDg5OGRkYzQ0OTBiYjY2YTk3Y2U5MDI0Njc3Zi5iaW5kUG9wdXAocG9wdXBfNWVmMjgyMzhkYzVhNDU0YWE0ZGFlNzY3YjY0YWUzMmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhNjZjNTM4MzgyZDQxOTZhYWQxNTE4NmUzY2IyYTk3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5MzIzLCAtNzQuMDA4MTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDBlNTE4MzFmMWMxNDRlM2FhM2VkNzIwY2Q5MDk5MDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjJhYzI5ZGY2OGM0MTUxOTFmYThmYWE3ZTc4MDI5OCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGYyYWMyOWRmNjhjNDE1MTkxZmE4ZmFhN2U3ODAyOTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhc2hpbmd0b24gU3QgJiBHYW5zZXZvb3J0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDMwODxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDBlNTE4MzFmMWMxNDRlM2FhM2VkNzIwY2Q5MDk5MDYuc2V0Q29udGVudChodG1sX2RmMmFjMjlkZjY4YzQxNTE5MWZhOGZhYTdlNzgwMjk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVhNjZjNTM4MzgyZDQxOTZhYWQxNTE4NmUzY2IyYTk3LmJpbmRQb3B1cChwb3B1cF8wMGU1MTgzMWYxYzE0NGUzYWEzZWQ3MjBjZDkwOTkwNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWY5YzQ5MDU0YzU0NGUzNmE0OTI4YzQ3NjAyOGM0MzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTUxMjg0NSwgLTczLjk5NTk1MDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODBmMDU1MjRlMDM0NWRjYTE1MTg3ZTM0ZTY0N2Y0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjNjE4MjQxNzg4ODQ5NzdhYTg2ZjE1MjIyNmM1ODFlID0gJChgPGRpdiBpZD0iaHRtbF83YzYxODI0MTc4ODg0OTc3YWE4NmYxNTIyMjZjNTgxZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGlja3MgU3QgJiBNb250YWd1ZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyMzxicj4gbmV0IGRlcGFydHVyZXM6IDYwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4MGYwNTUyNGUwMzQ1ZGNhMTUxODdlMzRlNjQ3ZjRjLnNldENvbnRlbnQoaHRtbF83YzYxODI0MTc4ODg0OTc3YWE4NmYxNTIyMjZjNTgxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZjljNDkwNTRjNTQ0ZTM2YTQ5MjhjNDc2MDI4YzQzNS5iaW5kUG9wdXAocG9wdXBfMDgwZjA1NTI0ZTAzNDVkY2ExNTE4N2UzNGU2NDdmNGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViMDc1OTgzODMzZDRjNmFiODIwMDQzYjdkNzg1ZGVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAwNDY5LCAtNzMuOTkxNDU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGY1MDg4YjExZWE1NDFlNDkxMTA0OTc2ZmQxOTI2ZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOWYxMDk4ZDY5NmU0ZTcyYmM3YjI3NWNmOTJlNTI5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjlmMTA5OGQ2OTZlNGU3MmJjN2IyNzVjZjkyZTUyOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhlbnJ5IFN0ICYgUG9wbGFyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZjUwODhiMTFlYTU0MWU0OTExMDQ5NzZmZDE5MjZlYi5zZXRDb250ZW50KGh0bWxfMjlmMTA5OGQ2OTZlNGU3MmJjN2IyNzVjZjkyZTUyOTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWIwNzU5ODM4MzNkNGM2YWI4MjAwNDNiN2Q3ODVkZWEuYmluZFBvcHVwKHBvcHVwXzhmNTA4OGIxMWVhNTQxZTQ5MTEwNDk3NmZkMTkyNmViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMWE0ZTkxMTAzZmQ0MWQ5ODRhNTZlOTEyZTEwZWI2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMDc2MjI4LCAtNzMuOTk0MDAzOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NTg5MWQ3ZmUxYzg0NmRmOTM5YTE1ZGQ4ZmZlMTg4YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwZjMyZTBhZWJiYzQxOTFiMjU0NWYxOTdhYmFjOWUzID0gJChgPGRpdiBpZD0iaHRtbF9lMGYzMmUwYWViYmM0MTkxYjI1NDVmMTk3YWJhYzllMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFya2V0IFN0ICYgQ2hlcnJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTMzPGJyPiBuZXQgZGVwYXJ0dXJlczogNzkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTU4OTFkN2ZlMWM4NDZkZjkzOWExNWRkOGZmZTE4OGEuc2V0Q29udGVudChodG1sX2UwZjMyZTBhZWJiYzQxOTFiMjU0NWYxOTdhYmFjOWUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ExYTRlOTExMDNmZDQxZDk4NGE1NmU5MTJlMTBlYjYxLmJpbmRQb3B1cChwb3B1cF85NTg5MWQ3ZmUxYzg0NmRmOTM5YTE1ZGQ4ZmZlMTg4YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQ3Zjc4ZGUzNDgwNDkwNmE2OTFiZjMxM2YyNTEzNmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTA2NDk1LCAtNzMuOTU2NDMxMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0NmFjYzM4MjBmOTQ3MjFhZDgwOWYxYTY5MzEyZjM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjE4ODQyNWU1OWE0NDk3Zjk0N2M5YzQ5OWJhNjcxMmEgPSAkKGA8ZGl2IGlkPSJodG1sXzIxODg0MjVlNTlhNDQ5N2Y5NDdjOWM0OTliYTY3MTJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZUthbGIgQXZlICYgU2tpbGxtYW4gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2MTxicj4gbmV0IGRlcGFydHVyZXM6IDQ0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0NmFjYzM4MjBmOTQ3MjFhZDgwOWYxYTY5MzEyZjM5LnNldENvbnRlbnQoaHRtbF8yMTg4NDI1ZTU5YTQ0OTdmOTQ3YzljNDk5YmE2NzEyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NDdmNzhkZTM0ODA0OTA2YTY5MWJmMzEzZjI1MTM2ZS5iaW5kUG9wdXAocG9wdXBfODQ2YWNjMzgyMGY5NDcyMWFkODA5ZjFhNjkzMTJmMzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlNWZlZjkxMTkwYzRhYjZhNjg5OTcyMDY2ZmRkOTMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIwNjY0NDIsIC03My45ODUxNzk3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDBmNzlhMGQ0MDA4NDhiNmIyMGFkOWUwMDFiMDI2YWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDZiNGMyZjIxZjA0NDU2OGM4OTgzZTMyNmU0ZGQ3YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjQ2YjRjMmYyMWYwNDQ1NjhjODk4M2UzMjZlNGRkN2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN1ZmZvbGsgU3QgJiBTdGFudG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwNzxicj4gbmV0IGRlcGFydHVyZXM6IDU0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwZjc5YTBkNDAwODQ4YjZiMjBhZDllMDAxYjAyNmFiLnNldENvbnRlbnQoaHRtbF8yNDZiNGMyZjIxZjA0NDU2OGM4OTgzZTMyNmU0ZGQ3Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZTVmZWY5MTE5MGM0YWI2YTY4OTk3MjA2NmZkZDkzMS5iaW5kUG9wdXAocG9wdXBfMDBmNzlhMGQ0MDA4NDhiNmIyMGFkOWUwMDFiMDI2YWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczNjZmOTRmMTM0NDQ2YmQ4ZGE0ZjdlM2ViZDYzYTZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIyMjgwODcsIC03My45NzY2ODcwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2M2QzNGFjODg4MjQ3ZTg4ZjE3MWRiYWEzMzYyYTMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTkwYmZhMzFlOTBiNGQ3ZmI4NGFmMTNlYTlkOTRjMzYgPSAkKGA8ZGl2IGlkPSJodG1sX2U5MGJmYTMxZTkwYjRkN2ZiODRhZjEzZWE5ZDk0YzM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDYgU3QgJiBBdmVudWUgRDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY0PGJyPiBuZXQgZGVwYXJ0dXJlczogMTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjYzZDM0YWM4ODgyNDdlODhmMTcxZGJhYTMzNjJhMzEuc2V0Q29udGVudChodG1sX2U5MGJmYTMxZTkwYjRkN2ZiODRhZjEzZWE5ZDk0YzM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczNjZmOTRmMTM0NDQ2YmQ4ZGE0ZjdlM2ViZDYzYTZmLmJpbmRQb3B1cChwb3B1cF9mNjNkMzRhYzg4ODI0N2U4OGYxNzFkYmFhMzM2MmEzMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTU0NmVkNDhhNzZlNDdlMTgyOWVkYzI2MDAxMTg2MzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTU4MTU1MDAwMDAwMDUsIC03My45OTQyMjM2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTFkNTk4ODNjZWYxNGNlM2I0YTVjN2Y3NmQ3ZTljZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZmI5NDVjYTkwMzM0ZDEyYjVmNDQ2OWNiOGE4MmQwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfN2ZiOTQ1Y2E5MDMzNGQxMmI1ZjQ0NjljYjhhODJkMDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZvcnN5dGggU3QgJiBDYW5hbCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjI3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNTM8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MWQ1OTg4M2NlZjE0Y2UzYjRhNWM3Zjc2ZDdlOWNlZi5zZXRDb250ZW50KGh0bWxfN2ZiOTQ1Y2E5MDMzNGQxMmI1ZjQ0NjljYjhhODJkMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTU0NmVkNDhhNzZlNDdlMTgyOWVkYzI2MDAxMTg2MzMuYmluZFBvcHVwKHBvcHVwXzkxZDU5ODgzY2VmMTRjZTNiNGE1YzdmNzZkN2U5Y2VmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZmQ4YmY5ODI0ZGM0ZTNhOGQyNjU0OGRjOTlhZWU0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMjgxODU4LCAtNzMuOTg3NjU3NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC04LjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OTA3OTg1NTRiYWE0MzNlOTU4ZmNhMzBkNWFjNzIzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlYTJkNzliYTZmMzRiOWFiZGIyYWM1MTRjZjA2YmQxID0gJChgPGRpdiBpZD0iaHRtbF80ZWEyZDc5YmE2ZjM0YjlhYmRiMmFjNTE0Y2YwNmJkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVhcmwgU3QgJiBBbmNob3JhZ2UgUGw8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE4NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTYyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5MDc5ODU1NGJhYTQzM2U5NThmY2EzMGQ1YWM3MjNjLnNldENvbnRlbnQoaHRtbF80ZWEyZDc5YmE2ZjM0YjlhYmRiMmFjNTE0Y2YwNmJkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZmQ4YmY5ODI0ZGM0ZTNhOGQyNjU0OGRjOTlhZWU0ZC5iaW5kUG9wdXAocG9wdXBfODkwNzk4NTU0YmFhNDMzZTk1OGZjYTMwZDVhYzcyM2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkMzg4YmI0YzMwZTQxZDM5ZjAxY2ViNzE0OGJmNGFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA0NzE3NywgLTc0LjAwOTI2MDI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTYuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZiZjI1OTJlOGE0OTQwOTViMTY1ZWYxNzRlNDkzMTdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzIxZTAzZWY1MGUwNDY2MWE1M2M2ZTQwY2Y1MjBkNGMgPSAkKGA8ZGl2IGlkPSJodG1sX2MyMWUwM2VmNTBlMDQ2NjFhNTNjNmU0MGNmNTIwZDRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZWFybCBTdCAmIEhhbm92ZXIgU3F1YXJlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MjYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTMzOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYmYyNTkyZThhNDk0MDk1YjE2NWVmMTc0ZTQ5MzE3Yy5zZXRDb250ZW50KGh0bWxfYzIxZTAzZWY1MGUwNDY2MWE1M2M2ZTQwY2Y1MjBkNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2QzODhiYjRjMzBlNDFkMzlmMDFjZWI3MTQ4YmY0YWMuYmluZFBvcHVwKHBvcHVwX2ZiZjI1OTJlOGE0OTQwOTViMTY1ZWYxNzRlNDkzMTdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jN2QwZWEwNWNkN2Y0MjcyOTkxNjhmNmUwMTFlZTM5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NzUzNDA2LCAtNzMuOTcyNjUxODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTJiYzhjMWI1NjU0MDVlYWEwNDg5Yjk3ZDZlNzU5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2ZjA5ZjY2ZTJhMjQ0OWFhZDFlMzE5NTE5Y2E3YjNkID0gJChgPGRpdiBpZD0iaHRtbF80NmYwOWY2NmUyYTI0NDlhYWQxZTMxOTUxOWNhN2IzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q3VtYmVybGFuZCBTdCAmIExhZmF5ZXR0ZSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNTJiYzhjMWI1NjU0MDVlYWEwNDg5Yjk3ZDZlNzU5OS5zZXRDb250ZW50KGh0bWxfNDZmMDlmNjZlMmEyNDQ5YWFkMWUzMTk1MTljYTdiM2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzdkMGVhMDVjZDdmNDI3Mjk5MTY4ZjZlMDExZWUzOTAuYmluZFBvcHVwKHBvcHVwX2Q1MmJjOGMxYjU2NTQwNWVhYTA0ODliOTdkNmU3NTk5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNWRhOGFjM2YxNjA0YmRkYThiNTQ1N2Y4MmE3YjUyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjkxMjI0LCAtNzQuMDEwMjAyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZmNlYWRjZTIwNWI0ZDFmOWEzOGJiYzdkOTIyY2Y2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwZjJjNmRkODEzMjRhM2RiYTIxY2ZkMDFhNDM1ZGZhID0gJChgPGRpdiBpZD0iaHRtbF85MGYyYzZkZDgxMzI0YTNkYmEyMWNmZDAxYTQzNWRmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmFyY2xheSBTdCAmIENodXJjaCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDU1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1MTI8YnI+IG5ldCBkZXBhcnR1cmVzOiA1Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZmNlYWRjZTIwNWI0ZDFmOWEzOGJiYzdkOTIyY2Y2ZS5zZXRDb250ZW50KGh0bWxfOTBmMmM2ZGQ4MTMyNGEzZGJhMjFjZmQwMWE0MzVkZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzVkYThhYzNmMTYwNGJkZGE4YjU0NTdmODJhN2I1MjAuYmluZFBvcHVwKHBvcHVwXzBmY2VhZGNlMjA1YjRkMWY5YTM4YmJjN2Q5MjJjZjZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNDRlOWZlMmNlZDY0ZGEwOWNiMzkyN2RmM2RkYmMzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMjI0LCAtNzMuOTgyNTc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiODA0MjU1NWExMjRlY2ZhODZhMGVkYjdhYjkyMGE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTI1YTdkZTI3YTE1NGMzY2JiNTJiMTNhY2RhZThkYmUgPSAkKGA8ZGl2IGlkPSJodG1sXzUyNWE3ZGUyN2ExNTRjM2NiYjUyYjEzYWNkYWU4ZGJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gcm9udCBTdCAmIEdvbGQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmI4MDQyNTU1YTEyNGVjZmE4NmEwZWRiN2FiOTIwYTUuc2V0Q29udGVudChodG1sXzUyNWE3ZGUyN2ExNTRjM2NiYjUyYjEzYWNkYWU4ZGJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0NGU5ZmUyY2VkNjRkYTA5Y2IzOTI3ZGYzZGRiYzNjLmJpbmRQb3B1cChwb3B1cF8yYjgwNDI1NTVhMTI0ZWNmYTg2YTBlZGI3YWI5MjBhNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGNhNTlkNmRjODkyNDdlMDk2MTM5OGI5YTVkMGIwMzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTU4MDcwNSwgLTczLjk3MzU1NTY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWYxNGI0MTcxMjc0YjdhOGY4NWUxNjkxMzlhYjNjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhZTBhZDI0Y2YxOTRkZDc5MmYyM2MzNWYzYWU2MWQ2ID0gJChgPGRpdiBpZD0iaHRtbF82YWUwYWQyNGNmMTk0ZGQ3OTJmMjNjMzVmM2FlNjFkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FybHRvbiBBdmUgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyMTxicj4gbmV0IGRlcGFydHVyZXM6IDkwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhZjE0YjQxNzEyNzRiN2E4Zjg1ZTE2OTEzOWFiM2MzLnNldENvbnRlbnQoaHRtbF82YWUwYWQyNGNmMTk0ZGQ3OTJmMjNjMzVmM2FlNjFkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kY2E1OWQ2ZGM4OTI0N2UwOTYxMzk4YjlhNWQwYjAzNS5iaW5kUG9wdXAocG9wdXBfZmFmMTRiNDE3MTI3NGI3YThmODVlMTY5MTM5YWIzYzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IyMTc0NTllNTFjNDQzMThiMjExYTU2YzExNDI2MWFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg3NjQ0ODQsIC03My45Njk2ODkwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljZjJmNTRhZjQ3MzQ4YjI5NDRiYzQwM2RiNzExZDA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQ1YTZmYTQ5YjMwNGU5NmI5ODJkOTFiODNmNjMyZTUgPSAkKGA8ZGl2IGlkPSJodG1sX2JkNWE2ZmE0OWIzMDRlOTZiOTgyZDkxYjgzZjYzMmU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGVybW9udCBBdmUgJiBMYWZheWV0dGUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Y2YyZjU0YWY0NzM0OGIyOTQ0YmM0MDNkYjcxMWQwNC5zZXRDb250ZW50KGh0bWxfYmQ1YTZmYTQ5YjMwNGU5NmI5ODJkOTFiODNmNjMyZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjIxNzQ1OWU1MWM0NDMxOGIyMTFhNTZjMTE0MjYxYWUuYmluZFBvcHVwKHBvcHVwXzljZjJmNTRhZjQ3MzQ4YjI5NDRiYzQwM2RiNzExZDA0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NWJlMWE3YmJkNDg0ZWFlYWE2NDU0MWZmOWE5N2M1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NTczMzk4LCAtNzMuOTcxMjk2NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4YzRhYTNlYTY2NjRmOWE4ZjEyZWYxZGYzMDc4YzczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQzODUwZjI5MmJkNDZmMzk0MmI5OWQ3MTc4NGEzMTggPSAkKGA8ZGl2IGlkPSJodG1sXzJkMzg1MGYyOTJiZDQ2ZjM5NDJiOTlkNzE3ODRhMzE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGVybW9udCBBdmUgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzg8YnI+IG5ldCBkZXBhcnR1cmVzOiA3Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGM0YWEzZWE2NjY0ZjlhOGYxMmVmMWRmMzA3OGM3My5zZXRDb250ZW50KGh0bWxfMmQzODUwZjI5MmJkNDZmMzk0MmI5OWQ3MTc4NGEzMTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDViZTFhN2JiZDQ4NGVhZWFhNjQ1NDFmZjlhOTdjNTIuYmluZFBvcHVwKHBvcHVwX2Q4YzRhYTNlYTY2NjRmOWE4ZjEyZWYxZGYzMDc4YzczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MzViNzIzZWIzNjU0YTVhOTAxN2I2ZjA4OGZiNGJiNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MDUxMywgLTczLjk4ODAzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlZDZkMzY4YmNlMTQ2NWI5NWVjODgxMDUyNzBjYWFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWFhN2NmYjUwOTEyNDg3ZGFjMTU0OGZiNzQzNjdlNWYgPSAkKGA8ZGl2IGlkPSJodG1sX2VhYTdjZmI1MDkxMjQ4N2RhYzE1NDhmYjc0MzY3ZTVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDU5IFN0ICYgMTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2Njxicj4gbmV0IGRlcGFydHVyZXM6IDMxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlZDZkMzY4YmNlMTQ2NWI5NWVjODgxMDUyNzBjYWFhLnNldENvbnRlbnQoaHRtbF9lYWE3Y2ZiNTA5MTI0ODdkYWMxNTQ4ZmI3NDM2N2U1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MzViNzIzZWIzNjU0YTVhOTAxN2I2ZjA4OGZiNGJiNi5iaW5kUG9wdXAocG9wdXBfMGVkNmQzNjhiY2UxNDY1Yjk1ZWM4ODEwNTI3MGNhYWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3ZTY0MTFiMjhmNDQ1NzZiNzU5Y2QwY2QyYTA0NTlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY1ODQ5NDEsIC03My45ODY5MDUwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0Y2UzYmE5ZjU0NTQ0OGM4Yjg5OTY5ZmUxNzNhNDE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTY5NzZiM2YwZmIzNGJkNzk4ZDliNjBlZDVmMDBiMmIgPSAkKGA8ZGl2IGlkPSJodG1sXzU2OTc2YjNmMGZiMzRiZDc5OGQ5YjYwZWQ1ZjAwYjJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDU0IFN0ICYgOSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQyPGJyPiBuZXQgZGVwYXJ0dXJlczogMzkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzRjZTNiYTlmNTQ1NDQ4YzhiODk5NjlmZTE3M2E0MTkuc2V0Q29udGVudChodG1sXzU2OTc2YjNmMGZiMzRiZDc5OGQ5YjYwZWQ1ZjAwYjJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3ZTY0MTFiMjhmNDQ1NzZiNzU5Y2QwY2QyYTA0NTlmLmJpbmRQb3B1cChwb3B1cF83NGNlM2JhOWY1NDU0NDhjOGI4OTk2OWZlMTczYTQxOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTlmMmFkNDZiMjEzNGQwYjgzMTZiNjg3ZGQ4MGIzYjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTc1NDgzNCwgLTc0LjAxMzIyMDY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMjAuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzllMjc2YmQxZDNiNTQ4YzI4NWVkZDQ1ZDk3NDNiMzJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWJlYWE3ZDVmN2ZjNDliM2I1ODc4NGNjZTliNDcwNTUgPSAkKGA8ZGl2IGlkPSJodG1sXzliZWFhN2Q1ZjdmYzQ5YjNiNTg3ODRjY2U5YjQ3MDU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IFN0ICYgQ2hhbWJlcnMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDg4OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDg1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTQwNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTI3NmJkMWQzYjU0OGMyODVlZGQ0NWQ5NzQzYjMyYy5zZXRDb250ZW50KGh0bWxfOWJlYWE3ZDVmN2ZjNDliM2I1ODc4NGNjZTliNDcwNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTlmMmFkNDZiMjEzNGQwYjgzMTZiNjg3ZGQ4MGIzYjEuYmluZFBvcHVwKHBvcHVwXzllMjc2YmQxZDNiNTQ4YzI4NWVkZDQ1ZDk3NDNiMzJjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Mjg2NjQyN2ZkN2U0MmMzYTYzYjlhMzRiYzM1MDU5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMTkwNywgLTc0LjAxMzk0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTkuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwNDVjZjdjZjQ3MTQ1NDg5NjdjM2RiMGQ3NWU3Y2ZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGY5ODAzNjQ0YjU5NGI3YjkxY2M3YzU1ZWU4M2NjNjEgPSAkKGA8ZGl2IGlkPSJodG1sXzBmOTgwMzY0NGI1OTRiN2I5MWNjN2M1NWVlODNjYzYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CdXMgU2xpcCAmIFN0YXRlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MDQ1Y2Y3Y2Y0NzE0NTQ4OTY3YzNkYjBkNzVlN2NmYi5zZXRDb250ZW50KGh0bWxfMGY5ODAzNjQ0YjU5NGI3YjkxY2M3YzU1ZWU4M2NjNjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTI4NjY0MjdmZDdlNDJjM2E2M2I5YTM0YmMzNTA1OWEuYmluZFBvcHVwKHBvcHVwXzQwNDVjZjdjZjQ3MTQ1NDg5NjdjM2RiMGQ3NWU3Y2ZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZWRiZmRiOGE5Yjk0ZTZhOGMzODViM2Y5ZWIyNDUyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNDY3NzIxLCAtNzMuOTg3ODM0MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTNkMTFjNjkzZTQ0ZTkwYjIyYzcxY2EyYjMzNTRlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkOWI0MWFiZjIwNDRhNGVhN2Q5ZjU2YzRiYTc0MjJjID0gJChgPGRpdiBpZD0iaHRtbF8xZDliNDFhYmYyMDQ0YTRlYTdkOWY1NmM0YmE3NDIyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAzIFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTY1PGJyPiBuZXQgZGVwYXJ0dXJlczogMzEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWEzZDExYzY5M2U0NGU5MGIyMmM3MWNhMmIzMzU0ZTguc2V0Q29udGVudChodG1sXzFkOWI0MWFiZjIwNDRhNGVhN2Q5ZjU2YzRiYTc0MjJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlZGJmZGI4YTliOTRlNmE4YzM4NWIzZjllYjI0NTJlLmJpbmRQb3B1cChwb3B1cF9lYTNkMTFjNjkzZTQ0ZTkwYjIyYzcxY2EyYjMzNTRlOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDAzYWI2MTc2ODgzNGJlYWE3ZTNkYWRhMmIyYjViNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDE0ODUxLCAtNzMuOTg2NTY5MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMjA3MjZkZDNlOGI0NTU5OTkzNjI3N2FlOGJlZjlhZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmZGVjNzM5MDViNTRjNzA5NDVjNmVkMGUzODc2YjQ4ID0gJChgPGRpdiBpZD0iaHRtbF9mZmRlYzczOTA1YjU0YzcwOTQ1YzZlZDBlMzg3NmI0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+WW9yayBTdCAmIEpheSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjYzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTAwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyMDcyNmRkM2U4YjQ1NTk5OTM2Mjc3YWU4YmVmOWFlLnNldENvbnRlbnQoaHRtbF9mZmRlYzczOTA1YjU0YzcwOTQ1YzZlZDBlMzg3NmI0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMDNhYjYxNzY4ODM0YmVhYTdlM2RhZGEyYjJiNWI3MC5iaW5kUG9wdXAocG9wdXBfZTIwNzI2ZGQzZThiNDU1OTk5MzYyNzdhZThiZWY5YWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzNmVmZWRjZjBlNzQ3MWI4YTE3YjU5ZjVhYTMxNzk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI2MjE3ODgsIC03My45ODM3OTg1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMzAuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDg1ZThkNWI3NTM0M2ZjYTBmYjYyZTExM2MyOTc4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlMDljMDMxNGI3YTQ2YTU4OTZlM2FjNDE0OTc4M2U2ID0gJChgPGRpdiBpZD0iaHRtbF9jZTA5YzAzMTRiN2E0NmE1ODk2ZTNhYzQxNDk3ODNlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA3IFN0ICYgQXZlbnVlIEE8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NzM8YnI+IG5ldCBkZXBhcnR1cmVzOiA2MDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQ4NWU4ZDViNzUzNDNmY2EwZmI2MmUxMTNjMjk3OGMuc2V0Q29udGVudChodG1sX2NlMDljMDMxNGI3YTQ2YTU4OTZlM2FjNDE0OTc4M2U2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzNmVmZWRjZjBlNzQ3MWI4YTE3YjU5ZjVhYTMxNzk1LmJpbmRQb3B1cChwb3B1cF80ZDg1ZThkNWI3NTM0M2ZjYTBmYjYyZTExM2MyOTc4YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTExY2NiNTdjMTBiNGJiMDgxNzAxNjJmZDljNjNlMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mjk1NTM2MSwgLTczLjk4MDU3MjQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jM2E5ZmM3ZmFlYzA0NmI5OTc4YTAxMTI1OTQ0MjI4NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwNTBmMTFkNDhjZTQ2Y2VhMjcxYzM3M2JiZDI4MDNiID0gJChgPGRpdiBpZD0iaHRtbF81MDUwZjExZDQ4Y2U0NmNlYTI3MWMzNzNiYmQyODAzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMyBTdCAmIEF2ZW51ZSBBPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0MTxicj4gbmV0IGRlcGFydHVyZXM6IDEyOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jM2E5ZmM3ZmFlYzA0NmI5OTc4YTAxMTI1OTQ0MjI4NS5zZXRDb250ZW50KGh0bWxfNTA1MGYxMWQ0OGNlNDZjZWEyNzFjMzczYmJkMjgwM2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTExY2NiNTdjMTBiNGJiMDgxNzAxNjJmZDljNjNlMzAuYmluZFBvcHVwKHBvcHVwX2MzYTlmYzdmYWVjMDQ2Yjk5NzhhMDExMjU5NDQyMjg1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjU1ZWRjODZmYTU0NTc5YjE2YThlZjFiNmY5MjFkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MzE3NDQ5LCAtNzQuMDAzNjY0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTRkZjE1MjFhYTE3NGI2YWEzMGQ0MWE0ZWQ5NWEyMjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZWIwMjUzYjM1ZDE0ZTMwYmI4Yzk1YzgwZGU1ZWVhNSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2ViMDI1M2IzNWQxNGUzMGJiOGM5NWM4MGRlNWVlYTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkgQXZlICYgVyAxOCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDQwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MTU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTRkZjE1MjFhYTE3NGI2YWEzMGQ0MWE0ZWQ5NWEyMjguc2V0Q29udGVudChodG1sX2NlYjAyNTNiMzVkMTRlMzBiYjhjOTVjODBkZTVlZWE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmNTVlZGM4NmZhNTQ1NzliMTZhOGVmMWI2ZjkyMWQwLmJpbmRQb3B1cChwb3B1cF9hNGRmMTUyMWFhMTc0YjZhYTMwZDQxYTRlZDk1YTIyOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTJlZmIxMGJiYjFkNDA0N2JjYzVhNzJlMTc2NDY3OTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDE3Mzk2OSwgLTczLjk5NDE1NTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmUyNzhhMjg4OTBjNDFiOGJmZTNkYWNjMzEyNWU5MzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NGU0ZGFiYzIwNGY0ZjM4ODQzNmQ3ZGU1ZDk0NjcyZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjRlNGRhYmMyMDRmNGYzODg0MzZkN2RlNWQ5NDY3MmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMjEgU3QgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzA3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1NjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTQ0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlMjc4YTI4ODkwYzQxYjhiZmUzZGFjYzMxMjVlOTMwLnNldENvbnRlbnQoaHRtbF82NGU0ZGFiYzIwNGY0ZjM4ODQzNmQ3ZGU1ZDk0NjcyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MmVmYjEwYmJiMWQ0MDQ3YmNjNWE3MmUxNzY0Njc5MC5iaW5kUG9wdXAocG9wdXBfMmUyNzhhMjg4OTBjNDFiOGJmZTNkYWNjMzEyNWU5MzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiNWM1MGIxMWEzNTQ3ODA4MzRkNjgxNDA3OTA4Y2MxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyMTY1NjQsIC03My45NTM5OTAyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZlMGY1Nzk4NmI5NDc0MGEzODI2M2I5MDhlZTVkOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMjI4NzZhNDY1ZjU0YTM3OWNiZGE0MGIxNDYzZDJhMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzIyODc2YTQ2NWY1NGEzNzljYmRhNDBiMTQ2M2QyYTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhbmNvY2sgU3QgJiBCZWRmb3JkIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzY8YnI+IG5ldCBkZXBhcnR1cmVzOiAyOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmUwZjU3OTg2Yjk0NzQwYTM4MjYzYjkwOGVlNWQ5Ny5zZXRDb250ZW50KGh0bWxfMzIyODc2YTQ2NWY1NGEzNzljYmRhNDBiMTQ2M2QyYTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGI1YzUwYjExYTM1NDc4MDgzNGQ2ODE0MDc5MDhjYzEuYmluZFBvcHVwKHBvcHVwX2JmZTBmNTc5ODZiOTQ3NDBhMzgyNjNiOTA4ZWU1ZDk3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYTU0ODZiZDA3NDc0YjQ0YTBiNWZhMzM2OTZlMjVkNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MDk4MzM4NTQsIC03My45NTAwNDc5NzU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTNlYzExYjFjNjE0NGJhMTg5ZDA1YThiMmVlYjMzMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYTI0YTdkMjEzYjQ0ZDdmYWE3M2RhMGEzMzcyNTVmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMGEyNGE3ZDIxM2I0NGQ3ZmFhNzNkYTBhMzM3MjU1ZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hY29uIFN0ICYgTm9zdHJhbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85M2VjMTFiMWM2MTQ0YmExODlkMDVhOGIyZWViMzMyZC5zZXRDb250ZW50KGh0bWxfMGEyNGE3ZDIxM2I0NGQ3ZmFhNzNkYTBhMzM3MjU1ZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGE1NDg2YmQwNzQ3NGI0NGEwYjVmYTMzNjk2ZTI1ZDUuYmluZFBvcHVwKHBvcHVwXzkzZWMxMWIxYzYxNDRiYTE4OWQwNWE4YjJlZWIzMzJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kN2I0M2JlMDYzM2I0MTJmYWQ1OWQ4OGVlMWI2M2IwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNzc5MTI2LCAtNzMuOTg1NjQ5NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOTkzYjY4MWYyMjk0Nzg4YjQ3NzUyYTliMzY3MmNkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzMGJlMDA0MGE2NDQwZmNiZGQ1ZTI0M2ZlNTNmOTZiID0gJChgPGRpdiBpZD0iaHRtbF82MzBiZTAwNDBhNjQ0MGZjYmRkNWUyNDNmZTUzZjk2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QgTWFya3MgUGwgJiAxIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDI8YnI+IG5ldCBkZXBhcnR1cmVzOiAwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5OTNiNjgxZjIyOTQ3ODhiNDc3NTJhOWIzNjcyY2QxLnNldENvbnRlbnQoaHRtbF82MzBiZTAwNDBhNjQ0MGZjYmRkNWUyNDNmZTUzZjk2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kN2I0M2JlMDYzM2I0MTJmYWQ1OWQ4OGVlMWI2M2IwYi5iaW5kUG9wdXAocG9wdXBfYjk5M2I2ODFmMjI5NDc4OGI0Nzc1MmE5YjM2NzJjZDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M1NTcxZjRkNmE2YzQ4NmY5NThhN2VmZmExM2I4MmUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI2MjgwNzAwMDAwMDA0LCAtNzMuOTg5NzgwNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwODc1NWU1NWY3ZjQxMjI4YTMyNmQ2NTg1MzUwYzQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZjNzEzODVkN2U3NGNkN2I2OTk2Mzk2YzA1NzUwYjcgPSAkKGA8ZGl2IGlkPSJodG1sXzhmYzcxMzg1ZDdlNzRjZDdiNjk5NjM5NmMwNTc1MGI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDQgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExMzxicj4gbmV0IGRlcGFydHVyZXM6IDYwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwODc1NWU1NWY3ZjQxMjI4YTMyNmQ2NTg1MzUwYzQ4LnNldENvbnRlbnQoaHRtbF84ZmM3MTM4NWQ3ZTc0Y2Q3YjY5OTYzOTZjMDU3NTBiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNTU3MWY0ZDZhNmM0ODZmOTU4YTdlZmZhMTNiODJlMS5iaW5kUG9wdXAocG9wdXBfZjA4NzU1ZTU1ZjdmNDEyMjhhMzI2ZDY1ODUzNTBjNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1OWQwZTU3ZjQ0ZTRiNzBiYWVmMzQyYWYxMTczMjMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUyNTU0MzQsIC03My45NzI4MjYyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjQ5NzI4NGY5NGQxNGNkOWFkNjUxMGM4MzE5M2ViYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOGZiYTY3ODVhZDI0YmI5OTNhNTcyZjc4MTkxODk4NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZThmYmE2Nzg1YWQyNGJiOTkzYTU3MmY3ODE5MTg5ODciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNDUgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTY0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzI8YnI+IG5ldCBkZXBhcnR1cmVzOiA4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0OTcyODRmOTRkMTRjZDlhZDY1MTBjODMxOTNlYmIxLnNldENvbnRlbnQoaHRtbF9lOGZiYTY3ODVhZDI0YmI5OTNhNTcyZjc4MTkxODk4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNTlkMGU1N2Y0NGU0YjcwYmFlZjM0MmFmMTE3MzIzMC5iaW5kUG9wdXAocG9wdXBfZjQ5NzI4NGY5NGQxNGNkOWFkNjUxMGM4MzE5M2ViYjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmMWFkOTk0ZDBhZjQ2YTQ4NzgxMGQ3NjBhYWEwNGZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU2MDE0LCAtNzMuOTY3NDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2M2FhMGU5OTliMDQ4ODliM2Q1NGM5MTRkNGFjZWJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDEyNmRhMjBmNmYxNDFiZDhmYjk5NDI2MDIxZTc1MGYgPSAkKGA8ZGl2IGlkPSJodG1sXzQxMjZkYTIwZjZmMTQxYmQ4ZmI5OTQyNjAyMWU3NTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDUyIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2M2FhMGU5OTliMDQ4ODliM2Q1NGM5MTRkNGFjZWJkLnNldENvbnRlbnQoaHRtbF80MTI2ZGEyMGY2ZjE0MWJkOGZiOTk0MjYwMjFlNzUwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZjFhZDk5NGQwYWY0NmE0ODc4MTBkNzYwYWFhMDRmZS5iaW5kUG9wdXAocG9wdXBfYTYzYWEwZTk5OWIwNDg4OWIzZDU0YzkxNGQ0YWNlYmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwYmQxM2I3NjMxYzRmZWQ4YjA0MThkMTE5YjkxODBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ2NjQ2OTk5OTk5OTk2LCAtNzMuOTkzOTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wM2Y5NDFiZWNhNjM0MjkwYmUyOWY5MDc0NzgyYTEyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U2YzNkNTAxZjcwMDQzOTJhMjExNmRiZjNmNjQ1MjNmID0gJChgPGRpdiBpZD0iaHRtbF9lNmMzZDUwMWY3MDA0MzkyYTIxMTZkYmYzZjY0NTIzZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyNyBTdCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ1ODxicj4gbmV0IGRlcGFydHVyZXM6IC0yMTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDNmOTQxYmVjYTYzNDI5MGJlMjlmOTA3NDc4MmExMmUuc2V0Q29udGVudChodG1sX2U2YzNkNTAxZjcwMDQzOTJhMjExNmRiZjNmNjQ1MjNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwYmQxM2I3NjMxYzRmZWQ4YjA0MThkMTE5YjkxODBiLmJpbmRQb3B1cChwb3B1cF8wM2Y5NDFiZWNhNjM0MjkwYmUyOWY5MDc0NzgyYTEyZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjY1NjBlZmI2MTVkNGI4Y2IxYjI4OTVkOTAzNjZiOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDg1MzA3NCwgLTczLjk2NDA4OTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDY3MmI2YzBiYzY0ZTRlODE0ZmM5YzM1YTZhNDgzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1NjRlMTI0ZGRjYTQwNjk4NDgyNDQ5N2EyN2I4ZDdkID0gJChgPGRpdiBpZD0iaHRtbF9mNTY0ZTEyNGRkY2E0MDY5ODQ4MjQ0OTdhMjdiOGQ3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVkZm9yZCBBdmUgJiBTIDkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxPGJyPiBuZXQgZGVwYXJ0dXJlczogMTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQ2NzJiNmMwYmM2NGU0ZTgxNGZjOWMzNWE2YTQ4M2Iuc2V0Q29udGVudChodG1sX2Y1NjRlMTI0ZGRjYTQwNjk4NDgyNDQ5N2EyN2I4ZDdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY2NTYwZWZiNjE1ZDRiOGNiMWIyODk1ZDkwMzY2YjllLmJpbmRQb3B1cChwb3B1cF8zNDY3MmI2YzBiYzY0ZTRlODE0ZmM5YzM1YTZhNDgzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWIxZTUyZjAxYjNjNGEzOWIzODBmNGVjOTU1M2NhNzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDIzNTQyOTk5OTk5OTUsIC03My45ODkxNTA3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMTRlZTExZmU3NTI0MDFkYTk5ZjFmN2ZjZGExZDAzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmYjFmYmY4YjBlNjQyYTI4MDM1NTQwOGFhMTFhMGU0ID0gJChgPGRpdiBpZD0iaHRtbF82ZmIxZmJmOGIwZTY0MmEyODAzNTU0MDhhYTExYTBlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDI0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyODcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0ODxicj4gbmV0IGRlcGFydHVyZXM6IC0zOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMTRlZTExZmU3NTI0MDFkYTk5ZjFmN2ZjZGExZDAzOC5zZXRDb250ZW50KGh0bWxfNmZiMWZiZjhiMGU2NDJhMjgwMzU1NDA4YWExMWEwZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWIxZTUyZjAxYjNjNGEzOWIzODBmNGVjOTU1M2NhNzguYmluZFBvcHVwKHBvcHVwX2ExNGVlMTFmZTc1MjQwMWRhOTlmMWY3ZmNkYTFkMDM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNGUxNzE2NGU3ODY0MDJjOGViODI3ZjMyYTAwYjRkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNzQwNzk0LCAtNzMuOTgxNDIwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hM2ZiYjMyMWExNTU0NTEzYTA2OTQ2YTYxZDYwYWYzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhZTE0OGZiNzhhODQwMDM4ODZlZjk1ZTRkMzg2ODZhID0gJChgPGRpdiBpZD0iaHRtbF8yYWUxNDhmYjc4YTg0MDAzODg2ZWY5NWU0ZDM4Njg2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMCBTdCAmIEF2ZW51ZSBBPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI4Nzxicj4gbmV0IGRlcGFydHVyZXM6IDE1Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hM2ZiYjMyMWExNTU0NTEzYTA2OTQ2YTYxZDYwYWYzOC5zZXRDb250ZW50KGh0bWxfMmFlMTQ4ZmI3OGE4NDAwMzg4NmVmOTVlNGQzODY4NmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjRlMTcxNjRlNzg2NDAyYzhlYjgyN2YzMmEwMGI0ZDcuYmluZFBvcHVwKHBvcHVwX2EzZmJiMzIxYTE1NTQ1MTNhMDY5NDZhNjFkNjBhZjM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTMwNjMzMjliNjQ0N2QxYjJiYzA2NjM0YzFhYmRlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NDg3NjM0LCAtNzMuOTk1Mjk4ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODMxYzI4Mzk2OWY0YjYyYTMxNTE2OTYzMDkzNzYyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlNDg3MDIyM2UyMjQ2Njc4NGVhOGFjNTJiMTFlOGMzID0gJChgPGRpdiBpZD0iaHRtbF9kZTQ4NzAyMjNlMjI0NjY3ODRlYThhYzUyYjExZThjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyNCBTdCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ0NDxicj4gbmV0IGRlcGFydHVyZXM6IC0yOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODMxYzI4Mzk2OWY0YjYyYTMxNTE2OTYzMDkzNzYyNS5zZXRDb250ZW50KGh0bWxfZGU0ODcwMjIzZTIyNDY2Nzg0ZWE4YWM1MmIxMWU4YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjUzMDYzMzI5YjY0NDdkMWIyYmMwNjYzNGMxYWJkZTguYmluZFBvcHVwKHBvcHVwX2Y4MzFjMjgzOTY5ZjRiNjJhMzE1MTY5NjMwOTM3NjI1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZThhM2NkMTMzY2E0NDAzOGVjYmQ1MWM2NTFlNzc1MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MzcwNzM5LCAtNzMuOTg1MTYxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTYuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGQxZDM4Nzk5YjM0OTAwOGIzOTRiZDkxZTBmNzBlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0MTdiZDQzZGE2NTRjMzVhMjRiZjgzZDFmYjFkYjY0ID0gJChgPGRpdiBpZD0iaHRtbF9mNDE3YmQ0M2RhNjU0YzM1YTI0YmY4M2QxZmIxZGI2NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+OCBBdmUgJiBXIDUyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0ODQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM1Nzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmRkMWQzODc5OWIzNDkwMDhiMzk0YmQ5MWUwZjcwZTEuc2V0Q29udGVudChodG1sX2Y0MTdiZDQzZGE2NTRjMzVhMjRiZjgzZDFmYjFkYjY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZlOGEzY2QxMzNjYTQ0MDM4ZWNiZDUxYzY1MWU3NzUyLmJpbmRQb3B1cChwb3B1cF8yZGQxZDM4Nzk5YjM0OTAwOGIzOTRiZDkxZTBmNzBlMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGE3OGE0NjBhNTk0NDFmM2I3NDI0YjIyMzJjYTg3MmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTY2MDM1OSwgLTczLjk5NzkwMDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGNhZDhjYWRlYzI0M2VhOTMwZjI2N2I4ZjRlMzRiMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3NWEzOWU5OTFkMjQyYTNhOWRiOGY1ZDQ1N2Q1ODhhID0gJChgPGRpdiBpZD0iaHRtbF85NzVhMzllOTkxZDI0MmEzYTlkYjhmNWQ0NTdkNTg4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAzNyBTdCAmIDEwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTkzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNDg8YnI+IG5ldCBkZXBhcnR1cmVzOiA1NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMGNhZDhjYWRlYzI0M2VhOTMwZjI2N2I4ZjRlMzRiMC5zZXRDb250ZW50KGh0bWxfOTc1YTM5ZTk5MWQyNDJhM2E5ZGI4ZjVkNDU3ZDU4OGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGE3OGE0NjBhNTk0NDFmM2I3NDI0YjIyMzJjYTg3MmYuYmluZFBvcHVwKHBvcHVwX2IwY2FkOGNhZGVjMjQzZWE5MzBmMjY3YjhmNGUzNGIwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYmUzNjJmMTMxYWI0ODFhODRjNzE5NzNjM2FiOGMxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDYxODM3LCAtNzMuOTg3ODk0NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4NWVmZDJmNTdiOTQ1NzZhNjhmZGE1MWZiZDhiMjY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGQ1Zjk4ZWY1NGVjNDFkY2EwZTBhNzMxMDBiZmViNmYgPSAkKGA8ZGl2IGlkPSJodG1sXzhkNWY5OGVmNTRlYzQxZGNhMGUwYTczMTAwYmZlYjZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDUyIFN0ICYgOSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDczLjA8YnI+IHRvdGFsIGFycml2YWxzOiA5MTxicj4gbmV0IGRlcGFydHVyZXM6IDE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4NWVmZDJmNTdiOTQ1NzZhNjhmZGE1MWZiZDhiMjY4LnNldENvbnRlbnQoaHRtbF84ZDVmOThlZjU0ZWM0MWRjYTBlMGE3MzEwMGJmZWI2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYmUzNjJmMTMxYWI0ODFhODRjNzE5NzNjM2FiOGMxNC5iaW5kUG9wdXAocG9wdXBfYTg1ZWZkMmY1N2I5NDU3NmE2OGZkYTUxZmJkOGIyNjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjMDQ0MTFkNzBjNjQ0MjU4MzJjNzQyNzJiZjkxNTA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYyMjcyMDUsIC03My45ODc4ODIwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0ZWJmYTIzNTE1OTRmMGNiMTYxMzllNGFjNjNlOGQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzc2ZmYxMDU3ZTY4NGYwMTg1ZmUyNjE2ZTQ5ZDQzNGQgPSAkKGA8ZGl2IGlkPSJodG1sXzc3NmZmMTA1N2U2ODRmMDE4NWZlMjYxNmU0OWQ0MzRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQ5IFN0ICYgOCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMzNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDQwPGJyPiBuZXQgZGVwYXJ0dXJlczogMTAzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0ZWJmYTIzNTE1OTRmMGNiMTYxMzllNGFjNjNlOGQ0LnNldENvbnRlbnQoaHRtbF83NzZmZjEwNTdlNjg0ZjAxODVmZTI2MTZlNDlkNDM0ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYzA0NDExZDcwYzY0NDI1ODMyYzc0MjcyYmY5MTUwNi5iaW5kUG9wdXAocG9wdXBfZjRlYmZhMjM1MTU5NGYwY2IxNjEzOWU0YWM2M2U4ZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3ZjYzM2U2YjNjODQ3NTM4ZTdmNGJiNjAyOTYyMzczID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ0NzUxNDgsIC03My45OTkxNTM2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhODY3ZmMzMzhkYjRkOThiNWU0OWYyYWRhYzczZDkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjU2MGE1NzdhNjA1NDAxYWIzZGJiYjJhNzEwYTRmNzkgPSAkKGA8ZGl2IGlkPSJodG1sX2Y1NjBhNTc3YTYwNTQwMWFiM2RiYmIyYTcxMGE0Zjc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDIyIFN0ICYgOCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTY5PGJyPiBuZXQgZGVwYXJ0dXJlczogNTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmE4NjdmYzMzOGRiNGQ5OGI1ZTQ5ZjJhZGFjNzNkOTMuc2V0Q29udGVudChodG1sX2Y1NjBhNTc3YTYwNTQwMWFiM2RiYmIyYTcxMGE0Zjc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3ZjYzM2U2YjNjODQ3NTM4ZTdmNGJiNjAyOTYyMzczLmJpbmRQb3B1cChwb3B1cF8yYTg2N2ZjMzM4ZGI0ZDk4YjVlNDlmMmFkYWM3M2Q5MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzgyNDdjMDJhZDA5NDAwYjkzNzdjMjMzMzRlM2QwMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTQ1NTczMSwgLTczLjk2NTkyOTc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzI0OTViMTQ5ZjE1NGQwNTgwYjI5NjQ5MTk1NGNkMWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjNhYTczZjI4OWI0YjhjYTFjZTI5ODM2OWI4MDcyYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZGYzYWE3M2YyODliNGI4Y2ExY2UyOTgzNjliODA3MmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTEgU3QgJiAxIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjQ5NWIxNDlmMTU0ZDA1ODBiMjk2NDkxOTU0Y2QxZS5zZXRDb250ZW50KGh0bWxfZGYzYWE3M2YyODliNGI4Y2ExY2UyOTgzNjliODA3MmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzgyNDdjMDJhZDA5NDAwYjkzNzdjMjMzMzRlM2QwMDAuYmluZFBvcHVwKHBvcHVwXzMyNDk1YjE0OWYxNTRkMDU4MGIyOTY0OTE5NTRjZDFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDNiYTBjZjIyOGY0NTM4YjBhYjliMWRlMWI2YjJkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MDAxOTg2LCAtNzMuOTY5MDUzMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNWYzYjEzOTA3Yjg0OTNlYWEzOGY0NTk4ZjFiODZmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4NDkzYTkwZGY0NzQ4ZjBhNzVmOWE4ZWQ0OTJkMGFjID0gJChgPGRpdiBpZD0iaHRtbF9iODQ5M2E5MGRmNDc0OGYwYTc1ZjlhOGVkNDkyZDBhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MSBBdmUgJiBFIDQ0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2OTxicj4gbmV0IGRlcGFydHVyZXM6IDEzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1ZjNiMTM5MDdiODQ5M2VhYTM4ZjQ1OThmMWI4NmY2LnNldENvbnRlbnQoaHRtbF9iODQ5M2E5MGRmNDc0OGYwYTc1ZjlhOGVkNDkyZDBhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMDNiYTBjZjIyOGY0NTM4YjBhYjliMWRlMWI2YjJkYi5iaW5kUG9wdXAocG9wdXBfZjVmM2IxMzkwN2I4NDkzZWFhMzhmNDU5OGYxYjg2ZjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhZGNmNmUzODdkOTRjYzQ5YThlMGJjYTY3YTc0NDUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU5NzEwNzk5OTk5OTksIC03My45NzQwMjMxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyOGY0OWQzYzIxZjRiZTU5MmQ0MDk1MzJhNzhkYjhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGIzZjUyODUyMDkyNDY5Mzk1NTMzYzU4ZGY1ZGU1ODEgPSAkKGA8ZGl2IGlkPSJodG1sXzhiM2Y1Mjg1MjA5MjQ2OTM5NTUzM2M1OGRmNWRlNTgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDUzIFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTA4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyOGY0OWQzYzIxZjRiZTU5MmQ0MDk1MzJhNzhkYjhlLnNldENvbnRlbnQoaHRtbF84YjNmNTI4NTIwOTI0NjkzOTU1MzNjNThkZjVkZTU4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYWRjZjZlMzg3ZDk0Y2M0OWE4ZTBiY2E2N2E3NDQ1Mi5iaW5kUG9wdXAocG9wdXBfMzI4ZjQ5ZDNjMjFmNGJlNTkyZDQwOTUzMmE3OGRiOGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxN2UwNWRkYTA3ODQxMmVhMDBiMDEzYzgwYTVhZjJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY2OTUzMTcsIC03My45ODE2OTMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5YzBkYzljYjFlMzQ1ODM4NGEzNTY2MjIxZDZiOTMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjBmZGNhOWIyNDg1NDg0Nzk0MDVlYmM4Y2M3M2E4MTkgPSAkKGA8ZGl2IGlkPSJodG1sXzYwZmRjYTliMjQ4NTQ4NDc5NDA1ZWJjOGNjNzNhODE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgNTggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU4OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTI2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTYyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5YzBkYzljYjFlMzQ1ODM4NGEzNTY2MjIxZDZiOTMxLnNldENvbnRlbnQoaHRtbF82MGZkY2E5YjI0ODU0ODQ3OTQwNWViYzhjYzczYTgxOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMTdlMDVkZGEwNzg0MTJlYTAwYjAxM2M4MGE1YWYyYS5iaW5kUG9wdXAocG9wdXBfNTljMGRjOWNiMWUzNDU4Mzg0YTM1NjYyMjFkNmI5MzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllNGEzODAzN2M2ZTQ2YWZiMGM1OTg1MmZmZGZmM2E3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUxMzk2LCAtNzQuMDA1MjI2MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTc4MjY0Y2E3Mzg0ZDhlOTdmNzg4NDcwYTdlYzhlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3NmFiNGExNjljMjQ5ZDlhYjE2NjdmYjkzZjkzZmUwID0gJChgPGRpdiBpZD0iaHRtbF8zNzZhYjRhMTY5YzI0OWQ5YWIxNjY3ZmI5M2Y5M2ZlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTEgQXZlICYgVyAyNyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjczLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMDI8YnI+IG5ldCBkZXBhcnR1cmVzOiAyOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNTc4MjY0Y2E3Mzg0ZDhlOTdmNzg4NDcwYTdlYzhlYy5zZXRDb250ZW50KGh0bWxfMzc2YWI0YTE2OWMyNDlkOWFiMTY2N2ZiOTNmOTNmZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWU0YTM4MDM3YzZlNDZhZmIwYzU5ODUyZmZkZmYzYTcuYmluZFBvcHVwKHBvcHVwX2E1NzgyNjRjYTczODRkOGU5N2Y3ODg0NzBhN2VjOGVjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZWM1YTRmZTJmM2E0NzQzOWFmMmMwMjRhNjAzZDgzOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0Njc0NTAwMDAwMDAwNCwgLTc0LjAwNzc1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTYuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOTdkNjcwZDc1MjM0NjBiYTU5NDNiMmU5OTk2Nzg3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmYzlhMzBhNjM1NjRhNTRiZjMwMmUyYzFhNDJlNTA2ID0gJChgPGRpdiBpZD0iaHRtbF84ZmM5YTMwYTYzNTY0YTU0YmYzMDJlMmMxYTQyZTUwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyMCBTdCAmIDExIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTM3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MDg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5N2Q2NzBkNzUyMzQ2MGJhNTk0M2IyZTk5OTY3ODdhLnNldENvbnRlbnQoaHRtbF84ZmM5YTMwYTYzNTY0YTU0YmYzMDJlMmMxYTQyZTUwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZWM1YTRmZTJmM2E0NzQzOWFmMmMwMjRhNjAzZDgzOS5iaW5kUG9wdXAocG9wdXBfZjk3ZDY3MGQ3NTIzNDYwYmE1OTQzYjJlOTk5Njc4N2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiMTY5ODMwNWNhNzQyYmE4YTE1NTQzMzlmODJlNmRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEyODU4ODcsIC03My45NjU5MDI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjM1MTYyZTRiOGY0MDYwYTY0OTg4ODQyOTQzODAxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3OTQ3M2YzNTI5YzQwYzg4NGNhMTI2ZmIzZGJiYjEzID0gJChgPGRpdiBpZD0iaHRtbF8wNzk0NzNmMzUyOWM0MGM4ODRjYTEyNmZiM2RiYmIxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UyA0IFN0ICYgV3l0aGUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMDMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIyNjxicj4gbmV0IGRlcGFydHVyZXM6IC03Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjM1MTYyZTRiOGY0MDYwYTY0OTg4ODQyOTQzODAxMC5zZXRDb250ZW50KGh0bWxfMDc5NDczZjM1MjljNDBjODg0Y2ExMjZmYjNkYmJiMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2IxNjk4MzA1Y2E3NDJiYThhMTU1NDMzOWY4MmU2ZGQuYmluZFBvcHVwKHBvcHVwXzFiMzUxNjJlNGI4ZjQwNjBhNjQ5ODg4NDI5NDM4MDEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNzBjOTNmODc2Yzg0M2FhYjcyMzk3OTYwODJlMGE3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNTg3Njc4LCAtNzMuOTgyMDUwMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmMmJiYTgxYjFlNTRlZTM5OGQ4MmQ2MDhmYjViNTk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGZmYzY1NWY4NTIyNDIxZWI2MmNjMzQxMWQwM2ViZGQgPSAkKGA8ZGl2IGlkPSJodG1sX2RmZmM2NTVmODUyMjQyMWViNjJjYzM0MTFkMDNlYmRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDIwIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjg3PGJyPiBuZXQgZGVwYXJ0dXJlczogODQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGYyYmJhODFiMWU1NGVlMzk4ZDgyZDYwOGZiNWI1OTQuc2V0Q29udGVudChodG1sX2RmZmM2NTVmODUyMjQyMWViNjJjYzM0MTFkMDNlYmRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM3MGM5M2Y4NzZjODQzYWFiNzIzOTc5NjA4MmUwYTc2LmJpbmRQb3B1cChwb3B1cF8wZjJiYmE4MWIxZTU0ZWUzOThkODJkNjA4ZmI1YjU5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWU5ODU0NTM2MzU1NDViZWE2ZjY4Y2YxNzUyOGJmZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDY5MTk1OSwgLTc0LjAwNDUxODg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOS4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmMmI0ZjNmM2NmNDRhNDM5ODUwMTgyOGI4MWQyZGE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzczYzJmNGYzYjFjNGM4ZmEyNzU1MzM4OTFlOWViZGYgPSAkKGA8ZGl2IGlkPSJodG1sX2M3M2MyZjRmM2IxYzRjOGZhMjc1NTMzODkxZTllYmRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDIyIFN0ICYgMTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0OTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMxNjxicj4gbmV0IGRlcGFydHVyZXM6IC0xODEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGYyYjRmM2YzY2Y0NGE0Mzk4NTAxODI4YjgxZDJkYTkuc2V0Q29udGVudChodG1sX2M3M2MyZjRmM2IxYzRjOGZhMjc1NTMzODkxZTllYmRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlOTg1NDUzNjM1NTQ1YmVhNmY2OGNmMTc1MjhiZmQ4LmJpbmRQb3B1cChwb3B1cF9kZjJiNGYzZjNjZjQ0YTQzOTg1MDE4MjhiODFkMmRhOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTE2NWY4ODljMGUxNDIzNDkyOWM2YjFlMzRiNWM1MTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDM5NTQxMSwgLTczLjk5MTQ0ODcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOS4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNiZTE3MDQxN2IyNDZkNDg1NmI2YTFmOWQ4M2FlODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NTY1YWM5Nzg0MDU0OTZmYjVkNTA4MmM0NjM5Nzc3ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzU2NWFjOTc4NDA1NDk2ZmI1ZDUwODJjNDYzOTc3N2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMjUgU3QgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTMzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTgyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzYmUxNzA0MTdiMjQ2ZDQ4NTZiNmExZjlkODNhZTg1LnNldENvbnRlbnQoaHRtbF83NTY1YWM5Nzg0MDU0OTZmYjVkNTA4MmM0NjM5Nzc3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMTY1Zjg4OWMwZTE0MjM0OTI5YzZiMWUzNGI1YzUxMi5iaW5kUG9wdXAocG9wdXBfMjNiZTE3MDQxN2IyNDZkNDg1NmI2YTFmOWQ4M2FlODUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliMGZhNGFiYjJkMDQwMGNiY2Q5NjNkMjVmY2Q2NmIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgzMTI0ODksIC03My45Nzg5NTEzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiODY2MjBkMGRkZjRlZTk5MzNiNjM3NTdlMDFkMmUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGUzNTY1ZjAzNjg2NGI0ZmE3M2RlYzBlM2U3MTU3ODAgPSAkKGA8ZGl2IGlkPSJodG1sXzhlMzU2NWYwMzY4NjRiNGZhNzNkZWMwZTNlNzE1NzgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZWFuIFN0ICYgNCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI4NjYyMGQwZGRmNGVlOTkzM2I2Mzc1N2UwMWQyZTAuc2V0Q29udGVudChodG1sXzhlMzU2NWYwMzY4NjRiNGZhNzNkZWMwZTNlNzE1NzgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliMGZhNGFiYjJkMDQwMGNiY2Q5NjNkMjVmY2Q2NmIzLmJpbmRQb3B1cChwb3B1cF8xYjg2NjIwZDBkZGY0ZWU5OTMzYjYzNzU3ZTAxZDJlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjc3NjYzZTExYzIxNDQ2ZDhlYTY0YWU5YzBjOGEzOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjUyNjU0LCAtNzMuOTgxOTIzMzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC02LjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOWVkM2UwMjVkYTc0NmNkYjhkNjBjOWFmNGQ5OTVhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmNmEyZDE2ZWI5OTRiOTZiYmQ1NzA4NDAyNjE5NmYzID0gJChgPGRpdiBpZD0iaHRtbF82ZjZhMmQxNmViOTk0Yjk2YmJkNTcwODQwMjYxOTZmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDU1IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUyNzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMjIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTllZDNlMDI1ZGE3NDZjZGI4ZDYwYzlhZjRkOTk1YTcuc2V0Q29udGVudChodG1sXzZmNmEyZDE2ZWI5OTRiOTZiYmQ1NzA4NDAyNjE5NmYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY3NzY2M2UxMWMyMTQ0NmQ4ZWE2NGFlOWMwYzhhMzk0LmJpbmRQb3B1cChwb3B1cF8xOWVkM2UwMjVkYTc0NmNkYjhkNjBjOWFmNGQ5OTVhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGU0NDE5MTc5NGY4NDMxYThjNmFkNjY5Njk3MTMxYTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjM0NDA1OCwgLTczLjk4MjY4MTI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjkyZTE2NGI0YWY0NDk3ODUyZGJmOTYxZDBhNzkyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MWU4YWZhNDljNjQ4MWNiNTdhZWY0ZDEwMWJlNWIyID0gJChgPGRpdiBpZD0iaHRtbF9hNzFlOGFmYTQ5YzY0ODFjYjU3YWVmNGQxMDFiZTViMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDUzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMjUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0Mzxicj4gbmV0IGRlcGFydHVyZXM6IDE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiOTJlMTY0YjRhZjQ0OTc4NTJkYmY5NjFkMGE3OTJhLnNldENvbnRlbnQoaHRtbF9hNzFlOGFmYTQ5YzY0ODFjYjU3YWVmNGQxMDFiZTViMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZTQ0MTkxNzk0Zjg0MzFhOGM2YWQ2Njk2OTcxMzFhMi5iaW5kUG9wdXAocG9wdXBfMWI5MmUxNjRiNGFmNDQ5Nzg1MmRiZjk2MWQwYTc5MmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjOWY3M2ZkNmQ2MzQ1MzQ5OGY2ZDJmOTdiMmU4YzVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQzNDUzMzUsIC03NC4wMDAwNDAzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFhMTE2NmI1NDEyNDAzOWIyNjcyYWExZDQ4Mzc5ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZjI1MzUzNzVhYjM0Njg5YjVkM2M3MDhiZjJhMDlmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmYyNTM1Mzc1YWIzNDY4OWI1ZDNjNzA4YmYyYTA5ZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMjAgU3QgJiA4IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjU2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyOTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAzNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YWExMTY2YjU0MTI0MDM5YjI2NzJhYTFkNDgzNzlkZS5zZXRDb250ZW50KGh0bWxfZmYyNTM1Mzc1YWIzNDY4OWI1ZDNjNzA4YmYyYTA5ZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWM5ZjczZmQ2ZDYzNDUzNDk4ZjZkMmY5N2IyZThjNWEuYmluZFBvcHVwKHBvcHVwXzhhYTExNjZiNTQxMjQwMzliMjY3MmFhMWQ0ODM3OWRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjgzYWE4NjdmYWY0ZTBiYTkxMDIwM2NkNmNiMWUyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjg2ODQ0LCAtNzMuOTU2OTgxMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhYzgxNjU5NmZmZTQxZTE4NzM5OTk3NjU0NjY3NjkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2NiYmJhZDdlN2Y2NDg1Mzk1MmVjOGY0MTQyM2EyZTYgPSAkKGA8ZGl2IGlkPSJodG1sXzdjYmJiYWQ3ZTdmNjQ4NTM5NTJlYzhmNDE0MjNhMmU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFuZCBTdCAmIEhhdmVtZXllciBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkyPGJyPiBuZXQgZGVwYXJ0dXJlczogNjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGFjODE2NTk2ZmZlNDFlMTg3Mzk5OTc2NTQ2Njc2OTMuc2V0Q29udGVudChodG1sXzdjYmJiYWQ3ZTdmNjQ4NTM5NTJlYzhmNDE0MjNhMmU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmODNhYTg2N2ZhZjRlMGJhOTEwMjAzY2Q2Y2IxZTJhLmJpbmRQb3B1cChwb3B1cF80YWM4MTY1OTZmZmU0MWUxODczOTk5NzY1NDY2NzY5MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmEzOTRhZDUzY2M0NDU2MDlkMDE2OWQ5MzZmMWI1NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDU3MTIxMDAwMDAwMDYsIC03My45ODE5NDgyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTkuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzYjA4MTk1NGQ0NzQwY2FiYjEzMDA5Y2M1ZTJkZTc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTY5NDhmYjI1ZjcyNDk0ODhhY2EwY2QzYWM1MTBkZGIgPSAkKGA8ZGl2IGlkPSJodG1sX2U2OTQ4ZmIyNWY3MjQ5NDg4YWNhMGNkM2FjNTEwZGRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDMyIFN0ICYgUGFyayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY5Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTE3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81M2IwODE5NTRkNDc0MGNhYmIxMzAwOWNjNWUyZGU3Ny5zZXRDb250ZW50KGh0bWxfZTY5NDhmYjI1ZjcyNDk0ODhhY2EwY2QzYWM1MTBkZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmEzOTRhZDUzY2M0NDU2MDlkMDE2OWQ5MzZmMWI1NzcuYmluZFBvcHVwKHBvcHVwXzUzYjA4MTk1NGQ0NzQwY2FiYjEzMDA5Y2M1ZTJkZTc3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMGMwNzRjNDVhMjI0NGNlOWUxMTBiNDI0ZmMzYzhmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMTEwMDYzLCAtNzMuOTkxOTI1NDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjMwM2E0OTE0ZTE0ZjE5OGRjZGNhOGFlOTYzMmY4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwNjFiNjBiNDljYjQ4YWRhNTMwYTcxOTJkZjNjYjYxID0gJChgPGRpdiBpZD0iaHRtbF83MDYxYjYwYjQ5Y2I0OGFkYTUzMGE3MTkyZGYzY2I2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Uml2aW5ndG9uIFN0ICYgQ2hyeXN0aWUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjQwPGJyPiBuZXQgZGVwYXJ0dXJlczogMTA3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyMzAzYTQ5MTRlMTRmMTk4ZGNkY2E4YWU5NjMyZjhmLnNldENvbnRlbnQoaHRtbF83MDYxYjYwYjQ5Y2I0OGFkYTUzMGE3MTkyZGYzY2I2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMGMwNzRjNDVhMjI0NGNlOWUxMTBiNDI0ZmMzYzhmNS5iaW5kUG9wdXAocG9wdXBfNTIzMDNhNDkxNGUxNGYxOThkY2RjYThhZTk2MzJmOGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjMTc5NGU3MzVlMTRhZjViZWExNGM0NTY3OGFmZjJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ1MTY3NywgLTczLjk4NjgzMDc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhhNzZmZmNjZjUxYjQ0YmFiMzE3ZGQyZTQwZWIwMzhiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTY4OTkyY2JjYzY5NDk5NjgzZDI4ODRiOGU5ZDdmZTIgPSAkKGA8ZGl2IGlkPSJodG1sXzE2ODk5MmNiY2M2OTQ5OTY4M2QyODg0YjhlOWQ3ZmUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41IEF2ZSAmIEUgMjkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMxNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjEzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTEwMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YTc2ZmZjY2Y1MWI0NGJhYjMxN2RkMmU0MGViMDM4Yi5zZXRDb250ZW50KGh0bWxfMTY4OTkyY2JjYzY5NDk5NjgzZDI4ODRiOGU5ZDdmZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWMxNzk0ZTczNWUxNGFmNWJlYTE0YzQ1Njc4YWZmMmMuYmluZFBvcHVwKHBvcHVwXzhhNzZmZmNjZjUxYjQ0YmFiMzE3ZGQyZTQwZWIwMzhiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MTQwZDk5YTg3OWY0YzY3YTliMDE0M2JkNDJlNTQ4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNTI0Mjc2LCAtNzMuOTg3NTg1NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWEyMjJiOTRhMzM0MTNmYWE2YWFmMWFkYmQxMDZiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0MDI5YjVkNzg0NDRkOWJhNmVlYTZiMzkxOTFiMzU5ID0gJChgPGRpdiBpZD0iaHRtbF8yNDAyOWI1ZDc4NDQ0ZDliYTZlZWE2YjM5MTkxYjM1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxNiBTdCAmIElydmluZyBQbDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzUwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2VhMjIyYjk0YTMzNDEzZmFhNmFhZjFhZGJkMTA2YmUuc2V0Q29udGVudChodG1sXzI0MDI5YjVkNzg0NDRkOWJhNmVlYTZiMzkxOTFiMzU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxNDBkOTlhODc5ZjRjNjdhOWIwMTQzYmQ0MmU1NDg3LmJpbmRQb3B1cChwb3B1cF83ZWEyMjJiOTRhMzM0MTNmYWE2YWFmMWFkYmQxMDZiZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmE2NDNiMzU5NjNhNDhmM2IwMWZiYzdkN2ZkNDg3NjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDM5NDMxNCwgLTczLjk3OTY2MDY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzc4ZTJjOTdhZmZkNDIyM2IwYjA3ZjljMTQ2Y2Y4ODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYmMzOWIxNTVjNTc0Yzc2YjIzOTU4ODk2MDk5YmVkMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWJjMzliMTU1YzU3NGM3NmIyMzk1ODg5NjA5OWJlZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMzEgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjA5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNjA8YnI+IG5ldCBkZXBhcnR1cmVzOiA1MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNzhlMmM5N2FmZmQ0MjIzYjBiMDdmOWMxNDZjZjg4OS5zZXRDb250ZW50KGh0bWxfYWJjMzliMTU1YzU3NGM3NmIyMzk1ODg5NjA5OWJlZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmE2NDNiMzU5NjNhNDhmM2IwMWZiYzdkN2ZkNDg3NjcuYmluZFBvcHVwKHBvcHVwXzM3OGUyYzk3YWZmZDQyMjNiMGIwN2Y5YzE0NmNmODg5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZGE1MTRlOTJkNzk0NzU0OTFiNjg2MzhmOTFlNDZiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjQwNTQ4LCAtNzMuOTkwMDI2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjYwMjBhMmJiYzA5NGQ4OGJiNmViOWFmZjZlOTM5ODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NTQwZjNkNjdlYTg0N2FiOWFlNDBhNDQwZDJmYmNlZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTU0MGYzZDY3ZWE4NDdhYjlhZTQwYTQ0MGQyZmJjZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNDEgU3QgJiA4IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTc0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NDA8YnI+IG5ldCBkZXBhcnR1cmVzOiA2Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjAyMGEyYmJjMDk0ZDg4YmI2ZWI5YWZmNmU5Mzk4Mi5zZXRDb250ZW50KGh0bWxfNTU0MGYzZDY3ZWE4NDdhYjlhZTQwYTQ0MGQyZmJjZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGRhNTE0ZTkyZDc5NDc1NDkxYjY4NjM4ZjkxZTQ2YjUuYmluZFBvcHVwKHBvcHVwXzY2MDIwYTJiYmMwOTRkODhiYjZlYjlhZmY2ZTkzOTgyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YmE0ZDc3NTEwOWU0ODcxODhiMmY0M2FjMDNlMzE1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MDMwMDk2LCAtNzMuOTk4ODQyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYTFlOTIxZDk3MDM0NDljYjM3OTg3NWExMjA4OWVjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5Mzk0NWM0OGZhNjRiNDA5YzQ4M2IxOWYzOTRhNzcyID0gJChgPGRpdiBpZD0iaHRtbF8wOTM5NDVjNDhmYTY0YjQwOWM0ODNiMTlmMzk0YTc3MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTEgQXZlICYgVyA0MSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTM1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxOTA8YnI+IG5ldCBkZXBhcnR1cmVzOiA1NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYTFlOTIxZDk3MDM0NDljYjM3OTg3NWExMjA4OWVjMC5zZXRDb250ZW50KGh0bWxfMDkzOTQ1YzQ4ZmE2NGI0MDljNDgzYjE5ZjM5NGE3NzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGJhNGQ3NzUxMDllNDg3MTg4YjJmNDNhYzAzZTMxNTguYmluZFBvcHVwKHBvcHVwX2ZhMWU5MjFkOTcwMzQ0OWNiMzc5ODc1YTEyMDg5ZWMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMTU1MTYwMzI3MTM0ODg4YmRkN2U5ODBhMzQ5MzU5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MDE5MjUyLCAtNzMuOTkxMjU1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwNzZjNzc4NThiMjQ5ZmNiY2UwYjk0NTNkYmY0NzMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzdlMGIyZWQyYTNkNDE2Yjk5MTEwMDE4NTk4NDU5YjMgPSAkKGA8ZGl2IGlkPSJodG1sXzc3ZTBiMmVkMmEzZDQxNmI5OTExMDAxODU5ODQ1OWIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij45IEF2ZSAmIFcgNDUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI5OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzM2PGJyPiBuZXQgZGVwYXJ0dXJlczogMzcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDA3NmM3Nzg1OGIyNDlmY2JjZTBiOTQ1M2RiZjQ3MzMuc2V0Q29udGVudChodG1sXzc3ZTBiMmVkMmEzZDQxNmI5OTExMDAxODU5ODQ1OWIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExNTUxNjAzMjcxMzQ4ODhiZGQ3ZTk4MGEzNDkzNTkyLmJpbmRQb3B1cChwb3B1cF9kMDc2Yzc3ODU4YjI0OWZjYmNlMGI5NDUzZGJmNDczMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzNjYTRkNjBiMjVkNGIxMTg5ZDM4OTUwZDAyZjA3NmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjY2OTY3MSwgLTczLjk5MDYxNzI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YzU5NzU0ZTdjNDY0YTMxYjIwYTViN2RlMTliY2VkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4Mjk1OTA0OTg2YTQ0YmU4NzQyZjZmZmI5OGEyY2FkID0gJChgPGRpdiBpZD0iaHRtbF85ODI5NTkwNDk4NmE0NGJlODc0MmY2ZmZiOThhMmNhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA1MyBTdCAmIDEwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YzU5NzU0ZTdjNDY0YTMxYjIwYTViN2RlMTliY2VkZC5zZXRDb250ZW50KGh0bWxfOTgyOTU5MDQ5ODZhNDRiZTg3NDJmNmZmYjk4YTJjYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzNjYTRkNjBiMjVkNGIxMTg5ZDM4OTUwZDAyZjA3NmMuYmluZFBvcHVwKHBvcHVwXzZjNTk3NTRlN2M0NjRhMzFiMjBhNWI3ZGUxOWJjZWRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYWE1NzQ1ZjM2OGM0MGM1YjkyOTI3MGNjZTAyZjg1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjYwNDg2LCAtNzMuOTYyNjQ0MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzMDMxNDBhYWM1NjQ0OTY4MTg3MzFiNWQ5YzJiZDk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDlmMzQ5NmViMjhkNGY1Mzg3OGY3MmE2ZDcyMmE1OTEgPSAkKGA8ZGl2IGlkPSJodG1sXzQ5ZjM0OTZlYjI4ZDRmNTM4NzhmNzJhNmQ3MjJhNTkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TIDMgU3QgJiBCZWRmb3JkIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU3PGJyPiBuZXQgZGVwYXJ0dXJlczogMTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTMwMzE0MGFhYzU2NDQ5NjgxODczMWI1ZDljMmJkOTYuc2V0Q29udGVudChodG1sXzQ5ZjM0OTZlYjI4ZDRmNTM4NzhmNzJhNmQ3MjJhNTkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhYTU3NDVmMzY4YzQwYzViOTI5MjcwY2NlMDJmODU1LmJpbmRQb3B1cChwb3B1cF9lMzAzMTQwYWFjNTY0NDk2ODE4NzMxYjVkOWMyYmQ5NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWM2M2E1NDE0MTdlNDUxMjg2OWQ4OTIyOTA0NWRkZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzkzNTU0MiwgLTczLjk5OTMxNzgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjM0NDRmZmJlOTE0NDNlOGMxZmM1YjlhYjhhYjU5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlMmU1YjI5OGM1NjQyOWY4YjE4ZWZkYjJjYmVmN2Y2ID0gJChgPGRpdiBpZD0iaHRtbF84ZTJlNWIyOThjNTY0MjlmOGIxOGVmZGIyY2JlZjdmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAxNSBTdCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNjguMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ3ODxicj4gbmV0IGRlcGFydHVyZXM6IDExMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjM0NDRmZmJlOTE0NDNlOGMxZmM1YjlhYjhhYjU5MC5zZXRDb250ZW50KGh0bWxfOGUyZTViMjk4YzU2NDI5ZjhiMThlZmRiMmNiZWY3ZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWM2M2E1NDE0MTdlNDUxMjg2OWQ4OTIyOTA0NWRkZTkuYmluZFBvcHVwKHBvcHVwXzA2MzQ0NGZmYmU5MTQ0M2U4YzFmYzViOWFiOGFiNTkwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMzdkY2RjNDA0Mjk0ZWI4YmE3ZmVlNDhhODQ1ODljOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMjIzMjcyLCAtNzMuOTg4ODk5NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NWM0MTkyNTZiOGU0YjJiYWM1ZDhiMDBkYjQzYTk1ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlODMxNDNhYTg5ZTQ5Zjc5ZGU2MjE5ZjAwMzAyODllID0gJChgPGRpdiBpZD0iaHRtbF9jZTgzMTQzYWE4OWU0OWY3OWRlNjIxOWYwMDMwMjg5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMiBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQwOTxicj4gbmV0IGRlcGFydHVyZXM6IDE3Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NWM0MTkyNTZiOGU0YjJiYWM1ZDhiMDBkYjQzYTk1Zi5zZXRDb250ZW50KGh0bWxfY2U4MzE0M2FhODllNDlmNzlkZTYyMTlmMDAzMDI4OWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTM3ZGNkYzQwNDI5NGViOGJhN2ZlZTQ4YTg0NTg5YzkuYmluZFBvcHVwKHBvcHVwXzY1YzQxOTI1NmI4ZTRiMmJhYzVkOGIwMGRiNDNhOTVmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzMwNTgyZmNmODU0YzdjOWRjOGI2NTBlMzY0ZDdhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NTAwMjU0LCAtNzMuOTgwMTQ0MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MyZjU1ZjViNzE1NzRjOTlhYzRlMWJmZjNhZTFjNmQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWMxODBjYzU0NTRkNDQ5OWI0MDVmYTBjMzMyZmJhZTcgPSAkKGA8ZGl2IGlkPSJodG1sXzVjMTgwY2M1NDU0ZDQ0OTliNDA1ZmEwYzMzMmZiYWU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQ0IFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI2Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjk2PGJyPiBuZXQgZGVwYXJ0dXJlczogMzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzJmNTVmNWI3MTU3NGM5OWFjNGUxYmZmM2FlMWM2ZDguc2V0Q29udGVudChodG1sXzVjMTgwY2M1NDU0ZDQ0OTliNDA1ZmEwYzMzMmZiYWU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzMzA1ODJmY2Y4NTRjN2M5ZGM4YjY1MGUzNjRkN2EyLmJpbmRQb3B1cChwb3B1cF9jMmY1NWY1YjcxNTc0Yzk5YWM0ZTFiZmYzYWUxYzZkOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWUwOWM1OWMwNGM0NDc2ZThhZDJlNmI2OGQ3NThkOGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTAzODAwOSwgLTczLjk4MzM4OTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDdlYTNkYWE4MTlmNDk4NDk3ZDk4ZmJlYzkzYWU2ZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZWNhNDU2NzAyOTg0NzY2YjNmYzE0MmRmNWZkNDhiMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZGVjYTQ1NjcwMjk4NDc2NmIzZmMxNDJkZjVmZDQ4YjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMzcgU3QgJiA1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzEwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTM4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3ZWEzZGFhODE5ZjQ5ODQ5N2Q5OGZiZWM5M2FlNmU4LnNldENvbnRlbnQoaHRtbF9kZWNhNDU2NzAyOTg0NzY2YjNmYzE0MmRmNWZkNDhiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZTA5YzU5YzA0YzQ0NzZlOGFkMmU2YjY4ZDc1OGQ4Yi5iaW5kUG9wdXAocG9wdXBfMDdlYTNkYWE4MTlmNDk4NDk3ZDk4ZmJlYzkzYWU2ZTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2YmNlYzcwZTU1MjRjODk4NjVmODQwMGQwYTVhODMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ2MjAwOSwgLTczLjk4ODU1NzIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTAuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjRkMTk1MDYwM2I0ZjRhYjhmOWEwOGFjMTJlNThiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk2NDQ2MWNjZmIyNjQ1MjBhZWE3MmNlNGNjZmZkYTE1ID0gJChgPGRpdiBpZD0iaHRtbF85NjQ0NjFjY2ZiMjY0NTIwYWVhNzJjZTRjY2ZmZGExNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDI5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MjAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUxNzxicj4gbmV0IGRlcGFydHVyZXM6IC0yMDMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWI0ZDE5NTA2MDNiNGY0YWI4ZjlhMDhhYzEyZTU4YmQuc2V0Q29udGVudChodG1sXzk2NDQ2MWNjZmIyNjQ1MjBhZWE3MmNlNGNjZmZkYTE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2YmNlYzcwZTU1MjRjODk4NjVmODQwMGQwYTVhODMzLmJpbmRQb3B1cChwb3B1cF81YjRkMTk1MDYwM2I0ZjRhYjhmOWEwOGFjMTJlNThiZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWQ3NzIzMDcyM2UxNGRlZmFhY2MyNTgzZmQwZDAwOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzMxNDI1OSwgLTczLjk3NTczODgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMi42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmU2NTgwMTAzZTg2NDc4MWI2MGY3YjFkMmMzMWMzNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOThhYjM2YWUxMDE0NzVmOTg5MTViY2YwY2IzMzc4NiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDk4YWIzNmFlMTAxNDc1Zjk4OTE1YmNmMGNiMzM3ODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMjAgU3QgJiBGRFIgRHJpdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMTU8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmU2NTgwMTAzZTg2NDc4MWI2MGY3YjFkMmMzMWMzNzAuc2V0Q29udGVudChodG1sX2Q5OGFiMzZhZTEwMTQ3NWY5ODkxNWJjZjBjYjMzNzg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkNzcyMzA3MjNlMTRkZWZhYWNjMjU4M2ZkMGQwMDhkLmJpbmRQb3B1cChwb3B1cF8yZTY1ODAxMDNlODY0NzgxYjYwZjdiMWQyYzMxYzM3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWQ0YjQ0ZTcyZmY0NDYxY2JhZTk2ODM1NmYxNGY2NDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTY0NTgyNCwgLTczLjk5MzcyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjcxMGNmNzE3NDk5NDE4OTlhZmQxOWVlM2VmYTIzYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMmUxYzBlY2FhYTI0MTg2OGI1ZTQwZTJlODNiMDNjMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTJlMWMwZWNhYWEyNDE4NjhiNWU0MGUyZTgzYjAzYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMzkgU3QgJiA5IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjU3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyOTg8YnI+IG5ldCBkZXBhcnR1cmVzOiA0MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNzEwY2Y3MTc0OTk0MTg5OWFmZDE5ZWUzZWZhMjNhMS5zZXRDb250ZW50KGh0bWxfYTJlMWMwZWNhYWEyNDE4NjhiNWU0MGUyZTgzYjAzYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWQ0YjQ0ZTcyZmY0NDYxY2JhZTk2ODM1NmYxNGY2NDkuYmluZFBvcHVwKHBvcHVwX2I3MTBjZjcxNzQ5OTQxODk5YWZkMTllZTNlZmEyM2ExKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOTU3YTFlYTYyNzc0NWZmYmY5NDFhZjAzN2NiNmI1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MTU1MSwgLTczLjk5MzkzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5NDY1ODgzZTc4YjQzZmViNTRlZTk3Zjc5OWVhZTcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGM2ZjJiYzdmY2NmNGVjODk5NzM4ZDFhMDdiMzdjYjkgPSAkKGA8ZGl2IGlkPSJodG1sX2RjNmYyYmM3ZmNjZjRlYzg5OTczOGQxYTA3YjM3Y2I5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij44IEF2ZSAmIFcgMzMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU2Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjE1PGJyPiBuZXQgZGVwYXJ0dXJlczogNDkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTk0NjU4ODNlNzhiNDNmZWI1NGVlOTdmNzk5ZWFlNzAuc2V0Q29udGVudChodG1sX2RjNmYyYmM3ZmNjZjRlYzg5OTczOGQxYTA3YjM3Y2I5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q5NTdhMWVhNjI3NzQ1ZmZiZjk0MWFmMDM3Y2I2YjVhLmJpbmRQb3B1cChwb3B1cF85OTQ2NTg4M2U3OGI0M2ZlYjU0ZWU5N2Y3OTllYWU3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWRiNjI4YTE5NjhlNDQwNzg3MGY1ZTJlNGIyNzkzMWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDA5NjM3NCwgLTczLjk4NjAyMjEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDA0OTRkMTc1YjMzNGVhODk3NWVjMGZiNmNjODEyNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MzJiNWM3NTZiYzY0NzJmOGFkYjA4NzM0ZTg1MTRlMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTMyYjVjNzU2YmM2NDcyZjhhZGIwODczNGU4NTE0ZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMjQgU3QgJiBQYXJrIEF2ZSBTPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MjMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI4NTxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDA0OTRkMTc1YjMzNGVhODk3NWVjMGZiNmNjODEyNGQuc2V0Q29udGVudChodG1sXzUzMmI1Yzc1NmJjNjQ3MmY4YWRiMDg3MzRlODUxNGUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFkYjYyOGExOTY4ZTQ0MDc4NzBmNWUyZTRiMjc5MzFjLmJpbmRQb3B1cChwb3B1cF80MDQ5NGQxNzViMzM0ZWE4OTc1ZWMwZmI2Y2M4MTI0ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Y5ODU4ZWE4NDk4NDI0ZWFiYWM3MGI2OGVlMmEwMjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTAxOTk5NSwgLTczLjk5MDkzMDg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODczYWFhYWRmZjA3NGM2NmE0M2NkYWJiZTgzOWJmNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWY1MWQ5OGIzMjY0OWUyYTBiODc0ZGI1YmMzODQ5NCA9ICQoYDxkaXYgaWQ9Imh0bWxfNmFmNTFkOThiMzI2NDllMmEwYjg3NGRiNWJjMzg0OTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMzMgU3QgJiA3IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjcwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyODk8YnI+IG5ldCBkZXBhcnR1cmVzOiAxOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzNhYWFhZGZmMDc0YzY2YTQzY2RhYmJlODM5YmY3OC5zZXRDb250ZW50KGh0bWxfNmFmNTFkOThiMzI2NDllMmEwYjg3NGRiNWJjMzg0OTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Y5ODU4ZWE4NDk4NDI0ZWFiYWM3MGI2OGVlMmEwMjcuYmluZFBvcHVwKHBvcHVwXzg3M2FhYWFkZmYwNzRjNjZhNDNjZGFiYmU4MzliZjc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYzJlOTIxZTk5MjY0OGYyOTk0Nzc0NzUwMzAyYjM0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjgwMDEsIC03My45ODI5MTE1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkOTc2OWUyNjA4YTQwYzhiZjUyNjg2ZDQwN2E0NTUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjRiYzk4M2I5Y2ZhNGYwNmI1YTNhNTM4MDIxZDFhZTEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y0YmM5ODNiOWNmYTRmMDZiNWEzYTUzODAyMWQxYWUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQ1IFN0ICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEyNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI1PGJyPiBuZXQgZGVwYXJ0dXJlczogMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZDk3NjllMjYwOGE0MGM4YmY1MjY4NmQ0MDdhNDU1MC5zZXRDb250ZW50KGh0bWxfZjRiYzk4M2I5Y2ZhNGYwNmI1YTNhNTM4MDIxZDFhZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGMyZTkyMWU5OTI2NDhmMjk5NDc3NDc1MDMwMmIzNDguYmluZFBvcHVwKHBvcHVwX2FkOTc2OWUyNjA4YTQwYzhiZjUyNjg2ZDQwN2E0NTUwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMWFjZGIxZjZlOTQ0OTkwODdkMjAwMWFiODE3MGRmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NzM0ODI1LCAtNzMuOTk3MjM1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjNWYyYTY0ZGE5OTRiYWViMDM0YWNmNTQ0MzNmOWNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQyMzBlMmY2MjA4NGZmNjk2YzYxYmNjNDQ2MGUyMjUgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0MjMwZTJmNjIwODRmZjY5NmM2MWJjYzQ0NjBlMjI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDI2IFN0ICYgOCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM5MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDgxPGJyPiBuZXQgZGVwYXJ0dXJlczogOTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWM1ZjJhNjRkYTk5NGJhZWIwMzRhY2Y1NDQzM2Y5Y2Euc2V0Q29udGVudChodG1sX2Q0MjMwZTJmNjIwODRmZjY5NmM2MWJjYzQ0NjBlMjI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IxYWNkYjFmNmU5NDQ5OTA4N2QyMDAxYWI4MTcwZGZiLmJpbmRQb3B1cChwb3B1cF9lYzVmMmE2NGRhOTk0YmFlYjAzNGFjZjU0NDMzZjljYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTY1MDMzYTNmMDMzNDY1N2IyMzYwY2ZlN2VkNTljMjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjI2OTg4MiwgLTczLjk5MzAxMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZjdkYmRjNDM2ZWU0NjEzOWYzMTc0ZDNhMjA0ZmQ4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2M2MzNjA2YmM2NDRiMzdiMzVlYzM2YTFlY2MxNjFjID0gJChgPGRpdiBpZD0iaHRtbF8yNjNjMzYwNmJjNjQ0YjM3YjM1ZWMzNmExZWNjMTYxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA0NyBTdCAmIDEwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTUwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxODI8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjdkYmRjNDM2ZWU0NjEzOWYzMTc0ZDNhMjA0ZmQ4MC5zZXRDb250ZW50KGh0bWxfMjYzYzM2MDZiYzY0NGIzN2IzNWVjMzZhMWVjYzE2MWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTY1MDMzYTNmMDMzNDY1N2IyMzYwY2ZlN2VkNTljMjEuYmluZFBvcHVwKHBvcHVwXzZmN2RiZGM0MzZlZTQ2MTM5ZjMxNzRkM2EyMDRmZDgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZTQ3NTdmZjA3MDQ0NGE4OWM0OTg3MTM5MzlhNzgxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNzI2MTg2LCAtNzMuOTkyMzg5NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhMTdjZTNjOTc5ZDQxNGZiMmJhZDJhMmUwZmMyZmU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTJiNDFmZWJmNTJhNDcxNThmYzZiZTU0ZTZiMGFhYzMgPSAkKGA8ZGl2IGlkPSJodG1sXzkyYjQxZmViZjUyYTQ3MTU4ZmM2YmU1NGU2YjBhYWMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDE2IFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU2NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjQ5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTMxNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTE3Y2UzYzk3OWQ0MTRmYjJiYWQyYTJlMGZjMmZlNy5zZXRDb250ZW50KGh0bWxfOTJiNDFmZWJmNTJhNDcxNThmYzZiZTU0ZTZiMGFhYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2U0NzU3ZmYwNzA0NDRhODljNDk4NzEzOTM5YTc4MTEuYmluZFBvcHVwKHBvcHVwX2RhMTdjZTNjOTc5ZDQxNGZiMmJhZDJhMmUwZmMyZmU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDM2NDEwZGM0MzI0MTYyYTdkMjdiOTdhZmZmOGQ0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNzA0OTg0LCAtNzMuOTkwMDkyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC02LjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGYxNWViNGJhNmVkNDI2ZWIxOTNjZjFhNGY1YWExNTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjMwNWE3MTE3ZTk0ZDhhYWU2NjAwNzFmZGFlNDA2MSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2YzMDVhNzExN2U5NGQ4YWFlNjYwMDcxZmRhZTQwNjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTcgU3QgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTMxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTIxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMTVlYjRiYTZlZDQyNmViMTkzY2YxYTRmNWFhMTU1LnNldENvbnRlbnQoaHRtbF8zZjMwNWE3MTE3ZTk0ZDhhYWU2NjAwNzFmZGFlNDA2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNDM2NDEwZGM0MzI0MTYyYTdkMjdiOTdhZmZmOGQ0MS5iaW5kUG9wdXAocG9wdXBfOGYxNWViNGJhNmVkNDI2ZWIxOTNjZjFhNGY1YWExNTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwOGVkMTcwZjA1NzQ4MzFiNjRjODdkYTFiZTdkYzYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ4NTQ4NjIsIC03My45ODgwODQxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjMjMxMmY3OTU0MzQ3M2NiMjQzNWIwYzhjZTBiZWMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk5NGViMmQ1ZTRlNDNjMGE3ODUxMzZlOWU0YjNhODAgPSAkKGA8ZGl2IGlkPSJodG1sXzA5OTRlYjJkNWU0ZTQzYzBhNzg1MTM2ZTllNGIzYTgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgMzIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI5OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzY1PGJyPiBuZXQgZGVwYXJ0dXJlczogNjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGMyMzEyZjc5NTQzNDczY2IyNDM1YjBjOGNlMGJlYzAuc2V0Q29udGVudChodG1sXzA5OTRlYjJkNWU0ZTQzYzBhNzg1MTM2ZTllNGIzYTgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwOGVkMTcwZjA1NzQ4MzFiNjRjODdkYTFiZTdkYzYyLmJpbmRQb3B1cChwb3B1cF8wYzIzMTJmNzk1NDM0NzNjYjI0MzViMGM4Y2UwYmVjMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmY0NGQwOGY0ZDVjNGM0MDg1NThkYmRmNWNlZTBkMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjkxNTUwNSwgLTczLjk4MTkxODQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmZWE2Y2EwNDNiZTRjNTNiNjkzNDUwMDdjMTBiYWM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJlMTM2MjI0YTVjNGFlYjg1YmVlZGM2MDk3NTVlNmIgPSAkKGA8ZGl2IGlkPSJodG1sXzMyZTEzNjIyNGE1YzRhZWI4NWJlZWRjNjA5NzU1ZTZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgNjAgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM5OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWZlYTZjYTA0M2JlNGM1M2I2OTM0NTAwN2MxMGJhYzkuc2V0Q29udGVudChodG1sXzMyZTEzNjIyNGE1YzRhZWI4NWJlZWRjNjA5NzU1ZTZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmNDRkMDhmNGQ1YzRjNDA4NTU4ZGJkZjVjZWUwZDI4LmJpbmRQb3B1cChwb3B1cF85ZmVhNmNhMDQzYmU0YzUzYjY5MzQ1MDA3YzEwYmFjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGVjMzRmNDZlNGUyNGEyNWE0N2Q1NGNiZjY1ODczNmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjIyODgyNiwgLTczLjk4MzM2MTgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1MWUxZjI1YjQ5MDQ4OTI5NzhiM2VmY2RhYzhkMzBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzEzNzAxNWVmYmRkNDllOTg4YzQ5OTdjYWE0ZjU2MzQgPSAkKGA8ZGl2IGlkPSJodG1sXzMxMzcwMTVlZmJkZDQ5ZTk4OGM0OTk3Y2FhNGY1NjM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgNTEgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMwNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjY2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1MWUxZjI1YjQ5MDQ4OTI5NzhiM2VmY2RhYzhkMzBlLnNldENvbnRlbnQoaHRtbF8zMTM3MDE1ZWZiZGQ0OWU5ODhjNDk5N2NhYTRmNTYzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZWMzNGY0NmU0ZTI0YTI1YTQ3ZDU0Y2JmNjU4NzM2Zi5iaW5kUG9wdXAocG9wdXBfYjUxZTFmMjViNDkwNDg5Mjk3OGIzZWZjZGFjOGQzMGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIxMWM0MTAwNjVjOTRhMWE5ZWY5MjA4MmYyZGRlZjdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ0MjE5LCAtNzMuOTcxMjEyMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlYWVmNDhmN2ZmNDRiNzg4MTFkMzZmNmM0MzQxM2ZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU3MmE4ZTAxNmYzNDk0ZGJhNDEzYTFkYTU4NGI4OTUgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1NzJhOGUwMTZmMzQ5NGRiYTQxM2ExZGE1ODRiODk1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GRFIgRHJpdmUgJiBFIDM1IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTM3PGJyPiBuZXQgZGVwYXJ0dXJlczogNDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGVhZWY0OGY3ZmY0NGI3ODgxMWQzNmY2YzQzNDEzZmMuc2V0Q29udGVudChodG1sX2Q1NzJhOGUwMTZmMzQ5NGRiYTQxM2ExZGE1ODRiODk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIxMWM0MTAwNjVjOTRhMWE5ZWY5MjA4MmYyZGRlZjdhLmJpbmRQb3B1cChwb3B1cF9kZWFlZjQ4ZjdmZjQ0Yjc4ODExZDM2ZjZjNDM0MTNmYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWIxMjllMDE2N2MyNDk2MThmOTA2OTdmOGI2ZTZmNjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTQyMTUsIC03My45ODEzNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzOTczYTgyMTkxNzRkYjY5MmYyNDgzZmE5NTk1MWYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmEwZjhiMDY0YTkyNGVlODhkNmJiYzMwM2NjZjUzOTcgPSAkKGA8ZGl2IGlkPSJodG1sXzZhMGY4YjA2NGE5MjRlZTg4ZDZiYmMzMDNjY2Y1Mzk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZW5yeSBTdCAmIEdyYW5kIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQzPGJyPiBuZXQgZGVwYXJ0dXJlczogNTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjM5NzNhODIxOTE3NGRiNjkyZjI0ODNmYTk1OTUxZjMuc2V0Q29udGVudChodG1sXzZhMGY4YjA2NGE5MjRlZTg4ZDZiYmMzMDNjY2Y1Mzk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFiMTI5ZTAxNjdjMjQ5NjE4ZjkwNjk3ZjhiNmU2ZjYzLmJpbmRQb3B1cChwb3B1cF82Mzk3M2E4MjE5MTc0ZGI2OTJmMjQ4M2ZhOTU5NTFmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk2ZDlkMTlmY2Q3NDU5OTljZGQ4NGNkMDQ4ZGM5N2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzgyNzQyOCwgLTczLjk4NzUxOTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODcxZjhlZTQ0NDA0NDc5YmU2NjIwNDkzNGM5ODY0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwM2NiZjhhZDU4YzRkZmE5YmM4MTEwNTYwNDk1OGQ5ID0gJChgPGRpdiBpZD0iaHRtbF81MDNjYmY4YWQ1OGM0ZGZhOWJjODExMDU2MDQ5NThkOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAyMCBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM5NTxicj4gbmV0IGRlcGFydHVyZXM6IDIyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4NzFmOGVlNDQ0MDQ0NzliZTY2MjA0OTM0Yzk4NjRlLnNldENvbnRlbnQoaHRtbF81MDNjYmY4YWQ1OGM0ZGZhOWJjODExMDU2MDQ5NThkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOTZkOWQxOWZjZDc0NTk5OWNkZDg0Y2QwNDhkYzk3YS5iaW5kUG9wdXAocG9wdXBfZDg3MWY4ZWU0NDQwNDQ3OWJlNjYyMDQ5MzRjOTg2NGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1MWYzOTJiYjFjNjQyMzBhNTc4NTdjNWM2MjUxNzFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMyMjE4NTMsIC03My45ODE2NTU1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1N2ViYWE0NzUzZDRkMDFiNDhiZmFlM2Q2MGFhMmFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGNiZDE0NmIxMmMyNDVmOThiZTEyM2QyZDBlZmM3YWIgPSAkKGA8ZGl2IGlkPSJodG1sX2RjYmQxNDZiMTJjMjQ1Zjk4YmUxMjNkMmQwZWZjN2FiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xIEF2ZSAmIEUgMTYgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQ4PGJyPiBuZXQgZGVwYXJ0dXJlczogMzMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU3ZWJhYTQ3NTNkNGQwMWI0OGJmYWUzZDYwYWEyYWMuc2V0Q29udGVudChodG1sX2RjYmQxNDZiMTJjMjQ1Zjk4YmUxMjNkMmQwZWZjN2FiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I1MWYzOTJiYjFjNjQyMzBhNTc4NTdjNWM2MjUxNzFjLmJpbmRQb3B1cChwb3B1cF9jNTdlYmFhNDc1M2Q0ZDAxYjQ4YmZhZTNkNjBhYTJhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWU4OTRmMTg2ZDk2NDBmOWJkNjllNzI2MWFjYzAzNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDkwMTI3MSwgLTczLjk4ODQ4Mzk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTUwOTZhZjExYmI0ZTZlYjY4ZDYxOWQ1YzFhZTQzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyZWNkODU2NmNjZjQ2MDk5ZGZjMWYyMDQxNWU5OTMxID0gJChgPGRpdiBpZD0iaHRtbF82MmVjZDg1NjZjY2Y0NjA5OWRmYzFmMjA0MTVlOTkzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NiBBdmUgJiBXIDMzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzOTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ4MDxicj4gbmV0IGRlcGFydHVyZXM6IDg0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhNTA5NmFmMTFiYjRlNmViNjhkNjE5ZDVjMWFlNDMwLnNldENvbnRlbnQoaHRtbF82MmVjZDg1NjZjY2Y0NjA5OWRmYzFmMjA0MTVlOTkzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZTg5NGYxODZkOTY0MGY5YmQ2OWU3MjYxYWNjMDM0ZC5iaW5kUG9wdXAocG9wdXBfN2E1MDk2YWYxMWJiNGU2ZWI2OGQ2MTlkNWMxYWU0MzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlYjZjNzYwNWNiMTQ0ZWJhNTg2ZWI1OTVmZmRhNDgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5MTI2MDEsIC03My45Nzk3Mzc3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5NjBlYWM2Yjk2NDQ3Njk4MDEwZTg3NWNkYzY5ZGY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODhhZGI3OGM3MjQxNDIwOGFkMDZiOTVkZjI5YzNhY2UgPSAkKGA8ZGl2IGlkPSJodG1sXzg4YWRiNzhjNzI0MTQyMDhhZDA2Yjk1ZGYyOWMzYWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDI1IFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI2MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDE5PGJyPiBuZXQgZGVwYXJ0dXJlczogMTU5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q5NjBlYWM2Yjk2NDQ3Njk4MDEwZTg3NWNkYzY5ZGY1LnNldENvbnRlbnQoaHRtbF84OGFkYjc4YzcyNDE0MjA4YWQwNmI5NWRmMjljM2FjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZWI2Yzc2MDVjYjE0NGViYTU4NmViNTk1ZmZkYTQ4My5iaW5kUG9wdXAocG9wdXBfZDk2MGVhYzZiOTY0NDc2OTgwMTBlODc1Y2RjNjlkZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiZTFhYzZiOWIwMTRkMjVhZWJiMzllNDAwMjMyYjM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYzNDEzNzksIC03My45OTY2NzQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5N2YxNTFlZDQwMTQ5YTBhZDFhNzk4YjRjODJmZjlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTdlZTZkMjI2ODQwNDAxNzllM2I5ZjJkNzU5MjE0MTQgPSAkKGA8ZGl2IGlkPSJodG1sXzE3ZWU2ZDIyNjg0MDQwMTc5ZTNiOWYyZDc1OTIxNDE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQ2IFN0ICYgMTEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ3ODxicj4gbmV0IGRlcGFydHVyZXM6IDQzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5N2YxNTFlZDQwMTQ5YTBhZDFhNzk4YjRjODJmZjlmLnNldENvbnRlbnQoaHRtbF8xN2VlNmQyMjY4NDA0MDE3OWUzYjlmMmQ3NTkyMTQxNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYmUxYWM2YjliMDE0ZDI1YWViYjM5ZTQwMDIzMmIzOS5iaW5kUG9wdXAocG9wdXBfNTk3ZjE1MWVkNDAxNDlhMGFkMWE3OThiNGM4MmZmOWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjYjMzZDRiNTI3YzQwZDk4YmI5Njc4YzdhNWQzM2IxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ1NDk3MywgLTc0LjAwMTk3MTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlMmM4NGVmMzI4NDQwNTc5M2YxMDkzYWI0NDk5ZjkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDEwMzNkYmVkYjllNGI1Mzg0ODMwNjliN2E5Y2IyNjIgPSAkKGA8ZGl2IGlkPSJodG1sXzQxMDMzZGJlZGI5ZTRiNTM4NDgzMDY5YjdhOWNiMjYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij45IEF2ZSAmIFcgMjIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQxNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzc3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlMmM4NGVmMzI4NDQwNTc5M2YxMDkzYWI0NDk5ZjkyLnNldENvbnRlbnQoaHRtbF80MTAzM2RiZWRiOWU0YjUzODQ4MzA2OWI3YTljYjI2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81Y2IzM2Q0YjUyN2M0MGQ5OGJiOTY3OGM3YTVkMzNiMS5iaW5kUG9wdXAocG9wdXBfY2UyYzg0ZWYzMjg0NDA1NzkzZjEwOTNhYjQ0OTlmOTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjOTU0OTgyOTQ2NzQ5OTE5NzUzYjZlYjNiODU0MDMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI5Mzg2ODUsIC03My45Nzc3MjQyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNTAuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTQ4OWI2MGYzNmI0NzdhYmY4NDJmZGIxY2MxMDkzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyZDZiM2MzYjE2NTRhZjM5YzM3NmI5MTc0YjY1YTNjID0gJChgPGRpdiBpZD0iaHRtbF9hMmQ2YjNjM2IxNjU0YWYzOWMzNzZiOTE3NGI2NWEzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxNCBTdCAmIEF2ZW51ZSBCPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA3ODxicj4gbmV0IGRlcGFydHVyZXM6IDEwMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWE0ODliNjBmMzZiNDc3YWJmODQyZmRiMWNjMTA5M2Yuc2V0Q29udGVudChodG1sX2EyZDZiM2MzYjE2NTRhZjM5YzM3NmI5MTc0YjY1YTNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjOTU0OTgyOTQ2NzQ5OTE5NzUzYjZlYjNiODU0MDMzLmJpbmRQb3B1cChwb3B1cF9lYTQ4OWI2MGYzNmI0NzdhYmY4NDJmZGIxY2MxMDkzZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmQ0ZmI2ZmIyYTQ4NDhmMWFkODBlYzQ0NTM0NTYyY2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjgyNTQsIC03My45ODg2MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwMTMzZTA1MGQ3MzQ3ZWVhMTZiYjA2YjBkNGZiNWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjYxNDkxODE2ZjBiNDg5NzhiNmZlZjUzNjhhODE2ODcgPSAkKGA8ZGl2IGlkPSJodG1sXzI2MTQ5MTgxNmYwYjQ4OTc4YjZmZWY1MzY4YTgxNjg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDU2IFN0ICYgMTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI4MDxicj4gbmV0IGRlcGFydHVyZXM6IDM4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwMTMzZTA1MGQ3MzQ3ZWVhMTZiYjA2YjBkNGZiNWMyLnNldENvbnRlbnQoaHRtbF8yNjE0OTE4MTZmMGI0ODk3OGI2ZmVmNTM2OGE4MTY4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZDRmYjZmYjJhNDg0OGYxYWQ4MGVjNDQ1MzQ1NjJjZi5iaW5kUG9wdXAocG9wdXBfNzAxMzNlMDUwZDczNDdlZWExNmJiMDZiMGQ0ZmI1YzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3MWUwOThhNjc3YTRlMDI5N2E4M2Y4ZWNiMmI5ODYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYwODc1MDIsIC03NC4wMDI3NzY2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjkuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OWI4MDMxYjQ3OTI0ODQ2ODlkY2RmZTBiNzhhNzgwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2NWQ5ZWU4NDgxMzRkZjU4NzY4YWY3YTA4ZmUyZGIxID0gJChgPGRpdiBpZD0iaHRtbF8wNjVkOWVlODQ4MTM0ZGY1ODc2OGFmN2EwOGZlMmRiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTIgQXZlICYgVyA0MCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzAzLjA8YnI+IHRvdGFsIGFycml2YWxzOiA4OTY8YnI+IG5ldCBkZXBhcnR1cmVzOiA1OTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODliODAzMWI0NzkyNDg0Njg5ZGNkZmUwYjc4YTc4MDIuc2V0Q29udGVudChodG1sXzA2NWQ5ZWU4NDgxMzRkZjU4NzY4YWY3YTA4ZmUyZGIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3MWUwOThhNjc3YTRlMDI5N2E4M2Y4ZWNiMmI5ODYxLmJpbmRQb3B1cChwb3B1cF84OWI4MDMxYjQ3OTI0ODQ2ODlkY2RmZTBiNzhhNzgwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Y3YzBjZGMyNjcwNDg3NjhlNTg0YmQ3MDJiOGZkNjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjAwOTQzNywgLTczLjk5NDYxODQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWY4MmNiOThhZjE5NGI1Y2IwMDdkODE1YTVjYTA1YTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjE5Y2NkNzc3NDY0NDg2YmI0NDZlODU0MTM1NmY3OCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDIxOWNjZDc3NzQ2NDQ4NmJiNDQ2ZTg1NDEzNTZmNzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNDMgU3QgJiAxMCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI3PGJyPiBuZXQgZGVwYXJ0dXJlczogMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWY4MmNiOThhZjE5NGI1Y2IwMDdkODE1YTVjYTA1YTIuc2V0Q29udGVudChodG1sXzAyMTljY2Q3Nzc0NjQ0ODZiYjQ0NmU4NTQxMzU2Zjc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NmN2MwY2RjMjY3MDQ4NzY4ZTU4NGJkNzAyYjhmZDY3LmJpbmRQb3B1cChwb3B1cF8xZjgyY2I5OGFmMTk0YjVjYjAwN2Q4MTVhNWNhMDVhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmRjNWVmZTY1MDQ1NDExY2IxOTQ3ZWY5YTFjMjNmYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTIwNjg2MiwgLTczLjk2Nzg0Mzg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTAuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZWE5ZjlhZWIyYmI0NDNiYWVkYWMzNTI4MmFjYjhlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlZWM1MTY2N2EwNDRiODRhZjZjNTMwZTkzNjMwM2E5ID0gJChgPGRpdiBpZD0iaHRtbF9kZWVjNTE2NjdhMDQ0Yjg0YWY2YzUzMGU5MzYzMDNhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0NyBTdCAmIDEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzMzxicj4gbmV0IGRlcGFydHVyZXM6IC0yMDkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2VhOWY5YWViMmJiNDQzYmFlZGFjMzUyODJhY2I4ZWMuc2V0Q29udGVudChodG1sX2RlZWM1MTY2N2EwNDRiODRhZjZjNTMwZTkzNjMwM2E5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJkYzVlZmU2NTA0NTQxMWNiMTk0N2VmOWExYzIzZmI2LmJpbmRQb3B1cChwb3B1cF8zZWE5ZjlhZWIyYmI0NDNiYWVkYWMzNTI4MmFjYjhlYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGVmZTZkYmUwZjYzNDAyMmJkNzExMmI1YWU1YjFiYTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTE1ODEsIC03My45Nzc5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwNzYyYTJmMTEzOTQ1MTNiODE4ZGQzN2NiNDU5MTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQ2YzI3NDk5NDg4NGY1MmIxNGI4YjBiNGU2ZTE0MTIgPSAkKGA8ZGl2IGlkPSJodG1sXzVkNmMyNzQ5OTQ4ODRmNTJiMTRiOGIwYjRlNmUxNDEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZXJzaGluZyBTcXVhcmUgU291dGg8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYyNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjU0PGJyPiBuZXQgZGVwYXJ0dXJlczogMjkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA3NjJhMmYxMTM5NDUxM2I4MThkZDM3Y2I0NTkxNjAuc2V0Q29udGVudChodG1sXzVkNmMyNzQ5OTQ4ODRmNTJiMTRiOGIwYjRlNmUxNDEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RlZmU2ZGJlMGY2MzQwMjJiZDcxMTJiNWFlNWIxYmE4LmJpbmRQb3B1cChwb3B1cF9mMDc2MmEyZjExMzk0NTEzYjgxOGRkMzdjYjQ1OTE2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzJlMDg2YWFhODBjNGU2ODk3MTVkNzQ5NTllYWZjMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDc4MDM3MywgLTczLjk3MzQ0MTkwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmFjNGFhMjFhMThkNDgzNWE0MTE4YjQ3YzAxY2Y2ZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTEwYTQ0NTBiZDU0MmE3OGU0NDM1ZjMxY2FkNjk0ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2UxMGE0NDUwYmQ1NDJhNzhlNDQzNWYzMWNhZDY5NGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMzkgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTc4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTI4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhYzRhYTIxYTE4ZDQ4MzVhNDExOGI0N2MwMWNmNmU0LnNldENvbnRlbnQoaHRtbF9jZTEwYTQ0NTBiZDU0MmE3OGU0NDM1ZjMxY2FkNjk0ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMmUwODZhYWE4MGM0ZTY4OTcxNWQ3NDk1OWVhZmMyYi5iaW5kUG9wdXAocG9wdXBfNmFjNGFhMjFhMThkNDgzNWE0MTE4YjQ3YzAxY2Y2ZTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhMThiYmZlYjZiYjRhYmM5YmNhNDVhYzBjOGExMjQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUxODcyOTk5OTk5OTk2LCAtNzMuOTc3NzA2MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZjA1ZWE1ODAyY2Y0NTA0YjViMmU2MDZkMTRlZmNhYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5MzkzMjQwZTVlODRkNGM5NThiYmQ2ODYwZWY5OTQyID0gJChgPGRpdiBpZD0iaHRtbF80OTM5MzI0MGU1ZTg0ZDRjOTU4YmJkNjg2MGVmOTk0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVyc2hpbmcgU3F1YXJlIE5vcnRoPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5OTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExMTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmYwNWVhNTgwMmNmNDUwNGI1YjJlNjA2ZDE0ZWZjYWEuc2V0Q29udGVudChodG1sXzQ5MzkzMjQwZTVlODRkNGM5NThiYmQ2ODYwZWY5OTQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJhMThiYmZlYjZiYjRhYmM5YmNhNDVhYzBjOGExMjQyLmJpbmRQb3B1cChwb3B1cF9iZjA1ZWE1ODAyY2Y0NTA0YjViMmU2MDZkMTRlZmNhYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmYzYjA3ODhhMjQ3NGIwM2E5OGI1OTlhNDQ3N2M4ZTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTk5MjI2MiwgLTczLjk3NjQ4NTE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMzkuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NjE5OTY3NmJiYmY0NjdmYjNmMmY5MDY2YzNhNzhmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U2MGU3Y2EzZjM4ZDQyZmY5MWM5OTU5M2I1Y2I3MGVjID0gJChgPGRpdiBpZD0iaHRtbF9lNjBlN2NhM2YzOGQ0MmZmOTFjOTk1OTNiNWNiNzBlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA1MiBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4NjguMDxicj4gdG90YWwgYXJyaXZhbHM6IDg3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTc4MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NjE5OTY3NmJiYmY0NjdmYjNmMmY5MDY2YzNhNzhmYS5zZXRDb250ZW50KGh0bWxfZTYwZTdjYTNmMzhkNDJmZjkxYzk5NTkzYjVjYjcwZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmYzYjA3ODhhMjQ3NGIwM2E5OGI1OTlhNDQ3N2M4ZTYuYmluZFBvcHVwKHBvcHVwXzg2MTk5Njc2YmJiZjQ2N2ZiM2YyZjkwNjZjM2E3OGZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZDg3ODZhYzE2YWQ0Yzk4YmRhNjY2YTE1N2FhY2FjNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NzE0NzU4LCAtNzMuOTcyMDc4MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzA4ZTNmNTZhZTA0YmRhYWEwNjE0NjU1ZDc4MTAyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4OTZlY2M5MGZhYjQ1ZWVhYjU2NGE2YTNjOTVmYzc4ID0gJChgPGRpdiBpZD0iaHRtbF9mODk2ZWNjOTBmYWI0NWVlYWI1NjRhNmEzYzk1ZmM3OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA1MSBTdCAmIExleGluZ3RvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTI4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3MDhlM2Y1NmFlMDRiZGFhYTA2MTQ2NTVkNzgxMDJhLnNldENvbnRlbnQoaHRtbF9mODk2ZWNjOTBmYWI0NWVlYWI1NjRhNmEzYzk1ZmM3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZDg3ODZhYzE2YWQ0Yzk4YmRhNjY2YTE1N2FhY2FjNy5iaW5kUG9wdXAocG9wdXBfMjcwOGUzZjU2YWUwNGJkYWFhMDYxNDY1NWQ3ODEwMmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3ZmNjN2U1MzhhYzQ4OWZiNzExYjE0YWQzMTY5MDU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0NjY1OTEsIC03My45OTEzODE1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2YTdhMGVjZTUwZDQzMDg4NzQxYWM1ZDA2ZGQ3ZDBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjhkOTZiMThmNDllNDg4ZjhhYzNmZjRkNmIwMTQ1ZWUgPSAkKGA8ZGl2IGlkPSJodG1sXzI4ZDk2YjE4ZjQ5ZTQ4OGY4YWMzZmY0ZDZiMDE0NWVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDM4IFN0ICYgOCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY1Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogODEwPGJyPiBuZXQgZGVwYXJ0dXJlczogMTUzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2YTdhMGVjZTUwZDQzMDg4NzQxYWM1ZDA2ZGQ3ZDBmLnNldENvbnRlbnQoaHRtbF8yOGQ5NmIxOGY0OWU0ODhmOGFjM2ZmNGQ2YjAxNDVlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80N2ZjYzdlNTM4YWM0ODlmYjcxMWIxNGFkMzE2OTA1OS5iaW5kUG9wdXAocG9wdXBfMzZhN2EwZWNlNTBkNDMwODg3NDFhYzVkMDZkZDdkMGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlNzk1ODE3N2YyNjQ1NTc4NDllNzViZTU5YmM0MDUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1MjczMDcsIC03My45ODMxNjkzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMyLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNDcwNDRlNjRhOTY0Y2EzOTdjMzMzZjUxZmJhNmFiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiYjM0MTFkMDZiZjRkOGZhMjU4OGIzZjk1M2ZjYmNkID0gJChgPGRpdiBpZD0iaHRtbF83YmIzNDExZDA2YmY0ZDhmYTI1ODhiM2Y5NTNmY2JjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA0MyBTdCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5MTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI2MTxicj4gbmV0IGRlcGFydHVyZXM6IC02NTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzQ3MDQ0ZTY0YTk2NGNhMzk3YzMzM2Y1MWZiYTZhYmMuc2V0Q29udGVudChodG1sXzdiYjM0MTFkMDZiZjRkOGZhMjU4OGIzZjk1M2ZjYmNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlNzk1ODE3N2YyNjQ1NTc4NDllNzViZTU5YmM0MDUwLmJpbmRQb3B1cChwb3B1cF9jNDcwNDRlNjRhOTY0Y2EzOTdjMzMzZjUxZmJhNmFiYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzJkMTc1NzY0NzIwNGU5OWJjOGFlNGRjMjVjYTRhZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTU5NDE1OSwgLTc0LjAwMjExNjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTVlMGJlMTg3NDM2NDc4MDg4NTFkMGJhMzYzYTIwYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDJhNDFjMWM2ZWY0NWQyYjdkMTNlOWU5MTUzOWJlNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQyYTQxYzFjNmVmNDVkMmI3ZDEzZTllOTE1MzliZTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMzQgU3QgJiAxMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI0My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjM2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTVlMGJlMTg3NDM2NDc4MDg4NTFkMGJhMzYzYTIwYWUuc2V0Q29udGVudChodG1sXzlkMmE0MWMxYzZlZjQ1ZDJiN2QxM2U5ZTkxNTM5YmU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcyZDE3NTc2NDcyMDRlOTliYzhhZTRkYzI1Y2E0YWVkLmJpbmRQb3B1cChwb3B1cF85NWUwYmUxODc0MzY0NzgwODg1MWQwYmEzNjNhMjBhZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWJlMmE0N2FlMWVmNGY1NDhlYzk0ZWVmMDMyMmFkZTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDc2NTk0NywgLTczLjk4NDkwNzA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3MDQ2NjU0ZDJiMTRiMTZhMmRiZDA2NTcyYzlhY2UxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGE4NTA3YTYzMDU2NDhhMmI1MTk4M2NhNWZkZTVhNGYgPSAkKGA8ZGl2IGlkPSJodG1sXzBhODUwN2E2MzA1NjQ4YTJiNTE5ODNjYTVmZGU1YTRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDMzIFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ2MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzI0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTEzNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNzA0NjY1NGQyYjE0YjE2YTJkYmQwNjU3MmM5YWNlMS5zZXRDb250ZW50KGh0bWxfMGE4NTA3YTYzMDU2NDhhMmI1MTk4M2NhNWZkZTVhNGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWJlMmE0N2FlMWVmNGY1NDhlYzk0ZWVmMDMyMmFkZTYuYmluZFBvcHVwKHBvcHVwXzI3MDQ2NjU0ZDJiMTRiMTZhMmRiZDA2NTcyYzlhY2UxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82M2U3ZGM3ZjQ5ODc0MmVkYjI4MjI1Zjc0NTAyZTJiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NDAyMywgLTczLjk3NjA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlNDcyYmE1OGNjZDQ1Y2JiOTYxN2M3M2VmMzU2MmExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGY0MzI0ZWQxYzNjNDI1N2FhMTZhOTU1OWY2ZWU3ZTMgPSAkKGA8ZGl2IGlkPSJodG1sXzRmNDMyNGVkMWMzYzQyNTdhYTE2YTk1NTlmNmVlN2UzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDMzIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM3NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDM0PGJyPiBuZXQgZGVwYXJ0dXJlczogNTkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGU0NzJiYTU4Y2NkNDVjYmI5NjE3YzczZWYzNTYyYTEuc2V0Q29udGVudChodG1sXzRmNDMyNGVkMWMzYzQyNTdhYTE2YTk1NTlmNmVlN2UzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzZTdkYzdmNDk4NzQyZWRiMjgyMjVmNzQ1MDJlMmI1LmJpbmRQb3B1cChwb3B1cF8wZTQ3MmJhNThjY2Q0NWNiYjk2MTdjNzNlZjM1NjJhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTkzNTllOTdkZjE3NDgxM2EzMjJhYjc5MTQ2ZjFjZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDI5MDkwMiwgLTczLjk3NzA2MDU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODYyNzE1YjYzNmJiNGExOGJlNDBkMGM1YzNjYjNhNjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZGMzMGQ0ODI1YmY0N2IyYjhlYmNiMGRjMmRiZTg3ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWRjMzBkNDgyNWJmNDdiMmI4ZWJjYjBkYzJkYmU4N2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjIgQXZlICYgRSAzMSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTYxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA2My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NjI3MTViNjM2YmI0YTE4YmU0MGQwYzVjM2NiM2E2NS5zZXRDb250ZW50KGh0bWxfYWRjMzBkNDgyNWJmNDdiMmI4ZWJjYjBkYzJkYmU4N2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTkzNTllOTdkZjE3NDgxM2EzMjJhYjc5MTQ2ZjFjZmQuYmluZFBvcHVwKHBvcHVwXzg2MjcxNWI2MzZiYjRhMThiZTQwZDBjNWMzY2IzYTY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NTE5MzE1NWU2MzY0MjAyYmQ1NWNiNmFlNjdiYWZmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NzU2OTg5OTk5OTk5LCAtNzMuOTkwOTg1MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NWZlM2U2MTAyNTU0YmUwODU1NWZlMDdjMjQ3NzRlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkOGFhYWZjZjEzMzQyNjQ5ZTBlMmFhZjg2ZjdkYzI2ID0gJChgPGRpdiBpZD0iaHRtbF81ZDhhYWFmY2YxMzM0MjY0OWUwZTJhYWY4NmY3ZGMyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA0MiBTdCAmIDggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNjYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE5Nzxicj4gbmV0IGRlcGFydHVyZXM6IDMxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1ZmUzZTYxMDI1NTRiZTA4NTU1ZmUwN2MyNDc3NGVhLnNldENvbnRlbnQoaHRtbF81ZDhhYWFmY2YxMzM0MjY0OWUwZTJhYWY4NmY3ZGMyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTE5MzE1NWU2MzY0MjAyYmQ1NWNiNmFlNjdiYWZmYS5iaW5kUG9wdXAocG9wdXBfNTVmZTNlNjEwMjU1NGJlMDg1NTVmZTA3YzI0Nzc0ZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwYzNmMzZkOGM0ZjQ2YTZhZDM5MGM0MGY1MTUyZGExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcxNTIyLCAtNzMuOTkwNTQxMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kODUwYWM2MTk3ODM0YjRhYWIzNjQwZTc2Y2Q0YTMyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4MjhlMDEyZTc5MDQ0ZWRhOWE1YWQ2YTE4ZGVlMWYzID0gJChgPGRpdiBpZD0iaHRtbF8wODI4ZTAxMmU3OTA0NGVkYTlhNWFkNmExOGRlZTFmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTEgQXZlICYgVyA1OSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjAyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyODc8YnI+IG5ldCBkZXBhcnR1cmVzOiA4NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODUwYWM2MTk3ODM0YjRhYWIzNjQwZTc2Y2Q0YTMyNC5zZXRDb250ZW50KGh0bWxfMDgyOGUwMTJlNzkwNDRlZGE5YTVhZDZhMThkZWUxZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzBjM2YzNmQ4YzRmNDZhNmFkMzkwYzQwZjUxNTJkYTEuYmluZFBvcHVwKHBvcHVwX2Q4NTBhYzYxOTc4MzRiNGFhYjM2NDBlNzZjZDRhMzI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xY2I5YmE4ZDkyNWE0MDY0OWIyZWI5MWU4MWYxM2ViNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxODkzOTA0LCAtNzMuOTkyNjYyODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMmUzM2FjYWI4OGI0MzRkYTMwYTBmMGQ5NDg2YzEyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0ODE3NjIwOTZiNjQ5ZjQ5YmYyOThiYWFmMzAzNDZlID0gJChgPGRpdiBpZD0iaHRtbF9jNDgxNzYyMDk2YjY0OWY0OWJmMjk4YmFhZjMwMzQ2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9yc3l0aCBTdCAmIEJyb29tZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjU0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NzA8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzJlMzNhY2FiODhiNDM0ZGEzMGEwZjBkOTQ4NmMxMmYuc2V0Q29udGVudChodG1sX2M0ODE3NjIwOTZiNjQ5ZjQ5YmYyOThiYWFmMzAzNDZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjYjliYThkOTI1YTQwNjQ5YjJlYjkxZTgxZjEzZWI0LmJpbmRQb3B1cChwb3B1cF9jMmUzM2FjYWI4OGI0MzRkYTMwYTBmMGQ5NDg2YzEyZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjkwNzY1OTg3MmUxNGYyNzhiODg4MGRiOWYwMWFkMzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTA0NTEsIC03My45NjA4NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80OGYyOTY5YjgzNWI0YTE0YTNhOTljMjYzZjE2MTE5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmYmE4NjMyOTkyODRkNmM5ZmY0YjZmNTJiODk3NTZlID0gJChgPGRpdiBpZD0iaHRtbF8yZmJhODYzMjk5Mjg0ZDZjOWZmNGI2ZjUyYjg5NzU2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UyA1IFBsICYgUyA0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjI2PGJyPiBuZXQgZGVwYXJ0dXJlczogMTM1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ4ZjI5NjliODM1YjRhMTRhM2E5OWMyNjNmMTYxMTk5LnNldENvbnRlbnQoaHRtbF8yZmJhODYzMjk5Mjg0ZDZjOWZmNGI2ZjUyYjg5NzU2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82OTA3NjU5ODcyZTE0ZjI3OGI4ODgwZGI5ZjAxYWQzNC5iaW5kUG9wdXAocG9wdXBfNDhmMjk2OWI4MzViNGExNGEzYTk5YzI2M2YxNjExOTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmYzM1NTMxOTIxZDQ3ZjZiNzM3N2UwZDAwMDYwYjA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUyOTk2NDEsIC03My45ODcyMTYxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzMmNiMDhiYzI5OTQxZDFhYTFlOTY2MzkzNTg3ODA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzk1OGQyNjA1NGIxNDY3ZmE1NDdhMThjNzI3MTg0YzggPSAkKGA8ZGl2IGlkPSJodG1sX2M5NThkMjYwNTRiMTQ2N2ZhNTQ3YTE4YzcyNzE4NGM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgMzkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYxOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjg3PGJyPiBuZXQgZGVwYXJ0dXJlczogNjkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTMyY2IwOGJjMjk5NDFkMWFhMWU5NjYzOTM1ODc4MDcuc2V0Q29udGVudChodG1sX2M5NThkMjYwNTRiMTQ2N2ZhNTQ3YTE4YzcyNzE4NGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmYzM1NTMxOTIxZDQ3ZjZiNzM3N2UwZDAwMDYwYjA1LmJpbmRQb3B1cChwb3B1cF85MzJjYjA4YmMyOTk0MWQxYWExZTk2NjM5MzU4NzgwNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTk0NTNlNzA4ZGNmNDcxN2I2YWYwMjQ4NWNiNjgwMTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDI1NTA2NSwgLTc0LjAxMjcyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMjIyMTIyZDFmYzk0NjYwYjhkYWU2YWYxOWE2ODgwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0MmViNmJmY2UzNDRkODBhYWNmNWM5ZTc1MmRhYjRiID0gJChgPGRpdiBpZD0iaHRtbF81NDJlYjZiZmNlMzQ0ZDgwYWFjZjVjOWU3NTJkYWI0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2F0ZXIgLSBXaGl0ZWhhbGwgUGxhemE8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTAyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QyMjIxMjJkMWZjOTQ2NjBiOGRhZTZhZjE5YTY4ODAxLnNldENvbnRlbnQoaHRtbF81NDJlYjZiZmNlMzQ0ZDgwYWFjZjVjOWU3NTJkYWI0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOTQ1M2U3MDhkY2Y0NzE3YjZhZjAyNDg1Y2I2ODAxMS5iaW5kUG9wdXAocG9wdXBfZDIyMjEyMmQxZmM5NDY2MGI4ZGFlNmFmMTlhNjg4MDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllOTliYjc0ZGIzYzRlYjk4YWZmMjQ4ZTg0NWI3OWI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQxNDQzODcsIC03My45NzUzNjA4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEzMmMzYTIxYjBmNDRjYjJhMWQ2ZGUwOTBiMTAzMGQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjhlZTExYTkxMDY3NDlmOTlkMTlkNGRhOTExNTZjNzggPSAkKGA8ZGl2IGlkPSJodG1sX2I4ZWUxMWE5MTA2NzQ5Zjk5ZDE5ZDRkYTkxMTU2Yzc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xIEF2ZSAmIEUgMzAgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM2Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzUwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTEyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEzMmMzYTIxYjBmNDRjYjJhMWQ2ZGUwOTBiMTAzMGQ4LnNldENvbnRlbnQoaHRtbF9iOGVlMTFhOTEwNjc0OWY5OWQxOWQ0ZGE5MTE1NmM3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZTk5YmI3NGRiM2M0ZWI5OGFmZjI0OGU4NDViNzliNy5iaW5kUG9wdXAocG9wdXBfMTMyYzNhMjFiMGY0NGNiMmExZDZkZTA5MGIxMDMwZDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4OGRlYjlmYjQ3NzQ2NjY4OGI2ZjhiZDE1NjE0ODAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQwMjU4NzgsIC03My45ODQwOTIxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4ODY4OTA0ZmQ3ZjRkNTFiNjJjMjAwMTMwZDk2NTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWI2NmU4YWM2OTYyNDY5ZDk0YzhjYmY0MWY0YzdmYTEgPSAkKGA8ZGl2IGlkPSJodG1sXzliNjZlOGFjNjk2MjQ2OWQ5NGM4Y2JmNDFmNGM3ZmExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZXhpbmd0b24gQXZlICYgRSAyNCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzI4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODg2ODkwNGZkN2Y0ZDUxYjYyYzIwMDEzMGQ5NjU1Yi5zZXRDb250ZW50KGh0bWxfOWI2NmU4YWM2OTYyNDY5ZDk0YzhjYmY0MWY0YzdmYTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTg4ZGViOWZiNDc3NDY2Njg4YjZmOGJkMTU2MTQ4MDIuYmluZFBvcHVwKHBvcHVwXzY4ODY4OTA0ZmQ3ZjRkNTFiNjJjMjAwMTMwZDk2NTViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTdiNGU1MWUyNWQ0OTQ1ODlkNzc3NWJmYmExMWZiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNTM0ODI1LCAtNzMuOTYwMjQxMTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhMTJkYTVjNWFiMjRhZGU5NzBkMDY1NDFiMmNlMzkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmIzNTE3ZTJiYjg0NDE2MWJjMDIyODY0NzEzMzkwNTEgPSAkKGA8ZGl2IGlkPSJodG1sXzZiMzUxN2UyYmI4NDQxNjFiYzAyMjg2NDcxMzM5MDUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZXRyb3BvbGl0YW4gQXZlICYgQmVkZm9yZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTUzPGJyPiBuZXQgZGVwYXJ0dXJlczogMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYTEyZGE1YzVhYjI0YWRlOTcwZDA2NTQxYjJjZTM5MS5zZXRDb250ZW50KGh0bWxfNmIzNTE3ZTJiYjg0NDE2MWJjMDIyODY0NzEzMzkwNTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGE3YjRlNTFlMjVkNDk0NTg5ZDc3NzViZmJhMTFmYjUuYmluZFBvcHVwKHBvcHVwX2ZhMTJkYTVjNWFiMjRhZGU5NzBkMDY1NDFiMmNlMzkxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZTI2YWZmMTYwZDA0MDBlYmNlNTg5OGU4NWRjZTc4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MzExNTU1Mzc2NDg2LCAtNzMuOTgyMTUzNTM0ODg5MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC03LjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmIzOGQ5MTg2YTA3NDBiMmI5NGYwM2ExMjdlNzE1ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81M2YzZjg5ZGUzMTc0Mzg0OGQ1YTY1NTczNGU1ZTNkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTNmM2Y4OWRlMzE3NDM4NDhkNWE2NTU3MzRlNWUzZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxleGluZ3RvbiBBdmUgJiBFIDI5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MDcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM1NDxicj4gbmV0IGRlcGFydHVyZXM6IC0xNTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmIzOGQ5MTg2YTA3NDBiMmI5NGYwM2ExMjdlNzE1ZDYuc2V0Q29udGVudChodG1sXzUzZjNmODlkZTMxNzQzODQ4ZDVhNjU1NzM0ZTVlM2RjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RlMjZhZmYxNjBkMDQwMGViY2U1ODk4ZTg1ZGNlNzhjLmJpbmRQb3B1cChwb3B1cF82YjM4ZDkxODZhMDc0MGIyYjk0ZjAzYTEyN2U3MTVkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDNjNDY5NzUxMzBlNDIyMWEwZmVhNzM2NjRjOWM0ZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDQ0NDkyMSwgLTczLjk4MzAzNTI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTAuOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hOGM5MThkNmZhN2Q0NzhmOTE4ZDg0ZjhkNjU1ODU2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4OWY0NTcwM2QyMzQ5OTFiNGI2MmM0OGYwZDgwMjJmID0gJChgPGRpdiBpZD0iaHRtbF8zODlmNDU3MDNkMjM0OTkxYjRiNjJjNDhmMGQ4MDIyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAzMCBTdCAmIFBhcmsgQXZlIFM8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU0MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzIyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOGM5MThkNmZhN2Q0NzhmOTE4ZDg0ZjhkNjU1ODU2Zi5zZXRDb250ZW50KGh0bWxfMzg5ZjQ1NzAzZDIzNDk5MWI0YjYyYzQ4ZjBkODAyMmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDNjNDY5NzUxMzBlNDIyMWEwZmVhNzM2NjRjOWM0ZDkuYmluZFBvcHVwKHBvcHVwX2E4YzkxOGQ2ZmE3ZDQ3OGY5MThkODRmOGQ2NTU4NTZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MmZlYzI2YmMyOTg0Mzc2ODg3OWM1MWZkOGQyOGU5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMjU1MDg4LCAtNzMuOTg5NDAyMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC03LjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTkxMjJhM2I3OGEzNDM3Nzk5Nzk1NDM3YjAxMmEwOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzJiOWNlMzdkYmQ0YWY4ODBlYzFmYmI2YTAwMjk0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjcyYjljZTM3ZGJkNGFmODgwZWMxZmJiNmEwMDI5NDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyb250IFN0ICYgV2FzaGluZ3RvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjM4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA5MTxicj4gbmV0IGRlcGFydHVyZXM6IC0xNDcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTkxMjJhM2I3OGEzNDM3Nzk5Nzk1NDM3YjAxMmEwOTEuc2V0Q29udGVudChodG1sXzY3MmI5Y2UzN2RiZDRhZjg4MGVjMWZiYjZhMDAyOTQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyZmVjMjZiYzI5ODQzNzY4ODc5YzUxZmQ4ZDI4ZTk0LmJpbmRQb3B1cChwb3B1cF81OTEyMmEzYjc4YTM0Mzc3OTk3OTU0MzdiMDEyYTA5MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWUwNGI3MWUwYzdmNDYwYzk1MzFiNmZiYWNkYzRhNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTk3NzMsIC03My45Nzk5MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmQyZDZlZWJlZmE4NDY3YmJkOGUzMjg5ZGZmOTQwYjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODIzNDRiNzRmYjU0N2IxODFiNjgzY2E3ZjA3ZWUzMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjgyMzQ0Yjc0ZmI1NDdiMTgxYjY4M2NhN2YwN2VlMzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNhbmRzIFN0ICYgTmF2eSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmQyZDZlZWJlZmE4NDY3YmJkOGUzMjg5ZGZmOTQwYjQuc2V0Q29udGVudChodG1sX2Y4MjM0NGI3NGZiNTQ3YjE4MWI2ODNjYTdmMDdlZTMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzllMDRiNzFlMGM3ZjQ2MGM5NTMxYjZmYmFjZGM0YTQyLmJpbmRQb3B1cChwb3B1cF82ZDJkNmVlYmVmYTg0NjdiYmQ4ZTMyODlkZmY5NDBiNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDgxMjRkZDMzNjQ0NDk4ZjhjOTU0ZWRkZTVhMDUyMWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTY4ODcsIC03My45NjMxOTc5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTVhZjMyNjEzMTUxNGQ3MDhkODJiYzE0ZmNhMTdhOTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2I4Mzc2N2JkNjU0MWE5YmNhNjkwNjhiNzkyZWVhMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDdiODM3NjdiZDY1NDFhOWJjYTY5MDY4Yjc5MmVlYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPld5dGhlIEF2ZSAmIE1ldHJvcG9saXRhbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjQwPGJyPiBuZXQgZGVwYXJ0dXJlczogMzYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTVhZjMyNjEzMTUxNGQ3MDhkODJiYzE0ZmNhMTdhOTguc2V0Q29udGVudChodG1sXzA3YjgzNzY3YmQ2NTQxYTliY2E2OTA2OGI3OTJlZWEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ4MTI0ZGQzMzY0NDQ5OGY4Yzk1NGVkZGU1YTA1MjFlLmJpbmRQb3B1cChwb3B1cF9hNWFmMzI2MTMxNTE0ZDcwOGQ4MmJjMTRmY2ExN2E5OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzgxZDA2ZGZkODUxNDI0ZmE4Mzg0N2ZkMjA4Y2FhYWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzM4MTIxOTE5NjYzMiwgLTczLjk4MDU0NDIwOTQ4MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4MGNiNjU3Y2YwMDQwNzg4YTkzNDFlOTFjYWE0ZjI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDdjMjUyNjZkMDJiNGJjZjg3MDM4YzE2OWUxMDRlMjYgPSAkKGA8ZGl2IGlkPSJodG1sXzA3YzI1MjY2ZDAyYjRiY2Y4NzAzOGMxNjllMTA0ZTI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xIEF2ZSAmIEUgMTggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTU2PGJyPiBuZXQgZGVwYXJ0dXJlczogNTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzgwY2I2NTdjZjAwNDA3ODhhOTM0MWU5MWNhYTRmMjUuc2V0Q29udGVudChodG1sXzA3YzI1MjY2ZDAyYjRiY2Y4NzAzOGMxNjllMTA0ZTI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4MWQwNmRmZDg1MTQyNGZhODM4NDdmZDIwOGNhYWFkLmJpbmRQb3B1cChwb3B1cF83ODBjYjY1N2NmMDA0MDc4OGE5MzQxZTkxY2FhNGYyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmM3NzBiZGU3NmZjNDcwOGEzN2I2N2FlOTM1YTcxZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjQzOTksIC03NC4wMDQ3MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMzhlOTE1ZDBjNWM0Y2QzOGM4ZDA2Y2RhMTgzN2YxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyZTZlZGQ0ZjFlZjQ4NTQ5ZDk1NWU1MWJmOGIzODBiID0gJChgPGRpdiBpZD0iaHRtbF8yMmU2ZWRkNGYxZWY0ODU0OWQ5NTVlNTFiZjhiMzgwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NiBBdmUgJiBCcm9vbWUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIyMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTk2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzOGU5MTVkMGM1YzRjZDM4YzhkMDZjZGExODM3ZjE3LnNldENvbnRlbnQoaHRtbF8yMmU2ZWRkNGYxZWY0ODU0OWQ5NTVlNTFiZjhiMzgwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzc3MGJkZTc2ZmM0NzA4YTM3YjY3YWU5MzVhNzFkYy5iaW5kUG9wdXAocG9wdXBfMzM4ZTkxNWQwYzVjNGNkMzhjOGQwNmNkYTE4MzdmMTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JkYjY1NTkwMjlhNjQ2NmZhOTU5Njk1MGQxNmNjZDI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA1MzExOTQsIC03My45NzEwMDA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMjA4ODQyNTZmNWI0YTMyOTMxODgzMWJiZjNiY2FmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkMjQ5Y2Y4M2I5ZTRhZGJiMGNmMGEyODRhYmQyNjQwID0gJChgPGRpdiBpZD0iaHRtbF9iZDI0OWNmODNiOWU0YWRiYjBjZjBhMjg0YWJkMjY0MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFpbHJvYWQgQXZlICYgS2F5IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjIwODg0MjU2ZjViNGEzMjkzMTg4MzFiYmYzYmNhZjEuc2V0Q29udGVudChodG1sX2JkMjQ5Y2Y4M2I5ZTRhZGJiMGNmMGEyODRhYmQyNjQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JkYjY1NTkwMjlhNjQ2NmZhOTU5Njk1MGQxNmNjZDI0LmJpbmRQb3B1cChwb3B1cF9mMjA4ODQyNTZmNWI0YTMyOTMxODgzMWJiZjNiY2FmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTA5YjJmZDE5OTQ3NDZmNzgzYzNiODliZTczNmU4YmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjU5MDkzNiwgLTczLjk3NjM0MTUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTc4OWMxYWRmYzQ1NGY0OThlNmMzMjE1NjczNjEwODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZjIyZTMxMmIyNzc0ZWQzYjdmNDM2MzJlMGVkNjI5OSA9ICQoYDxkaXYgaWQ9Imh0bWxfOGYyMmUzMTJiMjc3NGVkM2I3ZjQzNjMyZTBlZDYyOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWwgUGFyayBTICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQzNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDE1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3ODljMWFkZmM0NTRmNDk4ZTZjMzIxNTY3MzYxMDg5LnNldENvbnRlbnQoaHRtbF84ZjIyZTMxMmIyNzc0ZWQzYjdmNDM2MzJlMGVkNjI5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MDliMmZkMTk5NDc0NmY3ODNjM2I4OWJlNzM2ZThiZi5iaW5kUG9wdXAocG9wdXBfYTc4OWMxYWRmYzQ1NGY0OThlNmMzMjE1NjczNjEwODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBiNTNiNTkzZDFlMDRmNWU5MTg1MjcwOWQ3ZjE4MzdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA1NjkyNTQsIC03NC4wMTY3NzY4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNWQ5MzhlNDM3NzA0Y2ExOTdlZjIwNGM5MmE5NjdjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlOGNiMTUzMjkwYTQ5M2VhZDY4MGFhNGNhZjkyYTE2ID0gJChgPGRpdiBpZD0iaHRtbF9iZThjYjE1MzI5MGE0OTNlYWQ2ODBhYTRjYWY5MmExNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGl0dGxlIFdlc3QgU3QgJiAxIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyODcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0NDxicj4gbmV0IGRlcGFydHVyZXM6IC00My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNWQ5MzhlNDM3NzA0Y2ExOTdlZjIwNGM5MmE5NjdjMS5zZXRDb250ZW50KGh0bWxfYmU4Y2IxNTMyOTBhNDkzZWFkNjgwYWE0Y2FmOTJhMTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGI1M2I1OTNkMWUwNGY1ZTkxODUyNzA5ZDdmMTgzN2IuYmluZFBvcHVwKHBvcHVwX2U1ZDkzOGU0Mzc3MDRjYTE5N2VmMjA0YzkyYTk2N2MxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYTMwNWI1Nzk4Y2U0MGY2OWEwNzM4NTQ3ZDlmMzM4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTE3NDQ0LCAtNzMuOTk2ODI2MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YTQyZTgzMTM5OWE0OWZkOWQ3MTk4ZjBhNjZlMmI5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyOTBiZDE0NzBlZjQyYjRhNzZmNDk1YTg1YWQwYzFjID0gJChgPGRpdiBpZD0iaHRtbF82MjkwYmQxNDcwZWY0MmI0YTc2ZjQ5NWE4NWFkMGMxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2F0aGVyaW5lIFN0ICYgTW9ucm9lIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA2PGJyPiBuZXQgZGVwYXJ0dXJlczogMTIzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhNDJlODMxMzk5YTQ5ZmQ5ZDcxOThmMGE2NmUyYjk1LnNldENvbnRlbnQoaHRtbF82MjkwYmQxNDcwZWY0MmI0YTc2ZjQ5NWE4NWFkMGMxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYTMwNWI1Nzk4Y2U0MGY2OWEwNzM4NTQ3ZDlmMzM4Ni5iaW5kUG9wdXAocG9wdXBfN2E0MmU4MzEzOTlhNDlmZDlkNzE5OGYwYTY2ZTJiOTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkNTIyMWM4NTNlOTQ2YjI4YWFkZTIxOWQxM2ZlYTE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIxNjU0ODEsIC03NC4wMDIzNDczN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTE0LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTE0MTBkY2Q1NTM0MDBhYjU4NTVjZGQ2NDQwZWYwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1ZmVkNTM3NjY2ODRlNDY5MTM2OTRlYjAyYzQ1ZTlkID0gJChgPGRpdiBpZD0iaHRtbF9kNWZlZDUzNzY2Njg0ZTQ2OTEzNjk0ZWIwMmM0NWU5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JhbmQgU3QgJiBHcmVlbmUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM5OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTExPGJyPiBuZXQgZGVwYXJ0dXJlczogLTI4OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTE0MTBkY2Q1NTM0MDBhYjU4NTVjZGQ2NDQwZWYwMy5zZXRDb250ZW50KGh0bWxfZDVmZWQ1Mzc2NjY4NGU0NjkxMzY5NGViMDJjNDVlOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmQ1MjIxYzg1M2U5NDZiMjhhYWRlMjE5ZDEzZmVhMTcuYmluZFBvcHVwKHBvcHVwXzJhMTQxMGRjZDU1MzQwMGFiNTg1NWNkZDY0NDBlZjAzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTE0YzYzMGRiMjI0ZDU2YTBiMzFkYzg4NzViNDViMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTQ0NSwgLTczLjk3NjgwNjAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGRiMWQyZWRjMDc3NGQ4ODljYjkwOWNjNjBmZjYwMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNTdmMmJjYzY4NTc0YjNkODQyNTM5YTg1NmRkZDM5NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzU3ZjJiY2M2ODU3NGIzZDg0MjUzOWE4NTZkZGQzOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMjcgU3QgJiAxIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzA5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Nzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNzAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGRiMWQyZWRjMDc3NGQ4ODljYjkwOWNjNjBmZjYwMzIuc2V0Q29udGVudChodG1sX2M1N2YyYmNjNjg1NzRiM2Q4NDI1MzlhODU2ZGRkMzk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1MTRjNjMwZGIyMjRkNTZhMGIzMWRjODg3NWI0NWIxLmJpbmRQb3B1cChwb3B1cF8wZGIxZDJlZGMwNzc0ZDg4OWNiOTA5Y2M2MGZmNjAzMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGEyNTUzOGUwOThhNDE5NzlhNDMyY2MzNzM3N2Q0MDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTAyMjM5MiwgLTczLjk3MTIxNDE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTAuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZGFkZWQzZWFkZGM0YzVlYjVhODdlMzk3YWZhMWZjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjZDdjMWQ4M2YyNTQzODc5OTMzY2MyMjAyMGI1Yjg1ID0gJChgPGRpdiBpZD0iaHRtbF9jY2Q3YzFkODNmMjU0Mzg3OTkzM2NjMjIwMjBiNWI4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0MyBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE5ODxicj4gbmV0IGRlcGFydHVyZXM6IC0yMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmRhZGVkM2VhZGRjNGM1ZWI1YTg3ZTM5N2FmYTFmYzguc2V0Q29udGVudChodG1sX2NjZDdjMWQ4M2YyNTQzODc5OTMzY2MyMjAyMGI1Yjg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhMjU1MzhlMDk4YTQxOTc5YTQzMmNjMzczNzdkNDAxLmJpbmRQb3B1cChwb3B1cF9iZGFkZWQzZWFkZGM0YzVlYjVhODdlMzk3YWZhMWZjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjRhMjA3ZWMyNDJhNGVkYjhmZTY4MjJiYjBjZGJlZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTkyOTEyNCwgLTczLjk4ODU5NjUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNkZWJiMDljNThlNDNlMjk3ZjAxM2NmYzMzZTdmODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWE3ZGRmMTJjYTg0MzcwYTY1ZmZiOGVmOTQ5MjZlMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNGFhN2RkZjEyY2E4NDM3MGE2NWZmYjhlZjk0OTI2ZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNDUgU3QgJiA4IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjYyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjNkZWJiMDljNThlNDNlMjk3ZjAxM2NmYzMzZTdmODYuc2V0Q29udGVudChodG1sXzRhYTdkZGYxMmNhODQzNzBhNjVmZmI4ZWY5NDkyNmUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0YTIwN2VjMjQyYTRlZGI4ZmU2ODIyYmIwY2RiZWU1LmJpbmRQb3B1cChwb3B1cF82M2RlYmIwOWM1OGU0M2UyOTdmMDEzY2ZjMzNlN2Y4NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTJlNWFmOTc5ZDkxNDhlM2I4NDYzZTUzY2VlNmQ1NTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTkxMDcsIC03My45NTkyMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmM2OGM2OGYyNzNhNGJkZGE2Y2Y2YTIzMTdkNTUxM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OWY5MTFkZGE0ZTI0MzBhYjk1YTk4YzJkOWQ3MTFjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTlmOTExZGRhNGUyNDMwYWI5NWE5OGMyZDlkNzExY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNjAgU3QgJiBZb3JrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTA1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Mjxicj4gbmV0IGRlcGFydHVyZXM6IC00My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYzY4YzY4ZjI3M2E0YmRkYTZjZjZhMjMxN2Q1NTEzZi5zZXRDb250ZW50KGh0bWxfNTlmOTExZGRhNGUyNDMwYWI5NWE5OGMyZDlkNzExY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTJlNWFmOTc5ZDkxNDhlM2I4NDYzZTUzY2VlNmQ1NTAuYmluZFBvcHVwKHBvcHVwX2JjNjhjNjhmMjczYTRiZGRhNmNmNmEyMzE3ZDU1MTNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZjFhYzY0YmMxMDc0YTY3OWQ0YzQxYjY4NzhiZGYzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1OTY4MDg1LCAtNzMuOTcwMzEzNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZjZiODNhNGUwNGM0MjEwYTM4MTM2OGNlM2MwOGUxOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4NTNiMWI0ZjY4NTQ4ZmRiMTZkZDEyZTcwYzk3OTY3ID0gJChgPGRpdiBpZD0iaHRtbF9lODUzYjFiNGY2ODU0OGZkYjE2ZGQxMmU3MGM5Nzk2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA1NSBTdCAmIExleGluZ3RvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDg5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Nzxicj4gbmV0IGRlcGFydHVyZXM6IC0yMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZjZiODNhNGUwNGM0MjEwYTM4MTM2OGNlM2MwOGUxOC5zZXRDb250ZW50KGh0bWxfZTg1M2IxYjRmNjg1NDhmZGIxNmRkMTJlNzBjOTc5NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWYxYWM2NGJjMTA3NGE2NzlkNGM0MWI2ODc4YmRmM2QuYmluZFBvcHVwKHBvcHVwX2RmNmI4M2E0ZTA0YzQyMTBhMzgxMzY4Y2UzYzA4ZTE4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Mjg1NjExMWQzODc0NjU3OGVlZGRhMDZkMTEzNWQ3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTUxMiwgLTc0LjAxNTc1NjAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOGY1NThhNDI2Y2Q0MjQzOGI1OWRiMjlhYTMzMDQxMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhZDAwMDA2NjJmNjQ0NzA4YzE5ODUwNDU3MzJkYWI5ID0gJChgPGRpdiBpZD0iaHRtbF9lYWQwMDAwNjYyZjY0NDcwOGMxOTg1MDQ1NzMyZGFiOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGggRW5kIEF2ZSAmIExpYmVydHkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM0NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDE3PGJyPiBuZXQgZGVwYXJ0dXJlczogNzIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDhmNTU4YTQyNmNkNDI0MzhiNTlkYjI5YWEzMzA0MTEuc2V0Q29udGVudChodG1sX2VhZDAwMDA2NjJmNjQ0NzA4YzE5ODUwNDU3MzJkYWI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyODU2MTExZDM4NzQ2NTc4ZWVkZGEwNmQxMTM1ZDcwLmJpbmRQb3B1cChwb3B1cF8wOGY1NThhNDI2Y2Q0MjQzOGI1OWRiMjlhYTMzMDQxMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjBkNzM0YWQwNTViNGZjM2E1ZTUxMTllYzEwOWE4NWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjAzNjc3NTI5ODQ1NSwgLTczLjk2MTY1MDcyOTE3OTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkYTQxNDNhNmY0MzRiZGQ5ZTEyMTcxMTRhMzYxMGYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjVkNmIyZDY3MDkxNGM5YWIyY2I3MGUxMGYzNTNlNWIgPSAkKGA8ZGl2IGlkPSJodG1sXzI1ZDZiMmQ2NzA5MTRjOWFiMmNiNzBlMTBmMzUzZTViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LZW50IEF2ZSAmIE4gNyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjIyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmRhNDE0M2E2ZjQzNGJkZDllMTIxNzExNGEzNjEwZjEuc2V0Q29udGVudChodG1sXzI1ZDZiMmQ2NzA5MTRjOWFiMmNiNzBlMTBmMzUzZTViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwZDczNGFkMDU1YjRmYzNhNWU1MTE5ZWMxMDlhODVjLmJpbmRQb3B1cChwb3B1cF8yZGE0MTQzYTZmNDM0YmRkOWUxMjE3MTE0YTM2MTBmMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTUzNTI2NGU2ZDA1NDA4ZmE5MDU3YWNlYjNmM2YxZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzg5MDY3OSwgLTczLjk0MTQyNzcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjZiN2QwNWY2YzQzNDA5NmJjNDg2OWU5MjMxMTk3NTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNWNjMDUxYTA5NWE0M2UyYjFiZDUzZjk3ZTBkZDQxOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjVjYzA1MWEwOTVhNDNlMmIxYmQ1M2Y5N2UwZGQ0MTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktpbmdzdG9uIEF2ZSAmIEhlcmtpbWVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzxicj4gbmV0IGRlcGFydHVyZXM6IDEzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2YjdkMDVmNmM0MzQwOTZiYzQ4NjllOTIzMTE5NzU2LnNldENvbnRlbnQoaHRtbF9iNWNjMDUxYTA5NWE0M2UyYjFiZDUzZjk3ZTBkZDQxOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNTM1MjY0ZTZkMDU0MDhmYTkwNTdhY2ViM2YzZjFlNS5iaW5kUG9wdXAocG9wdXBfMjZiN2QwNWY2YzQzNDA5NmJjNDg2OWU5MjMxMTk3NTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiOGRkN2IxNDFlMzRjYzE4YzZiNDRhM2JlMDAxN2M4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc5NDI2OCwgLTczLjkyOTg5MTA5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzMGVkNzU0NWUwZjRmMzhiN2VlY2RmNTY4NzIxODA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2RmNTFmNDNkYTYwNDQ5NmJiOTgyOGNmYjk3NmU5Y2MgPSAkKGA8ZGl2IGlkPSJodG1sXzNkZjUxZjQzZGE2MDQ0OTZiYjk4MjhjZmI5NzZlOWNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GdWx0b24gU3QgJiBVdGljYSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMDxicj4gbmV0IGRlcGFydHVyZXM6IC0xNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzBlZDc1NDVlMGY0ZjM4YjdlZWNkZjU2ODcyMTgwOC5zZXRDb250ZW50KGh0bWxfM2RmNTFmNDNkYTYwNDQ5NmJiOTgyOGNmYjk3NmU5Y2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2I4ZGQ3YjE0MWUzNGNjMThjNmI0NGEzYmUwMDE3YzguYmluZFBvcHVwKHBvcHVwXzkzMGVkNzU0NWUwZjRmMzhiN2VlY2RmNTY4NzIxODA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZjU4Njk4MTE0MzI0OWRhYmZkYTg3YzFhYjk3ZTI0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MTQ1OTgsIC03My45MzQ5MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljZmQwYTRlZDM1ZTRkY2ZiNWIwODQwZTMwYzliNGUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWZiMjMyZWI3ZGNjNDJjY2FiZjE4OTQyNzMzNDE2N2UgPSAkKGA8ZGl2IGlkPSJodG1sX2VmYjIzMmViN2RjYzQyY2NhYmYxODk0MjczMzQxNjdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZXdpcyBBdmUgJiBEZWNhdHVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTxicj4gbmV0IGRlcGFydHVyZXM6IDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWNmZDBhNGVkMzVlNGRjZmI1YjA4NDBlMzBjOWI0ZTMuc2V0Q29udGVudChodG1sX2VmYjIzMmViN2RjYzQyY2NhYmYxODk0MjczMzQxNjdlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFmNTg2OTgxMTQzMjQ5ZGFiZmRhODdjMWFiOTdlMjRiLmJpbmRQb3B1cChwb3B1cF85Y2ZkMGE0ZWQzNWU0ZGNmYjViMDg0MGUzMGM5YjRlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTkwZTMwODU0OTYzNDJjN2JhMzllOWEyNTJlM2ZhNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODAwMTA1LCAtNzMuOTM4NDc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjg1YmQ3NGFkNGZmNGQ2ZThiNDM5M2IzMTViMjMxN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82Y2JiZjdhYjNhZDg0OTcxYjE1OTVmMTcyMjBmNDllZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmNiYmY3YWIzYWQ4NDk3MWIxNTk1ZjE3MjIwZjQ5ZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFsYmFueSBBdmUgJiBGdWx0b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iODViZDc0YWQ0ZmY0ZDZlOGI0MzkzYjMxNWIyMzE3Yy5zZXRDb250ZW50KGh0bWxfNmNiYmY3YWIzYWQ4NDk3MWIxNTk1ZjE3MjIwZjQ5ZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTkwZTMwODU0OTYzNDJjN2JhMzllOWEyNTJlM2ZhNTcuYmluZFBvcHVwKHBvcHVwX2I4NWJkNzRhZDRmZjRkNmU4YjQzOTNiMzE1YjIzMTdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDg4MGRjMDA1ZjY0ODIyYWY3NTFjNDE1NGM0Nzc5NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MjYwMSwgLTczLjkzODAzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5NTdlMGEyYTNjMTRjNjA4ZTQxNzAwZTc3ZWNkZTFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDVjN2VjMTI3MzljNGQ2MGI1OGQ3MmI3NDVkZmM0OWMgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1YzdlYzEyNzM5YzRkNjBiNThkNzJiNzQ1ZGZjNDljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJjdXMgR2FydmV5IEJsdmQgJiBNYWNvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMyPGJyPiBuZXQgZGVwYXJ0dXJlczogMjEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDk1N2UwYTJhM2MxNGM2MDhlNDE3MDBlNzdlY2RlMWYuc2V0Q29udGVudChodG1sX2Q1YzdlYzEyNzM5YzRkNjBiNThkNzJiNzQ1ZGZjNDljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkODgwZGMwMDVmNjQ4MjJhZjc1MWM0MTU0YzQ3Nzk1LmJpbmRQb3B1cChwb3B1cF8wOTU3ZTBhMmEzYzE0YzYwOGU0MTcwMGU3N2VjZGUxZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDE3YWQyNzMxZDExNDI5MGJkOWNjMTBhNjBiMTlmNDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODIzNjg3MDAwMDAwMDUsIC03My45NDQxMThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWQ1NTEwZTA0NTA0MGE5Yjk4MzQzMzRkNDQ3YTYzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzNWMxMjNkM2ZkMTQzZDRhOGRhMjc4MGM0ZTE4Y2JkID0gJChgPGRpdiBpZD0iaHRtbF81MzVjMTIzZDNmZDE0M2Q0YThkYTI3ODBjNGUxOGNiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFsc2V5IFN0ICYgVG9tcGtpbnMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzU8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YWQ1NTEwZTA0NTA0MGE5Yjk4MzQzMzRkNDQ3YTYzOS5zZXRDb250ZW50KGh0bWxfNTM1YzEyM2QzZmQxNDNkNGE4ZGEyNzgwYzRlMThjYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDE3YWQyNzMxZDExNDI5MGJkOWNjMTBhNjBiMTlmNDUuYmluZFBvcHVwKHBvcHVwXzVhZDU1MTBlMDQ1MDQwYTliOTgzNDMzNGQ0NDdhNjM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTM4M2E5ZGQwNTk0OGE0OWNlOGUxMTUzNGE3ZjAyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NDAyMDAwMDAwMDAwNCwgLTczLjk0OTc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTY5OGY5OTZkMmQ5NDNkZWI1ZWY0NWMyZjc5MDRjZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZDAwMDg0ZGY2ZmE0YjE2OTQ4ZDE0YWZlZTA1ZTY0NiA9ICQoYDxkaXYgaWQ9Imh0bWxfMmQwMDA4NGRmNmZhNGIxNjk0OGQxNGFmZWUwNWU2NDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlB1dG5hbSBBdmUgJiBOb3N0cmFuZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM1PGJyPiBuZXQgZGVwYXJ0dXJlczogMzMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTY5OGY5OTZkMmQ5NDNkZWI1ZWY0NWMyZjc5MDRjZDMuc2V0Q29udGVudChodG1sXzJkMDAwODRkZjZmYTRiMTY5NDhkMTRhZmVlMDVlNjQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlMzgzYTlkZDA1OTQ4YTQ5Y2U4ZTExNTM0YTdmMDJjLmJpbmRQb3B1cChwb3B1cF9hNjk4Zjk5NmQyZDk0M2RlYjVlZjQ1YzJmNzkwNGNkMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjlmYmM0MWY3ZjlkNGRiNTkwMzg4NTEyYWNiZmRhZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODQ4OCwgLTczLjk2MzA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTlkNmI5NzE0YjNiNDdmNWEzODllYjJjZjYwODZhNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMGNhYzYxNjY5MGI0NGIzODU0ZjUwNDI0ZjY5YzQ2NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjBjYWM2MTY2OTBiNDRiMzg1NGY1MDQyNGY2OWM0NjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhbWJyaWRnZSBQbCAmIEdhdGVzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQxPGJyPiBuZXQgZGVwYXJ0dXJlczogMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTlkNmI5NzE0YjNiNDdmNWEzODllYjJjZjYwODZhNTguc2V0Q29udGVudChodG1sXzIwY2FjNjE2NjkwYjQ0YjM4NTRmNTA0MjRmNjljNDY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y5ZmJjNDFmN2Y5ZDRkYjU5MDM4ODUxMmFjYmZkYWRhLmJpbmRQb3B1cChwb3B1cF8xOWQ2Yjk3MTRiM2I0N2Y1YTM4OWViMmNmNjA4NmE1OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGM3NmNmOTIwYTUxNGJjZGE3N2M3YzFiZWRkMTIyOTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODUxNTMyLCAtNzMuOTQxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlNmFjYzFkYzVjOTRjZDY5NjViMWE4NTJkMGVjZmUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzI4YmE2OTFhN2YyNGNjNGE3ZDk5YjU3MGQ2MGQzMDkgPSAkKGA8ZGl2IGlkPSJodG1sXzcyOGJhNjkxYTdmMjRjYzRhN2Q5OWI1NzBkNjBkMzA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QdXRuYW0gQXZlICYgVGhyb29wIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQzPGJyPiBuZXQgZGVwYXJ0dXJlczogMzAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGU2YWNjMWRjNWM5NGNkNjk2NWIxYTg1MmQwZWNmZTAuc2V0Q29udGVudChodG1sXzcyOGJhNjkxYTdmMjRjYzRhN2Q5OWI1NzBkNjBkMzA5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBjNzZjZjkyMGE1MTRiY2RhNzdjN2MxYmVkZDEyMjk4LmJpbmRQb3B1cChwb3B1cF80ZTZhY2MxZGM1Yzk0Y2Q2OTY1YjFhODUyZDBlY2ZlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2E1MWUyZjhlYjgwNDVkNWEwNzZjZmFkMGMxYmFiMWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODYzMTIsIC03My45MzU3NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViYThkMmU5MmJiOTQ5Zjg5OGY1YjQ0ODEyN2Q1ZTk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODBmMzc3MGYxZDExNDJiMGI5MGYyNzEzZTY1ZTc3MTUgPSAkKGA8ZGl2IGlkPSJodG1sXzgwZjM3NzBmMWQxMTQyYjBiOTBmMjcxM2U2NWU3NzE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZXdpcyBBdmUgJiBNYWRpc29uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTAxPGJyPiBuZXQgZGVwYXJ0dXJlczogODYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWJhOGQyZTkyYmI5NDlmODk4ZjViNDQ4MTI3ZDVlOTUuc2V0Q29udGVudChodG1sXzgwZjM3NzBmMWQxMTQyYjBiOTBmMjcxM2U2NWU3NzE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhNTFlMmY4ZWI4MDQ1ZDVhMDc2Y2ZhZDBjMWJhYjFlLmJpbmRQb3B1cChwb3B1cF81YmE4ZDJlOTJiYjk0OWY4OThmNWI0NDgxMjdkNWU5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzE2MmNlYjFjZjM3NDcxNGI4Mjc3ODc1NzYzNzgzY2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTAwODE1LCAtNzMuOTQ3OTE1MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MmZkNzAwODg1MmM0MWY0YmVmMDZkZmQ2YjI2NWE2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhMDc0Mzk3MjMwOTRmYjZhNGE0MzBlNDI5NDFiZDE4ID0gJChgPGRpdiBpZD0iaHRtbF85YTA3NDM5NzIzMDk0ZmI2YTRhNDMwZTQyOTQxYmQxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFyY3kgQXZlICYgTGFmYXlldHRlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDY8YnI+IG5ldCBkZXBhcnR1cmVzOiA0MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MmZkNzAwODg1MmM0MWY0YmVmMDZkZmQ2YjI2NWE2MC5zZXRDb250ZW50KGh0bWxfOWEwNzQzOTcyMzA5NGZiNmE0YTQzMGU0Mjk0MWJkMTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzE2MmNlYjFjZjM3NDcxNGI4Mjc3ODc1NzYzNzgzY2YuYmluZFBvcHVwKHBvcHVwXzcyZmQ3MDA4ODUyYzQxZjRiZWYwNmRmZDZiMjY1YTYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZDY4OGFhMmRhNTU0OWYwYWNjYjEyYTczNmZmZjE1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4OTQ5MzIsIC03My45NDIwNjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWIxNzdiMTk1MWQ0OTU4OWExN2IxYzliMGUxNzJmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0NjgwMzVkMmJhMjRiYmM4NjE1YjlkMzViMDliNzkwID0gJChgPGRpdiBpZD0iaHRtbF82NDY4MDM1ZDJiYTI0YmJjODYxNWI5ZDM1YjA5Yjc5MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlZW5lIEF2ZSAmIFRocm9vcCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMzPGJyPiBuZXQgZGVwYXJ0dXJlczogMjkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2ViMTc3YjE5NTFkNDk1ODlhMTdiMWM5YjBlMTcyZjkuc2V0Q29udGVudChodG1sXzY0NjgwMzVkMmJhMjRiYmM4NjE1YjlkMzViMDliNzkwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VkNjg4YWEyZGE1NTQ5ZjBhY2NiMTJhNzM2ZmZmMTU1LmJpbmRQb3B1cChwb3B1cF9jZWIxNzdiMTk1MWQ0OTU4OWExN2IxYzliMGUxNzJmOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg1MGFmYjk0NmZlNDMzYzk3NzY0ZTk5NzRmNmIyMjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODgzMzM3MDAwMDAwMSwgLTczLjk1MDkxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmNzNmNzM1MGI2MDRiMDc5MTEzMTlmYWE2OTY1NzY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RjOTM2ZDljZGFkNDBjZWEzYjE3OWViYzliOGE3NTUgPSAkKGA8ZGl2IGlkPSJodG1sX2NkYzkzNmQ5Y2RhZDQwY2VhM2IxNzllYmM5YjhhNzU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbmUgQXZlICYgTm9zdHJhbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZjczZjczNTBiNjA0YjA3OTExMzE5ZmFhNjk2NTc2NC5zZXRDb250ZW50KGh0bWxfY2RjOTM2ZDljZGFkNDBjZWEzYjE3OWViYzliOGE3NTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjg1MGFmYjk0NmZlNDMzYzk3NzY0ZTk5NzRmNmIyMjMuYmluZFBvcHVwKHBvcHVwXzhmNzNmNzM1MGI2MDRiMDc5MTEzMTlmYWE2OTY1NzY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MWY3MjEyMmVkZWI0NDZkODgwYTg5OWQzYTg3YzZkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MDcyNTQ5LCAtNzMuOTUxMzM0NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2ZDBmYjhhNDc2ODQyZThiZDllYzJlMWYwZTZiMDI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQ1YzVhZGI0ZGJhNDFmNDg1NzU3M2YwM2NlYjBjMjAgPSAkKGA8ZGl2IGlkPSJodG1sXzE0NWM1YWRiNGRiYTQxZjQ4NTc1NzNmMDNjZWIwYzIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Lb3NjaXVzemtvIFN0ICYgTm9zdHJhbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDA8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NmQwZmI4YTQ3Njg0MmU4YmQ5ZWMyZTFmMGU2YjAyNy5zZXRDb250ZW50KGh0bWxfMTQ1YzVhZGI0ZGJhNDFmNDg1NzU3M2YwM2NlYjBjMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzFmNzIxMjJlZGViNDQ2ZDg4MGE4OTlkM2E4N2M2ZDguYmluZFBvcHVwKHBvcHVwXzg2ZDBmYjhhNDc2ODQyZThiZDllYzJlMWYwZTZiMDI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDk1YTkxYmExZGI0YTI4OWQ5M2EwODU1ZjFiZjI0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MTI4MjU4LCAtNzMuOTQ1MjQxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4ZGI4ZjUzNDg2MjQ1ZDJiODQwMDgzY2RhY2U5ZDI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVkYjVjNmZlMjM1NDhkOTliMTEyZjgwNjk4YmY1ZjYgPSAkKGA8ZGl2IGlkPSJodG1sXzVlZGI1YzZmZTIzNTQ4ZDk5YjExMmY4MDY5OGJmNWY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Lb3NjaXVzemtvIFN0ICYgVG9tcGtpbnMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjI8YnI+IG5ldCBkZXBhcnR1cmVzOiA0NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOGRiOGY1MzQ4NjI0NWQyYjg0MDA4M2NkYWNlOWQyOS5zZXRDb250ZW50KGh0bWxfNWVkYjVjNmZlMjM1NDhkOTliMTEyZjgwNjk4YmY1ZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjA5NWE5MWJhMWRiNGEyODlkOTNhMDg1NWYxYmYyNDcuYmluZFBvcHVwKHBvcHVwX2E4ZGI4ZjUzNDg2MjQ1ZDJiODQwMDgzY2RhY2U5ZDI5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOWE1ZjE1NTJkYzc0MzE3OTNiMzJmNDNhOTFlMmY2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MjM3MDc0LCAtNzMuOTM3MDU0MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4NmIzYjdjZjA2NzQxN2U5M2U2MWZiNTNlMmU4ZjI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2YyZjhlZTEzMzRmNDhlNGE1YzAwY2M5YjA3MjQ0OGEgPSAkKGA8ZGl2IGlkPSJodG1sXzdmMmY4ZWUxMzM0ZjQ4ZTRhNWMwMGNjOWIwNzI0NDhhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZXdpcyBBdmUgJiBLb3NjaXVzemtvIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxOTxicj4gbmV0IGRlcGFydHVyZXM6IDE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4NmIzYjdjZjA2NzQxN2U5M2U2MWZiNTNlMmU4ZjI0LnNldENvbnRlbnQoaHRtbF83ZjJmOGVlMTMzNGY0OGU0YTVjMDBjYzliMDcyNDQ4YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOWE1ZjE1NTJkYzc0MzE3OTNiMzJmNDNhOTFlMmY2YS5iaW5kUG9wdXAocG9wdXBfYjg2YjNiN2NmMDY3NDE3ZTkzZTYxZmI1M2UyZThmMjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VmY2I5MWZkNGEwNjRmYzA4Mjc1MjU0NzZkNjhjYzczID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkzMzk4MjAwMDAwMDA0LCAtNzMuOTM5ODc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80M2MzNzE1ZmMyZmU0MzQ4YmZkYmZkNzMxMWY0NWQzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiZmFkYzgzNjM4NjRlYWM4ODA2ODVmNjIyNDJkYTUzID0gJChgPGRpdiBpZD0iaHRtbF9hYmZhZGM4MzYzODY0ZWFjODgwNjg1ZjYyMjQyZGE1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHVsYXNraSBTdCAmIE1hcmN1cyBHYXJ2ZXkgQmx2ZDxicj4gdG90YWwgZGVwYXJ0dXJlczogMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80M2MzNzE1ZmMyZmU0MzQ4YmZkYmZkNzMxMWY0NWQzMi5zZXRDb250ZW50KGh0bWxfYWJmYWRjODM2Mzg2NGVhYzg4MDY4NWY2MjI0MmRhNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWZjYjkxZmQ0YTA2NGZjMDgyNzUyNTQ3NmQ2OGNjNzMuYmluZFBvcHVwKHBvcHVwXzQzYzM3MTVmYzJmZTQzNDhiZmRiZmQ3MzExZjQ1ZDMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNmUxNWFmZDUxNDg0MmJmYTZmYWJmZTc2NDE4ZTU2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NDI1NDAzLCAtNzMuOTQ2MjY5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTUyNTlkMjgxNDU0MGU5OTdlYjBiMjUwNGNjZjQ2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5MTkwYmJjMmU4NzQ1ZTJiMDhmOTMwN2IyMDhhY2EyID0gJChgPGRpdiBpZD0iaHRtbF9hOTE5MGJiYzJlODc0NWUyYjA4ZjkzMDdiMjA4YWNhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsbG91Z2hieSBBdmUgJiBUb21wa2lucyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Nzxicj4gbmV0IGRlcGFydHVyZXM6IDQ3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlNTI1OWQyODE0NTQwZTk5N2ViMGIyNTA0Y2NmNDZkLnNldENvbnRlbnQoaHRtbF9hOTE5MGJiYzJlODc0NWUyYjA4ZjkzMDdiMjA4YWNhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNmUxNWFmZDUxNDg0MmJmYTZmYWJmZTc2NDE4ZTU2MC5iaW5kUG9wdXAocG9wdXBfNWU1MjU5ZDI4MTQ1NDBlOTk3ZWIwYjI1MDRjY2Y0NmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4OGYxNzk1MDgzZDRjZjc5ZmI1ZmU0ZjRiZDI1NmExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk2MjI5MzcsIC03My45NDM3MTA5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzllNDk2NWQ2MzY0OTQ2M2ViNTJjNzlhOGE3OGIxN2UzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzJkZTE0MmI1NTU3NDFlODk2NDQzZjE1MjhkOWZlMWMgPSAkKGA8ZGl2IGlkPSJodG1sXzcyZGUxNDJiNTU1NzQxZTg5NjQ0M2YxNTI4ZDlmZTFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaHJvb3AgQXZlICYgTXlydGxlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI1PGJyPiBuZXQgZGVwYXJ0dXJlczogMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWU0OTY1ZDYzNjQ5NDYzZWI1MmM3OWE4YTc4YjE3ZTMuc2V0Q29udGVudChodG1sXzcyZGUxNDJiNTU1NzQxZTg5NjQ0M2YxNTI4ZDlmZTFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q4OGYxNzk1MDgzZDRjZjc5ZmI1ZmU0ZjRiZDI1NmExLmJpbmRQb3B1cChwb3B1cF85ZTQ5NjVkNjM2NDk0NjNlYjUyYzc5YThhNzhiMTdlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzVkYjE3YWRkZjM1NDVhZGJjZjYxYjk2ZThkOWY4MTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTUzOTgxNywgLTczLjk0OTU0OTA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2JhNzI4ZmJkODk1NDA5ZWJkMTdjZWY3YmM2YWEyNzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMGU5MWE1Nzc2ZTQ0NGEzOGRjZmFmZTRiYzY1MDViNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDBlOTFhNTc3NmU0NDRhMzhkY2ZhZmU0YmM2NTA1YjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk15cnRsZSBBdmUgJiBNYXJjeSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMzxicj4gbmV0IGRlcGFydHVyZXM6IC00LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNiYTcyOGZiZDg5NTQwOWViZDE3Y2VmN2JjNmFhMjcyLnNldENvbnRlbnQoaHRtbF8wMGU5MWE1Nzc2ZTQ0NGEzOGRjZmFmZTRiYzY1MDViNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNWRiMTdhZGRmMzU0NWFkYmNmNjFiOTZlOGQ5ZjgxOC5iaW5kUG9wdXAocG9wdXBfM2JhNzI4ZmJkODk1NDA5ZWJkMTdjZWY3YmM2YWEyNzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2ZWNkMWRhNjlmZDQ4N2I4Yjc5YmFmNzlhZDFmYmJlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk1MjcwMDgsIC03My45NTIzODEwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZjJkY2RjNTZiNWU0OTAwOWFlMWZkMTVjNTc4MTQ3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkMWJjYzdjYjhlOTQzMzQ5MGM2ZDk2MTA0OWI4NjIyID0gJChgPGRpdiBpZD0iaHRtbF82ZDFiY2M3Y2I4ZTk0MzM0OTBjNmQ5NjEwNDliODYyMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9zdHJhbmQgQXZlICYgTXlydGxlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZjJkY2RjNTZiNWU0OTAwOWFlMWZkMTVjNTc4MTQ3YS5zZXRDb250ZW50KGh0bWxfNmQxYmNjN2NiOGU5NDMzNDkwYzZkOTYxMDQ5Yjg2MjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjZlY2QxZGE2OWZkNDg3YjhiNzliYWY3OWFkMWZiYmUuYmluZFBvcHVwKHBvcHVwX2RmMmRjZGM1NmI1ZTQ5MDA5YWUxZmQxNWM1NzgxNDdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOTE2ZWFiYWEyMGM0Y2RkYjA3NWExYTBmZTVkNDZlOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NjgxOTYzLCAtNzMuOTM3NTY5MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjM0NWE3MDM4MTM0ZDMwOGNhZTQ3YjlhZWFkYzY5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4N2MxMmM4MDA4NjQ1YzJiMDhhMTc0ZWIzZmQwZDliID0gJChgPGRpdiBpZD0iaHRtbF9jODdjMTJjODAwODY0NWMyYjA4YTE3NGViM2ZkMGQ5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TXlydGxlIEF2ZSAmIExld2lzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ4PGJyPiBuZXQgZGVwYXJ0dXJlczogMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjM0NWE3MDM4MTM0ZDMwOGNhZTQ3YjlhZWFkYzY5Ny5zZXRDb250ZW50KGh0bWxfYzg3YzEyYzgwMDg2NDVjMmIwOGExNzRlYjNmZDBkOWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzkxNmVhYmFhMjBjNGNkZGIwNzVhMWEwZmU1ZDQ2ZTkuYmluZFBvcHVwKHBvcHVwX2IyMzQ1YTcwMzgxMzRkMzA4Y2FlNDdiOWFlYWRjNjk3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMGNkOWJmM2RjMWE0NGRlYjkyZTQ2M2NjYzFjMDU4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMDI5NTExLCAtNzMuOTUwMzIyODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzY2Y3MmRjYmJiMzQ4YTU4MmYyMTQ2MTFkODY2NzgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWRlYzMwZGM4OTM0NGE1N2JjZjMwZTg3MzkwNWU2NjggPSAkKGA8ZGl2IGlkPSJodG1sXzFkZWMzMGRjODkzNDRhNTdiY2YzMGU4NzM5MDVlNjY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbmlvbiBBdmUgJiBXYWxsYWJvdXQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNjxicj4gbmV0IGRlcGFydHVyZXM6IDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTNjZjcyZGNiYmIzNDhhNTgyZjIxNDYxMWQ4NjY3ODMuc2V0Q29udGVudChodG1sXzFkZWMzMGRjODkzNDRhNTdiY2YzMGU4NzM5MDVlNjY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwY2Q5YmYzZGMxYTQ0ZGViOTJlNDYzY2NjMWMwNThjLmJpbmRQb3B1cChwb3B1cF85M2NmNzJkY2JiYjM0OGE1ODJmMjE0NjExZDg2Njc4MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzRmYWI1OGY2MDY5NGJkYTg2YjI4NTRhZDM4MTFmYWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTk1NzYwOCwgLTczLjk0NzA4NDE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRmYTNhNTAyNDE3NDY1MGIwMzdlOWQxMDU4NWNjZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NTg3Y2FlNjA3OWI0ZDdhYTUzODVhOWNhODlmYmY0NSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTU4N2NhZTYwNzliNGQ3YWE1Mzg1YTljYTg5ZmJmNDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRvbXBraW5zIEF2ZSAmIEhvcGtpbnMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTxicj4gbmV0IGRlcGFydHVyZXM6IC02MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZGZhM2E1MDI0MTc0NjUwYjAzN2U5ZDEwNTg1Y2NkOS5zZXRDb250ZW50KGh0bWxfOTU4N2NhZTYwNzliNGQ3YWE1Mzg1YTljYTg5ZmJmNDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzRmYWI1OGY2MDY5NGJkYTg2YjI4NTRhZDM4MTFmYWMuYmluZFBvcHVwKHBvcHVwXzhkZmEzYTUwMjQxNzQ2NTBiMDM3ZTlkMTA1ODVjY2Q5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYTlkYzZiMjg2OGU0ZWIxYTdjYzY3ZWZjMGEzOGRjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMTY2NTcsIC03My45NDM3MzAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NGVkMTVkNzc5MDU0NWNkOWMwOGNkN2M4N2M5ZWJmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzMjFlZDE0ZTk4MjQ5Mjg4ZmQ3MzdmNmY1ZjI5MGQ5ID0gJChgPGRpdiBpZD0iaHRtbF81MzIxZWQxNGU5ODI0OTI4OGZkNzM3ZjZmNWYyOTBkOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXaGlwcGxlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjg8YnI+IG5ldCBkZXBhcnR1cmVzOiA4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0ZWQxNWQ3NzkwNTQ1Y2Q5YzA4Y2Q3Yzg3YzllYmY2LnNldENvbnRlbnQoaHRtbF81MzIxZWQxNGU5ODI0OTI4OGZkNzM3ZjZmNWYyOTBkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYTlkYzZiMjg2OGU0ZWIxYTdjYzY3ZWZjMGEzOGRjNi5iaW5kUG9wdXAocG9wdXBfNTRlZDE1ZDc3OTA1NDVjZDljMDhjZDdjODdjOWViZjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JhY2MzODRmOWI1MjQ5NTBhYTQyMzAyOWQ3ZWEyNjE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAzMTcyNCwgLTczLjk0MDYzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTY1MmU2YTIwYWY4NDJlMGI3OTQwODcxYzVhYzdmZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNzFlM2I3MjAzN2I0ZTIyYmY1OTE5MGVhYTE1YjQ4YiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjcxZTNiNzIwMzdiNGUyMmJmNTkxOTBlYWExNWI0OGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkh1bWJvbGR0IFN0ICYgVmFyZXQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Nzxicj4gbmV0IGRlcGFydHVyZXM6IDMwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2NTJlNmEyMGFmODQyZTBiNzk0MDg3MWM1YWM3ZmRiLnNldENvbnRlbnQoaHRtbF9iNzFlM2I3MjAzN2I0ZTIyYmY1OTE5MGVhYTE1YjQ4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYWNjMzg0ZjliNTI0OTUwYWE0MjMwMjlkN2VhMjYxNC5iaW5kUG9wdXAocG9wdXBfMTY1MmU2YTIwYWY4NDJlMGI3OTQwODcxYzVhYzdmZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3NmU2MGI2OGQxZDQ5MzU5MWUwN2M1NGEwOTk5M2FmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA0MTE3OTEsIC03My45NDgxODU5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81M2JmMTBiM2NkNzY0YTNhYTQ0YWMzOTBlNDM5YjViOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmNWYyZjUzZjcwNDRmY2RhMjFkOTIwYzYwNjBhYjVjID0gJChgPGRpdiBpZD0iaHRtbF84ZjVmMmY1M2Y3MDQ0ZmNkYTIxZDkyMGM2MDYwYWI1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TG9yaW1lciBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTNiZjEwYjNjZDc2NGEzYWE0NGFjMzkwZTQzOWI1Yjkuc2V0Q29udGVudChodG1sXzhmNWYyZjUzZjcwNDRmY2RhMjFkOTIwYzYwNjBhYjVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U3NmU2MGI2OGQxZDQ5MzU5MWUwN2M1NGEwOTk5M2FmLmJpbmRQb3B1cChwb3B1cF81M2JmMTBiM2NkNzY0YTNhYTQ0YWMzOTBlNDM5YjViOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDYyNTFkN2VkNmJkNDNhZmE3M2IxZmZkZDgwNTA0NWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDUxMDkxOCwgLTczLjk0NDA3Mjc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGMzODI5YTlkYTNiNGE3YzkxN2FmZThjZTU0OWFlZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NTkzMmQxN2U1MGU0MmFhOWY3YzMzZmY5Mzc5YzQ3NSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTU5MzJkMTdlNTBlNDJhYTlmN2MzM2ZmOTM3OWM0NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1jS2liYmluIFN0ICYgTWFuaGF0dGFuIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ4PGJyPiBuZXQgZGVwYXJ0dXJlczogMzUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGMzODI5YTlkYTNiNGE3YzkxN2FmZThjZTU0OWFlZmUuc2V0Q29udGVudChodG1sXzk1OTMyZDE3ZTUwZTQyYWE5ZjdjMzNmZjkzNzljNDc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q2MjUxZDdlZDZiZDQzYWZhNzNiMWZmZGQ4MDUwNDVhLmJpbmRQb3B1cChwb3B1cF8wYzM4MjlhOWRhM2I0YTdjOTE3YWZlOGNlNTQ5YWVmZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDA1OWFkYjlmY2ExNDIwN2E4ZTA5YmQ5ZDFhY2EzMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDUzODA3NywgLTczLjk0OTc2NTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTNlNDFjNmI5ZTNlNDRjMDhlNjY1OTE0N2VhMTI0N2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NzJjZjA1MWRmZTA0ZjRiYWUyMDMxYTE4ZmYwYTQyZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTcyY2YwNTFkZmUwNGY0YmFlMjAzMWExOGZmMGE0MmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJvZXJ1bSBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzZTQxYzZiOWUzZTQ0YzA4ZTY2NTkxNDdlYTEyNDdjLnNldENvbnRlbnQoaHRtbF85NzJjZjA1MWRmZTA0ZjRiYWUyMDMxYTE4ZmYwYTQyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MDU5YWRiOWZjYTE0MjA3YThlMDliZDlkMWFjYTMyOC5iaW5kUG9wdXAocG9wdXBfZTNlNDFjNmI5ZTNlNDRjMDhlNjY1OTE0N2VhMTI0N2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRkZjlhOTVhYjdjYTQ1ZjhhZDgzZDBiZGEwYzQwMmQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA1ODMzMzksIC03My45NDY0NDU3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGYyYzM0YzMzYWM3NGZiMzg5MTc2ZTRkNTdhNDg1NzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOTZjOWE0YWVmMGQ0MjFhYTU5Y2RmZDNlMTU0ZTE1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDk2YzlhNGFlZjBkNDIxYWE1OWNkZmQzZTE1NGUxNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxlb25hcmQgU3QgJiBCb2VydW0gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI3PGJyPiBuZXQgZGVwYXJ0dXJlczogMTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGYyYzM0YzMzYWM3NGZiMzg5MTc2ZTRkNTdhNDg1NzMuc2V0Q29udGVudChodG1sX2Q5NmM5YTRhZWYwZDQyMWFhNTljZGZkM2UxNTRlMTViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkZjlhOTVhYjdjYTQ1ZjhhZDgzZDBiZGEwYzQwMmQ1LmJpbmRQb3B1cChwb3B1cF80ZjJjMzRjMzNhYzc0ZmIzODkxNzZlNGQ1N2E0ODU3MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDA0NDk4MmM3ODUwNGJiMmE1MTc5MGRkYWZlZTEyMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDY5MTI1NCwgLTczLjk1NDQxNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODliMGE0ZjNiMGQwNGIzMTgyYjMwNjVkODJiYTdkZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDIwNDYzOGQyNzc0YTE2YWMwZjcxMjIwNGY4MTZlZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzQyMDQ2MzhkMjc3NGExNmFjMGY3MTIyMDRmODE2ZWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpdmlzaW9uIEF2ZSAmIEhvb3BlciBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjguMDxicj4gdG90YWwgYXJyaXZhbHM6IDM3PGJyPiBuZXQgZGVwYXJ0dXJlczogOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OWIwYTRmM2IwZDA0YjMxODJiMzA2NWQ4MmJhN2RmNC5zZXRDb250ZW50KGh0bWxfMzQyMDQ2MzhkMjc3NGExNmFjMGY3MTIyMDRmODE2ZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDA0NDk4MmM3ODUwNGJiMmE1MTc5MGRkYWZlZTEyMDAuYmluZFBvcHVwKHBvcHVwXzg5YjBhNGYzYjBkMDRiMzE4MmIzMDY1ZDgyYmE3ZGY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ODYzYTEyZDE2YWY0OTMxYTc4NTdiZjViZjBiZDlmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwNzY3Nzg4LCAtNzMuOTQwMTYxNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzZmOTg2ZWMyMTRmNDczZGE2YWJmZjY0ZjExNDVmZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Nzc3NGViN2E4YmE0ZTYxOWU4NDA1ZjA3ZmUyYzhmZCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTc3NzRlYjdhOGJhNGU2MTllODQwNWYwN2ZlMmM4ZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vbnRyb3NlIEF2ZSAmIEJ1c2h3aWNrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTExLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2Zjk4NmVjMjE0ZjQ3M2RhNmFiZmY2NGYxMTQ1ZmVmLnNldENvbnRlbnQoaHRtbF85Nzc3NGViN2E4YmE0ZTYxOWU4NDA1ZjA3ZmUyYzhmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ODYzYTEyZDE2YWY0OTMxYTc4NTdiZjViZjBiZDlmMy5iaW5kUG9wdXAocG9wdXBfYzZmOTg2ZWMyMTRmNDczZGE2YWJmZjY0ZjExNDVmZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3OTYwYmI3MmVjMTQwNWU5MjlhNWE5NWY2Mzk5YjExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA3MDg3MDEsIC03My45NTc5Njc4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhYzM5ZTRlOTBmNzQxMmY5YWE1YWNlMzcwOGQ0ZWE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmU2N2Y5MTQ2YmMwNDdiMTgyN2JiMTFiZWJhYTUwYTMgPSAkKGA8ZGl2IGlkPSJodG1sX2JlNjdmOTE0NmJjMDQ3YjE4MjdiYjExYmViYWE1MGEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EaXZpc2lvbiBBdmUgJiBNYXJjeSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxOTxicj4gbmV0IGRlcGFydHVyZXM6IC04LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhYzM5ZTRlOTBmNzQxMmY5YWE1YWNlMzcwOGQ0ZWE5LnNldENvbnRlbnQoaHRtbF9iZTY3ZjkxNDZiYzA0N2IxODI3YmIxMWJlYmFhNTBhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNzk2MGJiNzJlYzE0MDVlOTI5YTVhOTVmNjM5OWIxMS5iaW5kUG9wdXAocG9wdXBfZGFjMzllNGU5MGY3NDEyZjlhYTVhY2UzNzA4ZDRlYTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzZTg1MTkzZmZmYTRkYTA4MjM4Yjc5Mjk1N2YyZjc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA4NzAzNjgsIC03My45NDQ4NjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xN2RkOGFkYzVmMzA0NjcxOGNiYzg3OWFjNDJkMDVhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzMDA2NjE3YWNiNjRkM2U4OTk1NWI0MjEwM2QzYWU0ID0gJChgPGRpdiBpZD0iaHRtbF8zMzAwNjYxN2FjYjY0ZDNlODk5NTViNDIxMDNkM2FlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2Nob2xlcyBTdCAmIE1hbmhhdHRhbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4Nzxicj4gbmV0IGRlcGFydHVyZXM6IDcwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3ZGQ4YWRjNWYzMDQ2NzE4Y2JjODc5YWM0MmQwNWEwLnNldENvbnRlbnQoaHRtbF8zMzAwNjYxN2FjYjY0ZDNlODk5NTViNDIxMDNkM2FlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zM2U4NTE5M2ZmZmE0ZGEwODIzOGI3OTI5NTdmMmY3OS5iaW5kUG9wdXAocG9wdXBfMTdkZDhhZGM1ZjMwNDY3MThjYmM4NzlhYzQyZDA1YTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmMGFmZjc1NDg5YzQwNzZiNzJhZDE2Yjk3NjQ0ODdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA4NzcwODQsIC03My45NTA5NTI1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmEwNmM0MjcwZDc2NGY4NDkzZWZkMmUzNmIwODg4NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDdjNDk0NDQ1ODI0ZmE4YmUwNzM3NmM0ZjQxNjk2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTA3YzQ5NDQ0NTgyNGZhOGJlMDczNzZjNGY0MTY5NmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0YWdnIFN0ICYgVW5pb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzI8YnI+IG5ldCBkZXBhcnR1cmVzOiA1NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYTA2YzQyNzBkNzY0Zjg0OTNlZmQyZTM2YjA4ODg1NS5zZXRDb250ZW50KGh0bWxfNTA3YzQ5NDQ0NTgyNGZhOGJlMDczNzZjNGY0MTY5NmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2YwYWZmNzU0ODljNDA3NmI3MmFkMTZiOTc2NDQ4N2YuYmluZFBvcHVwKHBvcHVwX2ZhMDZjNDI3MGQ3NjRmODQ5M2VmZDJlMzZiMDg4ODU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YzU5ZWY0NWRhNDU0N2E5YjU5NDZmZTA4NzdmMWRkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwOTI1NTYyLCAtNzMuOTU5ODIyMThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODdjNWJiZGZhZmRlNDg4YTk3MDg3NzY4YmJiMTY0YWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YTI4MGQ4Y2RkNDA0M2JmOWY2MGUzYzk5ZTMzZGZmMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNWEyODBkOGNkZDQwNDNiZjlmNjBlM2M5OWUzM2RmZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2Fkd2F5ICYgUm9lYmxpbmcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODdjNWJiZGZhZmRlNDg4YTk3MDg3NzY4YmJiMTY0YWMuc2V0Q29udGVudChodG1sXzVhMjgwZDhjZGQ0MDQzYmY5ZjYwZTNjOTllMzNkZmYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVjNTllZjQ1ZGE0NTQ3YTliNTk0NmZlMDg3N2YxZGQ4LmJpbmRQb3B1cChwb3B1cF84N2M1YmJkZmFmZGU0ODhhOTcwODc3NjhiYmIxNjRhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTM4N2Y2NTE2OTQ1NGQ1MzgxNTQxMGVmNDE1ODc4ZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTEwMzUzNywgLTczLjk0NzE0MzAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZDdkZGVjNmJmNjQ0ZjIyODI1ZGExZGUxYjk0MzAwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjODNkZjJmZTFhZTQ3MzY4OTUxODU0ODhkZjUwZTM3ID0gJChgPGRpdiBpZD0iaHRtbF9iYzgzZGYyZmUxYWU0NzM2ODk1MTg1NDg4ZGY1MGUzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGVvbmFyZCBTdCAmIEdyYW5kIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogODI8YnI+IG5ldCBkZXBhcnR1cmVzOiA2MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZDdkZGVjNmJmNjQ0ZjIyODI1ZGExZGUxYjk0MzAwOC5zZXRDb250ZW50KGh0bWxfYmM4M2RmMmZlMWFlNDczNjg5NTE4NTQ4OGRmNTBlMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTM4N2Y2NTE2OTQ1NGQ1MzgxNTQxMGVmNDE1ODc4ZTkuYmluZFBvcHVwKHBvcHVwX2NkN2RkZWM2YmY2NDRmMjI4MjVkYTFkZTFiOTQzMDA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGU2MjNmMDUxMTY0ZDBiOTcxOTJiNGY5ZjAyYzc1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwOTM0MDAwMDAwMDAwNSwgLTczLjk1NjA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDAwOWEyN2E5ZjM0NzMyYjk1Nzg0MTM1ZGI4Nzc4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzNGE2ZjIzMDEyYjRmNWU4N2ViNTI2ZTQzNTYwOGJkID0gJChgPGRpdiBpZD0iaHRtbF82MzRhNmYyMzAxMmI0ZjVlODdlYjUyNmU0MzU2MDhiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UyA0IFN0ICYgUm9kbmV5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODU8YnI+IG5ldCBkZXBhcnR1cmVzOiA0MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDAwOWEyN2E5ZjM0NzMyYjk1Nzg0MTM1ZGI4Nzc4My5zZXRDb250ZW50KGh0bWxfNjM0YTZmMjMwMTJiNGY1ZTg3ZWI1MjZlNDM1NjA4YmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjhlNjIzZjA1MTE2NGQwYjk3MTkyYjRmOWYwMmM3NTguYmluZFBvcHVwKHBvcHVwXzZkMDA5YTI3YTlmMzQ3MzJiOTU3ODQxMzVkYjg3NzgzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hN2YwZGEyMjJiYTI0ZWVmYWJiMTJkMzMxMDRmNTY1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTg2MywgLTczLjk0NDAyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NjZjZWUzYWFlZDQwZjQ5N2Q3YTM5MjU5NmUxM2VkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjY2MjM4ZTBkZTdkNGYyMGIzNTRkYzVjY2NlNGE3YzYgPSAkKGA8ZGl2IGlkPSJodG1sXzY2NjIzOGUwZGU3ZDRmMjBiMzU0ZGM1Y2NjZTRhN2M2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFoYW0gQXZlICYgR3JhbmQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Mjxicj4gbmV0IGRlcGFydHVyZXM6IDQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5NjZjZWUzYWFlZDQwZjQ5N2Q3YTM5MjU5NmUxM2VkLnNldENvbnRlbnQoaHRtbF82NjYyMzhlMGRlN2Q0ZjIwYjM1NGRjNWNjY2U0YTdjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hN2YwZGEyMjJiYTI0ZWVmYWJiMTJkMzMxMDRmNTY1YS5iaW5kUG9wdXAocG9wdXBfZjk2NmNlZTNhYWVkNDBmNDk3ZDdhMzkyNTk2ZTEzZWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljZWZjZGU0OTMyMzQ5OGI4ZjMxMDQ3NDllZjEwMTcwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzExNjczNTEsIC03My45NTE0MTMxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWUwOWE2MDQ3NTJjNDc0YjljMGJmYmI5N2ExNzY0MzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zN2ZiNjVkZjMxODk0YzdjYTFkZDFhNGU3MTIyZmM0MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzdmYjY1ZGYzMTg5NGM3Y2ExZGQxYTRlNzEyMmZjNDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvcGUgU3QgJiBVbmlvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTI8YnI+IG5ldCBkZXBhcnR1cmVzOiA3OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTA5YTYwNDc1MmM0NzRiOWMwYmZiYjk3YTE3NjQzOS5zZXRDb250ZW50KGh0bWxfMzdmYjY1ZGYzMTg5NGM3Y2ExZGQxYTRlNzEyMmZjNDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWNlZmNkZTQ5MzIzNDk4YjhmMzEwNDc0OWVmMTAxNzAuYmluZFBvcHVwKHBvcHVwXzVlMDlhNjA0NzUyYzQ3NGI5YzBiZmJiOTdhMTc2NDM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ODc2OWNlZmI2Njg0ZTBhOGI1MjFjZjAxOWIwZjY1ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjQ3NjYxLCAtNzMuOTQxMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTM2M2JhYzZhMTE0MDRjYWNjZTYwZmViZDI2MWQxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0OWQ4MDM0NWZlMzRiNWY5NjlmM2ZhYmEwMGY0NGNjID0gJChgPGRpdiBpZD0iaHRtbF9iNDlkODAzNDVmZTM0YjVmOTY5ZjNmYWJhMDBmNDRjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnVzaHdpY2sgQXZlICYgUG93ZXJzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjk8YnI+IG5ldCBkZXBhcnR1cmVzOiA0My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTM2M2JhYzZhMTE0MDRjYWNjZTYwZmViZDI2MWQxMi5zZXRDb250ZW50KGh0bWxfYjQ5ZDgwMzQ1ZmUzNGI1Zjk2OWYzZmFiYTAwZjQ0Y2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzg3NjljZWZiNjY4NGUwYThiNTIxY2YwMTliMGY2NWYuYmluZFBvcHVwKHBvcHVwX2IxMzYzYmFjNmExMTQwNGNhY2NlNjBmZWJkMjYxZDEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzdmMDVmNDZiYWQ0ZTZlYWJjMGM3MDQ0NGMzYjc4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMzQ4NjU4LCAtNzMuOTQ3OTI0NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOWVhODU4MTc2ZTI0MDg4ODBkMDcyNjg2ZWRjNGZiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzZWQ5NTBkMWM4NDRiZmZhY2JlODJhNDU1MDViNTMwID0gJChgPGRpdiBpZD0iaHRtbF85M2VkOTUwZDFjODQ0YmZmYWNiZTgyYTQ1NTA1YjUzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGV2b2UgU3QgJiBMZW9uYXJkIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOWVhODU4MTc2ZTI0MDg4ODBkMDcyNjg2ZWRjNGZiZi5zZXRDb250ZW50KGh0bWxfOTNlZDk1MGQxYzg0NGJmZmFjYmU4MmE0NTUwNWI1MzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmM3ZjA1ZjQ2YmFkNGU2ZWFiYzBjNzA0NDRjM2I3ODQuYmluZFBvcHVwKHBvcHVwX2U5ZWE4NTgxNzZlMjQwODg4MGQwNzI2ODZlZGM0ZmJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYjIwNWM3NjU5YTI0MzlhYjZhMWJmNTUxODlhZGRkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDY5MDAwMDAwMDAwNCwgLTczLjk1NzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg1MDk1OTY1NTYzNDhmOWIxZDEwY2M5ZmQ0NWVkMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDZiZDA1ZTc3OTg0MWJlOTNkZjhjOWI0YmJjZjc1ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQ2YmQwNWU3Nzk4NDFiZTkzZGY4YzliNGJiY2Y3NWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvZWJsaW5nIFN0ICYgTiA0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4NTA5NTk2NTU2MzQ4ZjliMWQxMGNjOWZkNDVlZDI3LnNldENvbnRlbnQoaHRtbF85ZDZiZDA1ZTc3OTg0MWJlOTNkZjhjOWI0YmJjZjc1ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYjIwNWM3NjU5YTI0MzlhYjZhMWJmNTUxODlhZGRkNC5iaW5kUG9wdXAocG9wdXBfNTg1MDk1OTY1NTYzNDhmOWIxZDEwY2M5ZmQ0NWVkMjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU4YmEwYTJkMTgyNjQxNGI4MjRiNTM2ODIyMjk0MTM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE1MTQzLCAtNzMuOTQ0NTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1NmQwMGRkYWMxNjQxNWY4NGNhMTA1NzFkZmM0NmQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDU0Y2ZlZmM1OWNmNGNhZmJhYmQ4ZWFmODMxZDVkMjEgPSAkKGA8ZGl2IGlkPSJodG1sXzA1NGNmZWZjNTljZjRjYWZiYWJkOGVhZjgzMWQ1ZDIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFoYW0gQXZlICYgQ29uc2VseWVhIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyMDxicj4gbmV0IGRlcGFydHVyZXM6IC0zMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTZkMDBkZGFjMTY0MTVmODRjYTEwNTcxZGZjNDZkMi5zZXRDb250ZW50KGh0bWxfMDU0Y2ZlZmM1OWNmNGNhZmJhYmQ4ZWFmODMxZDVkMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNThiYTBhMmQxODI2NDE0YjgyNGI1MzY4MjIyOTQxMzQuYmluZFBvcHVwKHBvcHVwX2I1NmQwMGRkYWMxNjQxNWY4NGNhMTA1NzFkZmM0NmQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZmFlNWZjOWM1YWU0ZDZhYTQ4MzBjZWQzNzI4NjdiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDEzMzExLCAtNzMuOTUyMzQzODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzODc2YzVmNDRhODQ1NTk4YzJkODIwYzE4YTEwYjUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODY2YmEzNGM0Yzk0NGEzN2FkYmU1MWVjYWM1YzM5N2EgPSAkKGA8ZGl2IGlkPSJodG1sXzg2NmJhMzRjNGM5NDRhMzdhZGJlNTFlY2FjNWMzOTdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZXRyb3BvbGl0YW4gQXZlICYgTWVla2VyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzMjxicj4gbmV0IGRlcGFydHVyZXM6IDQyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzODc2YzVmNDRhODQ1NTk4YzJkODIwYzE4YTEwYjUzLnNldENvbnRlbnQoaHRtbF84NjZiYTM0YzRjOTQ0YTM3YWRiZTUxZWNhYzVjMzk3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZmFlNWZjOWM1YWU0ZDZhYTQ4MzBjZWQzNzI4NjdiMy5iaW5kUG9wdXAocG9wdXBfOTM4NzZjNWY0NGE4NDU1OThjMmQ4MjBjMThhMTBiNTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiN2UzMzM1NzFjNDQ3NDc4Mjc2ZTRjNWY2ODFkMzhjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2MDc1MSwgLTczLjk1MjAyOTAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTgyN2Y2OWI5MmE5NGMwZThlZDNhZTM5Mzk4NmNmNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNDc5MjlhYTU1ZGU0N2FjOTE0M2NiNDgwODZlNzFhMCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDQ3OTI5YWE1NWRlNDdhYzkxNDNjYjQ4MDg2ZTcxYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaW9uIEF2ZSAmIEphY2tzb24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3MDxicj4gbmV0IGRlcGFydHVyZXM6IDQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4MjdmNjliOTJhOTRjMGU4ZWQzYWUzOTM5ODZjZjc2LnNldENvbnRlbnQoaHRtbF9kNDc5MjlhYTU1ZGU0N2FjOTE0M2NiNDgwODZlNzFhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYjdlMzMzNTcxYzQ0NzQ3ODI3NmU0YzVmNjgxZDM4Yy5iaW5kUG9wdXAocG9wdXBfOTgyN2Y2OWI5MmE5NGMwZThlZDNhZTM5Mzk4NmNmNzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJjNjk4OTU1NzhhYjQ0MzE5ZjA4NTk3OTU0MGU1NWNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE3MzE4NDAzODU1Nzg1LCAtNzMuOTQ4MjAyMTMzMTc4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3NTBmOGMzMzViYjRjYTdiMDIyZGRhNjQ1MWIxNDVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2E0ZTViZDFlZDhiNDE1NDhhYTY2YjA3MzYxNTJkM2MgPSAkKGA8ZGl2IGlkPSJodG1sXzNhNGU1YmQxZWQ4YjQxNTQ4YWE2NmIwNzM2MTUyZDNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZW9uYXJkIFN0ICYgTWVla2VyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNzUwZjhjMzM1YmI0Y2E3YjAyMmRkYTY0NTFiMTQ1Yy5zZXRDb250ZW50KGh0bWxfM2E0ZTViZDFlZDhiNDE1NDhhYTY2YjA3MzYxNTJkM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmM2OTg5NTU3OGFiNDQzMTlmMDg1OTc5NTQwZTU1Y2EuYmluZFBvcHVwKHBvcHVwXzM3NTBmOGMzMzViYjRjYTdiMDIyZGRhNjQ1MWIxNDVjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMjE4Y2U5MWM4YWU0OTA5YjMwZjU5ODRhZGY4NGUzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNzc0NTkyLCAtNzMuOTU2MDAwOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQ3MjAzM2QwMjY2NDUwZGI4MTRjMjU1YmU2NGFjMjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYWNiY2FhNTZhMGI0Y2YzOWQ3ZjhkNTIyMTFhNDJmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWFjYmNhYTU2YTBiNGNmMzlkN2Y4ZDUyMjExYTQyZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gOCBTdCAmIERyaWdncyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI1MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjM1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkNzIwMzNkMDI2NjQ1MGRiODE0YzI1NWJlNjRhYzI1LnNldENvbnRlbnQoaHRtbF9lYWNiY2FhNTZhMGI0Y2YzOWQ3ZjhkNTIyMTFhNDJmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMjE4Y2U5MWM4YWU0OTA5YjMwZjU5ODRhZGY4NGUzYi5iaW5kUG9wdXAocG9wdXBfOGQ3MjAzM2QwMjY2NDUwZGI4MTRjMjU1YmU2NGFjMjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2ZDU4ZTZlOWE1MDQxMTZhNTQ1YmYxOGU1YTcxNzVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE3NjQsIC03My45NDg4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwNzkzYjk4MzU1MzRjZDNhYjhjMDgwNTI1YmE0YjcxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzBkOGZiOTRjYzZkNDhjNWI4ZWQxNmM1NjQ3YmExYTIgPSAkKGA8ZGl2IGlkPSJodG1sXzMwZDhmYjk0Y2M2ZDQ4YzViOGVkMTZjNTY0N2JhMWEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gcm9zdCBTdCAmIE1lZWtlciBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMyPGJyPiBuZXQgZGVwYXJ0dXJlczogMTkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA3OTNiOTgzNTUzNGNkM2FiOGMwODA1MjViYTRiNzEuc2V0Q29udGVudChodG1sXzMwZDhmYjk0Y2M2ZDQ4YzViOGVkMTZjNTY0N2JhMWEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc2ZDU4ZTZlOWE1MDQxMTZhNTQ1YmYxOGU1YTcxNzVkLmJpbmRQb3B1cChwb3B1cF9mMDc5M2I5ODM1NTM0Y2QzYWI4YzA4MDUyNWJhNGI3MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmUwNzhjNWJmZDU3NGFhZjk5ZDgzODg2NmQ5NmU0YmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkwMDk1LCAtNzMuOTU4NTI1MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjk3NzljNWMwZmQ0MjIzOTY1ZWQ4ZTU1YzMzMTQxMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxZTQ5NTE2ODE0YjRmNTg4ODk4ODY3NGM1Mzk2MmNmID0gJChgPGRpdiBpZD0iaHRtbF83MWU0OTUxNjgxNGI0ZjU4ODg5ODg2NzRjNTM5NjJjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVycnkgU3QgJiBOIDggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTMzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTg2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VmOTc3OWM1YzBmZDQyMjM5NjVlZDhlNTVjMzMxNDExLnNldENvbnRlbnQoaHRtbF83MWU0OTUxNjgxNGI0ZjU4ODg5ODg2NzRjNTM5NjJjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZTA3OGM1YmZkNTc0YWFmOTlkODM4ODY2ZDk2ZTRiYi5iaW5kUG9wdXAocG9wdXBfZWY5Nzc5YzVjMGZkNDIyMzk2NWVkOGU1NWMzMzE0MTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4YmQ3M2YzMTJkNzQyNTU5YTA5YWE3ZWFlZmRlOTRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE3NDUxNjksIC03My45NTg1MDkzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3YjIyNTMzZDdiNzRhNzFiZDE0NzE0ODVkNTZmNTI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQ2Y2VmNDMyYjU0NGVlYmI3MmUzZTliY2ZkNzFjMmEgPSAkKGA8ZGl2IGlkPSJodG1sXzE0NmNlZjQzMmI1NDRlZWJiNzJlM2U5YmNmZDcxYzJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OIDYgU3QgJiBCZWRmb3JkIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjQ2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMDI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDdiMjI1MzNkN2I3NGE3MWJkMTQ3MTQ4NWQ1NmY1Mjkuc2V0Q29udGVudChodG1sXzE0NmNlZjQzMmI1NDRlZWJiNzJlM2U5YmNmZDcxYzJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q4YmQ3M2YzMTJkNzQyNTU5YTA5YWE3ZWFlZmRlOTRjLmJpbmRQb3B1cChwb3B1cF80N2IyMjUzM2Q3Yjc0YTcxYmQxNDcxNDg1ZDU2ZjUyOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzI1YjJkYzgyZGY5NDRmNGI3Y2U1MzcyMTk3ZWZlNWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTY5ODExLCAtNzMuOTQ0ODU5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDkzMmIwNDU4ODIwNGQ0ZTkwYTkzMzc1M2E4OWE1ZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNDVkNzRjZTFiYTE0YmY2OThiOGRjMDQ5ZDM3MmI5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTQ1ZDc0Y2UxYmExNGJmNjk4YjhkYzA0OWQzNzJiOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYWhhbSBBdmUgJiBXaXRoZXJzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OTMyYjA0NTg4MjA0ZDRlOTBhOTMzNzUzYTg5YTVkZi5zZXRDb250ZW50KGh0bWxfZTQ1ZDc0Y2UxYmExNGJmNjk4YjhkYzA0OWQzNzJiOTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzI1YjJkYzgyZGY5NDRmNGI3Y2U1MzcyMTk3ZWZlNWYuYmluZFBvcHVwKHBvcHVwXzQ5MzJiMDQ1ODgyMDRkNGU5MGE5MzM3NTNhODlhNWRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZGY3M2E3Y2JmMmE0NDZhYTY1ZjE4ODE5ODA5NjBlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxOTI5MzAxLCAtNzMuOTQ1MDAzNzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3N2NkZTVmZjUwMzRhMTZhZDc5MWZjYTEwZTUzZTEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmE2MmEyNDFjNDkxNGVjMzhkMzExNzQyZGRkYmRmNmUgPSAkKGA8ZGl2IGlkPSJodG1sXzJhNjJhMjQxYzQ5MTRlYzM4ZDMxMTc0MmRkZGJkZjZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFoYW0gQXZlICYgSGVyYmVydCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYwPGJyPiBuZXQgZGVwYXJ0dXJlczogNDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjc3Y2RlNWZmNTAzNGExNmFkNzkxZmNhMTBlNTNlMTMuc2V0Q29udGVudChodG1sXzJhNjJhMjQxYzQ5MTRlYzM4ZDMxMTc0MmRkZGJkZjZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkZjczYTdjYmYyYTQ0NmFhNjVmMTg4MTk4MDk2MGVkLmJpbmRQb3B1cChwb3B1cF9iNzdjZGU1ZmY1MDM0YTE2YWQ3OTFmY2ExMGU1M2UxMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzg3MWI5NGEwOGYwNDNkYjk1MDlmZDJiN2JlODkxZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkyNCwgLTczLjk1MjQxOTk5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYxNDEzZTIwMDVkNjRjYTE5YjJkN2MxMjUzMjk4M2EwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQxNjkwYWU3YjBjNDM5ZGE4NTAzMjE1NmE3MGVhNmUgPSAkKGA8ZGl2IGlkPSJodG1sX2VkMTY5MGFlN2IwYzQzOWRhODUwMzIxNTZhNzBlYTZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbmlvbiBBdmUgJiBOIDEyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTQxM2UyMDA1ZDY0Y2ExOWIyZDdjMTI1MzI5ODNhMC5zZXRDb250ZW50KGh0bWxfZWQxNjkwYWU3YjBjNDM5ZGE4NTAzMjE1NmE3MGVhNmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzg3MWI5NGEwOGYwNDNkYjk1MDlmZDJiN2JlODkxZjAuYmluZFBvcHVwKHBvcHVwXzYxNDEzZTIwMDVkNjRjYTE5YjJkN2MxMjUzMjk4M2EwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDc5YThiNjM0OTU0YTVmOWUwZGRiZTA4MTIyYTZjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxOTI4LCAtNzMuOTQ4NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNTVhOGUwMzY0YmI0NGM3YWNlZjE5YTFmYTE4NDcwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkYjQ4YWExYWRkNTQzMDVhNGQ1MzEzNDUwYzY1ZTY3ID0gJChgPGRpdiBpZD0iaHRtbF82ZGI0OGFhMWFkZDU0MzA1YTRkNTMxMzQ1MGM2NWU2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGVvbmFyZCBTdCAmIEJheWFyZCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY2PGJyPiBuZXQgZGVwYXJ0dXJlczogNDkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU1YThlMDM2NGJiNDRjN2FjZWYxOWExZmExODQ3MDMuc2V0Q29udGVudChodG1sXzZkYjQ4YWExYWRkNTQzMDVhNGQ1MzEzNDUwYzY1ZTY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwNzlhOGI2MzQ5NTRhNWY5ZTBkZGJlMDgxMjJhNmNkLmJpbmRQb3B1cChwb3B1cF9jNTVhOGUwMzY0YmI0NGM3YWNlZjE5YTFmYTE4NDcwMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzkxODNlMWM1MjhmNDlkZGExNTM4OGNjN2E2Y2JhMWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjE1MjI0MDMzOTMwMywgLTczLjk0ODk4MjY1NjAwMjAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTFhMjY3OGEyMzAzNDZlNGI2Yzk4YmRiODg2NDdjYTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzgzODI4NDVmZGU0YzUzOWRmOTdiNDMxM2UwYjQ0YiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzc4MzgyODQ1ZmRlNGM1MzlkZjk3YjQzMTNlMGI0NGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxlb25hcmQgU3QgJiBNYW5oYXR0YW4gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA0Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMWEyNjc4YTIzMDM0NmU0YjZjOThiZGI4ODY0N2NhOS5zZXRDb250ZW50KGh0bWxfNzc4MzgyODQ1ZmRlNGM1MzlkZjk3YjQzMTNlMGI0NGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzkxODNlMWM1MjhmNDlkZGExNTM4OGNjN2E2Y2JhMWMuYmluZFBvcHVwKHBvcHVwXzExYTI2NzhhMjMwMzQ2ZTRiNmM5OGJkYjg4NjQ3Y2E5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNDljOGZiMTZiOWI0ZTNkYmUxYzIyYmY4MzU4MjcyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNDgxMjU2NDQwMDE3NSwgLTczLjk0NzUyNjIxNjUwNjk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODg1Yjg1ZWZkNjU0ZmQ0YjU0OGE2YjhkOWNiMDBhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3MGI2Zjc3ZDlhYzRhMjA4NzEzNGZiMDk4Njk5NjE0ID0gJChgPGRpdiBpZD0iaHRtbF9hNzBiNmY3N2Q5YWM0YTIwODcxMzRmYjA5ODY5OTYxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmFzc2F1IEF2ZSAmIE5ld2VsbCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE0NTxicj4gbmV0IGRlcGFydHVyZXM6IDExNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jODg1Yjg1ZWZkNjU0ZmQ0YjU0OGE2YjhkOWNiMDBhOC5zZXRDb250ZW50KGh0bWxfYTcwYjZmNzdkOWFjNGEyMDg3MTM0ZmIwOTg2OTk2MTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjQ5YzhmYjE2YjliNGUzZGJlMWMyMmJmODM1ODI3MmIuYmluZFBvcHVwKHBvcHVwX2M4ODViODVlZmQ2NTRmZDRiNTQ4YTZiOGQ5Y2IwMGE4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODkxNGQxM2RkNTI0NTAxOTAzYzdmMDYxMjBiMGRjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMDc5ODIxLCAtNzMuOTU0ODQ3MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwMDU4Njg4MzdkMjQyOGI5ODQyMzhiYTZmZWU4MWQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjIyNmZlMDk1NjU1NGMwYjljN2M1ZTYzNDczMWJmOWYgPSAkKGA8ZGl2IGlkPSJodG1sXzYyMjZmZTA5NTY1NTRjMGI5YzdjNWU2MzQ3MzFiZjlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OIDEyIFN0ICYgQmVkZm9yZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NDxicj4gbmV0IGRlcGFydHVyZXM6IDEyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwMDU4Njg4MzdkMjQyOGI5ODQyMzhiYTZmZWU4MWQ2LnNldENvbnRlbnQoaHRtbF82MjI2ZmUwOTU2NTU0YzBiOWM3YzVlNjM0NzMxYmY5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iODkxNGQxM2RkNTI0NTAxOTAzYzdmMDYxMjBiMGRjYS5iaW5kUG9wdXAocG9wdXBfNDAwNTg2ODgzN2QyNDI4Yjk4NDIzOGJhNmZlZTgxZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyYTU1MWU3MmY4NjQ3MWZiYjkyMmIwZmViOTQ3ZTQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIxNzkxMzQsIC03My45NTA0MTU0MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWMwOTc0YTA5MmIxNGFlZmI0ZjgwMGQ2ZDFlNzFjZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZjNjMTc3ZWJlODM0OWFmOTEwNTFmMmY4ZGI4YjAzMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMmYzYzE3N2ViZTgzNDlhZjkxMDUxZjJmOGRiOGIwMzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRyaWdncyBBdmUgJiBMb3JpbWVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjg8YnI+IG5ldCBkZXBhcnR1cmVzOiAzNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzA5NzRhMDkyYjE0YWVmYjRmODAwZDZkMWU3MWNkMC5zZXRDb250ZW50KGh0bWxfMmYzYzE3N2ViZTgzNDlhZjkxMDUxZjJmOGRiOGIwMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzJhNTUxZTcyZjg2NDcxZmJiOTIyYjBmZWI5NDdlNDAuYmluZFBvcHVwKHBvcHVwXzVjMDk3NGEwOTJiMTRhZWZiNGY4MDBkNmQxZTcxY2QwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZDdkM2VhMGJiYmE0YWQ2OTZjM2E2ZTMxMWQzYWJkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMTUzMjY3LCAtNzMuOTU3ODIzNTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTdjZjE4NzdkNjdjNDU2ZThjNzgwNGRmOTY0MWMzNzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzVkMTViMThjZDk0MjIwYTBjYjQxMDc2NTEyYjFhNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDc1ZDE1YjE4Y2Q5NDIyMGEwY2I0MTA3NjUxMmIxYTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gMTEgU3QgJiBXeXRoZSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyODxicj4gbmV0IGRlcGFydHVyZXM6IC0xNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85N2NmMTg3N2Q2N2M0NTZlOGM3ODA0ZGY5NjQxYzM3Mi5zZXRDb250ZW50KGh0bWxfNDc1ZDE1YjE4Y2Q5NDIyMGEwY2I0MTA3NjUxMmIxYTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2Q3ZDNlYTBiYmJhNGFkNjk2YzNhNmUzMTFkM2FiZDguYmluZFBvcHVwKHBvcHVwXzk3Y2YxODc3ZDY3YzQ1NmU4Yzc4MDRkZjk2NDFjMzcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTA3NTcwZTU1MmM0NTIyYWExMmFhOTg5YTJmZDBkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNDA1NSwgLTczLjk1NTczNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjUxNmQ3YzUzZTNhNDVkOWJkMzcxY2Y0NDAwZjZhYjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMzZmZDU3Mjc4OGE0ZWEwYmNiY2VkZTFlM2YyZGQwZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDM2ZmQ1NzI3ODhhNGVhMGJjYmNlZGUxZTNmMmRkMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gMTUgU3QgJiBXeXRoZSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMDxicj4gbmV0IGRlcGFydHVyZXM6IDIwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1MTZkN2M1M2UzYTQ1ZDliZDM3MWNmNDQwMGY2YWI5LnNldENvbnRlbnQoaHRtbF8wMzZmZDU3Mjc4OGE0ZWEwYmNiY2VkZTFlM2YyZGQwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iOTA3NTcwZTU1MmM0NTIyYWExMmFhOTg5YTJmZDBkNy5iaW5kUG9wdXAocG9wdXBfMjUxNmQ3YzUzZTNhNDVkOWJkMzcxY2Y0NDAwZjZhYjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjYmU1M2YwMmJiYTQ5NDViOTBkY2Y5MzljZDhkNzFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIzMjUsIC03My45NDMwODAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkZDRkMjM2YWFkNzQ3NjRiNTQ1YTJmNDdkOTIzNzczID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODNkNjNkYzY0OWE0NGI3NGFkZjMyYWY4Y2ZiNTgyMGYgPSAkKGA8ZGl2IGlkPSJodG1sXzgzZDYzZGM2NDlhNDRiNzRhZGYzMmFmOGNmYjU4MjBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EcmlnZ3MgQXZlICYgTiBIZW5yeSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ1PGJyPiBuZXQgZGVwYXJ0dXJlczogMjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGRkNGQyMzZhYWQ3NDc2NGI1NDVhMmY0N2Q5MjM3NzMuc2V0Q29udGVudChodG1sXzgzZDYzZGM2NDlhNDRiNzRhZGYzMmFmOGNmYjU4MjBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjYmU1M2YwMmJiYTQ5NDViOTBkY2Y5MzljZDhkNzFhLmJpbmRQb3B1cChwb3B1cF84ZGQ0ZDIzNmFhZDc0NzY0YjU0NWEyZjQ3ZDkyMzc3MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmZhYzg3NzFkMDcyNGI0OTk4NjA1NWQwMTM1MWM2OGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjMxMTY1MSwgLTczLjk1MjEyMzI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjJlZjBlMmRkMjZkNDM4MjkyYTU5M2U2ZDExMzliZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOGZjMGIyYTllMGM0ODdiOTUyMWYyNjU5YTJlZGQwYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDhmYzBiMmE5ZTBjNDg3Yjk1MjFmMjY1OWEyZWRkMGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlZGZvcmQgQXZlICYgTmFzc2F1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MmVmMGUyZGQyNmQ0MzgyOTJhNTkzZTZkMTEzOWJkNC5zZXRDb250ZW50KGh0bWxfMDhmYzBiMmE5ZTBjNDg3Yjk1MjFmMjY1OWEyZWRkMGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmZhYzg3NzFkMDcyNGI0OTk4NjA1NWQwMTM1MWM2OGIuYmluZFBvcHVwKHBvcHVwXzYyZWYwZTJkZDI2ZDQzODI5MmE1OTNlNmQxMTM5YmQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MTUyNWIxOGVkZmU0MjM2ODhlOGVmMDRjMGVmY2FmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNTU3MDAwMDAwMDAwNSwgLTczLjk0NDM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA5ZTdiOGM4MGQ5NDEwM2FkMjY4MmVmNmZhMzE2MzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lM2JkYjA3YmZlMGU0OGUwYTU5YjE4YmExODIyM2UyNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTNiZGIwN2JmZTBlNDhlMGE1OWIxOGJhMTgyMjNlMjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5hc3NhdSBBdmUgJiBSdXNzZWxsIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTcyPGJyPiBuZXQgZGVwYXJ0dXJlczogMTQxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwOWU3YjhjODBkOTQxMDNhZDI2ODJlZjZmYTMxNjM4LnNldENvbnRlbnQoaHRtbF9lM2JkYjA3YmZlMGU0OGUwYTU5YjE4YmExODIyM2UyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MTUyNWIxOGVkZmU0MjM2ODhlOGVmMDRjMGVmY2FmNi5iaW5kUG9wdXAocG9wdXBfMzA5ZTdiOGM4MGQ5NDEwM2FkMjY4MmVmNmZhMzE2MzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1Yjk5NWQ4YTExZDQ4NWI4NmJjMWVmOWE1ZDAyNzAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI2MDYsIC03My45NTYyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2JkN2Y4Y2I3OTdmNGQ5MDkzYzcxOGQ0ZDY5YWQ4ZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDMxOTA0N2NmYTA0YjNhYmVlN2UxNzljMDMwY2IxMiA9ICQoYDxkaXYgaWQ9Imh0bWxfODQzMTkwNDdjZmEwNGIzYWJlZTdlMTc5YzAzMGNiMTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhbmtlciBTdCAmIE1lc2Vyb2xlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgyPGJyPiBuZXQgZGVwYXJ0dXJlczogMjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2JkN2Y4Y2I3OTdmNGQ5MDkzYzcxOGQ0ZDY5YWQ4ZDQuc2V0Q29udGVudChodG1sXzg0MzE5MDQ3Y2ZhMDRiM2FiZWU3ZTE3OWMwMzBjYjEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM1Yjk5NWQ4YTExZDQ4NWI4NmJjMWVmOWE1ZDAyNzAzLmJpbmRQb3B1cChwb3B1cF83YmQ3ZjhjYjc5N2Y0ZDkwOTNjNzE4ZDRkNjlhZDhkNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjUxM2RhYWZkMGUzNDdhYThjMThhMjlhMWRlMjU4NzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjcwODU4NCwgLTczLjk1Mjk5MTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYWRjZjQ1ZjA2ZWY0MzVkYWQ3ZTJjNDVhOTAxYmVhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkYzJhYWQwZWNmYjQ1M2FhYmVlZmNlOWY2YzgxYzk0ID0gJChgPGRpdiBpZD0iaHRtbF9kZGMyYWFkMGVjZmI0NTNhYWJlZWZjZTlmNmM4MWM5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWVzZXJvbGUgQXZlICYgTWFuaGF0dGFuIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyNDxicj4gbmV0IGRlcGFydHVyZXM6IDUyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhZGNmNDVmMDZlZjQzNWRhZDdlMmM0NWE5MDFiZWEwLnNldENvbnRlbnQoaHRtbF9kZGMyYWFkMGVjZmI0NTNhYWJlZWZjZTlmNmM4MWM5NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNTEzZGFhZmQwZTM0N2FhOGMxOGEyOWExZGUyNTg3MS5iaW5kUG9wdXAocG9wdXBfYmFkY2Y0NWYwNmVmNDM1ZGFkN2UyYzQ1YTkwMWJlYTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmOWRlZGY2YjA4ZjRmZjc5NmNmMTdlZWQ3NWJmMTg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI1ODQ4Mjk5OTk5OTk2LCAtNzMuOTUwNjQ4OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjZTY0MzEwOWY5ZTQ5NDY5M2FmYTFkNzcxNDE3ODRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWFkNzFmM2Y4NWUwNGIxZTlkMTc4N2U0ZTdjOTg2ZWUgPSAkKGA8ZGl2IGlkPSJodG1sX2VhZDcxZjNmODVlMDRiMWU5ZDE3ODdlNGU3Yzk4NmVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3JtYW4gQXZlICYgTGVvbmFyZCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQyPGJyPiBuZXQgZGVwYXJ0dXJlczogMjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2NlNjQzMTA5ZjllNDk0NjkzYWZhMWQ3NzE0MTc4NGIuc2V0Q29udGVudChodG1sX2VhZDcxZjNmODVlMDRiMWU5ZDE3ODdlNGU3Yzk4NmVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRmOWRlZGY2YjA4ZjRmZjc5NmNmMTdlZWQ3NWJmMTg1LmJpbmRQb3B1cChwb3B1cF8zY2U2NDMxMDlmOWU0OTQ2OTNhZmExZDc3MTQxNzg0YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDY1MjBjNmFlMWFjNDI3ZTg5MmZlYzRhM2M4NzE0YzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjkwNiwgLTczLjk1Nzc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlMjQ4MmVkMTQyYTRiYzc5Mzg2ZmI4MTFlOTc1YmQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU0NmI2Zjk5MTA3NDY4N2ExYzJlNDcwZWVlOTY5ZDcgPSAkKGA8ZGl2IGlkPSJodG1sXzllNDZiNmY5OTEwNzQ2ODdhMWMyZTQ3MGVlZTk2OWQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaWx0b24gU3QgJiBGcmFua2xpbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjQ2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTA1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlMjQ4MmVkMTQyYTRiYzc5Mzg2ZmI4MTFlOTc1YmQ5LnNldENvbnRlbnQoaHRtbF85ZTQ2YjZmOTkxMDc0Njg3YTFjMmU0NzBlZWU5NjlkNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNjUyMGM2YWUxYWM0MjdlODkyZmVjNGEzYzg3MTRjNC5iaW5kUG9wdXAocG9wdXBfMGUyNDgyZWQxNDJhNGJjNzkzODZmYjgxMWU5NzViZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3MzAwMWE5ZjQzMjQxN2FhMWFiMTdhOGI1MmEzY2QzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMwMjU5OTk5OTk5OTk0LCAtNzMuOTUzOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODA3N2YxZjMzNTE0ODc0OGNlMDhmM2NhYjZiMzE1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyZWZkN2VlY2YzNjQ3YWQ5NTE3ZjJlYTdkZjkzMGFkID0gJChgPGRpdiBpZD0iaHRtbF8xMmVmZDdlZWNmMzY0N2FkOTUxN2YyZWE3ZGY5MzBhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlZW5wb2ludCBBdmUgJiBNYW5oYXR0YW4gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA2PGJyPiBuZXQgZGVwYXJ0dXJlczogNDcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTgwNzdmMWYzMzUxNDg3NDhjZTA4ZjNjYWI2YjMxNTUuc2V0Q29udGVudChodG1sXzEyZWZkN2VlY2YzNjQ3YWQ5NTE3ZjJlYTdkZjkzMGFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3MzAwMWE5ZjQzMjQxN2FhMWFiMTdhOGI1MmEzY2QzLmJpbmRQb3B1cChwb3B1cF85ODA3N2YxZjMzNTE0ODc0OGNlMDhmM2NhYjZiMzE1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjFjNjBiOGFlZjE4NDFlMzlmYzQzZTE4NDI2MjE2MTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzE2NTE0MSwgLTczLjk2MTYxODkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlNDBiMWFlNzM0ZjRlMjc4MGM4M2M5MDQ4NzhjMWQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDA4ZGNmZDBjODE2NDJjODkxODljNGYyZDE5NWVjMmEgPSAkKGA8ZGl2IGlkPSJodG1sXzAwOGRjZmQwYzgxNjQyYzg5MTg5YzRmMmQxOTVlYzJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5JbmRpYSBTdCAmIEVhc3QgUml2ZXI8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDxicj4gbmV0IGRlcGFydHVyZXM6IC0yMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZTQwYjFhZTczNGY0ZTI3ODBjODNjOTA0ODc4YzFkNS5zZXRDb250ZW50KGh0bWxfMDA4ZGNmZDBjODE2NDJjODkxODljNGYyZDE5NWVjMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjFjNjBiOGFlZjE4NDFlMzlmYzQzZTE4NDI2MjE2MTAuYmluZFBvcHVwKHBvcHVwXzBlNDBiMWFlNzM0ZjRlMjc4MGM4M2M5MDQ4NzhjMWQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZWQxOWI3ZmJkMGY0YmUwOTVkZjEzZmMzYzc3NjQxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMjMyMTk0LCAtNzMuOTU1MDg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjFmZjY4NzYxNmE3NGZmMzk5ZWNkM2FiN2VhYTUzMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjE3YWEyNGNlYjQ0NGEyYmZjNmYwNDIwOTg4ZmI3NiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2YxN2FhMjRjZWI0NDRhMmJmYzZmMDQyMDk4OGZiNzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkluZGlhIFN0ICYgTWFuaGF0dGFuIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyMDxicj4gbmV0IGRlcGFydHVyZXM6IDcyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYxZmY2ODc2MTZhNzRmZjM5OWVjZDNhYjdlYWE1MzBlLnNldENvbnRlbnQoaHRtbF8zZjE3YWEyNGNlYjQ0NGEyYmZjNmYwNDIwOTg4ZmI3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZWQxOWI3ZmJkMGY0YmUwOTVkZjEzZmMzYzc3NjQxOS5iaW5kUG9wdXAocG9wdXBfNjFmZjY4NzYxNmE3NGZmMzk5ZWNkM2FiN2VhYTUzMGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5OGEyNzVkYTVkMDQ0MjViZTM2YjA0NWUzNTY4OWUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMyNjU5OTk5OTk5OTk2LCAtNzMuOTU4MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODBmYzYwM2JiNzA0NWFjOWE0MWVlZTg2ZWFkM2FiOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE5MTE3M2Q5MWJjYzRmMWM4ZmU4MzA3YzY1ZWE4NWQ2ID0gJChgPGRpdiBpZD0iaHRtbF8xOTExNzNkOTFiY2M0ZjFjOGZlODMwN2M2NWVhODVkNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SHVyb24gU3QgJiBGcmFua2xpbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzNjxicj4gbmV0IGRlcGFydHVyZXM6IDk1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4MGZjNjAzYmI3MDQ1YWM5YTQxZWVlODZlYWQzYWI5LnNldENvbnRlbnQoaHRtbF8xOTExNzNkOTFiY2M0ZjFjOGZlODMwN2M2NWVhODVkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OThhMjc1ZGE1ZDA0NDI1YmUzNmIwNDVlMzU2ODllMS5iaW5kUG9wdXAocG9wdXBfYTgwZmM2MDNiYjcwNDVhYzlhNDFlZWU4NmVhZDNhYjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlOTYxMzU1MzZhMzQwMzA5NzFmMjFlZDY0ZWRjODVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM1NjQwMDAwMDAwMDA0LCAtNzMuOTU4NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MTZhOGVhNGIxMmQ0MjQ3OTVkY2M2MjBkZTY1ODg3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhNDYwOGM3ZTRmMjRjYmE4ZmJhZWE2OTkzZmM4NjE1ID0gJChgPGRpdiBpZD0iaHRtbF85YTQ2MDhjN2U0ZjI0Y2JhOGZiYWVhNjk5M2ZjODYxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnJhbmtsaW4gU3QgJiBEdXBvbnQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NTxicj4gbmV0IGRlcGFydHVyZXM6IDE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxNmE4ZWE0YjEyZDQyNDc5NWRjYzYyMGRlNjU4ODcxLnNldENvbnRlbnQoaHRtbF85YTQ2MDhjN2U0ZjI0Y2JhOGZiYWVhNjk5M2ZjODYxNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZTk2MTM1NTM2YTM0MDMwOTcxZjIxZWQ2NGVkYzg1ZS5iaW5kUG9wdXAocG9wdXBfNTE2YThlYTRiMTJkNDI0Nzk1ZGNjNjIwZGU2NTg4NzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkN2Q4YTVjMjM2NTRlMzZiMjNhZTZiMmJkOGI3MWIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM1NTUsIC03My45NTI4NDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTNkMmI3Y2JhNWYyNDQxYTk4N2QwMDA4OTkzNmE2MWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNmIwMzg3YWQ1OGY0YmU2OWZjMGNhY2M5YjY4OTlhMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjZiMDM4N2FkNThmNGJlNjlmYzBjYWNjOWI2ODk5YTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1jR3Vpbm5lc3MgQmx2ZCAmIEVhZ2xlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogODY8YnI+IG5ldCBkZXBhcnR1cmVzOiA1Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lM2QyYjdjYmE1ZjI0NDFhOTg3ZDAwMDg5OTM2YTYxYi5zZXRDb250ZW50KGh0bWxfZjZiMDM4N2FkNThmNGJlNjlmYzBjYWNjOWI2ODk5YTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmQ3ZDhhNWMyMzY1NGUzNmIyM2FlNmIyYmQ4YjcxYjAuYmluZFBvcHVwKHBvcHVwX2UzZDJiN2NiYTVmMjQ0MWE5ODdkMDAwODk5MzZhNjFiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYzVjMzY1YmM5NmM0NDM2Yjg0ZTYxYmZiMzdlNWRlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MjMyNzQ0LCAtNzMuOTU0MTE3NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC03LjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2ZmOTcxMWQzZmRhNDM0YWI3MmI2OTU2YWE3OTI3OGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNGI1ODExODc0MzY0YTEwYTEzODkyZWIxYjU2MmVhYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDRiNTgxMTg3NDM2NGExMGExMzg5MmViMWI1NjJlYWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZlcm5vbiBCbHZkICYgNTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZmY5NzExZDNmZGE0MzRhYjcyYjY5NTZhYTc5Mjc4Yy5zZXRDb250ZW50KGh0bWxfMDRiNTgxMTg3NDM2NGExMGExMzg5MmViMWI1NjJlYWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2M1YzM2NWJjOTZjNDQzNmI4NGU2MWJmYjM3ZTVkZTMuYmluZFBvcHVwKHBvcHVwXzNmZjk3MTFkM2ZkYTQzNGFiNzJiNjk1NmFhNzkyNzhjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wODg0OGM5OTRkNGM0ZThhYTg1Y2UwZTQzNWJjM2NlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MTYwOTk5OTk5OTk5NCwgLTczLjk2MDQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NzE4MDIxYTVjNTk0ZTVkYmUxNGZmOTM0ZTJjOTdlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxZjVmYzFkZTg1YTQ4NTQ4YjkyYzJjNmViOWQ4YWNkID0gJChgPGRpdiBpZD0iaHRtbF8wMWY1ZmMxZGU4NWE0ODU0OGI5MmMyYzZlYjlkOGFjZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudGVyIEJsdmQgJiBCb3JkZW4gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiA0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3MTgwMjFhNWM1OTRlNWRiZTE0ZmY5MzRlMmM5N2U3LnNldENvbnRlbnQoaHRtbF8wMWY1ZmMxZGU4NWE0ODU0OGI5MmMyYzZlYjlkOGFjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wODg0OGM5OTRkNGM0ZThhYTg1Y2UwZTQzNWJjM2NlMS5iaW5kUG9wdXAocG9wdXBfOTcxODAyMWE1YzU5NGU1ZGJlMTRmZjkzNGUyYzk3ZTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyYWZiN2UwOTIyZjQxYjVhNGY2MzViOWVlMjY3ZGZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ1MjQ3NjgsIC03My45NDczMzI3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZjBiZDg5MmI3YmU0NGU2OTU0M2VkMjhkNTRlYWJiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjMGIzNGQzNGU2MjRjMTZhMDBmNTAwYmQ2YTliZmNlID0gJChgPGRpdiBpZD0iaHRtbF81YzBiMzRkMzRlNjI0YzE2YTAwZjUwMGJkNmE5YmZjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SmFja3NvbiBBdmUgJiA0NiBSZDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmMGJkODkyYjdiZTQ0ZTY5NTQzZWQyOGQ1NGVhYmIyLnNldENvbnRlbnQoaHRtbF81YzBiMzRkMzRlNjI0YzE2YTAwZjUwMGJkNmE5YmZjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MmFmYjdlMDkyMmY0MWI1YTRmNjM1YjllZTI2N2RmYi5iaW5kUG9wdXAocG9wdXBfYmYwYmQ4OTJiN2JlNDRlNjk1NDNlZDI4ZDU0ZWFiYjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmZDIyYTU1YWU4MDQwZTlhNTY2NTM0OWNmMTA4ZmRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ0MzYzMjg3MDY2ODgsIC03My45NTU4NzMyNTA5NjEyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyNDhlYjRiOGZmZDRhMmNiY2E2NjY0MDM3OTdmYWU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjRlNTI1ZGQyYWFhNDM4ZDg3ZTQ0ODRiMTNhMjViZjEgPSAkKGA8ZGl2IGlkPSJodG1sXzI0ZTUyNWRkMmFhYTQzOGQ4N2U0NDg0YjEzYTI1YmYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij40OCBBdmUgJiA1IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjQ4ZWI0YjhmZmQ0YTJjYmNhNjY2NDAzNzk3ZmFlNi5zZXRDb250ZW50KGh0bWxfMjRlNTI1ZGQyYWFhNDM4ZDg3ZTQ0ODRiMTNhMjViZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmZkMjJhNTVhZTgwNDBlOWE1NjY1MzQ5Y2YxMDhmZGMuYmluZFBvcHVwKHBvcHVwXzEyNDhlYjRiOGZmZDRhMmNiY2E2NjY0MDM3OTdmYWU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTBiY2RlYjBjMzI0NDFkYjYwYmYzYjY1M2Q5MzdhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NDY5NzM4LCAtNzMuOTM1NDAzNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjYxNTRmNDEwY2UwNGIyZmI1N2Q5YmEwZjhmMGU0MjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZmUwMTVhN2VjNWQ0OGY4OTdlZGQ0ZWQyMDAwNjk5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNWZlMDE1YTdlYzVkNDhmODk3ZWRkNGVkMjAwMDY5OTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMxIFN0ICYgVGhvbXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2MTU0ZjQxMGNlMDRiMmZiNTdkOWJhMGY4ZjBlNDIyLnNldENvbnRlbnQoaHRtbF81ZmUwMTVhN2VjNWQ0OGY4OTdlZGQ0ZWQyMDAwNjk5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYTBiY2RlYjBjMzI0NDFkYjYwYmYzYjY1M2Q5MzdhOC5iaW5kUG9wdXAocG9wdXBfYjYxNTRmNDEwY2UwNGIyZmI1N2Q5YmEwZjhmMGU0MjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3MzYzNTBhYzYxZjQzOTU5NmZjYTdiOGU5NmMyYmY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MzEsIC03My45NTQ1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3Y2RjMDg5NmUxMzRiOWM5NmQwZGIwMjA2MDZlMmY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQzYzkwNWUzNThlNDMxN2JkMzZlYTZiYTk0MmMwNGUgPSAkKGA8ZGl2IGlkPSJodG1sX2JkM2M5MDVlMzU4ZTQzMTdiZDM2ZWE2YmE5NDJjMDRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij40NiBBdmUgJiA1IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODg8YnI+IG5ldCBkZXBhcnR1cmVzOiA1OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2NkYzA4OTZlMTM0YjljOTZkMGRiMDIwNjA2ZTJmNy5zZXRDb250ZW50KGh0bWxfYmQzYzkwNWUzNThlNDMxN2JkMzZlYTZiYTk0MmMwNGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDczNjM1MGFjNjFmNDM5NTk2ZmNhN2I4ZTk2YzJiZjYuYmluZFBvcHVwKHBvcHVwX2U3Y2RjMDg5NmUxMzRiOWM5NmQwZGIwMjA2MDZlMmY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYmQ0MzBlMWY0M2Y0Y2Q0YjY0Y2E2ZmY0OTFhYWRiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NzA4NTg2LCAtNzMuOTQ5NzcyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNjRhZTYwMzc0NjI0NzVhOTM0YmMwZmIwYzMyN2EyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5ODhkMmJjNzU2MTQzYmVhMmZiNmZkZmJjNDhlMWY1ID0gJChgPGRpdiBpZD0iaHRtbF80OTg4ZDJiYzc1NjE0M2JlYTJmYjZmZGZiYzQ4ZTFmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NDUgUmQgJiAxMSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTMwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2NGFlNjAzNzQ2MjQ3NWE5MzRiYzBmYjBjMzI3YTI2LnNldENvbnRlbnQoaHRtbF80OTg4ZDJiYzc1NjE0M2JlYTJmYjZmZGZiYzQ4ZTFmNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYmQ0MzBlMWY0M2Y0Y2Q0YjY0Y2E2ZmY0OTFhYWRiYi5iaW5kUG9wdXAocG9wdXBfMjY0YWU2MDM3NDYyNDc1YTkzNGJjMGZiMGMzMjdhMjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y0MmVlMDQ2YjQ4MjQxODE5NWMwNDRkYjQwMTBkNDcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MTgyMzQsIC03My45NDMyNjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTNhYjI5N2NhZjIwNDJmNDgzODY2ZTAyNDYxZWM2NDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMmEzMDg4ZTM2MDM0MWFjYjQ0NTEzODA5ODhlZmIxNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDJhMzA4OGUzNjAzNDFhY2I0NDUxMzgwOTg4ZWZiMTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjQ0IERyICYgSmFja3NvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNjxicj4gbmV0IGRlcGFydHVyZXM6IC04LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzYWIyOTdjYWYyMDQyZjQ4Mzg2NmUwMjQ2MWVjNjQ0LnNldENvbnRlbnQoaHRtbF8wMmEzMDg4ZTM2MDM0MWFjYjQ0NTEzODA5ODhlZmIxNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNDJlZTA0NmI0ODI0MTgxOTVjMDQ0ZGI0MDEwZDQ3MS5iaW5kUG9wdXAocG9wdXBfYTNhYjI5N2NhZjIwNDJmNDgzODY2ZTAyNDYxZWM2NDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5OWUzYTUyMWQ4NDQ4YWI4YjFlMWMzMzZmMzFmMTQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NjYsIC03My45NTIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDQxNTM5ZWMzMzM5NDU4YjgzNTc4NzllMGU2ZjBhZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZmFhYTFlYjYyOTQ0NjViYWRhZTAwOTk4MmEzNTMxMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWZhYWExZWI2Mjk0NDY1YmFkYWUwMDk5ODJhMzUzMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkgU3QgJiA0NCBSZDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwPGJyPiBuZXQgZGVwYXJ0dXJlczogMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDE1MzllYzMzMzk0NThiODM1Nzg3OWUwZTZmMGFkNC5zZXRDb250ZW50KGh0bWxfNWZhYWExZWI2Mjk0NDY1YmFkYWUwMDk5ODJhMzUzMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDk5ZTNhNTIxZDg0NDhhYjhiMWUxYzMzNmYzMWYxNDEuYmluZFBvcHVwKHBvcHVwX2Q0MTUzOWVjMzMzOTQ1OGI4MzU3ODc5ZTBlNmYwYWQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNTQ4NTY3ZDZiN2Y0OGMyYjMxMmI4Y2M3ZGUwZmFmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MDUyNTM0LCAtNzMuOTQ1OTQ4NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MGRlMDE2ODE4YWM0YjE2YmQ1Y2UyMDc2NjA5YjYyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1MmIyYjBhYzMwMjRhODU5NWYzODQzY2Y1NzFiYjBlID0gJChgPGRpdiBpZD0iaHRtbF9hNTJiMmIwYWMzMDI0YTg1OTVmMzg0M2NmNTcxYmIwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MjEgU3QgJiA0MyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTxicj4gbmV0IGRlcGFydHVyZXM6IDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDBkZTAxNjgxOGFjNGIxNmJkNWNlMjA3NjYwOWI2Mjcuc2V0Q29udGVudChodG1sX2E1MmIyYjBhYzMwMjRhODU5NWYzODQzY2Y1NzFiYjBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1NDg1NjdkNmI3ZjQ4YzJiMzEyYjhjYzdkZTBmYWY4LmJpbmRQb3B1cChwb3B1cF80MGRlMDE2ODE4YWM0YjE2YmQ1Y2UyMDc2NjA5YjYyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTYwYTNkOTkzOGVhNDVkOGI3OWZkNDE3OGI3OGZmYjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTExMDE2NSwgLTczLjk0MDczNzE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOGNjZDYwN2U3NzE0ZGNhOGE0ZGFmZTFlZGI0YWJiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkMDMyZGNmNGYyNjQ4Zjc5NjFlZjVmNTk3YzYyZGIyID0gJChgPGRpdiBpZD0iaHRtbF83ZDAzMmRjZjRmMjY0OGY3OTYxZWY1ZjU5N2M2MmRiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UXVlZW5zIFBsYXphIE5vcnRoICYgQ3Jlc2NlbnQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOGNjZDYwN2U3NzE0ZGNhOGE0ZGFmZTFlZGI0YWJiYS5zZXRDb250ZW50KGh0bWxfN2QwMzJkY2Y0ZjI2NDhmNzk2MWVmNWY1OTdjNjJkYjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTYwYTNkOTkzOGVhNDVkOGI3OWZkNDE3OGI3OGZmYjguYmluZFBvcHVwKHBvcHVwXzE4Y2NkNjA3ZTc3MTRkY2E4YTRkYWZlMWVkYjRhYmJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzg1NmI1YmJjMGE0NjJlOTNkZjQxYjY4NTJjOTE3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NzEyODQwMzQ5NTQyLCAtNzMuOTYyMjQ2MTc5NTgwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWU0ZDU2N2M2Mjc4NDg4N2JjODU3OTk1NmJjMGJlYTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjI0NjkzZGUxOGQ0ODY1ODdjZGZhNDJjYTVjYzk5YiA9ICQoYDxkaXYgaWQ9Imh0bWxfNWIyNDY5M2RlMThkNDg2NTg3Y2RmYTQyY2E1Y2M5OWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNjggU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlNGQ1NjdjNjI3ODQ4ODdiYzg1Nzk5NTZiYzBiZWE1LnNldENvbnRlbnQoaHRtbF81YjI0NjkzZGUxOGQ0ODY1ODdjZGZhNDJjYTVjYzk5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMzg1NmI1YmJjMGE0NjJlOTNkZjQxYjY4NTJjOTE3Ni5iaW5kUG9wdXAocG9wdXBfNWU0ZDU2N2M2Mjc4NDg4N2JjODU3OTk1NmJjMGJlYTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlkNWRkMDdjYmI2NjQxYWM5YzAwYzRhNDRjODY0ZTEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYzNTA1MzIsIC03My45NzEwOTI0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMjJhZGIxYzAzNDM0NTUwYjk4Zjg5OTIzZDIyZTE1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiMTQyY2RlYjMwZDRiN2NhYzk3NzUzNWI5NjdkMGIyID0gJChgPGRpdiBpZD0iaHRtbF82YjE0MmNkZWIzMGQ0YjdjYWM5Nzc1MzViOTY3ZDBiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA1OSBTdCAmIE1hZGlzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTIyYWRiMWMwMzQzNDU1MGI5OGY4OTkyM2QyMmUxNTcuc2V0Q29udGVudChodG1sXzZiMTQyY2RlYjMwZDRiN2NhYzk3NzUzNWI5NjdkMGIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkNWRkMDdjYmI2NjQxYWM5YzAwYzRhNDRjODY0ZTEyLmJpbmRQb3B1cChwb3B1cF9hMjJhZGIxYzAzNDM0NTUwYjk4Zjg5OTIzZDIyZTE1NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI4MmFjY2E3ZGJlNDYwMThlN2Y1MjMyYjEzMDk2OTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjMxMjU4NCwgLTczLjk2NTI2ODk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZmZlZmE4YzE2NzA0MDk5OWZlZDE1YTBjMTY2YmQzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1MWQ0NTVhNTIxNjQxMzA4NzYzNjcwZmU1MWZkN2RlID0gJChgPGRpdiBpZD0iaHRtbF8zNTFkNDU1YTUyMTY0MTMwODc2MzY3MGZlNTFmZDdkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MyBBdmUgJiBFIDYyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIyMzxicj4gbmV0IGRlcGFydHVyZXM6IDQ0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmZmVmYThjMTY3MDQwOTk5ZmVkMTVhMGMxNjZiZDM1LnNldENvbnRlbnQoaHRtbF8zNTFkNDU1YTUyMTY0MTMwODc2MzY3MGZlNTFmZDdkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MjgyYWNjYTdkYmU0NjAxOGU3ZjUyMzJiMTMwOTY5MS5iaW5kUG9wdXAocG9wdXBfNmZmZWZhOGMxNjcwNDA5OTlmZWQxNWEwYzE2NmJkMzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzMTZhNWMxMjA1NTQxYzQ5MjY0YmMwY2I0YzcxZWViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcxMTI5MjcsIC03My45NTc3MjI5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGMzYTMwMDIyMzJkNDUwMGI2Nzk4YTY1YTdhNWI3NDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTA2MGFkZGViNTc0ZmUxYjY5YTkzNjIzYWYxZjhmMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGUwNjBhZGRlYjU3NGZlMWI2OWE5MzYyM2FmMWY4ZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNzUgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExNzxicj4gbmV0IGRlcGFydHVyZXM6IDU4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjM2EzMDAyMjMyZDQ1MDBiNjc5OGE2NWE3YTViNzQ3LnNldENvbnRlbnQoaHRtbF9kZTA2MGFkZGViNTc0ZmUxYjY5YTkzNjIzYWYxZjhmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MzE2YTVjMTIwNTU0MWM0OTI2NGJjMGNiNGM3MWVlYi5iaW5kUG9wdXAocG9wdXBfZGMzYTMwMDIyMzJkNDUwMGI2Nzk4YTY1YTdhNWI3NDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4YzYxZGVkNDhmZDQzYjQ5ODRjNjRlYTJmMzE1Zjc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcyODI4MTcsIC03My45NjY4NTI3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2YTA3OWNjMjkwMzQzNDJhMWI5NDcxNTFkNDYwNmM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTlmOTcyYTQ4MjcwNDcwYTkyYTkyZWFhZWM5YzI2YWEgPSAkKGA8ZGl2IGlkPSJodG1sXzU5Zjk3MmE0ODI3MDQ3MGE5MmE5MmVhYWVjOWMyNmFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41IEF2ZSAmIEUgNzMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIyMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2YTA3OWNjMjkwMzQzNDJhMWI5NDcxNTFkNDYwNmM3LnNldENvbnRlbnQoaHRtbF81OWY5NzJhNDgyNzA0NzBhOTJhOTJlYWFlYzljMjZhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOGM2MWRlZDQ4ZmQ0M2I0OTg0YzY0ZWEyZjMxNWY3Ni5iaW5kUG9wdXAocG9wdXBfNTZhMDc5Y2MyOTAzNDM0MmExYjk0NzE1MWQ0NjA2YzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VjZDA2ZmVjMDE3ODQxMjZiZTM4OTQxMGM5M2I1OTFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcxMTgyODc1NDA2NTgsIC03My45NjQwOTQyMjE1OTE5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA3MjZiYmY0MWQwYjRlYzFhNzc5M2Q1OGI3MTI2NTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWRlNDc3MzEwOTMwNDM1YWFjMDlmNjRlNjI0YzE0MDcgPSAkKGA8ZGl2IGlkPSJodG1sXzFkZTQ3NzMxMDkzMDQzNWFhYzA5ZjY0ZTYyNGMxNDA3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDcyIFN0ICYgUGFyayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDg1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzY8YnI+IG5ldCBkZXBhcnR1cmVzOiA1MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNzI2YmJmNDFkMGI0ZWMxYTc3OTNkNThiNzEyNjU1MS5zZXRDb250ZW50KGh0bWxfMWRlNDc3MzEwOTMwNDM1YWFjMDlmNjRlNjI0YzE0MDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWNkMDZmZWMwMTc4NDEyNmJlMzg5NDEwYzkzYjU5MWEuYmluZFBvcHVwKHBvcHVwXzA3MjZiYmY0MWQwYjRlYzFhNzc5M2Q1OGI3MTI2NTUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjE5NTgyM2ZmNjc0NDU2OTczMGE5ZTA3NzdlMzNkMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MTQwNDI2LCAtNzMuOTUzNTE2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2EwMzFjNTc3MzFjNGExMTkwOGU5Y2QwYjRhNWZjOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjdkMjRmMjI0ZGE0ZDFjYmJmN2YyZDQ5MjUxODE2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWY3ZDI0ZjIyNGRhNGQxY2JiZjdmMmQ0OTI1MTgxNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEgQXZlICYgRSA3OCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTExLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxODE8YnI+IG5ldCBkZXBhcnR1cmVzOiA3MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTAzMWM1NzczMWM0YTExOTA4ZTljZDBiNGE1ZmM5Ny5zZXRDb250ZW50KGh0bWxfOWY3ZDI0ZjIyNGRhNGQxY2JiZjdmMmQ0OTI1MTgxNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGIxOTU4MjNmZjY3NDQ1Njk3MzBhOWUwNzc3ZTMzZDIuYmluZFBvcHVwKHBvcHVwXzNhMDMxYzU3NzMxYzRhMTE5MDhlOWNkMGI0YTVmYzk3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZmFkYmZjYTc0ZGU0YmU3ODgyMzc5YWMzZmRjZTc3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NTAwNTI1LCAtNzMuOTU4MTg0OTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDQ3NjRlNzIxMDdhNDdkOWIxNWQ5MmQxYzE3MTlhODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjZlYzI0NzY3Zjc0NTg1YmExNmQ3YzFjMGNhODRmYyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWY2ZWMyNDc2N2Y3NDU4NWJhMTZkN2MxYzBjYTg0ZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEgQXZlICYgRSA2OCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTA2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0ODU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ3NjRlNzIxMDdhNDdkOWIxNWQ5MmQxYzE3MTlhODQuc2V0Q29udGVudChodG1sXzlmNmVjMjQ3NjdmNzQ1ODViYTE2ZDdjMWMwY2E4NGZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdmYWRiZmNhNzRkZTRiZTc4ODIzNzlhYzNmZGNlNzdlLmJpbmRQb3B1cChwb3B1cF80NDc2NGU3MjEwN2E0N2Q5YjE1ZDkyZDFjMTcxOWE4NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODlhY2JhODQxMmNkNDMzODg1ZmRlNTRmODA4YWIwMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjEyMjczOTk5OTk5OTYsIC03My45NjA5NDAyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmE3YTRjYWE2MTgyNDcxM2EzMzYwMTNlZDQ2YTE4M2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTQxMGM4ZDBhNzU0YWJiOTc1ZTFlNzlhZTcyNDcxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjU0MTBjOGQwYTc1NGFiYjk3NWUxZTc5YWU3MjQ3MTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEgQXZlICYgRSA2MiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTYzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMTM8YnI+IG5ldCBkZXBhcnR1cmVzOiA1MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTdhNGNhYTYxODI0NzEzYTMzNjAxM2VkNDZhMTgzZi5zZXRDb250ZW50KGh0bWxfMjU0MTBjOGQwYTc1NGFiYjk3NWUxZTc5YWU3MjQ3MTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODlhY2JhODQxMmNkNDMzODg1ZmRlNTRmODA4YWIwMjguYmluZFBvcHVwKHBvcHVwXzJhN2E0Y2FhNjE4MjQ3MTNhMzM2MDEzZWQ0NmExODNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDkwNDIxNDVjN2Q0ZDE3OTgzZjYyZmVmOWMxMjdhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NjgyODYzNDM5OTY4LCAtNzMuOTYzODg3NjkxNDk3NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWE0YzIzOTNjMjM0ZGM1OTk0YzAzMDg4YWZlNTRkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3M2Q5NWJmNTM0MTQ3NWQ5ZGI3NGUwOWYwZmQ3MThjID0gJChgPGRpdiBpZD0iaHRtbF84NzNkOTViZjUzNDE0NzVkOWRiNzRlMDlmMGZkNzE4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NSBBdmUgJiBFIDc4IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNTUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzNzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VhNGMyMzkzYzIzNGRjNTk5NGMwMzA4OGFmZTU0ZDguc2V0Q29udGVudChodG1sXzg3M2Q5NWJmNTM0MTQ3NWQ5ZGI3NGUwOWYwZmQ3MThjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwOTA0MjE0NWM3ZDRkMTc5ODNmNjJmZWY5YzEyN2E5LmJpbmRQb3B1cChwb3B1cF9jZWE0YzIzOTNjMjM0ZGM1OTk0YzAzMDg4YWZlNTRkOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjAyOGUwYjRjYzEyNGQ5MmI3YjM1OWY2ZDFiZTdmZDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzY3NzcwMiwgLTczLjk1OTAwOTcwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OGExOWQ1YTQ1MGQ0NjhhODM2ZDk3Y2ZjODliMDM3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU1YjA0MTg2YjgyMDQ4MzhhNDcwYzgyNWY3ZjM3NDRjID0gJChgPGRpdiBpZD0iaHRtbF81NWIwNDE4NmI4MjA0ODM4YTQ3MGM4MjVmN2YzNzQ0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA4MSBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjg8YnI+IG5ldCBkZXBhcnR1cmVzOiAzNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGExOWQ1YTQ1MGQ0NjhhODM2ZDk3Y2ZjODliMDM3Zi5zZXRDb250ZW50KGh0bWxfNTViMDQxODZiODIwNDgzOGE0NzBjODI1ZjdmMzc0NGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjAyOGUwYjRjYzEyNGQ5MmI3YjM1OWY2ZDFiZTdmZDQuYmluZFBvcHVwKHBvcHVwXzg4YTE5ZDVhNDUwZDQ2OGE4MzZkOTdjZmM4OWIwMzdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDU1YWU2MTM1NjM0OGM4YjE1ZDk2NjFmNGZhYTZlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3ODYyNjg4LCAtNzMuOTU3NzIwNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NTIwMzUyN2VhMWY0NDdmYTY2NzMxYjU0NzVlYmE5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2MTA4MTJlYTdlNDQ1NGNiZmM0NTdjOGVhN2M4NjY2ID0gJChgPGRpdiBpZD0iaHRtbF84NjEwODEyZWE3ZTQ0NTRjYmZjNDU3YzhlYTdjODY2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA4NCBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI3PGJyPiBuZXQgZGVwYXJ0dXJlczogMzcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjUyMDM1MjdlYTFmNDQ3ZmE2NjczMWI1NDc1ZWJhOWUuc2V0Q29udGVudChodG1sXzg2MTA4MTJlYTdlNDQ1NGNiZmM0NTdjOGVhN2M4NjY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0NTVhZTYxMzU2MzQ4YzhiMTVkOTY2MWY0ZmFhNmUzLmJpbmRQb3B1cChwb3B1cF82NTIwMzUyN2VhMWY0NDdmYTY2NzMxYjU0NzVlYmE5ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjRlNTU2YzNmMWI1NDZlMWI2ZTc3MDVmZTk3ZDkyYmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzU3MzAzNCwgLTczLjk1Njc1MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzMjBlZDEzZTkwMzQxNmFhNDA5Njg1NjdlY2EzZGZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzUyMTM0NDEyYjFhNGFjZDkzNjBiNDhiOWIxMGQ3NjYgPSAkKGA8ZGl2IGlkPSJodG1sXzc1MjEzNDQxMmIxYTRhY2Q5MzYwYjQ4YjliMTBkNzY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDgxIFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzM8YnI+IG5ldCBkZXBhcnR1cmVzOiA3MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMzIwZWQxM2U5MDM0MTZhYTQwOTY4NTY3ZWNhM2RmZi5zZXRDb250ZW50KGh0bWxfNzUyMTM0NDEyYjFhNGFjZDkzNjBiNDhiOWIxMGQ3NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjRlNTU2YzNmMWI1NDZlMWI2ZTc3MDVmZTk3ZDkyYmIuYmluZFBvcHVwKHBvcHVwX2MzMjBlZDEzZTkwMzQxNmFhNDA5Njg1NjdlY2EzZGZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDdmNGFkOGVjODE0NjQ0YjQ0MjA0Y2QwODgzYmJkNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3ODAxMjAzLCAtNzMuOTU0MDcxNDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0ZjJjZmUxZjE4ZTQ3NjU5MWVkNmNhYzE5NWYwMDUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGYwZjFiMDEzNDBiNDdlZDkxODdhY2U3OWY5MGQ5ZGEgPSAkKGA8ZGl2IGlkPSJodG1sX2RmMGYxYjAxMzQwYjQ3ZWQ5MTg3YWNlNzlmOTBkOWRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg1IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjE4PGJyPiBuZXQgZGVwYXJ0dXJlczogNDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTRmMmNmZTFmMThlNDc2NTkxZWQ2Y2FjMTk1ZjAwNTAuc2V0Q29udGVudChodG1sX2RmMGYxYjAxMzQwYjQ3ZWQ5MTg3YWNlNzlmOTBkOWRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NkN2Y0YWQ4ZWM4MTQ2NDRiNDQyMDRjZDA4ODNiYmQ3LmJpbmRQb3B1cChwb3B1cF85NGYyY2ZlMWYxOGU0NzY1OTFlZDZjYWMxOTVmMDA1MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzczZWVkNjA4ODM4NDgzMWFhZTIwNzNkZGE1Yjg3YjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzU2NTU0MSwgLTczLjk1MDY4NjE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTljMDc0Yjk0MjMwNGJlMGEyMTY4YzJlZjA1ZTk2YmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZjdkMmI0M2U0MjQ0Y2Y0YjM1NmJmYWFlYjFjMjFmZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWY3ZDJiNDNlNDI0NGNmNGIzNTZiZmFhZWIxYzIxZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODQgU3QgJiAxIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyODxicj4gbmV0IGRlcGFydHVyZXM6IDUzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5YzA3NGI5NDIzMDRiZTBhMjE2OGMyZWYwNWU5NmJjLnNldENvbnRlbnQoaHRtbF9lZjdkMmI0M2U0MjQ0Y2Y0YjM1NmJmYWFlYjFjMjFmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNzNlZWQ2MDg4Mzg0ODMxYWFlMjA3M2RkYTViODdiMi5iaW5kUG9wdXAocG9wdXBfNTljMDc0Yjk0MjMwNGJlMGEyMTY4YzJlZjA1ZTk2YmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxNGZjOWJhZThhZDRiNTk4YzAyNDQ3MmMxODg5ZjM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc1MzY5MDUsIC03My45NDgwMzM5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGM4MWE3YmMzYzhlNDRhNjg5ZGIzZjVmYzc5Nzc4NGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZDY5NWVkYTM0MTc0MDBmODA4ZmM5NDBhYTVkMDE0MCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2Q2OTVlZGEzNDE3NDAwZjgwOGZjOTQwYWE1ZDAxNDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODUgU3QgJiBZb3JrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE5Mzxicj4gbmV0IGRlcGFydHVyZXM6IDE0Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YzgxYTdiYzNjOGU0NGE2ODlkYjNmNWZjNzk3Nzg0Zi5zZXRDb250ZW50KGh0bWxfY2Q2OTVlZGEzNDE3NDAwZjgwOGZjOTQwYWE1ZDAxNDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDE0ZmM5YmFlOGFkNGI1OThjMDI0NDcyYzE4ODlmMzUuYmluZFBvcHVwKHBvcHVwXzRjODFhN2JjM2M4ZTQ0YTY4OWRiM2Y1ZmM3OTc3ODRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTVmN2ZjMzBkZGM0NjE2ODcxNDllYzQ0MGIzZDNkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MjgzODQsIC03My45NDk4OTIzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzc4OTA0ZTk5Mjg2NDA0MmE0OTVkNDcyZDE4ZWM2ODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjU5ODcxYTUyYTE0Y2FmYjMxOWYwMWZiYzNkYTU3YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDI1OTg3MWE1MmExNGNhZmIzMTlmMDFmYmMzZGE1N2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODEgU3QgJiBZb3JrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDk4PGJyPiBuZXQgZGVwYXJ0dXJlczogNDAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc4OTA0ZTk5Mjg2NDA0MmE0OTVkNDcyZDE4ZWM2ODIuc2V0Q29udGVudChodG1sXzAyNTk4NzFhNTJhMTRjYWZiMzE5ZjAxZmJjM2RhNTdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhNWY3ZmMzMGRkYzQ2MTY4NzE0OWVjNDQwYjNkM2Q5LmJpbmRQb3B1cChwb3B1cF9jNzg5MDRlOTkyODY0MDQyYTQ5NWQ0NzJkMThlYzY4MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2NmOTQ5YWJhNDRkNDk1MjkwYzhiNTQwNjhhYTI3MDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Njg3MzY4NywgLTczLjk2MTE5OTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWU4MjhkNDM3MjFlNDQ4NmJiNDQzOWJkYjdlOWQ4MzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZWI5YmEwNjhmM2M0NWFkODEyMjU0OWI2Y2FiYjQ3NiA9ICQoYDxkaXYgaWQ9Imh0bWxfMWViOWJhMDY4ZjNjNDVhZDgxMjI1NDliNmNhYmI0NzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgQXZlICYgRSA3MSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgyPGJyPiBuZXQgZGVwYXJ0dXJlczogMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZTgyOGQ0MzcyMWU0NDg2YmI0NDM5YmRiN2U5ZDgzNC5zZXRDb250ZW50KGh0bWxfMWViOWJhMDY4ZjNjNDVhZDgxMjI1NDliNmNhYmI0NzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2NmOTQ5YWJhNDRkNDk1MjkwYzhiNTQwNjhhYTI3MDcuYmluZFBvcHVwKHBvcHVwX2VlODI4ZDQzNzIxZTQ0ODZiYjQ0MzliZGI3ZTlkODM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNWJkZjJmNTZkNDc0MDgyYThlNGM2YzA5MDQzYzY1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2ODE3NTQ2NzQyMjQ1LCAtNzMuOTU5MTAyNjMwNjE1MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NGNhYzFjNzhhMGE0MDJlYmI3YmMwNmFmNmNiODg0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkZTg1YmFjMDY2YjQxZGE5ZTU4MjYxNzI0Y2QwNDAxID0gJChgPGRpdiBpZD0iaHRtbF81ZGU4NWJhYzA2NmI0MWRhOWU1ODI2MTcyNGNkMDQwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA3MSBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NGNhYzFjNzhhMGE0MDJlYmI3YmMwNmFmNmNiODg0ZS5zZXRDb250ZW50KGh0bWxfNWRlODViYWMwNjZiNDFkYTllNTgyNjE3MjRjZDA0MDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzViZGYyZjU2ZDQ3NDA4MmE4ZTRjNmMwOTA0M2M2NTguYmluZFBvcHVwKHBvcHVwXzk0Y2FjMWM3OGEwYTQwMmViYjdiYzA2YWY2Y2I4ODRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNDk3ODVhMzBiYWM0MmFkODhiMDc2MWE5ODZiNzNhNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MzE0MjM2LCAtNzMuOTU4NTYxNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmJhMTUzMzExYTE2NGJkZGEyMjZhOTVhYjdjOGE1YjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZWExODJhODU0N2E0ZjgyODA4NjUxNzc4MjgxMDJlNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMmVhMTgyYTg1NDdhNGY4MjgwODY1MTc3ODI4MTAyZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNzcgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYmExNTMzMTFhMTY0YmRkYTIyNmE5NWFiN2M4YTViMi5zZXRDb250ZW50KGh0bWxfMmVhMTgyYTg1NDdhNGY4MjgwODY1MTc3ODI4MTAyZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDQ5Nzg1YTMwYmFjNDJhZDg4YjA3NjFhOTg2YjczYTQuYmluZFBvcHVwKHBvcHVwXzJiYTE1MzMxMWExNjRiZGRhMjI2YTk1YWI3YzhhNWIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZjlmYzg0YTRiMzU0ZTQ4OTk3OWQzNGZmZjBjZDkxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDQwMDIzLCAtNzMuOTY2NDg5NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGE0N2JlYzUzNTE0NDc4M2I2NWM3YzY0YzUzZTM3ZGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZmQ5ZjU2ODM2NTQ0NzdlOGFjYjc5OWIwYzMwNDAxMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMmZkOWY1NjgzNjU0NDc3ZThhY2I3OTliMGMzMDQwMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxleGluZ3RvbiBBdmUgJiBFIDYzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwOTxicj4gbmV0IGRlcGFydHVyZXM6IC04Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTQ3YmVjNTM1MTQ0NzgzYjY1YzdjNjRjNTNlMzdkYy5zZXRDb250ZW50KGh0bWxfMmZkOWY1NjgzNjU0NDc3ZThhY2I3OTliMGMzMDQwMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGY5ZmM4NGE0YjM1NGU0ODk5NzlkMzRmZmYwY2Q5MTguYmluZFBvcHVwKHBvcHVwX2RhNDdiZWM1MzUxNDQ3ODNiNjVjN2M2NGM1M2UzN2RjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZThkODVlNjA5ZjQ0MjE0ODlkMDczNDU2NTBiMGI1ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NjYzODE0LCAtNzMuOTUzNDgyOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMmNlNjc1ZTg2YzA0NjkzYmFkNjQzYWQ1YjNhNzk1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5M2M3OWY5ZDlhOTRiZmQ5OWY4YWE0YmM0NDdkZWU2ID0gJChgPGRpdiBpZD0iaHRtbF9jOTNjNzlmOWQ5YTk0YmZkOTlmOGFhNGJjNDQ3ZGVlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA3MiBTdCAmIFlvcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM5MDxicj4gbmV0IGRlcGFydHVyZXM6IDExNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMmNlNjc1ZTg2YzA0NjkzYmFkNjQzYWQ1YjNhNzk1ZC5zZXRDb250ZW50KGh0bWxfYzkzYzc5ZjlkOWE5NGJmZDk5ZjhhYTRiYzQ0N2RlZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGU4ZDg1ZTYwOWY0NDIxNDg5ZDA3MzQ1NjUwYjBiNWYuYmluZFBvcHVwKHBvcHVwX2QyY2U2NzVlODZjMDQ2OTNiYWQ2NDNhZDViM2E3OTVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNjYwZmQ4NmM1ZmY0YTYxODZkODc1YTAxNGI1NjhiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NTE4NjE1LCAtNzMuOTQ0NDYwNTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjM2MTM5NWM0YzM0YTE0YWRiMTZkMTgxNWZiNDQ2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1MDI4YjViZDg3ZDRmZmFhMGZlMjc2N2NjNDZjMGM0ID0gJChgPGRpdiBpZD0iaHRtbF80NTAyOGI1YmQ4N2Q0ZmZhYTBmZTI3NjdjYzQ2YzBjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RWFzdCBFbmQgQXZlICYgRSA4NiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkwPGJyPiBuZXQgZGVwYXJ0dXJlczogNjMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWIzNjEzOTVjNGMzNGExNGFkYjE2ZDE4MTVmYjQ0Njkuc2V0Q29udGVudChodG1sXzQ1MDI4YjViZDg3ZDRmZmFhMGZlMjc2N2NjNDZjMGM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2NjBmZDg2YzVmZjRhNjE4NmQ4NzVhMDE0YjU2OGI4LmJpbmRQb3B1cChwb3B1cF81YjM2MTM5NWM0YzM0YTE0YWRiMTZkMTgxNWZiNDQ2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzUzZTE0ODU4MDA4NGM2NjgwYTY0NGMwNjliNTk3ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzE2Mzg1MSwgLTczLjk4MjYxNDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4YjNhMTE2MGZmOTQ4OWVhZGNiYjE5OTg2ZTdkNzg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RkZmIxMTMwYmY5NDVkNjliOTEyY2E1YzdiZTNkYzggPSAkKGA8ZGl2IGlkPSJodG1sX2NkZGZiMTEzMGJmOTQ1ZDY5YjkxMmNhNWM3YmUzZGM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDYzIFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI0My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjM2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNThiM2ExMTYwZmY5NDg5ZWFkY2JiMTk5ODZlN2Q3ODYuc2V0Q29udGVudChodG1sX2NkZGZiMTEzMGJmOTQ1ZDY5YjkxMmNhNWM3YmUzZGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc1M2UxNDg1ODAwODRjNjY4MGE2NDRjMDY5YjU5N2UyLmJpbmRQb3B1cChwb3B1cF81OGIzYTExNjBmZjk0ODllYWRjYmIxOTk4NmU3ZDc4NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWM4ZmMxMjFmYjFmNGQ4OGIwZjM1YjhmYmU2OTZhMWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzQ5MjUxMywgLTczLjk4MjY2NTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YTI4MjQ3Njk3ZWE0ODZjODZkM2EzZGUwNjVhNDJlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjZmEzNDEyZWQzZTQxOTVhYmEwNjdmNTE1M2U5YWRiID0gJChgPGRpdiBpZD0iaHRtbF9jY2ZhMzQxMmVkM2U0MTk1YWJhMDY3ZjUxNTNlOWFkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA2NyBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwNjxicj4gbmV0IGRlcGFydHVyZXM6IDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWEyODI0NzY5N2VhNDg2Yzg2ZDNhM2RlMDY1YTQyZTguc2V0Q29udGVudChodG1sX2NjZmEzNDEyZWQzZTQxOTVhYmEwNjdmNTE1M2U5YWRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVjOGZjMTIxZmIxZjRkODhiMGYzNWI4ZmJlNjk2YTFmLmJpbmRQb3B1cChwb3B1cF85YTI4MjQ3Njk3ZWE0ODZjODZkM2EzZGUwNjVhNDJlOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTgyZTgzZmU5Zjc2NGUwMTllOTAzYzUxNjVkYzE1ODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Nzg5Njc4NCwgLTczLjk3Mzc0NzM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjFiYzIyN2U4YjY0NDRhN2JjNmNkMjE0M2I2YTkwODAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzRjZTI5YTcwZjM0ZTYzOWYwYTJiYzgzYzc0ODliOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzM0Y2UyOWE3MGYzNGU2MzlmMGEyYmM4M2M3NDg5YjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWwgUGFyayBXZXN0ICYgVyA3NiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA0OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMWJjMjI3ZThiNjQ0NGE3YmM2Y2QyMTQzYjZhOTA4MC5zZXRDb250ZW50KGh0bWxfYzM0Y2UyOWE3MGYzNGU2MzlmMGEyYmM4M2M3NDg5YjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTgyZTgzZmU5Zjc2NGUwMTllOTAzYzUxNjVkYzE1ODMuYmluZFBvcHVwKHBvcHVwX2IxYmMyMjdlOGI2NDQ0YTdiYzZjZDIxNDNiNmE5MDgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTMxNTYzOTZlNmQ0NzUxOWIyMzNmYzhjYzI3NDdmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MDE4Mzk3MjQyMzksIC03My45NzcyODUzMjU1MjcxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmMyMzRjMTVhMjhjNGI3ZGI0NjM4ZDRkZDkxMjA5ZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OTZmODc3NDNkY2E0OWZkOWMzOWFlMjczZjdmZGFhZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTk2Zjg3NzQzZGNhNDlmZDljMzlhZTI3M2Y3ZmRhYWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNzYgU3QgJiBDb2x1bWJ1cyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTA8YnI+IG5ldCBkZXBhcnR1cmVzOiA3Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YzIzNGMxNWEyOGM0YjdkYjQ2MzhkNGRkOTEyMDlkMy5zZXRDb250ZW50KGh0bWxfNTk2Zjg3NzQzZGNhNDlmZDljMzlhZTI3M2Y3ZmRhYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWUzMTU2Mzk2ZTZkNDc1MTliMjMzZmM4Y2MyNzQ3ZjAuYmluZFBvcHVwKHBvcHVwXzZjMjM0YzE1YTI4YzRiN2RiNDYzOGQ0ZGQ5MTIwOWQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81M2JmYzFjYTY0Y2E0NGNiYTc4MTM4NzJhYzU5MjJhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MzM5OTgxLCAtNzMuOTgwOTMxMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hY2I2NTljMTllMTg0MmEwYTMyMGVhZTczYzUwNTEzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkMjIyYjg1ODNjNjQyMDQ5OGM5ODQ2NDc3NzZhMmI2ID0gJChgPGRpdiBpZD0iaHRtbF81ZDIyMmI4NTgzYzY0MjA0OThjOTg0NjQ3Nzc2YTJiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA3OCBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI3PGJyPiBuZXQgZGVwYXJ0dXJlczogNTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWNiNjU5YzE5ZTE4NDJhMGEzMjBlYWU3M2M1MDUxMzAuc2V0Q29udGVudChodG1sXzVkMjIyYjg1ODNjNjQyMDQ5OGM5ODQ2NDc3NzZhMmI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzYmZjMWNhNjRjYTQ0Y2JhNzgxMzg3MmFjNTkyMmE5LmJpbmRQb3B1cChwb3B1cF9hY2I2NTljMTllMTg0MmEwYTMyMGVhZTczYzUwNTEzMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzg2ZDg4ODQxNDU4NDA4Mjk2MzZjNGY2ZmZjOTA4Y2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzM0MDY2LCAtNzMuOTc3ODI1NDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDkuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOWM4NDhhMjZkNWU0MzY5OTFkZDhkN2NkYjBhNjZhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyZmI2ZmM3NjYzODRmMTY5NWUzODhkYTI4ZDE3ZmMwID0gJChgPGRpdiBpZD0iaHRtbF9kMmZiNmZjNzY2Mzg0ZjE2OTVlMzg4ZGEyOGQxN2ZjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbCBQYXJrIFdlc3QgJiBXIDY4IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDM1OTxicj4gbmV0IGRlcGFydHVyZXM6IDE4MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOWM4NDhhMjZkNWU0MzY5OTFkZDhkN2NkYjBhNjZhNC5zZXRDb250ZW50KGh0bWxfZDJmYjZmYzc2NjM4NGYxNjk1ZTM4OGRhMjhkMTdmYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzg2ZDg4ODQxNDU4NDA4Mjk2MzZjNGY2ZmZjOTA4Y2QuYmluZFBvcHVwKHBvcHVwX2Y5Yzg0OGEyNmQ1ZTQzNjk5MWRkOGQ3Y2RiMGE2NmE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lN2IyNjYyZGI1MzI0YzgxOWU1N2Y3MDY1ZDQ2NDIyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NzA1NzUsIC03My45Nzg5ODQ3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlYTRiZDkzNzY1NjQ0NGU4MmI5MGUxNTdlZmVmM2VlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGY0ODk2ZjhkYjIzNGFiODkxNjU0YjZhMWZhNjkzYWYgPSAkKGA8ZGl2IGlkPSJodG1sXzBmNDg5NmY4ZGIyMzRhYjg5MTY1NGI2YTFmYTY5M2FmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2x1bWJ1cyBBdmUgJiBXIDcyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI5OTxicj4gbmV0IGRlcGFydHVyZXM6IDE0OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZWE0YmQ5Mzc2NTY0NDRlODJiOTBlMTU3ZWZlZjNlZS5zZXRDb250ZW50KGh0bWxfMGY0ODk2ZjhkYjIzNGFiODkxNjU0YjZhMWZhNjkzYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTdiMjY2MmRiNTMyNGM4MTllNTdmNzA2NWQ0NjQyMmYuYmluZFBvcHVwKHBvcHVwXzBlYTRiZDkzNzY1NjQ0NGU4MmI5MGUxNTdlZmVmM2VlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNmNhMGFjYzY0NzY0YzU3ODQxNTNhMjE2YmI3YjhhNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NTc5Mzc2NjgzNjY2LCAtNzMuOTc2MjA1NzM2Mzk4NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1NGRkZjY4ODA4MDQ5ZmY5NTZlYzBjZDlkZDg0MWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTViMzVhZjFkYjNiNDFhOWIwZDJmNWNkZWQ2MTk4ZWIgPSAkKGA8ZGl2IGlkPSJodG1sX2U1YjM1YWYxZGIzYjQxYTliMGQyZjVjZGVkNjE5OGViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsIFBhcmsgV2VzdCAmIFcgNzIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjcyPGJyPiBuZXQgZGVwYXJ0dXJlczogMTEyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1NGRkZjY4ODA4MDQ5ZmY5NTZlYzBjZDlkZDg0MWYxLnNldENvbnRlbnQoaHRtbF9lNWIzNWFmMWRiM2I0MWE5YjBkMmY1Y2RlZDYxOThlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNmNhMGFjYzY0NzY0YzU3ODQxNTNhMjE2YmI3YjhhNy5iaW5kUG9wdXAocG9wdXBfMTU0ZGRmNjg4MDgwNDlmZjk1NmVjMGNkOWRkODQxZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5NGJmOGMxMDNlMzQ5YzM5Y2FiOTQ3NjFiMTQyMzYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzgwNTc3OTkwMTAzMzQ2LCAtNzMuOTg1NjI0MzEzMzU0NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyNDYwODA4YTdmZjQ2NzlhMWFmMjcwMGYxMTY4NGNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzE2ZmEzNTRjMmNkNGM2ODgwYjM3YmEwZjA1ODE1ZTYgPSAkKGA8ZGl2IGlkPSJodG1sX2MxNmZhMzU0YzJjZDRjNjg4MGIzN2JhMGYwNTgxNWU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZlcnNpZGUgRHIgJiBXIDcyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQwPGJyPiBuZXQgZGVwYXJ0dXJlczogNjIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjI0NjA4MDhhN2ZmNDY3OWExYWYyNzAwZjExNjg0Y2Yuc2V0Q29udGVudChodG1sX2MxNmZhMzU0YzJjZDRjNjg4MGIzN2JhMGYwNTgxNWU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg5NGJmOGMxMDNlMzQ5YzM5Y2FiOTQ3NjFiMTQyMzYzLmJpbmRQb3B1cChwb3B1cF9mMjQ2MDgwOGE3ZmY0Njc5YTFhZjI3MDBmMTE2ODRjZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQyMDRiMzJlZDlmNGMwNWE2Y2RmYzQ1NTIyNTY5N2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Nzk2NjgwOTAwNzMxMTYsIC03My45ODA5MzA0NDc1Nzg0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjUwNTgxZmY4YzcwNDgxOWEzMmE4OTZjZTQxZTY4YjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMjA5MWJjNmE4NWI0Zjc5OTBjMjUxODUzZDgzMTY0YyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjIwOTFiYzZhODViNGY3OTkwYzI1MTg1M2Q4MzE2NGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFtc3RlcmRhbSBBdmUgJiBXIDczIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNjIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI3Njxicj4gbmV0IGRlcGFydHVyZXM6IDExNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTA1ODFmZjhjNzA0ODE5YTMyYTg5NmNlNDFlNjhiNi5zZXRDb250ZW50KGh0bWxfZjIwOTFiYzZhODViNGY3OTkwYzI1MTg1M2Q4MzE2NGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWQyMDRiMzJlZDlmNGMwNWE2Y2RmYzQ1NTIyNTY5N2MuYmluZFBvcHVwKHBvcHVwXzY1MDU4MWZmOGM3MDQ4MTlhMzJhODk2Y2U0MWU2OGI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMDk3Njc3MjUzYzA0MmI0ODdmMDI5ODdkYTcxNzNlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NDcyNjc1LCAtNzMuOTY5NjE3MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxZjk4ZWY0MmU4YzRiYjBhZTFiM2FjOTExYTc2ZDcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDUxOTM0Y2MyYzUzNGZkNmEwODZjYzY5MzJjZTMzNzMgPSAkKGA8ZGl2IGlkPSJodG1sXzA1MTkzNGNjMmM1MzRmZDZhMDg2Y2M2OTMyY2UzMzczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsIFBhcmsgV2VzdCAmIFcgODUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjxicj4gbmV0IGRlcGFydHVyZXM6IDIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDFmOThlZjQyZThjNGJiMGFlMWIzYWM5MTFhNzZkNzAuc2V0Q29udGVudChodG1sXzA1MTkzNGNjMmM1MzRmZDZhMDg2Y2M2OTMyY2UzMzczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwOTc2NzcyNTNjMDQyYjQ4N2YwMjk4N2RhNzE3M2U4LmJpbmRQb3B1cChwb3B1cF8wMWY5OGVmNDJlOGM0YmIwYWUxYjNhYzkxMWE3NmQ3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDQxZmEyZGQ5ZmQ5NDNmNzk0NjZiNWVjMjIyMTZlOTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODcyMDg2OSwgLTczLjk4MTI4MTI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjk0MmFkYjc4Mzg5NGQ1Mzk2ZGI2Y2M4MTM1OTY5OGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YzNjZDFiZGRlZjA0NWJjYjJlZjIyMjA4M2FmZWQ1YSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWMzY2QxYmRkZWYwNDViY2IyZWYyMjIwODNhZmVkNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpdmVyc2lkZSBEciAmIFcgODIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzM8YnI+IG5ldCBkZXBhcnR1cmVzOiA3OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOTQyYWRiNzgzODk0ZDUzOTZkYjZjYzgxMzU5Njk4YS5zZXRDb250ZW50KGh0bWxfOWMzY2QxYmRkZWYwNDViY2IyZWYyMjIwODNhZmVkNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDQxZmEyZGQ5ZmQ5NDNmNzk0NjZiNWVjMjIyMTZlOTQuYmluZFBvcHVwKHBvcHVwX2I5NDJhZGI3ODM4OTRkNTM5NmRiNmNjODEzNTk2OThhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82M2U4ZTZmOWU5YzY0YTc0YTVlZDkyM2UyYmMxNmRiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NDk5OTc5LCAtNzMuOTcyODM0MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0ZjU5MTBmYWFmMjRkZTk4NWYxNDc1NjNkMGM1NWRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTI4MTRhZjk4NDBiNGU2ODk3MmNkMThjMDYzZGNjMWQgPSAkKGA8ZGl2IGlkPSJodG1sXzEyODE0YWY5ODQwYjRlNjg5NzJjZDE4YzA2M2RjYzFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDg0IFN0ICYgQ29sdW1idXMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg1PGJyPiBuZXQgZGVwYXJ0dXJlczogOTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDRmNTkxMGZhYWYyNGRlOTg1ZjE0NzU2M2QwYzU1ZGEuc2V0Q29udGVudChodG1sXzEyODE0YWY5ODQwYjRlNjg5NzJjZDE4YzA2M2RjYzFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzZThlNmY5ZTljNjRhNzRhNWVkOTIzZTJiYzE2ZGI4LmJpbmRQb3B1cChwb3B1cF80NGY1OTEwZmFhZjI0ZGU5ODVmMTQ3NTYzZDBjNTVkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGMyZGQ5MzA1ZTg2NDM1N2E4NWI3MDJkM2RhMWEwM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODUyNDY3MiwgLTczLjk3NjY3MzIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlN2U3YWQ0OTI4ZTQwOTNiYjMwNDdjMmM2Y2E0YzVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGNkNzk2MDhkZDQyNDc2MGEyMGE5YmMyZTZjNmU4OTMgPSAkKGA8ZGl2IGlkPSJodG1sXzhjZDc5NjA4ZGQ0MjQ3NjBhMjBhOWJjMmU2YzZlODkzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BbXN0ZXJkYW0gQXZlICYgVyA4MiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTAxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA5ODxicj4gbmV0IGRlcGFydHVyZXM6IC0zLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlN2U3YWQ0OTI4ZTQwOTNiYjMwNDdjMmM2Y2E0YzVlLnNldENvbnRlbnQoaHRtbF84Y2Q3OTYwOGRkNDI0NzYwYTIwYTliYzJlNmM2ZTg5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YzJkZDkzMDVlODY0MzU3YTg1YjcwMmQzZGExYTAzYS5iaW5kUG9wdXAocG9wdXBfNGU3ZTdhZDQ5MjhlNDA5M2JiMzA0N2MyYzZjYTRjNWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3MzEzMjdlMjI3NzRmOWE5NjgzMjdmNzQ3OGU5NjcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc4NTY2OSwgLTczLjk3NzU0OTYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNiYWZiOGU5MWFiNGNlODkyMzgyOGM2NjdjZTg1MjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wODMxZGQwOTkyZTE0N2M4YWFlZWZlZjlmN2M2NjEwMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDgzMWRkMDk5MmUxNDdjOGFhZWVmZWY5ZjdjNjYxMDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNzQgU3QgJiBDb2x1bWJ1cyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3ODxicj4gbmV0IGRlcGFydHVyZXM6IDMzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzYmFmYjhlOTFhYjRjZTg5MjM4MjhjNjY3Y2U4NTIyLnNldENvbnRlbnQoaHRtbF8wODMxZGQwOTkyZTE0N2M4YWFlZWZlZjlmN2M2NjEwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNzMxMzI3ZTIyNzc0ZjlhOTY4MzI3Zjc0NzhlOTY3MS5iaW5kUG9wdXAocG9wdXBfMjNiYWZiOGU5MWFiNGNlODkyMzgyOGM2NjdjZTg1MjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmNmY1OGUxMDk4ZjRiYzFhZDM5NmQwMWFhMjU2YjRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc3NTA3MDI3NTQ3OTc2LCAtNzMuOTg4ODg1ODc5NTE2NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxOGNiN2QxYzFhNzQ0MWNhNTMyMGUxZTVmMzg4NGM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDc0ODgxZTgwNzE2NDM1ZWFlN2Y2NGU3NDQ3Yzc4NjIgPSAkKGA8ZGl2IGlkPSJodG1sXzA3NDg4MWU4MDcxNjQzNWVhZTdmNjRlNzQ0N2M3ODYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZlcnNpZGUgQmx2ZCAmIFcgNjcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTc8YnI+IG5ldCBkZXBhcnR1cmVzOiA2Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMThjYjdkMWMxYTc0NDFjYTUzMjBlMWU1ZjM4ODRjOC5zZXRDb250ZW50KGh0bWxfMDc0ODgxZTgwNzE2NDM1ZWFlN2Y2NGU3NDQ3Yzc4NjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWY2ZjU4ZTEwOThmNGJjMWFkMzk2ZDAxYWEyNTZiNGMuYmluZFBvcHVwKHBvcHVwX2MxOGNiN2QxYzFhNzQ0MWNhNTMyMGUxZTVmMzg4NGM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNDU4ZWU2YTE4NzQ0MTUwYjlhMWQzZmRhM2ZjNDI0MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NzQ4MDQ2LCAtNzMuOTgyODg1OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5MDc0Y2ZlOTE2MjQ5NjJhMDJkMmYwYjYwOTM0MDYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2NkNmRmYzc3ZWZhNGU4ZThjMDI3MzhkNGIxYzQxYmMgPSAkKGA8ZGl2IGlkPSJodG1sXzdjZDZkZmM3N2VmYTRlOGU4YzAyNzM4ZDRiMWM0MWJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDcwIFN0ICYgQW1zdGVyZGFtIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTA3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAxOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOTA3NGNmZTkxNjI0OTYyYTAyZDJmMGI2MDkzNDA2My5zZXRDb250ZW50KGh0bWxfN2NkNmRmYzc3ZWZhNGU4ZThjMDI3MzhkNGIxYzQxYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzQ1OGVlNmExODc0NDE1MGI5YTFkM2ZkYTNmYzQyNDMuYmluZFBvcHVwKHBvcHVwX2I5MDc0Y2ZlOTE2MjQ5NjJhMDJkMmYwYjYwOTM0MDYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmEzNzcxMjI1Yjk0NzQzYTcxYThkNTA4NjgyZDQxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NDUyODM1LCAtNzMuOTg3NTM3NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4YmFlZmI2NDgzNTQxNDg5MjZhZmVmOGI1NTdmNTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBkY2YxOWQxMGQ4NGMwZWIwNTc4MWJjNzY3OWQ0YTQgPSAkKGA8ZGl2IGlkPSJodG1sX2UwZGNmMTlkMTBkODRjMGViMDU3ODFiYzc2NzlkNGE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDY0IFN0ICYgV2VzdCBFbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjE2PGJyPiBuZXQgZGVwYXJ0dXJlczogMTUwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4YmFlZmI2NDgzNTQxNDg5MjZhZmVmOGI1NTdmNTcyLnNldENvbnRlbnQoaHRtbF9lMGRjZjE5ZDEwZDg0YzBlYjA1NzgxYmM3Njc5ZDRhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NmEzNzcxMjI1Yjk0NzQzYTcxYThkNTA4NjgyZDQxOS5iaW5kUG9wdXAocG9wdXBfMjhiYWVmYjY0ODM1NDE0ODkyNmFmZWY4YjU1N2Y1NzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExMTFjYTA3NGVhNjQxYmRiZGRmYzI2MzAzYWYwZTZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg2Nzk0NywgLTczLjk3NzExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2M2QxYzllZWM3MDQzNjZhNDZhYzYwNjViNTVmNzZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDlmNTM1ZWI5MDMyNDg1MGI4ODZhODFlMGViNzQzMTUgPSAkKGA8ZGl2IGlkPSJodG1sXzA5ZjUzNWViOTAzMjQ4NTBiODg2YTgxZTBlYjc0MzE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDg0IFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjI8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzYzZDFjOWVlYzcwNDM2NmE0NmFjNjA2NWI1NWY3NmYuc2V0Q29udGVudChodG1sXzA5ZjUzNWViOTAzMjQ4NTBiODg2YTgxZTBlYjc0MzE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExMTFjYTA3NGVhNjQxYmRiZGRmYzI2MzAzYWYwZTZhLmJpbmRQb3B1cChwb3B1cF9jNjNkMWM5ZWVjNzA0MzY2YTQ2YWM2MDY1YjU1Zjc2ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmI5NDk5OTMyNWE2NDY5ODhjOTllN2Q5YTRkMGYwOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODQxNDQ3MiwgLTczLjk4MzYyNDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDY2MzM5OTExMWU1NGYyMmIyNDQwOGYyNjAwNWEyZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNWE4ZmM5NTE3Yjg0MTFjYTUyYTJlZDQ3NzEwZjk3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTVhOGZjOTUxN2I4NDExY2E1MmEyZWQ0NzcxMGY5NzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpdmVyc2lkZSBEciAmIFcgNzggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDU8YnI+IG5ldCBkZXBhcnR1cmVzOiA2NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjYzMzk5MTExZTU0ZjIyYjI0NDA4ZjI2MDA1YTJkOC5zZXRDb250ZW50KGh0bWxfZTVhOGZjOTUxN2I4NDExY2E1MmEyZWQ0NzcxMGY5NzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmI5NDk5OTMyNWE2NDY5ODhjOTllN2Q5YTRkMGYwOTEuYmluZFBvcHVwKHBvcHVwXzA2NjMzOTkxMTFlNTRmMjJiMjQ0MDhmMjYwMDVhMmQ4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTAyZmJiNDhkOTk0NGQwYWM3MWYwNjE5ZmY3YjdiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5ODYxNywgLTczLjk0MTM0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1ZjY0OTgwYWQ2YzQyNmRiZjEyNmY5MDNiY2IyMTA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDYzZGRjODA5MjE2NDJlYzkyZGNlMjJlZjQ5MWY3OTEgPSAkKGA8ZGl2IGlkPSJodG1sXzQ2M2RkYzgwOTIxNjQyZWM5MmRjZTIyZWY0OTFmNzkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYXJrIEF2ZSAmIE1hcmN1cyBHYXJ2ZXkgQmx2ZDxicj4gdG90YWwgZGVwYXJ0dXJlczogNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNWY2NDk4MGFkNmM0MjZkYmYxMjZmOTAzYmNiMjEwOC5zZXRDb250ZW50KGh0bWxfNDYzZGRjODA5MjE2NDJlYzkyZGNlMjJlZjQ5MWY3OTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzEwMmZiYjQ4ZDk5NDRkMGFjNzFmMDYxOWZmN2I3YjQuYmluZFBvcHVwKHBvcHVwX2Y1ZjY0OTgwYWQ2YzQyNmRiZjEyNmY5MDNiY2IyMTA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTU1N2RkZGJlMWI0OGRlODAwYjJjYjIyNjU0YzM5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5ODc4LCAtNzMuOTk3MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDBhNzY5N2I5YzE0OTAyODZjY2E5YzZhMWY3NDU4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I3NjNhNzlhNDAxMDRmZjRiYTM4NzQ5M2I5NGVkYWYwID0gJChgPGRpdiBpZD0iaHRtbF9iNzYzYTc5YTQwMTA0ZmY0YmEzODc0OTNiOTRlZGFmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvb2tseW4gQnJpZGdlIFBhcmsgLSBQaWVyIDI8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMzxicj4gbmV0IGRlcGFydHVyZXM6IC02LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0MGE3Njk3YjljMTQ5MDI4NmNjYTljNmExZjc0NTg2LnNldENvbnRlbnQoaHRtbF9iNzYzYTc5YTQwMTA0ZmY0YmEzODc0OTNiOTRlZGFmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTU1N2RkZGJlMWI0OGRlODAwYjJjYjIyNjU0YzM5OS5iaW5kUG9wdXAocG9wdXBfZTQwYTc2OTdiOWMxNDkwMjg2Y2NhOWM2YTFmNzQ1ODYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZjFkMWMxYTYwMTQ0MGE5Nzk2M2IyZGQxZjIxNmZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI5MTkzLCAtNzMuOTc2NjU1MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IE5hTiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3NzlmODRlMGJhMTRmZGNiNTI0MjJmOTU0MjNhODA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjAyYTg0MmRlMzcwNDk5OTkxNGZhZDVlYWFiMGRhOGUgPSAkKGA8ZGl2IGlkPSJodG1sXzIwMmE4NDJkZTM3MDQ5OTk5MTRmYWQ1ZWFhYjBkYThlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OWUNCUyBEZXBvdCAtIFNUWTxicj4gdG90YWwgZGVwYXJ0dXJlczogbmFuPGJyPiB0b3RhbCBhcnJpdmFsczogMTxicj4gbmV0IGRlcGFydHVyZXM6IG5hbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzc3OWY4NGUwYmExNGZkY2I1MjQyMmY5NTQyM2E4MDcuc2V0Q29udGVudChodG1sXzIwMmE4NDJkZTM3MDQ5OTk5MTRmYWQ1ZWFhYjBkYThlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4ZjFkMWMxYTYwMTQ0MGE5Nzk2M2IyZGQxZjIxNmZlLmJpbmRQb3B1cChwb3B1cF8zNzc5Zjg0ZTBiYTE0ZmRjYjUyNDIyZjk1NDIzYTgwNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRjNzZhZjczNWJhNDIwZmE1MGU5MzE4MWMyMTc3OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDMsIC03My45MzU2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjQ2OWMxMjQ3OWU0YjdlYWQ0OTdlYTdiM2EyODQxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzMDIyOTE5YjZhZjRkYzBhYjVlZDI0ZmY1ODlhZjU5ID0gJChgPGRpdiBpZD0iaHRtbF81MzAyMjkxOWI2YWY0ZGMwYWI1ZWQyNGZmNTg5YWY1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NDcgQXZlICYgMzEgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyNDY5YzEyNDc5ZTRiN2VhZDQ5N2VhN2IzYTI4NDE1LnNldENvbnRlbnQoaHRtbF81MzAyMjkxOWI2YWY0ZGMwYWI1ZWQyNGZmNTg5YWY1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNGM3NmFmNzM1YmE0MjBmYTUwZTkzMTgxYzIxNzc4ZS5iaW5kUG9wdXAocG9wdXBfMzI0NjljMTI0NzllNGI3ZWFkNDk3ZWE3YjNhMjg0MTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkZjRmZGYxMzg4MTRkYzdhZTk0ZjE5ZTY1ZDM5ZGVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU4OTk2NTU5NjA1MTE2LCAtNzMuOTY4NjUzOTc2OTE3MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC03LjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZGZkNDU3YmEyMzI0OTI2YmZmZjU3OWNiM2I5YzgwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkMzlmN2IxODQ3ZTRhODZhNmIyYjk5N2RiN2VkZGJlID0gJChgPGRpdiBpZD0iaHRtbF8yZDM5ZjdiMTg0N2U0YTg2YTZiMmI5OTdkYjdlZGRiZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA1NSBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyMDxicj4gbmV0IGRlcGFydHVyZXM6IC0xNDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2RmZDQ1N2JhMjMyNDkyNmJmZmY1NzljYjNiOWM4MDEuc2V0Q29udGVudChodG1sXzJkMzlmN2IxODQ3ZTRhODZhNmIyYjk5N2RiN2VkZGJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkZjRmZGYxMzg4MTRkYzdhZTk0ZjE5ZTY1ZDM5ZGVmLmJpbmRQb3B1cChwb3B1cF8zZGZkNDU3YmEyMzI0OTI2YmZmZjU3OWNiM2I5YzgwMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODE3MGIwN2FlNjAxNDE0YWI3M2RlNjg5NzhiODNlMjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mzk5NzM1NDEwMzQwOSwgLTc0LjAwNTEzODcyNTA0MjM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTAuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MTcyZjBiMzNmNDY0YjU2OTA3NDY1N2JjNDcyYWU4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiNjE3NmY0ZWU0ODRhM2Q5YzY5NmQ5NzE1YjY5MzMwID0gJChgPGRpdiBpZD0iaHRtbF9iYjYxNzZmNGVlNDg0YTNkOWM2OTZkOTcxNWI2OTMzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAxMyBTdCAmIEh1ZHNvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDc5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjA1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxNzJmMGIzM2Y0NjRiNTY5MDc0NjU3YmM0NzJhZTgxLnNldENvbnRlbnQoaHRtbF9iYjYxNzZmNGVlNDg0YTNkOWM2OTZkOTcxNWI2OTMzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MTcwYjA3YWU2MDE0MTRhYjczZGU2ODk3OGI4M2UyNi5iaW5kUG9wdXAocG9wdXBfODE3MmYwYjMzZjQ2NGI1NjkwNzQ2NTdiYzQ3MmFlODEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UzMmYwZWU5YWRmODQ4Y2Y5NzYyMmRmNTg5NTcwYTRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzgyNzUsIC03My45NzEzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0OGQ0ZjViZWM4YjRiMjU5OGVkN2VmMmM1NmQ0NTNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjJiYzVmNDk2NWE1NDljY2E2NGZkYzFkMWRmNWQ0YjcgPSAkKGA8ZGl2IGlkPSJodG1sXzYyYmM1ZjQ5NjVhNTQ5Y2NhNjRmZGMxZDFkZjVkNGI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDgyIFN0ICYgQ2VudHJhbCBQYXJrIFdlc3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDg5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA0NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNDhkNGY1YmVjOGI0YjI1OThlZDdlZjJjNTZkNDUzZS5zZXRDb250ZW50KGh0bWxfNjJiYzVmNDk2NWE1NDljY2E2NGZkYzFkMWRmNWQ0YjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTMyZjBlZTlhZGY4NDhjZjk3NjIyZGY1ODk1NzBhNGQuYmluZFBvcHVwKHBvcHVwX2I0OGQ0ZjViZWM4YjRiMjU5OGVkN2VmMmM1NmQ0NTNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOGQ0NWMxNzY2MGE0NmVhYmJkZGMxNWIwYTYxZDYzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MTI4MzU5Njk2MjI5NiwgLTczLjk5NjkyNDQ1OTkzNDIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxOS44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjOGE5ZDUyZDcwNTRjMDM5YjViYjkxYTg5ODY1YmNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI3ZDBlZGNiYjVmNGQ5NDg2OTcwYzMxNGQzM2VkN2UgPSAkKGA8ZGl2IGlkPSJodG1sX2YyN2QwZWRjYmI1ZjRkOTQ4Njk3MGMzMTRkMzNlZDdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZW5uIFN0YXRpb24gVmFsZXQ8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Nzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAzOTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWM4YTlkNTJkNzA1NGMwMzliNWJiOTFhODk4NjViY2Muc2V0Q29udGVudChodG1sX2YyN2QwZWRjYmI1ZjRkOTQ4Njk3MGMzMTRkMzNlZDdlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4ZDQ1YzE3NjYwYTQ2ZWFiYmRkYzE1YjBhNjFkNjNkLmJpbmRQb3B1cChwb3B1cF9hYzhhOWQ1MmQ3MDU0YzAzOWI1YmI5MWE4OTg2NWJjYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTlhMDFhZmE1ZTc1NDlkY2JhNjliODk5ODQ2OTk3MGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Njc4MDA4MDE0ODEzMiwgLTczLjk2NTkyMDgwNTkzMTA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjU5NWE2MTBmNzBiNDk0MWEzNWFiMGE0ODFlMzQyMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNmE5N2Q4YjQwZDk0ZmViOTcxZWE5MjllYmUwYWU2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjZhOTdkOGI0MGQ5NGZlYjk3MWVhOTI5ZWJlMGFlNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNjcgU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTcxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA4MTxicj4gbmV0IGRlcGFydHVyZXM6IC05MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTk1YTYxMGY3MGI0OTQxYTM1YWIwYTQ4MWUzNDIxMi5zZXRDb250ZW50KGh0bWxfMjZhOTdkOGI0MGQ5NGZlYjk3MWVhOTI5ZWJlMGFlNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTlhMDFhZmE1ZTc1NDlkY2JhNjliODk5ODQ2OTk3MGUuYmluZFBvcHVwKHBvcHVwX2I1OTVhNjEwZjcwYjQ5NDFhMzVhYjBhNDgxZTM0MjEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYmViNDA0YzI0YzY0MDg3YmMxZDhlNzYxMjNiNjEwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4OTYyMTg4NzkwMzMzLCAtNzMuOTgzMDQyNjg3MTc3NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYmVkOTgwYTRmZTk0ZDA0OWYwZGE5YzZlZGFjMDM2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4NDg1OTcwZDM2OTQ5NjA5ZTExNzVmZWYzZmFjYjQ5ID0gJChgPGRpdiBpZD0iaHRtbF83ODQ4NTk3MGQzNjk0OTYwOWUxMTc1ZmVmM2ZhY2I0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qm9uZCBTdCAmIEZ1bHRvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQ3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1OTxicj4gbmV0IGRlcGFydHVyZXM6IC04OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYmVkOTgwYTRmZTk0ZDA0OWYwZGE5YzZlZGFjMDM2YS5zZXRDb250ZW50KGh0bWxfNzg0ODU5NzBkMzY5NDk2MDllMTE3NWZlZjNmYWNiNDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGJlYjQwNGMyNGM2NDA4N2JjMWQ4ZTc2MTIzYjYxMDkuYmluZFBvcHVwKHBvcHVwX2ZiZWQ5ODBhNGZlOTRkMDQ5ZjBkYTljNmVkYWMwMzZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOTI0NDA0ODg5NTI0ZDlmODQ0NTAzY2NkMGZmOTI4OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NzI0NTY3OTExNzI2LCAtNzMuOTc4MDU5MTQyODI3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC02Ljg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmJjZGVjNjc1ZDMzNGY3NjhjZmZlYTFlYThkMGViMGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZDc5OGMxYTM5MDY0OWU1YTQ0N2MyZDIwY2U3OWUyMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNWQ3OThjMWEzOTA2NDllNWE0NDdjMmQyMGNlNzllMjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNDggU3QgJiA1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjg4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTM3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiY2RlYzY3NWQzMzRmNzY4Y2ZmZWExZWE4ZDBlYjBmLnNldENvbnRlbnQoaHRtbF81ZDc5OGMxYTM5MDY0OWU1YTQ0N2MyZDIwY2U3OWUyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOTI0NDA0ODg5NTI0ZDlmODQ0NTAzY2NkMGZmOTI4OC5iaW5kUG9wdXAocG9wdXBfNmJjZGVjNjc1ZDMzNGY3NjhjZmZlYTFlYThkMGViMGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE0ZTkyZDA5OGY0ZjQ1MjA5ZDYzOGZhOWFjMTc1ODFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUyMTY1MjgwNjIxOTY2LCAtNzMuOTc5OTIxOTM2OTg4ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NjI3MzE0MTk4YjM0YjYxODIyMTA2MWMzMWZjNGRlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjMmUyZDViMmMxNDRlNGI4YWRkNTJlYTNmZGJiMjEzID0gJChgPGRpdiBpZD0iaHRtbF83YzJlMmQ1YjJjMTQ0ZTRiOGFkZDUyZWEzZmRiYjIxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0MSBTdCAmIE1hZGlzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzODUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM4ODxicj4gbmV0IGRlcGFydHVyZXM6IDMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODYyNzMxNDE5OGIzNGI2MTgyMjEwNjFjMzFmYzRkZWMuc2V0Q29udGVudChodG1sXzdjMmUyZDViMmMxNDRlNGI4YWRkNTJlYTNmZGJiMjEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE0ZTkyZDA5OGY0ZjQ1MjA5ZDYzOGZhOWFjMTc1ODFmLmJpbmRQb3B1cChwb3B1cF84NjI3MzE0MTk4YjM0YjYxODIyMTA2MWMzMWZjNGRlYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2ZkMDZlOGEzOTlhNDljNzk3YjAyMjJjYWMyOTdmYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTg5ODQ4MTM5OTYzNCwgLTczLjk5Mzc5OTY4NjQzMTg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyNS45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTQxOTZjMzU4M2NjNDQyNzkzNWU4MmQwZTAzNjNmMzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNWI3M2Q5NzA2Yzk0ODM1YTYwNTAzNDFiMGY2NGNiNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYjViNzNkOTcwNmM5NDgzNWE2MDUwMzQxYjBmNjRjYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNDIgU3QgJiBEeWVyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDU1Njxicj4gbmV0IGRlcGFydHVyZXM6IDUxOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NDE5NmMzNTgzY2M0NDI3OTM1ZTgyZDBlMDM2M2YzNy5zZXRDb250ZW50KGh0bWxfYjViNzNkOTcwNmM5NDgzNWE2MDUwMzQxYjBmNjRjYjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2ZkMDZlOGEzOTlhNDljNzk3YjAyMjJjYWMyOTdmYzIuYmluZFBvcHVwKHBvcHVwXzU0MTk2YzM1ODNjYzQ0Mjc5MzVlODJkMGUwMzYzZjM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jN2RkMWY4MjNhNzg0NjZmODdiNjViOWQyNWU4M2UwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MzgzMzQzNDM3NjIyLCAtNzMuOTQyNjc2NzgyNjA4MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODhkMmI1MzM4MjU5NDNmNzgwYjNkYjZhYzg4MDNlYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YzU1MDAwMDI5NWQ0NjdiYjdiODc2NzExMmVmNDQzZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmM1NTAwMDAyOTVkNDY3YmI3Yjg3NjcxMTJlZjQ0M2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjIxIFN0ICYgNDEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTxicj4gbmV0IGRlcGFydHVyZXM6IC0xLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4ZDJiNTMzODI1OTQzZjc4MGIzZGI2YWM4ODAzZWI1LnNldENvbnRlbnQoaHRtbF82YzU1MDAwMDI5NWQ0NjdiYjdiODc2NzExMmVmNDQzZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jN2RkMWY4MjNhNzg0NjZmODdiNjViOWQyNWU4M2UwNi5iaW5kUG9wdXAocG9wdXBfODhkMmI1MzM4MjU5NDNmNzgwYjNkYjZhYzg4MDNlYjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkZjIyYjA1OGIyZjQ0YzY4YzViNDcyZjgyMTUwM2FlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzczOTEzOTAyMzgxMTgsIC03My45NTQzOTUzNTM3OTQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjA3OGEyNjIwZGUwNDIwMWE1MmUwZTcyOGFlMjAyNDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzUyZDY1ZGQ2MGQ0NDljYTc0MGJmOWE3NGU3ZDk0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfODc1MmQ2NWRkNjBkNDQ5Y2E3NDBiZjlhNzRlN2Q5NDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODAgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwMzxicj4gbmV0IGRlcGFydHVyZXM6IDU3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwNzhhMjYyMGRlMDQyMDFhNTJlMGU3MjhhZTIwMjQ1LnNldENvbnRlbnQoaHRtbF84NzUyZDY1ZGQ2MGQ0NDljYTc0MGJmOWE3NGU3ZDk0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZGYyMmIwNThiMmY0NGM2OGM1YjQ3MmY4MjE1MDNhZS5iaW5kUG9wdXAocG9wdXBfNjA3OGEyNjIwZGUwNDIwMWE1MmUwZTcyOGFlMjAyNDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RkZTIwODFlMjA4YjQyZGFiYTYwNDQ5OWE1YTUyMDNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg2MjAzMDAwMDAwMDA2LCAtNzMuOTQ0Njk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTdiNzBmMWMwMzMyNDJmODhhYWE5ZjU5YTI3OTQwZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzFkODZjNWJhMzc0MjgzOGRhZGZiOTZkN2FmNzMyOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTMxZDg2YzViYTM3NDI4MzhkYWRmYjk2ZDdhZjczMjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vbnJvZSBTdCAmIFRvbXBraW5zIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAzOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85N2I3MGYxYzAzMzI0MmY4OGFhYTlmNTlhMjc5NDBkNC5zZXRDb250ZW50KGh0bWxfZTMxZDg2YzViYTM3NDI4MzhkYWRmYjk2ZDdhZjczMjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGRlMjA4MWUyMDhiNDJkYWJhNjA0NDk5YTVhNTIwM2UuYmluZFBvcHVwKHBvcHVwXzk3YjcwZjFjMDMzMjQyZjg4YWFhOWY1OWEyNzk0MGQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NjdlOGMzMDMwYzE0MDk2ODU4ODhmNzc2NjEzM2VhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MTAyOTI1Njc3OTY4LCAtNzMuOTkxODMzNjI3MjIzOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWNjNTkzNmZhZGQ1NDk2NThjNjI5MjY4MmQwYjM0MjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOWRlY2U1YWIwZDQ0ODBiOTAyMmI2MTI2YTkwNDJlYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTlkZWNlNWFiMGQ0NDgwYjkwMjJiNjEyNmE5MDQyZWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNjaGVybWVyaG9ybiBTdCAmIENvdXJ0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExNDxicj4gbmV0IGRlcGFydHVyZXM6IC01NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Y2M1OTM2ZmFkZDU0OTY1OGM2MjkyNjgyZDBiMzQyNS5zZXRDb250ZW50KGh0bWxfMTlkZWNlNWFiMGQ0NDgwYjkwMjJiNjEyNmE5MDQyZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTY3ZThjMzAzMGMxNDA5Njg1ODg4Zjc3NjYxMzNlYTAuYmluZFBvcHVwKHBvcHVwXzVjYzU5MzZmYWRkNTQ5NjU4YzYyOTI2ODJkMGIzNDI1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YWU5YjgxNzExMjM0YTRiYjhhZTVlNmQwNjg5MjUyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1ODkyMzg2Mzc3Njk1LCAtNzMuOTYyMjYyMjcyODM0NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3MThhZGFhYTFlNDQ3OWE5MDU0YWNiNjY0Nzg5MjA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWY3ZTMxNmI2MzQ3NDE0ZThkNWUxZWUwOTBjZjY5MTIgPSAkKGA8ZGl2IGlkPSJodG1sXzlmN2UzMTZiNjM0NzQxNGU4ZDVlMWVlMDkwY2Y2OTEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDU4IFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDcwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA3NDxicj4gbmV0IGRlcGFydHVyZXM6IDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTcxOGFkYWFhMWU0NDc5YTkwNTRhY2I2NjQ3ODkyMDQuc2V0Q29udGVudChodG1sXzlmN2UzMTZiNjM0NzQxNGU4ZDVlMWVlMDkwY2Y2OTEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlhZTliODE3MTEyMzRhNGJiOGFlNWU2ZDA2ODkyNTJlLmJpbmRQb3B1cChwb3B1cF8xNzE4YWRhYWExZTQ0NzlhOTA1NGFjYjY2NDc4OTIwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzFkNmYwMmQ0MDZmNGMzNDhhYjIzNmY4MjFkMzc1OTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzE0MzcyNDA4NTIyOCwgLTczLjk5NDkwMzQxNTQ0MTUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTIxZDVkNGRjZTExNDg3Nzk1MDgxNWYxMTM5YmY4MWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZTNiZTU4Y2VkOTk0MjQ5YWQ0ZjVkZmQxYzllMzFjMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZWUzYmU1OGNlZDk5NDI0OWFkNGY1ZGZkMWM5ZTMxYzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaXZlcnNpdHkgUGwgJiBFIDggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM5NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjQyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE1Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjFkNWQ0ZGNlMTE0ODc3OTUwODE1ZjExMzliZjgxYy5zZXRDb250ZW50KGh0bWxfZWUzYmU1OGNlZDk5NDI0OWFkNGY1ZGZkMWM5ZTMxYzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzFkNmYwMmQ0MDZmNGMzNDhhYjIzNmY4MjFkMzc1OTMuYmluZFBvcHVwKHBvcHVwXzUyMWQ1ZDRkY2UxMTQ4Nzc5NTA4MTVmMTEzOWJmODFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDJiYWZmNDRlMGU0MGNmOGM4OGVjNWRhOGRjMTMyZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NDI4MTE0MTM5NzMyNiwgLTczLjk5MjMwMDMzMTU5MjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkMmJkNjEzNjQ5MTRjOTI4NTBiYmE1MWFkNzA2OGY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzc0ZTU0YjRlZDUyNDY5M2E4YzAyZWFjZDQ3YTg5NzMgPSAkKGA8ZGl2IGlkPSJodG1sXzM3NGU1NGI0ZWQ1MjQ2OTNhOGMwMmVhY2Q0N2E4OTczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb250YWd1ZSBTdCAmIENsaW50b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkMmJkNjEzNjQ5MTRjOTI4NTBiYmE1MWFkNzA2OGY2LnNldENvbnRlbnQoaHRtbF8zNzRlNTRiNGVkNTI0NjkzYThjMDJlYWNkNDdhODk3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZDJiYWZmNDRlMGU0MGNmOGM4OGVjNWRhOGRjMTMyZC5iaW5kUG9wdXAocG9wdXBfZWQyYmQ2MTM2NDkxNGM5Mjg1MGJiYTUxYWQ3MDY4ZjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5NmNiYmRkZjdmZjQxMThhMDU2Yjg3MjI3MDUxZTI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgwMzU2MDg0MDQzMzk2LCAtNzMuOTQ3Njc5MTAyNDIwNzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYTZiNGM4OWY4ZTU0YzVkYTE3NzQzYjgxNTMzZWViMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzZThiZDFhZWE3ZjQ3NDc5NTc1ZDVkOGU4ZGIwYTZkID0gJChgPGRpdiBpZD0iaHRtbF9hM2U4YmQxYWVhN2Y0NzQ3OTU3NWQ1ZDhlOGRiMGE2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmVyb25hIFBsICYgRnVsdG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg8YnI+IG5ldCBkZXBhcnR1cmVzOiAxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhNmI0Yzg5ZjhlNTRjNWRhMTc3NDNiODE1MzNlZWIyLnNldENvbnRlbnQoaHRtbF9hM2U4YmQxYWVhN2Y0NzQ3OTU3NWQ1ZDhlOGRiMGE2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOTZjYmJkZGY3ZmY0MTE4YTA1NmI4NzIyNzA1MWUyOC5iaW5kUG9wdXAocG9wdXBfM2E2YjRjODlmOGU1NGM1ZGExNzc0M2I4MTUzM2VlYjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwMDhiMWU2YjgyNzRjMzFiZWVlMjY1OWYzOGVlYzVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2OTA5NzgwNDU5NjQ1LCAtNzMuOTgzODM3OTYyMTUwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IE5hTiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5MDcwZGVhNmRkYjQ3ZGZhZjI0NjYwODhkMGNjM2U3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTE1NDQ4ODQ3MTgwNDVjZmJhOGU4YjcwOWM2YjJlYTQgPSAkKGA8ZGl2IGlkPSJodG1sX2UxNTQ0ODg0NzE4MDQ1Y2ZiYThlOGI3MDljNmIyZWE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OWUNCUyBEZXBvdCAtIFBJVDxicj4gdG90YWwgZGVwYXJ0dXJlczogbmFuPGJyPiB0b3RhbCBhcnJpdmFsczogNDxicj4gbmV0IGRlcGFydHVyZXM6IG5hbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTkwNzBkZWE2ZGRiNDdkZmFmMjQ2NjA4OGQwY2MzZTcuc2V0Q29udGVudChodG1sX2UxNTQ0ODg0NzE4MDQ1Y2ZiYThlOGI3MDljNmIyZWE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EwMDhiMWU2YjgyNzRjMzFiZWVlMjY1OWYzOGVlYzVjLmJpbmRQb3B1cChwb3B1cF9hOTA3MGRlYTZkZGI0N2RmYWYyNDY2MDg4ZDBjYzNlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTcyNGY5MDU0MTFkNDgzN2E3NDU3ZmE4NzJhZTdiOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTA1ODUzNDcwMjE1LCAtNzMuOTk0Njg0ODE1NDA2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmEzNDU4OTYyMDcxNGFmNjg2MjE2ZWIwOGI5Y2RiYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDM2ZjdmNzMxM2I0OWU1OTE3OTAyN2Y2ZmJiY2RiZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjAzNmY3ZjczMTNiNDllNTkxNzkwMjdmNmZiYmNkYmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjggQXZlICYgVyAzMSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDI2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1MDQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA3OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTM0NTg5NjIwNzE0YWY2ODYyMTZlYjA4YjljZGJjMC5zZXRDb250ZW50KGh0bWxfMjAzNmY3ZjczMTNiNDllNTkxNzkwMjdmNmZiYmNkYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTcyNGY5MDU0MTFkNDgzN2E3NDU3ZmE4NzJhZTdiOWUuYmluZFBvcHVwKHBvcHVwXzZhMzQ1ODk2MjA3MTRhZjY4NjIxNmViMDhiOWNkYmMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzgzYjQ1MzgyNGQ0NzRkYjM0MzEwMjEwYjcyYzYyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNzcxNDA3Nzc3NzgsIC03NC4wMTEyOTU3MzU4MzYwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODdhNDYwNGM4NGQ0MjMxOGFhYzk2M2RiMjRlOGNhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAyMWFhZGZiNDBiNzRmOTk4YTllZTgwNzE4YWNlODc5ID0gJChgPGRpdiBpZD0iaHRtbF8wMjFhYWRmYjQwYjc0Zjk5OGE5ZWU4MDcxOGFjZTg3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGllciA0MCAtIEh1ZHNvbiBSaXZlciBQYXJrPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMTQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzMTxicj4gbmV0IGRlcGFydHVyZXM6IC04My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODdhNDYwNGM4NGQ0MjMxOGFhYzk2M2RiMjRlOGNhYy5zZXRDb250ZW50KGh0bWxfMDIxYWFkZmI0MGI3NGY5OThhOWVlODA3MThhY2U4NzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjc4M2I0NTM4MjRkNDc0ZGIzNDMxMDIxMGI3MmM2MjMuYmluZFBvcHVwKHBvcHVwXzI4N2E0NjA0Yzg0ZDQyMzE4YWFjOTYzZGIyNGU4Y2FjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZjQ1MWY3MTZlOTM0YWYwODYzNjE0NzlmYmUyOGEwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MDE4MTU2MzI1NjgyNCwgLTc0LjAwMjE4NDI3MTgxMjQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTEuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Zjc2YjQ2YTdkMjM0YzcwYTUxYjAyMjk1NWUzODEzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1OWJkMjdkNmY2MDQzMDI4MTVkNzljZGFlZmM3NTBkID0gJChgPGRpdiBpZD0iaHRtbF85NTliZDI3ZDZmNjA0MzAyODE1ZDc5Y2RhZWZjNzUwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyNyBTdCAmIDEwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTQ2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMTc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmNzZiNDZhN2QyMzRjNzBhNTFiMDIyOTU1ZTM4MTNlLnNldENvbnRlbnQoaHRtbF85NTliZDI3ZDZmNjA0MzAyODE1ZDc5Y2RhZWZjNzUwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZjQ1MWY3MTZlOTM0YWYwODYzNjE0NzlmYmUyOGEwNi5iaW5kUG9wdXAocG9wdXBfNmY3NmI0NmE3ZDIzNGM3MGE1MWIwMjI5NTVlMzgxM2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjNzA0NTFmNmQ2NDQ2ZGU5ZjY5MTRjOTQ0MTY2ZjU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MzcwMjQxOTMyNzcsIC03My45OTkyMzM4NDE4OTYwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTYuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwYzgzNjk0MjA3YjRmNjg4MTViN2RkOGMxMDJiMzk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQ4YTljYzQ1MGM2NGFiZTk0MDdmZjI4YjA4ODg1OTQgPSAkKGA8ZGl2IGlkPSJodG1sXzU0OGE5Y2M0NTBjNjRhYmU5NDA3ZmYyOGIwODg4NTk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij45IEF2ZSAmIFcgMjggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMzNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTEzMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMGM4MzY5NDIwN2I0ZjY4ODE1YjdkZDhjMTAyYjM5OC5zZXRDb250ZW50KGh0bWxfNTQ4YTljYzQ1MGM2NGFiZTk0MDdmZjI4YjA4ODg1OTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGM3MDQ1MWY2ZDY0NDZkZTlmNjkxNGM5NDQxNjZmNTQuYmluZFBvcHVwKHBvcHVwX2MwYzgzNjk0MjA3YjRmNjg4MTViN2RkOGMxMDJiMzk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMGRkNzVjYWE0NTI0MjMwOTBlNGMzZmVhYTViZDE2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNzA2MzYzMzQ4MzA2LCAtNzMuOTk2NjIxMzcwMzE1NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDk1Y2MzZDM3MDcxNGVjYWEzMmIyM2ZlNjJlY2EwMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NGVjNzVmYzAyOWM0NjVkOTE2ZTAwMWFhNTIxNjMyOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDRlYzc1ZmMwMjljNDY1ZDkxNmUwMDFhYTUyMTYzMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1lcmNlciBTdCAmIEJsZWVja2VyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDMwMTxicj4gbmV0IGRlcGFydHVyZXM6IC01Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OTVjYzNkMzcwNzE0ZWNhYTMyYjIzZmU2MmVjYTAzNi5zZXRDb250ZW50KGh0bWxfNDRlYzc1ZmMwMjljNDY1ZDkxNmUwMDFhYTUyMTYzMjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjBkZDc1Y2FhNDUyNDIzMDkwZTRjM2ZlYWE1YmQxNjguYmluZFBvcHVwKHBvcHVwXzQ5NWNjM2QzNzA3MTRlY2FhMzJiMjNmZTYyZWNhMDM2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YmRiZGJlMGQ3NmI0ZTk0OTE5MTcyNzYxY2MyMzZiOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyOTIzNjQ5OTEwMDA2LCAtNzMuOTkwODY4MDMxOTc4NjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYzQzNzkzN2RkZDE0Y2MzYWQyNjRhY2Q4ODNjYjBkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc3N2RkNGRiZTUzMjRjOTg4ZjE2NTBlMWU1MTE1ZjNiID0gJChgPGRpdiBpZD0iaHRtbF83NzdkZDRkYmU1MzI0Yzk4OGYxNjUwZTFlNTExNWYzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29vcGVyIFNxdWFyZSAmIEUgNyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTAwOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTEwNjxicj4gbmV0IGRlcGFydHVyZXM6IDk3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBjNDM3OTM3ZGRkMTRjYzNhZDI2NGFjZDg4M2NiMGQ4LnNldENvbnRlbnQoaHRtbF83NzdkZDRkYmU1MzI0Yzk4OGYxNjUwZTFlNTExNWYzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YmRiZGJlMGQ3NmI0ZTk0OTE5MTcyNzYxY2MyMzZiOC5iaW5kUG9wdXAocG9wdXBfMGM0Mzc5MzdkZGQxNGNjM2FkMjY0YWNkODgzY2IwZDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3NjllZjgxZWYxMTQ5YmNiZTdhNmYxZDcxZThlOWNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY0MjEwMDcxNjkwNjQsIC03My45NjkxMDQ1ODgwMzE3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjlkZGYyZDQ4Mjc0ZmE1OGMyZThkMDkxNGI1YjFmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxMDE4YmJhNWQ0NzQyZGU4ZDA1ZmVjZGQwYjQ0N2JjID0gJChgPGRpdiBpZD0iaHRtbF8yMTAxOGJiYTVkNDc0MmRlOGQwNWZlY2RkMGI0NDdiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA2MSBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTc5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyOWRkZjJkNDgyNzRmYTU4YzJlOGQwOTE0YjViMWZjLnNldENvbnRlbnQoaHRtbF8yMTAxOGJiYTVkNDc0MmRlOGQwNWZlY2RkMGI0NDdiYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNzY5ZWY4MWVmMTE0OWJjYmU3YTZmMWQ3MWU4ZTljZi5iaW5kUG9wdXAocG9wdXBfNTI5ZGRmMmQ0ODI3NGZhNThjMmU4ZDA5MTRiNWIxZmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2YWMwYmQyMGE0ZjQxYjk5NzUxNDY2OWQxMjMxMTgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI0NTYzNDI5MDQzMiwgLTczLjk4OTQ0Mzc3ODk5MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNDBlNDIxMjBiZTM0NzhjYWY2OWNkOTYyY2MxNWNmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzMTMxNGQzYTliYjRlMGM4ZWEwMWY4M2IzZDRlZjUwID0gJChgPGRpdiBpZD0iaHRtbF85MzEzMTRkM2E5YmI0ZTBjOGVhMDFmODNiM2Q0ZWY1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAyIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA4PGJyPiBuZXQgZGVwYXJ0dXJlczogODkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjQwZTQyMTIwYmUzNDc4Y2FmNjljZDk2MmNjMTVjZjQuc2V0Q29udGVudChodG1sXzkzMTMxNGQzYTliYjRlMGM4ZWEwMWY4M2IzZDRlZjUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2YWMwYmQyMGE0ZjQxYjk5NzUxNDY2OWQxMjMxMTgxLmJpbmRQb3B1cChwb3B1cF9iNDBlNDIxMjBiZTM0NzhjYWY2OWNkOTYyY2MxNWNmNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDZlNWE3ZWM2MDI1NGZhM2I5ODA0MjQ1MTVmZmEzNzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODMwNywgLTczLjk1OTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyNjQ3MjkxN2RjYzQzZTg4ZDkyMzc0MzFiZGE5NTkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzg3NzQ2NjlmMjc1NDE4NGFlOWE2MjU3MGRmNjNkZGIgPSAkKGA8ZGl2IGlkPSJodG1sXzM4Nzc0NjY5ZjI3NTQxODRhZTlhNjI1NzBkZjYzZGRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41IEF2ZSAmIEUgODggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTcwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTQxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YyNjQ3MjkxN2RjYzQzZTg4ZDkyMzc0MzFiZGE5NTkwLnNldENvbnRlbnQoaHRtbF8zODc3NDY2OWYyNzU0MTg0YWU5YTYyNTcwZGY2M2RkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NmU1YTdlYzYwMjU0ZmEzYjk4MDQyNDUxNWZmYTM3OC5iaW5kUG9wdXAocG9wdXBfZjI2NDcyOTE3ZGNjNDNlODhkOTIzNzQzMWJkYTk1OTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1MTg2NjZiZjBkODQ0ZDFhMmU5NGMzYmMxMWJkMGE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg4MjIxMywgLTczLjk3MDQxNTYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YWNhZTYxNjlhYmU0NzBlYTNiZTg1ZGJmNjBhNjliNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2OGI1ZGNmM2VjNzQxMDY5ODEzZDk3Yjc1MDg1Mzg5ID0gJChgPGRpdiBpZD0iaHRtbF80NjhiNWRjZjNlYzc0MTA2OTgxM2Q5N2I3NTA4NTM4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA4OSBTdCAmIENvbHVtYnVzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ5PGJyPiBuZXQgZGVwYXJ0dXJlczogMTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmFjYWU2MTY5YWJlNDcwZWEzYmU4NWRiZjYwYTY5YjUuc2V0Q29udGVudChodG1sXzQ2OGI1ZGNmM2VjNzQxMDY5ODEzZDk3Yjc1MDg1Mzg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1MTg2NjZiZjBkODQ0ZDFhMmU5NGMzYmMxMWJkMGE1LmJpbmRQb3B1cChwb3B1cF82YWNhZTYxNjlhYmU0NzBlYTNiZTg1ZGJmNjBhNjliNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTEyMTllZThlZDU0NGU3Y2E1YWQ5M2IyM2ZlYTA2YjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODE0MTA3MDAxOTAwMTUsIC03My45NTU5NTkwODE2NDk3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5MzU5YWY3MDA4YjRhZjRhYmY2NDdlODJhZjZkN2ExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWM5MWVmYjMxODU3NGZmN2E2ZTdhZTM4MWVmZmJiODMgPSAkKGA8ZGl2IGlkPSJodG1sXzVjOTFlZmIzMTg1NzRmZjdhNmU3YWUzODFlZmZiYjgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg4IFN0ICYgUGFyayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA5MTxicj4gbmV0IGRlcGFydHVyZXM6IDU5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5MzU5YWY3MDA4YjRhZjRhYmY2NDdlODJhZjZkN2ExLnNldENvbnRlbnQoaHRtbF81YzkxZWZiMzE4NTc0ZmY3YTZlN2FlMzgxZWZmYmI4Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMTIxOWVlOGVkNTQ0ZTdjYTVhZDkzYjIzZmVhMDZiMS5iaW5kUG9wdXAocG9wdXBfMzkzNTlhZjcwMDhiNGFmNGFiZjY0N2U4MmFmNmQ3YTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1NWQ5ODEwMDk3YTRlNjVhYTQyZTYwODEzYzU1NDIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg4MzksIC03My45NzQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NWE2MjNjOWQzYzg0ZGExYTk3MDNkOWUyMWM3MmYzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwZjU4ZGEwMGU2OTRlZGE5NTljNTUzNGFkNzc0ODZiID0gJChgPGRpdiBpZD0iaHRtbF83MGY1OGRhMDBlNjk0ZWRhOTU5YzU1MzRhZDc3NDg2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA4NyBTdCAgJiBBbXN0ZXJkYW0gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTM0PGJyPiBuZXQgZGVwYXJ0dXJlczogNjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDVhNjIzYzlkM2M4NGRhMWE5NzAzZDllMjFjNzJmMzQuc2V0Q29udGVudChodG1sXzcwZjU4ZGEwMGU2OTRlZGE5NTljNTUzNGFkNzc0ODZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM1NWQ5ODEwMDk3YTRlNjVhYTQyZTYwODEzYzU1NDIxLmJpbmRQb3B1cChwb3B1cF80NWE2MjNjOWQzYzg0ZGExYTk3MDNkOWUyMWM3MmYzNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGQyNzY4MTdiMDZiNGE4ZWExY2U3ZGI3NTU3ZmQ2ZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODA2Mjg0LCAtNzMuOTUyMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlOGFmMmI5ZGI5MTRkZTVhNzUwYjllZWY1NWQ1MTkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWM5ZjllNGQ1NzlhNDMwZWE2Y2E3NGJlMzE1ZTk5ZjQgPSAkKGA8ZGl2IGlkPSJodG1sXzFjOWY5ZTRkNTc5YTQzMGVhNmNhNzRiZTMxNWU5OWY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg5IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA5Mzxicj4gbmV0IGRlcGFydHVyZXM6IDM5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlOGFmMmI5ZGI5MTRkZTVhNzUwYjllZWY1NWQ1MTkzLnNldENvbnRlbnQoaHRtbF8xYzlmOWU0ZDU3OWE0MzBlYTZjYTc0YmUzMTVlOTlmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZDI3NjgxN2IwNmI0YThlYTFjZTdkYjc1NTdmZDZlYS5iaW5kUG9wdXAocG9wdXBfN2U4YWYyYjlkYjkxNGRlNWE3NTBiOWVlZjU1ZDUxOTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4YzYwMGU2ZWIyNjRmMGY4MWQzZTUxZjZhNjRhYzNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc4MzAxLCAtNzMuOTQ4ODEzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2MWEzMjFiMDZkMDQ5NzI4MWQ2MWM3Zjg1ZTcyNjQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJlZjMzMzhkM2RhNDY3YTkwNDc3ODFhNThmZmY3MjUgPSAkKGA8ZGl2IGlkPSJodG1sXzMyZWYzMzM4ZDNkYTQ2N2E5MDQ3NzgxYTU4ZmZmNzI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg4IFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTg8YnI+IG5ldCBkZXBhcnR1cmVzOiA5NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjFhMzIxYjA2ZDA0OTcyODFkNjFjN2Y4NWU3MjY0NS5zZXRDb250ZW50KGh0bWxfMzJlZjMzMzhkM2RhNDY3YTkwNDc3ODFhNThmZmY3MjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMThjNjAwZTZlYjI2NGYwZjgxZDNlNTFmNmE2NGFjM2YuYmluZFBvcHVwKHBvcHVwXzM2MWEzMjFiMDZkMDQ5NzI4MWQ2MWM3Zjg1ZTcyNjQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMjkxZTdmYzk5ODE0YTNlODJmZGEzZjM2ZWI2NDljYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MDE3OTQ4MDk1MDgxLCAtNzMuOTcyODg5MTg0OTUxNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4OTM4OGZlZWI0ODRjYzk4NjJmMzMxOTUxNDU4Yzk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmNjYmZmNmIzNzAzNGNkYzkxZDIyYzMwYTA4YTVmMTUgPSAkKGA8ZGl2IGlkPSJodG1sX2JjY2JmZjZiMzcwMzRjZGM5MWQyMmMzMGEwOGE1ZjE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDkwIFN0ICYgQW1zdGVyZGFtIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY2PGJyPiBuZXQgZGVwYXJ0dXJlczogNTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTg5Mzg4ZmVlYjQ4NGNjOTg2MmYzMzE5NTE0NThjOTYuc2V0Q29udGVudChodG1sX2JjY2JmZjZiMzcwMzRjZGM5MWQyMmMzMGEwOGE1ZjE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MyOTFlN2ZjOTk4MTRhM2U4MmZkYTNmMzZlYjY0OWNiLmJpbmRQb3B1cChwb3B1cF9hODkzODhmZWViNDg0Y2M5ODYyZjMzMTk1MTQ1OGM5NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDZhZTE1MWNmZDhkNGFlOTlkZGMzNmMyZjNmZTIyODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Nzc5NDUzLCAtNzMuOTQ2MDQxMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhNTcxMWVhMzIyMjQ3YjdhNzU1MmYxM2Q1ZWJlY2QwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTg1ODRlMTA4YzI5NDQ1MWI1MDYyMDE4NzRiODllZmEgPSAkKGA8ZGl2IGlkPSJodG1sX2U4NTg0ZTEwOGMyOTQ0NTFiNTA2MjAxODc0Yjg5ZWZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg5IFN0ICYgWW9yayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA5Mjxicj4gbmV0IGRlcGFydHVyZXM6IDYyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhNTcxMWVhMzIyMjQ3YjdhNzU1MmYxM2Q1ZWJlY2QwLnNldENvbnRlbnQoaHRtbF9lODU4NGUxMDhjMjk0NDUxYjUwNjIwMTg3NGI4OWVmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNmFlMTUxY2ZkOGQ0YWU5OWRkYzM2YzJmM2ZlMjI4My5iaW5kUG9wdXAocG9wdXBfZGE1NzExZWEzMjIyNDdiN2E3NTUyZjEzZDVlYmVjZDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1YzM2YTAzNzRmYTQ3NTZhNmNjMjZjNDQzODdkOTE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg1Nzg1MTAwMDAwMDA1LCAtNzMuOTU3NDgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2E4YjJhZTM1ODE2NDU1NTlmMDVlOGIxODBhNWIwNDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOWNlNjE5MzI4ZDg0ZmZlYjI2Mjc1NmRkNTg0YWFjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjljZTYxOTMyOGQ4NGZmZWIyNjI3NTZkZDU4NGFhY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjUgQXZlICYgRSA5MyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwODxicj4gbmV0IGRlcGFydHVyZXM6IDQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhOGIyYWUzNTgxNjQ1NTU5ZjA1ZThiMTgwYTViMDQxLnNldENvbnRlbnQoaHRtbF9iOWNlNjE5MzI4ZDg0ZmZlYjI2Mjc1NmRkNTg0YWFjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NWMzNmEwMzc0ZmE0NzU2YTZjYzI2YzQ0Mzg3ZDkxNy5iaW5kUG9wdXAocG9wdXBfN2E4YjJhZTM1ODE2NDU1NTlmMDVlOGIxODBhNWIwNDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkNjVkZmVmYzAzNjRmYTQ5ZDhiMDRkM2MzNzNjOGUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkyMSwgLTczLjk3MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5ZWZlM2U0YmRhNjQ0YTliZDJiNjU4NmNlMDgzNzg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTFhNDdhZmRjYzlmNDVhZGE4NmNjYjA4NzU2NDdiMTcgPSAkKGA8ZGl2IGlkPSJodG1sX2ExYTQ3YWZkY2M5ZjQ1YWRhODZjY2IwODc1NjQ3YjE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDkyIFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAyOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOWVmZTNlNGJkYTY0NGE5YmQyYjY1ODZjZTA4Mzc4OC5zZXRDb250ZW50KGh0bWxfYTFhNDdhZmRjYzlmNDVhZGE4NmNjYjA4NzU2NDdiMTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmQ2NWRmZWZjMDM2NGZhNDlkOGIwNGQzYzM3M2M4ZTEuYmluZFBvcHVwKHBvcHVwX2U5ZWZlM2U0YmRhNjQ0YTliZDJiNjU4NmNlMDgzNzg4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMzA5YTI4MGYzZjM0Mjc4ODRlNjAxYzg2NmU0M2M0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MzUwMTYsIC03My45NTUzMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhMDQ0NmEwMTkzNzQ1NGNiNzM1YTQ5ZWEwZjVkM2Y3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJhZGMzZDhiMDE1NDNjYjlhNTkyZTU1YjE5YmExM2QgPSAkKGA8ZGl2IGlkPSJodG1sXzMyYWRjM2Q4YjAxNTQzY2I5YTU5MmU1NWIxOWJhMTNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDkxIFN0ICYgUGFyayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3NTxicj4gbmV0IGRlcGFydHVyZXM6IDI4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhMDQ0NmEwMTkzNzQ1NGNiNzM1YTQ5ZWEwZjVkM2Y3LnNldENvbnRlbnQoaHRtbF8zMmFkYzNkOGIwMTU0M2NiOWE1OTJlNTViMTliYTEzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMzA5YTI4MGYzZjM0Mjc4ODRlNjAxYzg2NmU0M2M0Ny5iaW5kUG9wdXAocG9wdXBfNGEwNDQ2YTAxOTM3NDU0Y2I3MzVhNDllYTBmNWQzZjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4MjhhMzBlMTE3MDQ4NDdiZjliYWVkZmRhMDE4YjlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkxMjcwMDAwMDAwMDA0LCAtNzMuOTY0ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA3ZTRjYzg5MmY0NDRhMDhjYzQyZDJlYTIzOTM0YTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZGRiY2Q3YWQ2Zjg0OTExODM1NDIxNTkyOTI3NDQ3NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMmRkYmNkN2FkNmY4NDkxMTgzNTQyMTU5MjkyNzQ0NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWwgUGFyayBXICYgVyA5NiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTAzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTA8YnI+IG5ldCBkZXBhcnR1cmVzOiA0Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDdlNGNjODkyZjQ0NGEwOGNjNDJkMmVhMjM5MzRhNS5zZXRDb250ZW50KGh0bWxfMmRkYmNkN2FkNmY4NDkxMTgzNTQyMTU5MjkyNzQ0NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTgyOGEzMGUxMTcwNDg0N2JmOWJhZWRmZGEwMThiOWYuYmluZFBvcHVwKHBvcHVwXzkwN2U0Y2M4OTJmNDQ0YTA4Y2M0MmQyZWEyMzkzNGE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NDYwOTI3Y2M2ZWI0YmM0YTBjNDA1ODAyNTgyZTg3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2ODY2MjcwMDAwMDAwNiwgLTczLjk3OTg4MDY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzVkNGU4ZDY5YTNlNGU2YmEzOGEzYWM0YjRiZjRmMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNmU1YmYyZmE1MGM0NTM0OTFhYjk3YTFjZjY5NWEyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzZlNWJmMmZhNTBjNDUzNDkxYWI5N2ExY2Y2OTVhMjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjYgU3QgJiA3IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxPGJyPiBuZXQgZGVwYXJ0dXJlczogOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNWQ0ZThkNjlhM2U0ZTZiYTM4YTNhYzRiNGJmNGYwYS5zZXRDb250ZW50KGh0bWxfMzZlNWJmMmZhNTBjNDUzNDkxYWI5N2ExY2Y2OTVhMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQ2MDkyN2NjNmViNGJjNGEwYzQwNTgwMjU4MmU4N2QuYmluZFBvcHVwKHBvcHVwX2M1ZDRlOGQ2OWEzZTRlNmJhMzhhM2FjNGI0YmY0ZjBhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOGY3Y2YwNTY1MDM0OTU1OGExZTNhMDFhOWI5ZjRhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NjM3MSwgLTczLjk5MzgzMzI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2M2ZWU4MDNmZDJlNGE4ZDhiZTYxMmIzZGU0MjgyODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NjQ0YzIwODViNWQ0YWMzOGYwZTU2NmJmYTlkMmVjOSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjY0NGMyMDg1YjVkNGFjMzhmMGU1NjZiZmE5ZDJlYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhcnJlbiBTdCAmIENvdXJ0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjk8YnI+IG5ldCBkZXBhcnR1cmVzOiA0My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYzZlZTgwM2ZkMmU0YThkOGJlNjEyYjNkZTQyODI4Ni5zZXRDb250ZW50KGh0bWxfNjY0NGMyMDg1YjVkNGFjMzhmMGU1NjZiZmE5ZDJlYzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMThmN2NmMDU2NTAzNDk1NThhMWUzYTAxYTliOWY0YTguYmluZFBvcHVwKHBvcHVwX2NjNmVlODAzZmQyZTRhOGQ4YmU2MTJiM2RlNDI4Mjg2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOGI3ZTEwYzkxYzg0YWMyYThmMWExOTliZmFjNTAxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2NTE0NjgxNTMzNzkyLCAtNzMuOTc2Mzc2MDU2NjcxMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NTJmODg3Y2ZkYmY0ZTllYWEzN2JkN2ZhM2Q0OGQwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5MzIzMGQ5MWY0ZTQwMGRhMDFkYzZhNjNhZWU5NjJlID0gJChgPGRpdiBpZD0iaHRtbF9jOTMyMzBkOTFmNGU0MDBkYTAxZGM2YTYzYWVlOTYyZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHJvc3BlY3QgUGFyayBXZXN0ICYgOCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU3PGJyPiBuZXQgZGVwYXJ0dXJlczogMjMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODUyZjg4N2NmZGJmNGU5ZWFhMzdiZDdmYTNkNDhkMDEuc2V0Q29udGVudChodG1sX2M5MzIzMGQ5MWY0ZTQwMGRhMDFkYzZhNjNhZWU5NjJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4YjdlMTBjOTFjODRhYzJhOGYxYTE5OWJmYWM1MDFhLmJpbmRQb3B1cChwb3B1cF84NTJmODg3Y2ZkYmY0ZTllYWEzN2JkN2ZhM2Q0OGQwMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTcyM2UxYjBlMDE4NGNkNjg5ZmZjY2UzZTYwODJlOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTE5NTU3LCAtNzMuOTY4MDg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTI1MjFiM2E3ZTE0MTA2YmQ4MjU0ZjMxMzQwZTcxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4NGRjODUyYmRiOTQyMjhiNWY5MjM3NTUzMjExZGU1ID0gJChgPGRpdiBpZD0iaHRtbF8zODRkYzg1MmJkYjk0MjI4YjVmOTIzNzU1MzIxMWRlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1idXMgQXZlICYgVyA5NSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODguMDxicj4gdG90YWwgYXJyaXZhbHM6IDkwPGJyPiBuZXQgZGVwYXJ0dXJlczogMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTI1MjFiM2E3ZTE0MTA2YmQ4MjU0ZjMxMzQwZTcxMy5zZXRDb250ZW50KGh0bWxfMzg0ZGM4NTJiZGI5NDIyOGI1ZjkyMzc1NTMyMTFkZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTcyM2UxYjBlMDE4NGNkNjg5ZmZjY2UzZTYwODJlOGQuYmluZFBvcHVwKHBvcHVwXzAxMjUyMWIzYTdlMTQxMDZiZDgyNTRmMzEzNDBlNzEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDZlZTZiY2E0Njg0Njc1OGE2MmJkZWI3NWM3MDA5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5NjkzNDcsIC03My45NjQzNDEyMjkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTA0YTliNGUxZjk4NGEyZmJkOGMyNzBiNGExZGMxNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMzE2MGU3M2NjYzg0MzBiOGUzYTk5N2E0OTc1YTM5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTMxNjBlNzNjY2M4NDMwYjhlM2E5OTdhNDk3NWEzOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbHVtYnVzIEF2ZSAmIFcgMTAzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMTxicj4gbmV0IGRlcGFydHVyZXM6IDE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UwNGE5YjRlMWY5ODRhMmZiZDhjMjcwYjRhMWRjMTc1LnNldENvbnRlbnQoaHRtbF9hMzE2MGU3M2NjYzg0MzBiOGUzYTk5N2E0OTc1YTM5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDZlZTZiY2E0Njg0Njc1OGE2MmJkZWI3NWM3MDA5OC5iaW5kUG9wdXAocG9wdXBfZTA0YTliNGUxZjk4NGEyZmJkOGMyNzBiNGExZGMxNzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwZjFmMDY0Y2NhYTQyOTA4ZjU5ZmFmNmI2YTdiYmFhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg0OTg5NCwgLTczLjk5NDQwMzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODQ2ODFkNzZjZGI2NDY4MmJkZjRhYTFkZDYyY2IwZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mODQzMWI4MjVmOWM0ZTQxYjE2ZTE2NTFiMDdhNzQ5YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjg0MzFiODI1ZjljNGU0MWIxNmUxNjUxYjA3YTc0OWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJ1dGxlciBTdCAmIENvdXJ0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjE8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NDY4MWQ3NmNkYjY0NjgyYmRmNGFhMWRkNjJjYjBlYS5zZXRDb250ZW50KGh0bWxfZjg0MzFiODI1ZjljNGU0MWIxNmUxNjUxYjA3YTc0OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjBmMWYwNjRjY2FhNDI5MDhmNTlmYWY2YjZhN2JiYWEuYmluZFBvcHVwKHBvcHVwXzg0NjgxZDc2Y2RiNjQ2ODJiZGY0YWExZGQ2MmNiMGVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZGEwZDFmNWJjNjQ0NDllODRhNWRkMGY3YWE4YThkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2ODEyNywgLTczLjk4Mzc3NjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODc5NjFiMTczOWExNDNmY2FjZmNiY2VkMDgxMzdkMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTI4N2Q4OTI0NGE0YTAwYThiYzIwYjk0ZTk1N2Y4MiA9ICQoYDxkaXYgaWQ9Imh0bWxfN2UyODdkODkyNDRhNGEwMGE4YmMyMGI5NGU5NTdmODIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjYgQXZlICYgOSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY5PGJyPiBuZXQgZGVwYXJ0dXJlczogMzUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc5NjFiMTczOWExNDNmY2FjZmNiY2VkMDgxMzdkMDIuc2V0Q29udGVudChodG1sXzdlMjg3ZDg5MjQ0YTRhMDBhOGJjMjBiOTRlOTU3ZjgyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FkYTBkMWY1YmM2NDQ0OWU4NGE1ZGQwZjdhYThhOGRjLmJpbmRQb3B1cChwb3B1cF84Nzk2MWIxNzM5YTE0M2ZjYWNmY2JjZWQwODEzN2QwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjNhYjUwMzIzNzE1NDQyM2E2ODRhMmU5NzFjNjE3NDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODExMjIyOTkzNDE2NTQsIC03My45NDk2NTU4OTA0NjQ3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTU1MTI3MWNmMzhhNDBkOWFhY2M4OTdjNWRiYWFlYzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Yjk5ZDc1ZmFjMmY0NzZkOGVjZjZjOWEyMmUzZDRjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2I5OWQ3NWZhYzJmNDc2ZDhlY2Y2YzlhMjJlM2Q0Y2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgOTEgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE0NDxicj4gbmV0IGRlcGFydHVyZXM6IDgwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1NTEyNzFjZjM4YTQwZDlhYWNjODk3YzVkYmFhZWM4LnNldENvbnRlbnQoaHRtbF83Yjk5ZDc1ZmFjMmY0NzZkOGVjZjZjOWEyMmUzZDRjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82M2FiNTAzMjM3MTU0NDIzYTY4NGEyZTk3MWM2MTc0Ny5iaW5kUG9wdXAocG9wdXBfYTU1MTI3MWNmMzhhNDBkOWFhY2M4OTdjNWRiYWFlYzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmZTdiYTE3NTIyNzQ0YjI5MDhiYzQ0YzZiY2E1MThjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY2MjA3Nzk5OTk5OTk1LCAtNzMuOTgxOTk4ODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2MTdhOTUwNzM1ZDRlZjc5OGQ2NzgwZDUyZDBhMmQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWE3MjE2M2Y2ZWQ4NDIzZGE1ZGE2NjkwZDdmOTI2YjUgPSAkKGA8ZGl2IGlkPSJodG1sXzlhNzIxNjNmNmVkODQyM2RhNWRhNjY5MGQ3ZjkyNmI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xMCBTdCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjE3YTk1MDczNWQ0ZWY3OThkNjc4MGQ1MmQwYTJkMy5zZXRDb250ZW50KGh0bWxfOWE3MjE2M2Y2ZWQ4NDIzZGE1ZGE2NjkwZDdmOTI2YjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZlN2JhMTc1MjI3NDRiMjkwOGJjNDRjNmJjYTUxOGMuYmluZFBvcHVwKHBvcHVwXzY2MTdhOTUwNzM1ZDRlZjc5OGQ2NzgwZDUyZDBhMmQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80Njk1NDEwY2MyMGY0OWQyYjEyYjhjMzAwYTNkYTI3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5NDE2NTQsIC03My45NzQxMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYTljZDIyZTgyMjM0M2RlYjY2MjEwODFlNTU4NTAzNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyM2JmOTE2ODQ4MDQ3ZjhiOGRhNjM1OGNjMjE1OWVmID0gJChgPGRpdiBpZD0iaHRtbF84MjNiZjkxNjg0ODA0N2Y4YjhkYTYzNThjYzIxNTllZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VzdCBFbmQgQXZlICYgVyA5NCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkwPGJyPiBuZXQgZGVwYXJ0dXJlczogMzcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWE5Y2QyMmU4MjIzNDNkZWI2NjIxMDgxZTU1ODUwMzQuc2V0Q29udGVudChodG1sXzgyM2JmOTE2ODQ4MDQ3ZjhiOGRhNjM1OGNjMjE1OWVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ2OTU0MTBjYzIwZjQ5ZDJiMTJiOGMzMDBhM2RhMjdhLmJpbmRQb3B1cChwb3B1cF8xYTljZDIyZTgyMjM0M2RlYjY2MjEwODFlNTU4NTAzNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmJmNGMxYzZmZDBiNDEzYTlkMjcyYjNmMTg1MDcyZjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODYxNzU3OTk5OTk5OTQsIC03My45OTY0NTI5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzJmY2UyMzZmMjVlNDE0YzlkYTY2Njk0ZDY5NTNkNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNDY4MDZkZjU0NzU0ZmQxODgyMTExZDk0YzkyYjI5MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDQ2ODA2ZGY1NDc1NGZkMTg4MjExMWQ5NGM5MmIyOTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkthbmUgU3QgJiBDbGludG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAzOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMmZjZTIzNmYyNWU0MTRjOWRhNjY2OTRkNjk1M2Q2My5zZXRDb250ZW50KGh0bWxfZDQ2ODA2ZGY1NDc1NGZkMTg4MjExMWQ5NGM5MmIyOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmJmNGMxYzZmZDBiNDEzYTlkMjcyYjNmMTg1MDcyZjUuYmluZFBvcHVwKHBvcHVwXzMyZmNlMjM2ZjI1ZTQxNGM5ZGE2NjY5NGQ2OTUzZDYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xOTViZjA1Yzc3MGI0Yzg2OTg0OWJjZDQ5YmMzOTcwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NTkyMDEsIC03My45NDg2MDI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzFlNTBhNDAxYTllNGZhNDkxODg1MjBmODNjZDI4MzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZWY0YmQ5ZjA5Mjk0MDA0Yjk2YmM4NGI0ZjU1YTc0ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfYmVmNGJkOWYwOTI5NDAwNGI5NmJjODRiNGY1NWE3NGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgOTcgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM0PGJyPiBuZXQgZGVwYXJ0dXJlczogMTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzFlNTBhNDAxYTllNGZhNDkxODg1MjBmODNjZDI4Mzkuc2V0Q29udGVudChodG1sX2JlZjRiZDlmMDkyOTQwMDRiOTZiYzg0YjRmNTVhNzRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE5NWJmMDVjNzcwYjRjODY5ODQ5YmNkNDliYzM5NzA4LmJpbmRQb3B1cChwb3B1cF9jMWU1MGE0MDFhOWU0ZmE0OTE4ODUyMGY4M2NkMjgzOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDU3OWE2ZmJkMjdiNDg3OGFjZDA1NTQ5ZjQ1ZTUwNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjM3NzksIC03My45ODM5Njg0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhMzQ3YmZiM2FjMTQyZmQ4N2E5YWJhNzBhYWEwNTVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWIwYTU1YzVhZjI3NGUwODhiODUwODY1ODRmYzU3OWQgPSAkKGA8ZGl2IGlkPSJodG1sXzViMGE1NWM1YWYyNzRlMDg4Yjg1MDg2NTg0ZmM1NzlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xNCBTdCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTM0N2JmYjNhYzE0MmZkODdhOWFiYTcwYWFhMDU1YS5zZXRDb250ZW50KGh0bWxfNWIwYTU1YzVhZjI3NGUwODhiODUwODY1ODRmYzU3OWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDU3OWE2ZmJkMjdiNDg3OGFjZDA1NTQ5ZjQ1ZTUwNmIuYmluZFBvcHVwKHBvcHVwXzJhMzQ3YmZiM2FjMTQyZmQ4N2E5YWJhNzBhYWEwNTVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZGFjMTJmYjk2NWI0NDJlOGYxN2Q3NWJmNTRjMzdlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NzYzMTU1LCAtNzQuMDAxNjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5ZWFkYjAxMjY4NTQwNzNhZDI1ODI4Yzk1NDIzMzA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDJmYzE2NTUwY2FmNGJhY2FkN2YxZDFiMTQxMTcxMjkgPSAkKGA8ZGl2IGlkPSJodG1sX2QyZmMxNjU1MGNhZjRiYWNhZDdmMWQxYjE0MTE3MTI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2x1bWJpYSBTdCAmIEthbmUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA4OTxicj4gbmV0IGRlcGFydHVyZXM6IDU5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5ZWFkYjAxMjY4NTQwNzNhZDI1ODI4Yzk1NDIzMzA1LnNldENvbnRlbnQoaHRtbF9kMmZjMTY1NTBjYWY0YmFjYWQ3ZjFkMWIxNDExNzEyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZGFjMTJmYjk2NWI0NDJlOGYxN2Q3NWJmNTRjMzdlMy5iaW5kUG9wdXAocG9wdXBfMTllYWRiMDEyNjg1NDA3M2FkMjU4MjhjOTU0MjMzMDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxMzg2YTE0ZGQ4NjRmNjhiY2I2OTUxMzJmZmFhNmU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzgxNzIxMjAwMDAwMDEsIC03My45NDU5NDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2Q3NDUyOTgyNzk2NGZlZGJhNjJkZTM3MjlkMDIwZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWFhZGFmZDQ2Nzc0ODI2YTViNzVhZTZhODMyMjlhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjlhYWRhZmQ0Njc3NDgyNmE1Yjc1YWU2YTgzMjI5YTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEgQXZlICYgRSA5NCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3Mjxicj4gbmV0IGRlcGFydHVyZXM6IDExNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZDc0NTI5ODI3OTY0ZmVkYmE2MmRlMzcyOWQwMjBmMS5zZXRDb250ZW50KGh0bWxfZjlhYWRhZmQ0Njc3NDgyNmE1Yjc1YWU2YTgzMjI5YTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjEzODZhMTRkZDg2NGY2OGJjYjY5NTEzMmZmYWE2ZTQuYmluZFBvcHVwKHBvcHVwXzdkNzQ1Mjk4Mjc5NjRmZWRiYTYyZGUzNzI5ZDAyMGYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kM2NkYjI4NTg1M2E0ZWUxODE2MDkwZjMzNjI0ODRmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2NjMxODEwMDAwMDAwNSwgLTczLjk4NTQ2MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1NWVlNTRhZDE2YzRmNDU5NTU4Y2FiN2M2NmM1Yjg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk3Zjk4YjE3OWI5NDJlM2IwZjg2Yzg2ODRiYWVlYmEgPSAkKGA8ZGl2IGlkPSJodG1sXzA5N2Y5OGIxNzliOTQyZTNiMGY4NmM4Njg0YmFlZWJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42IEF2ZSAmIDEyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjE8YnI+IG5ldCBkZXBhcnR1cmVzOiA1MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTVlZTU0YWQxNmM0ZjQ1OTU1OGNhYjdjNjZjNWI4NC5zZXRDb250ZW50KGh0bWxfMDk3Zjk4YjE3OWI5NDJlM2IwZjg2Yzg2ODRiYWVlYmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDNjZGIyODU4NTNhNGVlMTgxNjA5MGYzMzYyNDg0ZjguYmluZFBvcHVwKHBvcHVwXzY1NWVlNTRhZDE2YzRmNDU5NTU4Y2FiN2M2NmM1Yjg0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZjEwYTMyOGNlM2I0Njg2OWVlYTA2ZWZiZmUzZmNhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5Mzc3MDQsIC03My45NzE4ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDQ2NGFjYTQ4YWE0YTJkODEwMWQ2MGQ0MmFmMThkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3MGRkNmFmNzRmZjQxNTM4NGEzZGY4OTcyZDAyOWI3ID0gJChgPGRpdiBpZD0iaHRtbF82NzBkZDZhZjc0ZmY0MTUzODRhM2RmODk3MmQwMjliNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA5NSBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0My4wPGJyPiB0b3RhbCBhcnJpdmFsczogODY8YnI+IG5ldCBkZXBhcnR1cmVzOiA0My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMDQ2NGFjYTQ4YWE0YTJkODEwMWQ2MGQ0MmFmMThkOS5zZXRDb250ZW50KGh0bWxfNjcwZGQ2YWY3NGZmNDE1Mzg0YTNkZjg5NzJkMDI5YjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGYxMGEzMjhjZTNiNDY4NjllZWEwNmVmYmZlM2ZjYTUuYmluZFBvcHVwKHBvcHVwX2EwNDY0YWNhNDhhYTRhMmQ4MTAxZDYwZDQyYWYxOGQ5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTI3MDBjNTIzNWE0YzBlYjA2MTU5NDNhMWZjZjRkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NDc1MTM5OTk5OTk5NiwgLTczLjk5OTE3MjU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDhkMDc1NWQxOGViNDJjOGFjZDU2MDQ3ZmQxNWU1MTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTk1OWU0YTQyMmY0ZGY4OGFiODdhNTA1NjE0Y2JkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjU5NTllNGE0MjJmNGRmODhhYjg3YTUwNTYxNGNiZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhlbnJ5IFN0ICYgRGVncmF3IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTE8YnI+IG5ldCBkZXBhcnR1cmVzOiA0My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OGQwNzU1ZDE4ZWI0MmM4YWNkNTYwNDdmZDE1ZTUxNS5zZXRDb250ZW50KGh0bWxfMjU5NTllNGE0MjJmNGRmODhhYjg3YTUwNTYxNGNiZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2EyNzAwYzUyMzVhNGMwZWIwNjE1OTQzYTFmY2Y0ZGMuYmluZFBvcHVwKHBvcHVwXzQ4ZDA3NTVkMThlYjQyYzhhY2Q1NjA0N2ZkMTVlNTE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZTUyYzUzYmFhOTQ0MzAyOTVlMTAyMzM1YWY2ZmMxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5ODk5MzcwMDAwMDAwNCwgLTczLjk2NjIxNzM3Nzc5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNjllMWIwMzE5ZmQ0MGM1YmE5OTVmNDRmZmQyNDc0NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyOWUyNzNiMGEyZDQ5MjViMDRlZGIzOWVkOWJiMzkwID0gJChgPGRpdiBpZD0iaHRtbF9lMjllMjczYjBhMmQ0OTI1YjA0ZWRiMzllZDliYjM5MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAxMDQgU3QgJiBBbXN0ZXJkYW0gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogODU8YnI+IG5ldCBkZXBhcnR1cmVzOiA1OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNjllMWIwMzE5ZmQ0MGM1YmE5OTVmNDRmZmQyNDc0NS5zZXRDb250ZW50KGh0bWxfZTI5ZTI3M2IwYTJkNDkyNWIwNGVkYjM5ZWQ5YmIzOTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWU1MmM1M2JhYTk0NDMwMjk1ZTEwMjMzNWFmNmZjMTMuYmluZFBvcHVwKHBvcHVwX2M2OWUxYjAzMTlmZDQwYzViYTk5NWY0NGZmZDI0NzQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODYzMGVjNzUxY2U0MmI3YTlkNmVhZTg3NmRjOWNhNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2ODYyNzMsIC03My45ODcwMDA1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlZWYyN2QzNDY5MzQ5OWI4ODcyOTM2NWYxOTZmOTY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmJiNzM4NDFkNjgwNDE0OGJhYmM1OTE5ODI1YmQ3NDkgPSAkKGA8ZGl2IGlkPSJodG1sXzJiYjczODQxZDY4MDQxNDhiYWJjNTkxOTgyNWJkNzQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xMCBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzA8YnI+IG5ldCBkZXBhcnR1cmVzOiA1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlZWYyN2QzNDY5MzQ5OWI4ODcyOTM2NWYxOTZmOTY0LnNldENvbnRlbnQoaHRtbF8yYmI3Mzg0MWQ2ODA0MTQ4YmFiYzU5MTk4MjViZDc0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iODYzMGVjNzUxY2U0MmI3YTlkNmVhZTg3NmRjOWNhNi5iaW5kUG9wdXAocG9wdXBfY2VlZjI3ZDM0NjkzNDk5Yjg4NzI5MzY1ZjE5NmY5NjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyMzliNWYwMDk0NzQyYjJiYTE2ZGFkMTk3MDBhN2M3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY2Mjg3LCAtNzMuOTg4OTUwNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xY2EyZTM1NGEzMzA0OThkYjJjMzBiMGJhMTU2NzY0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmYmJmNzQ0MjQ0NTQ5MWY5MWQ3NDI5Yjg2YzFjYjFiID0gJChgPGRpdiBpZD0iaHRtbF9hZmJiZjc0NDI0NDU0OTFmOTFkNzQyOWI4NmMxY2IxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTQgU3QgJiA1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgyPGJyPiBuZXQgZGVwYXJ0dXJlczogNTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWNhMmUzNTRhMzMwNDk4ZGIyYzMwYjBiYTE1Njc2NGUuc2V0Q29udGVudChodG1sX2FmYmJmNzQ0MjQ0NTQ5MWY5MWQ3NDI5Yjg2YzFjYjFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YyMzliNWYwMDk0NzQyYjJiYTE2ZGFkMTk3MDBhN2M3LmJpbmRQb3B1cChwb3B1cF8xY2EyZTM1NGEzMzA0OThkYjJjMzBiMGJhMTU2NzY0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODUwYjAyMGQzNzA5NDMzNmIwNzRhNjE3NDVhYjc3NjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTMzOTMsIC03My45NjM1NTU1OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4NWU4YjRkYjM3MDQwMWRiM2I0ZWY2M2Y1Y2E0NGFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzZmYTE5ZmUxYmIzNDI3OTgxYjA1YmM2NDUzZTVhMTEgPSAkKGA8ZGl2IGlkPSJodG1sX2M2ZmExOWZlMWJiMzQyNzk4MWIwNWJjNjQ1M2U1YTExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsIFBhcmsgV2VzdCAmIFcgMTAwIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzk8YnI+IG5ldCBkZXBhcnR1cmVzOiA0NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hODVlOGI0ZGIzNzA0MDFkYjNiNGVmNjNmNWNhNDRhZi5zZXRDb250ZW50KGh0bWxfYzZmYTE5ZmUxYmIzNDI3OTgxYjA1YmM2NDUzZTVhMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODUwYjAyMGQzNzA5NDMzNmIwNzRhNjE3NDVhYjc3NjMuYmluZFBvcHVwKHBvcHVwX2E4NWU4YjRkYjM3MDQwMWRiM2I0ZWY2M2Y1Y2E0NGFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjc2ZDQxYmU0NDI0YzhhYjUyZTc5Yjg1YWQ2OTVlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MzExNjM5OTk5OTk5NiwgLTczLjk5Nzg1MjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGNhMDk1MTA2NDMxNGExYjk4Njc5ZmVjNWY0Zjg1YWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2FjMDNjMjViM2E0NTZlODI5NGQwZGQzMjNkYmU4MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTNhYzAzYzI1YjNhNDU2ZTgyOTRkMGRkMzIzZGJlODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gU3QgJiBVbmlvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM5PGJyPiBuZXQgZGVwYXJ0dXJlczogOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Y2EwOTUxMDY0MzE0YTFiOTg2NzlmZWM1ZjRmODVhZC5zZXRDb250ZW50KGh0bWxfMTNhYzAzYzI1YjNhNDU2ZTgyOTRkMGRkMzIzZGJlODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGY3NmQ0MWJlNDQyNGM4YWI1MmU3OWI4NWFkNjk1ZWUuYmluZFBvcHVwKHBvcHVwXzRjYTA5NTEwNjQzMTRhMWI5ODY3OWZlYzVmNGY4NWFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYWJiMzczNTc3YzI0ZmU1YWI4MWJiMmMzOTEyYjYyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2ODYwMzAwMDAwMDAwNCwgLTczLjk5MDQzOTQwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTEyYzY3ZmI3Yjg2NDc5OTg3NzY0ZDI4MDk2NTI3YTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTQyNjYzM2MzNWY0NjIxYTI1ZTJiMDgzMjUzYjlmZSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2U0MjY2MzNjMzVmNDYyMWEyNWUyYjA4MzI1M2I5ZmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEyIFN0ICYgNCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDUzPGJyPiBuZXQgZGVwYXJ0dXJlczogNDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTEyYzY3ZmI3Yjg2NDc5OTg3NzY0ZDI4MDk2NTI3YTYuc2V0Q29udGVudChodG1sX2NlNDI2NjMzYzM1ZjQ2MjFhMjVlMmIwODMyNTNiOWZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhYmIzNzM1NzdjMjRmZTVhYjgxYmIyYzM5MTJiNjI5LmJpbmRQb3B1cChwb3B1cF85MTJjNjdmYjdiODY0Nzk5ODc3NjRkMjgwOTY1MjdhNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGM4ZmI5Zjk2MDZiNGI5Njk0MDY4M2Q5ZWFhOWM5MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTgxODU2MDAwMDAwMDQsIC03My45NjA1OTA5MDA2MDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwMTQyNjEyMjYxMTQ3MzE5ZTgxN2ZhNjk0YmE3NTQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzA5ZmEwZDdiZWI4NDY2NGE4MjJhYmM0ODk5NGNmMWUgPSAkKGA8ZGl2IGlkPSJodG1sX2MwOWZhMGQ3YmViODQ2NjRhODIyYWJjNDg5OTRjZjFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDEwNiBTdCAmIENlbnRyYWwgUGFyayBXZXN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQ0PGJyPiBuZXQgZGVwYXJ0dXJlczogMTAzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwMTQyNjEyMjYxMTQ3MzE5ZTgxN2ZhNjk0YmE3NTQ1LnNldENvbnRlbnQoaHRtbF9jMDlmYTBkN2JlYjg0NjY0YTgyMmFiYzQ4OTk0Y2YxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYzhmYjlmOTYwNmI0Yjk2OTQwNjgzZDllYWE5YzkwYS5iaW5kUG9wdXAocG9wdXBfNTAxNDI2MTIyNjExNDczMTllODE3ZmE2OTRiYTc1NDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiOGZkNWIzZWY2YjQ5YTVhNDJjNTM3MDIwOGU2YTNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY4NTQ1NSwgLTczLjk5MzMzMjY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGJkZTRjODUwNDRmNDg2Mzk1ZmZlMWI4NDI2YWJkMjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDJhMjViMDY4MjM0NjA1YmJjMmQ1NTgwYzZhYWI2OSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQyYTI1YjA2ODIzNDYwNWJiYzJkNTU4MGM2YWFiNjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgQXZlICYgMTQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NTxicj4gbmV0IGRlcGFydHVyZXM6IDExLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiZGU0Yzg1MDQ0ZjQ4NjM5NWZmZTFiODQyNmFiZDI3LnNldENvbnRlbnQoaHRtbF85ZDJhMjViMDY4MjM0NjA1YmJjMmQ1NTgwYzZhYWI2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYjhmZDViM2VmNmI0OWE1YTQyYzUzNzAyMDhlNmEzYS5iaW5kUG9wdXAocG9wdXBfNGJkZTRjODUwNDRmNDg2Mzk1ZmZlMWI4NDI2YWJkMjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjNjZhZDM0NjNhZTQyN2Y4MzcxNGU0NTVkNGQ3ZjIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg0OTAzMiwgLTczLjk1MDUwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmRlMzI1Nzk2NzRlNDYwNGJjMDI2MWMzMzdkM2FlNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZmNkZTM4ZjY2YTU0MmViYTEzZjIyYjRlMTQ5Y2E5MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmZjZGUzOGY2NmE1NDJlYmExM2YyMmI0ZTE0OWNhOTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgOTUgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkxPGJyPiBuZXQgZGVwYXJ0dXJlczogNjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmRlMzI1Nzk2NzRlNDYwNGJjMDI2MWMzMzdkM2FlNzYuc2V0Q29udGVudChodG1sX2ZmY2RlMzhmNjZhNTQyZWJhMTNmMjJiNGUxNDljYTkyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjNjZhZDM0NjNhZTQyN2Y4MzcxNGU0NTVkNGQ3ZjIxLmJpbmRQb3B1cChwb3B1cF8yZGUzMjU3OTY3NGU0NjA0YmMwMjYxYzMzN2QzYWU3NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjBkYmEyMjdkZGE2NGQ2ZjkyNmNlNmEzYWYwODQyN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzQzNCwgLTc0LjAwMTk0Njk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMzUyNjEzZWViZjg0OGU1ODNiNjQyZWMyOGU1Y2YxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwMzVlN2FkMmIyNDQxYzc5ZDYzNTc4NzAyMDA5MTg5ID0gJChgPGRpdiBpZD0iaHRtbF85MDM1ZTdhZDJiMjQ0MWM3OWQ2MzU3ODcwMjAwOTE4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xpbnRvbiBTdCAmIENlbnRyZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogODxicj4gbmV0IGRlcGFydHVyZXM6IDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTM1MjYxM2VlYmY4NDhlNTgzYjY0MmVjMjhlNWNmMTMuc2V0Q29udGVudChodG1sXzkwMzVlN2FkMmIyNDQxYzc5ZDYzNTc4NzAyMDA5MTg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YwZGJhMjI3ZGRhNjRkNmY5MjZjZTZhM2FmMDg0MjdhLmJpbmRQb3B1cChwb3B1cF9hMzUyNjEzZWViZjg0OGU1ODNiNjQyZWMyOGU1Y2YxMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2JlYWZlODAyZDBkNGM2ZGE4NTI2MmJiYmRjZDliMGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODc3MjEzOTk5OTk5OTUsIC03My45NDcyODMzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwMTBmMTQ5N2UxZDRmYjZiYTM3YWNkMTIzN2E3ODUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjZlOTk2MzRkMjYwNDk2ZTgwOGYwODI3Njg4NzRkMTYgPSAkKGA8ZGl2IGlkPSJodG1sX2Y2ZTk5NjM0ZDI2MDQ5NmU4MDhmMDgyNzY4ODc0ZDE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4zIEF2ZSAmIEUgMTAwIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDAxMGYxNDk3ZTFkNGZiNmJhMzdhY2QxMjM3YTc4NTMuc2V0Q29udGVudChodG1sX2Y2ZTk5NjM0ZDI2MDQ5NmU4MDhmMDgyNzY4ODc0ZDE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiZWFmZTgwMmQwZDRjNmRhODUyNjJiYmJkY2Q5YjBjLmJpbmRQb3B1cChwb3B1cF80MDEwZjE0OTdlMWQ0ZmI2YmEzN2FjZDEyMzdhNzg1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODY3NGZmMDVhMzhhNDhhZmI5ODNmOTQwOTVjNDY5ODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTUsIC03My45NjQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYWQ3Nzc3ZWQzYWQ0OTFiYWI2N2ZmNmE2NzdhM2ZiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2YmY0OWQ2YmMzYTQ5ZjhiZDI4ZWUzMWRlNzliMjZmID0gJChgPGRpdiBpZD0iaHRtbF9jNmJmNDlkNmJjM2E0OWY4YmQyOGVlMzFkZTc5YjI2ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAxMDAgU3QgJiBNYW5oYXR0YW4gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzg8YnI+IG5ldCBkZXBhcnR1cmVzOiA0Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWQ3Nzc3ZWQzYWQ0OTFiYWI2N2ZmNmE2NzdhM2ZiNi5zZXRDb250ZW50KGh0bWxfYzZiZjQ5ZDZiYzNhNDlmOGJkMjhlZTMxZGU3OWIyNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODY3NGZmMDVhMzhhNDhhZmI5ODNmOTQwOTVjNDY5ODAuYmluZFBvcHVwKHBvcHVwXzNhZDc3NzdlZDNhZDQ5MWJhYjY3ZmY2YTY3N2EzZmI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjI0NzEzZTA1OTU0MDMzYmMyMDJlZmI2MjY5ZDVhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MjkxNTEsIC03My45OTMxODIwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwYTExMmU2OGY4NzQzN2NiZjhiZTc2ZjM1ZGM0ODk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGJlZTExMGFiYWNjNGIxMjlmODg2OTEwNTNlZDBjYTYgPSAkKGA8ZGl2IGlkPSJodG1sXzBiZWUxMTBhYmFjYzRiMTI5Zjg4NjkxMDUzZWQwY2E2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZWdyYXcgU3QgJiBTbWl0aCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUyPGJyPiBuZXQgZGVwYXJ0dXJlczogMzEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzBhMTEyZTY4Zjg3NDM3Y2JmOGJlNzZmMzVkYzQ4OTUuc2V0Q29udGVudChodG1sXzBiZWUxMTBhYmFjYzRiMTI5Zjg4NjkxMDUzZWQwY2E2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmMjQ3MTNlMDU5NTQwMzNiYzIwMmVmYjYyNjlkNWE4LmJpbmRQb3B1cChwb3B1cF9jMGExMTJlNjhmODc0MzdjYmY4YmU3NmYzNWRjNDg5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2U0N2EyZTAyY2UxNDBlOGFlNWUwODllYzY3NTg4N2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzI1MDU3OTk5OTk5OTYsIC03NC4wMDQ5NDY5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVhMzQ2MGM4ODU3NzQwNDg4NzNlNzE1Y2Y3MDJkZThjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzU4N2Y3Zjg3OTIxNGRiMWFkOTZjNGRjNTIzNDkyZTAgPSAkKGA8ZGl2IGlkPSJodG1sX2M1ODdmN2Y4NzkyMTRkYjFhZDk2YzRkYzUyMzQ5MmUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZW5yeSBTdCAmIEJheSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE0PGJyPiBuZXQgZGVwYXJ0dXJlczogMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YTM0NjBjODg1Nzc0MDQ4ODczZTcxNWNmNzAyZGU4Yy5zZXRDb250ZW50KGh0bWxfYzU4N2Y3Zjg3OTIxNGRiMWFkOTZjNGRjNTIzNDkyZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2U0N2EyZTAyY2UxNDBlOGFlNWUwODllYzY3NTg4N2QuYmluZFBvcHVwKHBvcHVwXzVhMzQ2MGM4ODU3NzQwNDg4NzNlNzE1Y2Y3MDJkZThjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZTM0OThjMGMyZTk0ZTBkYTNlYzJiYWExZmY2NmFiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgwMTM0MzQsIC03My45NzExNDU3NDM5MDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlOTM1NTY3NTJmZTQ4ODc4ZTEyNzY1N2NmOTJiZjRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2I3YmEzMTdjYTJlNDU5MGIzNTRhYjAxYWY1ZmJhYzQgPSAkKGA8ZGl2IGlkPSJodG1sXzdiN2JhMzE3Y2EyZTQ1OTBiMzU0YWIwMWFmNWZiYWM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZlcnNpZGUgRHIgJiBXIDEwNCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkyPGJyPiBuZXQgZGVwYXJ0dXJlczogNTkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWU5MzU1Njc1MmZlNDg4NzhlMTI3NjU3Y2Y5MmJmNGMuc2V0Q29udGVudChodG1sXzdiN2JhMzE3Y2EyZTQ1OTBiMzU0YWIwMWFmNWZiYWM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRlMzQ5OGMwYzJlOTRlMGRhM2VjMmJhYTFmZjY2YWJkLmJpbmRQb3B1cChwb3B1cF9hZTkzNTU2NzUyZmU0ODg3OGUxMjc2NTdjZjkyYmY0YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTg3MGNhM2Q1YjA2NDBlOWJhMjFkNmU5Y2FiNWRlZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODE5OTA0NDI3MDcwMywgLTczLjk5MDc5MDI0NzkxNzE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWMxMGZkYTdiMzBhNGQzMGFmMjhmZTE4ZTNiMzhkZTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYWE0ZWI5ODc3YjM0NTljODljNWExMjNhNmExODgxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMGFhNGViOTg3N2IzNDU5Yzg5YzVhMTIzYTZhMTg4MTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlZ3JhdyBTdCAmIEhveXQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNzxicj4gbmV0IGRlcGFydHVyZXM6IDEzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVjMTBmZGE3YjMwYTRkMzBhZjI4ZmUxOGUzYjM4ZGU5LnNldENvbnRlbnQoaHRtbF8wYWE0ZWI5ODc3YjM0NTljODljNWExMjNhNmExODgxNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hODcwY2EzZDViMDY0MGU5YmEyMWQ2ZTljYWI1ZGVkMC5iaW5kUG9wdXAocG9wdXBfNWMxMGZkYTdiMzBhNGQzMGFmMjhmZTE4ZTNiMzhkZTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmZjExMGUyNDZkMDQxZmM4YWJlODhiMjc1YTkwN2NhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc0NzA1NSwgLTc0LjAwNzU1NzIwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3NjI0MjRiNThkNDQwYWRhNzA2ZDg5ODYxMjEyY2U3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDdjNWE3Y2ZiM2Q0NDZhZmE5NmY2ZjdkOGUwYzJlYTYgPSAkKGA8ZGl2IGlkPSJodG1sXzQ3YzVhN2NmYjNkNDQ2YWZhOTZmNmY3ZDhlMGMyZWE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2x1bWJpYSBTdCAmIExvcnJhaW5lIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTc2MjQyNGI1OGQ0NDBhZGE3MDZkODk4NjEyMTJjZTcuc2V0Q29udGVudChodG1sXzQ3YzVhN2NmYjNkNDQ2YWZhOTZmNmY3ZDhlMGMyZWE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZmZjExMGUyNDZkMDQxZmM4YWJlODhiMjc1YTkwN2NhLmJpbmRQb3B1cChwb3B1cF85NzYyNDI0YjU4ZDQ0MGFkYTcwNmQ4OTg2MTIxMmNlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzRmZTlhZmJjNjYzNDU3OTg5MzVjZjJhYzJlNjNlNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzcyNzQ0LCAtNzMuOTgyODIwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiNDkwYTc3OTkzOTRlZjFiMGQwOTRhZTE2ZTNmZGFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWVkOGUzOThkZjg5NDdiNDliYTM3NWJlYzExMGFjOWQgPSAkKGA8ZGl2IGlkPSJodG1sXzllZDhlMzk4ZGY4OTQ3YjQ5YmEzNzViZWMxMTBhYzlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbmlvbiBTdCAmIDQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYjQ5MGE3Nzk5Mzk0ZWYxYjBkMDk0YWUxNmUzZmRhZS5zZXRDb250ZW50KGh0bWxfOWVkOGUzOThkZjg5NDdiNDliYTM3NWJlYzExMGFjOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzRmZTlhZmJjNjYzNDU3OTg5MzVjZjJhYzJlNjNlNGIuYmluZFBvcHVwKHBvcHVwXzFiNDkwYTc3OTkzOTRlZjFiMGQwOTRhZTE2ZTNmZGFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZWFkM2E3ZjhlMDY0NzMxYTgwNTc3ZDNkOTlkODhkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NzgwMSwgLTczLjk1MzU1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmNTVkNTE3MzM4MTQ3ZDliOGY1YjI0NzA1YWRiZDk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzRlYzc3NzQwYWRhNDI4YTljZjYzMWFhMzhhOTNlMTUgPSAkKGA8ZGl2IGlkPSJodG1sXzM0ZWM3Nzc0MGFkYTQyOGE5Y2Y2MzFhYTM4YTkzZTE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDk3IFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDI8YnI+IG5ldCBkZXBhcnR1cmVzOiA0OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjU1ZDUxNzMzODE0N2Q5YjhmNWIyNDcwNWFkYmQ5NS5zZXRDb250ZW50KGh0bWxfMzRlYzc3NzQwYWRhNDI4YTljZjYzMWFhMzhhOTNlMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWVhZDNhN2Y4ZTA2NDczMWE4MDU3N2QzZDk5ZDg4ZGQuYmluZFBvcHVwKHBvcHVwXzZmNTVkNTE3MzM4MTQ3ZDliOGY1YjI0NzA1YWRiZDk1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZDMzN2JjZWNkMjA0N2NiYWFhNjM2NWNkNGRlNDg4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NjI1ODYwMDAwMDAwNCwgLTczLjk0NTUyNTc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5MTBjNzA4YTNlNTRhMzU4YWFmNTkzM2RkMDExN2Q5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGY5ZGM1ODk3NTdmNGUxM2EzYzdlYTFmZWQyMTZkNDEgPSAkKGA8ZGl2IGlkPSJodG1sXzRmOWRjNTg5NzU3ZjRlMTNhM2M3ZWExZmVkMjE2ZDQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4yIEF2ZSAmIEUgOTkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDxicj4gbmV0IGRlcGFydHVyZXM6IC03LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5MTBjNzA4YTNlNTRhMzU4YWFmNTkzM2RkMDExN2Q5LnNldENvbnRlbnQoaHRtbF80ZjlkYzU4OTc1N2Y0ZTEzYTNjN2VhMWZlZDIxNmQ0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZDMzN2JjZWNkMjA0N2NiYWFhNjM2NWNkNGRlNDg4Yi5iaW5kUG9wdXAocG9wdXBfYTkxMGM3MDhhM2U1NGEzNThhYWY1OTMzZGQwMTE3ZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxYmE1NDExNTY2YzQ4Y2M5MTFiYmIyMzY5MTEyN2NkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc2NTMwNCwgLTczLjk3ODQ2ODc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yM2EwZmFlZDAwYTE0ZmM5OTI4NDI5OWYxMjAwY2ZkZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0MjdjMzBjNjI0MjQ0OTM5MjQ2NWJmNTRkZDFkODM0ID0gJChgPGRpdiBpZD0iaHRtbF9kNDI3YzMwYzYyNDI0NDkzOTI0NjViZjU0ZGQxZDgzNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVya2VsZXkgUGwgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwNzxicj4gbmV0IGRlcGFydHVyZXM6IDc4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzYTBmYWVkMDBhMTRmYzk5Mjg0Mjk5ZjEyMDBjZmRlLnNldENvbnRlbnQoaHRtbF9kNDI3YzMwYzYyNDI0NDkzOTI0NjViZjU0ZGQxZDgzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MWJhNTQxMTU2NmM0OGNjOTExYmJiMjM2OTExMjdjZC5iaW5kUG9wdXAocG9wdXBfMjNhMGZhZWQwMGExNGZjOTkyODQyOTlmMTIwMGNmZGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IwNTQ5NjU4ZGI2YTRjOTNiMGE4NWQ4MTQ1MDcxYjZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc1MzI3NCwgLTc0LjAxMDA2OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODU3MzQ5MWMwZDIzNDFlMmI5MDRhNTVkNDJiNjQ5ZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOWNlY2FhZTA2YmY0ZGMwODEzMWEwODg4MTk1MzE2MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjljZWNhYWUwNmJmNGRjMDgxMzFhMDg4ODE5NTMxNjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldvbGNvdHQgU3QgJiBEd2lnaHQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzxicj4gbmV0IGRlcGFydHVyZXM6IC0xLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1NzM0OTFjMGQyMzQxZTJiOTA0YTU1ZDQyYjY0OWQ4LnNldENvbnRlbnQoaHRtbF9iOWNlY2FhZTA2YmY0ZGMwODEzMWEwODg4MTk1MzE2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMDU0OTY1OGRiNmE0YzkzYjBhODVkODE0NTA3MWI2ZC5iaW5kUG9wdXAocG9wdXBfODU3MzQ5MWMwZDIzNDFlMmI5MDRhNTVkNDJiNjQ5ZDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjZWQxMTVlMWM4NTQ4ZDc5MjkwOTFhM2MxN2NiMjNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzk1MzQ2LCAtNzMuOTYxODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2NjJkM2U5YTQ0NzRiNzJhNmNmYTgzZjdhM2FmZGU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZhZDA2MmM2ZTIzNDNkOWE0NjQ2Y2QwYWVjZDNmYWUgPSAkKGA8ZGl2IGlkPSJodG1sX2I2YWQwNjJjNmUyMzQzZDlhNDY0NmNkMGFlY2QzZmFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsIFBhcmsgV2VzdCAmIFcgMTAyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE5PGJyPiBuZXQgZGVwYXJ0dXJlczogNzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjY2MmQzZTlhNDQ3NGI3MmE2Y2ZhODNmN2EzYWZkZTguc2V0Q29udGVudChodG1sX2I2YWQwNjJjNmUyMzQzZDlhNDY0NmNkMGFlY2QzZmFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBjZWQxMTVlMWM4NTQ4ZDc5MjkwOTFhM2MxN2NiMjNiLmJpbmRQb3B1cChwb3B1cF9mNjYyZDNlOWE0NDc0YjcyYTZjZmE4M2Y3YTNhZmRlOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDY0MDVmNDIwNzVmNDE5ZWI0ODM5ZjkyNTkwMmFmZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzc3NzQ3OTk5OTk5OTUsIC03NC4wMDk0NjEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDBhZGVkY2I1OGNhNDI2YWE4NzE3MzAzNjYzZDVjNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MzE4ZWYzY2RlYjU0ZGYwYWNkYTViYzhmNWEwOTg3YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjMxOGVmM2NkZWI1NGRmMGFjZGE1YmM4ZjVhMDk4N2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpb25lZXIgU3QgJiBSaWNoYXJkcyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogODxicj4gbmV0IGRlcGFydHVyZXM6IDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDBhZGVkY2I1OGNhNDI2YWE4NzE3MzAzNjYzZDVjNTguc2V0Q29udGVudChodG1sXzYzMThlZjNjZGViNTRkZjBhY2RhNWJjOGY1YTA5ODdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q2NDA1ZjQyMDc1ZjQxOWViNDgzOWY5MjU5MDJhZmU0LmJpbmRQb3B1cChwb3B1cF80MGFkZWRjYjU4Y2E0MjZhYTg3MTczMDM2NjNkNWM1OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGYwZTZkNDBkOTAzNGRkMjhhMWNkNjVhMTZjOTM0N2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTk3NTY4LCAtNzMuOTYyMTEyODY3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTllYmRjOGE5ZWVkNGNkNWEyNWE5ZTZiNjlmYzI2MTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWJlNTY3OTVlOTg0ZTI2YjA0YmY5N2RiODFhN2M5YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNGFiZTU2Nzk1ZTk4NGUyNmIwNGJmOTdkYjgxYTdjOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTA3IFN0ICYgQ29sdW1idXMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzA8YnI+IG5ldCBkZXBhcnR1cmVzOiA0NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOWViZGM4YTllZWQ0Y2Q1YTI1YTllNmI2OWZjMjYxNS5zZXRDb250ZW50KGh0bWxfNGFiZTU2Nzk1ZTk4NGUyNmIwNGJmOTdkYjgxYTdjOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGYwZTZkNDBkOTAzNGRkMjhhMWNkNjVhMTZjOTM0N2UuYmluZFBvcHVwKHBvcHVwXzE5ZWJkYzhhOWVlZDRjZDVhMjVhOWU2YjY5ZmMyNjE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZGRiZDEwMGYxMzY0MWE5YTkyOTdhYzkyZmZmNjYxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3OTA0MywgLTc0LjAxMTE2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjN2UzY2RhYjI3YTRiYjk4YTRkZDhmZGVkNzRiYmFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjU0MDA4YzU1ODY5NDlkODkzOThmMGJjOTZhNDg2ZWQgPSAkKGA8ZGl2IGlkPSJodG1sX2Y1NDAwOGM1NTg2OTQ5ZDg5Mzk4ZjBiYzk2YTQ4NmVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaW9uZWVyIFN0ICYgVmFuIEJydW50IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzdlM2NkYWIyN2E0YmI5OGE0ZGQ4ZmRlZDc0YmJhZS5zZXRDb250ZW50KGh0bWxfZjU0MDA4YzU1ODY5NDlkODkzOThmMGJjOTZhNDg2ZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGRkYmQxMDBmMTM2NDFhOWE5Mjk3YWM5MmZmZjY2MTEuYmluZFBvcHVwKHBvcHVwXzBjN2UzY2RhYjI3YTRiYjk4YTRkZDhmZGVkNzRiYmFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOGExODVkMDVmY2Q0ZjdkODEyMzZlZDg0Mjc3ZWFlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4OTQ4NTQxNTUzMjE1LCAtNzMuOTUyNDI5Mjk0NTg2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxZmY0NzJhNjIzMTQ3Yzk4MWUwMWZiMjM1NzUxNTc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmIxNzFhNTc5MDU0NGI4MDgwNTFkNzk4ZTI3ZDhhYWUgPSAkKGA8ZGl2IGlkPSJodG1sXzJiMTcxYTU3OTA1NDRiODA4MDUxZDc5OGUyN2Q4YWFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYWRpc29uIEF2ZSAmIEUgOTkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNjxicj4gbmV0IGRlcGFydHVyZXM6IC0zMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMWZmNDcyYTYyMzE0N2M5ODFlMDFmYjIzNTc1MTU3NC5zZXRDb250ZW50KGh0bWxfMmIxNzFhNTc5MDU0NGI4MDgwNTFkNzk4ZTI3ZDhhYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYThhMTg1ZDA1ZmNkNGY3ZDgxMjM2ZWQ4NDI3N2VhZTUuYmluZFBvcHVwKHBvcHVwXzAxZmY0NzJhNjIzMTQ3Yzk4MWUwMWZiMjM1NzUxNTc0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMDE4ZGUwY2UyZGY0MTRiYTIyODc4Njk0OTg4ZjQ2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTE0NjgzODcwOTc4NiwgLTczLjk3NTIzMjA5NDUyNjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYzgxZTA5NjkwNGM0NGRiYjUxMDYxOTk5YTRkNTM0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJiZTI4M2FhYWJmMDRjMDY5ZDQ3ZTA1ZjRlYTgyYjRlID0gJChgPGRpdiBpZD0iaHRtbF8yYmUyODNhYWFiZjA0YzA2OWQ0N2UwNWY0ZWE4MmI0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVya2VsZXkgUGwgJiA3IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU5PGJyPiBuZXQgZGVwYXJ0dXJlczogMjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGM4MWUwOTY5MDRjNDRkYmI1MTA2MTk5OWE0ZDUzNGEuc2V0Q29udGVudChodG1sXzJiZTI4M2FhYWJmMDRjMDY5ZDQ3ZTA1ZjRlYTgyYjRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwMThkZTBjZTJkZjQxNGJhMjI4Nzg2OTQ5ODhmNDZmLmJpbmRQb3B1cChwb3B1cF9kYzgxZTA5NjkwNGM0NGRiYjUxMDYxOTk5YTRkNTM0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODJmMTk0NmY5MzM3NDcyNmEzYjczYWEyZjEzZjVmMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzczNDI5LCAtNzQuMDEyNzUwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTc0NDMzMDExZDQ0YTUwOWJhODQxNWZlYzI2MGRjYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3MWNlNTc3Yjk2ZjRiMzU4MGJjZGNjY2FlMDFlMTkzID0gJChgPGRpdiBpZD0iaHRtbF8yNzFjZTU3N2I5NmY0YjM1ODBiY2RjY2NhZTAxZTE5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIEJydW50IFN0ICYgV29sY290dCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYwPGJyPiBuZXQgZGVwYXJ0dXJlczogMjMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTU3NDQzMzAxMWQ0NGE1MDliYTg0MTVmZWMyNjBkY2Muc2V0Q29udGVudChodG1sXzI3MWNlNTc3Yjk2ZjRiMzU4MGJjZGNjY2FlMDFlMTkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyZjE5NDZmOTMzNzQ3MjZhM2I3M2FhMmYxM2Y1ZjM3LmJpbmRQb3B1cChwb3B1cF9hNTc0NDMzMDExZDQ0YTUwOWJhODQxNWZlYzI2MGRjYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzRkOGFkN2Y2ZGUwNDE5OTlhYzZhZjkzYzQ0YjQxYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzcyMzYsIC03NC4wMTU2NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Y0ZDdlNzE3ZmQ2NGZkMmE1Y2ZjYjU3MmQ3YTUzOWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzRjNDU1NjM5NjE0MDNhOGU0ZjBhZjQwMDM3NWUwNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjc0YzQ1NTYzOTYxNDAzYThlNGYwYWY0MDAzNzVlMDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvZmZleSBTdCAmIENvbm92ZXIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTxicj4gbmV0IGRlcGFydHVyZXM6IC01LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmNGQ3ZTcxN2ZkNjRmZDJhNWNmY2I1NzJkN2E1MzlmLnNldENvbnRlbnQoaHRtbF82NzRjNDU1NjM5NjE0MDNhOGU0ZjBhZjQwMDM3NWUwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NGQ4YWQ3ZjZkZTA0MTk5OWFjNmFmOTNjNDRiNDFiNi5iaW5kUG9wdXAocG9wdXBfM2Y0ZDdlNzE3ZmQ2NGZkMmE1Y2ZjYjU3MmQ3YTUzOWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMwOGQ4YWI0Yzk0MTRmZDM5YWY4YWZjZDg3NmFiMmExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjcyOTY3OSwgLTczLjk3MDg3OTg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDNjMmYxYjY2OTFmNDRhMGFmMGVjOTFiMGZhNmNmMmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZjdjZTExYzNmYjg0OTBkOTg4NDViZTVhMDJmNTcwMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMGY3Y2UxMWMzZmI4NDkwZDk4ODQ1YmU1YTAyZjU3MDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYW5kIEFybXkgUGxhemEgJiBQbGF6YSBTdCBXZXN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDNjMmYxYjY2OTFmNDRhMGFmMGVjOTFiMGZhNmNmMmYuc2V0Q29udGVudChodG1sXzBmN2NlMTFjM2ZiODQ5MGQ5ODg0NWJlNWEwMmY1NzAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwOGQ4YWI0Yzk0MTRmZDM5YWY4YWZjZDg3NmFiMmExLmJpbmRQb3B1cChwb3B1cF80M2MyZjFiNjY5MWY0NGEwYWYwZWM5MWIwZmE2Y2YyZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGFmMDNiNzQ5N2E0NDU1ZGEzNWFjMmM1YzRlMzIwNzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTczNzIxMDAwMDAwMDQsIC03My45NzA0MTE5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkNGE0NDZmM2YwNzQ5MGJiNGE0MDQ0NTQ3NzcxZWRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWZlZjI3NWYzOTRhNGI3MzlkYjAxYjM1ZDBhZGJmMzkgPSAkKGA8ZGl2IGlkPSJodG1sXzlmZWYyNzVmMzk0YTRiNzM5ZGIwMWIzNWQwYWRiZjM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDEwMCBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzg8YnI+IG5ldCBkZXBhcnR1cmVzOiA0MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDRhNDQ2ZjNmMDc0OTBiYjRhNDA0NDU0Nzc3MWVkZS5zZXRDb250ZW50KGh0bWxfOWZlZjI3NWYzOTRhNGI3MzlkYjAxYjM1ZDBhZGJmMzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGFmMDNiNzQ5N2E0NDU1ZGEzNWFjMmM1YzRlMzIwNzMuYmluZFBvcHVwKHBvcHVwXzhkNGE0NDZmM2YwNzQ5MGJiNGE0MDQ0NTQ3NzcxZWRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wN2Q5ZWU2YjU3MDk0YWJmODU4ZTZmMTU2MTEwNTUxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4Njk5NDYsIC03My45NDE2NDgwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTA4N2IwNDIzMzViNDA1ZmI3OWUyNTE4NzljNjJkYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTEyMTBhYzJjOGM0YzlhOTg3ZDU5ZDU3ZDI4MDM0MyA9ICQoYDxkaXYgaWQ9Imh0bWxfODExMjEwYWMyYzhjNGM5YTk4N2Q1OWQ1N2QyODAzNDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTAyIFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTc8YnI+IG5ldCBkZXBhcnR1cmVzOiA3Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMDg3YjA0MjMzNWI0MDVmYjc5ZTI1MTg3OWM2MmRiMS5zZXRDb250ZW50KGh0bWxfODExMjEwYWMyYzhjNGM5YTk4N2Q1OWQ1N2QyODAzNDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDdkOWVlNmI1NzA5NGFiZjg1OGU2ZjE1NjExMDU1MTQuYmluZFBvcHVwKHBvcHVwX2EwODdiMDQyMzM1YjQwNWZiNzllMjUxODc5YzYyZGIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zY2NhYjIwMWZmMGM0NmE1OTYyZDczYzc5MzkxYjEwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NDc4NDQsIC03NC4wMTYxMjg0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YjlkY2M5YzNjODY0NThjOGUwMjZkNjJhZmMyMWM0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3MmZkZDY5N2VmNzRiMjFiMjVhNjhhODg2MTk3MTNiID0gJChgPGRpdiBpZD0iaHRtbF8wNzJmZGQ2OTdlZjc0YjIxYjI1YTY4YTg4NjE5NzEzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVlZCBTdCAmIFZhbiBCcnVudCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiOWRjYzljM2M4NjQ1OGM4ZTAyNmQ2MmFmYzIxYzQwLnNldENvbnRlbnQoaHRtbF8wNzJmZGQ2OTdlZjc0YjIxYjI1YTY4YTg4NjE5NzEzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zY2NhYjIwMWZmMGM0NmE1OTYyZDczYzc5MzkxYjEwYy5iaW5kUG9wdXAocG9wdXBfN2I5ZGNjOWMzYzg2NDU4YzhlMDI2ZDYyYWZjMjFjNDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwZTdiMzE3YzM3MDQyZGM4YTgzZDJhMmMwMDdjZTJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY4MTMyLCAtNzMuOTczNjM4MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjNjg0ZWQ3MDNlZDQxMTk5ZTAzNWQ2YzIzMjgxNDcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTM5NTBjNTkxY2I0NGYxYzhjYzMyOGI1NGEyODkzZjAgPSAkKGA8ZGl2IGlkPSJodG1sXzEzOTUwYzU5MWNiNDRmMWM4Y2MzMjhiNTRhMjg5M2YwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4zIFN0ICYgUHJvc3BlY3QgUGFyayBXZXN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTA8YnI+IG5ldCBkZXBhcnR1cmVzOiA0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBjNjg0ZWQ3MDNlZDQxMTk5ZTAzNWQ2YzIzMjgxNDcyLnNldENvbnRlbnQoaHRtbF8xMzk1MGM1OTFjYjQ0ZjFjOGNjMzI4YjU0YTI4OTNmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMGU3YjMxN2MzNzA0MmRjOGE4M2QyYTJjMDA3Y2UyZC5iaW5kUG9wdXAocG9wdXBfMGM2ODRlZDcwM2VkNDExOTllMDM1ZDZjMjMyODE0NzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4MWRlZTBjMTMxMzRmMTViZDM5YmM1ZmJhMWM4ODViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY4MDA4ODkzMDU5NDY2LCAtNzMuOTY4NDUyODExMjQxMTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMWZjMzMxNzU4ZjE0MjBhOTVkNjM0NjA2N2I4ZmMxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhMzI2Y2JmNWRkNjQzMWY4MDVlM2YyYmQzMjhmODY3ID0gJChgPGRpdiBpZD0iaHRtbF8yYTMyNmNiZjVkZDY0MzFmODA1ZTNmMmJkMzI4Zjg2NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA2NiBTdCAmIE1hZGlzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExZmMzMzE3NThmMTQyMGE5NWQ2MzQ2MDY3YjhmYzE2LnNldENvbnRlbnQoaHRtbF8yYTMyNmNiZjVkZDY0MzFmODA1ZTNmMmJkMzI4Zjg2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ODFkZWUwYzEzMTM0ZjE1YmQzOWJjNWZiYTFjODg1Yi5iaW5kUG9wdXAocG9wdXBfYTFmYzMzMTc1OGYxNDIwYTk1ZDYzNDYwNjdiOGZjMTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyMzVjMGQ1MjIwZjQ2YzY5NGVhYzJhMTE0MTYxZWU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc0NjY3MSwgLTczLjk4NDcwNTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNjkyOTE1ZDhjYTI0ZTI0OTJjOTc1ZDVmMDFhNTYwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4NjNmM2Q2YjVjMDRhMTg4YTRjNWU5Y2ZiMTFkMGY5ID0gJChgPGRpdiBpZD0iaHRtbF8zODYzZjNkNmI1YzA0YTE4OGE0YzVlOWNmYjExZDBmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW1zdGVyZGFtIEF2ZSAmIFcgNjYgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA5Nzxicj4gbmV0IGRlcGFydHVyZXM6IDM2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2OTI5MTVkOGNhMjRlMjQ5MmM5NzVkNWYwMWE1NjA1LnNldENvbnRlbnQoaHRtbF8zODYzZjNkNmI1YzA0YTE4OGE0YzVlOWNmYjExZDBmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMjM1YzBkNTIyMGY0NmM2OTRlYWMyYTExNDE2MWVlNC5iaW5kUG9wdXAocG9wdXBfZjY5MjkxNWQ4Y2EyNGUyNDkyYzk3NWQ1ZjAxYTU2MDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RkM2FjMmMyOGJkNjQxYmFiYjA0YWE4NjU2NTViYjdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAwODM2Mjk5OTk5OTksIC03My45NjY0NDkyNDcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDUwYmFmMjBjZDFhNDVhMWI3YTM4ODBiOWFmY2E2NDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNjE4ODEwM2Y1MjI0YmQwYWExNTA3ZmRkNDI3NTFmNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjYxODgxMDNmNTIyNGJkMGFhMTUwN2ZkZDQyNzUxZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTA2IFN0ICYgQW1zdGVyZGFtIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwOTxicj4gbmV0IGRlcGFydHVyZXM6IDcxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1MGJhZjIwY2QxYTQ1YTFiN2EzODgwYjlhZmNhNjQxLnNldENvbnRlbnQoaHRtbF9mNjE4ODEwM2Y1MjI0YmQwYWExNTA3ZmRkNDI3NTFmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZDNhYzJjMjhiZDY0MWJhYmIwNGFhODY1NjU1YmI3ZS5iaW5kUG9wdXAocG9wdXBfZDUwYmFmMjBjZDFhNDVhMWI3YTM4ODBiOWFmY2E2NDEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1MzVjZTg2MmNmMjRjMTBhNTk0YWU0YWQyOTc5NDE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjcxMTk3Nzk5OTk5OTk1LCAtNzMuOTc0ODQxMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzMzgwYzUyOGZkZDRhM2FiNmZkOWQxZjcwNmU1ZjJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjg1OTYzZWM5MGIxNDVjYjhmOWUwNjk4NGM1NjhhYmIgPSAkKGA8ZGl2IGlkPSJodG1sX2Y4NTk2M2VjOTBiMTQ1Y2I4ZjllMDY5ODRjNTY4YWJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HYXJmaWVsZCBQbCAmIDggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTM8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzM4MGM1MjhmZGQ0YTNhYjZmZDlkMWY3MDZlNWYyYS5zZXRDb250ZW50KGh0bWxfZjg1OTYzZWM5MGIxNDVjYjhmOWUwNjk4NGM1NjhhYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjUzNWNlODYyY2YyNGMxMGE1OTRhZTRhZDI5Nzk0MTkuYmluZFBvcHVwKHBvcHVwX2UzMzgwYzUyOGZkZDRhM2FiNmZkOWQxZjcwNmU1ZjJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xN2M3OGY1YzBlMGI0YjRhODczNjU2YWM3MWZmNzM2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2OTE1NzIsIC03My45NjcwMzQ2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxYjkxYzcwNjc0MzQ0ODFhMGVkNmVjODRmYWVhNzkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTRlNWFhYzJhZGE1NGU4NTk2M2ZjZTIyODY1ODUzYzUgPSAkKGA8ZGl2IGlkPSJodG1sXzE0ZTVhYWMyYWRhNTRlODU5NjNmY2UyMjg2NTg1M2M1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDY4IFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1NDxicj4gbmV0IGRlcGFydHVyZXM6IC0yNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMWI5MWM3MDY3NDM0NDgxYTBlZDZlYzg0ZmFlYTc5Mi5zZXRDb250ZW50KGh0bWxfMTRlNWFhYzJhZGE1NGU4NTk2M2ZjZTIyODY1ODUzYzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTdjNzhmNWMwZTBiNGI0YTg3MzY1NmFjNzFmZjczNmIuYmluZFBvcHVwKHBvcHVwXzIxYjkxYzcwNjc0MzQ0ODFhMGVkNmVjODRmYWVhNzkyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZGUzNjU2ZjFhYmQ0OGFmOTMwNGU5NzhhNWZkMmZlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MjkzOTEsIC03My45Nzg2NTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMWIxZjkxYjZkNTE0MmMyYWIzOTNhY2EzNjk0Y2E3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjYTUwNmQ2NmYwNjQ2YTNhYjllNjdlZGU3N2I1M2Q3ID0gJChgPGRpdiBpZD0iaHRtbF9hY2E1MDZkNjZmMDY0NmEzYWI5ZTY3ZWRlNzdiNTNkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW1zdGVyZGFtIEF2ZSAmIFcgNzkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Njxicj4gbmV0IGRlcGFydHVyZXM6IDI0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxYjFmOTFiNmQ1MTQyYzJhYjM5M2FjYTM2OTRjYTdlLnNldENvbnRlbnQoaHRtbF9hY2E1MDZkNjZmMDY0NmEzYWI5ZTY3ZWRlNzdiNTNkNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZGUzNjU2ZjFhYmQ0OGFmOTMwNGU5NzhhNWZkMmZlNC5iaW5kUG9wdXAocG9wdXBfZTFiMWY5MWI2ZDUxNDJjMmFiMzkzYWNhMzY5NGNhN2UpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1MmFiMDhmMjU2NDQxMTE4OGM1ZGIxMjM1ZWZjYjYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc0MDg4NiwgLTczLjk3ODcyODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mY2ZiMDVlOGQ1MDE0NWE4YWE5MjgyZGJhOWMxN2NiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliYTgyM2I1ZWI3NzQ2MzhiNWQ5NjVlMmU2MjFlNjQ2ID0gJChgPGRpdiBpZD0iaHRtbF85YmE4MjNiNWViNzc0NjM4YjVkOTY1ZTJlNjIxZTY0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2Fycm9sbCBTdCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTU8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mY2ZiMDVlOGQ1MDE0NWE4YWE5MjgyZGJhOWMxN2NiMy5zZXRDb250ZW50KGh0bWxfOWJhODIzYjVlYjc3NDYzOGI1ZDk2NWUyZTYyMWU2NDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjUyYWIwOGYyNTY0NDExMTg4YzVkYjEyMzVlZmNiNjMuYmluZFBvcHVwKHBvcHVwX2ZjZmIwNWU4ZDUwMTQ1YThhYTkyODJkYmE5YzE3Y2IzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjMwZjE4MTFhYzg0ZWUwOTM1NjEzZDM0NzJiODI3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3ODEzMTQsIC03My45NjA2OTM5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYjlkMzMzNThkZDc0Nzc3YjliNjRkZThlMmE2NDRlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3NjY5NWZkMGYwMTQ0YjQ4NWQ1YmE0ODE5MWViYjYzID0gJChgPGRpdiBpZD0iaHRtbF80NzY2OTVmZDBmMDE0NGI0ODVkNWJhNDgxOTFlYmI2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFkaXNvbiBBdmUgJiBFIDgyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmI5ZDMzMzU4ZGQ3NDc3N2I5YjY0ZGU4ZTJhNjQ0ZWIuc2V0Q29udGVudChodG1sXzQ3NjY5NWZkMGYwMTQ0YjQ4NWQ1YmE0ODE5MWViYjYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y2MzBmMTgxMWFjODRlZTA5MzU2MTNkMzQ3MmI4Mjc1LmJpbmRQb3B1cChwb3B1cF9mYjlkMzMzNThkZDc0Nzc3YjliNjRkZThlMmE2NDRlYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWFkYWY3NDcwZjZhNDM1NGI4ODNjNzBmY2U0MTE2YjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTA0ODI4LCAtNzMuOTUwMzMwNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMmM2ZTM3YTFlYzI0ZDJhOTVkN2ZiNjY2MWFhOTdlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkNmQ3MzFkZGViMTRiNGZiNjQ1YzJmZjFlOWFiZjc0ID0gJChgPGRpdiBpZD0iaHRtbF9iZDZkNzMxZGRlYjE0YjRmYjY0NWMyZmYxZTlhYmY3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMDIgU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTI4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyYzZlMzdhMWVjMjRkMmE5NWQ3ZmI2NjYxYWE5N2U2LnNldENvbnRlbnQoaHRtbF9iZDZkNzMxZGRlYjE0YjRmYjY0NWMyZmYxZTlhYmY3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYWRhZjc0NzBmNmE0MzU0Yjg4M2M3MGZjZTQxMTZiNy5iaW5kUG9wdXAocG9wdXBfYjJjNmUzN2ExZWMyNGQyYTk1ZDdmYjY2NjFhYTk3ZTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlMTAxYWZjMDc3YTQ5NzE4ZTZlNzI5OGU5M2ZlNzI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc1MTYyMiwgLTczLjk4MTQ4MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzBlNDBiOWI1YTE0NTI3YTZlODYzYzJiZDFkOTkyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxYjk4NDNmZDYyOTRlNTdhOGZlNTc2MTMxOGJkZmFmID0gJChgPGRpdiBpZD0iaHRtbF9lMWI5ODQzZmQ2Mjk0ZTU3YThmZTU3NjEzMThiZGZhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2Fycm9sbCBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTAzPGJyPiBuZXQgZGVwYXJ0dXJlczogNzUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzcwZTQwYjliNWExNDUyN2E2ZTg2M2MyYmQxZDk5Mjcuc2V0Q29udGVudChodG1sX2UxYjk4NDNmZDYyOTRlNTdhOGZlNTc2MTMxOGJkZmFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlMTAxYWZjMDc3YTQ5NzE4ZTZlNzI5OGU5M2ZlNzI4LmJpbmRQb3B1cChwb3B1cF83NzBlNDBiOWI1YTE0NTI3YTZlODYzYzJiZDFkOTkyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmE5Y2I5ODFmMDA2NGQ1MGIwM2MyYTcwZTJiZjMyMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzAzODM3MDAwMDAwMSwgLTczLjk3ODM5Njc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODE4YzUzMGMyOGE1NGM1MTlkYjc5NjExMTU0YzQxNDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzMyYzc3YWMzMTU0OWVkYjU0ZmVmZDI4ZDRiN2Q1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTczMmM3N2FjMzE1NDllZGI1NGZlZmQyOGQ0YjdkNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgU3QgJiA3IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYxPGJyPiBuZXQgZGVwYXJ0dXJlczogMzUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODE4YzUzMGMyOGE1NGM1MTlkYjc5NjExMTU0YzQxNDQuc2V0Q29udGVudChodG1sX2E3MzJjNzdhYzMxNTQ5ZWRiNTRmZWZkMjhkNGI3ZDViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZhOWNiOTgxZjAwNjRkNTBiMDNjMmE3MGUyYmYzMjMyLmJpbmRQb3B1cChwb3B1cF84MThjNTMwYzI4YTU0YzUxOWRiNzk2MTExNTRjNDE0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDBjMzFjYjEwOGQ3NDk3N2E1YmU2NzgzNzhkYTQ3OTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC44MDIxMTc0LCAtNzMuOTY4MTgwNTMwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4MDQ0NzJhMTZhZTRjNDhhYzg5ZTBiNDZjYmJlMmY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWUzYTFhMDhlZDk2NGNkMmE5MjViYjI3MjRjNWQyZmEgPSAkKGA8ZGl2IGlkPSJodG1sXzFlM2ExYTA4ZWQ5NjRjZDJhOTI1YmIyNzI0YzVkMmZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IEVuZCBBdmUgJiBXIDEwNyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI2PGJyPiBuZXQgZGVwYXJ0dXJlczogNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODA0NDcyYTE2YWU0YzQ4YWM4OWUwYjQ2Y2JiZTJmOS5zZXRDb250ZW50KGh0bWxfMWUzYTFhMDhlZDk2NGNkMmE5MjViYjI3MjRjNWQyZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDBjMzFjYjEwOGQ3NDk3N2E1YmU2NzgzNzhkYTQ3OTEuYmluZFBvcHVwKHBvcHVwX2Q4MDQ0NzJhMTZhZTRjNDhhYzg5ZTBiNDZjYmJlMmY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTE5NzllZmNlM2U0Y2JjYTdiOWE1YTRmODU0OGIyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MjI1NTI5OTk5OTk5NCwgLTczLjk1MjQ5OTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOThkNWZjODA4ODM1NDZhYzk3ZDQxZjg1NGYzNjAwNDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZmNlMDEwMmVjMGU0MzRkODNiNDI3ZmZkNTdmZTk2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmZjZTAxMDJlYzBlNDM0ZDgzYjQyN2ZmZDU3ZmU5NmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjUgQXZlICYgRSAxMDMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMTxicj4gbmV0IGRlcGFydHVyZXM6IC0xMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OGQ1ZmM4MDg4MzU0NmFjOTdkNDFmODU0ZjM2MDA0My5zZXRDb250ZW50KGh0bWxfZmZjZTAxMDJlYzBlNDM0ZDgzYjQyN2ZmZDU3ZmU5NmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmExOTc5ZWZjZTNlNGNiY2E3YjlhNWE0Zjg1NDhiMjcuYmluZFBvcHVwKHBvcHVwXzk4ZDVmYzgwODgzNTQ2YWM5N2Q0MWY4NTRmMzYwMDQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMjlkZjc2ZDM5NWE0NjU1YThhMGQyZTMyMWY2OWUwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MjgxNTUwMDAwMDAwNiwgLTczLjk4MzUyMzU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGJmODhjOTYzZGRjNDI5NDk5NWE0NGQ4ODdjNDYzYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zY2RmMWI3YTExMjc0YWZkYjg5NDFkODg2MWY5NzNmNSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2NkZjFiN2ExMTI3NGFmZGI4OTQxZDg4NjFmOTczZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjUgQXZlICYgMyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExODxicj4gbmV0IGRlcGFydHVyZXM6IDUzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiZjg4Yzk2M2RkYzQyOTQ5OTVhNDRkODg3YzQ2M2EwLnNldENvbnRlbnQoaHRtbF8zY2RmMWI3YTExMjc0YWZkYjg5NDFkODg2MWY5NzNmNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMjlkZjc2ZDM5NWE0NjU1YThhMGQyZTMyMWY2OWUwZC5iaW5kUG9wdXAocG9wdXBfNGJmODhjOTYzZGRjNDI5NDk5NWE0NGQ4ODdjNDYzYTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNhMzQwNTBhYjZjODQzNDhhNmQ5ZjE4MmI0M2YzYzAxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcyNzk2NiwgLTczLjk1NTc3ODAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTg4MmQ1ZGNlMzE0YmU4YTQ3MGRkYjdhNDhmNjM5ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3NjlkMjU5ODQ3ZjQ0OTdhNGRjOWYxOGM2YThmNDg0ID0gJChgPGRpdiBpZD0iaHRtbF84NzY5ZDI1OTg0N2Y0NDk3YTRkYzlmMThjNmE4ZjQ4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA3OCBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE5PGJyPiBuZXQgZGVwYXJ0dXJlczogODguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDU4ODJkNWRjZTMxNGJlOGE0NzBkZGI3YTQ4ZjYzOWYuc2V0Q29udGVudChodG1sXzg3NjlkMjU5ODQ3ZjQ0OTdhNGRjOWYxOGM2YThmNDg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhMzQwNTBhYjZjODQzNDhhNmQ5ZjE4MmI0M2YzYzAxLmJpbmRQb3B1cChwb3B1cF9kNTg4MmQ1ZGNlMzE0YmU4YTQ3MGRkYjdhNDhmNjM5ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2ZmYTEzM2Q5ZWMxNGFmYmFiNTMzNThlMzhkNGI3NTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Njg5NzM4LCAtNzMuOTU0ODIyNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmMDRiMzM5MGZmOTQ0YTRhMGUxOWFlMmQ0MDE5M2IwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjMzN2I3ZmFmODU3NGU2ODgyOWVmZjJmZWU1ZmExZWMgPSAkKGA8ZGl2IGlkPSJodG1sXzIzMzdiN2ZhZjg1NzRlNjg4MjllZmYyZmVlNWZhMWVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDc0IFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxOTE8YnI+IG5ldCBkZXBhcnR1cmVzOiA5OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZjA0YjMzOTBmZjk0NGE0YTBlMTlhZTJkNDAxOTNiMC5zZXRDb250ZW50KGh0bWxfMjMzN2I3ZmFmODU3NGU2ODgyOWVmZjJmZWU1ZmExZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2ZmYTEzM2Q5ZWMxNGFmYmFiNTMzNThlMzhkNGI3NTcuYmluZFBvcHVwKHBvcHVwXzRmMDRiMzM5MGZmOTQ0YTRhMGUxOWFlMmQ0MDE5M2IwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOTg3YjE1NjJhMzk0MTg2OTdiNzJiMTUyNzRmZDc2NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTA3MDUwMDAwMDAwNCwgLTczLjk4Nzc1MjI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkNThkMWY4NmQ4NjQ4ZTg5NGZiN2QyYmVmMDNjNGU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg3ZGY3NTZiNzc0NDNjZmJiYTJiMTBiZWYyMDNhMzEgPSAkKGA8ZGl2IGlkPSJodG1sX2E4N2RmNzU2Yjc3NDQzY2ZiYmEyYjEwYmVmMjAzYTMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4zIFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NDxicj4gbmV0IGRlcGFydHVyZXM6IC0yNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZDU4ZDFmODZkODY0OGU4OTRmYjdkMmJlZjAzYzRlNi5zZXRDb250ZW50KGh0bWxfYTg3ZGY3NTZiNzc0NDNjZmJiYTJiMTBiZWYyMDNhMzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzk4N2IxNTYyYTM5NDE4Njk3YjcyYjE1Mjc0ZmQ3NjUuYmluZFBvcHVwKHBvcHVwX2RkNThkMWY4NmQ4NjQ4ZTg5NGZiN2QyYmVmMDNjNGU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OTBlNDc2YmYwZjE0MmYwODg0NzY4ZDgwNzdkZmQ0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5OTQ4NCwgLTczLjk1NTYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkMzE4OTQ5YTIwYjQ2Yjg4MTkxM2I4ODEyM2U2OTMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTdmYTNiNWFkNzY2NGM1YjllMjgzMDZkYjg3OTU0ODggPSAkKGA8ZGl2IGlkPSJodG1sXzk3ZmEzYjVhZDc2NjRjNWI5ZTI4MzA2ZGI4Nzk1NDg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsIFBhcmsgTm9ydGggJiBBZGFtIENsYXl0b24gUG93ZWxsIEJsdmQ8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjMzPGJyPiBuZXQgZGVwYXJ0dXJlczogODUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQzMTg5NDlhMjBiNDZiODgxOTEzYjg4MTIzZTY5MzAuc2V0Q29udGVudChodG1sXzk3ZmEzYjVhZDc2NjRjNWI5ZTI4MzA2ZGI4Nzk1NDg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY5MGU0NzZiZjBmMTQyZjA4ODQ3NjhkODA3N2RmZDQwLmJpbmRQb3B1cChwb3B1cF9iZDMxODk0OWEyMGI0NmI4ODE5MTNiODgxMjNlNjkzMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzEwYjcxY2E3YmMzNDBiZWIyNDcyYzU0NzZiYTI3NDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Njk5NDI2LCAtNzMuOTYwNjA3MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MzI4MDgwN2JlMzA0ZjA2YjhiZjU3ODdhYjBjNGRjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlMWIxYzA2Y2M3MzQ0NzQ5YjZiZGRhYzY0NTlmZDZmID0gJChgPGRpdiBpZD0iaHRtbF83ZTFiMWMwNmNjNzM0NDc0OWI2YmRkYWM2NDU5ZmQ2ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MyBBdmUgJiBFIDcyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MzI4MDgwN2JlMzA0ZjA2YjhiZjU3ODdhYjBjNGRjMy5zZXRDb250ZW50KGh0bWxfN2UxYjFjMDZjYzczNDQ3NDliNmJkZGFjNjQ1OWZkNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzEwYjcxY2E3YmMzNDBiZWIyNDcyYzU0NzZiYTI3NDguYmluZFBvcHVwKHBvcHVwXzgzMjgwODA3YmUzMDRmMDZiOGJmNTc4N2FiMGM0ZGMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNjQ5NjI2NGEwY2E0ZDJjOWVhNWY5YTE1OWRkMmYzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDcxODUxOTQ0MzM5LCAtNzMuOTYyMjIwNjk4NTk1MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZjFmYTRkZGUwYzU0YWQ4OGVmZDY2NDkwODg5MTE4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1ODhjMWU0MzNiYzQ2MjVhZDRiMjM4ZjU3M2RjMTU4ID0gJChgPGRpdiBpZD0iaHRtbF9mNTg4YzFlNDMzYmM0NjI1YWQ0YjIzOGY1NzNkYzE1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA2NSBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDk8YnI+IG5ldCBkZXBhcnR1cmVzOiAxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmMWZhNGRkZTBjNTRhZDg4ZWZkNjY0OTA4ODkxMTg5LnNldENvbnRlbnQoaHRtbF9mNTg4YzFlNDMzYmM0NjI1YWQ0YjIzOGY1NzNkYzE1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNjQ5NjI2NGEwY2E0ZDJjOWVhNWY5YTE1OWRkMmYzYS5iaW5kUG9wdXAocG9wdXBfY2YxZmE0ZGRlMGM1NGFkODhlZmQ2NjQ5MDg4OTExODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhMTg0MTdhZWU5YjRjMjRiYjVmYTJkODBjMTViYWJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc4NjExNSwgLTczLjk5MDM3MjkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmJiYTdiNjkzZDU3NDNkZGE0Y2VmMmM5Mjk2NTkxYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjNkYWIxNDgxMTM0Mzc5YjEzNjVhNjJiYjlmZDE3MyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWYzZGFiMTQ4MTEzNDM3OWIxMzY1YTYyYmI5ZmQxNzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcnJvbGwgU3QgJiBCb25kIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzI8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYmJhN2I2OTNkNTc0M2RkYTRjZWYyYzkyOTY1OTFjOS5zZXRDb250ZW50KGh0bWxfOWYzZGFiMTQ4MTEzNDM3OWIxMzY1YTYyYmI5ZmQxNzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmExODQxN2FlZTliNGMyNGJiNWZhMmQ4MGMxNWJhYmMuYmluZFBvcHVwKHBvcHVwX2ZiYmE3YjY5M2Q1NzQzZGRhNGNlZjJjOTI5NjU5MWM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZTNjNjQ5N2E5ZWU0NzU2OGViZWM0MWMzYTU3YWU3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3Mzc2MywgLTczLjk2MjIyMDg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTVlYTI5NDBiY2RhNGNlOWIwZTAyZmU4NjJkYmExZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNzc1ZGMzYTBhYmE0MGZjOTlhNjNiZmQ4ZDNkOWUxZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTc3NWRjM2EwYWJhNDBmYzk5YTYzYmZkOGQzZDllMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNzYgU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDE8YnI+IG5ldCBkZXBhcnR1cmVzOiA3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1ZWEyOTQwYmNkYTRjZTliMGUwMmZlODYyZGJhMWZlLnNldENvbnRlbnQoaHRtbF8xNzc1ZGMzYTBhYmE0MGZjOTlhNjNiZmQ4ZDNkOWUxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZTNjNjQ5N2E5ZWU0NzU2OGViZWM0MWMzYTU3YWU3NC5iaW5kUG9wdXAocG9wdXBfOTVlYTI5NDBiY2RhNGNlOWIwZTAyZmU4NjJkYmExZmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4ZmVmODkwZWZjMzQyNDViYWQwYzRjZTA2NmFhMGE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkwMzA1MTAwMDAwMDA1LCAtNzMuOTQ3NTU3NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGU1MjM5Zjc2MGRjNGNmZGE2OTgyMTI1YWY0Mzk3Y2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOWE0OTIwMWQ1MjY0ODQ3ODg0NTZkOGE3MTM0OWY5YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzlhNDkyMDFkNTI2NDg0Nzg4NDU2ZDhhNzEzNDlmOWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTAzIFN0ICYgTGV4aW5ndG9uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlNTIzOWY3NjBkYzRjZmRhNjk4MjEyNWFmNDM5N2NjLnNldENvbnRlbnQoaHRtbF8zOWE0OTIwMWQ1MjY0ODQ3ODg0NTZkOGE3MTM0OWY5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OGZlZjg5MGVmYzM0MjQ1YmFkMGM0Y2UwNjZhYTBhNC5iaW5kUG9wdXAocG9wdXBfMGU1MjM5Zjc2MGRjNGNmZGE2OTgyMTI1YWY0Mzk3Y2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkODg5ZTBjNGQ3NDQxZTM5NTdlYjQ1YWUxMDQyMDQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc3NzI4NywgLTczLjk5MzY0MTIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTE1MGVhYTA3Njg4NDBiNWE4ZTk2Mzg3MTFiMDU0YjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDVlODI4ZjMxZWU0N2ZlYTMxYmY0Nzc3OGEyNDAxZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTA1ZTgyOGYzMWVlNDdmZWEzMWJmNDc3NzhhMjQwMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgU3QgJiBIb3l0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTE1MGVhYTA3Njg4NDBiNWE4ZTk2Mzg3MTFiMDU0YjEuc2V0Q29udGVudChodG1sXzUwNWU4MjhmMzFlZTQ3ZmVhMzFiZjQ3Nzc4YTI0MDFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZkODg5ZTBjNGQ3NDQxZTM5NTdlYjQ1YWUxMDQyMDQ4LmJpbmRQb3B1cChwb3B1cF85MTUwZWFhMDc2ODg0MGI1YThlOTYzODcxMWIwNTRiMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzI2NDE0NzVlMmVmNDA2NDgzZjY3ODA1Y2Q1N2NiZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODA2MTEsIC03My45OTQ3NTgyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTcyMzgyNWNmMWUxNGNkOWFiZjc3MzhiNWIwN2QzZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTMwZDQ3Mzg4YWE0MTllOGI0ZjkyYWY3MTg5OGVhZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMWUzMGQ0NzM4OGFhNDE5ZThiNGY5MmFmNzE4OThlYWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcnJvbGwgU3QgJiBTbWl0aCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwMjxicj4gbmV0IGRlcGFydHVyZXM6IDE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3MjM4MjVjZjFlMTRjZDlhYmY3NzM4YjViMDdkM2U4LnNldENvbnRlbnQoaHRtbF8xZTMwZDQ3Mzg4YWE0MTllOGI0ZjkyYWY3MTg5OGVhZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMjY0MTQ3NWUyZWY0MDY0ODNmNjc4MDVjZDU3Y2JkNi5iaW5kUG9wdXAocG9wdXBfNTcyMzgyNWNmMWUxNGNkOWFiZjc3MzhiNWIwN2QzZTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY1OGU4ZGVkNTQyODRkNTE4NzY3NTM2MmY5OWY2N2QwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODA0MjEzLCAtNzMuOTY2OTkxMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY3ZmE0Y2Q4Yzc2NDllODliNWE3ZDMzM2YwNGExNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZDYzNDgyNzE5MTQ0NjdkYjYxNjU2ODQzNTZlMzUyMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWQ2MzQ4MjcxOTE0NDY3ZGI2MTY1Njg0MzU2ZTM1MjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdGhlZHJhbCBQa3d5ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTczPGJyPiBuZXQgZGVwYXJ0dXJlczogLTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmY3ZmE0Y2Q4Yzc2NDllODliNWE3ZDMzM2YwNGExNzguc2V0Q29udGVudChodG1sXzVkNjM0ODI3MTkxNDQ2N2RiNjE2NTY4NDM1NmUzNTIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY1OGU4ZGVkNTQyODRkNTE4NzY3NTM2MmY5OWY2N2QwLmJpbmRQb3B1cChwb3B1cF9mZjdmYTRjZDhjNzY0OWU4OWI1YTdkMzMzZjA0YTE3OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk5YTZlYzcwMWVkNDk1NzlmN2EyNGEyNTQ0MGJhODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzg3MjQyMDAwMDAwMDUsIC03My45OTU5OTA5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkZTdlZWE3YzFlZTQ3Mzk5NmE1M2YxNWY5Yzc3ZTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTA2MjJkYTBjNTRkNGI4YTgwMjBjZDg3M2ZjNGI1MDkgPSAkKGA8ZGl2IGlkPSJodG1sX2UwNjIyZGEwYzU0ZDRiOGE4MDIwY2Q4NzNmYzRiNTA5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TbWl0aCBTdCAmIDMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Njxicj4gbmV0IGRlcGFydHVyZXM6IDI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkZTdlZWE3YzFlZTQ3Mzk5NmE1M2YxNWY5Yzc3ZTJhLnNldENvbnRlbnQoaHRtbF9lMDYyMmRhMGM1NGQ0YjhhODAyMGNkODczZmM0YjUwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOTlhNmVjNzAxZWQ0OTU3OWY3YTI0YTI1NDQwYmE4OC5iaW5kUG9wdXAocG9wdXBfZGRlN2VlYTdjMWVlNDczOTk2YTUzZjE1ZjljNzdlMmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzZDY5Mzc3YTJiYzRmMjZhM2I3NDZlZGUzZWE4MGY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgwOTU5MSwgLTczLjk5OTA1NzA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iM2FjZDNjZGU3ZTE0ZmZiYTY4ZWIyZWNjNGM5NmY5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlOGZhZDA2YmZjNDRhMmM4YTMxZTVmNDgwYzEyZmEzID0gJChgPGRpdiBpZD0iaHRtbF9jZThmYWQwNmJmYzQ0YTJjOGEzMWU1ZjQ4MGMxMmZhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MSBQbCAmIENsaW50b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Mjxicj4gbmV0IGRlcGFydHVyZXM6IDI0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzYWNkM2NkZTdlMTRmZmJhNjhlYjJlY2M0Yzk2Zjk0LnNldENvbnRlbnQoaHRtbF9jZThmYWQwNmJmYzQ0YTJjOGEzMWU1ZjQ4MGMxMmZhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80M2Q2OTM3N2EyYmM0ZjI2YTNiNzQ2ZWRlM2VhODBmOS5iaW5kUG9wdXAocG9wdXBfYjNhY2QzY2RlN2UxNGZmYmE2OGViMmVjYzRjOTZmOTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4ZjVjNTg0YjI2NzQyNzJhNDRlNDNmNjVlNGU3YTlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkzNDMzNzAwMDAwMDEsIC03My45NDk0NTAwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjZmMTM2OTA0MDE3NDkwY2FjNjVmYTY2MDk0MjNjYWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MGM2NGQxODgxMWM0YTU4YjYxZTdmMmE4ZDQxMDE3YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjBjNjRkMTg4MTFjNGE1OGI2MWU3ZjJhOGQ0MTAxN2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTA2IFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNTxicj4gbmV0IGRlcGFydHVyZXM6IDEwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2ZjEzNjkwNDAxNzQ5MGNhYzY1ZmE2NjA5NDIzY2FhLnNldENvbnRlbnQoaHRtbF82MGM2NGQxODgxMWM0YTU4YjYxZTdmMmE4ZDQxMDE3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOGY1YzU4NGIyNjc0MjcyYTQ0ZTQzZjY1ZTRlN2E5ZC5iaW5kUG9wdXAocG9wdXBfYjZmMTM2OTA0MDE3NDkwY2FjNjVmYTY2MDk0MjNjYWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE2YmRlMjJlMWI0NDRlMDg4YWZjMzc5YTEwMTIzODlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyODAwMywgLTczLjk5OTkwNDE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDE3MTlhY2Q1NGQ0ZmU0OTA4MWZhNzRhMzZkMTU4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1ZjVjN2ExOWY3ZDQ1NTNhYzk3OGQ5YWI3YjE4MmM1ID0gJChgPGRpdiBpZD0iaHRtbF8yNWY1YzdhMTlmN2Q0NTUzYWM5NzhkOWFiN2IxODJjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHJlc2lkZW50IFN0ICYgSGVucnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQxNzE5YWNkNTRkNGZlNDkwODFmYTc0YTM2ZDE1ODYuc2V0Q29udGVudChodG1sXzI1ZjVjN2ExOWY3ZDQ1NTNhYzk3OGQ5YWI3YjE4MmM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE2YmRlMjJlMWI0NDRlMDg4YWZjMzc5YTEwMTIzODlkLmJpbmRQb3B1cChwb3B1cF9mNDE3MTlhY2Q1NGQ0ZmU0OTA4MWZhNzRhMzZkMTU4NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI3NmY1NWQwZjk1NDFkOGJhMTEwNDdkNTEyN2RiNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODMwNDU2LCAtNzQuMDAzNDg1NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzYWI1ZGRkMjIyODQ1NjM4ZTg4YzBlYmUyZTcwNDM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmIzZDMxOWIxYzVmNGViN2E2MWViYTM5M2UxNzE4NjYgPSAkKGA8ZGl2IGlkPSJodG1sX2ZiM2QzMTliMWM1ZjRlYjdhNjFlYmEzOTNlMTcxODY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXJyb2xsIFN0ICYgQ29sdW1iaWEgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Nzxicj4gbmV0IGRlcGFydHVyZXM6IDU4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzYWI1ZGRkMjIyODQ1NjM4ZTg4YzBlYmUyZTcwNDM4LnNldENvbnRlbnQoaHRtbF9mYjNkMzE5YjFjNWY0ZWI3YTYxZWJhMzkzZTE3MTg2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80Mjc2ZjU1ZDBmOTU0MWQ4YmExMTA0N2Q1MTI3ZGI3Ni5iaW5kUG9wdXAocG9wdXBfZjNhYjVkZGQyMjI4NDU2MzhlODhjMGViZTJlNzA0MzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwN2YxYzE0NzRjZDRlZmRhMDEyYzQzOTIxZjk0Y2M4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkzMjk2NjgsIC03My45NDMyMDgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjE0M2M4MjdhY2U2NDA5YWE5MjMxNGIwYzNiZWMxNGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMzNiNDAyMGMyMGY0YjBmYTMxYzJiZDM1Zjc3MGRhZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDMzYjQwMjBjMjBmNGIwZmEzMWMyYmQzNWY3NzBkYWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTA5IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0ODxicj4gbmV0IGRlcGFydHVyZXM6IDE5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxNDNjODI3YWNlNjQwOWFhOTIzMTRiMGMzYmVjMTRmLnNldENvbnRlbnQoaHRtbF8wMzNiNDAyMGMyMGY0YjBmYTMxYzJiZDM1Zjc3MGRhZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMDdmMWMxNDc0Y2Q0ZWZkYTAxMmM0MzkyMWY5NGNjOC5iaW5kUG9wdXAocG9wdXBfYjE0M2M4MjdhY2U2NDA5YWE5MjMxNGIwYzNiZWMxNGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmZWVjNjMyZDVjYjRiODJiMGM4MWUxMzg2ODNmYTY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg5MjUyOSwgLTczLjkzOTU2MjM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjMzNjBiOGEzYTZiNDdlNmE3M2MwNzVhNTc0NThhMjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTcwN2U4NjFmMWQ0YTc3YWI4MTAwZjc3ZWM0MGNlNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjU3MDdlODYxZjFkNGE3N2FiODEwMGY3N2VjNDBjZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTA2IFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMTxicj4gbmV0IGRlcGFydHVyZXM6IDE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzMzYwYjhhM2E2YjQ3ZTZhNzNjMDc1YTU3NDU4YTI4LnNldENvbnRlbnQoaHRtbF9iNTcwN2U4NjFmMWQ0YTc3YWI4MTAwZjc3ZWM0MGNlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZmVlYzYzMmQ1Y2I0YjgyYjBjODFlMTM4NjgzZmE2OC5iaW5kUG9wdXAocG9wdXBfMjMzNjBiOGEzYTZiNDdlNmE3M2MwNzVhNTc0NThhMjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViNTM4NDQxOTAyZjRmMDhhYTRhMzQxNWRhYmVhNmRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgxMjExNzAwMDAwMDA2LCAtNzQuMDA4NjA5MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMTdkZmQxN2NjOTI0ZjIxYjI1ODZmNDhkZDgyNzM2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyYzljN2M2ZmNhNjRlZDY4MGRmMjc5NTc2ZjdjYTBjID0gJChgPGRpdiBpZD0iaHRtbF82MmM5YzdjNmZjYTY0ZWQ2ODBkZjI3OTU3NmY3Y2EwYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29tbWVyY2UgU3QgJiBWYW4gQnJ1bnQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDxicj4gbmV0IGRlcGFydHVyZXM6IC0xNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMTdkZmQxN2NjOTI0ZjIxYjI1ODZmNDhkZDgyNzM2NC5zZXRDb250ZW50KGh0bWxfNjJjOWM3YzZmY2E2NGVkNjgwZGYyNzk1NzZmN2NhMGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWI1Mzg0NDE5MDJmNGYwOGFhNGEzNDE1ZGFiZWE2ZGEuYmluZFBvcHVwKHBvcHVwXzMxN2RmZDE3Y2M5MjRmMjFiMjU4NmY0OGRkODI3MzY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzIyZTljNjc3NDE0OTYzYjhhMzk3MGYyNmE0OTJhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3OTQzMjcwMDAwMDAxLCAtNzQuMDA3ODUwNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2YjM0NmE1MDA1ZDRhNmM4MzViYTI1OTRmNDc0NTE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2NkZjAyNTJkOWIyNGI5NTliZGM3MTljNTIxYzZiNTQgPSAkKGA8ZGl2IGlkPSJodG1sXzdjZGYwMjUyZDliMjRiOTU5YmRjNzE5YzUyMWM2YjU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaWNoYXJkcyBTdCAmIERlbGF2YW4gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2PGJyPiBuZXQgZGVwYXJ0dXJlczogMTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTZiMzQ2YTUwMDVkNGE2YzgzNWJhMjU5NGY0NzQ1MTcuc2V0Q29udGVudChodG1sXzdjZGYwMjUyZDliMjRiOTU5YmRjNzE5YzUyMWM2YjU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjMjJlOWM2Nzc0MTQ5NjNiOGEzOTcwZjI2YTQ5MmFlLmJpbmRQb3B1cChwb3B1cF8xNmIzNDZhNTAwNWQ0YTZjODM1YmEyNTk0ZjQ3NDUxNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODA2MjQ4ZGRjYTZiNDY1MDhhMjdkZjkyMmVhMTNjNmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzY5OTkzLCAtNzQuMDA2NDcxMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTE0NmY1ZGIxOTQ0MTYyYWRhM2JlMzM1YzI0YWU5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5MzM5NGVjZmRlMzQ5YTBiMjU4N2Y4MTU5MTU2ZDRhID0gJChgPGRpdiBpZD0iaHRtbF85OTMzOTRlY2ZkZTM0OWEwYjI1ODdmODE1OTE1NmQ0YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1iaWEgU3QgJiBXIDkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE1PGJyPiBuZXQgZGVwYXJ0dXJlczogMTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWExNDZmNWRiMTk0NDE2MmFkYTNiZTMzNWMyNGFlOTIuc2V0Q29udGVudChodG1sXzk5MzM5NGVjZmRlMzQ5YTBiMjU4N2Y4MTU5MTU2ZDRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgwNjI0OGRkY2E2YjQ2NTA4YTI3ZGY5MjJlYTEzYzZjLmJpbmRQb3B1cChwb3B1cF9lYTE0NmY1ZGIxOTQ0MTYyYWRhM2JlMzM1YzI0YWU5MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjQ3NThmYmZjYzQwNGY0NWJmMDdkNjNiOGY2YTAwNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzYzNzQ0LCAtNzQuMDAzMjQ5NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczNzg5N2RhN2MzODQ0MTlhNmMyMTcxN2I5OTI1NTRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDJkZTY4MDhiYzQ3NGZmMzkzNmJkNDVhYzE1Njg4YmMgPSAkKGA8ZGl2IGlkPSJodG1sX2QyZGU2ODA4YmM0NzRmZjM5MzZiZDQ1YWMxNTY4OGJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZW5yeSBTdCAmIFcgOSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjc8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Mzc4OTdkYTdjMzg0NDE5YTZjMjE3MTdiOTkyNTU0Yy5zZXRDb250ZW50KGh0bWxfZDJkZTY4MDhiYzQ3NGZmMzkzNmJkNDVhYzE1Njg4YmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjQ3NThmYmZjYzQwNGY0NWJmMDdkNjNiOGY2YTAwNjkuYmluZFBvcHVwKHBvcHVwXzczNzg5N2RhN2MzODQ0MTlhNmMyMTcxN2I5OTI1NTRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Y2YwYzM4ZWI5YzE0NjgxODQ3OTAxODc1YTNiNWUxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3ODM1NjMsIC03NC4wMDAxNDUwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDY5MTA4ZWM2ZWJjNDM2YTg4NjRlMjQ4MDNkYWNmMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDcxNmJhNDJmZjE0OThiYmYwNjY5MjFhNjFlMGFhMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTA3MTZiYTQyZmYxNDk4YmJmMDY2OTIxYTYxZTBhYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gU3QgJiA0IFBsYWNlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAzOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjkxMDhlYzZlYmM0MzZhODg2NGUyNDgwM2RhY2YyMy5zZXRDb250ZW50KGh0bWxfYTA3MTZiYTQyZmYxNDk4YmJmMDY2OTIxYTYxZTBhYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2NmMGMzOGViOWMxNDY4MTg0NzkwMTg3NWEzYjVlMTMuYmluZFBvcHVwKHBvcHVwXzQ2OTEwOGVjNmViYzQzNmE4ODY0ZTI0ODAzZGFjZjIzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZGJlZGJiODk4ZTU0MjAzYmZiMzQ1ZjY2ZTY5Mzg3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NjM5NDcsIC03My45OTg2OTg5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkN2QwNTM3MjZkODRkNGM5OGJkNzdiNDk1NDhjZDVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWEzZWM1NGRjMzVlNGI4MDk5YWY1YzhhYTU5ZWZkZjYgPSAkKGA8ZGl2IGlkPSJodG1sX2VhM2VjNTRkYzM1ZTRiODA5OWFmNWM4YWE1OWVmZGY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db3VydCBTdCAmIE5lbHNvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUzPGJyPiBuZXQgZGVwYXJ0dXJlczogMTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQ3ZDA1MzcyNmQ4NGQ0Yzk4YmQ3N2I0OTU0OGNkNWQuc2V0Q29udGVudChodG1sX2VhM2VjNTRkYzM1ZTRiODA5OWFmNWM4YWE1OWVmZGY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkYmVkYmI4OThlNTQyMDNiZmIzNDVmNjZlNjkzODdjLmJpbmRQb3B1cChwb3B1cF9mZDdkMDUzNzI2ZDg0ZDRjOThiZDc3YjQ5NTQ4Y2Q1ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2NiNDUwNmYxYzVhNGI0MWE3N2FiNTAyMTIxMDAyYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzQ2OTU3MDAwMDAwMSwgLTczLjk5Nzg1NzY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE0YTEyYTVhNzdjNDcwNmIxNmZlNWZjYjhlZTYwZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNDg0Mzk0N2VjNDE0NmU0OTg5ODhmZDBiNzg1NTM1MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDQ4NDM5NDdlYzQxNDZlNDk4OTg4ZmQwYjc4NTUzNTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNtaXRoIFN0ICYgOSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTU4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhNGExMmE1YTc3YzQ3MDZiMTZmZTVmY2I4ZWU2MGRhLnNldENvbnRlbnQoaHRtbF9kNDg0Mzk0N2VjNDE0NmU0OTg5ODhmZDBiNzg1NTM1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zY2I0NTA2ZjFjNWE0YjQxYTc3YWI1MDIxMjEwMDJiNC5iaW5kUG9wdXAocG9wdXBfMWE0YTEyYTVhNzdjNDcwNmIxNmZlNWZjYjhlZTYwZGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y1NzllOTQyMDA1NDQzOWU4NWE4MDQ0YzM5NjE4OGFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjcyNjAyOTgxNTAxMjYsIC03My45ODk4MzAwMTcwODk4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YjI3MmU2YjgwZDY0NWU0YjkwODkzM2YzZDAwYzE5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyMmZkOWEzZDUwZTQ3YTg4ZGIxOTc3MTRhYWM0NGZhID0gJChgPGRpdiBpZD0iaHRtbF82MjJmZDlhM2Q1MGU0N2E4OGRiMTk3NzE0YWFjNDRmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NyBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGIyNzJlNmI4MGQ2NDVlNGI5MDg5MzNmM2QwMGMxOTIuc2V0Q29udGVudChodG1sXzYyMmZkOWEzZDUwZTQ3YTg4ZGIxOTc3MTRhYWM0NGZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y1NzllOTQyMDA1NDQzOWU4NWE4MDQ0YzM5NjE4OGFkLmJpbmRQb3B1cChwb3B1cF84YjI3MmU2YjgwZDY0NWU0YjkwODkzM2YzZDAwYzE5MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTc4ZGE4ZWYwZjYwNDIwYzg0MjQyYWIwNDVhOTFlYWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTYxNTM0OTk5OTk5OTYsIC03My45NDc4MjE0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODA2ZjZiZjY0NmJjNDU1Yzk2Mjk3NTVlYTk5Nzg0ODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yM2FmODY5OTZkMjU0ZDExYjAwZGQ0ZDc0NGY4NDY2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjNhZjg2OTk2ZDI1NGQxMWIwMGRkNGQ3NDRmODQ2NjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTEwIFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA1OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MDZmNmJmNjQ2YmM0NTVjOTYyOTc1NWVhOTk3ODQ4My5zZXRDb250ZW50KGh0bWxfMjNhZjg2OTk2ZDI1NGQxMWIwMGRkNGQ3NDRmODQ2NjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTc4ZGE4ZWYwZjYwNDIwYzg0MjQyYWIwNDVhOTFlYWEuYmluZFBvcHVwKHBvcHVwXzgwNmY2YmY2NDZiYzQ1NWM5NjI5NzU1ZWE5OTc4NDgzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzAyZTdkNTdlM2Y0MGMzOTgxNmFhOWM0ODU5Mjk2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MjQ4MTEsIC03My45OTMzMTM5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NWYzYjc0MmUzZTE0ZWJkYWUxYjg3YjFmNTE3MmM2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmYjlkZWI1YWZmMDQzZDQ4N2VlNGRmNWUzYTgxNTllID0gJChgPGRpdiBpZD0iaHRtbF8wZmI5ZGViNWFmZjA0M2Q0ODdlZTRkZjVlM2E4MTU5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MiBBdmUgJiA5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NWYzYjc0MmUzZTE0ZWJkYWUxYjg3YjFmNTE3MmM2Ni5zZXRDb250ZW50KGh0bWxfMGZiOWRlYjVhZmYwNDNkNDg3ZWU0ZGY1ZTNhODE1OWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmMwMmU3ZDU3ZTNmNDBjMzk4MTZhYTljNDg1OTI5NmUuYmluZFBvcHVwKHBvcHVwXzY1ZjNiNzQyZTNlMTRlYmRhZTFiODdiMWY1MTcyYzY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZmZmOWFjMDkzZmY0MDQ2OWFmMjZjOWI5MDhjYWRlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MDIzNzUsIC03My45OTIwMzA3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMGYxZDEzNmVhNjI0MjE3YWUyM2Q0ODkwYTllNjgwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiMGFjNjhjNGFmMTQ3NmM4MWE4NWRhODIxMDFiMjZmID0gJChgPGRpdiBpZD0iaHRtbF84YjBhYzY4YzRhZjE0NzZjODFhODVkYTgyMTAxYjI2ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q291cnQgU3QgJiBTdGF0ZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogOTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDc3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwZjFkMTM2ZWE2MjQyMTdhZTIzZDQ4OTBhOWU2ODA0LnNldENvbnRlbnQoaHRtbF84YjBhYzY4YzRhZjE0NzZjODFhODVkYTgyMTAxYjI2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZmZmOWFjMDkzZmY0MDQ2OWFmMjZjOWI5MDhjYWRlZS5iaW5kUG9wdXAocG9wdXBfMDBmMWQxMzZlYTYyNDIxN2FlMjNkNDg5MGE5ZTY4MDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmYmM2MjFiODNkNjQ5NWVhZGY1Mjg0OGQ0Y2VjNzcwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjcwNTEzNSwgLTczLjk4ODc2NTg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mY2Q5N2M5ZDYwMzE0Y2Y5ODJhZjY1YTZlNGYwNWE1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhNzlmOTUyODE3YTRmMmU5YjUxMTJiMjM2MzBkZDQzID0gJChgPGRpdiBpZD0iaHRtbF9lYTc5Zjk1MjgxN2E0ZjJlOWI1MTEyYjIzNjMwZGQ0MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NCBBdmUgJiA5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTc8YnI+IG5ldCBkZXBhcnR1cmVzOiA0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZjZDk3YzlkNjAzMTRjZjk4MmFmNjVhNmU0ZjA1YTVjLnNldENvbnRlbnQoaHRtbF9lYTc5Zjk1MjgxN2E0ZjJlOWI1MTEyYjIzNjMwZGQ0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZmJjNjIxYjgzZDY0OTVlYWRmNTI4NDhkNGNlYzc3MC5iaW5kUG9wdXAocG9wdXBfZmNkOTdjOWQ2MDMxNGNmOTgyYWY2NWE2ZTRmMDVhNWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiMDE4OTFkYjI4MDRkODBiZjUyZGQzNDcxMGQzMzUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjcwNDkyMjAwMDAwMDA1LCAtNzMuOTg1NDE2NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MWEwZTlkNDIxNmQ0NDM2YmNiZGVmNGVkMTAzYjYzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyMzA0NzE3NDA5ZDQxYjliY2I0YTBiMzM4MmQwYmRiID0gJChgPGRpdiBpZD0iaHRtbF84MjMwNDcxNzQwOWQ0MWI5YmNiNGEwYjMzODJkMGJkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NyBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODA8YnI+IG5ldCBkZXBhcnR1cmVzOiA2MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MWEwZTlkNDIxNmQ0NDM2YmNiZGVmNGVkMTAzYjYzZC5zZXRDb250ZW50KGh0bWxfODIzMDQ3MTc0MDlkNDFiOWJjYjRhMGIzMzgyZDBiZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2IwMTg5MWRiMjgwNGQ4MGJmNTJkZDM0NzEwZDMzNTEuYmluZFBvcHVwKHBvcHVwXzUxYTBlOWQ0MjE2ZDQ0MzZiY2JkZWY0ZWQxMDNiNjNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGI3MDMxNTVkM2U0MzgyOTUzYjQ5YjVjNTNhZDgxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MDQ4MzYwMDAwMDAwNCwgLTczLjk4MjA4OTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGUyNDYwNGQ3ZjY0NDkyZTkyZDA1OWJjZjJhNmRkN2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZGI5ZjJmMDRjNDE0ODc4YjhjMmY0ZDc0YmFmNDU5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2RiOWYyZjA0YzQxNDg3OGI4YzJmNGQ3NGJhZjQ1OWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjUgU3QgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ0PGJyPiBuZXQgZGVwYXJ0dXJlczogMzEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGUyNDYwNGQ3ZjY0NDkyZTkyZDA1OWJjZjJhNmRkN2Quc2V0Q29udGVudChodG1sXzNkYjlmMmYwNGM0MTQ4NzhiOGMyZjRkNzRiYWY0NTlmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0YjcwMzE1NWQzZTQzODI5NTNiNDliNWM1M2FkODEwLmJpbmRQb3B1cChwb3B1cF80ZTI0NjA0ZDdmNjQ0OTJlOTJkMDU5YmNmMmE2ZGQ3ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDY5NmMzYjVjYTJiNGZlYmE1Y2ZiYTU2ZTAwYTljODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzkwOTc5OTcyMTY4NCwgLTczLjk4NzY1NDc0NTU3ODc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2JkYjUxZjIxZDE2NGI1NGI4ZTlmOTNhNGRjY2Q5OTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NmM0MjM2MjZkN2Q0MjY3OWMzMWFiMDI4MWQ3YTZmZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjZjNDIzNjI2ZDdkNDI2NzljMzFhYjAyODFkN2E2ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaW9uIFN0ICYgTmV2aW5zIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmRiNTFmMjFkMTY0YjU0YjhlOWY5M2E0ZGNjZDk5OC5zZXRDb250ZW50KGh0bWxfNjZjNDIzNjI2ZDdkNDI2NzljMzFhYjAyODFkN2E2ZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDY5NmMzYjVjYTJiNGZlYmE1Y2ZiYTU2ZTAwYTljODQuYmluZFBvcHVwKHBvcHVwX2NiZGI1MWYyMWQxNjRiNTRiOGU5ZjkzYTRkY2NkOTk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NWI3MGI2NTQ3N2E0ZmZlOWQyZjliMWMwMWI3Y2Y3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4ODE1MjksIC03My45OTUyMDkxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQwMGRiNzA3MjYxNDRhNTk0ODFmYzc1ZGFkNjU0YzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNmU0ODlmOTRjNmI0ZjhlYmJkMTQxYTBhOTZiOTY1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDZlNDg5Zjk0YzZiNGY4ZWJiZDE0MWEwYTk2Yjk2NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbmdyZXNzIFN0ICYgQ2xpbnRvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkxPGJyPiBuZXQgZGVwYXJ0dXJlczogNDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWQwMGRiNzA3MjYxNDRhNTk0ODFmYzc1ZGFkNjU0YzIuc2V0Q29udGVudChodG1sX2Q2ZTQ4OWY5NGM2YjRmOGViYmQxNDFhMGE5NmI5NjU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk1YjcwYjY1NDc3YTRmZmU5ZDJmOWIxYzAxYjdjZjc1LmJpbmRQb3B1cChwb3B1cF9lZDAwZGI3MDcyNjE0NGE1OTQ4MWZjNzVkYWQ2NTRjMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjQ3Zjk1MzQ5MWE3NDE4MDgzYmQ5MWYyMjM1MDI2MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODY3NDQyOTk5OTk5OTQsIC03My45OTA2MzE2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4ZGM2NzNiZjY4NTQ3NjU4N2I2MDNiNGRjNjQ3NjQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGE2MjUxNTUyODBlNDBmODk4MTFhMTVlYjUwNzI3N2UgPSAkKGA8ZGl2IGlkPSJodG1sXzhhNjI1MTU1MjgwZTQwZjg5ODExYTE1ZWI1MDcyNzdlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZXJnZW4gU3QgJiBTbWl0aCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTUxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNThkYzY3M2JmNjg1NDc2NTg3YjYwM2I0ZGM2NDc2NDMuc2V0Q29udGVudChodG1sXzhhNjI1MTU1MjgwZTQwZjg5ODExYTE1ZWI1MDcyNzdlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0N2Y5NTM0OTFhNzQxODA4M2JkOTFmMjIzNTAyNjExLmJpbmRQb3B1cChwb3B1cF81OGRjNjczYmY2ODU0NzY1ODdiNjAzYjRkYzY0NzY0MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzIxMDA5MDY3Mzc2NDU5ZThkOGU5NjgwNzk0ZTJjODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODY0NDQyMDAwMDAwMDQsIC03My45ODc1OTEwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjgxMTU2MmVhNzAxNGM3M2EzMTMxYzhhZGFmMDI0YjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTg2ODFiZTE5NTY0N2UzYjQwM2MwMWFlMDg5MDhhYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzE4NjgxYmUxOTU2NDdlM2I0MDNjMDFhZTA4OTA4YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlYW4gU3QgJiBIb3l0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDM8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iODExNTYyZWE3MDE0YzczYTMxMzFjOGFkYWYwMjRiNi5zZXRDb250ZW50KGh0bWxfNzE4NjgxYmUxOTU2NDdlM2I0MDNjMDFhZTA4OTA4YWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzIxMDA5MDY3Mzc2NDU5ZThkOGU5NjgwNzk0ZTJjODIuYmluZFBvcHVwKHBvcHVwX2I4MTE1NjJlYTcwMTRjNzNhMzEzMWM4YWRhZjAyNGI2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZGU1ZjRmNTFlNGU0MDk5OTc0MDk1MjhiMjFhNjlkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NDk2NjgsIC03My45ODYyMDc3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWY5OGQyOWRlOTZjNGJhYTg4NTcwYmUxMDMxYmM1MDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTQyNjI4YTBkMDg0Y2RjOWM3MTJhNjQ0ZDI0NTFiNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTk0MjYyOGEwZDA4NGNkYzljNzEyYTY0NGQyNDUxYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJvbmQgU3QgJiBCZXJnZW4gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Njxicj4gbmV0IGRlcGFydHVyZXM6IDMwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VmOThkMjlkZTk2YzRiYWE4ODU3MGJlMTAzMWJjNTAzLnNldENvbnRlbnQoaHRtbF9hOTQyNjI4YTBkMDg0Y2RjOWM3MTJhNjQ0ZDI0NTFiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZGU1ZjRmNTFlNGU0MDk5OTc0MDk1MjhiMjFhNjlkMC5iaW5kUG9wdXAocG9wdXBfZWY5OGQyOWRlOTZjNGJhYTg4NTcwYmUxMDMxYmM1MDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4N2YyOTRjZWUzODQ5MTNiNzliNjMxZTE2YTg5Yzk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg1Mzc2MSwgLTczLjk4MzAyMTM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjI3NDUxNzk2NGU0NDdhMTkwNDliNGQwMjgwMmI4M2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjlkY2IxZGVkZTk0N2M0YWEzOGVhODRhMjU4Y2YxYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTI5ZGNiMWRlZGU5NDdjNGFhMzhlYTg0YTI1OGNmMWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhY2lmaWMgU3QgJiBOZXZpbnMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2MDxicj4gbmV0IGRlcGFydHVyZXM6IDI1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyNzQ1MTc5NjRlNDQ3YTE5MDQ5YjRkMDI4MDJiODNmLnNldENvbnRlbnQoaHRtbF81MjlkY2IxZGVkZTk0N2M0YWEzOGVhODRhMjU4Y2YxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ODdmMjk0Y2VlMzg0OTEzYjc5YjYzMWUxNmE4OWM5NS5iaW5kUG9wdXAocG9wdXBfYjI3NDUxNzk2NGU0NDdhMTkwNDliNGQwMjgwMmI4M2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkZjczODlkYWFmMjRjMjM5ZGNiNGU0MjY0MjljZDgzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyNzU0OSwgLTczLjk4MjU4NTU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNmZjM2NmYWVmMTc0ZGMxYmM4YjI1NWRjMzYxZDkzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0MzgyZmI4N2Y0NjQxYzE4MWY5MWE5MDM0OTY1MmQyID0gJChgPGRpdiBpZD0iaHRtbF9iNDM4MmZiODdmNDY0MWMxODFmOTFhOTAzNDk2NTJkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V3lja29mZiBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjg8YnI+IG5ldCBkZXBhcnR1cmVzOiA0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2ZmMzY2ZhZWYxNzRkYzFiYzhiMjU1ZGMzNjFkOTNkLnNldENvbnRlbnQoaHRtbF9iNDM4MmZiODdmNDY0MWMxODFmOTFhOTAzNDk2NTJkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZGY3Mzg5ZGFhZjI0YzIzOWRjYjRlNDI2NDI5Y2Q4My5iaW5kUG9wdXAocG9wdXBfMTZmYzNjZmFlZjE3NGRjMWJjOGIyNTVkYzM2MWQ5M2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjNTUwZmM2MDQxMTRhZmZhNTk5YjRhNTczN2IxZjI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgwOTQ0NzIzNDc3Mjk2LCAtNzMuOTc1NjczMzE3OTA5MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMzNiNzYwODc2OGE0ZDAwOWVkMjRlOTYzYTY5Y2E0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2MmQzYTUxNGMyODQ0NTA5YjFkZjI1Njg4MjA5ZDhlID0gJChgPGRpdiBpZD0iaHRtbF82NjJkM2E1MTRjMjg0NDUwOWIxZGYyNTY4ODIwOWQ4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVyZ2VuIFN0ICYgRmxhdGJ1c2ggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDMzYjc2MDg3NjhhNGQwMDllZDI0ZTk2M2E2OWNhNGUuc2V0Q29udGVudChodG1sXzY2MmQzYTUxNGMyODQ0NTA5YjFkZjI1Njg4MjA5ZDhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFjNTUwZmM2MDQxMTRhZmZhNTk5YjRhNTczN2IxZjI5LmJpbmRQb3B1cChwb3B1cF9kMzNiNzYwODc2OGE0ZDAwOWVkMjRlOTYzYTY5Y2E0ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGViNTdiMWY5ZWU2NGU4ZjlmMDI1YTQyNGE2OTI5ZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzkzMzA3LCAtNzMuOTc1MTk1MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5MWNkZTAwOGExMjRhZjRhMDEyMzc5ZGIzYzMxZjNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTYxZTZiZTIyOWJkNGZhNGI4OTYzOGEyODc1MGZmYWUgPSAkKGA8ZGl2IGlkPSJodG1sXzE2MWU2YmUyMjliZDRmYTRiODk2MzhhMjg3NTBmZmFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Qcm9zcGVjdCBQbCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOTFjZGUwMDhhMTI0YWY0YTAxMjM3OWRiM2MzMWYzZi5zZXRDb250ZW50KGh0bWxfMTYxZTZiZTIyOWJkNGZhNGI4OTYzOGEyODc1MGZmYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGViNTdiMWY5ZWU2NGU4ZjlmMDI1YTQyNGE2OTI5ZTcuYmluZFBvcHVwKHBvcHVwX2Q5MWNkZTAwOGExMjRhZjRhMDEyMzc5ZGIzYzMxZjNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MWFkNTQyZWEyMDU0YTIzOWNlN2FjNmJkMGU0Y2QyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NzYxNDcwMDAwMDAxLCAtNzMuOTczMjQyODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTI4NjZjNzU3MTk0MjhiYWE4MWYyZDAyODA1OGY0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjY2E5YmY1ZGI0MTQ0Y2ZiYjIxOTRlMjY5NDQzMjI2ID0gJChgPGRpdiBpZD0iaHRtbF9kY2NhOWJmNWRiNDE0NGNmYmIyMTk0ZTI2OTQ0MzIyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NyBBdmUgJiBQYXJrIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA5PGJyPiBuZXQgZGVwYXJ0dXJlczogMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDUyODY2Yzc1NzE5NDI4YmFhODFmMmQwMjgwNThmNGEuc2V0Q29udGVudChodG1sX2RjY2E5YmY1ZGI0MTQ0Y2ZiYjIxOTRlMjY5NDQzMjI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxYWQ1NDJlYTIwNTRhMjM5Y2U3YWM2YmQwZTRjZDIyLmJpbmRQb3B1cChwb3B1cF9kNTI4NjZjNzU3MTk0MjhiYWE4MWYyZDAyODA1OGY0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTMyZjQ3N2FkNGE5NDI5MDg5ODU1YjJkZGU3NGMyMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzk1NzY2LCAtNzMuOTc4NTQ5NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiODI1Y2RkMDBiMTQzZGM5MDFjZGI4ZDMyOGEzOTA5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzZlZGIxMTQxMGVkNGNhNjk5OWIxNzNhZGUzYzdlNWUgPSAkKGA8ZGl2IGlkPSJodG1sX2M2ZWRiMTE0MTBlZDRjYTY5OTliMTczYWRlM2M3ZTVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYWx0aWMgU3QgJiA1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc0PGJyPiBuZXQgZGVwYXJ0dXJlczogNDIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2I4MjVjZGQwMGIxNDNkYzkwMWNkYjhkMzI4YTM5MDkuc2V0Q29udGVudChodG1sX2M2ZWRiMTE0MTBlZDRjYTY5OTliMTczYWRlM2M3ZTVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EzMmY0NzdhZDRhOTQyOTA4OTg1NWIyZGRlNzRjMjJiLmJpbmRQb3B1cChwb3B1cF9jYjgyNWNkZDAwYjE0M2RjOTAxY2RiOGQzMjhhMzkwOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjNlYzczMTJiYjlmNDQ4NTg5NDQzNjQzYTg5YmU3MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzUwMjA3MDAwMDAwMDUsIC03My45NzExMTQ3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiODljYTY5ZDkxZDRlODg4MTc1Zjg5MWVkODExOGFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzQ5Zjg1OGJiZDZiNGI3YmJlNzgyYWZlN2NkZjY0ODEgPSAkKGA8ZGl2IGlkPSJodG1sXzc0OWY4NThiYmQ2YjRiN2JiZTc4MmFmZTdjZGY2NDgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QbGF6YSBTdCBXZXN0ICYgRmxhdGJ1c2ggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODk8YnI+IG5ldCBkZXBhcnR1cmVzOiAwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiODljYTY5ZDkxZDRlODg4MTc1Zjg5MWVkODExOGFkLnNldENvbnRlbnQoaHRtbF83NDlmODU4YmJkNmI0YjdiYmU3ODJhZmU3Y2RmNjQ4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mM2VjNzMxMmJiOWY0NDg1ODk0NDM2NDNhODliZTcxZC5iaW5kUG9wdXAocG9wdXBfYmI4OWNhNjlkOTFkNGU4ODgxNzVmODkxZWQ4MTE4YWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0YjExNzVkMzY4NTQ2MjJiNTc4MGQ0MmY3MGI1M2JmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc5Mjc4Nzk5OTk5OTksIC03My45ODE1NDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmUxYzIyOTRjNWI0YTIzOWUzNGFjNDkwZjE0NjE2YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4NzY0YTNhNDhlNjQ4NjI5NmE4YThjZTUxZjBlYmJkID0gJChgPGRpdiBpZD0iaHRtbF8yODc2NGEzYTQ4ZTY0ODYyOTZhOGE4Y2U1MWYwZWJiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RG91Z2xhc3MgU3QgJiA0IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiZTFjMjI5NGM1YjRhMjM5ZTM0YWM0OTBmMTQ2MTZhLnNldENvbnRlbnQoaHRtbF8yODc2NGEzYTQ4ZTY0ODYyOTZhOGE4Y2U1MWYwZWJiZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NGIxMTc1ZDM2ODU0NjIyYjU3ODBkNDJmNzBiNTNiZi5iaW5kUG9wdXAocG9wdXBfOGJlMWMyMjk0YzViNGEyMzllMzRhYzQ5MGYxNDYxNmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2ZmE2YWFiMjNmYjQ0OGZhN2M4NGIzNjJkYzE3OWRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgwMjEzMywgLTczLjk4NDMyNjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzRlNDM1YTBjNTJhNDQyZWFlZTc1NTNkMTdkNmYzZjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNzQ4Yzc3MDc2ZTI0ZWIwYTI3ODY4NGY1MmMzOTljYSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjc0OGM3NzA3NmUyNGViMGEyNzg2ODRmNTJjMzk5Y2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRvdWdsYXNzIFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMjxicj4gbmV0IGRlcGFydHVyZXM6IC0zNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNGU0MzVhMGM1MmE0NDJlYWVlNzU1M2QxN2Q2ZjNmOS5zZXRDb250ZW50KGh0bWxfYjc0OGM3NzA3NmUyNGViMGEyNzg2ODRmNTJjMzk5Y2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzZmYTZhYWIyM2ZiNDQ4ZmE3Yzg0YjM2MmRjMTc5ZGEuYmluZFBvcHVwKHBvcHVwXzM0ZTQzNWEwYzUyYTQ0MmVhZWU3NTUzZDE3ZDZmM2Y5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYzUwNGZhNTNmZmM0MTYwYmI2NjFhZDhlMmEwZjliMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NDM1NDksIC03My45ODkwMTYyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhNjYzZWU3ZGQ5NjQxOTI4YWZiN2M5M2E1NjJhMDlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjdjN2IxZDk2ZDRjNDc2YmI1OWYyZTQxZThhMWVkODcgPSAkKGA8ZGl2IGlkPSJodG1sXzI3YzdiMWQ5NmQ0YzQ3NmJiNTlmMmU0MWU4YTFlZDg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib3l0IFN0ICYgV2FycmVuIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzOTxicj4gbmV0IGRlcGFydHVyZXM6IDMzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VhNjYzZWU3ZGQ5NjQxOTI4YWZiN2M5M2E1NjJhMDlmLnNldENvbnRlbnQoaHRtbF8yN2M3YjFkOTZkNGM0NzZiYjU5ZjJlNDFlOGExZWQ4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYzUwNGZhNTNmZmM0MTYwYmI2NjFhZDhlMmEwZjliMC5iaW5kUG9wdXAocG9wdXBfZWE2NjNlZTdkZDk2NDE5MjhhZmI3YzkzYTU2MmEwOWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjYjQ2MGNmOWZlOTQ1MzA4MzZmMjI0NDlkYjMxNzUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg1OTI5NiwgLTc0LjAwMjQyMzY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTE1NGY5YTVmYTFkNDkyZGExNTlmMTcyNjU1NjY2YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMDQ5MTE5MTg2NWM0ZmE0OGJlYjUyZjc3OGQ2OGRhYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzA0OTExOTE4NjVjNGZhNDhiZWI1MmY3NzhkNjhkYWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbHVtYmlhIFN0ICYgRGVncmF3IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogODc8YnI+IG5ldCBkZXBhcnR1cmVzOiA2My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMTU0ZjlhNWZhMWQ0OTJkYTE1OWYxNzI2NTU2NjZjNy5zZXRDb250ZW50KGh0bWxfMzA0OTExOTE4NjVjNGZhNDhiZWI1MmY3NzhkNjhkYWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmNiNDYwY2Y5ZmU5NDUzMDgzNmYyMjQ0OWRiMzE3NTEuYmluZFBvcHVwKHBvcHVwX2ExNTRmOWE1ZmExZDQ5MmRhMTU5ZjE3MjY1NTY2NmM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMTE3M2FlMmViMTE0MTg4YTIzMGE2OGEzMTk4NDM3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2MTA2MzM3MTkwMDYsIC03My45Nzk0NTI1NTA0MTEyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk3NmFjN2M4Y2IzMDRiZGM4MDQ0NjFiYzhlYzlmZjcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTAzNzYyNTQyNmM5NDVmMzg2MGRiYTVkNGUxNmZmOTggPSAkKGA8ZGl2IGlkPSJodG1sX2UwMzc2MjU0MjZjOTQ1ZjM4NjBkYmE1ZDRlMTZmZjk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IERyaXZlICYgUHJvc3BlY3QgUGFyayBXZXN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTAyPGJyPiBuZXQgZGVwYXJ0dXJlczogNDMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTc2YWM3YzhjYjMwNGJkYzgwNDQ2MWJjOGVjOWZmNzAuc2V0Q29udGVudChodG1sX2UwMzc2MjU0MjZjOTQ1ZjM4NjBkYmE1ZDRlMTZmZjk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UxMTczYWUyZWIxMTQxODhhMjMwYTY4YTMxOTg0MzczLmJpbmRQb3B1cChwb3B1cF85NzZhYzdjOGNiMzA0YmRjODA0NDYxYmM4ZWM5ZmY3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQ4YjcxM2FhNzczNGY3ZjllMWM2ZjBkYzc2Y2IyMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTE5NzYsIC03My45NDU5OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTRjYmNlZjQzODM0OWYzYjI5YTZhNzY4ZDJiZDM4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwMzhlODZlMGY4NjQ0Nzc5Mjk5NzkxMDU5YmVhNzU4ID0gJChgPGRpdiBpZD0iaHRtbF82MDM4ZTg2ZTBmODY0NDc3OTI5OTc5MTA1OWJlYTc1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMDYgU3QgJiBMZXhpbmd0b24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMzxicj4gbmV0IGRlcGFydHVyZXM6IDE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxNGNiY2VmNDM4MzQ5ZjNiMjlhNmE3NjhkMmJkMzhiLnNldENvbnRlbnQoaHRtbF82MDM4ZTg2ZTBmODY0NDc3OTI5OTc5MTA1OWJlYTc1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZDhiNzEzYWE3NzM0ZjdmOWUxYzZmMGRjNzZjYjIxNi5iaW5kUG9wdXAocG9wdXBfMDE0Y2JjZWY0MzgzNDlmM2IyOWE2YTc2OGQyYmQzOGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiMTBjOWU2YzhlMzQ0YmViYjMzYTFlYzYwNWZjM2ZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg5MjEwNDk5OTk5OTk2LCAtNzMuOTQzNzA3ODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0ZWJlNzc2MWM3ZjQxNzc5NDA3ZjM0NTlmNTBlMjQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjkyM2Q1MzZlYzY4NDY2MWIwZDQ4NDJlYjk3M2Q1ZWEgPSAkKGA8ZGl2IGlkPSJodG1sXzY5MjNkNTM2ZWM2ODQ2NjFiMGQ0ODQyZWI5NzNkNWVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4yIEF2ZSAgJiBFIDEwNCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUyPGJyPiBuZXQgZGVwYXJ0dXJlczogMTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzRlYmU3NzYxYzdmNDE3Nzk0MDdmMzQ1OWY1MGUyNDYuc2V0Q29udGVudChodG1sXzY5MjNkNTM2ZWM2ODQ2NjFiMGQ0ODQyZWI5NzNkNWVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiMTBjOWU2YzhlMzQ0YmViYjMzYTFlYzYwNWZjM2ZhLmJpbmRQb3B1cChwb3B1cF9jNGViZTc3NjFjN2Y0MTc3OTQwN2YzNDU5ZjUwZTI0NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmUwMGMxOWY4NGNlNGMwNTk0MTI3YWNiMDVkMGQ4YzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjQzMDUyNzI1MDMzMiwgLTczLjk5NjAwOTgyNjY2MDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxYmE0NTRjMTEzZjRkMzA5YzFlZjhkYjc5NmFiZWNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjMxZjE4MTJkODc0NGQ3MWE4OWRkZTVjMzU0MWZjZjAgPSAkKGA8ZGl2IGlkPSJodG1sX2IzMWYxODEyZDg3NDRkNzFhODlkZGU1YzM1NDFmY2YwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYWZheWV0dGUgU3QgJiBKZXJzZXkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM4OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjQ0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMWJhNDU0YzExM2Y0ZDMwOWMxZWY4ZGI3OTZhYmVjZi5zZXRDb250ZW50KGh0bWxfYjMxZjE4MTJkODc0NGQ3MWE4OWRkZTVjMzU0MWZjZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmUwMGMxOWY4NGNlNGMwNTk0MTI3YWNiMDVkMGQ4YzAuYmluZFBvcHVwKHBvcHVwXzMxYmE0NTRjMTEzZjRkMzA5YzFlZjhkYjc5NmFiZWNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOTQ0MmZkZmM3OWU0MWFmODQyMjE3ZDhlYzE4ZjI4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MDk4MywgLTc0LjAwMTcwMjAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjBmMjJiMmY2MDQ0NDI5ZTk0YmIxNTM1OWQzZDYxYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83M2MyOGFlZDM1NjE0YzVlODI0NjI4MGUyYjliZjlhYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzNjMjhhZWQzNTYxNGM1ZTgyNDYyODBlMmI5YmY5YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjggQXZlICYgVyAxNiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzg1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzODU8YnI+IG5ldCBkZXBhcnR1cmVzOiAwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwZjIyYjJmNjA0NDQyOWU5NGJiMTUzNTlkM2Q2MWIwLnNldENvbnRlbnQoaHRtbF83M2MyOGFlZDM1NjE0YzVlODI0NjI4MGUyYjliZjlhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOTQ0MmZkZmM3OWU0MWFmODQyMjE3ZDhlYzE4ZjI4Ny5iaW5kUG9wdXAocG9wdXBfNjBmMjJiMmY2MDQ0NDI5ZTk0YmIxNTM1OWQzZDYxYjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5OGQ4MmYxODM1OTRhNTE4MmU2MTVmMjU0OTMyMTdkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg1MDY4MDczMDgxNzcsIC03My45Nzc5MDc1OTgwMTg2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwZjNhZWZjOTY5ZDQxODI5MDc3MjBlYzNhYmVmNTBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODIzYTFjN2RlZDFhNDU1ZWFiNjVkYzZmYjBlMDA4OTEgPSAkKGA8ZGl2IGlkPSJodG1sXzgyM2ExYzdkZWQxYTQ1NWVhYjY1ZGM2ZmIwZTAwODkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYW5zb24gUGwgJiBBc2hsYW5kIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwODxicj4gbmV0IGRlcGFydHVyZXM6IDE1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwZjNhZWZjOTY5ZDQxODI5MDc3MjBlYzNhYmVmNTBiLnNldENvbnRlbnQoaHRtbF84MjNhMWM3ZGVkMWE0NTVlYWI2NWRjNmZiMGUwMDg5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82OThkODJmMTgzNTk0YTUxODJlNjE1ZjI1NDkzMjE3ZC5iaW5kUG9wdXAocG9wdXBfNDBmM2FlZmM5NjlkNDE4MjkwNzcyMGVjM2FiZWY1MGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmZmQ4M2RhY2U2MzQ1ZTNiZWE0MmYzM2EyMmY5NzQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE5MDc4OTExNzk1NjQsIC03My45NDIyMzY5MDAzMjk1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfMTY1NjUyNmFiMzY1NDAyY2FmNWZlZGYyNzE5MTU4OWIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGNhNWNlM2I5YWQ1NGQwODhkNTE4OTI2NjFiOWZmNzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNDZiMWVlMzZkMmY0NDVkYjZlMzgxZTc5MzFjNmE5OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTQ2YjFlZTM2ZDJmNDQ1ZGI2ZTM4MWU3OTMxYzZhOTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpY2hhcmRzb24gU3QgJiBOIEhlbnJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Y2E1Y2UzYjlhZDU0ZDA4OGQ1MTg5MjY2MWI5ZmY3My5zZXRDb250ZW50KGh0bWxfYTQ2YjFlZTM2ZDJmNDQ1ZGI2ZTM4MWU3OTMxYzZhOTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmZmZDgzZGFjZTYzNDVlM2JlYTQyZjMzYTIyZjk3NDQuYmluZFBvcHVwKHBvcHVwXzRjYTVjZTNiOWFkNTRkMDg4ZDUxODkyNjYxYjlmZjczKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iN2UxNjVlMmYyNWQ0YWY1YmNjNmJkZWQzYWRlZGQyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NjUyNCwgLTczLjk3Nzg4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZmMWVmZmEzMWY2NTQ3NGM5MTIyNDlhZTg2YTBjZWY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWYwYTc5MzAyOWQ0NGE5NzkyYzBjMGQ0MTdjZDQ3ZTMgPSAkKGA8ZGl2IGlkPSJodG1sXzlmMGE3OTMwMjlkNDRhOTc5MmMwYzBkNDE3Y2Q0N2UzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDM1IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NDxicj4gbmV0IGRlcGFydHVyZXM6IDkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmYxZWZmYTMxZjY1NDc0YzkxMjI0OWFlODZhMGNlZjkuc2V0Q29udGVudChodG1sXzlmMGE3OTMwMjlkNDRhOTc5MmMwYzBkNDE3Y2Q0N2UzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3ZTE2NWUyZjI1ZDRhZjViY2M2YmRlZDNhZGVkZDJlLmJpbmRQb3B1cChwb3B1cF9mZjFlZmZhMzFmNjU0NzRjOTEyMjQ5YWU4NmEwY2VmOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGI1NzZlOWRhYTBkNGI1Yjk5NTUzNTllMTc5Yzk5NjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTAyNTQxNzMzMDQxODQsIC03My45NzcxODM0MDE1ODQ2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1ZjYzOWQ1MmJmNjQ0ZTViYjM5ZDU0ZGRlYzQ1ODI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTViMzgyODMxMmFiNDIwNWJjNDIyYWJiNDU4YjllMDcgPSAkKGA8ZGl2IGlkPSJodG1sX2U1YjM4MjgzMTJhYjQyMDViYzQyMmFiYjQ1OGI5ZTA3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDg4IFN0ICYgV2VzdCBFbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA1My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNWY2MzlkNTJiZjY0NGU1YmIzOWQ1NGRkZWM0NTgyOC5zZXRDb250ZW50KGh0bWxfZTViMzgyODMxMmFiNDIwNWJjNDIyYWJiNDU4YjllMDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGI1NzZlOWRhYTBkNGI1Yjk5NTUzNTllMTc5Yzk5NjguYmluZFBvcHVwKHBvcHVwX2E1ZjYzOWQ1MmJmNjQ0ZTViYjM5ZDU0ZGRlYzQ1ODI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MTRhY2NiN2QxN2E0Y2Y3ODRhZjQzMzI1ZjYxMjIyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxODgyMTk5OTk5OTk5NiwgLTczLjk5NTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzE2NTY1MjZhYjM2NTQwMmNhZjVmZWRmMjcxOTE1ODliKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlY2Q0MzJlOGYyMzQzYjZhYTkxNjkwZmMwY2ZkMTUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2QyNDk1ZDg4MjVmNDNjNWI5NDg0MmQ5NDY2NTczYTUgPSAkKGA8ZGl2IGlkPSJodG1sX2NkMjQ5NWQ4ODI1ZjQzYzViOTQ4NDJkOTQ2NjU3M2E1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFuZCBTdCAmIEVsaXphYmV0aCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzcxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyOTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VjZDQzMmU4ZjIzNDNiNmFhOTE2OTBmYzBjZmQxNTEuc2V0Q29udGVudChodG1sX2NkMjQ5NWQ4ODI1ZjQzYzViOTQ4NDJkOTQ2NjU3M2E1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgxNGFjY2I3ZDE3YTRjZjc4NGFmNDMzMjVmNjEyMjIzLmJpbmRQb3B1cChwb3B1cF9jZWNkNDMyZThmMjM0M2I2YWE5MTY5MGZjMGNmZDE1MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmQ1M2I3YWIwNDg4NDUzZmFlM2RlNGQyYmRhNjcwOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjEzMTksIC03NC4wMTAwNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8xNjU2NTI2YWIzNjU0MDJjYWY1ZmVkZjI3MTkxNTg5Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOWYwOWFlNmVkNzg0MGFmYmEzMmY0M2EyYWJlYWZjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmMDBiYmI5MDRhNTRmYmZiY2E2Mjc3OWI4NTMxYjFiID0gJChgPGRpdiBpZD0iaHRtbF9kZjAwYmJiOTA0YTU0ZmJmYmNhNjI3NzliODUzMWIxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlZW53aWNoIFN0ICYgSHViZXJ0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxODEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3Mzxicj4gbmV0IGRlcGFydHVyZXM6IC04LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5ZjA5YWU2ZWQ3ODQwYWZiYTMyZjQzYTJhYmVhZmMxLnNldENvbnRlbnQoaHRtbF9kZjAwYmJiOTA0YTU0ZmJmYmNhNjI3NzliODUzMWIxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZDUzYjdhYjA0ODg0NTNmYWUzZGU0ZDJiZGE2NzA5MS5iaW5kUG9wdXAocG9wdXBfYjlmMDlhZTZlZDc4NDBhZmJhMzJmNDNhMmFiZWFmYzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x1354588d0>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# plot net departures at 9AM\n",
"\n",
"trip_counts = get_trip_counts_by_hour(9)\n",
"plot_station_counts(trip_counts)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:37.922462Z",
"start_time": "2018-11-28T12:43:35.685665Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4zLjQvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4zLjQvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwLjAlOwogICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgdG9wOiAwLjAlOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0IiA+PC9kaXY+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCA9IEwubWFwKAogICAgICAgICdtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQnLCB7CiAgICAgICAgY2VudGVyOiBbNDAuNzM4LCAtNzMuOThdLAogICAgICAgIHpvb206IDEzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKCgogICAgCiAgICB2YXIgdGlsZV9sYXllcl85ZjM4YmJmMjQ3MGQ0MjhlYWZiOTI4OGRiMWQ0NGU5ZiA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL2NhcnRvZGItYmFzZW1hcHMte3N9Lmdsb2JhbC5zc2wuZmFzdGx5Lm5ldC9kYXJrX2FsbC97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YzYwNTIyYTFlYWM0Njg1YjljZGIxMzYwNDE3NTg0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NzI3MjE2LCAtNzMuOTkzOTI4ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFjM2ZlZWNlNTA0NDg3ODlhZWM3ZmYxMDg5ZmU1ZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lODU0YzczMThlYjY0ZjgxOWNlYjc5Y2M1NjI4MDA3NCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTg1NGM3MzE4ZWI2NGY4MTljZWI3OWNjNTYyODAwNzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNTIgU3QgJiAxMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM2OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjkxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTc3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhYzNmZWVjZTUwNDQ4Nzg5YWVjN2ZmMTA4OWZlNWQ0LnNldENvbnRlbnQoaHRtbF9lODU0YzczMThlYjY0ZjgxOWNlYjc5Y2M1NjI4MDA3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YzYwNTIyYTFlYWM0Njg1YjljZGIxMzYwNDE3NTg0Yi5iaW5kUG9wdXAocG9wdXBfOGFjM2ZlZWNlNTA0NDg3ODlhZWM3ZmYxMDg5ZmU1ZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4MWM0M2EzN2MwMzRlZGViMDNmOTk1NWZkZWVlZDhjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE5MTE1NTIsIC03NC4wMDY2NjY2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkYjAwZDFhMGUzZjQ3YWJhNWM4OWVmYzlmNjZmNjYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODcxYzg3NTQ1NjRkNGFlMGEwZmMzNWYyMmMwZGEzMGQgPSAkKGA8ZGl2IGlkPSJodG1sXzg3MWM4NzU0NTY0ZDRhZTBhMGZjMzVmMjJjMGRhMzBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmFua2xpbiBTdCAmIFcgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzQ3PGJyPiBuZXQgZGVwYXJ0dXJlczogMTQ5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkYjAwZDFhMGUzZjQ3YWJhNWM4OWVmYzlmNjZmNjYwLnNldENvbnRlbnQoaHRtbF84NzFjODc1NDU2NGQ0YWUwYTBmYzM1ZjIyYzBkYTMwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kODFjNDNhMzdjMDM0ZWRlYjAzZjk5NTVmZGVlZWQ4Yy5iaW5kUG9wdXAocG9wdXBfN2RiMDBkMWEwZTNmNDdhYmE1Yzg5ZWZjOWY2NmY2NjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0MDFmNjMzNDEzNzQwYWVhMzM5ZTEyODJkNjdmYjRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzExMTc0MTYsIC03NC4wMDAxNjU0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDVhMGM3NWViNTY0ZDE1YmYwMGI3NTk4OGEzMGJjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlZWYyNTQxMzU2ZjQzZTdhMzMyZDNlZGJkNGUyMzBkID0gJChgPGRpdiBpZD0iaHRtbF82ZWVmMjU0MTM1NmY0M2U3YTMzMmQzZWRiZDRlMjMwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QgSmFtZXMgUGwgJiBQZWFybCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTM2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4MTxicj4gbmV0IGRlcGFydHVyZXM6IC01NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDVhMGM3NWViNTY0ZDE1YmYwMGI3NTk4OGEzMGJjNC5zZXRDb250ZW50KGh0bWxfNmVlZjI1NDEzNTZmNDNlN2EzMzJkM2VkYmQ0ZTIzMGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTQwMWY2MzM0MTM3NDBhZWEzMzllMTI4MmQ2N2ZiNGQuYmluZFBvcHVwKHBvcHVwXzAwNWEwYzc1ZWI1NjRkMTViZjAwYjc1OTg4YTMwYmM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kN2U0Nzg0ZDMzYzc0NDdhOWVkMmQzMzIxMzFlMzkwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MzgyNjA0LCAtNzMuOTc2MzIzMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYTU1NzI4NTE4NGM0YmI1YmI2OTRlMTdkY2FiMThlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5Yjg0NmJlMmM0MDRjYTBhMWQ5YTlmZTdkZDEwMDY5ID0gJChgPGRpdiBpZD0iaHRtbF82OWI4NDZiZTJjNDA0Y2EwYTFkOWE5ZmU3ZGQxMDA2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXRsYW50aWMgQXZlICYgRm9ydCBHcmVlbmUgUGw8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTY1PGJyPiBuZXQgZGVwYXJ0dXJlczogMzEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWE1NTcyODUxODRjNGJiNWJiNjk0ZTE3ZGNhYjE4ZWMuc2V0Q29udGVudChodG1sXzY5Yjg0NmJlMmM0MDRjYTBhMWQ5YTlmZTdkZDEwMDY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3ZTQ3ODRkMzNjNzQ0N2E5ZWQyZDMzMjEzMWUzOTBiLmJpbmRQb3B1cChwb3B1cF8xYTU1NzI4NTE4NGM0YmI1YmI2OTRlMTdkY2FiMThlYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjQ1M2NlM2VhNDVlNDgzN2E0MzVlNmM5NjRlZWZjNTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDE3NzYwMywgLTc0LjAwMTQ5NzQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmMTU3Nzc0MjY4YzQ5N2Q5Y2IyZTcyMzIxMDMxNDE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmM1ZGIzZjE0OTQxNDJkMDhlMmJjNGE5ZGNkYjA1MjIgPSAkKGA8ZGl2IGlkPSJodG1sXzJjNWRiM2YxNDk0MTQyZDA4ZTJiYzRhOWRjZGIwNTIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDE3IFN0ICYgOCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU4OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTAxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTg3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmMTU3Nzc0MjY4YzQ5N2Q5Y2IyZTcyMzIxMDMxNDE4LnNldENvbnRlbnQoaHRtbF8yYzVkYjNmMTQ5NDE0MmQwOGUyYmM0YTlkY2RiMDUyMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNDUzY2UzZWE0NWU0ODM3YTQzNWU2Yzk2NGVlZmM1OC5iaW5kUG9wdXAocG9wdXBfOWYxNTc3NzQyNjhjNDk3ZDljYjJlNzIzMjEwMzE0MTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0NGFjMDZjYTcxYzQ3YTI4YWI5OGVkODE3NGYzZjdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk2MDg5NDEsIC03My45NzgwMzQxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYTI3ZDllMmQwYjg0NzkxOTZhYzM2MDg0OGZjYWYwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkZGVkMTQ3MTA4ZjQ5NjA4MTNlMDRiZDg3MTZjZmIyID0gJChgPGRpdiBpZD0iaHRtbF84ZGRlZDE0NzEwOGY0OTYwODEzZTA0YmQ4NzE2Y2ZiMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFyayBBdmUgJiBTdCBFZHdhcmRzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGEyN2Q5ZTJkMGI4NDc5MTk2YWMzNjA4NDhmY2FmMDguc2V0Q29udGVudChodG1sXzhkZGVkMTQ3MTA4ZjQ5NjA4MTNlMDRiZDg3MTZjZmIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0NGFjMDZjYTcxYzQ3YTI4YWI5OGVkODE3NGYzZjdhLmJpbmRQb3B1cChwb3B1cF8wYTI3ZDllMmQwYjg0NzkxOTZhYzM2MDg0OGZjYWYwOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2E2NjBlNmU1YTJhNGVmMGFjNDZmOTc4ZmIzNmVkODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODY3Njc5MywgLTczLjk1OTI4MTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmYxZmU2ZGNlMmRiNDJkZWIxMzQ3NjIwMjQ1ZjBhN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNGY3ZjVhZDNjNjU0MWZmOWFmNDM4MWViZDRkZjlmYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjRmN2Y1YWQzYzY1NDFmZjlhZjQzODFlYmQ0ZGY5ZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxleGluZ3RvbiBBdmUgJiBDbGFzc29uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTA1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzOTxicj4gbmV0IGRlcGFydHVyZXM6IC02Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjFmZTZkY2UyZGI0MmRlYjEzNDc2MjAyNDVmMGE3Yy5zZXRDb250ZW50KGh0bWxfMjRmN2Y1YWQzYzY1NDFmZjlhZjQzODFlYmQ0ZGY5ZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2E2NjBlNmU1YTJhNGVmMGFjNDZmOTc4ZmIzNmVkODYuYmluZFBvcHVwKHBvcHVwXzJmMWZlNmRjZTJkYjQyZGViMTM0NzYyMDI0NWYwYTdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOTkyOTExMzNlYzQ0NGFiYjhkOWMxYTViYjNiZjk5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMTcyNDI4LCAtNzQuMDA2NzQ0MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWViMjJkN2I4MjA1NGZjM2JiYWViZGE3ZjBkM2NiNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzFkZmM2OTNhYWU0NWU0YTg5OTVhNDE2YTY5ZmNjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzMxZGZjNjkzYWFlNDVlNGE4OTk1YTQxNmE2OWZjYzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJhcnJvdyBTdCAmIEh1ZHNvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODI3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3ODg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWViMjJkN2I4MjA1NGZjM2JiYWViZGE3ZjBkM2NiNDYuc2V0Q29udGVudChodG1sX2MzMWRmYzY5M2FhZTQ1ZTRhODk5NWE0MTZhNjlmY2M3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI5OTI5MTEzM2VjNDQ0YWJiOGQ5YzFhNWJiM2JmOTliLmJpbmRQb3B1cChwb3B1cF8xZWIyMmQ3YjgyMDU0ZmMzYmJhZWJkYTdmMGQzY2I0NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjIyOGYwMjE0MGFjNGIwN2E0OTI2YzM4YTI0NmE3NTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjcxMDI1OCwgLTc0LjAwMjk3MDg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NzUxMzdlNDhmMjU0ZTg3ODYxYzljYjk1ZWMxYjUwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1YzljZjkxMWNhODQ4OWI4NDZhODVjMDkyZWI2M2U0ID0gJChgPGRpdiBpZD0iaHRtbF8zNWM5Y2Y5MTFjYTg0ODliODQ2YTg1YzA5MmViNjNlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFjRG91Z2FsIFN0ICYgUHJpbmNlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc4NTxicj4gbmV0IGRlcGFydHVyZXM6IDc2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3NTEzN2U0OGYyNTRlODc4NjFjOWNiOTVlYzFiNTBiLnNldENvbnRlbnQoaHRtbF8zNWM5Y2Y5MTFjYTg0ODliODQ2YTg1YzA5MmViNjNlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMjI4ZjAyMTQwYWM0YjA3YTQ5MjZjMzhhMjQ2YTc1Mi5iaW5kUG9wdXAocG9wdXBfNjc1MTM3ZTQ4ZjI1NGU4Nzg2MWM5Y2I5NWVjMWI1MGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmZTNkZmRhNTdkMjQxZTE5MmM3ZGE4ODRjMjBlZjFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYxNjI4LCAtNzMuOTcyOTI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FlMjk5NDZmODdiNDJlMzgyYzUyY2VlZTcyZDgzNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGIwNDc0ZjUwYTg0M2NhOWY2MzNlMDU1OGU5ZTAxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDhiMDQ3NGY1MGE4NDNjYTlmNjMzZTA1NThlOWUwMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTYgU3QgJiBNYWRpc29uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE1MDxicj4gbmV0IGRlcGFydHVyZXM6IDUxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhZTI5OTQ2Zjg3YjQyZTM4MmM1MmNlZWU3MmQ4MzYxLnNldENvbnRlbnQoaHRtbF80OGIwNDc0ZjUwYTg0M2NhOWY2MzNlMDU1OGU5ZTAxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZmUzZGZkYTU3ZDI0MWUxOTJjN2RhODg0YzIwZWYxZC5iaW5kUG9wdXAocG9wdXBfM2FlMjk5NDZmODdiNDJlMzgyYzUyY2VlZTcyZDgzNjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiZjQ0YTZmNDdhODQwZDBhOGE2OGNjNWI5MTU0ZDc0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkyMzk1MDIsIC03My45OTMzNzkwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDdiMjQ1OTM3NDA0NGNmZjg3NWZiMGYzMDMzNWJjMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NjAwMGNkMDlkZGY0ZmYwODRiZTUwNDM1NjU2YzA1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDYwMDBjZDA5ZGRmNGZmMDg0YmU1MDQzNTY1NmMwNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gU3QgJiBKb3JhbGVtb24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA4PGJyPiBuZXQgZGVwYXJ0dXJlczogOTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDdiMjQ1OTM3NDA0NGNmZjg3NWZiMGYzMDMzNWJjMWMuc2V0Q29udGVudChodG1sXzQ2MDAwY2QwOWRkZjRmZjA4NGJlNTA0MzU2NTZjMDVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiZjQ0YTZmNDdhODQwZDBhOGE2OGNjNWI5MTU0ZDc0LmJpbmRQb3B1cChwb3B1cF9kN2IyNDU5Mzc0MDQ0Y2ZmODc1ZmIwZjMwMzM1YmMxYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2M3YzU4YjI4NDdkNGQ2ZjhmYjczMDIwY2E5MjJlOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTgzOTg5NSwgLTczLjk4MDY4OTE0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YjAzM2NmMTQzYmU0OTIxOGIyOWY5NDMwNTA4Y2ZjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1ZWJiNTM1NzhhNDQyNmQ5ZTFlOTRmYTE4NjFkZDU4ID0gJChgPGRpdiBpZD0iaHRtbF8zNWViYjUzNTc4YTQ0MjZkOWUxZTk0ZmExODYxZGQ1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmFzc2F1IFN0ICYgTmF2eSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUyPGJyPiBuZXQgZGVwYXJ0dXJlczogMTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2IwMzNjZjE0M2JlNDkyMThiMjlmOTQzMDUwOGNmYzQuc2V0Q29udGVudChodG1sXzM1ZWJiNTM1NzhhNDQyNmQ5ZTFlOTRmYTE4NjFkZDU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjN2M1OGIyODQ3ZDRkNmY4ZmI3MzAyMGNhOTIyZTljLmJpbmRQb3B1cChwb3B1cF83YjAzM2NmMTQzYmU0OTIxOGIyOWY5NDMwNTA4Y2ZjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzJkZjRlYWRmZjFkNGJlNTk5N2E5Y2U1ODU0YWU1NTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTYyNTAwOCwgLTc0LjAwOTEwNTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkMjM2ZmFjNWNjNzQxMjRhMmIwYTdkNmJmN2EzZjgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI5ZDc1OGY1NzI4NDMzMTg0NTEwYjI2ZDU4ZjZjMjcgPSAkKGA8ZGl2IGlkPSJodG1sX2YyOWQ3NThmNTcyODQzMzE4NDUxMGIyNmQ1OGY2YzI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IdWRzb24gU3QgJiBSZWFkZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjQ4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNjQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZDIzNmZhYzVjYzc0MTI0YTJiMGE3ZDZiZjdhM2Y4MS5zZXRDb250ZW50KGh0bWxfZjI5ZDc1OGY1NzI4NDMzMTg0NTEwYjI2ZDU4ZjZjMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzJkZjRlYWRmZjFkNGJlNTk5N2E5Y2U1ODU0YWU1NTYuYmluZFBvcHVwKHBvcHVwX2RkMjM2ZmFjNWNjNzQxMjRhMmIwYTdkNmJmN2EzZjgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MzFkNjlhODdiYjk0YzU5OWNjZWJhNTQzNzE0Y2YwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNTQyMTk3LCAtNzQuMDExMjE5NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5YmEyODM3ZTNhMDQxZTQ4NTYxNTZjMmNlY2FmMmUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjFlZGRlNDQ1ZmIxNDg3Nzk0ODkwYzEyNTk0ZGU0OTcgPSAkKGA8ZGl2IGlkPSJodG1sXzYxZWRkZTQ0NWZiMTQ4Nzc5NDg5MGMxMjU5NGRlNDk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbndpY2ggU3QgJiBXYXJyZW4gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU3MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzAzPGJyPiBuZXQgZGVwYXJ0dXJlczogMTMyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5YmEyODM3ZTNhMDQxZTQ4NTYxNTZjMmNlY2FmMmUwLnNldENvbnRlbnQoaHRtbF82MWVkZGU0NDVmYjE0ODc3OTQ4OTBjMTI1OTRkZTQ5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MzFkNjlhODdiYjk0YzU5OWNjZWJhNTQzNzE0Y2YwMS5iaW5kUG9wdXAocG9wdXBfZjliYTI4MzdlM2EwNDFlNDg1NjE1NmMyY2VjYWYyZTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzMzhlYWQ1NmExODRiOTc4OGQxMWQ4MWNkYzcyMzkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIwODczNjAwMDAwMDA0LCAtNzMuOTgwODU3OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xMi4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDFkMDAyNTlkZGExNDE3ZWI3MDYxOWFjOWE3YmVhYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTZjYjZkMWQ1NDA0YWQ4YTlmMWVmNmI3ZmE2NTQ5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmE2Y2I2ZDFkNTQwNGFkOGE5ZjFlZjZiN2ZhNjU0OWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMiBTdCAmIEF2ZW51ZSBDPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2Mjxicj4gbmV0IGRlcGFydHVyZXM6IC0yNDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDFkMDAyNTlkZGExNDE3ZWI3MDYxOWFjOWE3YmVhYWUuc2V0Q29udGVudChodG1sX2ZhNmNiNmQxZDU0MDRhZDhhOWYxZWY2YjdmYTY1NDlmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIzMzhlYWQ1NmExODRiOTc4OGQxMWQ4MWNkYzcyMzkyLmJpbmRQb3B1cChwb3B1cF8wMWQwMDI1OWRkYTE0MTdlYjcwNjE5YWM5YTdiZWFhZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjFjYWM0MGU3YWM3NGVkMThlZDdlMmQ5OWY4YWEwYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjIxMDM3ODY2ODYwMywgLTczLjk5NzI0OTAwNzIyNTA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4OWExY2QyZTgwNjQxMzg5MTAxODRlMGM0OGM1OGVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmVmMWJkZjRiMGY3NGNhZTliYTQ2MWNkNDM4ZTE3ODkgPSAkKGA8ZGl2IGlkPSJodG1sXzJlZjFiZGY0YjBmNzRjYWU5YmE0NjFjZDQzOGUxNzg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGV2ZWxhbmQgUGwgJiBTcHJpbmcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDcxMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTQ1PGJyPiBuZXQgZGVwYXJ0dXJlczogMjMzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4OWExY2QyZTgwNjQxMzg5MTAxODRlMGM0OGM1OGVjLnNldENvbnRlbnQoaHRtbF8yZWYxYmRmNGIwZjc0Y2FlOWJhNDYxY2Q0MzhlMTc4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMWNhYzQwZTdhYzc0ZWQxOGVkN2UyZDk5ZjhhYTBjMi5iaW5kUG9wdXAocG9wdXBfYzg5YTFjZDJlODA2NDEzODkxMDE4NGUwYzQ4YzU4ZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmOTU0MWMxMWE2ODQ3ZGRhMjg3OTk3NmRjOGFlNGZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE0NzM5OTMsIC03NC4wMDkxMDYyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjY0YzY4YTY5M2E3NGYwZjkyZTNlYjMwZGY2ZWVmMjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYWRkODJlYTlhMWQ0OTFlYWExNDI2NjE1OGI2M2NhZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMmFkZDgyZWE5YTFkNDkxZWFhMTQyNjYxNThiNjNjYWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhcnJlbiBTdCAmIENodXJjaCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjAxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyOTM8YnI+IG5ldCBkZXBhcnR1cmVzOiA5Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NjRjNjhhNjkzYTc0ZjBmOTJlM2ViMzBkZjZlZWYyMi5zZXRDb250ZW50KGh0bWxfMmFkZDgyZWE5YTFkNDkxZWFhMTQyNjYxNThiNjNjYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmY5NTQxYzExYTY4NDdkZGEyODc5OTc2ZGM4YWU0ZmUuYmluZFBvcHVwKHBvcHVwXzY2NGM2OGE2OTNhNzRmMGY5MmUzZWIzMGRmNmVlZjIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMDEwNjg0Y2MxY2I0NzljYjk5NWI0NWI2Mjk4YTFiYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MjA2MjMwNjk5OTk5NiwgLTczLjk4MTYzMjQwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xY2Q5ZDIzMDFmOGE0NzRlOGMwMWYzNDA2N2Q1YjQwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1NzFhYzg0NjJkYzQ3NzE5NzAyZjJiM2ZiMjBjZjE2ID0gJChgPGRpdiBpZD0iaHRtbF83NTcxYWM4NDYyZGM0NzcxOTcwMmYyYjNmYjIwY2YxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0MCBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQwODxicj4gbmV0IGRlcGFydHVyZXM6IDE1Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xY2Q5ZDIzMDFmOGE0NzRlOGMwMWYzNDA2N2Q1YjQwMC5zZXRDb250ZW50KGh0bWxfNzU3MWFjODQ2MmRjNDc3MTk3MDJmMmIzZmIyMGNmMTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzAxMDY4NGNjMWNiNDc5Y2I5OTViNDViNjI5OGExYmIuYmluZFBvcHVwKHBvcHVwXzFjZDlkMjMwMWY4YTQ3NGU4YzAxZjM0MDY3ZDViNDAwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDhhZWFkZGJhZGM0MGQyYjFmNzM1ZmQ3ZjQ1NzRlNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MDg5MjcyLCAtNzMuOTk2MTIzNDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOGViY2Q4YTc0MjE0ZjYzYjM4YjY3ZjdkYmVmNzc2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlMGM3MmM2MDk1MDQ0Nzk5ZDhkODFmN2RiYWE5Zjk5ID0gJChgPGRpdiBpZD0iaHRtbF8xZTBjNzJjNjA5NTA0NDc5OWQ4ZDgxZjdkYmFhOWY5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVucnkgU3QgJiBBdGxhbnRpYyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTY2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4ZWJjZDhhNzQyMTRmNjNiMzhiNjdmN2RiZWY3NzZlLnNldENvbnRlbnQoaHRtbF8xZTBjNzJjNjA5NTA0NDc5OWQ4ZDgxZjdkYmFhOWY5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNDhhZWFkZGJhZGM0MGQyYjFmNzM1ZmQ3ZjQ1NzRlNy5iaW5kUG9wdXAocG9wdXBfZDhlYmNkOGE3NDIxNGY2M2IzOGI2N2Y3ZGJlZjc3NmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0MWFhMTUxNzM2NjRjYzQ5NzBhNTExOWEwMWM2Y2IzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI5MTcwMjUsIC03My45OTgxMDIzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlNGZkNWZhZjljNTQwYzI4MTNmNjRmMDQ2MDk5NjZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmRmN2IzMjc1ZjY0NGFjMDlmYmFmZDlmMjc2OGYzZjYgPSAkKGA8ZGl2IGlkPSJodG1sXzJkZjdiMzI3NWY2NDRhYzA5ZmJhZmQ5ZjI3NjhmM2Y2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYUd1YXJkaWEgUGwgJiBXIDMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUzMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDgyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTUwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlNGZkNWZhZjljNTQwYzI4MTNmNjRmMDQ2MDk5NjZiLnNldENvbnRlbnQoaHRtbF8yZGY3YjMyNzVmNjQ0YWMwOWZiYWZkOWYyNzY4ZjNmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNDFhYTE1MTczNjY0Y2M0OTcwYTUxMTlhMDFjNmNiMy5iaW5kUG9wdXAocG9wdXBfMmU0ZmQ1ZmFmOWM1NDBjMjgxM2Y2NGYwNDYwOTk2NmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhkMzlkZmY3OWI0NDRmOWVhMmVhZWIzMzk1OTYzMDc5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUzMjMwOTgsIC03My45NzAzMjUxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mN2RhMjFlNmM0ZWQ0NTZlYTk5OWNkMTFjMjVmYWY3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjNDEwYmJlNzM3YTRhZWE4MzgyNTExMmUzNjVmYjZjID0gJChgPGRpdiBpZD0iaHRtbF82YzQxMGJiZTczN2E0YWVhODM4MjUxMTJlMzY1ZmI2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0NyBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUwMTxicj4gbmV0IGRlcGFydHVyZXM6IDMyNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2RhMjFlNmM0ZWQ0NTZlYTk5OWNkMTFjMjVmYWY3YS5zZXRDb250ZW50KGh0bWxfNmM0MTBiYmU3MzdhNGFlYTgzODI1MTEyZTM2NWZiNmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGQzOWRmZjc5YjQ0NGY5ZWEyZWFlYjMzOTU5NjMwNzkuYmluZFBvcHVwKHBvcHVwX2Y3ZGEyMWU2YzRlZDQ1NmVhOTk5Y2QxMWMyNWZhZjdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZjcyOTE4MWZjMmU0MWIyYWFjYjI0ZDQxNTg3NmVlNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0ODkwMDYsIC03My45NzYwNDg4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNi4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1MDNiNTcxZjllYTQyZDA4YjJmNDBhNWJhNDE3NmFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjM0NWRiN2UyOTFhNDNmYzk1YjRiYmY2YjQyZjBhZDkgPSAkKGA8ZGl2IGlkPSJodG1sXzIzNDVkYjdlMjkxYTQzZmM5NWI0YmJmNmI0MmYwYWQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDM5IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMyNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDUyPGJyPiBuZXQgZGVwYXJ0dXJlczogMTI3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1MDNiNTcxZjllYTQyZDA4YjJmNDBhNWJhNDE3NmFmLnNldENvbnRlbnQoaHRtbF8yMzQ1ZGI3ZTI5MWE0M2ZjOTViNGJiZjZiNDJmMGFkOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZjcyOTE4MWZjMmU0MWIyYWFjYjI0ZDQxNTg3NmVlNy5iaW5kUG9wdXAocG9wdXBfNjUwM2I1NzFmOWVhNDJkMDhiMmY0MGE1YmE0MTc2YWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhOWU1YzBmZTlhODRlMDZiZTg5NGNlZjgwOGMwZTViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5NzEzMDEsIC03My45OTQ1NjQwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTAuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwOGM1NmVjNWFiMDQzNGJhNTcxNDQ2YzVlZDNkMjNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWNmYzZjODA4NmYzNDI3NDk3ODIyMWJkMTEwNGU5ZGMgPSAkKGA8ZGl2IGlkPSJodG1sX2VjZmM2YzgwODZmMzQyNzQ5NzgyMjFiZDExMDRlOWRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDE4IFN0ICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc0OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTQ4PGJyPiBuZXQgZGVwYXJ0dXJlczogMjAwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwOGM1NmVjNWFiMDQzNGJhNTcxNDQ2YzVlZDNkMjNiLnNldENvbnRlbnQoaHRtbF9lY2ZjNmM4MDg2ZjM0Mjc0OTc4MjIxYmQxMTA0ZTlkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YTllNWMwZmU5YTg0ZTA2YmU4OTRjZWY4MDhjMGU1Yi5iaW5kUG9wdXAocG9wdXBfMjA4YzU2ZWM1YWIwNDM0YmE1NzE0NDZjNWVkM2QyM2IpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4YTM4YmMxMTMxYTRiODJiYjE2MmNmZTkyZjFhM2E1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYwNjgzMjcwOTY1OTIsIC03My45ODQ1MjcyODk4Njc0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2Y0ZmQ2ZjNiMWZiNDRkZTk1MWNiY2NmNDcyNDk1ZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iY2E4NWQ0ZjliMWE0MGEzOTAwYmMyNjU4ZGJhNTU3NCA9ICQoYDxkaXYgaWQ9Imh0bWxfYmNhODVkNGY5YjFhNDBhMzkwMGJjMjY1OGRiYTU1NzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2Fkd2F5ICYgVyA0OSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjY2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMzg8YnI+IG5ldCBkZXBhcnR1cmVzOiA3Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jZjRmZDZmM2IxZmI0NGRlOTUxY2JjY2Y0NzI0OTVmMy5zZXRDb250ZW50KGh0bWxfYmNhODVkNGY5YjFhNDBhMzkwMGJjMjY1OGRiYTU1NzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZThhMzhiYzExMzFhNGI4MmJiMTYyY2ZlOTJmMWEzYTUuYmluZFBvcHVwKHBvcHVwX2NmNGZkNmYzYjFmYjQ0ZGU5NTFjYmNjZjQ3MjQ5NWYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDFjNGFkMjQ4NWI0NTM5OWJlNDY1M2IzMjUxMTQxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczODE3NjUsIC03My45NzczODY2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTJjNjE1NDUxZjk0NzhlYTJiMGZiMjRjYWY5MzdhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3ODc4MGE2MzQ4MDRhODQ4M2MyYTk1ZGFjNzMzOWMzID0gJChgPGRpdiBpZD0iaHRtbF9lNzg3ODBhNjM0ODA0YTg0ODNjMmE5NWRhYzczMzljMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAyNSBTdCAmIDEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1OTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ0Njxicj4gbmV0IGRlcGFydHVyZXM6IC0xNTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDEyYzYxNTQ1MWY5NDc4ZWEyYjBmYjI0Y2FmOTM3YTAuc2V0Q29udGVudChodG1sX2U3ODc4MGE2MzQ4MDRhODQ4M2MyYTk1ZGFjNzMzOWMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NkMWM0YWQyNDg1YjQ1Mzk5YmU0NjUzYjMyNTExNDFmLmJpbmRQb3B1cChwb3B1cF8wMTJjNjE1NDUxZjk0NzhlYTJiMGZiMjRjYWY5MzdhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQxMjc0M2UwMzQzNDllOWIyNjZkODllNWYwMzNjNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDkwNTYyMywgLTc0LjAxMDQzMzgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMDkwYzg2ZWFmN2M0MjYwYTdkNzQxMzcwY2M4NTBhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxNzczNDE3ODgwZjRkOWM4Nzk2NzBmOTUyNGNjM2FkID0gJChgPGRpdiBpZD0iaHRtbF9lMTc3MzQxNzg4MGY0ZDljODc5NjcwZjk1MjRjYzNhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGliZXJ0eSBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM2Mjxicj4gbmV0IGRlcGFydHVyZXM6IDEwNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMDkwYzg2ZWFmN2M0MjYwYTdkNzQxMzcwY2M4NTBhOC5zZXRDb250ZW50KGh0bWxfZTE3NzM0MTc4ODBmNGQ5Yzg3OTY3MGY5NTI0Y2MzYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQxMjc0M2UwMzQzNDllOWIyNjZkODllNWYwMzNjNGUuYmluZFBvcHVwKHBvcHVwXzMwOTBjODZlYWY3YzQyNjBhN2Q3NDEzNzBjYzg1MGE4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmFjZTcwNzYwY2I0MWNhODA0ZTRiYzk4NDViMTUyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MzM0OTM1LCAtNzQuMDA2ODE3NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWYzMTkzMTA1MzNlNDhkYmI0ZDEyNTcxN2RkYTM2ODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjE3ZTMxZjA2MzM0NjYyYWY1OTE5M2E5NTM2ZGYxOSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWIxN2UzMWYwNjMzNDY2MmFmNTkxOTNhOTUzNmRmMTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTYgU3QgJiBUaGUgSGlnaCBMaW5lPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MjcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ4Mjxicj4gbmV0IGRlcGFydHVyZXM6IC00NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjMxOTMxMDUzM2U0OGRiYjRkMTI1NzE3ZGRhMzY4My5zZXRDb250ZW50KGh0bWxfNWIxN2UzMWYwNjMzNDY2MmFmNTkxOTNhOTUzNmRmMTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZhY2U3MDc2MGNiNDFjYTgwNGU0YmM5ODQ1YjE1MmYuYmluZFBvcHVwKHBvcHVwX2VmMzE5MzEwNTMzZTQ4ZGJiNGQxMjU3MTdkZGEzNjgzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOGJhYzAxNGYzYTM0OTc2YmNiZWQwNWFmNWIxNzA4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMDM3ODY3LCAtNzMuOTk1NDgwNTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNiMDgwMzhlOWFhOTRhZjZhYjY4MzBiYWRkNzI1NDIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2UzYTk5YmU0MWE2NGNmMWE3NGFhOTVjZGU0NWE4MjcgPSAkKGA8ZGl2IGlkPSJodG1sX2NlM2E5OWJlNDFhNjRjZjFhNzRhYTk1Y2RlNDVhODI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db2x1bWJpYSBIZWlnaHRzICYgQ3JhbmJlcnJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNiMDgwMzhlOWFhOTRhZjZhYjY4MzBiYWRkNzI1NDIzLnNldENvbnRlbnQoaHRtbF9jZTNhOTliZTQxYTY0Y2YxYTc0YWE5NWNkZTQ1YTgyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOGJhYzAxNGYzYTM0OTc2YmNiZWQwNWFmNWIxNzA4Zi5iaW5kUG9wdXAocG9wdXBfM2IwODAzOGU5YWE5NGFmNmFiNjgzMGJhZGQ3MjU0MjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzNDM3YWZhODNiYzQwODdhYjhkYTU4M2M0ZjIyNDNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAyNzcxNTksIC03My45OTM4MzYwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTlhYTY2MjVkZjU3NGI2NGE4ZTM2MTYxNTY2N2RiNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MWIzMmM5NjhlOWM0ODExYmMyMjg5YjMxNDBkYjY0NiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDFiMzJjOTY4ZTljNDgxMWJjMjI4OWIzMTQwZGI2NDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9sZCBGdWx0b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjIzPGJyPiBuZXQgZGVwYXJ0dXJlczogODIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTlhYTY2MjVkZjU3NGI2NGE4ZTM2MTYxNTY2N2RiNzUuc2V0Q29udGVudChodG1sXzQxYjMyYzk2OGU5YzQ4MTFiYzIyODliMzE0MGRiNjQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzNDM3YWZhODNiYzQwODdhYjhkYTU4M2M0ZjIyNDNhLmJpbmRQb3B1cChwb3B1cF81OWFhNjYyNWRmNTc0YjY0YThlMzYxNjE1NjY3ZGI3NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDc2MTAzZTVlNDdiNDZkMmIyNzgzMjI2NzhjMzExNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTE0NjM2NCwgLTc0LjAwNTUyNDI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGI4NDRhZDE5YTgyNGIzMTkxMmE2N2FmODJhN2RjMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTY2N2E1YWVkMmY0NDlmYjM4NGE2NjlkZTM4MjcyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2U2NjdhNWFlZDJmNDQ5ZmIzODRhNjY5ZGUzODI3MjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNwcnVjZSBTdCAmIE5hc3NhdSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTk3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMDg8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGI4NDRhZDE5YTgyNGIzMTkxMmE2N2FmODJhN2RjMTQuc2V0Q29udGVudChodG1sXzdlNjY3YTVhZWQyZjQ0OWZiMzg0YTY2OWRlMzgyNzI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3NjEwM2U1ZTQ3YjQ2ZDJiMjc4MzIyNjc4YzMxMTQyLmJpbmRQb3B1cChwb3B1cF84Yjg0NGFkMTlhODI0YjMxOTEyYTY3YWY4MmE3ZGMxNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDBmNTMwZjFiZTE2NDdiNjljYWQ4Mjk1NjI5M2JmNzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDE5NTEzOCwgLTc0LjAwODAzMDEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTI3ZTM1ZGRiMDEzNGJjZmEyNTI2ZTRjMjc3NWI4MzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYWM5MzMwYTcxNDk0YmQwOTg2YTA1NGZjNGE2YWZmYiA9ICQoYDxkaXYgaWQ9Imh0bWxfYmFjOTMzMGE3MTQ5NGJkMDk4NmEwNTRmYzRhNmFmZmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTQgU3QgJiBUaGUgSGlnaCBMaW5lPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMjcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ3Mjxicj4gbmV0IGRlcGFydHVyZXM6IDE0NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjdlMzVkZGIwMTM0YmNmYTI1MjZlNGMyNzc1YjgzNi5zZXRDb250ZW50KGh0bWxfYmFjOTMzMGE3MTQ5NGJkMDk4NmEwNTRmYzRhNmFmZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDBmNTMwZjFiZTE2NDdiNjljYWQ4Mjk1NjI5M2JmNzAuYmluZFBvcHVwKHBvcHVwXzUyN2UzNWRkYjAxMzRiY2ZhMjUyNmU0YzI3NzViODM2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NDQ0ZThjN2QxNWI0MDZhODY0ZmEyZjdlOGQwY2NlYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDYwMTEwMjYsIC03My45NzE4Nzg4NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlNmY3MzhjNzdmMDQwZDE4Y2MwMzk5MjcyNDQwZDVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTA5NmYwYzAzZTZlNGM4OGFiZTBmNjg5Y2M0ZDA1MTggPSAkKGA8ZGl2IGlkPSJodG1sX2EwOTZmMGMwM2U2ZTRjODhhYmUwZjY4OWNjNGQwNTE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDQ4IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzAwPGJyPiBuZXQgZGVwYXJ0dXJlczogMTM0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlNmY3MzhjNzdmMDQwZDE4Y2MwMzk5MjcyNDQwZDVhLnNldENvbnRlbnQoaHRtbF9hMDk2ZjBjMDNlNmU0Yzg4YWJlMGY2ODljYzRkMDUxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NDQ0ZThjN2QxNWI0MDZhODY0ZmEyZjdlOGQwY2NlYS5iaW5kUG9wdXAocG9wdXBfMWU2ZjczOGM3N2YwNDBkMThjYzAzOTkyNzI0NDBkNWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRhYjQ4YjY5YjQzOTQ3ZmI4MmFhOGIxZGVhNzA3OTgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI3NDM0MjMsIC03My45OTM3OTAyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWY3NWQ2ZDcwY2JiNDliZWE4YzUwNjU4MDA5MWRmM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZWRiNTUwOTM2MzU0MjUxYTk4NGExM2JhN2ZlNGM4NCA9ICQoYDxkaXYgaWQ9Imh0bWxfYWVkYjU1MDkzNjM1NDI1MWE5ODRhMTNiYTdmZTRjODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWF0IEpvbmVzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3NzkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgxMzxicj4gbmV0IGRlcGFydHVyZXM6IDM0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmNzVkNmQ3MGNiYjQ5YmVhOGM1MDY1ODAwOTFkZjNhLnNldENvbnRlbnQoaHRtbF9hZWRiNTUwOTM2MzU0MjUxYTk4NGExM2JhN2ZlNGM4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YWI0OGI2OWI0Mzk0N2ZiODJhYThiMWRlYTcwNzk4Mi5iaW5kUG9wdXAocG9wdXBfMWY3NWQ2ZDcwY2JiNDliZWE4YzUwNjU4MDA5MWRmM2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQxMGNjMDY4OTMyZDRmNDY5ODBhMDRlNjQwODhhMTFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk1OTc2ODMsIC03My45OTAxNDg5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDY3ZTVmNDVkNTAxNDEyZTkzZWMzZTlmNjAzMDdlNTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTlmMmEwMWMwZTg0YzgzYjQ5OGJlNDZlOTJjZTcxYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTk5ZjJhMDFjMGU4NGM4M2I0OThiZTQ2ZTkyY2U3MWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhZG1hbiBQbGF6YSBFICYgVGlsbGFyeSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE0NTxicj4gbmV0IGRlcGFydHVyZXM6IDcwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2N2U1ZjQ1ZDUwMTQxMmU5M2VjM2U5ZjYwMzA3ZTUzLnNldENvbnRlbnQoaHRtbF9lOTlmMmEwMWMwZTg0YzgzYjQ5OGJlNDZlOTJjZTcxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MTBjYzA2ODkzMmQ0ZjQ2OTgwYTA0ZTY0MDg4YTExZC5iaW5kUG9wdXAocG9wdXBfMDY3ZTVmNDVkNTAxNDEyZTkzZWMzZTlmNjAzMDdlNTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2YTZkYWI0NmM0NzQ0Y2FhYmJkYzc1YzlkNjQ0MjBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI4NDE4NiwgLTczLjk4NzEzOTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTQuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkNmUzYmZjNzIxMTQwMWM4MDljODljMzRjODgzZDZmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGUxMDczYzAyN2FjNDUxMjgzYTJkNGJkMTFhOTkxMDYgPSAkKGA8ZGl2IGlkPSJodG1sXzhlMTA3M2MwMjdhYzQ1MTI4M2EyZDRiZDExYTk5MTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdCBNYXJrcyBQbCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2ODguMDxicj4gdG90YWwgYXJyaXZhbHM6IDM5MDxicj4gbmV0IGRlcGFydHVyZXM6IC0yOTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmQ2ZTNiZmM3MjExNDAxYzgwOWM4OWMzNGM4ODNkNmYuc2V0Q29udGVudChodG1sXzhlMTA3M2MwMjdhYzQ1MTI4M2EyZDRiZDExYTk5MTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M2YTZkYWI0NmM0NzQ0Y2FhYmJkYzc1YzlkNjQ0MjBmLmJpbmRQb3B1cChwb3B1cF8yZDZlM2JmYzcyMTE0MDFjODA5Yzg5YzM0Yzg4M2Q2ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzJkNWM3OTdmM2FjNDJmYjk2ODQ2NjgzYTIxMjlhZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzA0NzMwOSwgLTczLjk4NjcyMzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTQuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNmM2MDIwN2VhN2U0MzkwOTdkMDRjNTZlODhkZDE0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzNjk5ZWVhOGViMTQ2MGI5OGQwMTAyYjcxZjY4N2VjID0gJChgPGRpdiBpZD0iaHRtbF8wMzY5OWVlYThlYjE0NjBiOThkMDEwMmI3MWY2ODdlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMSBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQxNDxicj4gbmV0IGRlcGFydHVyZXM6IC0yOTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzZjNjAyMDdlYTdlNDM5MDk3ZDA0YzU2ZTg4ZGQxNGQuc2V0Q29udGVudChodG1sXzAzNjk5ZWVhOGViMTQ2MGI5OGQwMTAyYjcxZjY4N2VjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MyZDVjNzk3ZjNhYzQyZmI5Njg0NjY4M2EyMTI5YWUwLmJpbmRQb3B1cChwb3B1cF8zNmM2MDIwN2VhN2U0MzkwOTdkMDRjNTZlODhkZDE0ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjhjOTMwYzkyN2JhNDA1ZWEzNDgzZDRhMmRiNmI1MjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzYxOTY3LCAtNzQuMDA4NTkyMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZjBmYjcwZDNkNGI0OTM2OGEwNjU5YzViNDZmMjliZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmNWIxMzUyOWI0ZTRiZTk4OTJkM2IyMWI3ODQ2NDQ0ID0gJChgPGRpdiBpZD0iaHRtbF83ZjViMTM1MjliNGU0YmU5ODkyZDNiMjFiNzg0NjQ0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmFuayBTdCAmIFdhc2hpbmd0b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI5Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjU4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmMGZiNzBkM2Q0YjQ5MzY4YTA2NTljNWI0NmYyOWJlLnNldENvbnRlbnQoaHRtbF83ZjViMTM1MjliNGU0YmU5ODkyZDNiMjFiNzg0NjQ0NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOGM5MzBjOTI3YmE0MDVlYTM0ODNkNGEyZGI2YjUyOC5iaW5kUG9wdXAocG9wdXBfYWYwZmI3MGQzZDRiNDkzNjhhMDY1OWM1YjQ2ZjI5YmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJjN2Y2ZTI4ODViZDQxMjM5NGQxYTVkZmM2OWU5N2RhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkxOTY1NjYsIC03My45ODEzMDE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA5LjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDBjODU1NDI0N2Y0ZjU1YTA5NWZjNGEwMWRjOTkyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4NzUyMzFkMGE3ODRiOGE4YWZhNzg1ODcwZjZlMjNhID0gJChgPGRpdiBpZD0iaHRtbF85ODc1MjMxZDBhNzg0YjhhOGFmYTc4NTg3MGY2ZTIzYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsbG91Z2hieSBTdCAmIEZsZWV0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjQ2PGJyPiBuZXQgZGVwYXJ0dXJlczogMTgyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkMGM4NTU0MjQ3ZjRmNTVhMDk1ZmM0YTAxZGM5OTIwLnNldENvbnRlbnQoaHRtbF85ODc1MjMxZDBhNzg0YjhhOGFmYTc4NTg3MGY2ZTIzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYzdmNmUyODg1YmQ0MTIzOTRkMWE1ZGZjNjllOTdkYS5iaW5kUG9wdXAocG9wdXBfZGQwYzg1NTQyNDdmNGY1NWEwOTVmYzRhMDFkYzk5MjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5NGM0YTdkM2FiMzRhMmQ5MDQyM2ViMzlhNGI0NGJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg5ODEwMzUsIC03My45NzQ5MzEyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhZDcwNjk3NTc4NzQ0MzM5MjI1ZWMzMmVmZTVkZTNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDRjM2I5NTQ1YjFjNDc1Y2FjYzEwMzFjYmZmZTNmNjcgPSAkKGA8ZGl2IGlkPSJodG1sXzA0YzNiOTU0NWIxYzQ3NWNhY2MxMDMxY2JmZmUzZjY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZUthbGIgQXZlICYgUyBQb3J0bGFuZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWFkNzA2OTc1Nzg3NDQzMzkyMjVlYzMyZWZlNWRlM2Muc2V0Q29udGVudChodG1sXzA0YzNiOTU0NWIxYzQ3NWNhY2MxMDMxY2JmZmUzZjY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU5NGM0YTdkM2FiMzRhMmQ5MDQyM2ViMzlhNGI0NGJhLmJpbmRQb3B1cChwb3B1cF8xYWQ3MDY5NzU3ODc0NDMzOTIyNWVjMzJlZmU1ZGUzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGE0NTNiZjczYjI0NDlkYzk4YzlmM2NlODg4Y2M4OWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTc3ODcsIC03My45NzM3MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDY3YWU3ZTQ4Yjg0ZmM1YmMxYWE0ZGI1ODc5NDU4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjZDRjMzc3NTI1MjQxYTBiOTNkNzFhMmQ0MjJlZDUyID0gJChgPGRpdiBpZD0iaHRtbF8zY2Q0YzM3NzUyNTI0MWEwYjkzZDcxYTJkNDIyZWQ1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FybHRvbiBBdmUgJiBGbHVzaGluZyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTk4PGJyPiBuZXQgZGVwYXJ0dXJlczogODUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA2N2FlN2U0OGI4NGZjNWJjMWFhNGRiNTg3OTQ1ODkuc2V0Q29udGVudChodG1sXzNjZDRjMzc3NTI1MjQxYTBiOTNkNzFhMmQ0MjJlZDUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRhNDUzYmY3M2IyNDQ5ZGM5OGM5ZjNjZTg4OGNjODlkLmJpbmRQb3B1cChwb3B1cF9mMDY3YWU3ZTQ4Yjg0ZmM1YmMxYWE0ZGI1ODc5NDU4OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWY0M2VkOTg4N2I3NGRiOWIyZWZjNjIxYjcxODc5NTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODgyMjYsIC03My45NzkzODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYTI0MDhhYTkyMjE0NDg5ODc1ZTVhM2M1MDgzMDU1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5OGNjMGZhODYzYzRjNzk4MDhlMzhhN2UzMzIwMmQwID0gJChgPGRpdiBpZD0iaHRtbF84OThjYzBmYTg2M2M0Yzc5ODA4ZTM4YTdlMzMyMDJkMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnVsdG9uIFN0ICYgUm9ja3dlbGwgUGw8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEyNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTAyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTIyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhMjQwOGFhOTIyMTQ0ODk4NzVlNWEzYzUwODMwNTVkLnNldENvbnRlbnQoaHRtbF84OThjYzBmYTg2M2M0Yzc5ODA4ZTM4YTdlMzMyMDJkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZjQzZWQ5ODg3Yjc0ZGI5YjJlZmM2MjFiNzE4Nzk1My5iaW5kUG9wdXAocG9wdXBfZmEyNDA4YWE5MjIxNDQ4OTg3NWU1YTNjNTA4MzA1NWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4MDhjMjAyYTZmODRhNjE4ZTQ5YjA4NTIzYjgwMjhiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkxOTYwMzUsIC03My45NjUzNjg1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwZGVkYWRkNjcwNDRmNzJiZTUxYzIyYTQzZmM3ZDkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmJkMzljY2IxMWFlNDJiMmFiYTdkNmY0NDE1YzYyMzAgPSAkKGA8ZGl2IGlkPSJodG1sX2JiZDM5Y2NiMTFhZTQyYjJhYmE3ZDZmNDQxNWM2MjMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxsb3VnaGJ5IEF2ZSAmIEhhbGwgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjBkZWRhZGQ2NzA0NGY3MmJlNTFjMjJhNDNmYzdkOTAuc2V0Q29udGVudChodG1sX2JiZDM5Y2NiMTFhZTQyYjJhYmE3ZDZmNDQxNWM2MjMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY4MDhjMjAyYTZmODRhNjE4ZTQ5YjA4NTIzYjgwMjhiLmJpbmRQb3B1cChwb3B1cF8yMGRlZGFkZDY3MDQ0ZjcyYmU1MWMyMmE0M2ZjN2Q5MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWY1MDk4MzVkYzk1NDkzODk1YWMyZDMxNjkxMDdmMjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTMyNzAxOCwgLTczLjk3NzAzODc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzllMjVlYTIwM2VkYTQwYjViOWExYzk4YmY5NWQzMzIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTM4ZjZkZmQ1YWFmNGFhM2JlOTZmMTA2YTBmZTgyMDggPSAkKGA8ZGl2IGlkPSJodG1sX2UzOGY2ZGZkNWFhZjRhYTNiZTk2ZjEwNmEwZmU4MjA4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NeXJ0bGUgQXZlICYgU3QgRWR3YXJkcyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTI1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllMjVlYTIwM2VkYTQwYjViOWExYzk4YmY5NWQzMzIxLnNldENvbnRlbnQoaHRtbF9lMzhmNmRmZDVhYWY0YWEzYmU5NmYxMDZhMGZlODIwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjUwOTgzNWRjOTU0OTM4OTVhYzJkMzE2OTEwN2YyNC5iaW5kUG9wdXAocG9wdXBfOWUyNWVhMjAzZWRhNDBiNWI5YTFjOThiZjk1ZDMzMjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzOTAyMDY5ZjdmNDRmYWZhNTFjNjEwODAyMzU4MDhhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM1MzUzOTgsIC03NC4wMDQ4MzA5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIwMzcxZmU2OTAxNTQ1MTdiMjNlNTRjYWY5NzBkOTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGRhNmJmMWQ0ZGRmNDAxNzk5OWVjYmE4NDlmZDMyZDEgPSAkKGA8ZGl2IGlkPSJodG1sX2RkYTZiZjFkNGRkZjQwMTc5OTllY2JhODQ5ZmQzMmQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZXJyeSBTdCAmIEJsZWVja2VyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwMDxicj4gbmV0IGRlcGFydHVyZXM6IC03OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMDM3MWZlNjkwMTU0NTE3YjIzZTU0Y2FmOTcwZDk1Yi5zZXRDb250ZW50KGh0bWxfZGRhNmJmMWQ0ZGRmNDAxNzk5OWVjYmE4NDlmZDMyZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTM5MDIwNjlmN2Y0NGZhZmE1MWM2MTA4MDIzNTgwOGEuYmluZFBvcHVwKHBvcHVwXzIwMzcxZmU2OTAxNTQ1MTdiMjNlNTRjYWY5NzBkOTViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MWI0ODk5ODc3Mzc0MWE3OTc0ODNlMjM5MGFkMTBjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMTg1Mzc5LCAtNzQuMDA3NzE3NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyOWQ4NzVhM2NiYzRkYzJhN2FlYmQ3ZmE2YTFjODdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmUyN2U2YTA4YWU5NDQwOTg3NGE5OGFkZjI0ZTA4MDEgPSAkKGA8ZGl2IGlkPSJodG1sX2JlMjdlNmEwOGFlOTQ0MDk4NzRhOThhZGYyNGUwODAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MYWlnaHQgU3QgJiBIdWRzb24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNjA8YnI+IG5ldCBkZXBhcnR1cmVzOiA4MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjlkODc1YTNjYmM0ZGMyYTdhZWJkN2ZhNmExYzg3Yy5zZXRDb250ZW50KGh0bWxfYmUyN2U2YTA4YWU5NDQwOTg3NGE5OGFkZjI0ZTA4MDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzFiNDg5OTg3NzM3NDFhNzk3NDgzZTIzOTBhZDEwYzguYmluZFBvcHVwKHBvcHVwX2IyOWQ4NzVhM2NiYzRkYzJhN2FlYmQ3ZmE2YTFjODdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Mjk3MjE5ZWZiNjM0NTgxOTIwZTYyYzhhOWIyODAzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxODcwOTg3LCAtNzQuMDA5MDAwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmY4YmQzOTkwNzhhNDU3YzhmZjc3YzUzZTZkNDVmYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NjU0ZTdjNDQ1YTA0YmM2YTFhOGRkMThmZjg1YmUwZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDY1NGU3YzQ0NWEwNGJjNmExYThkZDE4ZmY4NWJlMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcnJpc29uIFN0ICYgSHVkc29uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxODMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI2NTxicj4gbmV0IGRlcGFydHVyZXM6IDgyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmOGJkMzk5MDc4YTQ1N2M4ZmY3N2M1M2U2ZDQ1ZmMwLnNldENvbnRlbnQoaHRtbF80NjU0ZTdjNDQ1YTA0YmM2YTFhOGRkMThmZjg1YmUwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85Mjk3MjE5ZWZiNjM0NTgxOTIwZTYyYzhhOWIyODAzZS5iaW5kUG9wdXAocG9wdXBfMmY4YmQzOTkwNzhhNDU3YzhmZjc3YzUzZTZkNDVmYzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlNjJiY2RhMTk2NDRhOTc5OTUyODc1YTMxYjEwMGY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIzMTc5NTgsIC03My45OTQ4MDAxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwNWJlNDgxOThjMjQxNzY4NDBkZTc2ODFiNzFmNWYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWJiOTI5NGRlZmRhNDZlNmI4YzhkMDMwOWQ1M2M3OWEgPSAkKGA8ZGl2IGlkPSJodG1sXzViYjkyOTRkZWZkYTQ2ZTZiOGM4ZDAzMDlkNTNjNzlhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb3R0IFN0ICYgUHJpbmNlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ0OTxicj4gbmV0IGRlcGFydHVyZXM6IC04LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwNWJlNDgxOThjMjQxNzY4NDBkZTc2ODFiNzFmNWYwLnNldENvbnRlbnQoaHRtbF81YmI5Mjk0ZGVmZGE0NmU2YjhjOGQwMzA5ZDUzYzc5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZTYyYmNkYTE5NjQ0YTk3OTk1Mjg3NWEzMWIxMDBmNC5iaW5kUG9wdXAocG9wdXBfZjA1YmU0ODE5OGMyNDE3Njg0MGRlNzY4MWI3MWY1ZjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwNjY5N2Q2MmNlMzQzNDNiNmRhMmVlZGE4YzE2NzhlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMyMjYzOTgsIC03My45OTg1MjIwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDk1MDg2NDhiNTU0ZTQ2YWZiYWNiMjg2ZTkyMjA2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FkYjBjOTAxYTFlYzRkMGU5OGYzNzNhNmM5MzdlZGM5ID0gJChgPGRpdiBpZD0iaHRtbF9hZGIwYzkwMWExZWM0ZDBlOThmMzczYTZjOTM3ZWRjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFjRG91Z2FsIFN0ICYgV2FzaGluZ3RvbiBTcTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzUxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNjg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ5NTA4NjQ4YjU1NGU0NmFmYmFjYjI4NmU5MjIwNjkuc2V0Q29udGVudChodG1sX2FkYjBjOTAxYTFlYzRkMGU5OGYzNzNhNmM5MzdlZGM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwNjY5N2Q2MmNlMzQzNDNiNmRhMmVlZGE4YzE2NzhlLmJpbmRQb3B1cChwb3B1cF83NDk1MDg2NDhiNTU0ZTQ2YWZiYWNiMjg2ZTkyMjA2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWVmMTAzMzk0ZjJlNDUwOTk5Y2E3OGJhZDhiNTYzMTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzU0MzkzNCwgLTczLjk5NDUzOTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzODA2NTI5ZTMyODQ1OThhMmRlZDZlZjdmNzIxNGM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZmYjNkMjg5NWRjNDYyYWI0ZTMxYjZiN2M1ODU4M2EgPSAkKGA8ZGl2IGlkPSJodG1sX2I2ZmIzZDI4OTVkYzQ2MmFiNGUzMWI2YjdjNTg1ODNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDEzIFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ1OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDQxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzODA2NTI5ZTMyODQ1OThhMmRlZDZlZjdmNzIxNGM3LnNldENvbnRlbnQoaHRtbF9iNmZiM2QyODk1ZGM0NjJhYjRlMzFiNmI3YzU4NTgzYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZWYxMDMzOTRmMmU0NTA5OTljYTc4YmFkOGI1NjMxNy5iaW5kUG9wdXAocG9wdXBfYTM4MDY1MjllMzI4NDU5OGEyZGVkNmVmN2Y3MjE0YzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhNWVhNGZkNWM4YzQ1ZTg5NGNkNjdkM2U3NmVjNGU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM1MzI0MjcsIC03My45OTgwMDQxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjk0YTVlNzE1YWY0NDZjODA1NDliYWQwNjEzZDU3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwM2Y4MDMxZTk1NzQ3NzQ5YjYzNDA5Mjc0YTZiMWU2ID0gJChgPGRpdiBpZD0iaHRtbF81MDNmODAzMWU5NTc0Nzc0OWI2MzQwOTI3NGE2YjFlNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAxMSBTdCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNDAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIyNTxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmY5NGE1ZTcxNWFmNDQ2YzgwNTQ5YmFkMDYxM2Q1Nzcuc2V0Q29udGVudChodG1sXzUwM2Y4MDMxZTk1NzQ3NzQ5YjYzNDA5Mjc0YTZiMWU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhNWVhNGZkNWM4YzQ1ZTg5NGNkNjdkM2U3NmVjNGU0LmJpbmRQb3B1cChwb3B1cF9mZjk0YTVlNzE1YWY0NDZjODA1NDliYWQwNjEzZDU3NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjkxOGIxZTFmMTBiNDMyYjk1YTY2YzY3ZWZlZmM1NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NDY3NjgsIC03NC4wMTY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2YxNGEzNDdiN2MzNGI1ZThiMzk2N2U4NTNkNzliNzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjMzMGM4YWU2MTY0NjM1OGYwYjBmZjBkYjkzZWYxNiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2YzMzBjOGFlNjE2NDYzNThmMGIwZmYwZGI5M2VmMTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ZQ0JTIERlcG90IC0gU1NQPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0ODxicj4gbmV0IGRlcGFydHVyZXM6IDQ2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmMTRhMzQ3YjdjMzRiNWU4YjM5NjdlODUzZDc5YjczLnNldENvbnRlbnQoaHRtbF8zZjMzMGM4YWU2MTY0NjM1OGYwYjBmZjBkYjkzZWYxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOTE4YjFlMWYxMGI0MzJiOTVhNjZjNjdlZmVmYzU3Mi5iaW5kUG9wdXAocG9wdXBfM2YxNGEzNDdiN2MzNGI1ZThiMzk2N2U4NTNkNzliNzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczZWY4MTYxYjg0YzQ4NWU4NjE1MWE3ODE0NjI3NGRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE5MzkyMjYsIC03NC4wMDI0NzIxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NjM1Y2NlMjFmZmE0ZWJiYWM5YTI1OGJlZWM0NzEzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmM2UzMTU5OTAxMDRlMWQ5ZjU5ZGQyYzUxYmVjNTkzID0gJChgPGRpdiBpZD0iaHRtbF8wZjNlMzE1OTkwMTA0ZTFkOWY1OWRkMmM1MWJlYzU5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGlzcGVuYXJkIFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI2NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTA5PGJyPiBuZXQgZGVwYXJ0dXJlczogMjQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2MzVjY2UyMWZmYTRlYmJhYzlhMjU4YmVlYzQ3MTM5LnNldENvbnRlbnQoaHRtbF8wZjNlMzE1OTkwMTA0ZTFkOWY1OWRkMmM1MWJlYzU5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83M2VmODE2MWI4NGM0ODVlODYxNTFhNzgxNDYyNzRkZi5iaW5kUG9wdXAocG9wdXBfNTYzNWNjZTIxZmZhNGViYmFjOWEyNThiZWVjNDcxMzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwNzY4NTQyODk1ODQ1ZDk5MjFhMWQ1OTIwY2VjNTkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg5NDA3NDcsIC03My45Njg4NTQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5OTk5YjVjNDAyOTQwM2E5ZjY2MTkzNDY2Y2RjNTI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjE4NjgxODJmMjk1NDliZjhhN2IwYzE3MjdlZjQzNGUgPSAkKGA8ZGl2IGlkPSJodG1sX2IxODY4MTgyZjI5NTQ5YmY4YTdiMGMxNzI3ZWY0MzRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZUthbGIgQXZlICYgVmFuZGVyYmlsdCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTk5OTliNWM0MDI5NDAzYTlmNjYxOTM0NjZjZGM1MjQuc2V0Q29udGVudChodG1sX2IxODY4MTgyZjI5NTQ5YmY4YTdiMGMxNzI3ZWY0MzRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwNzY4NTQyODk1ODQ1ZDk5MjFhMWQ1OTIwY2VjNTkyLmJpbmRQb3B1cChwb3B1cF9lOTk5OWI1YzQwMjk0MDNhOWY2NjE5MzQ2NmNkYzUyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2M4MGM4NTE5MDU0NDVhMmEwY2FlYTY3MjRmMzY2MDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDEyMjEyOCwgLTc0LjAxMjM0MjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDE1NTFiNTFjMzZlNDFkMTk3OWU2YjVlNzMxYzFiNWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNmRkMzE5MTIzOWI0MDdmYjk4YWNiNTg2MDZmYjA4MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTZkZDMxOTEyMzliNDA3ZmI5OGFjYjU4NjA2ZmIwODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoIFN0ICYgV2hpdGVoYWxsIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI2NDxicj4gbmV0IGRlcGFydHVyZXM6IDE2My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTU1MWI1MWMzNmU0MWQxOTc5ZTZiNWU3MzFjMWI1YS5zZXRDb250ZW50KGh0bWxfYTZkZDMxOTEyMzliNDA3ZmI5OGFjYjU4NjA2ZmIwODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2M4MGM4NTE5MDU0NDVhMmEwY2FlYTY3MjRmMzY2MDEuYmluZFBvcHVwKHBvcHVwX2QxNTUxYjUxYzM2ZTQxZDE5NzllNmI1ZTczMWMxYjVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZjJmYWUwZTY2ZTE0YmIyOGU3OTViYWRiMmY3YjM0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzY1MTgyLCAtNzQuMDExNjc3OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81M2ZkNGUxNzg5NTM0NmZiOWZmZmJkNWRhODhkYzU0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlNTJhM2FjZGU0ZTRkNDFiYmQzZThjMmJiYmRkZWIzID0gJChgPGRpdiBpZD0iaHRtbF9lZTUyYTNhY2RlNGU0ZDQxYmJkM2U4YzJiYmJkZGViMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWQgU3QgJiBCcmlkZ2UgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNjA8YnI+IG5ldCBkZXBhcnR1cmVzOiA4NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81M2ZkNGUxNzg5NTM0NmZiOWZmZmJkNWRhODhkYzU0OS5zZXRDb250ZW50KGh0bWxfZWU1MmEzYWNkZTRlNGQ0MWJiZDNlOGMyYmJiZGRlYjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGYyZmFlMGU2NmUxNGJiMjhlNzk1YmFkYjJmN2IzNDkuYmluZFBvcHVwKHBvcHVwXzUzZmQ0ZTE3ODk1MzQ2ZmI5ZmZmYmQ1ZGE4OGRjNTQ5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTY0Y2VjYWYwMGU0Mjg2YmEyZjE5MmE3ZWI2NDA3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NDc0ODgxLCAtNzMuOTgzNjI0NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjU5NGJiYTViNzE4NDFhNWI3NTk0NzJmZmIzZDFiYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTk4MzJkZDJkZDA0MmFhYTBkYmFiMDgwYjY0OWM1MyA9ICQoYDxkaXYgaWQ9Imh0bWxfN2U5ODMyZGQyZGQwNDJhYWEwZGJhYjA4MGI2NDljNTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkpvaG5zb24gU3QgJiBHb2xkIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDExNTxicj4gbmV0IGRlcGFydHVyZXM6IC00My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTk0YmJhNWI3MTg0MWE1Yjc1OTQ3MmZmYjNkMWJjMS5zZXRDb250ZW50KGh0bWxfN2U5ODMyZGQyZGQwNDJhYWEwZGJhYjA4MGI2NDljNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzU2NGNlY2FmMDBlNDI4NmJhMmYxOTJhN2ViNjQwN2IuYmluZFBvcHVwKHBvcHVwX2I1OTRiYmE1YjcxODQxYTViNzU5NDcyZmZiM2QxYmMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZjI3MzczMmEwN2E0ODc5YWFkYmI1ODI4MmFhN2IxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MTc4MjMsIC03My45NzM3Mjk5MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDYxMTMxNGYwZWU0YzAzYjdiNGI4MzUwOWYxOGUzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhNDJkMzI2MWU0NjRiZTFiOTJiNTVkNzhmNWFkYjlhID0gJChgPGRpdiBpZD0iaHRtbF81YTQyZDMyNjFlNDY0YmUxYjkyYjU1ZDc4ZjVhZGI5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FzaGluZ3RvbiBQYXJrPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTU3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwNjExMzE0ZjBlZTRjMDNiN2I0YjgzNTA5ZjE4ZTNjLnNldENvbnRlbnQoaHRtbF81YTQyZDMyNjFlNDY0YmUxYjkyYjU1ZDc4ZjVhZGI5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjI3MzczMmEwN2E0ODc5YWFkYmI1ODI4MmFhN2IxMi5iaW5kUG9wdXAocG9wdXBfZjA2MTEzMTRmMGVlNGMwM2I3YjRiODM1MDlmMThlM2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiMDgwNjcwNzg3ZjQwNGVhYjJkMGM1MzZkNjk2OGEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA3MDY0NTYsIC03NC4wMDczMTg1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1NDRmZGIxYzdhMjQwYzFiNmY4NGQyOGVmMzc3NzU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTU1YjQyMDQ5Y2Q1NGE5NThlZGIxM2VlZjI3MjlkZjEgPSAkKGA8ZGl2IGlkPSJodG1sXzk1NWI0MjA0OWNkNTRhOTU4ZWRiMTNlZWYyNzI5ZGYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYWlkZW4gTG4gJiBQZWFybCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjE0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzODE8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU0NGZkYjFjN2EyNDBjMWI2Zjg0ZDI4ZWYzNzc3NTUuc2V0Q29udGVudChodG1sXzk1NWI0MjA0OWNkNTRhOTU4ZWRiMTNlZWYyNzI5ZGYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FiMDgwNjcwNzg3ZjQwNGVhYjJkMGM1MzZkNjk2OGEyLmJpbmRQb3B1cChwb3B1cF84NTQ0ZmRiMWM3YTI0MGMxYjZmODRkMjhlZjM3Nzc1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFlZjczYzdjMzQ1NGJjYzgyMjFmYzEwMzA2MzVjMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjIyOTM0NiwgLTczLjk5MTQ3NTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhZjc4YjM4NzgxNTQ5NGI5YWU1YTBiOTZlMzVhMTgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWQ0M2Y3NTVjODkxNGE1YmI3Yjc4ZjI0ODA2NjJkNDEgPSAkKGA8ZGl2IGlkPSJodG1sXzFkNDNmNzU1Yzg5MTRhNWJiN2I3OGYyNDgwNjYyZDQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdGFudG9uIFN0ICYgQ2hyeXN0aWUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUzMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzgxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWY3OGIzODc4MTU0OTRiOWFlNWEwYjk2ZTM1YTE4Mi5zZXRDb250ZW50KGh0bWxfMWQ0M2Y3NTVjODkxNGE1YmI3Yjc4ZjI0ODA2NjJkNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWFlZjczYzdjMzQ1NGJjYzgyMjFmYzEwMzA2MzVjMjkuYmluZFBvcHVwKHBvcHVwXzdhZjc4YjM4NzgxNTQ5NGI5YWU1YTBiOTZlMzVhMTgyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOGMwNGRmZTFlNjI0MGNjODA5NGY2NjI3ZTFiNDUxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMzY4MzYxLCAtNzMuOTc1NzQ4MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xMC4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjMTViZjNjMzA5ZDQ1MWJiYWMwNTM1NzRhYmU4MDExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWE3NWRjYjUxMDA4NGRiM2EwZjFmNDJjZTU1OThlYmMgPSAkKGA8ZGl2IGlkPSJodG1sXzlhNzVkY2I1MTAwODRkYjNhMGYxZjQyY2U1NTk4ZWJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BdmVudWUgRCAmIEUgOCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjU4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0yMDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGMxNWJmM2MzMDlkNDUxYmJhYzA1MzU3NGFiZTgwMTEuc2V0Q29udGVudChodG1sXzlhNzVkY2I1MTAwODRkYjNhMGYxZjQyY2U1NTk4ZWJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4YzA0ZGZlMWU2MjQwY2M4MDk0ZjY2MjdlMWI0NTExLmJpbmRQb3B1cChwb3B1cF84YzE1YmYzYzMwOWQ0NTFiYmFjMDUzNTc0YWJlODAxMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTkzYjNhYjQxYzE2NGJiNGExMmFhNDIyZDJiYTNkN2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTA5NzcxMSwgLTczLjk4NzY1NDI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMS42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQ0NjgwYmU3ZTdiNDI4MDg0Y2U1Y2I0NjkxODgxYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZWE2NWNkMGMyNmQ0ZTFjYjk4M2Q4ZGQxYjY4M2RhZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGVhNjVjZDBjMjZkNGUxY2I5ODNkOGRkMWI2ODNkYWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2Fkd2F5ICYgVyAzNiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTg4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMzIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjQ0NjgwYmU3ZTdiNDI4MDg0Y2U1Y2I0NjkxODgxYTEuc2V0Q29udGVudChodG1sXzRlYTY1Y2QwYzI2ZDRlMWNiOTgzZDhkZDFiNjgzZGFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E5M2IzYWI0MWMxNjRiYjRhMTJhYTQyMmQyYmEzZDdjLmJpbmRQb3B1cChwb3B1cF82NDQ2ODBiZTdlN2I0MjgwODRjZTVjYjQ2OTE4ODFhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTA0OTE0ZDU1Njc4NDhlODgzZTBmMTgzZmI2NDhlZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkxMDUzNywgLTczLjk5OTczMzM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA5LjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzJjNGY4MDlkYzQwNDMwYjk3ZThkNGIzNjcyOWJkNTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjA2MzI4NTVmZDU0ZGVlOThiYTQ2Mjg5NzYyZjMxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDYwNjMyODU1ZmQ1NGRlZTk4YmE0NjI4OTc2MmYzMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvd2FyZCBTdCAmIENlbnRyZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjY1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxODUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzJjNGY4MDlkYzQwNDMwYjk3ZThkNGIzNjcyOWJkNTUuc2V0Q29udGVudChodG1sX2Q2MDYzMjg1NWZkNTRkZWU5OGJhNDYyODk3NjJmMzE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwNDkxNGQ1NTY3ODQ4ZTg4M2UwZjE4M2ZiNjQ4ZWQ2LmJpbmRQb3B1cChwb3B1cF8zMmM0ZjgwOWRjNDA0MzBiOTdlOGQ0YjM2NzI5YmQ1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjQ2ZGM4OGE4NzIxNGI0ZGFlMGNlNTI4Yjc5MmE1OGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTMwODI1NywgLTczLjk3MTc4OTEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTJhMzgxNWJhYTI4NDllOWEwMzY0MmE4ZmI3ZDkxMzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMTVmODQzNjlkZGE0MDE2Yjc4YTBkZGFiZTg5NDE4OCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjE1Zjg0MzY5ZGRhNDAxNmI3OGEwZGRhYmU4OTQxODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFkZWxwaGkgU3QgJiBNeXJ0bGUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNDcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExMTxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTJhMzgxNWJhYTI4NDllOWEwMzY0MmE4ZmI3ZDkxMzguc2V0Q29udGVudChodG1sX2IxNWY4NDM2OWRkYTQwMTZiNzhhMGRkYWJlODk0MTg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0NmRjODhhODcyMTRiNGRhZTBjZTUyOGI3OTJhNThkLmJpbmRQb3B1cChwb3B1cF9lMmEzODE1YmFhMjg0OWU5YTAzNjQyYThmYjdkOTEzOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzc3OTcyZTBiMzIwNGVhOWE1MWRmM2VjNGZjMGVlZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODY5MTg2NSwgLTczLjk3NjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMTI2MzRjYWUyNDc0MjdlOTIwY2FkMmZiMjNlYjVlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1ZDFiNDkxZTk1ODQ4ZjViZTFhMzk3NTZkNmQ5NzJiID0gJChgPGRpdiBpZD0iaHRtbF9lNWQxYjQ5MWU5NTg0OGY1YmUxYTM5NzU2ZDZkOTcyYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGFmYXlldHRlIEF2ZSAmIEZvcnQgR3JlZW5lIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDk2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTEwOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMTI2MzRjYWUyNDc0MjdlOTIwY2FkMmZiMjNlYjVlOS5zZXRDb250ZW50KGh0bWxfZTVkMWI0OTFlOTU4NDhmNWJlMWEzOTc1NmQ2ZDk3MmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzc3OTcyZTBiMzIwNGVhOWE1MWRmM2VjNGZjMGVlZDIuYmluZFBvcHVwKHBvcHVwX2ExMjYzNGNhZTI0NzQyN2U5MjBjYWQyZmIyM2ViNWU5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNDMxMjczM2EwZjc0YjFjYjE4OWUyYzI4ZWNmZGUyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NjUwMDY1LCAtNzMuOTY1NjMzMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODVhZjExNWY5ZTc0ZjA1YTNlZDhhMGUzYTIwMWNjNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QwZWJjODYwOTYwMzRkOWE4YWExMDBmMjhlYTM2ZTMzID0gJChgPGRpdiBpZD0iaHRtbF9kMGViYzg2MDk2MDM0ZDlhOGFhMTAwZjI4ZWEzNmUzMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FzaGluZ3RvbiBBdmUgJiBHcmVlbmUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg1YWYxMTVmOWU3NGYwNWEzZWQ4YTBlM2EyMDFjYzUuc2V0Q29udGVudChodG1sX2QwZWJjODYwOTYwMzRkOWE4YWExMDBmMjhlYTM2ZTMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y0MzEyNzMzYTBmNzRiMWNiMTg5ZTJjMjhlY2ZkZTI1LmJpbmRQb3B1cChwb3B1cF85ODVhZjExNWY5ZTc0ZjA1YTNlZDhhMGUzYTIwMWNjNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWNlYzU1MWUxZjY3NDBiZTkxZjg3YTA2NGQ3ZDM4ZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTc0ODc1MiwgLTc0LjAxMDQ1NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OGQwNDQyNDYzMTE0NmY0YWFjYzUzMTk5ZTNhNTRjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2OTM2ZjBiNGI0MDQzNDQ4Y2IxNzA0NzA1YjI1OGRhID0gJChgPGRpdiBpZD0iaHRtbF9iNjkzNmYwYjRiNDA0MzQ0OGNiMTcwNDcwNWIyNThkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RHVhbmUgU3QgJiBHcmVlbndpY2ggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjU3PGJyPiBuZXQgZGVwYXJ0dXJlczogODEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzhkMDQ0MjQ2MzExNDZmNGFhY2M1MzE5OWUzYTU0Y2Yuc2V0Q29udGVudChodG1sX2I2OTM2ZjBiNGI0MDQzNDQ4Y2IxNzA0NzA1YjI1OGRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VjZWM1NTFlMWY2NzQwYmU5MWY4N2EwNjRkN2QzOGQyLmJpbmRQb3B1cChwb3B1cF83OGQwNDQyNDYzMTE0NmY0YWFjYzUzMTk5ZTNhNTRjZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWZmOWI2MDU1MjEzNGQ3ZDgzZmIzNzA2NTIwNGYzZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTc2NjU2NCwgLTczLjk4NDc2NDM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyYTE2NWM3OTFkMjQwZjliOTZiZjNlNDIyYThjMmJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWQ2NDJmMmY5OWEyNDU4OTgzYjY3NzA0OWE2NGYxZWYgPSAkKGA8ZGl2IGlkPSJodG1sXzFkNjQyZjJmOTlhMjQ1ODk4M2I2NzcwNDlhNjRmMWVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25jb3JkIFN0ICYgQnJpZGdlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTJhMTY1Yzc5MWQyNDBmOWI5NmJmM2U0MjJhOGMyYmEuc2V0Q29udGVudChodG1sXzFkNjQyZjJmOTlhMjQ1ODk4M2I2NzcwNDlhNjRmMWVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVmZjliNjA1NTIxMzRkN2Q4M2ZiMzcwNjUyMDRmM2QyLmJpbmRQb3B1cChwb3B1cF9hMmExNjVjNzkxZDI0MGY5Yjk2YmYzZTQyMmE4YzJiYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2Y5OGMxOGQ2Yjc4NDVmMjkwNTlkMTZlNmFlZTUwY2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDc4NzMsIC03NC4wMDE2Njk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjZTk2ODIwNDI5NTQyMDM4MmJhODU5ZGI5NGFjNGFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjVlYzY5ZTg1N2ZiNDA2Zjg0MWE2MjdhNjM2NjdhM2UgPSAkKGA8ZGl2IGlkPSJodG1sXzI1ZWM2OWU4NTdmYjQwNmY4NDFhNjI3YTYzNjY3YTNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZWNrIFNsaXAgJiBGcm9udCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjc0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNjM8YnI+IG5ldCBkZXBhcnR1cmVzOiA4OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Y2U5NjgyMDQyOTU0MjAzODJiYTg1OWRiOTRhYzRhYy5zZXRDb250ZW50KGh0bWxfMjVlYzY5ZTg1N2ZiNDA2Zjg0MWE2MjdhNjM2NjdhM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2Y5OGMxOGQ2Yjc4NDVmMjkwNTlkMTZlNmFlZTUwY2MuYmluZFBvcHVwKHBvcHVwXzZjZTk2ODIwNDI5NTQyMDM4MmJhODU5ZGI5NGFjNGFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjk2MjI3ZjgyYTk0NWMyOGE2NGE1NTM5ODE2NmMxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMzMxOTY3LCAtNzMuOTk1MTAxMzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMTQ3ZGQxMTgwZWE0ZGVkYWJmY2NkYjg0MmQ2MDk2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczYTI4ODI2YjhiYTRkOGFiOGIyNTJhNDNiNDExNzUyID0gJChgPGRpdiBpZD0iaHRtbF83M2EyODgyNmI4YmE0ZDhhYjhiMjUyYTQzYjQxMTc1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMCBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDI4Mjxicj4gbmV0IGRlcGFydHVyZXM6IC0yNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMTQ3ZGQxMTgwZWE0ZGVkYWJmY2NkYjg0MmQ2MDk2OS5zZXRDb250ZW50KGh0bWxfNzNhMjg4MjZiOGJhNGQ4YWI4YjI1MmE0M2I0MTE3NTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWI5NjIyN2Y4MmE5NDVjMjhhNjRhNTUzOTgxNjZjMWUuYmluZFBvcHVwKHBvcHVwXzIxNDdkZDExODBlYTRkZWRhYmZjY2RiODQyZDYwOTY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wN2Q3OGY2YjQ1MDE0ZTQ4YmNmNDg1MWMyZDJlODI3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDM5NzEwMDAwMDAwNCwgLTczLjk3MzcxNDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjcyNjM4ODdkNWY0NmMwOTdkZmI0ODBiOWRkYmI2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiOGRlY2IyYzNlZTQ3NWI5MGRiMzNlYTAwNWFjZjBhID0gJChgPGRpdiBpZD0iaHRtbF84YjhkZWNiMmMzZWU0NzViOTBkYjMzZWEwMDVhY2YwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JhbmQgQXJteSBQbGF6YSAmIENlbnRyYWwgUGFyayBTPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM4MTxicj4gbmV0IGRlcGFydHVyZXM6IDExMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjcyNjM4ODdkNWY0NmMwOTdkZmI0ODBiOWRkYmI2Ni5zZXRDb250ZW50KGh0bWxfOGI4ZGVjYjJjM2VlNDc1YjkwZGIzM2VhMDA1YWNmMGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDdkNzhmNmI0NTAxNGU0OGJjZjQ4NTFjMmQyZTgyN2UuYmluZFBvcHVwKHBvcHVwXzA2NzI2Mzg4N2Q1ZjQ2YzA5N2RmYjQ4MGI5ZGRiYjY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YjQ3ZTc5ZDNmNjc0NTljOGNiOWM0OTQ0NTU2ZGU1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwNzY0NDk0NDE3NTcsIC03My45Njg0MTUyNjAzMTQ5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMmZlZjhmYWYzZGI0ZDFhYjI5YWFhYjI0ODM3ZmM2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3MDNkNDQ4NmJjMzQyNzU5MTc4YzBhM2UxMjk1ZDZlID0gJChgPGRpdiBpZD0iaHRtbF9mNzAzZDQ0ODZiYzM0Mjc1OTE3OGMwYTNlMTI5NWQ2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S2VudCBBdmUgJiBTIDExIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE1NDxicj4gbmV0IGRlcGFydHVyZXM6IC0yMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMmZlZjhmYWYzZGI0ZDFhYjI5YWFhYjI0ODM3ZmM2ZC5zZXRDb250ZW50KGh0bWxfZjcwM2Q0NDg2YmMzNDI3NTkxNzhjMGEzZTEyOTVkNmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGI0N2U3OWQzZjY3NDU5YzhjYjljNDk0NDU1NmRlNTMuYmluZFBvcHVwKHBvcHVwXzIyZmVmOGZhZjNkYjRkMWFiMjlhYWFiMjQ4MzdmYzZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYWFlZWJhZTQ0ZWY0ZWEwOWEwMTNkMjljYzE3NWUwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTAxNjkxMjEsIC03NC4wMDI2Mzc2MTAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzk2ODhhMGZjY2U3NDcxNmIwODc2MWVmODQ3YmEyYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ODEzZDQ0NDU0ZDY0MDIyYjE4OGQ5N2E0MTFhNTZkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNDgxM2Q0NDQ1NGQ2NDAyMmIxODhkOTdhNDExYTU2ZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVud2ljaCBBdmUgJiA4IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzU2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzk2ODhhMGZjY2U3NDcxNmIwODc2MWVmODQ3YmEyYzQuc2V0Q29udGVudChodG1sXzQ4MTNkNDQ0NTRkNjQwMjJiMTg4ZDk3YTQxMWE1NmRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FhYWVlYmFlNDRlZjRlYTA5YTAxM2QyOWNjMTc1ZTA5LmJpbmRQb3B1cChwb3B1cF9jOTY4OGEwZmNjZTc0NzE2YjA4NzYxZWY4NDdiYTJjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQ4NmUzMWI5NTQwNGFkNGFjZjQzMDhmZWFmOTBhNTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzQ1NDU2NywgLTczLjk5MDc0MTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTUxNjRjNjZjNjk2NDBkNGI0MWVkYzQxMzM2M2Y3NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lODhjYTdkOWRhOGM0Mzc0YTg5MDcxODE4NTc5YzE2OSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTg4Y2E3ZDlkYThjNDM3NGE4OTA3MTgxODU3OWMxNjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2Fkd2F5ICYgRSAxNCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODIwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA5MDk8YnI+IG5ldCBkZXBhcnR1cmVzOiA4OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNTE2NGM2NmM2OTY0MGQ0YjQxZWRjNDEzMzYzZjc2My5zZXRDb250ZW50KGh0bWxfZTg4Y2E3ZDlkYThjNDM3NGE4OTA3MTgxODU3OWMxNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQ4NmUzMWI5NTQwNGFkNGFjZjQzMDhmZWFmOTBhNTkuYmluZFBvcHVwKHBvcHVwX2E1MTY0YzY2YzY5NjQwZDRiNDFlZGM0MTMzNjNmNzYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYzRjM2NlNjIyZmM0N2E2OWExNDllNzVmZTM3YzczYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NDU2ODI5OTk5OTk5NSwgLTczLjk1ODgxMDgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhNjM4ZTYyMTgyNTQ4Zjg5MmY4Yzc3MzNiNWZjMjc1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTg4NGNkZGUxY2Y3NDU1YmE3MDg1NzYxNjIzMDAzZDAgPSAkKGA8ZGl2IGlkPSJodG1sXzk4ODRjZGRlMWNmNzQ1NWJhNzA4NTc2MTYyMzAwM2QwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb25yb2UgU3QgJiBDbGFzc29uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhNjM4ZTYyMTgyNTQ4Zjg5MmY4Yzc3MzNiNWZjMjc1LnNldENvbnRlbnQoaHRtbF85ODg0Y2RkZTFjZjc0NTViYTcwODU3NjE2MjMwMDNkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYzRjM2NlNjIyZmM0N2E2OWExNDllNzVmZTM3YzczYi5iaW5kUG9wdXAocG9wdXBfNmE2MzhlNjIxODI1NDhmODkyZjhjNzczM2I1ZmMyNzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4MWNjM2EwMDJhMDQyMGFhZmNjZTlkMzkxZGVjMTM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEzMTI2LCAtNzMuOTg0ODQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ4NjdlMGM2OTY5NDY0NWJiNzMyOTBhZjAxNmYzMmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Yjk5MWIxZmFlZDM0ZjNiOThmZmFmYmYwOTlhMTEyYyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWI5OTFiMWZhZWQzNGYzYjk4ZmZhZmJmMDk5YTExMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hZGlzb24gU3QgJiBNb250Z29tZXJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTkwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkODY3ZTBjNjk2OTQ2NDViYjczMjkwYWYwMTZmMzJhLnNldENvbnRlbnQoaHRtbF85Yjk5MWIxZmFlZDM0ZjNiOThmZmFmYmYwOTlhMTEyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xODFjYzNhMDAyYTA0MjBhYWZjY2U5ZDM5MWRlYzEzNS5iaW5kUG9wdXAocG9wdXBfZWQ4NjdlMGM2OTY5NDY0NWJiNzMyOTBhZjAxNmYzMmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiMjlmMzljMjk5YjQzYzJhOTBmOTcwMWNhZjVhYmYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE0MDY2NjcsIC03My45OTI5MzkxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzYmUxYTI1YzgzMTRmYTI5NzRkY2E4MjA2ZTgzMzhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTBjZDc4NDkyNTQ3NDljMDhkYjM3ZjdmNTE0ZGFmYTggPSAkKGA8ZGl2IGlkPSJodG1sXzUwY2Q3ODQ5MjU0NzQ5YzA4ZGIzN2Y3ZjUxNGRhZmE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaWtlIFN0ICYgRSBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjQ3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTNiZTFhMjVjODMxNGZhMjk3NGRjYTgyMDZlODMzOGYuc2V0Q29udGVudChodG1sXzUwY2Q3ODQ5MjU0NzQ5YzA4ZGIzN2Y3ZjUxNGRhZmE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRiMjlmMzljMjk5YjQzYzJhOTBmOTcwMWNhZjVhYmYzLmJpbmRQb3B1cChwb3B1cF9hM2JlMWEyNWM4MzE0ZmEyOTc0ZGNhODIwNmU4MzM4ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjIxYWMxODgzOWM5NDc0ZDkzZmVhNDY0ZDc3NzRkMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTQxMzA4OSwgLTczLjk5NzA0Njc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzk4MTFkOWIzOTlmNGRmODk1YzM0YzQ3NDAyZjdkZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTcyNGE5NGFlZTM0ZjBiYWJjNmE1OGI3NjgwMDNmZCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2U3MjRhOTRhZWUzNGYwYmFiYzZhNThiNzY4MDAzZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpdmlzaW9uIFN0ICYgQm93ZXJ5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDE4Mjxicj4gbmV0IGRlcGFydHVyZXM6IC0yNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83OTgxMWQ5YjM5OWY0ZGY4OTVjMzRjNDc0MDJmN2RkMS5zZXRDb250ZW50KGh0bWxfN2U3MjRhOTRhZWUzNGYwYmFiYzZhNThiNzY4MDAzZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjIxYWMxODgzOWM5NDc0ZDkzZmVhNDY0ZDc3NzRkMDUuYmluZFBvcHVwKHBvcHVwXzc5ODExZDliMzk5ZjRkZjg5NWMzNGM0NzQwMmY3ZGQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNDVmNjQzOWI2MzQ0YTEzOTY3YjIwNGZlYTU0NjlhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNDIzMiwgLTczLjk4NjkyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q2ODczNzRjYWM1ZDQ1MWJiZGEzZDJlMjRlNzU1ZGVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjc4ZTNkMTRkODg5NDEwZmJjNDczOTEwMTIxZGM4ZjAgPSAkKGA8ZGl2IGlkPSJodG1sX2Y3OGUzZDE0ZDg4OTQxMGZiYzQ3MzkxMDEyMWRjOGYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDE1IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU3NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDgyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTkyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q2ODczNzRjYWM1ZDQ1MWJiZGEzZDJlMjRlNzU1ZGVkLnNldENvbnRlbnQoaHRtbF9mNzhlM2QxNGQ4ODk0MTBmYmM0NzM5MTAxMjFkYzhmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNDVmNjQzOWI2MzQ0YTEzOTY3YjIwNGZlYTU0NjlhOC5iaW5kUG9wdXAocG9wdXBfZDY4NzM3NGNhYzVkNDUxYmJkYTNkMmUyNGU3NTVkZWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyZjIyMWUwMTUzMjQ0MDU4ZjdkNDBjY2NmNTQzN2UzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg2ODMyMDgsIC03My45Nzk2NzcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA4NmI4NGI1NTYyNDQwZmE5M2I4ZTUyYmFhMThkYzQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDk5ODkwMTEyOWYzNDY0NGFhMTBmZGI3ZWVkNzQyYjkgPSAkKGA8ZGl2IGlkPSJodG1sX2Q5OTg5MDExMjlmMzQ2NDRhYTEwZmRiN2VlZDc0MmI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4zIEF2ZSAmIFNjaGVybWVyaG9ybiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4NmI4NGI1NTYyNDQwZmE5M2I4ZTUyYmFhMThkYzQ3LnNldENvbnRlbnQoaHRtbF9kOTk4OTAxMTI5ZjM0NjQ0YWExMGZkYjdlZWQ3NDJiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MmYyMjFlMDE1MzI0NDA1OGY3ZDQwY2NjZjU0MzdlMy5iaW5kUG9wdXAocG9wdXBfMDg2Yjg0YjU1NjI0NDBmYTkzYjhlNTJiYWExOGRjNDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VjNjc2MmFiOTE3YjRhNDg5YTg1ZjFkZWNlNTkxNDM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIyMTc0NDQsIC03My45ODM2ODc3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTExLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWJiYTg5ZjZiNjNiNGMzMTk2MDc2YjU1Y2Y3OTAwYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTczM2YzZTU3NzQ0MzYwYTU2MGMxOWNlODE1YzE2NCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWU3MzNmM2U1Nzc0NDM2MGE1NjBjMTljZTgxNWMxNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMiBTdCAmIEF2ZW51ZSBCPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDI5Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0yMjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWJiYTg5ZjZiNjNiNGMzMTk2MDc2YjU1Y2Y3OTAwYTQuc2V0Q29udGVudChodG1sXzFlNzMzZjNlNTc3NDQzNjBhNTYwYzE5Y2U4MTVjMTY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VjNjc2MmFiOTE3YjRhNDg5YTg1ZjFkZWNlNTkxNDM4LmJpbmRQb3B1cChwb3B1cF9hYmJhODlmNmI2M2I0YzMxOTYwNzZiNTVjZjc5MDBhNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjA0NmZmNjAwMWIwNDQyMmJlMWU2MTg0MDMzNGRmNmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjA4MjgzNCwgLTczLjk3NzkzMTcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwZTYxYzFkYWE1MDQ5MmRhOWIxYzFhYjI0NTY1YmMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDljYWQ4ZjczZTViNGYxNTljNzBjZWZhMDVhMDQ1YTUgPSAkKGA8ZGl2IGlkPSJodG1sXzQ5Y2FkOGY3M2U1YjRmMTU5YzcwY2VmYTA1YTA0NWE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BdmVudWUgRCAmIEUgMyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjI3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTEzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwZTYxYzFkYWE1MDQ5MmRhOWIxYzFhYjI0NTY1YmMzLnNldENvbnRlbnQoaHRtbF80OWNhZDhmNzNlNWI0ZjE1OWM3MGNlZmEwNWEwNDVhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMDQ2ZmY2MDAxYjA0NDIyYmUxZTYxODQwMzM0ZGY2ZS5iaW5kUG9wdXAocG9wdXBfYzBlNjFjMWRhYTUwNDkyZGE5YjFjMWFiMjQ1NjViYzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxNGE3NDIwYWU0ZTRlZjE5ODM5Njg4MDU0OWQ4NTUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIzNjI3MzgsIC03My45OTk0OTYwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzYTk4NTc5ZDY0NjQ2ZmQ4Nzg4MTA3Yjg5NGM0MmUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmFjODgwZWJiNGY0NDhlYmFiMmMyZWQzM2RkNzAwNTQgPSAkKGA8ZGl2IGlkPSJodG1sXzZhYzg4MGViYjRmNDQ4ZWJhYjJjMmVkMzNkZDcwMDU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZXJjZXIgU3QgJiBTcHJpbmcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM0Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDg3PGJyPiBuZXQgZGVwYXJ0dXJlczogMTQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzYTk4NTc5ZDY0NjQ2ZmQ4Nzg4MTA3Yjg5NGM0MmUyLnNldENvbnRlbnQoaHRtbF82YWM4ODBlYmI0ZjQ0OGViYWIyYzJlZDMzZGQ3MDA1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMTRhNzQyMGFlNGU0ZWYxOTgzOTY4ODA1NDlkODU1MS5iaW5kUG9wdXAocG9wdXBfNTNhOTg1NzlkNjQ2NDZmZDg3ODgxMDdiODk0YzQyZTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmNTY4NjRiZTZlMjQ5YWVhMGYyNmEwZGJmN2UyNTM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA0NjMzMzQsIC03NC4wMTM2MTcwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMjIuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzJiMTc5ZmM5OGM0OGYzOTg3ZDAzNDY1OTk0OGQ2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2OGIyZTYzNTU2NTQ2MDFhMDc2ODhjNzIwMjMzZjAxID0gJChgPGRpdiBpZD0iaHRtbF80NjhiMmU2MzU1NjU0NjAxYTA3Njg4YzcyMDIzM2YwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBCYXR0ZXJ5IFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcyMDxicj4gbmV0IGRlcGFydHVyZXM6IDQ1MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzJiMTc5ZmM5OGM0OGYzOTg3ZDAzNDY1OTk0OGQ2MC5zZXRDb250ZW50KGh0bWxfNDY4YjJlNjM1NTY1NDYwMWEwNzY4OGM3MjAyMzNmMDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmY1Njg2NGJlNmUyNDlhZWEwZjI2YTBkYmY3ZTI1MzQuYmluZFBvcHVwKHBvcHVwXzNjMmIxNzlmYzk4YzQ4ZjM5ODdkMDM0NjU5OTQ4ZDYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Yzc3NzVmYmQxZjQ0YmM5YmZkYTY4NTM1ZWUxNzhiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MDk1NzU2LCAtNzMuOTY3MjQ0NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDY4OTlmNjg3MTg0YjlmOTJmYjk0YjVkYjk0Yzg0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQyOGQyNjAxMjc2ZTQ2ODU5OTk3Yjk3MzY1MjY1MTJjID0gJChgPGRpdiBpZD0iaHRtbF80MjhkMjYwMTI3NmU0Njg1OTk5N2I5NzM2NTI2NTEyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA1OCBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI5Mzxicj4gbmV0IGRlcGFydHVyZXM6IC00LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0Njg5OWY2ODcxODRiOWY5MmZiOTRiNWRiOTRjODQwLnNldENvbnRlbnQoaHRtbF80MjhkMjYwMTI3NmU0Njg1OTk5N2I5NzM2NTI2NTEyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Yzc3NzVmYmQxZjQ0YmM5YmZkYTY4NTM1ZWUxNzhiMS5iaW5kUG9wdXAocG9wdXBfMzQ2ODk5ZjY4NzE4NGI5ZjkyZmI5NGI1ZGI5NGM4NDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJjNWFmOWUwOTc0ODRkNDc5OWQ4NDU3ZGU3YjU1NmRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA4MjM1MDIsIC03NC4wMDUzMDA2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5YzM3YTIyZDYxOTRiMTY5OWRlMjU0MGViYTMyNjQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM5ZWFhZWM4ZjM5NDhkOTk4NjdiNTU3NzAzYmUzOWMgPSAkKGA8ZGl2IGlkPSJodG1sXzljOWVhYWVjOGYzOTQ4ZDk5ODY3YjU1NzcwM2JlMzljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGlmZiBTdCAmIEZ1bHRvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjI0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMDU8YnI+IG5ldCBkZXBhcnR1cmVzOiA4MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOWMzN2EyMmQ2MTk0YjE2OTlkZTI1NDBlYmEzMjY0MC5zZXRDb250ZW50KGh0bWxfOWM5ZWFhZWM4ZjM5NDhkOTk4NjdiNTU3NzAzYmUzOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmM1YWY5ZTA5NzQ4NGQ0Nzk5ZDg0NTdkZTdiNTU2ZGEuYmluZFBvcHVwKHBvcHVwX2I5YzM3YTIyZDYxOTRiMTY5OWRlMjU0MGViYTMyNjQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTUwOWFjY2ZkZjM0NGNiYjA3NjdmMmFmYmY3NGY1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDI3NDg3LCAtNzMuOTg5OTAwMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC02LjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMTVkODg5ZGJhMGQ0MDJiYjU3Y2VjYmJmNzA0NTkxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyZWY5ZGZhMWMwODQ2MGZhNjBiNWI1NjY3MmRjYjBkID0gJChgPGRpdiBpZD0iaHRtbF82MmVmOWRmYTFjMDg0NjBmYTYwYjViNTY2NzJkY2IwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FuYWwgU3QgJiBSdXRnZXJzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMyNDxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjE1ZDg4OWRiYTBkNDAyYmI1N2NlY2JiZjcwNDU5MWUuc2V0Q29udGVudChodG1sXzYyZWY5ZGZhMWMwODQ2MGZhNjBiNWI1NjY3MmRjYjBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJhNTA5YWNjZmRmMzQ0Y2JiMDc2N2YyYWZiZjc0ZjViLmJpbmRQb3B1cChwb3B1cF8yMTVkODg5ZGJhMGQ0MDJiYjU3Y2VjYmJmNzA0NTkxZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzBiMWExMDljYjI5NDQ0Mzk3NTg4N2NiNTEzYjYxMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTMwNzkxNiwgLTczLjk5ODUxMTkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDM1YjFlYzU4NTc2NGE3ZWFjYjA5NWI0NmMwNGI5NTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzA1YmQ4M2FhODM0MjkxODIzZjE2MDBkMDY1YWJkZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTMwNWJkODNhYTgzNDI5MTgyM2YxNjAwZDA2NWFiZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0IEphbWVzIFBsICYgT2xpdmVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOTUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE4Nzxicj4gbmV0IGRlcGFydHVyZXM6IC04LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNWIxZWM1ODU3NjRhN2VhY2IwOTViNDZjMDRiOTUwLnNldENvbnRlbnQoaHRtbF9lMzA1YmQ4M2FhODM0MjkxODIzZjE2MDBkMDY1YWJkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMGIxYTEwOWNiMjk0NDQzOTc1ODg3Y2I1MTNiNjEwNS5iaW5kUG9wdXAocG9wdXBfMDM1YjFlYzU4NTc2NGE3ZWFjYjA5NWI0NmMwNGI5NTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1Y2JiNzE5YTFmMzQxODRiNDIwYWJmYjRmMTJlNjI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE0OTc4NywgLTc0LjAxMzAxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNi41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlkMzdjODc4OTYwMjQyMGQ5NGM1NzU5YTBhZTc5MTY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjdkMDQwMzJmN2FiNGMxZTgwZTQ3OGQ0MmVlYTdlYmYgPSAkKGA8ZGl2IGlkPSJodG1sX2Y3ZDA0MDMyZjdhYjRjMWU4MGU0NzhkNDJlZWE3ZWJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NdXJyYXkgU3QgJiBXZXN0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMwNTxicj4gbmV0IGRlcGFydHVyZXM6IDEzMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZDM3Yzg3ODk2MDI0MjBkOTRjNTc1OWEwYWU3OTE2OS5zZXRDb250ZW50KGh0bWxfZjdkMDQwMzJmN2FiNGMxZTgwZTQ3OGQ0MmVlYTdlYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDVjYmI3MTlhMWYzNDE4NGI0MjBhYmZiNGYxMmU2MjQuYmluZFBvcHVwKHBvcHVwXzlkMzdjODc4OTYwMjQyMGQ5NGM1NzU5YTBhZTc5MTY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NzUyNDNiZmJlZDM0Mzk3YmRjZjYwNDQyZGM0YjFkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4OTI2OTQyLCAtNzMuOTg5MTI4NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5Mjg5NGIxZDNkOTRmZTg4YzM4MTIxMmEzNWVlZGJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWE3MWY2NjcyMDUxNDZiOGE4ZTgwMjUzOGZkZDFkZWUgPSAkKGA8ZGl2IGlkPSJodG1sXzlhNzFmNjY3MjA1MTQ2YjhhOGU4MDI1MzhmZGQxZGVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TdGF0ZSBTdCAmIFNtaXRoIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE1NTxicj4gbmV0IGRlcGFydHVyZXM6IDIyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5Mjg5NGIxZDNkOTRmZTg4YzM4MTIxMmEzNWVlZGJjLnNldENvbnRlbnQoaHRtbF85YTcxZjY2NzIwNTE0NmI4YThlODAyNTM4ZmRkMWRlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NzUyNDNiZmJlZDM0Mzk3YmRjZjYwNDQyZGM0YjFkYi5iaW5kUG9wdXAocG9wdXBfODkyODk0YjFkM2Q5NGZlODhjMzgxMjEyYTM1ZWVkYmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxNzdlYjA2ZjJhMzRkOWU4MTIwNTc5NTdiODNhYWZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE3MjI3NCwgLTczLjk4ODAyMDg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkYWI4ODVmMjA3NTQ3ZmZhZTAyMWU2YjAxMzlmNjg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTRmMWM1MmUwZWIwNDBmZmI2ZDBkZjY1NWFkMDU2NmMgPSAkKGA8ZGl2IGlkPSJodG1sXzk0ZjFjNTJlMGViMDQwZmZiNmQwZGY2NTVhZDA1NjZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3Jmb2xrIFN0ICYgQnJvb21lIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwNTxicj4gbmV0IGRlcGFydHVyZXM6IC01OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZGFiODg1ZjIwNzU0N2ZmYWUwMjFlNmIwMTM5ZjY4OS5zZXRDb250ZW50KGh0bWxfOTRmMWM1MmUwZWIwNDBmZmI2ZDBkZjY1NWFkMDU2NmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzE3N2ViMDZmMmEzNGQ5ZTgxMjA1Nzk1N2I4M2FhZmEuYmluZFBvcHVwKHBvcHVwXzZkYWI4ODVmMjA3NTQ3ZmZhZTAyMWU2YjAxMzlmNjg5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMTQ1ODFkM2ZiZjI0YWMwOWVkOWQ3MDQ2MTgxNDRhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMjA1NSwgLTczLjk4OTExMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEzLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MjY3MmQ0ZGQxZTg0NzJjOGI3MjdmNjM0OGM3YThiMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y2ZTc3NDAxODFiZjQ3NjJhYjI4MTgxMjFjYjBmYzZkID0gJChgPGRpdiBpZD0iaHRtbF9mNmU3NzQwMTgxYmY0NzYyYWIyODE4MTIxY2IwZmM2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWxsZW4gU3QgJiBTdGFudG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1ODYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMyNDxicj4gbmV0IGRlcGFydHVyZXM6IC0yNjIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDI2NzJkNGRkMWU4NDcyYzhiNzI3ZjYzNDhjN2E4YjAuc2V0Q29udGVudChodG1sX2Y2ZTc3NDAxODFiZjQ3NjJhYjI4MTgxMjFjYjBmYzZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IxNDU4MWQzZmJmMjRhYzA5ZWQ5ZDcwNDYxODE0NGFmLmJpbmRQb3B1cChwb3B1cF80MjY3MmQ0ZGQxZTg0NzJjOGI3MjdmNjM0OGM3YThiMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDNmMzY0ZTA1YmZiNDIxYmI3ZjQ4ZGQ0Mjg0YzU3ZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTYxMDIyNiwgLTczLjk2NzUxMDM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDcwNWJiNWNkZGUxNDk1OTk2MzM0ODYxNjhjZGRlY2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTk1MGVkYjBkYmU0MDgwYTRiY2JlNzAwNmNkMDYyMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzE5NTBlZGIwZGJlNDA4MGE0YmNiZTcwMDZjZDA2MjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhc2hpbmd0b24gQXZlICYgUGFyayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTYyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3MDViYjVjZGRlMTQ5NTk5NjMzNDg2MTY4Y2RkZWNmLnNldENvbnRlbnQoaHRtbF9jMTk1MGVkYjBkYmU0MDgwYTRiY2JlNzAwNmNkMDYyMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80M2YzNjRlMDViZmI0MjFiYjdmNDhkZDQyODRjNTdkMi5iaW5kUG9wdXAocG9wdXBfNDcwNWJiNWNkZGUxNDk1OTk2MzM0ODYxNjhjZGRlY2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhNWViN2VmY2M5MDQxNzg5MmQ0Y2VmMTFhNzU2NWNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAzNTUzNzcsIC03NC4wMDY3MDIyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNi42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDE3YWNhMzIzZWM4NGU1MGI4MTg4ZGNhMmY2MTY1ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMjFjNzY5ZjU0ZTM0YTFjYjYwNzU2MjlhNDYzOTU5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTIxYzc2OWY1NGUzNGExY2I2MDc1NjI5YTQ2Mzk1OTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoIFN0ICYgR291dmVybmV1ciBMbjxicj4gdG90YWwgZGVwYXJ0dXJlczogMjE2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNDg8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMzIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDE3YWNhMzIzZWM4NGU1MGI4MTg4ZGNhMmY2MTY1ZmMuc2V0Q29udGVudChodG1sXzEyMWM3NjlmNTRlMzRhMWNiNjA3NTYyOWE0NjM5NTk1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NhNWViN2VmY2M5MDQxNzg5MmQ0Y2VmMTFhNzU2NWNjLmJpbmRQb3B1cChwb3B1cF80MTdhY2EzMjNlYzg0ZTUwYjgxODhkY2EyZjYxNjVmYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjYyNDY3YjVjMDA1NGFiOTg3ZDY5Y2VhNjNhYjQ0NGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDk1NTk1OCwgLTc0LjAwNjUzNjA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDU2ZWUyMjNlZjUwNDFkYjlkOWExZGZjNTk0MTVkNDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTM3NGU4MmYyNWE0ZTNkYTIwNjFhNWZjMmJkN2I4YSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjkzNzRlODJmMjVhNGUzZGEyMDYxYTVmYzJiZDdiOGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZ1bHRvbiBTdCAmIFdpbGxpYW0gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE4OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzMzPGJyPiBuZXQgZGVwYXJ0dXJlczogMTQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1NmVlMjIzZWY1MDQxZGI5ZDlhMWRmYzU5NDE1ZDQ3LnNldENvbnRlbnQoaHRtbF8yOTM3NGU4MmYyNWE0ZTNkYTIwNjFhNWZjMmJkN2I4YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjI0NjdiNWMwMDU0YWI5ODdkNjljZWE2M2FiNDQ0ZC5iaW5kUG9wdXAocG9wdXBfZDU2ZWUyMjNlZjUwNDFkYjlkOWExZGZjNTk0MTVkNDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5YjFjOGEzZDNiZjQ3Y2RiNmI3NzM4OTkwYmYwM2MxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI0NTM3MzQsIC03My45ODE4NTQyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTguOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5ODZlYTMyNzA2OTQ1ODI4M2Q0NDBjNWIwNGEwMjVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGZjYTI0MDQwYzZkNDg1NjlhYWNhNzNhZDdiZGMyZjEgPSAkKGA8ZGl2IGlkPSJodG1sX2RmY2EyNDA0MGM2ZDQ4NTY5YWFjYTczYWQ3YmRjMmYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDYgU3QgJiBBdmVudWUgQjxicj4gdG90YWwgZGVwYXJ0dXJlczogNDQwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNjI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTc4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5ODZlYTMyNzA2OTQ1ODI4M2Q0NDBjNWIwNGEwMjVlLnNldENvbnRlbnQoaHRtbF9kZmNhMjQwNDBjNmQ0ODU2OWFhY2E3M2FkN2JkYzJmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOWIxYzhhM2QzYmY0N2NkYjZiNzczODk5MGJmMDNjMS5iaW5kUG9wdXAocG9wdXBfMjk4NmVhMzI3MDY5NDU4MjgzZDQ0MGM1YjA0YTAyNWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0YmI4ZWEwOTFjYTQ5MjU4YWQ1NTRmODk1MWM4Y2FhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzExMDY1OTk5OTk5OTk1LCAtNzQuMDA5NDQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA5LjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzEwZDZhNjkxNjI3NGZjMTk4OGEzNTk3MTgyZTE2NzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDFlZGU1ZDJhYTg0MjgwOGI1ZTUyNDk1Njc2NmYyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTAxZWRlNWQyYWE4NDI4MDhiNWU1MjQ5NTY3NjZmMjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZ1bHRvbiBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQwNjxicj4gbmV0IGRlcGFydHVyZXM6IDE4Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMTBkNmE2OTE2Mjc0ZmMxOTg4YTM1OTcxODJlMTY3NC5zZXRDb250ZW50KGh0bWxfNTAxZWRlNWQyYWE4NDI4MDhiNWU1MjQ5NTY3NjZmMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjRiYjhlYTA5MWNhNDkyNThhZDU1NGY4OTUxYzhjYWEuYmluZFBvcHVwKHBvcHVwX2MxMGQ2YTY5MTYyNzRmYzE5ODhhMzU5NzE4MmUxNjc0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMzY1NTcxMzBkZjU0MGQyOTU5ZGE4ZjAzMWI4MzRlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNzU3MSwgLTc0LjAwNTU0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I5YTRhNDkyZDdhNDhiMDhhZTUwYTA2Y2U0MmIxNGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYjVhNTliZGY3ZmQ0Y2Y0OWUxZTMwNThhNWFmMTIxMyA9ICQoYDxkaXYgaWQ9Imh0bWxfM2I1YTU5YmRmN2ZkNGNmNDllMWUzMDU4YTVhZjEyMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxlb25hcmQgU3QgJiBDaHVyY2ggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIyOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzQ3PGJyPiBuZXQgZGVwYXJ0dXJlczogMTE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNiOWE0YTQ5MmQ3YTQ4YjA4YWU1MGEwNmNlNDJiMTRlLnNldENvbnRlbnQoaHRtbF8zYjVhNTliZGY3ZmQ0Y2Y0OWUxZTMwNThhNWFmMTIxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMzY1NTcxMzBkZjU0MGQyOTU5ZGE4ZjAzMWI4MzRlMy5iaW5kUG9wdXAocG9wdXBfM2I5YTRhNDkyZDdhNDhiMDhhZTUwYTA2Y2U0MmIxNGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyMDYyNWQ4ZjllMjQzYmVhMzQyNGY0NzFjYzk2YTZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk5OTE3NTUsIC03My45ODk3MTc3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNi4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZiNDE4YjVmY2NkYjRmMGY4M2QyZjM1ZmRmNmU5ZGNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWUxZjY5Y2RlZmRjNDY4ZWJiYjYwYWQ3MTViNzFkYjIgPSAkKGA8ZGl2IGlkPSJodG1sXzllMWY2OWNkZWZkYzQ2OGViYmI2MGFkNzE1YjcxZGIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYWRtYW4gUGxhemEgRSAmIFJlZCBDcm9zcyBQbDxicj4gdG90YWwgZGVwYXJ0dXJlczogNzYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE5Nzxicj4gbmV0IGRlcGFydHVyZXM6IDEyMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YjQxOGI1ZmNjZGI0ZjBmODNkMmYzNWZkZjZlOWRjZS5zZXRDb250ZW50KGh0bWxfOWUxZjY5Y2RlZmRjNDY4ZWJiYjYwYWQ3MTViNzFkYjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTIwNjI1ZDhmOWUyNDNiZWEzNDI0ZjQ3MWNjOTZhNmQuYmluZFBvcHVwKHBvcHVwXzZiNDE4YjVmY2NkYjRmMGY4M2QyZjM1ZmRmNmU5ZGNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Njc0YjJhYTFmNDU0MzlmOTI3MmU0NDE5MGIxNTY2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NjE5MTk5OTk5OTk5NiwgLTczLjk5MTIxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVkMGI4MGQ1MzVmNGJkYTg3ZGE3OTE1NjM2MGMzNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTRjMjE5ODIyZGM0NjI1OTgzMzllMDY0YTQ4ODA0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTU0YzIxOTgyMmRjNDYyNTk4MzM5ZTA2NGE0ODgwNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gU3QgJiBUaWxsYXJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQzPGJyPiBuZXQgZGVwYXJ0dXJlczogNDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjVkMGI4MGQ1MzVmNGJkYTg3ZGE3OTE1NjM2MGMzNzYuc2V0Q29udGVudChodG1sX2E1NGMyMTk4MjJkYzQ2MjU5ODMzOWUwNjRhNDg4MDQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2NzRiMmFhMWY0NTQzOWY5MjcyZTQ0MTkwYjE1NjY0LmJpbmRQb3B1cChwb3B1cF9mNWQwYjgwZDUzNWY0YmRhODdkYTc5MTU2MzYwYzM3NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGIxYWI0OGU5ZDAxNDNhOTk2ZDBlOGU1NzJiZTQ2YmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTIzNjE3OCwgLTczLjk4NjMxNzQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA5Ljg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDIxNTkwYThkMzFiNDIwMjk4Nzg4OTc2M2EyNGMzYmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTBiMjMwZmIyYWQ0OWJmYWVkMGEyMGRlOWE0OWQ1MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzUwYjIzMGZiMmFkNDliZmFlZDBhMjBkZTlhNDlkNTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhd3JlbmNlIFN0ICYgV2lsbG91Z2hieSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTUzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxOTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDIxNTkwYThkMzFiNDIwMjk4Nzg4OTc2M2EyNGMzYmIuc2V0Q29udGVudChodG1sXzM1MGIyMzBmYjJhZDQ5YmZhZWQwYTIwZGU5YTQ5ZDUzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhiMWFiNDhlOWQwMTQzYTk5NmQwZThlNTcyYmU0NmJlLmJpbmRQb3B1cChwb3B1cF8wMjE1OTBhOGQzMWI0MjAyOTg3ODg5NzYzYTI0YzNiYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTc3OTQ4MTAxNWJjNDlmYTk3OTJkMDE5M2FlMGY5M2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODk4ODgsIC03My45ODEwMTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTQyYTAwMmM5NzA0Y2U2OGIwOWY1MzlmODBlMTE0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwODk1ZTUwYzg3MzQ0YmM5NzQxNzlkMmEzZDM0Njk0ID0gJChgPGRpdiBpZD0iaHRtbF82MDg5NWU1MGM4NzM0NGJjOTc0MTc5ZDJhM2QzNDY5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGVLYWxiIEF2ZSAmIEh1ZHNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjEyPGJyPiBuZXQgZGVwYXJ0dXJlczogNDkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmE0MmEwMDJjOTcwNGNlNjhiMDlmNTM5ZjgwZTExNDcuc2V0Q29udGVudChodG1sXzYwODk1ZTUwYzg3MzQ0YmM5NzQxNzlkMmEzZDM0Njk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3Nzk0ODEwMTViYzQ5ZmE5NzkyZDAxOTNhZTBmOTNlLmJpbmRQb3B1cChwb3B1cF8yYTQyYTAwMmM5NzA0Y2U2OGIwOWY1MzlmODBlMTE0NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmQ2NzY5MDIyNzQ1NDE3M2EzMTczZTk1Yjg5ZDAxZDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzYyNDUyNywgLTczLjk4NDczNzY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTAuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxYTA5YzQwYjEwOTQ5NDJiMmZjNzVhYmVkYmY3MjJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQ0MjczMjFjN2MyNDUxZjk4NDM1YThlOWY5Yjg1OWYgPSAkKGA8ZGl2IGlkPSJodG1sX2JkNDI3MzIxYzdjMjQ1MWY5ODQzNWE4ZTlmOWI4NTlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDE5IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ4My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjY1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MWEwOWM0MGIxMDk0OTQyYjJmYzc1YWJlZGJmNzIyZi5zZXRDb250ZW50KGh0bWxfYmQ0MjczMjFjN2MyNDUxZjk4NDM1YThlOWY5Yjg1OWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmQ2NzY5MDIyNzQ1NDE3M2EzMTczZTk1Yjg5ZDAxZDMuYmluZFBvcHVwKHBvcHVwXzgxYTA5YzQwYjEwOTQ5NDJiMmZjNzVhYmVkYmY3MjJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wN2I1NDQ2MTJhZjg0Y2Q0OTU5NDBjNzk1MDc1MzM2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyOTUzODM3LCAtNzMuOTg0MjY3MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExNTA4MDRiZWJkMTQxZDdhMDllMjk0M2IyNTdjZGVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjc5MWRhMWE1MTEyNGIyNjk0ODEyY2RiZmM1ODA2NmEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y3OTFkYTFhNTExMjRiMjY5NDgxMmNkYmZjNTgwNjZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDExIFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU3MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzUzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMTUwODA0YmViZDE0MWQ3YTA5ZTI5NDNiMjU3Y2RlYS5zZXRDb250ZW50KGh0bWxfZjc5MWRhMWE1MTEyNGIyNjk0ODEyY2RiZmM1ODA2NmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDdiNTQ0NjEyYWY4NGNkNDk1OTQwYzc5NTA3NTMzNjYuYmluZFBvcHVwKHBvcHVwX2ExNTA4MDRiZWJkMTQxZDdhMDllMjk0M2IyNTdjZGVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMmI2NmM1OWExZDA0YmJjYmYyZGNjZGE3NzI0OWVhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNTMzNzg5OTk5OTk5NCwgLTc0LjAxNjU4MzU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDQyNGE0ZjViYjE0MDAzYWU0MDdjN2E2ZWE4NmZmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI4NzJiMGZkYzg0YzRlMzJiYzY1Mzc4NzZlZjk1OWE2ID0gJChgPGRpdiBpZD0iaHRtbF8yODcyYjBmZGM4NGM0ZTMyYmM2NTM3ODc2ZWY5NTlhNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmVzZXkgUGwgJiBSaXZlciBUZXJyYWNlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1NzYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY3Njxicj4gbmV0IGRlcGFydHVyZXM6IDEwMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDQyNGE0ZjViYjE0MDAzYWU0MDdjN2E2ZWE4NmZmNC5zZXRDb250ZW50KGh0bWxfMjg3MmIwZmRjODRjNGUzMmJjNjUzNzg3NmVmOTU5YTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDJiNjZjNTlhMWQwNGJiY2JmMmRjY2RhNzcyNDllYTguYmluZFBvcHVwKHBvcHVwX2Y0NDI0YTRmNWJiMTQwMDNhZTQwN2M3YTZlYTg2ZmY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTA3NTlhYWE5NGQ0Njg3Yjg0ODM5YWVmMTcxZTlhYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNDA1NTQ5LCAtNzQuMDA5NjU5NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2OGEwNGQzMmE4YTRiYmI4YmZkNmIyOTNhMDkzNGE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmIyNmZiZDEwOGZlNDRlYThjMTA4NDZmN2M1YzlmODcgPSAkKGA8ZGl2IGlkPSJodG1sXzJiMjZmYmQxMDhmZTQ0ZWE4YzEwODQ2ZjdjNWM5Zjg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXR0cyBTdCAmIEdyZWVud2ljaCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTg1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAzNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNjhhMDRkMzJhOGE0YmJiOGJmZDZiMjkzYTA5MzRhOC5zZXRDb250ZW50KGh0bWxfMmIyNmZiZDEwOGZlNDRlYThjMTA4NDZmN2M1YzlmODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGEwNzU5YWFhOTRkNDY4N2I4NDgzOWFlZjE3MWU5YWMuYmluZFBvcHVwKHBvcHVwX2I2OGEwNGQzMmE4YTRiYmI4YmZkNmIyOTNhMDkzNGE4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTk3ZGQwMjk3ZDU0MTJkYmZiZTFkYjU2ZjE0ZTdiZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDUwNDUxLCAtNzQuMDA1NjI3ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NmQ1ZjM3NGY3MWQ0MGRjODA5ZTJmMGQyMDMzMTIzMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzZDMyNmFkOGUzNTRiZDg4ZjBlY2E2MDRhYmUyYTFkID0gJChgPGRpdiBpZD0iaHRtbF9mM2QzMjZhZDhlMzU0YmQ4OGYwZWNhNjA0YWJlMmExZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVhZGUgU3QgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTIxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyODY8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODZkNWYzNzRmNzFkNDBkYzgwOWUyZjBkMjAzMzEyMzMuc2V0Q29udGVudChodG1sX2YzZDMyNmFkOGUzNTRiZDg4ZjBlY2E2MDRhYmUyYTFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlOTdkZDAyOTdkNTQxMmRiZmJlMWRiNTZmMTRlN2JlLmJpbmRQb3B1cChwb3B1cF84NmQ1ZjM3NGY3MWQ0MGRjODA5ZTJmMGQyMDMzMTIzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODIwYjJiY2QyODhlNDRiN2I3MTMyYWUzNTIxN2ZhOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTE3MzEwNywgLTczLjk5MTkzMDQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDE5YmUzZTMzNWM5NDdiMzhjMjIzNGExNzg1NzZlZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Yzg4MGYyZDA0MzU0Nzc5YjVlNjY2YWYwNmM5NTNjZiA9ICQoYDxkaXYgaWQ9Imh0bWxfN2M4ODBmMmQwNDM1NDc3OWI1ZTY2NmFmMDZjOTUzY2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpa2UgU3QgJiBNb25yb2UgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDE5YmUzZTMzNWM5NDdiMzhjMjIzNGExNzg1NzZlZWIuc2V0Q29udGVudChodG1sXzdjODgwZjJkMDQzNTQ3NzliNWU2NjZhZjA2Yzk1M2NmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyMGIyYmNkMjg4ZTQ0YjdiNzEzMmFlMzUyMTdmYTlhLmJpbmRQb3B1cChwb3B1cF8wMTliZTNlMzM1Yzk0N2IzOGMyMjM0YTE3ODU3NmVlYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGM3NDE1ZGM4YzczNDBlMTg4NjQ4ODk4ZGE1NDMwZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTIxOTkwNiwgLTczLjk3OTQ4MTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTYwZDdmODRiZDNhNDc2YzkyNGY3MTJiYWZlMTYyZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mN2Y1Njc2ZmMyNDU0NTkxYmM3ZGE2YjlmNGY0NzFhNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjdmNTY3NmZjMjQ1NDU5MWJjN2RhNmI5ZjRmNDcxYTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNoZXJyeSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTU5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4MTxicj4gbmV0IGRlcGFydHVyZXM6IC03OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjBkN2Y4NGJkM2E0NzZjOTI0ZjcxMmJhZmUxNjJlNS5zZXRDb250ZW50KGh0bWxfZjdmNTY3NmZjMjQ1NDU5MWJjN2RhNmI5ZjRmNDcxYTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGM3NDE1ZGM4YzczNDBlMTg4NjQ4ODk4ZGE1NDMwZjkuYmluZFBvcHVwKHBvcHVwX2U2MGQ3Zjg0YmQzYTQ3NmM5MjRmNzEyYmFmZTE2MmU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNzU4NWMyODZlNzY0ODBjOTYzOTIyZTQxM2NhZWUyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MjM4Nzg3LCAtNzMuOTk3MjYyMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5NGRiM2VjNTllMjRkYzk4ZDg5NTRhYmU1MzdmYmM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzEyMWY1NWViMzBhNDQ0ZDhmMmZjZDA0MGNjYjhhYTIgPSAkKGA8ZGl2IGlkPSJodG1sX2MxMjFmNTVlYjMwYTQ0NGQ4ZjJmY2QwNDBjY2I4YWEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDIwIFN0ICYgNyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ2Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTIwPGJyPiBuZXQgZGVwYXJ0dXJlczogNTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzk0ZGIzZWM1OWUyNGRjOThkODk1NGFiZTUzN2ZiYzcuc2V0Q29udGVudChodG1sX2MxMjFmNTVlYjMwYTQ0NGQ4ZjJmY2QwNDBjY2I4YWEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3NTg1YzI4NmU3NjQ4MGM5NjM5MjJlNDEzY2FlZTIwLmJpbmRQb3B1cChwb3B1cF83OTRkYjNlYzU5ZTI0ZGM5OGQ4OTU0YWJlNTM3ZmJjNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTQyZGZhOTM4MWExNGE5NWFjNTVmNzU3OWY0ZDg0OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjkwMzkxNywgLTczLjk5NDA0NjQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWZhZTUwOTA1YTk4NGE3MmEzYjM3NzkwM2VhNjY3YTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81M2ViNzdlOTIzNDA0ZGFlOGE3NzA2MzY5NGVjYjRkZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTNlYjc3ZTkyMzQwNGRhZThhNzcwNjM2OTRlY2I0ZGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldhc2hpbmd0b24gUGwgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTA1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1NTI8YnI+IG5ldCBkZXBhcnR1cmVzOiA0Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZmFlNTA5MDVhOTg0YTcyYTNiMzc3OTAzZWE2NjdhOC5zZXRDb250ZW50KGh0bWxfNTNlYjc3ZTkyMzQwNGRhZThhNzcwNjM2OTRlY2I0ZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTQyZGZhOTM4MWExNGE5NWFjNTVmNzU3OWY0ZDg0OGUuYmluZFBvcHVwKHBvcHVwXzVmYWU1MDkwNWE5ODRhNzJhM2IzNzc5MDNlYTY2N2E4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYmU0ZTcyOTE2YjE0YTA0OGIxZDMzYmNhN2M5ODBlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMDQ3NzQ3LCAtNzMuOTk5MDYwNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTM1ZmQ2ZWUyNWJlNGZiZGFhNjNmMzdmMzBkOWM5MGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNmFhMjc1YjJhZDM0ZDdmOTA4ODE2MzgwNzAwNDI0YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTZhYTI3NWIyYWQzNGQ3ZjkwODgxNjM4MDcwMDQyNGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN1bGxpdmFuIFN0ICYgV2FzaGluZ3RvbiBTcTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDIwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzVmZDZlZTI1YmU0ZmJkYWE2M2YzN2YzMGQ5YzkwZi5zZXRDb250ZW50KGh0bWxfMTZhYTI3NWIyYWQzNGQ3ZjkwODgxNjM4MDcwMDQyNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2JlNGU3MjkxNmIxNGEwNDhiMWQzM2JjYTdjOTgwZTEuYmluZFBvcHVwKHBvcHVwXzkzNWZkNmVlMjViZTRmYmRhYTYzZjM3ZjMwZDljOTBmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OGRjOGNiYzE5ZDU0NDQzOTllMzE0YWI1N2Q5OGUyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMzc5OTIwMDAwMDAwNiwgLTc0LjAwODM4Njc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Y2RjMzUyNGI4MDE0Nzc2YWRmODY1ZmJhMjM2YmZjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiNDQyMzIxZDhlOTQ4OGM4NGFjOTBkNGNjM2QyOGVlID0gJChgPGRpdiBpZD0iaHRtbF9iYjQ0MjMyMWQ4ZTk0ODhjODRhYzkwZDRjYzNkMjhlZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2xkIFNsaXAgJiBGcm9udCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcxPGJyPiBuZXQgZGVwYXJ0dXJlczogMTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWNkYzM1MjRiODAxNDc3NmFkZjg2NWZiYTIzNmJmYzkuc2V0Q29udGVudChodG1sX2JiNDQyMzIxZDhlOTQ4OGM4NGFjOTBkNGNjM2QyOGVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg4ZGM4Y2JjMTlkNTQ0NDM5OWUzMTRhYjU3ZDk4ZTI0LmJpbmRQb3B1cChwb3B1cF85Y2RjMzUyNGI4MDE0Nzc2YWRmODY1ZmJhMjM2YmZjOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjUzMWY5ODJhODhiNDkyNzk4OWU4MWVkYjM2ODNkNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjU4MDYxNCwgLTczLjk3NDIyNDk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ2NzM4N2UzMTAzNGY0MmI3MTEwMTMyNzAxOWI5ZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iODQzMTQ5NzYxMjA0OTQ2YTVlMzdiMjIyZjVhMGQ5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYjg0MzE0OTc2MTIwNDk0NmE1ZTM3YjIyMmY1YTBkOTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkF2ZW51ZSBEICYgRSAxMiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTY4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNDxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQ2NzM4N2UzMTAzNGY0MmI3MTEwMTMyNzAxOWI5Zjguc2V0Q29udGVudChodG1sX2I4NDMxNDk3NjEyMDQ5NDZhNWUzN2IyMjJmNWEwZDkwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I1MzFmOTgyYTg4YjQ5Mjc5ODllODFlZGIzNjgzZDQ4LmJpbmRQb3B1cChwb3B1cF85NDY3Mzg3ZTMxMDM0ZjQyYjcxMTAxMzI3MDE5YjlmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWE3Y2IwNDk3YzUxNDJkYjllOTBjNjJmZmQ3YTk2YWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTI2OTA0MiwgLTczLjk4Nzc2MzIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzBhM2Q0ZTBjZTlmNDM1NDg1OWFlYjgwYjQ2Y2MxYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZmZkMWU3MTViOTU0NjUxYmFjMmNlZGQ0MGFiOGE2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWZmZDFlNzE1Yjk1NDY1MWJhYzJjZWRkNDBhYjhhNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hZGlzb24gU3QgJiBDbGludG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMDMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDk3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTEwNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMGEzZDRlMGNlOWY0MzU0ODU5YWViODBiNDZjYzFiMC5zZXRDb250ZW50KGh0bWxfYWZmZDFlNzE1Yjk1NDY1MWJhYzJjZWRkNDBhYjhhNmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWE3Y2IwNDk3YzUxNDJkYjllOTBjNjJmZmQ3YTk2YWEuYmluZFBvcHVwKHBvcHVwX2MwYTNkNGUwY2U5ZjQzNTQ4NTlhZWI4MGI0NmNjMWIwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYWFmZTQyN2VmMDU0NDE0OGEzYzZhNmQ4NDUyYjAyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNzgyMTQzLCAtNzMuOTc2Mjg5MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYTcyMGQwYWY3N2Y0NTZiOWUxMDkwMjZhYjZhODk3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxYTRhMjExZjZlOTRmMWM4OTEzNThlNzFmZTdhMDRlID0gJChgPGRpdiBpZD0iaHRtbF84MWE0YTIxMWY2ZTk0ZjFjODkxMzU4ZTcxZmU3YTA0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhbnRvbiBTdCAmIE1hbmdpbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTgzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2E3MjBkMGFmNzdmNDU2YjllMTA5MDI2YWI2YTg5N2Yuc2V0Q29udGVudChodG1sXzgxYTRhMjExZjZlOTRmMWM4OTEzNThlNzFmZTdhMDRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JhYWZlNDI3ZWYwNTQ0MTQ4YTNjNmE2ZDg0NTJiMDIyLmJpbmRQb3B1cChwb3B1cF9jYTcyMGQwYWY3N2Y0NTZiOWUxMDkwMjZhYjZhODk3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWZkMGIxMzhjOGRmNDNlNjg3YTYzMmQ3YTc5ZDkxZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTczOTk3MywgLTczLjk4MDE2NTU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmMxNGYzOGRiNWE4NGQ4ZmFiOTAyYWUxOGY1MzA5MmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjEwYzlkNTExZTQ0ZThiOGM4OTA2ZGM4YzU2MmRiZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDYxMGM5ZDUxMWU0NGU4YjhjODkwNmRjOGM1NjJkYmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbHVtYmlhIFN0ICYgUml2aW5ndG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTExMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzE0ZjM4ZGI1YTg0ZDhmYWI5MDJhZTE4ZjUzMDkyZi5zZXRDb250ZW50KGh0bWxfZDYxMGM5ZDUxMWU0NGU4YjhjODkwNmRjOGM1NjJkYmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWZkMGIxMzhjOGRmNDNlNjg3YTYzMmQ3YTc5ZDkxZWIuYmluZFBvcHVwKHBvcHVwXzJjMTRmMzhkYjVhODRkOGZhYjkwMmFlMThmNTMwOTJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzdjOTMxMDllN2Q0ZWIyYmY1Y2ZkNDljYjg5ZjNmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5Nzk0LCAtNzMuOTY5ODY4NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNWZmNTg2YzMwMTE0NzhiOTgwOTlmZTliNzYwMmU4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiOTg5YWY0ZGFhYTQxMTVhNzdmMTkwMDA2YjA5ZDMwID0gJChgPGRpdiBpZD0iaHRtbF9hYjk4OWFmNGRhYWE0MTE1YTc3ZjE5MDAwNmIwOWQzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2xpbnRvbiBBdmUgJiBGbHVzaGluZyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjc8YnI+IG5ldCBkZXBhcnR1cmVzOiA3MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNWZmNTg2YzMwMTE0NzhiOTgwOTlmZTliNzYwMmU4Ny5zZXRDb250ZW50KGh0bWxfYWI5ODlhZjRkYWFhNDExNWE3N2YxOTAwMDZiMDlkMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTc3YzkzMTA5ZTdkNGViMmJmNWNmZDQ5Y2I4OWYzZjUuYmluZFBvcHVwKHBvcHVwX2U1ZmY1ODZjMzAxMTQ3OGI5ODA5OWZlOWI3NjAyZTg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81N2ZjODVjYzE2OTQ0NmJhYjBlZDdkMWUzMWU1ZjgxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NTE0NDMsIC03My45NTM4MDkwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OWQ0ODdlOTg4M2E0ZDU4OWE5Yzg2MGE0MDYzNDE2YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlYjllOTU2NDJjZjRhMzNhOTZjNDQzOTBmNWRlNWQ0ID0gJChgPGRpdiBpZD0iaHRtbF84ZWI5ZTk1NjQyY2Y0YTMzYTk2YzQ0MzkwZjVkZTVkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TW9ucm9lIFN0ICYgQmVkZm9yZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDk1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NDxicj4gbmV0IGRlcGFydHVyZXM6IC01MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OWQ0ODdlOTg4M2E0ZDU4OWE5Yzg2MGE0MDYzNDE2Yy5zZXRDb250ZW50KGh0bWxfOGViOWU5NTY0MmNmNGEzM2E5NmM0NDM5MGY1ZGU1ZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTdmYzg1Y2MxNjk0NDZiYWIwZWQ3ZDFlMzFlNWY4MWMuYmluZFBvcHVwKHBvcHVwXzg5ZDQ4N2U5ODgzYTRkNTg5YTljODYwYTQwNjM0MTZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjkxNGQ2OWIwOGI0ZmFjYjZjNGRlODhlNzAxMWMxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNjQ5NDAzLCAtNzMuOTk3MDQzNzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xN2Q3Zjk0OTQ0ODg0ZTg5YWFmNDZkZjcxYWVlZTBkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0N2IxMTE0MzEyZDQ4ZjY5M2ZiMzM1NGVhMTM2YjEzID0gJChgPGRpdiBpZD0iaHRtbF9iNDdiMTExNDMxMmQ0OGY2OTNmYjMzNTRlYTEzNmIxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAxMyBTdCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ3Mzxicj4gbmV0IGRlcGFydHVyZXM6IC02NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xN2Q3Zjk0OTQ0ODg0ZTg5YWFmNDZkZjcxYWVlZTBkNi5zZXRDb250ZW50KGh0bWxfYjQ3YjExMTQzMTJkNDhmNjkzZmIzMzU0ZWExMzZiMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2I5MTRkNjliMDhiNGZhY2I2YzRkZTg4ZTcwMTFjMTcuYmluZFBvcHVwKHBvcHVwXzE3ZDdmOTQ5NDQ4ODRlODlhYWY0NmRmNzFhZWVlMGQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZGJhMGYzMzU5YmY0Nzg5OWFiMTIxM2YwNjFmNDc4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNjUyODg5LCAtNzQuMDA2MTgwMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjJlNjIyMzZmZTc0NDcxYTQ2ZTdjYzg5YmY5MGQzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIzMWUyNTdhZDUxYjQ2ZWM4ZTM1ZTkwNjFkNjMyYTVjID0gJChgPGRpdiBpZD0iaHRtbF8yMzFlMjU3YWQ1MWI0NmVjOGUzNWU5MDYxZDYzMmE1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmFuayBTdCAmIEh1ZHNvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzU0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyODA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzIyZTYyMjM2ZmU3NDQ3MWE0NmU3Y2M4OWJmOTBkM2Iuc2V0Q29udGVudChodG1sXzIzMWUyNTdhZDUxYjQ2ZWM4ZTM1ZTkwNjFkNjMyYTVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNkYmEwZjMzNTliZjQ3ODk5YWIxMjEzZjA2MWY0Nzg1LmJpbmRQb3B1cChwb3B1cF9jMjJlNjIyMzZmZTc0NDcxYTQ2ZTdjYzg5YmY5MGQzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjMxOWQyODkwZmY0NGQyYWFhNDk1Y2QyZmVjZjg0YjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mjg4NDYwMDAwMDAwMDQsIC03NC4wMDg1OTEwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkYjVjYTY0NDk2ODQyMTFiYjMyOWYzYjA1OTQ5ZTUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDc5ODdhOTk2ZWViNDQyNDkzYjkwZjc5NzYwOWQ2OTkgPSAkKGA8ZGl2IGlkPSJodG1sX2Q3OTg3YTk5NmVlYjQ0MjQ5M2I5MGY3OTc2MDlkNjk5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbndpY2ggU3QgJiBXIEhvdXN0b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUwNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDg2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkYjVjYTY0NDk2ODQyMTFiYjMyOWYzYjA1OTQ5ZTUyLnNldENvbnRlbnQoaHRtbF9kNzk4N2E5OTZlZWI0NDI0OTNiOTBmNzk3NjA5ZDY5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMzE5ZDI4OTBmZjQ0ZDJhYWE0OTVjZDJmZWNmODRiMC5iaW5kUG9wdXAocG9wdXBfNmRiNWNhNjQ0OTY4NDIxMWJiMzI5ZjNiMDU5NDllNTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwNzZmNzEwMmQ1MzQyZjhhNDU0YzM1YTJmODE4ZTk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI0OTA5ODUsIC03NC4wMDE1NDcwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTEuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNWYwZTkwNTU3Y2Q0MzFhODk5NjAzNzUzOTY5YWQ1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3NzUzZjY4NGMzYTRhYWQ4NzMyZDgxYTM4OWE1NWM1ID0gJChgPGRpdiBpZD0iaHRtbF9mNzc1M2Y2ODRjM2E0YWFkODczMmQ4MWEzODlhNTVjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyBCcm9hZHdheSAmIFNwcmluZyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDY2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2ODc8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMjEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzVmMGU5MDU1N2NkNDMxYTg5OTYwMzc1Mzk2OWFkNWEuc2V0Q29udGVudChodG1sX2Y3NzUzZjY4NGMzYTRhYWQ4NzMyZDgxYTM4OWE1NWM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QwNzZmNzEwMmQ1MzQyZjhhNDU0YzM1YTJmODE4ZTk4LmJpbmRQb3B1cChwb3B1cF9jNWYwZTkwNTU3Y2Q0MzFhODk5NjAzNzUzOTY5YWQ1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDQzN2I1NjhjMjZkNDQzNDlmZWQ4YzBlZmJhMTNhMjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTg1MDIxMSwgLTczLjk4MzI5ODU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3ODBhYTM3YTYyNTQzNmJiMWZmMTA2NzliMjliY2E1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGY0Y2Q0MmUxOWE5NGEzYzg2MDNhNTc4Nzk3OGFjNzEgPSAkKGA8ZGl2IGlkPSJodG1sXzBmNGNkNDJlMTlhOTRhM2M4NjAzYTU3ODc5NzhhYzcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZpbmd0b24gU3QgJiBSaWRnZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjE2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDc4MGFhMzdhNjI1NDM2YmIxZmYxMDY3OWIyOWJjYTUuc2V0Q29udGVudChodG1sXzBmNGNkNDJlMTlhOTRhM2M4NjAzYTU3ODc5NzhhYzcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q0MzdiNTY4YzI2ZDQ0MzQ5ZmVkOGMwZWZiYTEzYTI2LmJpbmRQb3B1cChwb3B1cF80NzgwYWEzN2E2MjU0MzZiYjFmZjEwNjc5YjI5YmNhNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRlZjZlMGQ3MWYzNGRiZjliN2NkZTM4ZTEwMGNkODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTU1OTUwOSwgLTczLjk4NzAyOTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGUzOTRkNzY0MTE2NDJmZDhhZWY4NDBlZmQ3ZDc0YzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTExOTFhMmMzMGE0Yjk4YWVlMTM1MjRjNGZmMzk1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWExMTkxYTJjMzBhNGI5OGFlZTEzNTI0YzRmZjM5NWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gU3QgJiBHcmFuZCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzYyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjAyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RlMzk0ZDc2NDExNjQyZmQ4YWVmODQwZWZkN2Q3NGMxLnNldENvbnRlbnQoaHRtbF85YTExOTFhMmMzMGE0Yjk4YWVlMTM1MjRjNGZmMzk1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZGVmNmUwZDcxZjM0ZGJmOWI3Y2RlMzhlMTAwY2Q4Ny5iaW5kUG9wdXAocG9wdXBfZGUzOTRkNzY0MTE2NDJmZDhhZWY4NDBlZmQ3ZDc0YzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjYWZmZWI2ZTdmOTQxMTY5MWExMzgzNTdhMzZiZDZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA1MzA5NTQsIC03NC4wMDYxMjU3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NTk2Y2QzMTNhODRmYTA5ZmUyMmYwNjIxMWQ4OWQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmMyZGU5NjA0ZmMxNGE3YTllMjkyYmE0ZDZiYmQ2NzEgPSAkKGA8ZGl2IGlkPSJodG1sXzJjMmRlOTYwNGZjMTRhN2E5ZTI5MmJhNGQ2YmJkNjcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gcm9udCBTdCAmIE1haWRlbiBMbjxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMDY8YnI+IG5ldCBkZXBhcnR1cmVzOiA4MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mOTU5NmNkMzEzYTg0ZmEwOWZlMjJmMDYyMTFkODlkNi5zZXRDb250ZW50KGh0bWxfMmMyZGU5NjA0ZmMxNGE3YTllMjkyYmE0ZDZiYmQ2NzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmNhZmZlYjZlN2Y5NDExNjkxYTEzODM1N2EzNmJkNmQuYmluZFBvcHVwKHBvcHVwX2Y5NTk2Y2QzMTNhODRmYTA5ZmUyMmYwNjIxMWQ4OWQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYTFhNGQ2ZjQ4ZTU0ZjkxYWIyZGEwNTdkNmI0ZDY5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MzQwNjEzLCAtNzMuOTc3MjI0NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDYwN2Q0NDM1MjJlNDQyNzkyNGQ3NGY1ODIxYzg4YTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTZkMjIzMjE4MTg0YzNmOGI2OTY0OWM5M2Y3OTcxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfY2E2ZDIyMzIxODE4NGMzZjhiNjk2NDljOTNmNzk3MTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNTYgU3QgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTIwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NjA3ZDQ0MzUyMmU0NDI3OTI0ZDc0ZjU4MjFjODhhNy5zZXRDb250ZW50KGh0bWxfY2E2ZDIyMzIxODE4NGMzZjhiNjk2NDljOTNmNzk3MTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGExYTRkNmY0OGU1NGY5MWFiMmRhMDU3ZDZiNGQ2OWQuYmluZFBvcHVwKHBvcHVwXzQ2MDdkNDQzNTIyZTQ0Mjc5MjRkNzRmNTgyMWM4OGE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNGMzODA3Zjg4YWI0Y2E1YjI1NzcyNGQ1YTc3ZjYzOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NTM5NTY3LCAtNzMuOTc0MzE0NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZmJkZTQ2ZTg3ZGQ0ZTdiOTk5M2QwMmMzODRhMzJlZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiY2I1ZDNjYzE5YzQ4NDZiNjAyMTk1OWI2NmE3NjYxID0gJChgPGRpdiBpZD0iaHRtbF84YmNiNWQzY2MxOWM0ODQ2YjYwMjE5NTliNjZhNzY2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UyBQb3J0bGFuZCBBdmUgJiBIYW5zb24gUGw8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA4NTxicj4gbmV0IGRlcGFydHVyZXM6IDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWZiZGU0NmU4N2RkNGU3Yjk5OTNkMDJjMzg0YTMyZWQuc2V0Q29udGVudChodG1sXzhiY2I1ZDNjYzE5YzQ4NDZiNjAyMTk1OWI2NmE3NjYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE0YzM4MDdmODhhYjRjYTViMjU3NzI0ZDVhNzdmNjM4LmJpbmRQb3B1cChwb3B1cF8xZmJkZTQ2ZTg3ZGQ0ZTdiOTk5M2QwMmMzODRhMzJlZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWE0MzNmZjZjYzZlNGM0ZjgxYmM5OTZkYzVkOGY0N2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTM2MzEzNywgLTczLjk2MjIzNTU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5NTEwMGEwNGM2MjRlMTBhOGNjOTBiZjI4ZjhiM2FjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGQ0YTNkZWQwNzEzNGM0YjlkZTY4YjljNzIyOWE1ZmMgPSAkKGA8ZGl2IGlkPSJodG1sX2RkNGEzZGVkMDcxMzRjNGI5ZGU2OGI5YzcyMjlhNWZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FbWVyc29uIFBsICYgTXlydGxlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5NTEwMGEwNGM2MjRlMTBhOGNjOTBiZjI4ZjhiM2FjLnNldENvbnRlbnQoaHRtbF9kZDRhM2RlZDA3MTM0YzRiOWRlNjhiOWM3MjI5YTVmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YTQzM2ZmNmNjNmU0YzRmODFiYzk5NmRjNWQ4ZjQ3Yi5iaW5kUG9wdXAocG9wdXBfMzk1MTAwYTA0YzYyNGUxMGE4Y2M5MGJmMjhmOGIzYWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgzZWRkOGYyZGY1NDRiYzlhMzhjMWVhNTJkOTJjYjIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2MDIxMTgsIC03My45OTk3NDM3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2MWE5NTJkNGY3NDQyMWM4MGZiNzFkMzQwZWVmNWVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTJiN2M4ODU1MjIyNGIwZmE2OTkxNTJkMGNjMTM2YjggPSAkKGA8ZGl2IGlkPSJodG1sX2UyYjdjODg1NTIyMjRiMGZhNjk5MTUyZDBjYzEzNmI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXlhcmQgU3QgJiBCYXh0ZXIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMyMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzA4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2MWE5NTJkNGY3NDQyMWM4MGZiNzFkMzQwZWVmNWVhLnNldENvbnRlbnQoaHRtbF9lMmI3Yzg4NTUyMjI0YjBmYTY5OTE1MmQwY2MxMzZiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84M2VkZDhmMmRmNTQ0YmM5YTM4YzFlYTUyZDkyY2IyMi5iaW5kUG9wdXAocG9wdXBfNDYxYTk1MmQ0Zjc0NDIxYzgwZmI3MWQzNDBlZWY1ZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0MDkzMDY5ZmQxMDQxOTFhYjNmY2Q2YWMwOGIwMmM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2MjI2NDQsIC03My45ODI2MTIwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwNjA5OWZiZjAxNzRiYjM4Yzc1ZDI5ZGUzODk2ZmI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmMzZjJjM2FjZDE2NDljZjhkY2FkODhhNDUxYzY1MzYgPSAkKGA8ZGl2IGlkPSJodG1sX2JjM2YyYzNhY2QxNjQ5Y2Y4ZGNhZDg4YTQ1MWM2NTM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CaWFseXN0b2tlciBQbCAmIERlbGFuY2V5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDYwOTlmYmYwMTc0YmIzOGM3NWQyOWRlMzg5NmZiNy5zZXRDb250ZW50KGh0bWxfYmMzZjJjM2FjZDE2NDljZjhkY2FkODhhNDUxYzY1MzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjQwOTMwNjlmZDEwNDE5MWFiM2ZjZDZhYzA4YjAyYzguYmluZFBvcHVwKHBvcHVwX2YwNjA5OWZiZjAxNzRiYjM4Yzc1ZDI5ZGUzODk2ZmI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNTUzMzVhYWJkNzM0MDQ3ODkxYzQ4MGIwMjEzYTg1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMjYxNzg3LCAtNzMuOTkxNTgwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDZlZThhOGFiMmU0OGMxYTA4OWQ5MDBkMGI2ZWI1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiMTg1OGVjMThkNzRiMjU5YmE0OGYxY2IzODAyNDRlID0gJChgPGRpdiBpZD0iaHRtbF8wYjE4NThlYzE4ZDc0YjI1OWJhNDhmMWNiMzgwMjQ0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMSBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMzNTxicj4gbmV0IGRlcGFydHVyZXM6IC00MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZDZlZThhOGFiMmU0OGMxYTA4OWQ5MDBkMGI2ZWI1NS5zZXRDb250ZW50KGh0bWxfMGIxODU4ZWMxOGQ3NGIyNTliYTQ4ZjFjYjM4MDI0NGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDU1MzM1YWFiZDczNDA0Nzg5MWM0ODBiMDIxM2E4NWEuYmluZFBvcHVwKHBvcHVwX2RkNmVlOGE4YWIyZTQ4YzFhMDg5ZDkwMGQwYjZlYjU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWU5M2UyNmViMmE0ODZiOTczMTYyYTJlNzAwYzlhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMjkxNTUzLCAtNzQuMDA3MTEzODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYjM2ZWIxMWEyMzU0YjZkOTg5NjVjYjg1NDJjNzIwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VhY2FjNDRkNmRiNTRmZjBhMjQyZGUzMGNhNGQ1MTY5ID0gJChgPGRpdiBpZD0iaHRtbF9lYWNhYzQ0ZDZkYjU0ZmYwYTI0MmRlMzBjYTRkNTE2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2hyaXN0b3BoZXIgU3QgJiBHcmVlbndpY2ggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYxMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjE4PGJyPiBuZXQgZGVwYXJ0dXJlczogNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjM2ZWIxMWEyMzU0YjZkOTg5NjVjYjg1NDJjNzIwZi5zZXRDb250ZW50KGh0bWxfZWFjYWM0NGQ2ZGI1NGZmMGEyNDJkZTMwY2E0ZDUxNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDllOTNlMjZlYjJhNDg2Yjk3MzE2MmEyZTcwMGM5YTguYmluZFBvcHVwKHBvcHVwX2NiMzZlYjExYTIzNTRiNmQ5ODk2NWNiODU0MmM3MjBmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ODRkMDU3OThlMjA0ODM1ODY0MzY4ZmM3YjRhNzU4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NTEwMjY3LCAtNzMuOTc0OTg2OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDY4LjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYzI1M2MyYjk0ZDU0OTI3OTYxMTNmNDAxM2VmZTljOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzOTMxYTlmYmFmMjRmNjBhY2ZiNGI1MGJkY2UyNjhiID0gJChgPGRpdiBpZD0iaHRtbF8zMzkzMWE5ZmJhZjI0ZjYwYWNmYjRiNTBiZGNlMjY4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0NyBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2NjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMzc0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjMjUzYzJiOTRkNTQ5Mjc5NjExM2Y0MDEzZWZlOWM5LnNldENvbnRlbnQoaHRtbF8zMzkzMWE5ZmJhZjI0ZjYwYWNmYjRiNTBiZGNlMjY4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ODRkMDU3OThlMjA0ODM1ODY0MzY4ZmM3YjRhNzU4My5iaW5kUG9wdXAocG9wdXBfM2MyNTNjMmI5NGQ1NDkyNzk2MTEzZjQwMTNlZmU5YzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YwYTMzMzEwNmE2NTRmOWRiZDYzMDBmN2RhODc2MzQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA3MTc5MzYsIC03NC4wMDg4NzMwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjkzMzQ5MjY4OGEwNGE0Njg4ODIxYTU3ZDA0ZDA0ODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iODIwZjI3YmRmZGI0MjY1YTU0Nzk1MGRkM2MzNmVkNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYjgyMGYyN2JkZmRiNDI2NWE1NDc5NTBkZDNjMzZlZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxpYW0gU3QgJiBQaW5lIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwMTxicj4gbmV0IGRlcGFydHVyZXM6IDY0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5MzM0OTI2ODhhMDRhNDY4ODgyMWE1N2QwNGQwNDg4LnNldENvbnRlbnQoaHRtbF9iODIwZjI3YmRmZGI0MjY1YTU0Nzk1MGRkM2MzNmVkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMGEzMzMxMDZhNjU0ZjlkYmQ2MzAwZjdkYTg3NjM0NS5iaW5kUG9wdXAocG9wdXBfMjkzMzQ5MjY4OGEwNGE0Njg4ODIxYTU3ZDA0ZDA0ODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5MDRkOTNkM2FhNDQ5Y2Q4OGZkMzBmOWZiN2I4YzMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2MDU4NjYsIC03My45OTE5MDc1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTguNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjNmYjc5ZmI0ZWU0ZjY3ODIwYTk4ZGYyZjU4ZGNkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4OTA5ZTFlZTcxOTRlYWI5NDQzMDJlYzMzN2Q0ZjMwID0gJChgPGRpdiBpZD0iaHRtbF85ODkwOWUxZWU3MTk0ZWFiOTQ0MzAyZWMzMzdkNGYzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QWxsZW4gU3QgJiBIZXN0ZXIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ5OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzI3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE3MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjNmYjc5ZmI0ZWU0ZjY3ODIwYTk4ZGYyZjU4ZGNkNS5zZXRDb250ZW50KGh0bWxfOTg5MDllMWVlNzE5NGVhYjk0NDMwMmVjMzM3ZDRmMzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzkwNGQ5M2QzYWE0NDljZDg4ZmQzMGY5ZmI3YjhjMzIuYmluZFBvcHVwKHBvcHVwX2MyM2ZiNzlmYjRlZTRmNjc4MjBhOThkZjJmNThkY2Q1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMGQwYjc3NjgxZTQ0Y2I3YTIxODlhZGM4OTUwMzgwZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MTcyNjMyLCAtNzMuOTg3NTM1MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MjllZDBmYzY2NGU0NDU0YWIwN2IyYWIxNGM0NDU3NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3YjQwNTkwYzFmMzRmNGFhZjAyZmYyMTU0NjExNzEyID0gJChgPGRpdiBpZD0iaHRtbF8wN2I0MDU5MGMxZjM0ZjRhYWYwMmZmMjE1NDYxMTcxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDM3IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMjguMDxicj4gdG90YWwgYXJyaXZhbHM6IDQwMDxicj4gbmV0IGRlcGFydHVyZXM6IDI3Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MjllZDBmYzY2NGU0NDU0YWIwN2IyYWIxNGM0NDU3Ni5zZXRDb250ZW50KGh0bWxfMDdiNDA1OTBjMWYzNGY0YWFmMDJmZjIxNTQ2MTE3MTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTBkMGI3NzY4MWU0NGNiN2EyMTg5YWRjODk1MDM4MGUuYmluZFBvcHVwKHBvcHVwXzcyOWVkMGZjNjY0ZTQ0NTRhYjA3YjJhYjE0YzQ0NTc2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYWI1OTJmMGJjNTE0YmU0OTVmNGZkZThiNGNkZmQ5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwODM0Njk4LCAtNzQuMDE3MTM0NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2EwMzVmMDYzMTViNDczMzg5Mzg3YWNhMjBkYTcwZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYWQ0YzUzYjJjMjY0Mzk1YmU2YTc3NWIzOWRhZGQyNSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWFkNGM1M2IyYzI2NDM5NWJlNmE3NzViMzlkYWRkMjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgVGhhbWVzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzODEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM0Mjxicj4gbmV0IGRlcGFydHVyZXM6IC0zOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTAzNWYwNjMxNWI0NzMzODkzODdhY2EyMGRhNzBkZC5zZXRDb250ZW50KGh0bWxfYWFkNGM1M2IyYzI2NDM5NWJlNmE3NzViMzlkYWRkMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWFiNTkyZjBiYzUxNGJlNDk1ZjRmZGU4YjRjZGZkOTEuYmluZFBvcHVwKHBvcHVwXzNhMDM1ZjA2MzE1YjQ3MzM4OTM4N2FjYTIwZGE3MGRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZDgxMzAzZjA5Y2Q0YWRmOGNmODcyNmU4YjJkNTYyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4OTAwNDQzLCAtNzMuOTYwMjM4NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZjYyMzRlMWVmYzc0N2E1YmRjMDljNWY1YTM4ZDE5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4ZDU3YzgxNDk2YTRjNGNhMDRiYTYzNDFmODA4ZTdkID0gJChgPGRpdiBpZD0iaHRtbF9jOGQ1N2M4MTQ5NmE0YzRjYTA0YmE2MzQxZjgwOGU3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGFmYXlldHRlIEF2ZSAmIENsYXNzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZjYyMzRlMWVmYzc0N2E1YmRjMDljNWY1YTM4ZDE5OS5zZXRDb250ZW50KGh0bWxfYzhkNTdjODE0OTZhNGM0Y2EwNGJhNjM0MWY4MDhlN2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWQ4MTMwM2YwOWNkNGFkZjhjZjg3MjZlOGIyZDU2MjIuYmluZFBvcHVwKHBvcHVwXzFmNjIzNGUxZWZjNzQ3YTViZGMwOWM1ZjVhMzhkMTk5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NGRhOTU5OTQ4ZmQ0MDc0YjgwNGM5MzI5Y2ZiNWIzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MjIzMTY2LCAtNzMuOTYxNDU4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViOTE1NjkwYjhhZjQzNTNiNzFjZjY4ZjdiOGQ1NGRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTljMWNiMTc5MmVjNGI5MDg1Yzg1OTdiODUyYTg3ZjAgPSAkKGA8ZGl2IGlkPSJodG1sX2E5YzFjYjE3OTJlYzRiOTA4NWM4NTk3Yjg1MmE4N2YwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GdWx0b24gU3QgJiBHcmFuZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWI5MTU2OTBiOGFmNDM1M2I3MWNmNjhmN2I4ZDU0ZGUuc2V0Q29udGVudChodG1sX2E5YzFjYjE3OTJlYzRiOTA4NWM4NTk3Yjg1MmE4N2YwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0ZGE5NTk5NDhmZDQwNzRiODA0YzkzMjljZmI1YjMyLmJpbmRQb3B1cChwb3B1cF81YjkxNTY5MGI4YWY0MzUzYjcxY2Y2OGY3YjhkNTRkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI1OGQzNDcwNmE0NGRiY2IwYjFmYWU0YWZjYzY0NDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTMyNjEsIC03My45Njg4OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTY2NjE4OGM1Y2E4NGM1MmIyMDJjNTYyN2ZkZDVhYjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOGRkYjQ0MTkwMTY0MDY5YjA1NGY4YjJkZWNlMWRiMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjhkZGI0NDE5MDE2NDA2OWIwNTRmOGIyZGVjZTFkYjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gQXZlICYgTXlydGxlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjEzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTA5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2NjYxODhjNWNhODRjNTJiMjAyYzU2MjdmZGQ1YWI0LnNldENvbnRlbnQoaHRtbF8yOGRkYjQ0MTkwMTY0MDY5YjA1NGY4YjJkZWNlMWRiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MjU4ZDM0NzA2YTQ0ZGJjYjBiMWZhZTRhZmNjNjQ0NC5iaW5kUG9wdXAocG9wdXBfMTY2NjE4OGM1Y2E4NGM1MmIyMDJjNTYyN2ZkZDVhYjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkYmM1OTYyMmZlODRmMDNhMDI0ZmVhNDUxMDg2MzIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU4MjgwNjUsIC03My45NzA2OTQzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNjEuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0MzczNDA2NjI5ZjRhNThhYjBiMzc1NWQ3ZDg0ODBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODMyMTRmYWUwNTdhNDQ1NjkwYmJmYTk4MjI0ZjQ0N2EgPSAkKGA8ZGl2IGlkPSJodG1sXzgzMjE0ZmFlMDU3YTQ0NTY5MGJiZmE5ODIyNGY0NDdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDUzIFN0ICYgTGV4aW5ndG9uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTA5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzM3PGJyPiBuZXQgZGVwYXJ0dXJlczogMTIyOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDM3MzQwNjYyOWY0YTU4YWIwYjM3NTVkN2Q4NDgwYi5zZXRDb250ZW50KGh0bWxfODMyMTRmYWUwNTdhNDQ1NjkwYmJmYTk4MjI0ZjQ0N2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2RiYzU5NjIyZmU4NGYwM2EwMjRmZWE0NTEwODYzMjEuYmluZFBvcHVwKHBvcHVwXzA0MzczNDA2NjI5ZjRhNThhYjBiMzc1NWQ3ZDg0ODBiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YTUwN2I0ZDBmNTM0NWQ0OTBkNjkyYWRkYjliZjRiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMDM4NTk5LCAtNzQuMDAyMTQ5ODhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC02LjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNWQ4ZjVmYTI5N2I0ZmJjYjk0MWE5YTY3NjAxZTVjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwZGVkYzAyZDkxNjRlYTZhMDJlNDA0YzI4Yzk3MTBhID0gJChgPGRpdiBpZD0iaHRtbF80MGRlZGMwMmQ5MTY0ZWE2YTAyZTQwNGMyOGM5NzEwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FybWluZSBTdCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3NzkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY0NTxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTVkOGY1ZmEyOTdiNGZiY2I5NDFhOWE2NzYwMWU1YzIuc2V0Q29udGVudChodG1sXzQwZGVkYzAyZDkxNjRlYTZhMDJlNDA0YzI4Yzk3MTBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVhNTA3YjRkMGY1MzQ1ZDQ5MGQ2OTJhZGRiOWJmNGI1LmJpbmRQb3B1cChwb3B1cF9hNWQ4ZjVmYTI5N2I0ZmJjYjk0MWE5YTY3NjAxZTVjMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzBjYjM2ZWYxM2IwNDFlOWI0NzczNzZiMmU2OTQ4OWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzIyNDExOSwgLTc0LjAwMDI2Mzk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTIuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lY2EwZGM1MTQxYzM0N2I2YTFlNWQ3MWU1NTkwMGJhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg3ZjQ2ZjBlYWNlODQ3ZjJhM2E2YWI4MTQ2MGU4MmRkID0gJChgPGRpdiBpZD0iaHRtbF84N2Y0NmYwZWFjZTg0N2YyYTNhNmFiODE0NjBlODJkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FzaGluZ3RvbiBQbCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NjMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIyMDxicj4gbmV0IGRlcGFydHVyZXM6IC0yNDMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWNhMGRjNTE0MWMzNDdiNmExZTVkNzFlNTU5MDBiYTIuc2V0Q29udGVudChodG1sXzg3ZjQ2ZjBlYWNlODQ3ZjJhM2E2YWI4MTQ2MGU4MmRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MwY2IzNmVmMTNiMDQxZTliNDc3Mzc2YjJlNjk0ODliLmJpbmRQb3B1cChwb3B1cF9lY2EwZGM1MTQxYzM0N2I2YTFlNWQ3MWU1NTkwMGJhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODk2NDgxOTE5OTk0NDM1MDhmODZhYzI5YzkxNDQ0YjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTQ1MjgwMDAwMDAwMDUsIC03My45NTgwODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjE2NmRlNmEyODc5NGU3ZDgzYzRkNDYwYTY4MjNjODkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzgzNzQ2MGI0YzQ0MjY2OGYwNGM3Y2I2N2M5NjM1OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjc4Mzc0NjBiNGM0NDI2NjhmMDRjN2NiNjdjOTYzNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyYW5rbGluIEF2ZSAmIE15cnRsZSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMDxicj4gbmV0IGRlcGFydHVyZXM6IC0yOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTY2ZGU2YTI4Nzk0ZTdkODNjNGQ0NjBhNjgyM2M4OS5zZXRDb250ZW50KGh0bWxfNjc4Mzc0NjBiNGM0NDI2NjhmMDRjN2NiNjdjOTYzNTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODk2NDgxOTE5OTk0NDM1MDhmODZhYzI5YzkxNDQ0YjkuYmluZFBvcHVwKHBvcHVwXzYxNjZkZTZhMjg3OTRlN2Q4M2M0ZDQ2MGE2ODIzYzg5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZWE1ZWE0MDI2YTI0OWE4ODk4MDI5OGYyZjAwZTRlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MzMxNzE2LCAtNzMuOTUzODE5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzE3ZTU4ZmVmNTE0Mzg4OTU4YTY1MDgzYWY5ZTAyOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhjZGM2NmI2YjYxYzQ5ZDFhZmQyMzcwYThjM2VmZjNmID0gJChgPGRpdiBpZD0iaHRtbF84Y2RjNjZiNmI2MWM0OWQxYWZkMjM3MGE4YzNlZmYzZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsbG91Z2hieSBBdmUgJiBXYWx3b3J0aCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjMTdlNThmZWY1MTQzODg5NThhNjUwODNhZjllMDI4LnNldENvbnRlbnQoaHRtbF84Y2RjNjZiNmI2MWM0OWQxYWZkMjM3MGE4YzNlZmYzZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZWE1ZWE0MDI2YTI0OWE4ODk4MDI5OGYyZjAwZTRlNS5iaW5kUG9wdXAocG9wdXBfN2MxN2U1OGZlZjUxNDM4ODk1OGE2NTA4M2FmOWUwMjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4NmNhMmExYzFhZTQ5ZThhMmQ5NDEzYzAzYzIwOWYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA4NjIxNDQsIC03NC4wMDcyMjE1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0MDhkN2RjYTUzMjQwYjFiNTkzZWI5NzExOTFmM2Y4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTg5MzhiY2FmNjdjNDIwOGJhMDgxZWMwNTZjNjhjMGQgPSAkKGA8ZGl2IGlkPSJodG1sX2E4OTM4YmNhZjY3YzQyMDhiYTA4MWVjMDU2YzY4YzBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Kb2huIFN0ICYgV2lsbGlhbSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNzA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQwOGQ3ZGNhNTMyNDBiMWI1OTNlYjk3MTE5MWYzZjguc2V0Q29udGVudChodG1sX2E4OTM4YmNhZjY3YzQyMDhiYTA4MWVjMDU2YzY4YzBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE4NmNhMmExYzFhZTQ5ZThhMmQ5NDEzYzAzYzIwOWYwLmJpbmRQb3B1cChwb3B1cF9mNDA4ZDdkY2E1MzI0MGIxYjU5M2ViOTcxMTkxZjNmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWQ2NzNmYTAyZTZlNGY5OWEwMGIwOGY5NzA3NmFhM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjI0Mzc5NywgLTc0LjAwNTY2NDQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyOS41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzhhZDQ2NTc2OWU2NGJiY2I4MjhhZTIzZjA3N2FlOWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NzM3NzExZTg0NDk0ZDE5YTRmNTA3ODJkZTA5ZTY3MiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTczNzcxMWU4NDQ5NGQxOWE0ZjUwNzgyZGUwOWU2NzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjYgQXZlICYgQ2FuYWwgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzM2PGJyPiBuZXQgZGVwYXJ0dXJlczogNTkwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4YWQ0NjU3NjllNjRiYmNiODI4YWUyM2YwNzdhZTliLnNldENvbnRlbnQoaHRtbF85NzM3NzExZTg0NDk0ZDE5YTRmNTA3ODJkZTA5ZTY3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZDY3M2ZhMDJlNmU0Zjk5YTAwYjA4Zjk3MDc2YWEzZC5iaW5kUG9wdXAocG9wdXBfYzhhZDQ2NTc2OWU2NGJiY2I4MjhhZTIzZjA3N2FlOWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NDM2MjQ0Yzc4YjQ0ZGZiODU5ZDMwOWJjYzc1ZjkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MTU2LCAtNzMuOTkxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2OWM2MTJjYTYxOTRlNmFhNWMzNjRkODBkODc2MjM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZkYjM1YTFhYjA2NDliYmEyZmNkNGI5NjRmMWQzNTIgPSAkKGA8ZGl2IGlkPSJodG1sX2I2ZGIzNWExYWIwNjQ5YmJhMmZjZDRiOTY0ZjFkMzUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDMxIFN0ICYgNyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDcwNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTYyPGJyPiBuZXQgZGVwYXJ0dXJlczogMjU2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2OWM2MTJjYTYxOTRlNmFhNWMzNjRkODBkODc2MjM5LnNldENvbnRlbnQoaHRtbF9iNmRiMzVhMWFiMDY0OWJiYTJmY2Q0Yjk2NGYxZDM1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTQzNjI0NGM3OGI0NGRmYjg1OWQzMDliY2M3NWY5My5iaW5kUG9wdXAocG9wdXBfMzY5YzYxMmNhNjE5NGU2YWE1YzM2NGQ4MGQ4NzYyMzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1ZWZlMzQ1NjA4NzQ1YjU5NjEzZDliNmQ2NTAwYzBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM0MDExNDMsIC03NC4wMDI5Mzg3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTYuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwYjU0NGY3MTZiYzQzOTc4MTE1NTZjYWMwM2Q1MTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTExYzYwZGUzNWY4NDlhZTg1ZGMxZjhmNmM5MGRhNDQgPSAkKGA8ZGl2IGlkPSJodG1sXzUxMWM2MGRlMzVmODQ5YWU4NWRjMWY4ZjZjOTBkYTQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQgU3QgJiA3IEF2ZSBTPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1NDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQxODxicj4gbmV0IGRlcGFydHVyZXM6IC0xMjguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODBiNTQ0ZjcxNmJjNDM5NzgxMTU1NmNhYzAzZDUxNjAuc2V0Q29udGVudChodG1sXzUxMWM2MGRlMzVmODQ5YWU4NWRjMWY4ZjZjOTBkYTQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1ZWZlMzQ1NjA4NzQ1YjU5NjEzZDliNmQ2NTAwYzBlLmJpbmRQb3B1cChwb3B1cF84MGI1NDRmNzE2YmM0Mzk3ODExNTU2Y2FjMDNkNTE2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzNlMzNhYzJmY2M5NDE0MDg3YWVlYzk5ZjhiZDNmZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzQ5MjY5NSwgLTczLjk5MjAwNTA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZlNDlmZDFiNmY2NDlhNTg4YzRmM2Q0ZTc4YmYzMTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTY0MGEzMDQ1NjI0OGFmODExN2Q0Zjg1OTc2NWIxMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmU2NDBhMzA0NTYyNDhhZjgxMTdkNGY4NTk3NjViMTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaXZlcnNpdHkgUGwgJiBFIDE0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2MDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYzNjxicj4gbmV0IGRlcGFydHVyZXM6IDI3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmZTQ5ZmQxYjZmNjQ5YTU4OGM0ZjNkNGU3OGJmMzE1LnNldENvbnRlbnQoaHRtbF9mZTY0MGEzMDQ1NjI0OGFmODExN2Q0Zjg1OTc2NWIxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jM2UzM2FjMmZjYzk0MTQwODdhZWVjOTlmOGJkM2ZmMS5iaW5kUG9wdXAocG9wdXBfYmZlNDlmZDFiNmY2NDlhNTg4YzRmM2Q0ZTc4YmYzMTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2NDI3YzNiNzAzZDRhZjViYmE1MWMwMTdkNGZjNzY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM1MjM4LCAtNzQuMDAwMjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOC43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjQ4ODEyODAwYzZjNDVmNWIwYjRlODk2MGM0MmNjZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOGEzMDUxYjYyMjU0ZDA2YjkyOGY0MjMwYjdmNzFmYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMThhMzA1MWI2MjI1NGQwNmI5MjhmNDIzMGI3ZjcxZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyZWVud2ljaCBBdmUgJiBDaGFybGVzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM0NTxicj4gbmV0IGRlcGFydHVyZXM6IC0xNzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjQ4ODEyODAwYzZjNDVmNWIwYjRlODk2MGM0MmNjZWUuc2V0Q29udGVudChodG1sXzE4YTMwNTFiNjIyNTRkMDZiOTI4ZjQyMzBiN2Y3MWZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2NDI3YzNiNzAzZDRhZjViYmE1MWMwMTdkNGZjNzY0LmJpbmRQb3B1cChwb3B1cF9iNDg4MTI4MDBjNmM0NWY1YjBiNGU4OTYwYzQyY2NlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2IzMWE3ZjU3YjNjNDE1YWFjZjZiMGQ2ZjIzMjFiZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODMwNDgsIC03My45NjQ5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDMyNzVmNzhlODhkNGNlZGI4YTM5YmM3YWIyYjBmMmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NTc4ZjI2NWJmNmU0ZTAyYTBkZmYxNDBhZjMzMWQ1NSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTU3OGYyNjViZjZlNGUwMmEwZGZmMTQwYWYzMzFkNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZ1bHRvbiBTdCAmIFdhc2hpbmd0b24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTg3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzMjc1Zjc4ZTg4ZDRjZWRiOGEzOWJjN2FiMmIwZjJhLnNldENvbnRlbnQoaHRtbF81NTc4ZjI2NWJmNmU0ZTAyYTBkZmYxNDBhZjMzMWQ1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YjMxYTdmNTdiM2M0MTVhYWNmNmIwZDZmMjMyMWJmOS5iaW5kUG9wdXAocG9wdXBfZDMyNzVmNzhlODhkNGNlZGI4YTM5YmM3YWIyYjBmMmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MmNkNzRjMTRkZDRkY2E4MDExOWYyZDRlNjM0MDRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU3OTczMjIsIC03My45NjYwMzMwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGQ0NDFlNjI1NDhlNGQyZDllOGZlOTAxNDgwMDhhYmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTljZjEyMGE1ODk0Yzg2YmZhZmE0MGJkYjFmMjcyMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzk5Y2YxMjBhNTg5NGM4NmJmYWZhNDBiZGIxZjI3MjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTUgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzI5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MDk8YnI+IG5ldCBkZXBhcnR1cmVzOiA4MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDQ0MWU2MjU0OGU0ZDJkOWU4ZmU5MDE0ODAwOGFiZS5zZXRDb250ZW50KGh0bWxfYzk5Y2YxMjBhNTg5NGM4NmJmYWZhNDBiZGIxZjI3MjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQyY2Q3NGMxNGRkNGRjYTgwMTE5ZjJkNGU2MzQwNGUuYmluZFBvcHVwKHBvcHVwXzBkNDQxZTYyNTQ4ZTRkMmQ5ZThmZTkwMTQ4MDA4YWJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xM2RmYWQ3NDE2NzI0YTJmOTQ2NDZlMTFhZjVmZmViYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDk0ODA3LCAtNzQuMDAyMzQ0ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VmNzcxMzIxOGZkNzQwYzU5OGQ3NWY0NThkYTdhZDg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDk5OTg3ODBhZjlhNDMwYWJhMDg5YzM5Njk1ZWE3NTQgPSAkKGA8ZGl2IGlkPSJodG1sX2Q5OTk4NzgwYWY5YTQzMGFiYTA4OWMzOTY5NWVhNzU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmUgU3QgJiBXb3J0aCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTAzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWY3NzEzMjE4ZmQ3NDBjNTk4ZDc1ZjQ1OGRhN2FkODUuc2V0Q29udGVudChodG1sX2Q5OTk4NzgwYWY5YTQzMGFiYTA4OWMzOTY5NWVhNzU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEzZGZhZDc0MTY3MjRhMmY5NDY0NmUxMWFmNWZmZWJjLmJpbmRQb3B1cChwb3B1cF9lZjc3MTMyMThmZDc0MGM1OThkNzVmNDU4ZGE3YWQ4NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWE0MmQ0NzAyNjJhNDZiZmE3OTk0NjI2MjlkZDM3OTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTI3MzI2NiwgLTc0LjAwNDYwNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWUxNWExZDdmYmE0NDI0MDg2YzBhZTgwMDJjYjAwMDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTViZjM4ODEwNzQ0ODcyOWE1YzZhMGZlZDY5MzVlZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzE1YmYzODgxMDc0NDg3MjlhNWM2YTBmZWQ2OTM1ZWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyZSBTdCAmIENoYW1iZXJzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNjAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU3Nzxicj4gbmV0IGRlcGFydHVyZXM6IDIxNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZTE1YTFkN2ZiYTQ0MjQwODZjMGFlODAwMmNiMDAwMS5zZXRDb250ZW50KGh0bWxfYzE1YmYzODgxMDc0NDg3MjlhNWM2YTBmZWQ2OTM1ZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWE0MmQ0NzAyNjJhNDZiZmE3OTk0NjI2MjlkZDM3OTIuYmluZFBvcHVwKHBvcHVwX2FlMTVhMWQ3ZmJhNDQyNDA4NmMwYWU4MDAyY2IwMDAxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTJlMjBiZDllNWM0OWMwYTFlMDg3NDNmNmQyZmFmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0OTcxNzc1MywgLTc0LjAwMjk1MDM0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTEuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzMzkxMWMyNmQ1YTRhYjQ4Y2U1ZGRhMGU3ODdhMjYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGMzNTYwOTc4NzJiNGNiODgzMjNlNWExZTkxNTRiYmIgPSAkKGA8ZGl2IGlkPSJodG1sXzRjMzU2MDk3ODcyYjRjYjg4MzIzZTVhMWU5MTU0YmJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDI2IFN0ICYgMTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY1Mzxicj4gbmV0IGRlcGFydHVyZXM6IDIzMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MzM5MTFjMjZkNWE0YWI0OGNlNWRkYTBlNzg3YTI2MS5zZXRDb250ZW50KGh0bWxfNGMzNTYwOTc4NzJiNGNiODgzMjNlNWExZTkxNTRiYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjUyZTIwYmQ5ZTVjNDljMGExZTA4NzQzZjZkMmZhZmEuYmluZFBvcHVwKHBvcHVwXzUzMzkxMWMyNmQ1YTRhYjQ4Y2U1ZGRhMGU3ODdhMjYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Zjk3NDY3ZjM1ZWI0Nzk5YWQwM2ZjNDNiYWVjZjI0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMDQ0NTU0LCAtNzMuOTY1MjUwNjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZmQ4YzcyYTQ4Mzk0ZDdmYjYzN2E1YTQxOWIzMWIzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxMTVjNjUxZTI0NTRiOTdiZmYzMGQ4ZDFjOGE4MmRlID0gJChgPGRpdiBpZD0iaHRtbF83MTE1YzY1MWUyNDU0Yjk3YmZmMzBkOGQxYzhhODJkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBCZXJyeSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTkxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZkOGM3MmE0ODM5NGQ3ZmI2MzdhNWE0MTliMzFiMzcuc2V0Q29udGVudChodG1sXzcxMTVjNjUxZTI0NTRiOTdiZmYzMGQ4ZDFjOGE4MmRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVmOTc0NjdmMzVlYjQ3OTlhZDAzZmM0M2JhZWNmMjQ2LmJpbmRQb3B1cChwb3B1cF9hZmQ4YzcyYTQ4Mzk0ZDdmYjYzN2E1YTQxOWIzMWIzNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmViMmRjMDkyZTMzNGFlOTljNTJmY2QxYmE4OTVkZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTIyMTU4OSwgLTczLjk4NDI4NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0MTUyMDlmNGZiNzRkYTNhMTgzZDM5MmM4MDQ3ZTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTAzZWFkOGIyZjJkNDZjOGFhNmMwZTY1YzQyYTNjODkgPSAkKGA8ZGl2IGlkPSJodG1sXzkwM2VhZDhiMmYyZDQ2YzhhYTZjMGU2NWM0MmEzYzg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EdWZmaWVsZCBTdCAmIFdpbGxvdWdoYnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTQxNTIwOWY0ZmI3NGRhM2ExODNkMzkyYzgwNDdlNjAuc2V0Q29udGVudChodG1sXzkwM2VhZDhiMmYyZDQ2YzhhYTZjMGU2NWM0MmEzYzg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlYjJkYzA5MmUzMzRhZTk5YzUyZmNkMWJhODk1ZGU1LmJpbmRQb3B1cChwb3B1cF9hNDE1MjA5ZjRmYjc0ZGEzYTE4M2QzOTJjODA0N2U2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTMyNzA1OGQ4ZGQ1NDM3NTg4ZjBkNmY2NDJkYTZkZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTc2MDEyNywgLTczLjk5MzQ0NTU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODdkZmQzZDRiMzRiNGY5NzlmNGQ4ZDUwZjdmNTI5ZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80N2VhNDMyMWNlYzE0N2QxOWEyOGY1M2I3MDZhNmUxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDdlYTQzMjFjZWMxNDdkMTlhMjhmNTNiNzA2YTZlMTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsYXJrIFN0ICYgSGVucnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjEzPGJyPiBuZXQgZGVwYXJ0dXJlczogMjMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODdkZmQzZDRiMzRiNGY5NzlmNGQ4ZDUwZjdmNTI5ZTMuc2V0Q29udGVudChodG1sXzQ3ZWE0MzIxY2VjMTQ3ZDE5YTI4ZjUzYjcwNmE2ZTE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzMjcwNThkOGRkNTQzNzU4OGYwZDZmNjQyZGE2ZGQ1LmJpbmRQb3B1cChwb3B1cF84N2RmZDNkNGIzNGI0Zjk3OWY0ZDhkNTBmN2Y1MjllMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODEwYzgwZjg5YzYyNDkwNzhmOTVhODhmY2Q1ZDcwZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTUwNjUsIC03My45ODcxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxZDkyNGY0OTZlYzRkYjU5MDdhYjJlZTNiYjczODZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmU4MmUxZjNmYzM5NDU5YmEwMzgyZTIzZTVjYjlhZjcgPSAkKGA8ZGl2IGlkPSJodG1sX2JlODJlMWYzZmMzOTQ1OWJhMDM4MmUyM2U1Y2I5YWY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KYXkgU3QgJiBUZWNoIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNjMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE5OTxicj4gbmV0IGRlcGFydHVyZXM6IDM2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxZDkyNGY0OTZlYzRkYjU5MDdhYjJlZTNiYjczODZlLnNldENvbnRlbnQoaHRtbF9iZTgyZTFmM2ZjMzk0NTliYTAzODJlMjNlNWNiOWFmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MTBjODBmODljNjI0OTA3OGY5NWE4OGZjZDVkNzBlNy5iaW5kUG9wdXAocG9wdXBfYzFkOTI0ZjQ5NmVjNGRiNTkwN2FiMmVlM2JiNzM4NmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjMzE2MmNjZTFkNzQ2ODFiNjZlM2FjOWFkMWZhYzI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIyOTkyMDgsIC03My45Nzk5NTQ2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTE0LjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOGQ0MTJhYzQ0MWI0NTM4YjU3NzQ2YWY5MWM0Nzk0NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhNjFhNDg1OWIxYzQ0NDBhMTczMzlkNGEzMmEyMzJlID0gJChgPGRpdiBpZD0iaHRtbF8zYTYxYTQ4NTliMWM0NDQwYTE3MzM5ZDRhMzJhMjMyZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA1IFN0ICYgQXZlbnVlIEM8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM4Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogODk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjk4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4ZDQxMmFjNDQxYjQ1MzhiNTc3NDZhZjkxYzQ3OTQ1LnNldENvbnRlbnQoaHRtbF8zYTYxYTQ4NTliMWM0NDQwYTE3MzM5ZDRhMzJhMjMyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYzMxNjJjY2UxZDc0NjgxYjY2ZTNhYzlhZDFmYWMyOS5iaW5kUG9wdXAocG9wdXBfMDhkNDEyYWM0NDFiNDUzOGI1Nzc0NmFmOTFjNDc5NDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlZmJjOTYzYzdiMzRjNDE4MDZjY2MwZTMyNmQ3ZWI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI1MjEzMTEsIC03My45Nzc2ODc1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEwLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODQzNzFhODc0M2Y0NGMwOTg0NjAxNzRjZWJkZTAyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3YzcyNjYzMDdmMjQ2ODc4NjM1ZDVjYmQ4MzAyYjU5ID0gJChgPGRpdiBpZD0iaHRtbF82N2M3MjY2MzA3ZjI0Njg3ODYzNWQ1Y2JkODMwMmI1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA5IFN0ICYgQXZlbnVlIEM8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQxNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTk4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODQzNzFhODc0M2Y0NGMwOTg0NjAxNzRjZWJkZTAyMC5zZXRDb250ZW50KGh0bWxfNjdjNzI2NjMwN2YyNDY4Nzg2MzVkNWNiZDgzMDJiNTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmVmYmM5NjNjN2IzNGM0MTgwNmNjYzBlMzI2ZDdlYjkuYmluZFBvcHVwKHBvcHVwXzk4NDM3MWE4NzQzZjQ0YzA5ODQ2MDE3NGNlYmRlMDIwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNTcwMDVhYzk0ODI0NDM3OTJjZGMwNmQwYTU3MDI4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4ODA3MDAzLCAtNzMuOTg0MTA2MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTQxMTIxMDI2Mzc0MGYzOTkyYTdiM2M5ODdhOGRlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2YWUxMmEzM2Y5ZDRhY2JiNDEyZTgwNDQ4ODE2NWFkID0gJChgPGRpdiBpZD0iaHRtbF84NmFlMTJhMzNmOWQ0YWNiYjQxMmU4MDQ0ODgxNjVhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qm9uZCBTdCAmIFNjaGVybWVyaG9ybiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTUwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTU0MTEyMTAyNjM3NDBmMzk5MmE3YjNjOTg3YThkZTcuc2V0Q29udGVudChodG1sXzg2YWUxMmEzM2Y5ZDRhY2JiNDEyZTgwNDQ4ODE2NWFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q1NzAwNWFjOTQ4MjQ0Mzc5MmNkYzA2ZDBhNTcwMjg1LmJpbmRQb3B1cChwb3B1cF9hNTQxMTIxMDI2Mzc0MGYzOTkyYTdiM2M5ODdhOGRlNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmI4NzdjYmMzN2RjNGNjYjkzMGZmZWMxMzc2ODdlMzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODAzNDI0MjMsIC03My45NTU3Njg5MzkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhZjAwZjZhMGFkMTQ4Y2E5MTgxODA3MDdlYzVmMjgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODk2NDlkOTA5NjA4NGQyMWEwODc0NmUzNDlhZjY3YjAgPSAkKGA8ZGl2IGlkPSJodG1sXzg5NjQ5ZDkwOTYwODRkMjFhMDg3NDZlMzQ5YWY2N2IwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZWZmZXJ0cyBQbCAmIEZyYW5rbGluIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTU3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3NDxicj4gbmV0IGRlcGFydHVyZXM6IC04My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYWYwMGY2YTBhZDE0OGNhOTE4MTgwNzA3ZWM1ZjI4MS5zZXRDb250ZW50KGh0bWxfODk2NDlkOTA5NjA4NGQyMWEwODc0NmUzNDlhZjY3YjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmI4NzdjYmMzN2RjNGNjYjkzMGZmZWMxMzc2ODdlMzkuYmluZFBvcHVwKHBvcHVwX2NhZjAwZjZhMGFkMTQ4Y2E5MTgxODA3MDdlYzVmMjgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZmZiYWRhYWE0NGI0OTY5OWYwZTU5N2RlNGVhNjNiNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NDE1NzQ4LCAtNzMuOTY5MjIyNzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZmUyZjlhMGNhZmI0Yzc4ODcxNDNlZWRmYTA4MTVjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlNDhiNGQ4ZGE1NDRjMDlhYzYyYjdmOGMxMmI1MzM2ID0gJChgPGRpdiBpZD0iaHRtbF8xZTQ4YjRkOGRhNTQ0YzA5YWM2MmI3ZjhjMTJiNTMzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnVsdG9uIFN0ICYgQ2xlcm1vbnQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTU4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmZTJmOWEwY2FmYjRjNzg4NzE0M2VlZGZhMDgxNWM4LnNldENvbnRlbnQoaHRtbF8xZTQ4YjRkOGRhNTQ0YzA5YWM2MmI3ZjhjMTJiNTMzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZmZiYWRhYWE0NGI0OTY5OWYwZTU5N2RlNGVhNjNiNS5iaW5kUG9wdXAocG9wdXBfNWZlMmY5YTBjYWZiNGM3ODg3MTQzZWVkZmEwODE1YzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiZjk1YWJkNDhhNDQ2Nzk5ZTBlZDVkNTZjY2YzODdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkxNjUxODMsIC03My45OTk5Nzg1OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMWMyZDhmMmI2ZjY0NjdlYTJjN2U5ZjQ1M2JlYWE3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ2ODk0ZDg1Zjc3YzRmYzFiMjVkMGEzZGIwOWQyNmIzID0gJChgPGRpdiBpZD0iaHRtbF80Njg5NGQ4NWY3N2M0ZmMxYjI1ZDBhM2RiMDlkMjZiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXRsYW50aWMgQXZlICYgRnVybWFuIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExODxicj4gbmV0IGRlcGFydHVyZXM6IC01OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMWMyZDhmMmI2ZjY0NjdlYTJjN2U5ZjQ1M2JlYWE3Zi5zZXRDb250ZW50KGh0bWxfNDY4OTRkODVmNzdjNGZjMWIyNWQwYTNkYjA5ZDI2YjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWJmOTVhYmQ0OGE0NDY3OTllMGVkNWQ1NmNjZjM4N2UuYmluZFBvcHVwKHBvcHVwXzMxYzJkOGYyYjZmNjQ2N2VhMmM3ZTlmNDUzYmVhYTdmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZDBjOGUzZDJiNmE0NzNlOTk4ZGRlNGRjYzYwNDU1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4ODUxNTM0LCAtNzMuOTY0NzYyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzY1NjgwMWY3OTk0NDExMmJkOGVkYzg4ZjAwNjA3NjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZWE0MGM2MmE5NzE0YjkwODA2YmJiMDI1MzY3NTZmYiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2VhNDBjNjJhOTcxNGI5MDgwNmJiYjAyNTM2NzU2ZmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxhZmF5ZXR0ZSBBdmUgJiBTdCBKYW1lcyBQbDxicj4gdG90YWwgZGVwYXJ0dXJlczogODAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkwPGJyPiBuZXQgZGVwYXJ0dXJlczogMTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzY1NjgwMWY3OTk0NDExMmJkOGVkYzg4ZjAwNjA3Njkuc2V0Q29udGVudChodG1sXzNlYTQwYzYyYTk3MTRiOTA4MDZiYmIwMjUzNjc1NmZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZkMGM4ZTNkMmI2YTQ3M2U5OThkZGU0ZGNjNjA0NTViLmJpbmRQb3B1cChwb3B1cF9jNjU2ODAxZjc5OTQ0MTEyYmQ4ZWRjODhmMDA2MDc2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmZhNWRkMWY3ZjJjNGQ3MGI4OGYzNDNkNTE4NDI3YmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkyNjA4MSwgLTczLjk4MTc4MDI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDBkMzRmZjQ1N2IxNGUyNjhlY2Y1MTgzYzRkYjVkZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZTBjNzljN2U2N2E0Mzg0YmY0Y2FkNzBjZDBiMDRiYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGUwYzc5YzdlNjdhNDM4NGJmNGNhZDcwY2QwYjA0YmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpdHQgU3QgJiBTdGFudG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDBkMzRmZjQ1N2IxNGUyNjhlY2Y1MTgzYzRkYjVkZGQuc2V0Q29udGVudChodG1sXzRlMGM3OWM3ZTY3YTQzODRiZjRjYWQ3MGNkMGIwNGJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmYTVkZDFmN2YyYzRkNzBiODhmMzQzZDUxODQyN2JiLmJpbmRQb3B1cChwb3B1cF8wMGQzNGZmNDU3YjE0ZTI2OGVjZjUxODNjNGRiNWRkZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDUyZWE4NzM2OWUzNGEyNGJiYTA0MGQxNWM0ZDJiZjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjAxOTU3NiwgLTczLjk4OTk3ODI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTQuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0YmNmMjM1YzkyZjQ5MDI4OWVmOWJhMzljOTU4M2NkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTNlZDhkZDJjNTBkNDg2MTkzNTkzODQ0ZmJhNjlhNTcgPSAkKGA8ZGl2IGlkPSJodG1sX2EzZWQ4ZGQyYzUwZDQ4NjE5MzU5Mzg0NGZiYTY5YTU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BbGxlbiBTdCAmIFJpdmluZ3RvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjMxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjkwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ0YmNmMjM1YzkyZjQ5MDI4OWVmOWJhMzljOTU4M2NkLnNldENvbnRlbnQoaHRtbF9hM2VkOGRkMmM1MGQ0ODYxOTM1OTM4NDRmYmE2OWE1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNTJlYTg3MzY5ZTM0YTI0YmJhMDQwZDE1YzRkMmJmNC5iaW5kUG9wdXAocG9wdXBfNDRiY2YyMzVjOTJmNDkwMjg5ZWY5YmEzOWM5NTgzY2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0ZjFjMDJjYjY2MTQzOTI5ODYyNWE3YzNiZTVkNTIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQwMzQzMjAwMDAwMDA1LCAtNzMuOTg5NTUxMDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcwLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YTJkYzdhZmQwNDU0NWFjODUyZjljMDk3N2FlNjlkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwNjcwZTRhZDMyZTQwZDBhOWVjMDk0ZjNhM2Q3ZjhiID0gJChgPGRpdiBpZD0iaHRtbF9lMDY3MGU0YWQzMmU0MGQwYTllYzA5NGYzYTNkN2Y4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBFIDIyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxMjg8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNDE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhMmRjN2FmZDA0NTQ1YWM4NTJmOWMwOTc3YWU2OWQ5LnNldENvbnRlbnQoaHRtbF9lMDY3MGU0YWQzMmU0MGQwYTllYzA5NGYzYTNkN2Y4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NGYxYzAyY2I2NjE0MzkyOTg2MjVhN2MzYmU1ZDUyMC5iaW5kUG9wdXAocG9wdXBfOGEyZGM3YWZkMDQ1NDVhYzg1MmY5YzA5NzdhZTY5ZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlODFmNTVjNmVhYTQ1OWZhMDJlYjZjYTBhNzI2ZmM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5MzIzLCAtNzQuMDA4MTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4NGZlOGI5OTY1YjQzZGU5NmQzOGU2ZmU4NmRlNDc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTgyNDc2ZmQwMWJiNDE5N2E5ZmE3NjgyMmFjNDY3YmMgPSAkKGA8ZGl2IGlkPSJodG1sXzk4MjQ3NmZkMDFiYjQxOTdhOWZhNzY4MjJhYzQ2N2JjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XYXNoaW5ndG9uIFN0ICYgR2Fuc2V2b29ydCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0ODk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjg0ZmU4Yjk5NjViNDNkZTk2ZDM4ZTZmZTg2ZGU0NzQuc2V0Q29udGVudChodG1sXzk4MjQ3NmZkMDFiYjQxOTdhOWZhNzY4MjJhYzQ2N2JjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FlODFmNTVjNmVhYTQ1OWZhMDJlYjZjYTBhNzI2ZmM3LmJpbmRQb3B1cChwb3B1cF82ODRmZThiOTk2NWI0M2RlOTZkMzhlNmZlODZkZTQ3NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTk3ODI0NmMyNGRjNDY1Yjk4NzViY2U5YmU0YjBkNjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTUxMjg0NSwgLTczLjk5NTk1MDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5MDFkYzgwNzg5YzQzZWY4ZmIyMTVjZGJkYmMwNDE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTg5OGI0Y2Y2YjEzNGY2MGExOWRlZTcyMTBhYjk4YzcgPSAkKGA8ZGl2IGlkPSJodG1sXzk4OThiNGNmNmIxMzRmNjBhMTlkZWU3MjEwYWI5OGM3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IaWNrcyBTdCAmIE1vbnRhZ3VlIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2OTxicj4gbmV0IGRlcGFydHVyZXM6IC0yOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOTAxZGM4MDc4OWM0M2VmOGZiMjE1Y2RiZGJjMDQxNC5zZXRDb250ZW50KGh0bWxfOTg5OGI0Y2Y2YjEzNGY2MGExOWRlZTcyMTBhYjk4YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTk3ODI0NmMyNGRjNDY1Yjk4NzViY2U5YmU0YjBkNjguYmluZFBvcHVwKHBvcHVwX2Q5MDFkYzgwNzg5YzQzZWY4ZmIyMTVjZGJkYmMwNDE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNjhjZWJmMzg4Njg0MTYwODMxOGIyMzc0YTY3YTBjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMDQ2OSwgLTczLjk5MTQ1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyZjk2MTExMjAxYTQyMWJhODcyMjgxZWM1MWYwMGIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzAzNzA0M2YzOWU3NGMyOWExZmNmMzJjN2EyOTA0YmYgPSAkKGA8ZGl2IGlkPSJodG1sXzMwMzcwNDNmMzllNzRjMjlhMWZjZjMyYzdhMjkwNGJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZW5yeSBTdCAmIFBvcGxhciBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg2PGJyPiBuZXQgZGVwYXJ0dXJlczogMTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTJmOTYxMTEyMDFhNDIxYmE4NzIyODFlYzUxZjAwYjAuc2V0Q29udGVudChodG1sXzMwMzcwNDNmMzllNzRjMjlhMWZjZjMyYzdhMjkwNGJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2OGNlYmYzODg2ODQxNjA4MzE4YjIzNzRhNjdhMGMwLmJpbmRQb3B1cChwb3B1cF9hMmY5NjExMTIwMWE0MjFiYTg3MjI4MWVjNTFmMDBiMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzdjNDkzN2Q4Y2FmNDRiMWIzZWYzMzA3OTE1MTI1MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTA3NjIyOCwgLTczLjk5NDAwMzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2ZDg2Yjg0ZmIyNDRiOTFhM2YwYzUxNTM0Y2U3ZmYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWIxY2ZlZmIxMjFiNGE2MTliY2EyODZkZWExMzA3YjQgPSAkKGA8ZGl2IGlkPSJodG1sX2FiMWNmZWZiMTIxYjRhNjE5YmNhMjg2ZGVhMTMwN2I0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYXJrZXQgU3QgJiBDaGVycnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2ZDg2Yjg0ZmIyNDRiOTFhM2YwYzUxNTM0Y2U3ZmYxLnNldENvbnRlbnQoaHRtbF9hYjFjZmVmYjEyMWI0YTYxOWJjYTI4NmRlYTEzMDdiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zN2M0OTM3ZDhjYWY0NGIxYjNlZjMzMDc5MTUxMjUxNS5iaW5kUG9wdXAocG9wdXBfYzZkODZiODRmYjI0NGI5MWEzZjBjNTE1MzRjZTdmZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5NTQ4YzIzMzI5YjRlMmE5YjU1YWZmNzFiMDRmMjgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkwNjQ5NSwgLTczLjk1NjQzMTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2E2OWNhMTNmOTk2NDdhNTgzNGMzOGU1Yjc1MTA0ZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOWIwMzkyM2M1MjU0MDI2YTEwMjJmMjc2OGFjMTRhYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjliMDM5MjNjNTI1NDAyNmExMDIyZjI3NjhhYzE0YWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlS2FsYiBBdmUgJiBTa2lsbG1hbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjguMDxicj4gdG90YWwgYXJyaXZhbHM6IDQwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTI4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhNjljYTEzZjk5NjQ3YTU4MzRjMzhlNWI3NTEwNGVmLnNldENvbnRlbnQoaHRtbF8yOWIwMzkyM2M1MjU0MDI2YTEwMjJmMjc2OGFjMTRhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOTU0OGMyMzMyOWI0ZTJhOWI1NWFmZjcxYjA0ZjI4MS5iaW5kUG9wdXAocG9wdXBfN2E2OWNhMTNmOTk2NDdhNTgzNGMzOGU1Yjc1MTA0ZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlMWFjOGZiMWRiMDRkZjc5MjZmNmIzYmRiNDVmZTg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIwNjY0NDIsIC03My45ODUxNzk3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTE1LjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDE2ZjM1YTAwYzg3NDM4NDg5MzgxNWJkM2YwODJmZjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNDRkNjE5ZDgxOGU0MDlmYjRkYzU2ODMyMTE4NjI0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTQ0ZDYxOWQ4MThlNDA5ZmI0ZGM1NjgzMjExODYyNDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN1ZmZvbGsgU3QgJiBTdGFudG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMzNzxicj4gbmV0IGRlcGFydHVyZXM6IC0zMDUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDE2ZjM1YTAwYzg3NDM4NDg5MzgxNWJkM2YwODJmZjcuc2V0Q29udGVudChodG1sX2E0NGQ2MTlkODE4ZTQwOWZiNGRjNTY4MzIxMTg2MjQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NlMWFjOGZiMWRiMDRkZjc5MjZmNmIzYmRiNDVmZTg2LmJpbmRQb3B1cChwb3B1cF8wMTZmMzVhMDBjODc0Mzg0ODkzODE1YmQzZjA4MmZmNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGY1NGQwZTIxY2NlNDhhNjhkY2ZjOTg0ODcwOGIxN2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjIyODA4NywgLTczLjk3NjY4NzA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOS4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I1YWRlNDgzMGQ4NDQ2MWI5ODEzOGU2MmY4MjMwYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZThlNWY1OWRlYzg0NDQ4YWIxYzc4ZjA0NDU5MGVjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZWU4ZTVmNTlkZWM4NDQ0OGFiMWM3OGYwNDQ1OTBlY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNiBTdCAmIEF2ZW51ZSBEPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjVhZGU0ODMwZDg0NDYxYjk4MTM4ZTYyZjgyMzBiMS5zZXRDb250ZW50KGh0bWxfZWU4ZTVmNTlkZWM4NDQ0OGFiMWM3OGYwNDQ1OTBlY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGY1NGQwZTIxY2NlNDhhNjhkY2ZjOTg0ODcwOGIxN2UuYmluZFBvcHVwKHBvcHVwXzNiNWFkZTQ4MzBkODQ0NjFiOTgxMzhlNjJmODIzMGIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYWQ3MjliYTlhZjM0OWNlYmEwYjk4YTE1YWM1NGRhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNTgxNTUwMDAwMDAwNSwgLTczLjk5NDIyMzY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NDBjM2MzYzk0Y2Y0ZmU3YmM5YmM5NWNjN2QzZTMwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyNjZmMTUxMGE4NTRmYzJhYTg5M2UxMWMwYTZjYWIxID0gJChgPGRpdiBpZD0iaHRtbF8xMjY2ZjE1MTBhODU0ZmMyYWE4OTNlMTFjMGE2Y2FiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9yc3l0aCBTdCAmIENhbmFsIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyODcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMxOTxicj4gbmV0IGRlcGFydHVyZXM6IDMyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0MGMzYzNjOTRjZjRmZTdiYzliYzk1Y2M3ZDNlMzBjLnNldENvbnRlbnQoaHRtbF8xMjY2ZjE1MTBhODU0ZmMyYWE4OTNlMTFjMGE2Y2FiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYWQ3MjliYTlhZjM0OWNlYmEwYjk4YTE1YWM1NGRhZi5iaW5kUG9wdXAocG9wdXBfNzQwYzNjM2M5NGNmNGZlN2JjOWJjOTVjYzdkM2UzMGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1ODg0YTljNDllYjQ2ZGZhODAzNzk2NTlhYjhkN2ZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAyODE4NTgsIC03My45ODc2NTc2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTVjYzhkNTFjNGIyNDgzYmJmODY2NWI4YzU3OGM4ZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODdkYzhiYTYyNjU0NjJiYjZkYzc3NzcxMDllZDM5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjg3ZGM4YmE2MjY1NDYyYmI2ZGM3Nzc3MTA5ZWQzOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBlYXJsIFN0ICYgQW5jaG9yYWdlIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjU5PGJyPiBuZXQgZGVwYXJ0dXJlczogMTc2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1Y2M4ZDUxYzRiMjQ4M2JiZjg2NjViOGM1NzhjOGVjLnNldENvbnRlbnQoaHRtbF8yODdkYzhiYTYyNjU0NjJiYjZkYzc3NzcxMDllZDM5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNTg4NGE5YzQ5ZWI0NmRmYTgwMzc5NjU5YWI4ZDdmYy5iaW5kUG9wdXAocG9wdXBfMTVjYzhkNTFjNGIyNDgzYmJmODY2NWI4YzU3OGM4ZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmYmM5YmU1YWE2MTQ4OTNhNWFmYzZhMGE2NTg3MGZjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA0NzE3NywgLTc0LjAwOTI2MDI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA5LjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTJkNDQ5OGY1OGY2NDJkZjg1M2ZkMjg1ODM2ZDZhMjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NGQ3YzBlZDdmY2Y0OWVhYWY2NDhiZDk3NGQ3YTdlNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDRkN2MwZWQ3ZmNmNDllYWFmNjQ4YmQ5NzRkN2E3ZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBlYXJsIFN0ICYgSGFub3ZlciBTcXVhcmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzUwPGJyPiBuZXQgZGVwYXJ0dXJlczogMTg5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EyZDQ0OThmNThmNjQyZGY4NTNmZDI4NTgzNmQ2YTIyLnNldENvbnRlbnQoaHRtbF80NGQ3YzBlZDdmY2Y0OWVhYWY2NDhiZDk3NGQ3YTdlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZmJjOWJlNWFhNjE0ODkzYTVhZmM2YTBhNjU4NzBmYy5iaW5kUG9wdXAocG9wdXBfYTJkNDQ5OGY1OGY2NDJkZjg1M2ZkMjg1ODM2ZDZhMjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5NDc1NzllZWZlODQ0YTQ5YTVmNmE3MTE2NzU4MmFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg3NTM0MDYsIC03My45NzI2NTE4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFjOTE4MjMyOGJmNDdmZTkwMzI2ZDgyNTlmYzc5N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NWEzYTg1ZjcwY2M0N2YzYWI0ZmY1MTA5ZTY3YWQ0ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTVhM2E4NWY3MGNjNDdmM2FiNGZmNTEwOWU2N2FkNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkN1bWJlcmxhbmQgU3QgJiBMYWZheWV0dGUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhYzkxODIzMjhiZjQ3ZmU5MDMyNmQ4MjU5ZmM3OTdhLnNldENvbnRlbnQoaHRtbF81NWEzYTg1ZjcwY2M0N2YzYWI0ZmY1MTA5ZTY3YWQ0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OTQ3NTc5ZWVmZTg0NGE0OWE1ZjZhNzExNjc1ODJhZS5iaW5kUG9wdXAocG9wdXBfZmFjOTE4MjMyOGJmNDdmZTkwMzI2ZDgyNTlmYzc5N2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2ZjE0NDQ4YjMwNzRhMDNiMDM4ZDMyOTMxYmNlMTQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzEyOTEyMjQsIC03NC4wMTAyMDIzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1Yzc1ZDA5MzEzMzRiMTI4OTNiMjZiODlhNTI0OWY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDhjZTM4NDU2ZmFjNDdmOWE5ODBkOTJlNGI5ZGM2MTggPSAkKGA8ZGl2IGlkPSJodG1sX2Q4Y2UzODQ1NmZhYzQ3ZjlhOTgwZDkyZTRiOWRjNjE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYXJjbGF5IFN0ICYgQ2h1cmNoIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2MDEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY5NDxicj4gbmV0IGRlcGFydHVyZXM6IDkzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1Yzc1ZDA5MzEzMzRiMTI4OTNiMjZiODlhNTI0OWY4LnNldENvbnRlbnQoaHRtbF9kOGNlMzg0NTZmYWM0N2Y5YTk4MGQ5MmU0YjlkYzYxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNmYxNDQ0OGIzMDc0YTAzYjAzOGQzMjkzMWJjZTE0NC5iaW5kUG9wdXAocG9wdXBfNTVjNzVkMDkzMTMzNGIxMjg5M2IyNmI4OWE1MjQ5ZjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1OWY1ZmQ1MzBlZjQyMTRhNjQ4NjJmZGE1NGYwNWVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAyMjQsIC03My45ODI1NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4YjA3YjU1ZmRhNDQwMTI4YmFlOTkwOGFkNzY1NDQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWJlZTExNTA0Nzc3NGViYTk1MDQwYmNiMjk4NWE1NGMgPSAkKGA8ZGl2IGlkPSJodG1sXzliZWUxMTUwNDc3NzRlYmE5NTA0MGJjYjI5ODVhNTRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gcm9udCBTdCAmIEdvbGQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDczLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjM8YnI+IG5ldCBkZXBhcnR1cmVzOiA1MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOGIwN2I1NWZkYTQ0MDEyOGJhZTk5MDhhZDc2NTQ0Ny5zZXRDb250ZW50KGh0bWxfOWJlZTExNTA0Nzc3NGViYTk1MDQwYmNiMjk4NWE1NGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODU5ZjVmZDUzMGVmNDIxNGE2NDg2MmZkYTU0ZjA1ZWQuYmluZFBvcHVwKHBvcHVwX2E4YjA3YjU1ZmRhNDQwMTI4YmFlOTkwOGFkNzY1NDQ3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDUxYTQzYjhhZmI0OTBiYTZjM2MwMTMxODdhN2I1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NTgwNzA1LCAtNzMuOTczNTU1NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYzZhZWNhM2IyNmE0MjE4OTM4ZmFlMTU1MjZlNjQ5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VkOTBlZDY0Njc2YTRjOTFhZDRhMzEzYjVhNjg2NjcwID0gJChgPGRpdiBpZD0iaHRtbF9lZDkwZWQ2NDY3NmE0YzkxYWQ0YTMxM2I1YTY4NjY3MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2FybHRvbiBBdmUgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjNmFlY2EzYjI2YTQyMTg5MzhmYWUxNTUyNmU2NDk1LnNldENvbnRlbnQoaHRtbF9lZDkwZWQ2NDY3NmE0YzkxYWQ0YTMxM2I1YTY4NjY3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MDUxYTQzYjhhZmI0OTBiYTZjM2MwMTMxODdhN2I1My5iaW5kUG9wdXAocG9wdXBfZWM2YWVjYTNiMjZhNDIxODkzOGZhZTE1NTI2ZTY0OTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmYzU5ZGY4Njc5MzRkMGJhNjZiYTI2ZTZhMGM2YjA4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg3NjQ0ODQsIC03My45Njk2ODkwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjYjJhNGM2MDg1YzQ2M2NiNjBmZjk4MTU2ZTUyZTZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTdjYzM3ZTM1YTEzNDViMGFlMmNkMmZkMjQ2ZDhmZGIgPSAkKGA8ZGl2IGlkPSJodG1sXzU3Y2MzN2UzNWExMzQ1YjBhZTJjZDJmZDI0NmQ4ZmRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGVybW9udCBBdmUgJiBMYWZheWV0dGUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogODM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWNiMmE0YzYwODVjNDYzY2I2MGZmOTgxNTZlNTJlNmIuc2V0Q29udGVudChodG1sXzU3Y2MzN2UzNWExMzQ1YjBhZTJjZDJmZDI0NmQ4ZmRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZmYzU5ZGY4Njc5MzRkMGJhNjZiYTI2ZTZhMGM2YjA4LmJpbmRQb3B1cChwb3B1cF9lY2IyYTRjNjA4NWM0NjNjYjYwZmY5ODE1NmU1MmU2YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTc5ZTU1MThkODc0NDVhMWJkMGUxOTUzZDY2YjA5ODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTU3MzM5OCwgLTczLjk3MTI5NjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmMzc3ZmE4MDI4MzQ1NTZiZDljMDU2NTljM2M3OTJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmZkMGE2YjE5ZDc0NDE5ZWIzY2E2OWYyY2UxYzEzMGYgPSAkKGA8ZGl2IGlkPSJodG1sXzJmZDBhNmIxOWQ3NDQxOWViM2NhNjlmMmNlMWMxMzBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGVybW9udCBBdmUgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTUxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVmMzc3ZmE4MDI4MzQ1NTZiZDljMDU2NTljM2M3OTJmLnNldENvbnRlbnQoaHRtbF8yZmQwYTZiMTlkNzQ0MTllYjNjYTY5ZjJjZTFjMTMwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NzllNTUxOGQ4NzQ0NWExYmQwZTE5NTNkNjZiMDk4NS5iaW5kUG9wdXAocG9wdXBfNWYzNzdmYTgwMjgzNDU1NmJkOWMwNTY1OWMzYzc5MmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjZmNkNGFiNGFmODQ3MWJiMjAyY2MzNmMxZDk2YmU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcwNTEzLCAtNzMuOTg4MDM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4Y2FlNmE2OGVjNjRlNzBhOTgwNjA5NThkY2Q5NjM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjhlODIzZTYzOGNhNDRmOWFhMDc2MjE1N2M0NmFjYTIgPSAkKGA8ZGl2IGlkPSJodG1sXzI4ZTgyM2U2MzhjYTQ0ZjlhYTA3NjIxNTdjNDZhY2EyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDU5IFN0ICYgMTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNjguMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxNzxicj4gbmV0IGRlcGFydHVyZXM6IC01MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOGNhZTZhNjhlYzY0ZTcwYTk4MDYwOTU4ZGNkOTYzNy5zZXRDb250ZW50KGh0bWxfMjhlODIzZTYzOGNhNDRmOWFhMDc2MjE1N2M0NmFjYTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2NmY2Q0YWI0YWY4NDcxYmIyMDJjYzM2YzFkOTZiZTkuYmluZFBvcHVwKHBvcHVwX2I4Y2FlNmE2OGVjNjRlNzBhOTgwNjA5NThkY2Q5NjM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMWE1NGVhYWQ3NjQ0ZTE3Yjg3OTM1MGRhYWNhNGIzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NTg0OTQxLCAtNzMuOTg2OTA1MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTI1NjhjMjE3YTY0NGNmODY3ZThlZmUwYTk1MWM3MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyYmE1MmMyOGU3YzQ5YWY5YmZjMzkxZTQzNWY0YzlhID0gJChgPGRpdiBpZD0iaHRtbF82MmJhNTJjMjhlN2M0OWFmOWJmYzM5MWU0MzVmNGM5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA1NCBTdCAmIDkgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMzYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI5Mjxicj4gbmV0IGRlcGFydHVyZXM6IC00NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTI1NjhjMjE3YTY0NGNmODY3ZThlZmUwYTk1MWM3Mi5zZXRDb250ZW50KGh0bWxfNjJiYTUyYzI4ZTdjNDlhZjliZmMzOTFlNDM1ZjRjOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDFhNTRlYWFkNzY0NGUxN2I4NzkzNTBkYWFjYTRiM2YuYmluZFBvcHVwKHBvcHVwX2U5MjU2OGMyMTdhNjQ0Y2Y4NjdlOGVmZTBhOTUxYzcyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDE3OGEyYjJkN2U0NzJhYWYwYmEwNGI0YTM2ZjkxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNzU0ODM0LCAtNzQuMDEzMjIwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMwLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjZlMTI2Mjk0ZDE0NDNmMGEzYTE4NmQ0NTQxZDAzZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jM2FiY2I3M2NhZGU0ZDM3YjRiNTM5MTBlOGVhYWIwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzNhYmNiNzNjYWRlNGQzN2I0YjUzOTEwZThlYWFiMDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgU3QgJiBDaGFtYmVycyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODgwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDg3PGJyPiBuZXQgZGVwYXJ0dXJlczogNjA3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2ZTEyNjI5NGQxNDQzZjBhM2ExODZkNDU0MWQwM2UxLnNldENvbnRlbnQoaHRtbF9jM2FiY2I3M2NhZGU0ZDM3YjRiNTM5MTBlOGVhYWIwMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MDE3OGEyYjJkN2U0NzJhYWYwYmEwNGI0YTM2ZjkxNS5iaW5kUG9wdXAocG9wdXBfZjZlMTI2Mjk0ZDE0NDNmMGEzYTE4NmQ0NTQxZDAzZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4MWY5OWRlNGE5NjRiNjJhMGU0MzIyYzZkNjQzMDc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAxOTA3LCAtNzQuMDEzOTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTVjZTk3NDY2N2JiNGQzZTgxZjIxOTYyYjQ5NGI3NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMGNiMDUwMDFhYTU0OWJlYTk4MDFmNzVhMjMxYWQ4ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTBjYjA1MDAxYWE1NDliZWE5ODAxZjc1YTIzMWFkOGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJ1cyBTbGlwICYgU3RhdGUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzE3PGJyPiBuZXQgZGVwYXJ0dXJlczogMTQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1Y2U5NzQ2NjdiYjRkM2U4MWYyMTk2MmI0OTRiNzU1LnNldENvbnRlbnQoaHRtbF8xMGNiMDUwMDFhYTU0OWJlYTk4MDFmNzVhMjMxYWQ4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kODFmOTlkZTRhOTY0YjYyYTBlNDMyMmM2ZDY0MzA3OC5iaW5kUG9wdXAocG9wdXBfNTVjZTk3NDY2N2JiNGQzZTgxZjIxOTYyYjQ5NGI3NTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1MWExNmJmZDM2NjRhYTRiNWNmZDVhZGZmOTU5YjhlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI0Njc3MjEsIC03My45ODc4MzQxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZGY2NDc0Nzg4NWU0MGJjYjI3OTFmOTQ3ZmYzNWM4MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5ZWU5NzdlYzNlYTQ2ODU4YWRjZTg2NWE2ODMyNzZlID0gJChgPGRpdiBpZD0iaHRtbF9kOWVlOTc3ZWMzZWE0Njg1OGFkY2U4NjVhNjgzMjc2ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAzIFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ4Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzI3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE1NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZGY2NDc0Nzg4NWU0MGJjYjI3OTFmOTQ3ZmYzNWM4MS5zZXRDb250ZW50KGh0bWxfZDllZTk3N2VjM2VhNDY4NThhZGNlODY1YTY4MzI3NmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTUxYTE2YmZkMzY2NGFhNGI1Y2ZkNWFkZmY5NTliOGUuYmluZFBvcHVwKHBvcHVwX2ZkZjY0NzQ3ODg1ZTQwYmNiMjc5MWY5NDdmZjM1YzgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzRhMGI3M2I2MGQ0YTZjOTdkNDQzOWVmOGY3NmNkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMTQ4NTEsIC03My45ODY1NjkyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5NTFjZmNmNmE2YTQwZTg5NTgxMmY3Y2U0ZGFhZDRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDkwZGVkMjhhMzZkNDBmOGFiODc4OWMxZGNlNzljOGMgPSAkKGA8ZGl2IGlkPSJodG1sXzQ5MGRlZDI4YTM2ZDQwZjhhYjg3ODljMWRjZTc5YzhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Zb3JrIFN0ICYgSmF5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNDEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM4ODxicj4gbmV0IGRlcGFydHVyZXM6IDE0Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTUxY2ZjZjZhNmE0MGU4OTU4MTJmN2NlNGRhYWQ0YS5zZXRDb250ZW50KGh0bWxfNDkwZGVkMjhhMzZkNDBmOGFiODc4OWMxZGNlNzljOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODc0YTBiNzNiNjBkNGE2Yzk3ZDQ0MzllZjhmNzZjZDguYmluZFBvcHVwKHBvcHVwX2E5NTFjZmNmNmE2YTQwZTg5NTgxMmY3Y2U0ZGFhZDRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ODFkNzBmMGIxMTQ0YzMxOTRhMTA2Yzk5ZDczOWUzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNjIxNzg4LCAtNzMuOTgzNzk4NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0MTBhZmY0MWRjMzQyYTg4ZTExYjY4ZTU5NzAwZTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDNjM2U2OWJiODBkNDRmOWE0OTlmYmY4MjgxYWUyN2EgPSAkKGA8ZGl2IGlkPSJodG1sXzAzYzNlNjliYjgwZDQ0ZjlhNDk5ZmJmODI4MWFlMjdhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDcgU3QgJiBBdmVudWUgQTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTA1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjU5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0MTBhZmY0MWRjMzQyYTg4ZTExYjY4ZTU5NzAwZTViLnNldENvbnRlbnQoaHRtbF8wM2MzZTY5YmI4MGQ0NGY5YTQ5OWZiZjgyODFhZTI3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ODFkNzBmMGIxMTQ0YzMxOTRhMTA2Yzk5ZDczOWUzNS5iaW5kUG9wdXAocG9wdXBfNjQxMGFmZjQxZGMzNDJhODhlMTFiNjhlNTk3MDBlNWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhYjhhNmZhNTY4MjQ1MjZiYWZiMDhmYjYxYjY4NjliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI5NTUzNjEsIC03My45ODA1NzI0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEyLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2YxNTVhNzUxNzFmNGNlMGFhOWQyZWVhNDk3MWNiNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjllMDJjYjc5ZGY0YzhkOTM3OTM2MTJhOTEzNmRhMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDY5ZTAyY2I3OWRmNGM4ZDkzNzkzNjEyYTkxMzZkYTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTMgU3QgJiBBdmVudWUgQTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTkxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNDI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjQ5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmMTU1YTc1MTcxZjRjZTBhYTlkMmVlYTQ5NzFjYjVlLnNldENvbnRlbnQoaHRtbF8wNjllMDJjYjc5ZGY0YzhkOTM3OTM2MTJhOTEzNmRhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYWI4YTZmYTU2ODI0NTI2YmFmYjA4ZmI2MWI2ODY5Yi5iaW5kUG9wdXAocG9wdXBfM2YxNTVhNzUxNzFmNGNlMGFhOWQyZWVhNDk3MWNiNWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxMWE0ZmE5MDE2YjQxYTRhZTNlMjQzNWI4NWQxYTYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQzMTc0NDksIC03NC4wMDM2NjQ0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzMxYTc1ZWE2NmM0NzRhYTk2Y2I0MjJlNTdkOTM1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlYmU4NmY1OGFmNjRhZjJiMmRiNmJlMjA4NWUyM2Q1ID0gJChgPGRpdiBpZD0iaHRtbF8xZWJlODZmNThhZjY0YWYyYjJkYjZiZTIwODVlMjNkNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+OSBBdmUgJiBXIDE4IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2MDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU0NTxicj4gbmV0IGRlcGFydHVyZXM6IC01Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzMxYTc1ZWE2NmM0NzRhYTk2Y2I0MjJlNTdkOTM1NS5zZXRDb250ZW50KGh0bWxfMWViZTg2ZjU4YWY2NGFmMmIyZGI2YmUyMDg1ZTIzZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDExYTRmYTkwMTZiNDFhNGFlM2UyNDM1Yjg1ZDFhNjIuYmluZFBvcHVwKHBvcHVwXzkzMzFhNzVlYTY2YzQ3NGFhOTZjYjQyMmU1N2Q5MzU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OGZiYWU4MjZjZDQ0NzEyYWQwNDExNjk3ZDE2YmVhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MTczOTY5LCAtNzMuOTk0MTU1NTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDE0LjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iYjIzZGQ0MmQ1OGU0NjY1YmE0ZWYxODA4NTcyYThlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwYWExNWZmMWFiZjQ5YzM5N2YyN2E0MDAxZjVhN2JjID0gJChgPGRpdiBpZD0iaHRtbF9jMGFhMTVmZjFhYmY0OWMzOTdmMjdhNDAwMWY1YTdiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyMSBTdCAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5NTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyMzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAyODQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmIyM2RkNDJkNThlNDY2NWJhNGVmMTgwODU3MmE4ZTMuc2V0Q29udGVudChodG1sX2MwYWExNWZmMWFiZjQ5YzM5N2YyN2E0MDAxZjVhN2JjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg4ZmJhZTgyNmNkNDQ3MTJhZDA0MTE2OTdkMTZiZWE1LmJpbmRQb3B1cChwb3B1cF9iYjIzZGQ0MmQ1OGU0NjY1YmE0ZWYxODA4NTcyYThlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDE4ZGFmZDNmMzlhNGNhM2FkNzE1NTU1ZWZiZWZhMjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODIxNjU2NCwgLTczLjk1Mzk5MDI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMGMxMDkwNjZiNTRmYjU4NTkyM2ZhMmEzYzI3ZTc1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDNlNmI0ODk3YjY5NGIwODg0MjIxYzliMmQwYzJlZmUgPSAkKGA8ZGl2IGlkPSJodG1sXzAzZTZiNDg5N2I2OTRiMDg4NDIyMWM5YjJkMGMyZWZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYW5jb2NrIFN0ICYgQmVkZm9yZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNTxicj4gbmV0IGRlcGFydHVyZXM6IC0yNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTBjMTA5MDY2YjU0ZmI1ODU5MjNmYTJhM2MyN2U3NS5zZXRDb250ZW50KGh0bWxfMDNlNmI0ODk3YjY5NGIwODg0MjIxYzliMmQwYzJlZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDE4ZGFmZDNmMzlhNGNhM2FkNzE1NTU1ZWZiZWZhMjcuYmluZFBvcHVwKHBvcHVwXzVlMGMxMDkwNjZiNTRmYjU4NTkyM2ZhMmEzYzI3ZTc1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODNjMzhlYmMzZjk0ODEwYWI5MjEzY2ZkMzg4MzBiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MDk4MzM4NTQsIC03My45NTAwNDc5NzU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTc1NGQ0NzQ3MGY2NDg2ZWEzMDFjNjZlOWI2OTU3ZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNmM2MTFiYzA5Yjg0OTljOTA1NWRhZGQzMGM3ZThkMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDZjNjExYmMwOWI4NDk5YzkwNTVkYWRkMzBjN2U4ZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hY29uIFN0ICYgTm9zdHJhbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTMxPGJyPiBuZXQgZGVwYXJ0dXJlczogNTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTc1NGQ0NzQ3MGY2NDg2ZWEzMDFjNjZlOWI2OTU3Zjguc2V0Q29udGVudChodG1sXzA2YzYxMWJjMDliODQ5OWM5MDU1ZGFkZDMwYzdlOGQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM4M2MzOGViYzNmOTQ4MTBhYjkyMTNjZmQzODgzMGI0LmJpbmRQb3B1cChwb3B1cF9hNzU0ZDQ3NDcwZjY0ODZlYTMwMWM2NmU5YjY5NTdmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzU1ZDcwM2MwMGI2NGQ2Y2E1MzBlMTdmY2M5NGNhMzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Mjc3OTEyNiwgLTczLjk4NTY0OTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTBkODY0Nzk1YTZiNDJmZmI5ZmFkZGJkMDEyMGU1MWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NTNhOTNlYzY3NWY0OTQ4YWM0Nzk0YjhlYjYwYzhiYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDUzYTkzZWM2NzVmNDk0OGFjNDc5NGI4ZWI2MGM4YmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN0IE1hcmtzIFBsICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ1My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjkzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE2MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMGQ4NjQ3OTVhNmI0MmZmYjlmYWRkYmQwMTIwZTUxZC5zZXRDb250ZW50KGh0bWxfNDUzYTkzZWM2NzVmNDk0OGFjNDc5NGI4ZWI2MGM4YmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzU1ZDcwM2MwMGI2NGQ2Y2E1MzBlMTdmY2M5NGNhMzQuYmluZFBvcHVwKHBvcHVwXzEwZDg2NDc5NWE2YjQyZmZiOWZhZGRiZDAxMjBlNTFkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ODQwMTRmOTNiYjg0ODlkYjllNDgxN2RmNzM2ZDE3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNjI4MDcwMDAwMDAwNCwgLTczLjk4OTc4MDQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmYjc4MWJhNDAzMTRjZjNiZGE1ZDJmYjEzNTg3NTgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTcxZmJiMTg1NDRiNGIxZjk4NmMzZjJhYmY1MDMyMTkgPSAkKGA8ZGl2IGlkPSJodG1sXzk3MWZiYjE4NTQ0YjRiMWY5ODZjM2YyYWJmNTAzMjE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDQgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTkwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA5OTxicj4gbmV0IGRlcGFydHVyZXM6IC05MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZmI3ODFiYTQwMzE0Y2YzYmRhNWQyZmIxMzU4NzU4MS5zZXRDb250ZW50KGh0bWxfOTcxZmJiMTg1NDRiNGIxZjk4NmMzZjJhYmY1MDMyMTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDg0MDE0ZjkzYmI4NDg5ZGI5ZTQ4MTdkZjczNmQxNzIuYmluZFBvcHVwKHBvcHVwXzZmYjc4MWJhNDAzMTRjZjNiZGE1ZDJmYjEzNTg3NTgxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMjRlZjQ2Yzc2MjQ0NjA4YTUxODIyZDY4NmIyNjVlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MjU1NDM0LCAtNzMuOTcyODI2MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzQzODgyMTkzYjliNDQwM2IyZWMxZTJiOWZlODg5ZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzk2MzE0NWM2YWQ0MWQ5YjJiMjZmM2U4NTcxYjQ1MiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzM5NjMxNDVjNmFkNDFkOWIyYjI2ZjNlODU3MWI0NTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNDUgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjI4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDM4ODIxOTNiOWI0NDAzYjJlYzFlMmI5ZmU4ODlkZC5zZXRDb250ZW50KGh0bWxfMzM5NjMxNDVjNmFkNDFkOWIyYjI2ZjNlODU3MWI0NTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDI0ZWY0NmM3NjI0NDYwOGE1MTgyMmQ2ODZiMjY1ZTUuYmluZFBvcHVwKHBvcHVwX2M0Mzg4MjE5M2I5YjQ0MDNiMmVjMWUyYjlmZTg4OWRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZTE4ZGUxYjY1OWE0ZWFlOTc4NDU0NzMxM2NiNTcyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjAxNCwgLTczLjk2NzQxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VlMzNmMDBlYzU3ODRlYmQ4OGI1MDMxMWZlMjc3OGExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTBhNDA3Y2UwOGNjNDU0NWIxNjc0OTRhODYwZjdlZjIgPSAkKGA8ZGl2IGlkPSJodG1sXzUwYTQwN2NlMDhjYzQ1NDViMTY3NDk0YTg2MGY3ZWYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDUyIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI5My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzgyPGJyPiBuZXQgZGVwYXJ0dXJlczogODkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWUzM2YwMGVjNTc4NGViZDg4YjUwMzExZmUyNzc4YTEuc2V0Q29udGVudChodG1sXzUwYTQwN2NlMDhjYzQ1NDViMTY3NDk0YTg2MGY3ZWYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlMThkZTFiNjU5YTRlYWU5Nzg0NTQ3MzEzY2I1NzJiLmJpbmRQb3B1cChwb3B1cF9lZTMzZjAwZWM1Nzg0ZWJkODhiNTAzMTFmZTI3NzhhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTQyNWMyMmU4NDZmNGM1NmE2NTZjODZkZmY2MGExZWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDY2NDY5OTk5OTk5OTYsIC03My45OTM5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMmIxNGJiMzY5NjA0NDQzOGViYzNkNjA3NDg1NmNjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmOTJhNWExOWZmMjQ0Y2FhZTViMTFhYmE1ZjRhOWYzID0gJChgPGRpdiBpZD0iaHRtbF9iZjkyYTVhMTlmZjI0NGNhYWU1YjExYWJhNWY0YTlmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyNyBTdCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MDAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc2NDxicj4gbmV0IGRlcGFydHVyZXM6IDI2NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMmIxNGJiMzY5NjA0NDQzOGViYzNkNjA3NDg1NmNjYi5zZXRDb250ZW50KGh0bWxfYmY5MmE1YTE5ZmYyNDRjYWFlNWIxMWFiYTVmNGE5ZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTQyNWMyMmU4NDZmNGM1NmE2NTZjODZkZmY2MGExZWUuYmluZFBvcHVwKHBvcHVwX2IyYjE0YmIzNjk2MDQ0NDM4ZWJjM2Q2MDc0ODU2Y2NiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzY0NGFmZTlhNmQ0MjVjOTU4NTE3YTJhYjgxNmZiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwODUzMDc0LCAtNzMuOTY0MDg5NjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDI0NDBiMGY4MzQ0YmE1OGQ0OGY1ZGUyY2M4NDQ4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YyOGMwMTFhMjQzYTRhOTNhOWE5NDY3ZTA5MGJhYzljID0gJChgPGRpdiBpZD0iaHRtbF9mMjhjMDExYTI0M2E0YTkzYTlhOTQ2N2UwOTBiYWM5YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVkZm9yZCBBdmUgJiBTIDkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMTxicj4gbmV0IGRlcGFydHVyZXM6IDExLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0MjQ0MGIwZjgzNDRiYTU4ZDQ4ZjVkZTJjYzg0NDhmLnNldENvbnRlbnQoaHRtbF9mMjhjMDExYTI0M2E0YTkzYTlhOTQ2N2UwOTBiYWM5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNzY0NGFmZTlhNmQ0MjVjOTU4NTE3YTJhYjgxNmZiOS5iaW5kUG9wdXAocG9wdXBfZTQyNDQwYjBmODM0NGJhNThkNDhmNWRlMmNjODQ0OGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlZjI2ZjJhOWE1YjQ1ZDhiNmM5ZWNhNDZhNTk2ZDY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQyMzU0Mjk5OTk5OTk1LCAtNzMuOTg5MTUwNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODAyMjA1MjBmMmY0NTE5ODM4NzFkNjU5OWNjYjVkMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhY2VkOGMwNDY1YzRkZTI4NGQxYmE3ZGI3ZGJiZTlmID0gJChgPGRpdiBpZD0iaHRtbF9jYWNlZDhjMDQ2NWM0ZGUyODRkMWJhN2RiN2RiYmU5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDI0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDczODxicj4gbmV0IGRlcGFydHVyZXM6IDYzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E4MDIyMDUyMGYyZjQ1MTk4Mzg3MWQ2NTk5Y2NiNWQyLnNldENvbnRlbnQoaHRtbF9jYWNlZDhjMDQ2NWM0ZGUyODRkMWJhN2RiN2RiYmU5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZWYyNmYyYTlhNWI0NWQ4YjZjOWVjYTQ2YTU5NmQ2Ny5iaW5kUG9wdXAocG9wdXBfYTgwMjIwNTIwZjJmNDUxOTgzODcxZDY1OTljY2I1ZDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MzA4YzczMmY1NjQwZTY5ZTY2NmY3OTgxNjFlNDNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI3NDA3OTQsIC03My45ODE0MjAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTExLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZTBmNGRhOWNlZjA0ZjA3OGQ2MTRkMWYzZTA1MjkwYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzZjk2ZDc2MDc5YTQ4OTM4NzQzMDAxMjE2OTg2NWQzID0gJChgPGRpdiBpZD0iaHRtbF9kM2Y5NmQ3NjA3OWE0ODkzODc0MzAwMTIxNjk4NjVkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMCBTdCAmIEF2ZW51ZSBBPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1ODguMDxicj4gdG90YWwgYXJyaXZhbHM6IDM2NDxicj4gbmV0IGRlcGFydHVyZXM6IC0yMjQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2UwZjRkYTljZWYwNGYwNzhkNjE0ZDFmM2UwNTI5MGIuc2V0Q29udGVudChodG1sX2QzZjk2ZDc2MDc5YTQ4OTM4NzQzMDAxMjE2OTg2NWQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y5MzA4YzczMmY1NjQwZTY5ZTY2NmY3OTgxNjFlNDNmLmJpbmRQb3B1cChwb3B1cF8zZTBmNGRhOWNlZjA0ZjA3OGQ2MTRkMWYzZTA1MjkwYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2EzYjQ1YzNmMzU3NDE0NDhhNmNlZDY2Y2UxYzQyNDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDQ4NzYzNCwgLTczLjk5NTI5ODg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTliYThhMmJmZTNlNGI1NGE5ZWMwMTZlMDVlMzg4NDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTQ1MGZkOWY5MmU0NjA4OGE1OTM3ZjE0OGQyYWVhZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTE0NTBmZDlmOTJlNDYwODhhNTkzN2YxNDhkMmFlYWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMjQgU3QgJiA3IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzA5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3OTg8YnI+IG5ldCBkZXBhcnR1cmVzOiA4OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOWJhOGEyYmZlM2U0YjU0YTllYzAxNmUwNWUzODg0MC5zZXRDb250ZW50KGh0bWxfYTE0NTBmZDlmOTJlNDYwODhhNTkzN2YxNDhkMmFlYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2EzYjQ1YzNmMzU3NDE0NDhhNmNlZDY2Y2UxYzQyNDcuYmluZFBvcHVwKHBvcHVwXzE5YmE4YTJiZmUzZTRiNTRhOWVjMDE2ZTA1ZTM4ODQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDAzYjk3NmI0YWI0YWI0OGI2ZmQzZWJmMWI1ZDk2YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MzcwNzM5LCAtNzMuOTg1MTYxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWUxZDc5NjViZDQ1NDMwZGFjYTAwZmUzMmU3YzVmYTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODNjN2Q3MTY0MDA0MTI3OThjYTZmM2QwMmRlMWY2MyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjgzYzdkNzE2NDAwNDEyNzk4Y2E2ZjNkMDJkZTFmNjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjggQXZlICYgVyA1MiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDE0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAzOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZTFkNzk2NWJkNDU0MzBkYWNhMDBmZTMyZTdjNWZhOS5zZXRDb250ZW50KGh0bWxfMjgzYzdkNzE2NDAwNDEyNzk4Y2E2ZjNkMDJkZTFmNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGQwM2I5NzZiNGFiNGFiNDhiNmZkM2ViZjFiNWQ5NmEuYmluZFBvcHVwKHBvcHVwX2VlMWQ3OTY1YmQ0NTQzMGRhY2EwMGZlMzJlN2M1ZmE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Njg5ZjZmNDkyZGY0N2QyOGE1ODlhYjU2OTlkYzU0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjYwMzU5LCAtNzMuOTk3OTAwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0N2Y3YmQ0YTRiNzRkYTBiM2ViZTBmYjg1NzlkOTdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjMwMmQxOTE3YzdiNDgxMTg1MTM5NjcwODUyZGRmZmYgPSAkKGA8ZGl2IGlkPSJodG1sX2YzMDJkMTkxN2M3YjQ4MTE4NTEzOTY3MDg1MmRkZmZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDM3IFN0ICYgMTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM4OTxicj4gbmV0IGRlcGFydHVyZXM6IC0xNDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ3ZjdiZDRhNGI3NGRhMGIzZWJlMGZiODU3OWQ5N2Muc2V0Q29udGVudChodG1sX2YzMDJkMTkxN2M3YjQ4MTE4NTEzOTY3MDg1MmRkZmZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk2ODlmNmY0OTJkZjQ3ZDI4YTU4OWFiNTY5OWRjNTQxLmJpbmRQb3B1cChwb3B1cF83NDdmN2JkNGE0Yjc0ZGEwYjNlYmUwZmI4NTc5ZDk3YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTEwY2EyYjVhMzhkNDZiODg0NDEyNDFiMTcxMmUwMGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjQ2MTgzNywgLTczLjk4Nzg5NDczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1ZTcxMTczZjQ5YjQ0MDNhNTI4NzBiOGRkZjI0M2RhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmQ4YjNjOTFiMWJiNDdkN2E2MzljYmU0NDdlZjRiM2IgPSAkKGA8ZGl2IGlkPSJodG1sX2ZkOGIzYzkxYjFiYjQ3ZDdhNjM5Y2JlNDQ3ZWY0YjNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDUyIFN0ICYgOSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMzOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzE4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1ZTcxMTczZjQ5YjQ0MDNhNTI4NzBiOGRkZjI0M2RhLnNldENvbnRlbnQoaHRtbF9mZDhiM2M5MWIxYmI0N2Q3YTYzOWNiZTQ0N2VmNGIzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MTBjYTJiNWEzOGQ0NmI4ODQ0MTI0MWIxNzEyZTAwYi5iaW5kUG9wdXAocG9wdXBfZTVlNzExNzNmNDliNDQwM2E1Mjg3MGI4ZGRmMjQzZGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5YjRkYjY3N2I0ZjQzMjY4YTJmNjVhYWMzMWVhNmIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYyMjcyMDUsIC03My45ODc4ODIwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlYzkzYjYzMzc0ODQ2MjdhNmU0NzVjYzE5ZDNlMjgyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGYwMTc3ZTllN2RkNGY0MTkzOGUxZDY1MzcxYTgxODggPSAkKGA8ZGl2IGlkPSJodG1sXzBmMDE3N2U5ZTdkZDRmNDE5MzhlMWQ2NTM3MWE4MTg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQ5IFN0ICYgOCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU3NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTQ1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTMwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlYzkzYjYzMzc0ODQ2MjdhNmU0NzVjYzE5ZDNlMjgyLnNldENvbnRlbnQoaHRtbF8wZjAxNzdlOWU3ZGQ0ZjQxOTM4ZTFkNjUzNzFhODE4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iOWI0ZGI2NzdiNGY0MzI2OGEyZjY1YWFjMzFlYTZiMy5iaW5kUG9wdXAocG9wdXBfNGVjOTNiNjMzNzQ4NDYyN2E2ZTQ3NWNjMTlkM2UyODIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4YWQ3OTFkMmQyMTQyZDdhYzJlNzZiYWU3OTBiNTkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ0NzUxNDgsIC03My45OTkxNTM2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzE4YjIyN2I4YTc0N2EwYWJmMmM5ZDU5M2Q2MWI3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEwNTE5OGMzZjMyNDQyOTY5NmQ2NDQ0Y2I4YTE4NmJhID0gJChgPGRpdiBpZD0iaHRtbF8xMDUxOThjM2YzMjQ0Mjk2OTZkNjQ0NGNiOGExODZiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyMiBTdCAmIDggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0Mjxicj4gbmV0IGRlcGFydHVyZXM6IC01NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNzE4YjIyN2I4YTc0N2EwYWJmMmM5ZDU5M2Q2MWI3ZS5zZXRDb250ZW50KGh0bWxfMTA1MTk4YzNmMzI0NDI5Njk2ZDY0NDRjYjhhMTg2YmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzhhZDc5MWQyZDIxNDJkN2FjMmU3NmJhZTc5MGI1OTMuYmluZFBvcHVwKHBvcHVwXzA3MThiMjI3YjhhNzQ3YTBhYmYyYzlkNTkzZDYxYjdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYmQ3MzUyNWQ4MDk0NzYyOGU4Mjk2NzZhYzUxNDgxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NDU1NzMxLCAtNzMuOTY1OTI5NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NzM4NjQxYTI3Njg0ZDE5YWNjZjIxMmMyYzQwOTQxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjYzY4YTg0NWIzODRiMTNhNzQ0ZGFkN2FmNmQ4Zjg5ID0gJChgPGRpdiBpZD0iaHRtbF8xY2M2OGE4NDViMzg0YjEzYTc0NGRhZDdhZjZkOGY4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA1MSBTdCAmIDEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyODguMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwODxicj4gbmV0IGRlcGFydHVyZXM6IC04MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NzM4NjQxYTI3Njg0ZDE5YWNjZjIxMmMyYzQwOTQxNi5zZXRDb250ZW50KGh0bWxfMWNjNjhhODQ1YjM4NGIxM2E3NDRkYWQ3YWY2ZDhmODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmJkNzM1MjVkODA5NDc2MjhlODI5Njc2YWM1MTQ4MWQuYmluZFBvcHVwKHBvcHVwXzU3Mzg2NDFhMjc2ODRkMTlhY2NmMjEyYzJjNDA5NDE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MzUzZjcyMDBmZTY0MTBhOGNjNzIyNGMzNjQ1NDQ2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MDAxOTg2LCAtNzMuOTY5MDUzMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZmMzN2U4MTRkYTg0NmQ5OGNmYWQxYzQ2OTdhNTI1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxM2QwNzE4ZjhjZTQ2YzhiNjMxY2I3N2Q2ZTY0MTdkID0gJChgPGRpdiBpZD0iaHRtbF8zMTNkMDcxOGY4Y2U0NmM4YjYzMWNiNzdkNmU2NDE3ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MSBBdmUgJiBFIDQ0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIzODxicj4gbmV0IGRlcGFydHVyZXM6IDg5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmYzM3ZTgxNGRhODQ2ZDk4Y2ZhZDFjNDY5N2E1MjU5LnNldENvbnRlbnQoaHRtbF8zMTNkMDcxOGY4Y2U0NmM4YjYzMWNiNzdkNmU2NDE3ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MzUzZjcyMDBmZTY0MTBhOGNjNzIyNGMzNjQ1NDQ2NC5iaW5kUG9wdXAocG9wdXBfZGZjMzdlODE0ZGE4NDZkOThjZmFkMWM0Njk3YTUyNTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJjMDBkNWFiZjllZTQzNzVhNzZmNzJmYWVjMjBiMDIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU5NzEwNzk5OTk5OTksIC03My45NzQwMjMxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWYyNGE4ZTI1M2U1NGQ2NmIyZGRkNzc4NjUzNWVjMGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWIzNGUxMTMxMTc0ZjZkYTYwOTZhYWM4NWNlMWRkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWFiMzRlMTEzMTE3NGY2ZGE2MDk2YWFjODVjZTFkZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTMgU3QgJiBNYWRpc29uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTEyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTg8YnI+IG5ldCBkZXBhcnR1cmVzOiA0Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZjI0YThlMjUzZTU0ZDY2YjJkZGQ3Nzg2NTM1ZWMwYy5zZXRDb250ZW50KGh0bWxfOWFiMzRlMTEzMTE3NGY2ZGE2MDk2YWFjODVjZTFkZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmMwMGQ1YWJmOWVlNDM3NWE3NmY3MmZhZWMyMGIwMjEuYmluZFBvcHVwKHBvcHVwXzVmMjRhOGUyNTNlNTRkNjZiMmRkZDc3ODY1MzVlYzBjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNWYyN2ZhZTgwNGU0ZTdiYjQ4OTdkNjdhY2JiNjIyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2Njk1MzE3LCAtNzMuOTgxNjkzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhNDM3ZTY3MjUwOTRhZjg4OWRkZTVhYmM3MGE5OGFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjQxMjZlN2QyODE3NGYyN2FhNTllMDZjN2ExZmU1ZmUgPSAkKGA8ZGl2IGlkPSJodG1sXzY0MTI2ZTdkMjgxNzRmMjdhYTU5ZTA2YzdhMWZlNWZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgNTggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ2Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTY2PGJyPiBuZXQgZGVwYXJ0dXJlczogMTAwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhNDM3ZTY3MjUwOTRhZjg4OWRkZTVhYmM3MGE5OGFhLnNldENvbnRlbnQoaHRtbF82NDEyNmU3ZDI4MTc0ZjI3YWE1OWUwNmM3YTFmZTVmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNWYyN2ZhZTgwNGU0ZTdiYjQ4OTdkNjdhY2JiNjIyYi5iaW5kUG9wdXAocG9wdXBfNGE0MzdlNjcyNTA5NGFmODg5ZGRlNWFiYzcwYTk4YWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4Njk0OGRjYTQwNTQzNzA5MTE5MTEwZDA4NTcyNTYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUxMzk2LCAtNzQuMDA1MjI2MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NTIwMTg2ODVjYmM0ZGFmYTAyZjRkZGRjNzI5ZDNiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2Y2ZmNWFmMmZjODRjZTRiZWJhY2IyZWRkZTM0Y2UyID0gJChgPGRpdiBpZD0iaHRtbF83NmNmZjVhZjJmYzg0Y2U0YmViYWNiMmVkZGUzNGNlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTEgQXZlICYgVyAyNyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NjU8YnI+IG5ldCBkZXBhcnR1cmVzOiA0Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NTIwMTg2ODVjYmM0ZGFmYTAyZjRkZGRjNzI5ZDNiYi5zZXRDb250ZW50KGh0bWxfNzZjZmY1YWYyZmM4NGNlNGJlYmFjYjJlZGRlMzRjZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjg2OTQ4ZGNhNDA1NDM3MDkxMTkxMTBkMDg1NzI1NjMuYmluZFBvcHVwKHBvcHVwXzg1MjAxODY4NWNiYzRkYWZhMDJmNGRkZGM3MjlkM2JiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYzRjZDI1NWMwZjc0OWUzYjg0MDVmNDA5YmM4MzUzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0Njc0NTAwMDAwMDAwNCwgLTc0LjAwNzc1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkYTRkN2U4NWVhMTRhMTM5MjkzYTg2MjhjZmIzNjRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2UxNWJiNGUwNGE5NGE3YmJkNzI5OTI5ZGYzYzgxZDYgPSAkKGA8ZGl2IGlkPSJodG1sX2NlMTViYjRlMDRhOTRhN2JiZDcyOTkyOWRmM2M4MWQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDIwIFN0ICYgMTEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5NTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwOTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNDEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWRhNGQ3ZTg1ZWExNGExMzkyOTNhODYyOGNmYjM2NGMuc2V0Q29udGVudChodG1sX2NlMTViYjRlMDRhOTRhN2JiZDcyOTkyOWRmM2M4MWQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjNGNkMjU1YzBmNzQ5ZTNiODQwNWY0MDliYzgzNTMzLmJpbmRQb3B1cChwb3B1cF9hZGE0ZDdlODVlYTE0YTEzOTI5M2E4NjI4Y2ZiMzY0YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTdlYmMyZDM5NTNiNDgwZWEwMzNmYTBhMjZjMzhkNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTI4NTg4NywgLTczLjk2NTkwMjk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDY4NTMxMDYwYjE0ZThjYTJkZjBmZDY5OWI0ZThiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4ZDlkYmJjODZjODRkMzE5NjQ2MjYzZDIxZDkwNTM2ID0gJChgPGRpdiBpZD0iaHRtbF8zOGQ5ZGJiYzg2Yzg0ZDMxOTY0NjI2M2QyMWQ5MDUzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UyA0IFN0ICYgV3l0aGUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDI4ODxicj4gbmV0IGRlcGFydHVyZXM6IDUwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkNjg1MzEwNjBiMTRlOGNhMmRmMGZkNjk5YjRlOGJmLnNldENvbnRlbnQoaHRtbF8zOGQ5ZGJiYzg2Yzg0ZDMxOTY0NjI2M2QyMWQ5MDUzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lN2ViYzJkMzk1M2I0ODBlYTAzM2ZhMGEyNmMzOGQ1YS5iaW5kUG9wdXAocG9wdXBfNWQ2ODUzMTA2MGIxNGU4Y2EyZGYwZmQ2OTliNGU4YmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiZTY3MTM2ZjE5NTQ0YTY5ZGQxZjNlODlkNDBjYmY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM1ODc2NzgsIC03My45ODIwNTAyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEwLjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDUyYmRhOWNmNDM0YzNkYjMzYmU5MWU1ODJkZmRjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlZGRlMDdiYzY4ODQ5M2Q4ZjYwZGE5Y2RkMzFkMGVkID0gJChgPGRpdiBpZD0iaHRtbF81ZWRkZTA3YmM2ODg0OTNkOGY2MGRhOWNkZDMxZDBlZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAyMCBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ1MDxicj4gbmV0IGRlcGFydHVyZXM6IC0yMTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjQ1MmJkYTljZjQzNGMzZGIzM2JlOTFlNTgyZGZkYzYuc2V0Q29udGVudChodG1sXzVlZGRlMDdiYzY4ODQ5M2Q4ZjYwZGE5Y2RkMzFkMGVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NiZTY3MTM2ZjE5NTQ0YTY5ZGQxZjNlODlkNDBjYmY2LmJpbmRQb3B1cChwb3B1cF8yNDUyYmRhOWNmNDM0YzNkYjMzYmU5MWU1ODJkZmRjNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Q0ZGM3YzY0MDdmNDkwOGE4Y2M0NDM1ZDAwMDA0ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDY5MTk1OSwgLTc0LjAwNDUxODg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM3YTgyOTAwMWZmNTQ1MWQ4ZWI2MmM1NTdmOWE5NTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM4ZmE0NmZjNmQ4NDM1YWJhNmYzNDI3NmI0ZWI0ZjUgPSAkKGA8ZGl2IGlkPSJodG1sXzljOGZhNDZmYzZkODQzNWFiYTZmMzQyNzZiNGViNGY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDIyIFN0ICYgMTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQwMTxicj4gbmV0IGRlcGFydHVyZXM6IC0yMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zN2E4MjkwMDFmZjU0NTFkOGViNjJjNTU3ZjlhOTUwMi5zZXRDb250ZW50KGh0bWxfOWM4ZmE0NmZjNmQ4NDM1YWJhNmYzNDI3NmI0ZWI0ZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Q0ZGM3YzY0MDdmNDkwOGE4Y2M0NDM1ZDAwMDA0ZTguYmluZFBvcHVwKHBvcHVwXzM3YTgyOTAwMWZmNTQ1MWQ4ZWI2MmM1NTdmOWE5NTAyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYTA5NDEyZDViMzM0ZTcwYWQ5YTllOTAzZTQ4ZWI2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0Mzk1NDExLCAtNzMuOTkxNDQ4NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDYuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2MWRjMjI0M2QwZjRkM2FiYWMwMTNmOTFhN2NjYzJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI3NzE5MmNmMjZlNDg0NzhkYjVlYWM5ZWZiMGM4YTQgPSAkKGA8ZGl2IGlkPSJodG1sX2YyNzcxOTJjZjI2ZTQ4NDc4ZGI1ZWFjOWVmYjBjOGE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDI1IFN0ICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ3Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjExPGJyPiBuZXQgZGVwYXJ0dXJlczogMTM0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2MWRjMjI0M2QwZjRkM2FiYWMwMTNmOTFhN2NjYzJiLnNldENvbnRlbnQoaHRtbF9mMjc3MTkyY2YyNmU0ODQ3OGRiNWVhYzllZmIwYzhhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iYTA5NDEyZDViMzM0ZTcwYWQ5YTllOTAzZTQ4ZWI2Yi5iaW5kUG9wdXAocG9wdXBfNTYxZGMyMjQzZDBmNGQzYWJhYzAxM2Y5MWE3Y2NjMmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjMTE2ZjExYTBiNDQ3YWY5MDNiOWRkNjA3MTdmZmJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgzMTI0ODksIC03My45Nzg5NTEzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNi40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2NGRmYTc3ZjFlODQ1YTZhMTYxMmZlNjZmYTk5MTQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjNhZTllZjBlMjEwNDA5MzhmODNkM2I5NTk0YzU0YzMgPSAkKGA8ZGl2IGlkPSJodG1sXzYzYWU5ZWYwZTIxMDQwOTM4ZjgzZDNiOTU5NGM1NGMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZWFuIFN0ICYgNCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjYwPGJyPiBuZXQgZGVwYXJ0dXJlczogMTI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2NGRmYTc3ZjFlODQ1YTZhMTYxMmZlNjZmYTk5MTQ0LnNldENvbnRlbnQoaHRtbF82M2FlOWVmMGUyMTA0MDkzOGY4M2QzYjk1OTRjNTRjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YzExNmYxMWEwYjQ0N2FmOTAzYjlkZDYwNzE3ZmZiYS5iaW5kUG9wdXAocG9wdXBfODY0ZGZhNzdmMWU4NDVhNmExNjEyZmU2NmZhOTkxNDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiYWYzMjQ3MjVkZDQ2OGQ5YzRiOGY2YmU4NWUwNzU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY1MjY1NCwgLTczLjk4MTkyMzM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MTVjZTkwZTNiZDY0MDk5YjQ3OGUzNDEyOGZhOGU4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5ZTU4ODNjNTM3NTQxMzU5MzdjNzY3NTA4NjcxZDU2ID0gJChgPGRpdiBpZD0iaHRtbF8yOWU1ODgzYzUzNzU0MTM1OTM3Yzc2NzUwODY3MWQ1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDU1IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzODMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQzMzxicj4gbmV0IGRlcGFydHVyZXM6IDUwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxNWNlOTBlM2JkNjQwOTliNDc4ZTM0MTI4ZmE4ZTgwLnNldENvbnRlbnQoaHRtbF8yOWU1ODgzYzUzNzU0MTM1OTM3Yzc2NzUwODY3MWQ1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YmFmMzI0NzI1ZGQ0NjhkOWM0YjhmNmJlODVlMDc1Ny5iaW5kUG9wdXAocG9wdXBfNTE1Y2U5MGUzYmQ2NDA5OWI0NzhlMzQxMjhmYThlODApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5Yjc5MjM4ODg5NzQyMWM4OTlhOGUxZTYwZDVjZTgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYzNDQwNTgsIC03My45ODI2ODEyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiMDQzYjMzZDkxYzQ1ZDJhY2RkZDIwZTg2Yjk2MjkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjVhZThiOTIxZDE1NGNmNDkxYmI3NzdlZWI5MTQ0MzIgPSAkKGA8ZGl2IGlkPSJodG1sXzI1YWU4YjkyMWQxNTRjZjQ5MWJiNzc3ZWViOTE0NDMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgNTMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIzMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjM2PGJyPiBuZXQgZGVwYXJ0dXJlczogMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjA0M2IzM2Q5MWM0NWQyYWNkZGQyMGU4NmI5NjI5MC5zZXRDb250ZW50KGh0bWxfMjVhZThiOTIxZDE1NGNmNDkxYmI3NzdlZWI5MTQ0MzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjliNzkyMzg4ODk3NDIxYzg5OWE4ZTFlNjBkNWNlODAuYmluZFBvcHVwKHBvcHVwX2JiMDQzYjMzZDkxYzQ1ZDJhY2RkZDIwZTg2Yjk2MjkwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZDc1MWE1YjJkZWU0Zjc0OWUwZjgyMTYxMjNiNDQwZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MzQ1MzM1LCAtNzQuMDAwMDQwMzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOGVlZDk1YmMwNGM0ZTUyYjJiMjg3ZWY2NzQxZGU4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczYTUyOTA2ODA0MDRkNWY5ZmRjN2FmZDAwODg1NjU3ID0gJChgPGRpdiBpZD0iaHRtbF83M2E1MjkwNjgwNDA0ZDVmOWZkYzdhZmQwMDg4NTY1NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyMCBTdCAmIDggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMyMzxicj4gbmV0IGRlcGFydHVyZXM6IC00OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOGVlZDk1YmMwNGM0ZTUyYjJiMjg3ZWY2NzQxZGU4Zi5zZXRDb250ZW50KGh0bWxfNzNhNTI5MDY4MDQwNGQ1ZjlmZGM3YWZkMDA4ODU2NTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2Q3NTFhNWIyZGVlNGY3NDllMGY4MjE2MTIzYjQ0MGUuYmluZFBvcHVwKHBvcHVwX2M4ZWVkOTViYzA0YzRlNTJiMmIyODdlZjY3NDFkZThmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjZiMTlkNTgzMzQ0OWE5OGZlYWUzMWMzZTlhMTRlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjg2ODQ0LCAtNzMuOTU2OTgxMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmRhODFmZTIzOTcwNDhiY2FkODIyNjFhMTllMjhhNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MWNmOGI0NmM3Yjg0ZWM1OWU3ZmU3N2E1MWI1OGYxMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzFjZjhiNDZjN2I4NGVjNTllN2ZlNzdhNTFiNThmMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYW5kIFN0ICYgSGF2ZW1leWVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDkxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTc5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkYTgxZmUyMzk3MDQ4YmNhZDgyMjYxYTE5ZTI4YTYzLnNldENvbnRlbnQoaHRtbF83MWNmOGI0NmM3Yjg0ZWM1OWU3ZmU3N2E1MWI1OGYxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YjZiMTlkNTgzMzQ0OWE5OGZlYWUzMWMzZTlhMTRlZC5iaW5kUG9wdXAocG9wdXBfZmRhODFmZTIzOTcwNDhiY2FkODIyNjFhMTllMjhhNjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3NjIwYjFhMGM3ODRkYmI5OGI4OWQ5MGIyYWY2YjM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ1NzEyMTAwMDAwMDA2LCAtNzMuOTgxOTQ4MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1ZjFmOGIxODQ1ODRjOWZiMTVjOTE3NjAyOTJhNDdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTc4MzlkNmZlMDRkNGIxN2FkMTI3NzIwZTM2YWM1ZjcgPSAkKGA8ZGl2IGlkPSJodG1sXzE3ODM5ZDZmZTA0ZDRiMTdhZDEyNzcyMGUzNmFjNWY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDMyIFN0ICYgUGFyayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ2Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTI2PGJyPiBuZXQgZGVwYXJ0dXJlczogNjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzVmMWY4YjE4NDU4NGM5ZmIxNWM5MTc2MDI5MmE0N2Yuc2V0Q29udGVudChodG1sXzE3ODM5ZDZmZTA0ZDRiMTdhZDEyNzcyMGUzNmFjNWY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU3NjIwYjFhMGM3ODRkYmI5OGI4OWQ5MGIyYWY2YjM5LmJpbmRQb3B1cChwb3B1cF8zNWYxZjhiMTg0NTg0YzlmYjE1YzkxNzYwMjkyYTQ3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjk5ODM2M2U0YjZhNGNiN2FjMmJiMDBjNzg0MTkzZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjExMDA2MywgLTczLjk5MTkyNTQwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmOTdkZjJiMjk0YjRmMWRhYzczNWVhNDg1YjU5ZmQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWJhOTc0YjY2NDJhNDE0NWFlODM1YzI3NmYwOTAzNmYgPSAkKGA8ZGl2IGlkPSJodG1sX2ViYTk3NGI2NjQyYTQxNDVhZTgzNWMyNzZmMDkwMzZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZpbmd0b24gU3QgJiBDaHJ5c3RpZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzM3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTE1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmOTdkZjJiMjk0YjRmMWRhYzczNWVhNDg1YjU5ZmQ2LnNldENvbnRlbnQoaHRtbF9lYmE5NzRiNjY0MmE0MTQ1YWU4MzVjMjc2ZjA5MDM2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82OTk4MzYzZTRiNmE0Y2I3YWMyYmIwMGM3ODQxOTNmMC5iaW5kUG9wdXAocG9wdXBfYmY5N2RmMmIyOTRiNGYxZGFjNzM1ZWE0ODViNTlmZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVkM2FhZTI1ZjNlMDQyMTVhMTliZTNkMGMxZjYzODc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ1MTY3NywgLTczLjk4NjgzMDc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTUwOTJlMTMyMDU0YTJhOGYxMzc0NzkwNjgyZTdiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiODIzYWJkYTlmOTQ4NDBiOTBlNGJlYWE2NTdlZmRjID0gJChgPGRpdiBpZD0iaHRtbF84YjgyM2FiZGE5Zjk0ODQwYjkwZTRiZWFhNjU3ZWZkYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NSBBdmUgJiBFIDI5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQxMjxicj4gbmV0IGRlcGFydHVyZXM6IDY2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5NTA5MmUxMzIwNTRhMmE4ZjEzNzQ3OTA2ODJlN2IxLnNldENvbnRlbnQoaHRtbF84YjgyM2FiZGE5Zjk0ODQwYjkwZTRiZWFhNjU3ZWZkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZDNhYWUyNWYzZTA0MjE1YTE5YmUzZDBjMWY2Mzg3OC5iaW5kUG9wdXAocG9wdXBfZTk1MDkyZTEzMjA1NGEyYThmMTM3NDc5MDY4MmU3YjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlNTZjZjAxMmJkMzRjMDY5NDcyZDZhZjI5MjMwZDViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM1MjQyNzYsIC03My45ODc1ODU2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZmEzYThkODllY2I0MTRiODUwMTliYmNjMmNhYzEyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkZTRkMjhjYmE0NzRkOWI4ZTc0NWI3Y2NmYWY4ZTBiID0gJChgPGRpdiBpZD0iaHRtbF8xZGU0ZDI4Y2JhNDc0ZDliOGU3NDViN2NjZmFmOGUwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxNiBTdCAmIElydmluZyBQbDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDYxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGZhM2E4ZDg5ZWNiNDE0Yjg1MDE5YmJjYzJjYWMxMjUuc2V0Q29udGVudChodG1sXzFkZTRkMjhjYmE0NzRkOWI4ZTc0NWI3Y2NmYWY4ZTBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlNTZjZjAxMmJkMzRjMDY5NDcyZDZhZjI5MjMwZDViLmJpbmRQb3B1cChwb3B1cF9kZmEzYThkODllY2I0MTRiODUwMTliYmNjMmNhYzEyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTM0YzkxYjBmNjE0NDkxODhhZGNiNjcyNWI0MGRhMjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDM5NDMxNCwgLTczLjk3OTY2MDY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyOTExNDFhZjA1ZjRhNmFiNTMzMjlkYmJlYmUzOWM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWM0OWRhNzEwMTRhNDY1MzgyYTcyMjYzMmVjY2U4NGQgPSAkKGA8ZGl2IGlkPSJodG1sX2FjNDlkYTcxMDE0YTQ2NTM4MmE3MjI2MzJlY2NlODRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDMxIFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDYwMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDYwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjkxMTQxYWYwNWY0YTZhYjUzMzI5ZGJiZWJlMzljNS5zZXRDb250ZW50KGh0bWxfYWM0OWRhNzEwMTRhNDY1MzgyYTcyMjYzMmVjY2U4NGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTM0YzkxYjBmNjE0NDkxODhhZGNiNjcyNWI0MGRhMjYuYmluZFBvcHVwKHBvcHVwXzUyOTExNDFhZjA1ZjRhNmFiNTMzMjlkYmJlYmUzOWM1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODgzOWU5MzIxOGU0MWUzOTkxZjU3MjViMGZlNmUwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjQwNTQ4LCAtNzMuOTkwMDI2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjE1YWM2MGQwOTVlNDM0MGJhODBlNWU3OTJjY2IzZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MTYzNDY3OWY0OWQ0OTY3OWJhNGFkM2ZhZGNhOWZmYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjE2MzQ2NzlmNDlkNDk2NzliYTRhZDNmYWRjYTlmZmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNDEgU3QgJiA4IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTE0MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE1MDxicj4gbmV0IGRlcGFydHVyZXM6IDEwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYxNWFjNjBkMDk1ZTQzNDBiYTgwZTVlNzkyY2NiM2ZhLnNldENvbnRlbnQoaHRtbF82MTYzNDY3OWY0OWQ0OTY3OWJhNGFkM2ZhZGNhOWZmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zODgzOWU5MzIxOGU0MWUzOTkxZjU3MjViMGZlNmUwNy5iaW5kUG9wdXAocG9wdXBfNjE1YWM2MGQwOTVlNDM0MGJhODBlNWU3OTJjY2IzZmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkODkxMmFkZjczMjRkZDQ5Mjc1ZWIzOThlYjNiMjM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYwMzAwOTYsIC03My45OTg4NDIyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTkzZDZjZDkwMWY0YjE4YTM2NDZhZDllZGNhMWVjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5MGM4ZjdmOGQ5MjQ5OWFiNTNhOWVkZjY3ZDFjMTk3ID0gJChgPGRpdiBpZD0iaHRtbF9jOTBjOGY3ZjhkOTI0OTlhYjUzYTllZGY2N2QxYzE5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MTEgQXZlICYgVyA0MSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDkxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Mzg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTU5M2Q2Y2Q5MDFmNGIxOGEzNjQ2YWQ5ZWRjYTFlYzIuc2V0Q29udGVudChodG1sX2M5MGM4ZjdmOGQ5MjQ5OWFiNTNhOWVkZjY3ZDFjMTk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkODkxMmFkZjczMjRkZDQ5Mjc1ZWIzOThlYjNiMjM5LmJpbmRQb3B1cChwb3B1cF9hNTkzZDZjZDkwMWY0YjE4YTM2NDZhZDllZGNhMWVjMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2FlMGMzOGM4ZjkzNDEyNWE2YWFmMTFlM2QxZmMxZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjAxOTI1MiwgLTczLjk5MTI1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWQxODFhODRiZTI0OTQ2YjU0N2NlMWRjOGJkZmI2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxOWIzNGUwN2RkYTRmMGZiYTczZjNlOGIxMDEwNGFmID0gJChgPGRpdiBpZD0iaHRtbF9lMTliMzRlMDdkZGE0ZjBmYmE3M2YzZThiMTAxMDRhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+OSBBdmUgJiBXIDQ1IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1NTQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUyMjxicj4gbmV0IGRlcGFydHVyZXM6IC0zMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZWQxODFhODRiZTI0OTQ2YjU0N2NlMWRjOGJkZmI2ZC5zZXRDb250ZW50KGh0bWxfZTE5YjM0ZTA3ZGRhNGYwZmJhNzNmM2U4YjEwMTA0YWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2FlMGMzOGM4ZjkzNDEyNWE2YWFmMTFlM2QxZmMxZWIuYmluZFBvcHVwKHBvcHVwXzdlZDE4MWE4NGJlMjQ5NDZiNTQ3Y2UxZGM4YmRmYjZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ODllZjM5MWFmYzI0MjIzOWY5MTFiMmEyODY3NGJiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NjY5NjcxLCAtNzMuOTkwNjE3MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYzRlMjRjNzk2YjI0OWY5YjJlM2IxYzViOTVlNTBkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5MGZkZWJjN2Y3ZDQ3NDc4MjY5MmQyNWNiYTNhNTc4ID0gJChgPGRpdiBpZD0iaHRtbF9hOTBmZGViYzdmN2Q0NzQ3ODI2OTJkMjVjYmEzYTU3OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA1MyBTdCAmIDEwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzg0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyOTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2M0ZTI0Yzc5NmIyNDlmOWIyZTNiMWM1Yjk1ZTUwZGYuc2V0Q29udGVudChodG1sX2E5MGZkZWJjN2Y3ZDQ3NDc4MjY5MmQyNWNiYTNhNTc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY4OWVmMzkxYWZjMjQyMjM5ZjkxMWIyYTI4Njc0YmJhLmJpbmRQb3B1cChwb3B1cF9jYzRlMjRjNzk2YjI0OWY5YjJlM2IxYzViOTVlNTBkZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjk2ODE0NzAwOWVhNDYxNDkyYzYzM2IwMzZlNWNjZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTI2MDQ4NiwgLTczLjk2MjY0NDAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2ExODI5MWNlZGVlNDAwZmIxOWYyYWY0NjRmY2RmZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDcxNGU1NDRlNWY0ZDFiYmRkMmI4YTM2NjQxNWYwNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDQ3MTRlNTQ0ZTVmNGQxYmJkZDJiOGEzNjY0MTVmMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlMgMyBTdCAmIEJlZGZvcmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExMTxicj4gbmV0IGRlcGFydHVyZXM6IC04OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTE4MjkxY2VkZWU0MDBmYjE5ZjJhZjQ2NGZjZGZkNC5zZXRDb250ZW50KGh0bWxfMDQ3MTRlNTQ0ZTVmNGQxYmJkZDJiOGEzNjY0MTVmMDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjk2ODE0NzAwOWVhNDYxNDkyYzYzM2IwMzZlNWNjZDcuYmluZFBvcHVwKHBvcHVwXzNhMTgyOTFjZWRlZTQwMGZiMTlmMmFmNDY0ZmNkZmQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYWMxYjg5NTczZGY0YzY4YWFkMTA4MmM5ZWY1ZjhhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTM1NTQyLCAtNzMuOTk5MzE3ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjI5NDAwNDc3ZTVmNGUwZGIwZjYxNWMyY2I1M2YzODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZWUxNzdiNTA3OTM0ODgxOGE3NTk0N2E5YzUxOGU0NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMGVlMTc3YjUwNzkzNDg4MThhNzU5NDdhOWM1MThlNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTUgU3QgJiA3IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTkxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1MzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjI5NDAwNDc3ZTVmNGUwZGIwZjYxNWMyY2I1M2YzODYuc2V0Q29udGVudChodG1sXzBlZTE3N2I1MDc5MzQ4ODE4YTc1OTQ3YTljNTE4ZTQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZhYzFiODk1NzNkZjRjNjhhYWQxMDgyYzllZjVmOGFkLmJpbmRQb3B1cChwb3B1cF9iMjk0MDA0NzdlNWY0ZTBkYjBmNjE1YzJjYjUzZjM4NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDRjZjUyOWQ1YTE4NDk0ZDk0ZWQxMDQzZThmNThkMWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzIyMzI3MiwgLTczLjk4ODg5OTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWFkMWM4NGRmNzZlNGRmNTgwMWU4NTlmZDViOTAwYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDlhMWQ0NGQxNWM0NjhlOWYyMDZjOTU5MDgzMWEwYiA9ICQoYDxkaXYgaWQ9Imh0bWxfODQ5YTFkNDRkMTVjNDY4ZTlmMjA2Yzk1OTA4MzFhMGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTIgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzMzLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1OTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTQyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhZDFjODRkZjc2ZTRkZjU4MDFlODU5ZmQ1YjkwMGI1LnNldENvbnRlbnQoaHRtbF84NDlhMWQ0NGQxNWM0NjhlOWYyMDZjOTU5MDgzMWEwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNGNmNTI5ZDVhMTg0OTRkOTRlZDEwNDNlOGY1OGQxZC5iaW5kUG9wdXAocG9wdXBfNWFkMWM4NGRmNzZlNGRmNTgwMWU4NTlmZDViOTAwYjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4NmY0ZTVhNDc1ZjQxY2NhODllZmQxYjRmODJlYjk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1MDAyNTQsIC03My45ODAxNDQzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzOGU5ZDMwYzMwNTQ3MTA5MGZlZTZkNzhhZDkzZTY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzNhNjg0Njc5OWU5NGY0NWJlODZiZTUwMjc0MjE4YTMgPSAkKGA8ZGl2IGlkPSJodG1sXzMzYTY4NDY3OTllOTRmNDViZTg2YmU1MDI3NDIxOGEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQ0IFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI3MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzM1PGJyPiBuZXQgZGVwYXJ0dXJlczogNjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM4ZTlkMzBjMzA1NDcxMDkwZmVlNmQ3OGFkOTNlNjkuc2V0Q29udGVudChodG1sXzMzYTY4NDY3OTllOTRmNDViZTg2YmU1MDI3NDIxOGEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4NmY0ZTVhNDc1ZjQxY2NhODllZmQxYjRmODJlYjk2LmJpbmRQb3B1cChwb3B1cF85MzhlOWQzMGMzMDU0NzEwOTBmZWU2ZDc4YWQ5M2U2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzUwN2VjMGEyMjhlNGY4ODhhZjJjYzczZjdkOGJjOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTAzODAwOSwgLTczLjk4MzM4OTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NTU0MTJmNTQ3NmU0MWNkOGYxZjgxZTkwZjdkMThmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwNjQxNTBhOTVjNDQ3MmE4YjczNzYzYTY1YmViMTMwID0gJChgPGRpdiBpZD0iaHRtbF82MDY0MTUwYTk1YzQ0NzJhOGI3Mzc2M2E2NWJlYjEzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAzNyBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNDkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMxMTxicj4gbmV0IGRlcGFydHVyZXM6IDYyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1NTQxMmY1NDc2ZTQxY2Q4ZjFmODFlOTBmN2QxOGZmLnNldENvbnRlbnQoaHRtbF82MDY0MTUwYTk1YzQ0NzJhOGI3Mzc2M2E2NWJlYjEzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNTA3ZWMwYTIyOGU0Zjg4OGFmMmNjNzNmN2Q4YmM4ZC5iaW5kUG9wdXAocG9wdXBfNDU1NDEyZjU0NzZlNDFjZDhmMWY4MWU5MGY3ZDE4ZmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkZjcwNjcwYjk4MzRlNTk5N2YxMTllMDY2ODU4ZDZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ2MjAwOSwgLTczLjk4ODU1NzIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWZmY2FjYzg4MWI3NDk2MWFjYjNiMjRjZTRkNGQxNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTI2Y2RmODIwMTc0NTIzOWUzN2Y2NzZkMjY3NGQ0YSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmEyNmNkZjgyMDE3NDUyMzllMzdmNjc2ZDI2NzRkNGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2Fkd2F5ICYgVyAyOSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDgzLjA8YnI+IHRvdGFsIGFycml2YWxzOiA3NTM8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNzAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWZmY2FjYzg4MWI3NDk2MWFjYjNiMjRjZTRkNGQxNDIuc2V0Q29udGVudChodG1sX2ZhMjZjZGY4MjAxNzQ1MjM5ZTM3ZjY3NmQyNjc0ZDRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkZjcwNjcwYjk4MzRlNTk5N2YxMTllMDY2ODU4ZDZhLmJpbmRQb3B1cChwb3B1cF81ZmZjYWNjODgxYjc0OTYxYWNiM2IyNGNlNGQ0ZDE0MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjhjMTg0MWZlNWVhNDkyODlkMjJhMWNjMDg3Y2UzZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzMxNDI1OSwgLTczLjk3NTczODgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOC4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTgyMGNlOTVmNWIzNDE1MzkxMTY4MTM5ZjMyZmJhMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MzI0ZGNkYWE3M2Q0ZWVmYTVmOGZlNWZmMWUyMzczYyA9ICQoYDxkaXYgaWQ9Imh0bWxfODMyNGRjZGFhNzNkNGVlZmE1ZjhmZTVmZjFlMjM3M2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMjAgU3QgJiBGRFIgRHJpdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM4MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjIxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE2MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODIwY2U5NWY1YjM0MTUzOTExNjgxMzlmMzJmYmEzMy5zZXRDb250ZW50KGh0bWxfODMyNGRjZGFhNzNkNGVlZmE1ZjhmZTVmZjFlMjM3M2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjhjMTg0MWZlNWVhNDkyODlkMjJhMWNjMDg3Y2UzZWEuYmluZFBvcHVwKHBvcHVwXzU4MjBjZTk1ZjViMzQxNTM5MTE2ODEzOWYzMmZiYTMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NGQ3OTc1OTQ1NDU0OTQ1YWM3YzhkNjQ1Y2MyMzVlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjQ1ODI0LCAtNzMuOTkzNzIyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NDVhMzgyNjEzNDQ0NzJhOGY0NmE4NjRhMTE1M2Q3YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkY2JmOGNjZjM0ZTQ4ZWM4YmE1Yzg4Mzc0OWQyZmUwID0gJChgPGRpdiBpZD0iaHRtbF8yZGNiZjhjY2YzNGU0OGVjOGJhNWM4ODM3NDlkMmZlMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAzOSBTdCAmIDkgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ3Nzxicj4gbmV0IGRlcGFydHVyZXM6IC01OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NDVhMzgyNjEzNDQ0NzJhOGY0NmE4NjRhMTE1M2Q3Yy5zZXRDb250ZW50KGh0bWxfMmRjYmY4Y2NmMzRlNDhlYzhiYTVjODgzNzQ5ZDJmZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODRkNzk3NTk0NTQ1NDk0NWFjN2M4ZDY0NWNjMjM1ZTUuYmluZFBvcHVwKHBvcHVwXzU0NWEzODI2MTM0NDQ3MmE4ZjQ2YTg2NGExMTUzZDdjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMWY0NmY3MWU3M2M0YTQzOTFlNmY3NDE4NjU0N2JhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MTU1MSwgLTczLjk5MzkzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTEuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3ODNhMWQ1ZTNkMDRmNjRhMWQzN2E4YzliZTM1MTFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI3MjdjN2VmMWQ2NDZmMGFjNTM5NWE5ZWFhYTdiMjcgPSAkKGA8ZGl2IGlkPSJodG1sXzYyNzI3YzdlZjFkNjQ2ZjBhYzUzOTVhOWVhYWE3YjI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij44IEF2ZSAmIFcgMzMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgyNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA1NTxicj4gbmV0IGRlcGFydHVyZXM6IDIyOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNzgzYTFkNWUzZDA0ZjY0YTFkMzdhOGM5YmUzNTExZS5zZXRDb250ZW50KGh0bWxfNjI3MjdjN2VmMWQ2NDZmMGFjNTM5NWE5ZWFhYTdiMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjFmNDZmNzFlNzNjNGE0MzkxZTZmNzQxODY1NDdiYTIuYmluZFBvcHVwKHBvcHVwX2Y3ODNhMWQ1ZTNkMDRmNjRhMWQzN2E4YzliZTM1MTFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84N2U2ZWUwNmM3ZGQ0NzU0ODIxMWUwMjQ2ZDM0Y2M2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MDk2Mzc0LCAtNzMuOTg2MDIyMTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZWY2OTRmOWZiNjU0NjY5YTViMDQxNTVlZDYyMDg3NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmOGQxNTA3YzRhYTRkMGNiZDc2ZWZhNWQ5Mzk4MTdhID0gJChgPGRpdiBpZD0iaHRtbF80ZjhkMTUwN2M0YWE0ZDBjYmQ3NmVmYTVkOTM5ODE3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAyNCBTdCAmIFBhcmsgQXZlIFM8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM0OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDE4PGJyPiBuZXQgZGVwYXJ0dXJlczogNjkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmVmNjk0ZjlmYjY1NDY2OWE1YjA0MTU1ZWQ2MjA4NzQuc2V0Q29udGVudChodG1sXzRmOGQxNTA3YzRhYTRkMGNiZDc2ZWZhNWQ5Mzk4MTdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg3ZTZlZTA2YzdkZDQ3NTQ4MjExZTAyNDZkMzRjYzY4LmJpbmRQb3B1cChwb3B1cF9iZWY2OTRmOWZiNjU0NjY5YTViMDQxNTVlZDYyMDg3NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzhjNGE0NWY4ZjRjNGNiYmI4ZGI0OTNlZGQ3MDcxZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTAxOTk5NSwgLTczLjk5MDkzMDg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTFhZjdmMTFkMjhiNDNlYjgyMmJkYWJkMGE3ZDJhZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTkzZGY0OGJjNWY0YTYxYTg1YzNiNGE5YjI5ODhkYiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTU5M2RmNDhiYzVmNGE2MWE4NWMzYjRhOWIyOTg4ZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMzMgU3QgJiA3IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjkzLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2OTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MWFmN2YxMWQyOGI0M2ViODIyYmRhYmQwYTdkMmFlYi5zZXRDb250ZW50KGh0bWxfZTU5M2RmNDhiYzVmNGE2MWE4NWMzYjRhOWIyOTg4ZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzhjNGE0NWY4ZjRjNGNiYmI4ZGI0OTNlZGQ3MDcxZjAuYmluZFBvcHVwKHBvcHVwXzkxYWY3ZjExZDI4YjQzZWI4MjJiZGFiZDBhN2QyYWViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZGViNzg1YzJhODU0ZWMzOTg3NzlmMTM5NTgwNzEyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NjgwMDEsIC03My45ODI5MTE1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y4YzFiY2YyNGNmODQwMWZiZGVjZjRlNzk4MTZjNGI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzZiY2Y2NjUxMTkwNGI5Mjk2OTljNzk4YjhlYmRlNWQgPSAkKGA8ZGl2IGlkPSJodG1sX2M2YmNmNjY1MTE5MDRiOTI5Njk5Yzc5OGI4ZWJkZTVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQ1IFN0ICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI3My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjk0PGJyPiBuZXQgZGVwYXJ0dXJlczogMjEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjhjMWJjZjI0Y2Y4NDAxZmJkZWNmNGU3OTgxNmM0YjUuc2V0Q29udGVudChodG1sX2M2YmNmNjY1MTE5MDRiOTI5Njk5Yzc5OGI4ZWJkZTVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZkZWI3ODVjMmE4NTRlYzM5ODc3OWYxMzk1ODA3MTI0LmJpbmRQb3B1cChwb3B1cF9mOGMxYmNmMjRjZjg0MDFmYmRlY2Y0ZTc5ODE2YzRiNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTBhN2RiZGU3ZWNiNDMwMzhhZDA4YjhmYzI3MzhkZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDczNDgyNSwgLTczLjk5NzIzNTUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTg4YzJjYTg3OTk4NDgxMzhmNTYzMTAxNzM2OTBkNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZGM4Yzk2ZjlmZDE0YjU1YjJiNGMzZTczNWQ3MTU1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNmRjOGM5NmY5ZmQxNGI1NWIyYjRjM2U3MzVkNzE1NWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMjYgU3QgJiA4IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjExLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Mzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTg4YzJjYTg3OTk4NDgxMzhmNTYzMTAxNzM2OTBkNjYuc2V0Q29udGVudChodG1sXzZkYzhjOTZmOWZkMTRiNTViMmI0YzNlNzM1ZDcxNTVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwYTdkYmRlN2VjYjQzMDM4YWQwOGI4ZmMyNzM4ZGYzLmJpbmRQb3B1cChwb3B1cF85ODhjMmNhODc5OTg0ODEzOGY1NjMxMDE3MzY5MGQ2NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmU2NzFjMWFiZTE3NDdkMGJkODZiYmJjYmJmZDI1NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjI2OTg4MiwgLTczLjk5MzAxMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1MGY0MThmNTMzNjQyZmFhN2FiYjdjN2M5ZTcyMDNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzgxYzY4MjFjMWE3NGJmMTkzZGNiYWMyY2YxZDMwOTggPSAkKGA8ZGl2IGlkPSJodG1sX2M4MWM2ODIxYzFhNzRiZjE5M2RjYmFjMmNmMWQzMDk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDQ3IFN0ICYgMTAgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMzMzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjUwZjQxOGY1MzM2NDJmYWE3YWJiN2M3YzllNzIwM2Muc2V0Q29udGVudChodG1sX2M4MWM2ODIxYzFhNzRiZjE5M2RjYmFjMmNmMWQzMDk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlNjcxYzFhYmUxNzQ3ZDBiZDg2YmJiY2JiZmQyNTUxLmJpbmRQb3B1cChwb3B1cF9iNTBmNDE4ZjUzMzY0MmZhYTdhYmI3YzdjOWU3MjAzYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODZiNTZmYjk2YzhiNGI5N2E0MjQzNGVhNDVlOGEzYzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzcyNjE4NiwgLTczLjk5MjM4OTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMi43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIxNWQ3YTY3MWRlMjQ4OGZiM2I1NzE5YzcwODNjMmY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGU5NTMyNWUwMmQyNDAyMTljZmU1ZTFlN2Y3OWI5ODUgPSAkKGA8ZGl2IGlkPSJodG1sX2RlOTUzMjVlMDJkMjQwMjE5Y2ZlNWUxZTdmNzliOTg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDE2IFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU2Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogODE3PGJyPiBuZXQgZGVwYXJ0dXJlczogMjU1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxNWQ3YTY3MWRlMjQ4OGZiM2I1NzE5YzcwODNjMmY1LnNldENvbnRlbnQoaHRtbF9kZTk1MzI1ZTAyZDI0MDIxOWNmZTVlMWU3Zjc5Yjk4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NmI1NmZiOTZjOGI0Yjk3YTQyNDM0ZWE0NWU4YTNjMC5iaW5kUG9wdXAocG9wdXBfMjE1ZDdhNjcxZGUyNDg4ZmIzYjU3MTljNzA4M2MyZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiZDQ3YmQ5NDc5MDQxYzliNTM4NzExOTc0ZGI5NGRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM3MDQ5ODQsIC03My45OTAwOTI5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTYuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NjFkY2RkYmY3YWM0NDZkOWJmZTcwNzc2ZGQxYjg5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwMGIyNWRhODU5YjRhZTJiMDAyMjJkNmM2ZmFiMTBkID0gJChgPGRpdiBpZD0iaHRtbF9mMDBiMjVkYTg1OWI0YWUyYjAwMjIyZDZjNmZhYjEwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxNyBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5NzkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzMTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMzMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjYxZGNkZGJmN2FjNDQ2ZDliZmU3MDc3NmRkMWI4OWMuc2V0Q29udGVudChodG1sX2YwMGIyNWRhODU5YjRhZTJiMDAyMjJkNmM2ZmFiMTBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiZDQ3YmQ5NDc5MDQxYzliNTM4NzExOTc0ZGI5NGRhLmJpbmRQb3B1cChwb3B1cF82NjFkY2RkYmY3YWM0NDZkOWJmZTcwNzc2ZGQxYjg5YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2E4OGMxNWU1MDIyNGJkN2E2ODM4MzI1MDNhZmY3MDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDg1NDg2MiwgLTczLjk4ODA4NDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxNy42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWIwNTZjYThhNDE2NDZhZWI4NjI2NzZkYjFiODBhNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MWNjMTU1Yjg5NTI0ZWUyOTc2OTU3OTkzNDJjYzgxNCA9ICQoYDxkaXYgaWQ9Imh0bWxfODFjYzE1NWI4OTUyNGVlMjk3Njk1Nzk5MzQyY2M4MTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJyb2Fkd2F5ICYgVyAzMiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTk0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA5NDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAzNTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWIwNTZjYThhNDE2NDZhZWI4NjI2NzZkYjFiODBhNTguc2V0Q29udGVudChodG1sXzgxY2MxNTViODk1MjRlZTI5NzY5NTc5OTM0MmNjODE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhODhjMTVlNTAyMjRiZDdhNjgzODMyNTAzYWZmNzA0LmJpbmRQb3B1cChwb3B1cF8xYjA1NmNhOGE0MTY0NmFlYjg2MjY3NmRiMWI4MGE1OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjAwNjEyNzFjZmEyNDE1ZTlmMjFiNTNhYzMyMmU5NjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjkxNTUwNSwgLTczLjk4MTkxODQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA5LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZjY4YjhhM2IzZDc0N2RlOTJjODYxNGM3MDVjZTJjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZlMTRjYWViNWZmZDQxMzI4ZjNjODA1N2EwYTY2NjhhID0gJChgPGRpdiBpZD0iaHRtbF82ZTE0Y2FlYjVmZmQ0MTMyOGYzYzgwNTdhMGE2NjY4YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBXIDYwIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0ODguMDxicj4gdG90YWwgYXJyaXZhbHM6IDY2ODxicj4gbmV0IGRlcGFydHVyZXM6IDE4MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjY4YjhhM2IzZDc0N2RlOTJjODYxNGM3MDVjZTJjMS5zZXRDb250ZW50KGh0bWxfNmUxNGNhZWI1ZmZkNDEzMjhmM2M4MDU3YTBhNjY2OGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjAwNjEyNzFjZmEyNDE1ZTlmMjFiNTNhYzMyMmU5NjAuYmluZFBvcHVwKHBvcHVwXzJmNjhiOGEzYjNkNzQ3ZGU5MmM4NjE0YzcwNWNlMmMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NjY2MWIxNDYzOWI0ZDQyYjgxMzYwZTJkNmY1OGY2OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MjI4ODI2LCAtNzMuOTgzMzYxODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1MTUzNGE0NTVkMjRmN2M4MjY4YmE3ZDY4YTMzMTA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzY4MzY3OTMwYzQ0NGZiODgwZjZiNDc0NGZmY2Y5ODEgPSAkKGA8ZGl2IGlkPSJodG1sXzc2ODM2NzkzMGM0NDRmYjg4MGY2YjQ3NDRmZmNmOTgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgNTEgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjUzPGJyPiBuZXQgZGVwYXJ0dXJlczogNTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjUxNTM0YTQ1NWQyNGY3YzgyNjhiYTdkNjhhMzMxMDcuc2V0Q29udGVudChodG1sXzc2ODM2NzkzMGM0NDRmYjg4MGY2YjQ3NDRmZmNmOTgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc2NjYxYjE0NjM5YjRkNDJiODEzNjBlMmQ2ZjU4ZjY4LmJpbmRQb3B1cChwb3B1cF9iNTE1MzRhNDU1ZDI0ZjdjODI2OGJhN2Q2OGEzMzEwNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2UxNmZlZDAwM2U3NDQ4YWEzZmI3NmUwY2JkYTljOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDQyMTksIC03My45NzEyMTIxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxYTgwNmY2MzI5NjQwOWJiMjA5MjE4ZmQ1ZmQ0MzIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmZkZGJlMDdhYzI3NGYxYzg2YWNhNGNlNmRlOTc3NzMgPSAkKGA8ZGl2IGlkPSJodG1sXzJmZGRiZTA3YWMyNzRmMWM4NmFjYTRjZTZkZTk3NzczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GRFIgRHJpdmUgJiBFIDM1IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MDEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM0Mzxicj4gbmV0IGRlcGFydHVyZXM6IC01OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMWE4MDZmNjMyOTY0MDliYjIwOTIxOGZkNWZkNDMyMy5zZXRDb250ZW50KGh0bWxfMmZkZGJlMDdhYzI3NGYxYzg2YWNhNGNlNmRlOTc3NzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2UxNmZlZDAwM2U3NDQ4YWEzZmI3NmUwY2JkYTljOGQuYmluZFBvcHVwKHBvcHVwX2IxYTgwNmY2MzI5NjQwOWJiMjA5MjE4ZmQ1ZmQ0MzIzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTExZTczMDZlYjA0NTIzOTRmYjFiMTAzZWE2ODcwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDIxNSwgLTczLjk4MTM0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlN2NkYTE1MWY1ZjRlMzlhODUzNDU3OWRiOTYyYjcxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTYzNDhiMGEyYTI1NDYzNzk5MmU5YWRlZjZlY2UwMTQgPSAkKGA8ZGl2IGlkPSJodG1sX2E2MzQ4YjBhMmEyNTQ2Mzc5OTJlOWFkZWY2ZWNlMDE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IZW5yeSBTdCAmIEdyYW5kIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE5Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0xNTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWU3Y2RhMTUxZjVmNGUzOWE4NTM0NTc5ZGI5NjJiNzEuc2V0Q29udGVudChodG1sX2E2MzQ4YjBhMmEyNTQ2Mzc5OTJlOWFkZWY2ZWNlMDE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlMTFlNzMwNmViMDQ1MjM5NGZiMWIxMDNlYTY4NzA2LmJpbmRQb3B1cChwb3B1cF8xZTdjZGExNTFmNWY0ZTM5YTg1MzQ1NzlkYjk2MmI3MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDcxYzQyN2M5NWI5NGQ2Nzg2ZDI1ODRjNDIyMDg3NmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MzgyNzQyOCwgLTczLjk4NzUxOTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmJkYjU0OWZlNDZkNGQxZGJlNmRjY2IxYzhjOGI2YzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNGVkYjA3MWU4Y2E0MWExYTFhZTIzYzFhODM0NzZiYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDRlZGIwNzFlOGNhNDFhMWExYWUyM2MxYTgzNDc2YmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMjAgU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDU0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0ODU8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYmRiNTQ5ZmU0NmQ0ZDFkYmU2ZGNjYjFjOGM4YjZjMi5zZXRDb250ZW50KGh0bWxfZDRlZGIwNzFlOGNhNDFhMWExYWUyM2MxYTgzNDc2YmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDcxYzQyN2M5NWI5NGQ2Nzg2ZDI1ODRjNDIyMDg3NmEuYmluZFBvcHVwKHBvcHVwX2ZiZGI1NDlmZTQ2ZDRkMWRiZTZkY2NiMWM4YzhiNmMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MzFlOTBlN2IyYWU0YjIxODZhMmFiODY4OWZkOTQ4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMjIxODUzLCAtNzMuOTgxNjU1NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xMC44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWRhZjY4YzE4Njg4NGY3MWI5NzVjMjgzNzM0ODg2NDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80N2NiNGRlZmE1YWQ0NjRkOWU2N2VmMmRlYWExNDRiMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDdjYjRkZWZhNWFkNDY0ZDllNjdlZjJkZWFhMTQ0YjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEgQXZlICYgRSAxNiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDQzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjE2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkYWY2OGMxODY4ODRmNzFiOTc1YzI4MzczNDg4NjQ5LnNldENvbnRlbnQoaHRtbF80N2NiNGRlZmE1YWQ0NjRkOWU2N2VmMmRlYWExNDRiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MzFlOTBlN2IyYWU0YjIxODZhMmFiODY4OWZkOTQ4Mi5iaW5kUG9wdXAocG9wdXBfZWRhZjY4YzE4Njg4NGY3MWI5NzVjMjgzNzM0ODg2NDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVmNzEyOWM0NGExOTQwMThiMWZkNDcyZWE4MjFiYjgyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ5MDEyNzEsIC03My45ODg0ODM5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODJhZmRlNDVlM2E0N2Y2OWJlMzAzOGRkMWI4NmVmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExM2QzMjJjY2UxMTQ2NTM5NWFjMWExM2ViY2UwMzJjID0gJChgPGRpdiBpZD0iaHRtbF8xMTNkMzIyY2NlMTE0NjUzOTVhYzFhMTNlYmNlMDMyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NiBBdmUgJiBXIDMzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1OTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg0OTxicj4gbmV0IGRlcGFydHVyZXM6IDI1Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODJhZmRlNDVlM2E0N2Y2OWJlMzAzOGRkMWI4NmVmZS5zZXRDb250ZW50KGh0bWxfMTEzZDMyMmNjZTExNDY1Mzk1YWMxYTEzZWJjZTAzMmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWY3MTI5YzQ0YTE5NDAxOGIxZmQ0NzJlYTgyMWJiODIuYmluZFBvcHVwKHBvcHVwXzY4MmFmZGU0NWUzYTQ3ZjY5YmUzMDM4ZGQxYjg2ZWZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MmY3NDcwMTE2OGI0ZmUwOTlkZDI1NDhhYjZkOTU0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczOTEyNjAxLCAtNzMuOTc5NzM3NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xMC40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0MmU3YjVlYmVkZjRiZjQ4MzY2MTMyZGEyNWY1ODE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDEyNDk3YjcxZmQ0NGIzOTllNGVjMzBkMDM1YjU1NTAgPSAkKGA8ZGl2IGlkPSJodG1sXzQxMjQ5N2I3MWZkNDRiMzk5ZTRlYzMwZDAzNWI1NTUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDI1IFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc0MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTMxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTIwOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDJlN2I1ZWJlZGY0YmY0ODM2NjEzMmRhMjVmNTgxNS5zZXRDb250ZW50KGh0bWxfNDEyNDk3YjcxZmQ0NGIzOTllNGVjMzBkMDM1YjU1NTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzJmNzQ3MDExNjhiNGZlMDk5ZGQyNTQ4YWI2ZDk1NGIuYmluZFBvcHVwKHBvcHVwX2Y0MmU3YjVlYmVkZjRiZjQ4MzY2MTMyZGEyNWY1ODE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNjM3ZTc5N2I0ZjU0MGZjOGZhMTM5ODdiMjIzZjU1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MzQxMzc5LCAtNzMuOTk2Njc0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMmYxZjA3MzJmNTU0NTY3YTVmMTAxMTFkODU5NDMxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0ZGRjNjYyMGRhMjQ3Zjg4NjJiYzQ4YmU4ZTY2M2MxID0gJChgPGRpdiBpZD0iaHRtbF9hNGRkYzY2MjBkYTI0N2Y4ODYyYmM0OGJlOGU2NjNjMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA0NiBTdCAmIDExIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDM3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNzE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTJmMWYwNzMyZjU1NDU2N2E1ZjEwMTExZDg1OTQzMTMuc2V0Q29udGVudChodG1sX2E0ZGRjNjYyMGRhMjQ3Zjg4NjJiYzQ4YmU4ZTY2M2MxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2MzdlNzk3YjRmNTQwZmM4ZmExMzk4N2IyMjNmNTU1LmJpbmRQb3B1cChwb3B1cF9hMmYxZjA3MzJmNTU0NTY3YTVmMTAxMTFkODU5NDMxMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTMyN2MwOWQ4NjdiNDMyMGE0N2I5YTZjZWZmNjU2NTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDU0OTczLCAtNzQuMDAxOTcxMzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzkwZDI4MmM4Mzg1NDgyYTljMTE0NmIzMWU5ZTVhOTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTMyMmFhMTY5ZDE0NWMzYTA5NzgyOTA3NWUxNTc3YiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTEzMjJhYTE2OWQxNDVjM2EwOTc4MjkwNzVlMTU3N2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkgQXZlICYgVyAyMiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTIxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0ODI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzkwZDI4MmM4Mzg1NDgyYTljMTE0NmIzMWU5ZTVhOTMuc2V0Q29udGVudChodG1sX2ExMzIyYWExNjlkMTQ1YzNhMDk3ODI5MDc1ZTE1NzdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUzMjdjMDlkODY3YjQzMjBhNDdiOWE2Y2VmZjY1NjU1LmJpbmRQb3B1cChwb3B1cF9jOTBkMjgyYzgzODU0ODJhOWMxMTQ2YjMxZTllNWE5MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjA2NjVhYjU2NjdlNDA2MDhhOTk0NDVhMjA3ZmU2ZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjkzODY4NSwgLTczLjk3NzcyNDI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMjAuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNmFmMzY2MTM5ZWM0ZmU1YmU2OGZiMDNkOTY2MjlhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlMjIwOGVhZWM0YTRiNjhhNmU5Y2RkNTgzNTg0NDU4ID0gJChgPGRpdiBpZD0iaHRtbF9iZTIyMDhlYWVjNGE0YjY4YTZlOWNkZDU4MzU4NDQ1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxNCBTdCAmIEF2ZW51ZSBCPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3NDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMzOTxicj4gbmV0IGRlcGFydHVyZXM6IC00MDcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzZhZjM2NjEzOWVjNGZlNWJlNjhmYjAzZDk2NjI5YTYuc2V0Q29udGVudChodG1sX2JlMjIwOGVhZWM0YTRiNjhhNmU5Y2RkNTgzNTg0NDU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwNjY1YWI1NjY3ZTQwNjA4YTk5NDQ1YTIwN2ZlNmQyLmJpbmRQb3B1cChwb3B1cF8zNmFmMzY2MTM5ZWM0ZmU1YmU2OGZiMDNkOTY2MjlhNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWY0ZDllMWNkMjhjNDQ1ZGFjYjA4MWRhZDZlMjA4NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjgyNTQsIC03My45ODg2MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNjg3MmEyYmZhM2Y0ZTFkYWE3MDUxYjNmYWNlN2E5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0ODZiNjM2MjA0NjQ0NDk5NTk2MmM2NTA2ZjRiZDc0ID0gJChgPGRpdiBpZD0iaHRtbF8wNDg2YjYzNjIwNDY0NDQ5OTU5NjJjNjUwNmY0YmQ3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA1NiBTdCAmIDEwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjg5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMjk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzY4NzJhMmJmYTNmNGUxZGFhNzA1MWIzZmFjZTdhOWEuc2V0Q29udGVudChodG1sXzA0ODZiNjM2MjA0NjQ0NDk5NTk2MmM2NTA2ZjRiZDc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VmNGQ5ZTFjZDI4YzQ0NWRhY2IwODFkYWQ2ZTIwODcyLmJpbmRQb3B1cChwb3B1cF8zNjg3MmEyYmZhM2Y0ZTFkYWE3MDUxYjNmYWNlN2E5YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTA5MTA1YzMyN2Q4NDAxYmIzNTIyNTlmOGU4NTIxYTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjA4NzUwMiwgLTc0LjAwMjc3NjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMjIuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViMWI2ZTczZjE4NDQzOTM4NWU1YjQ0OGNiNDExNGYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGIxMzM2MjU3NDg0NGU3NDkxNDcwZjE1ZTRiYjQxYWYgPSAkKGA8ZGl2IGlkPSJodG1sX2RiMTMzNjI1NzQ4NDRlNzQ5MTQ3MGYxNWU0YmI0MWFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xMiBBdmUgJiBXIDQwIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTA4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NjI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDQ2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViMWI2ZTczZjE4NDQzOTM4NWU1YjQ0OGNiNDExNGYyLnNldENvbnRlbnQoaHRtbF9kYjEzMzYyNTc0ODQ0ZTc0OTE0NzBmMTVlNGJiNDFhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMDkxMDVjMzI3ZDg0MDFiYjM1MjI1OWY4ZTg1MjFhMy5iaW5kUG9wdXAocG9wdXBfNWIxYjZlNzNmMTg0NDM5Mzg1ZTViNDQ4Y2I0MTE0ZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzllMzIzNmYyMjM5MjQwZGNhNDQyNzUyNmJhMTI1MmZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYwMDk0MzcsIC03My45OTQ2MTg0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEyLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjVkZTU4MjQ2MzEzNDUwNmJmZmYxMmViZDgyZDFjZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjNjYTk4YTI1YWQ0Mzc0YTFkNzRhZDZjMDk1M2NmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmIzY2E5OGEyNWFkNDM3NGExZDc0YWQ2YzA5NTNjZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNDMgU3QgJiAxMCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU5OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzQyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTI1Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNWRlNTgyNDYzMTM0NTA2YmZmZjEyZWJkODJkMWNkYS5zZXRDb250ZW50KGh0bWxfZmIzY2E5OGEyNWFkNDM3NGExZDc0YWQ2YzA5NTNjZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWUzMjM2ZjIyMzkyNDBkY2E0NDI3NTI2YmExMjUyZmQuYmluZFBvcHVwKHBvcHVwXzI1ZGU1ODI0NjMxMzQ1MDZiZmZmMTJlYmQ4MmQxY2RhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMTkxZmU5OGI1MTc0OWExYTU2Yjk3OTI2MjJhZDMxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MjA2ODYyLCAtNzMuOTY3ODQzODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTNlMjNhYTg3Y2I0OTA2OGE4MjdmYWNlMzFmYmIxYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzM2QxOTQ0MTllZTRkZWU4OTA1YWNiZDU2OWZhNWIyID0gJChgPGRpdiBpZD0iaHRtbF8zMzNkMTk0NDE5ZWU0ZGVlODkwNWFjYmQ1NjlmYTViMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0NyBTdCAmIDEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM4Mzxicj4gbmV0IGRlcGFydHVyZXM6IDI3OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYTNlMjNhYTg3Y2I0OTA2OGE4MjdmYWNlMzFmYmIxYS5zZXRDb250ZW50KGh0bWxfMzMzZDE5NDQxOWVlNGRlZTg5MDVhY2JkNTY5ZmE1YjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTE5MWZlOThiNTE3NDlhMWE1NmI5NzkyNjIyYWQzMTQuYmluZFBvcHVwKHBvcHVwX2VhM2UyM2FhODdjYjQ5MDY4YTgyN2ZhY2UzMWZiYjFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZWZjOThiZDYyOWI0YTU1YmExZjc3MjM5NmI2ZjZlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MTU4MSwgLTczLjk3NzkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyNC41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5Y2U4NWJjNzMzMjRjNTZhM2ExZWE4NzEwYTc2ZDU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDRkOGY5YmQ1ZTZiNDFjMGJiMzg1NDcyZWUyMGVmMTkgPSAkKGA8ZGl2IGlkPSJodG1sXzQ0ZDhmOWJkNWU2YjQxYzBiYjM4NTQ3MmVlMjBlZjE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QZXJzaGluZyBTcXVhcmUgU291dGg8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMzMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogODIzPGJyPiBuZXQgZGVwYXJ0dXJlczogNDkxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5Y2U4NWJjNzMzMjRjNTZhM2ExZWE4NzEwYTc2ZDU1LnNldENvbnRlbnQoaHRtbF80NGQ4ZjliZDVlNmI0MWMwYmIzODU0NzJlZTIwZWYxOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZWZjOThiZDYyOWI0YTU1YmExZjc3MjM5NmI2ZjZlYy5iaW5kUG9wdXAocG9wdXBfOTljZTg1YmM3MzMyNGM1NmEzYTFlYTg3MTBhNzZkNTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3ODJhNTY4MDkwYTQ0ZjY5Zjk5ZDI1NDA5YmE1MTk3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ3ODAzNzMsIC03My45NzM0NDE5MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjgxZTI5MGM3OTU5NGUwMGE0NGM5MzI2YWU1MWNjNmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTQ3MWMyNjllNDQ0MzdmOWYxZDI1ZjlkMWM2MDQ5MyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWE0NzFjMjY5ZTQ0NDM3ZjlmMWQyNWY5ZDFjNjA0OTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMzkgU3QgJiAyIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTU3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2MTc8YnI+IG5ldCBkZXBhcnR1cmVzOiA2MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODFlMjkwYzc5NTk0ZTAwYTQ0YzkzMjZhZTUxY2M2Yy5zZXRDb250ZW50KGh0bWxfOWE0NzFjMjY5ZTQ0NDM3ZjlmMWQyNWY5ZDFjNjA0OTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDc4MmE1NjgwOTBhNDRmNjlmOTlkMjU0MDliYTUxOTcuYmluZFBvcHVwKHBvcHVwX2Y4MWUyOTBjNzk1OTRlMDBhNDRjOTMyNmFlNTFjYzZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDAyYTRkZDVlNWY0NTkyOTlkNTFmYWZlZWIxYTVjYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MTg3Mjk5OTk5OTk5NiwgLTczLjk3NzcwNjAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAzMy41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQ4MGEzZmYyMmExNDUwMTkwYjBiNmExYWRkNGFjMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OTBkOTlmNzI2MGQ0OTg5ODQxZDY5ZDc0N2JhZDVkNyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjkwZDk5ZjcyNjBkNDk4OTg0MWQ2OWQ3NDdiYWQ1ZDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBlcnNoaW5nIFNxdWFyZSBOb3J0aDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTc1Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjQyNjxicj4gbmV0IGRlcGFydHVyZXM6IDY3MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDgwYTNmZjIyYTE0NTAxOTBiMGI2YTFhZGQ0YWMwZS5zZXRDb250ZW50KGh0bWxfNjkwZDk5ZjcyNjBkNDk4OTg0MWQ2OWQ3NDdiYWQ1ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTQwMmE0ZGQ1ZTVmNDU5Mjk5ZDUxZmFmZWViMWE1Y2IuYmluZFBvcHVwKHBvcHVwXzRkODBhM2ZmMjJhMTQ1MDE5MGIwYjZhMWFkZDRhYzBlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84M2Y5YjhhMjU3OGY0MGVlYjAwYmU5NmViNmRiOTk4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1OTkyMjYyLCAtNzMuOTc2NDg1MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ3LjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmM4NWFmYmE3YjM0MzdjYmQwZmExODljODlhZjJiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmOWQ3ZTQ5ZTRkMTQ0ZGFhMWUyM2Y3OTQxMjA0MTIxID0gJChgPGRpdiBpZD0iaHRtbF8xZjlkN2U0OWU0ZDE0NGRhYTFlMjNmNzk0MTIwNDEyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA1MiBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyMDI8YnI+IG5ldCBkZXBhcnR1cmVzOiA5NTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTZjODVhZmJhN2IzNDM3Y2JkMGZhMTg5Yzg5YWYyYmUuc2V0Q29udGVudChodG1sXzFmOWQ3ZTQ5ZTRkMTQ0ZGFhMWUyM2Y3OTQxMjA0MTIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgzZjliOGEyNTc4ZjQwZWViMDBiZTk2ZWI2ZGI5OTg1LmJpbmRQb3B1cChwb3B1cF81NmM4NWFmYmE3YjM0MzdjYmQwZmExODljODlhZjJiZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDVhNTI3MDRjNzdjNDc5Y2EyODZlOGIwNzQxMzlkNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTcxNDc1OCwgLTczLjk3MjA3ODM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTEyYTQyMmNkYmYzNDEyNzg2ZTljM2MxODUzNjQ2OTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOThiODIxMzc2NGI0YTFiYjBiYTI1MmNkMTgzMTA2NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTk4YjgyMTM3NjRiNGExYmIwYmEyNTJjZDE4MzEwNjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTEgU3QgJiBMZXhpbmd0b24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2MDxicj4gbmV0IGRlcGFydHVyZXM6IDQxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExMmE0MjJjZGJmMzQxMjc4NmU5YzNjMTg1MzY0Njk4LnNldENvbnRlbnQoaHRtbF9lOThiODIxMzc2NGI0YTFiYjBiYTI1MmNkMTgzMTA2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNWE1MjcwNGM3N2M0NzljYTI4NmU4YjA3NDEzOWQ1Ny5iaW5kUG9wdXAocG9wdXBfYTEyYTQyMmNkYmYzNDEyNzg2ZTljM2MxODUzNjQ2OTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlYWNjOTMxYWJjNTQyYmViNTM2NzJkNDVlYjQwODdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU0NjY1OTEsIC03My45OTEzODE1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTEuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmMWM5NDdkZjUyZjRlZDNiNzNhNGJkYWQ0OWZlNjFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2E5ZDZlNGQyZDZlNDZlMWJjMTkzZjkxYzE4YTExMDcgPSAkKGA8ZGl2IGlkPSJodG1sX2NhOWQ2ZTRkMmQ2ZTQ2ZTFiYzE5M2Y5MWMxOGExMTA3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDM4IFN0ICYgOCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgxMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA0Njxicj4gbmV0IGRlcGFydHVyZXM6IDIzNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZjFjOTQ3ZGY1MmY0ZWQzYjczYTRiZGFkNDlmZTYxYy5zZXRDb250ZW50KGh0bWxfY2E5ZDZlNGQyZDZlNDZlMWJjMTkzZjkxYzE4YTExMDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2VhY2M5MzFhYmM1NDJiZWI1MzY3MmQ0NWViNDA4N2IuYmluZFBvcHVwKHBvcHVwXzVmMWM5NDdkZjUyZjRlZDNiNzNhNGJkYWQ0OWZlNjFjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Mzg0YjVlOWE5ZDM0YjA3ODU3NjFlZWZkYmQwNzQwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NTI3MzA3LCAtNzMuOTgzMTY5MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQ3Ljc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTFmMjg5NjczZDY1NDJkZDg0YzkyODIwYTI0ZmRmOTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTU4OTU3ZTgyYzU0ZmQ1YWZlNTUyOGM5OGQxMWM5NyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTk1ODk1N2U4MmM1NGZkNWFmZTU1MjhjOThkMTFjOTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNDMgU3QgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjIzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTc4PGJyPiBuZXQgZGVwYXJ0dXJlczogOTU1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxZjI4OTY3M2Q2NTQyZGQ4NGM5MjgyMGEyNGZkZjkzLnNldENvbnRlbnQoaHRtbF9hOTU4OTU3ZTgyYzU0ZmQ1YWZlNTUyOGM5OGQxMWM5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Mzg0YjVlOWE5ZDM0YjA3ODU3NjFlZWZkYmQwNzQwYS5iaW5kUG9wdXAocG9wdXBfNTFmMjg5NjczZDY1NDJkZDg0YzkyODIwYTI0ZmRmOTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2OGQzNzE1M2JiMTQxNzliNjRlOTI4YjZkNjY1MDkwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU1OTQxNTksIC03NC4wMDIxMTYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA2LjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGRiYjIzYmM3YWQzNDZmNzhjYTJiMWJiNzE0N2NlZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMmY5MWVmOGY1OWQ0YWY1YjljNWMwMTVlMTUwNjc3MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTJmOTFlZjhmNTlkNGFmNWI5YzVjMDE1ZTE1MDY3NzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMzQgU3QgJiAxMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIzNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzU4PGJyPiBuZXQgZGVwYXJ0dXJlczogMTIxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkYmIyM2JjN2FkMzQ2Zjc4Y2EyYjFiYjcxNDdjZWYzLnNldENvbnRlbnQoaHRtbF9lMmY5MWVmOGY1OWQ0YWY1YjljNWMwMTVlMTUwNjc3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNjhkMzcxNTNiYjE0MTc5YjY0ZTkyOGI2ZDY2NTA5MC5iaW5kUG9wdXAocG9wdXBfNGRiYjIzYmM3YWQzNDZmNzhjYTJiMWJiNzE0N2NlZjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3YmU4YjI4NGZmYjRmNzU5MmFiYTcwNDlmNTk4NWI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ3NjU5NDcsIC03My45ODQ5MDcwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMi4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FkNWQ1NzZiNTY4MDRkMmY5MWZjMDRhMDJjOGNiMDI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODk1YzRlNjExZWIwNGM3MTg5MDgwYWZjZjU4YTAzMDMgPSAkKGA8ZGl2IGlkPSJodG1sXzg5NWM0ZTYxMWViMDRjNzE4OTA4MGFmY2Y1OGEwMzAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDMzIFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDA0PGJyPiBuZXQgZGVwYXJ0dXJlczogNDcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWQ1ZDU3NmI1NjgwNGQyZjkxZmMwNGEwMmM4Y2IwMjguc2V0Q29udGVudChodG1sXzg5NWM0ZTYxMWViMDRjNzE4OTA4MGFmY2Y1OGEwMzAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3YmU4YjI4NGZmYjRmNzU5MmFiYTcwNDlmNTk4NWI4LmJpbmRQb3B1cChwb3B1cF9hZDVkNTc2YjU2ODA0ZDJmOTFmYzA0YTAyYzhjYjAyOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWIyNGM0OTM1NjdjNGY1M2EzNDc4YTM4NjUxOTMxNTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDQwMjMsIC03My45NzYwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wN2IzMWFlZTA1NTA0M2NjOTcxNjA1YmFlNjQwM2U3NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4Yjg4ZTdjNDkyMjRlNDg4OWMxY2ZmYWZkZDcwNzhkID0gJChgPGRpdiBpZD0iaHRtbF8zOGI4OGU3YzQ5MjI0ZTQ4ODljMWNmZmFmZGQ3MDc4ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAzMyBTdCAmIDIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1NDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU5NDxicj4gbmV0IGRlcGFydHVyZXM6IDQ5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3YjMxYWVlMDU1MDQzY2M5NzE2MDViYWU2NDAzZTc0LnNldENvbnRlbnQoaHRtbF8zOGI4OGU3YzQ5MjI0ZTQ4ODljMWNmZmFmZGQ3MDc4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YjI0YzQ5MzU2N2M0ZjUzYTM0NzhhMzg2NTE5MzE1Ni5iaW5kUG9wdXAocG9wdXBfMDdiMzFhZWUwNTUwNDNjYzk3MTYwNWJhZTY0MDNlNzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3ODVmNjZlMjIwMzRlNWRiMDk2ZmZlMzRlYjI1MmU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQyOTA5MDIsIC03My45NzcwNjA1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiZjkxNTNhMDQyMjQ0NWNhNGE1YmNkYWI3Y2RhYWNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2YzM2I4MGFhMjRlNGNlZDk4NzZkNzIzODdlNTBlYmUgPSAkKGA8ZGl2IGlkPSJodG1sXzNmMzNiODBhYTI0ZTRjZWQ5ODc2ZDcyMzg3ZTUwZWJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4yIEF2ZSAmIEUgMzEgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUxNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDAwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTExNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYmY5MTUzYTA0MjI0NDVjYTRhNWJjZGFiN2NkYWFjYy5zZXRDb250ZW50KGh0bWxfM2YzM2I4MGFhMjRlNGNlZDk4NzZkNzIzODdlNTBlYmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjc4NWY2NmUyMjAzNGU1ZGIwOTZmZmUzNGViMjUyZTguYmluZFBvcHVwKHBvcHVwX2RiZjkxNTNhMDQyMjQ0NWNhNGE1YmNkYWI3Y2RhYWNjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDVkZjhiNDA4ZmI0ODFmOGJlNGU3NDJlZmY0OTE1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1NzU2OTg5OTk5OTk5LCAtNzMuOTkwOTg1MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZjZlZDQ0Yjc2OGQ0MmY3OTgxN2I4YzkxMzU5MWU4NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwOWQxYjc5NWVkYjRkYTc4MGY3ZGRmZjVmMDkwZjkxID0gJChgPGRpdiBpZD0iaHRtbF80MDlkMWI3OTVlZGI0ZGE3ODBmN2RkZmY1ZjA5MGY5MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA0MiBTdCAmIDggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDM0ODxicj4gbmV0IGRlcGFydHVyZXM6IC02MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZjZlZDQ0Yjc2OGQ0MmY3OTgxN2I4YzkxMzU5MWU4NC5zZXRDb250ZW50KGh0bWxfNDA5ZDFiNzk1ZWRiNGRhNzgwZjdkZGZmNWYwOTBmOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjA1ZGY4YjQwOGZiNDgxZjhiZTRlNzQyZWZmNDkxNTkuYmluZFBvcHVwKHBvcHVwXzNmNmVkNDRiNzY4ZDQyZjc5ODE3YjhjOTEzNTkxZTg0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NjZkN2M3YmVhNjk0NmM1YTc4NzI3MjAwZWNlYWFkZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MTUyMiwgLTczLjk5MDU0MTAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwNTRkYjQ5Mzk3MTQyZmRhMzZlYmRjOTNkZjM0YzhhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzk5ODg2NWI4ZDA2NGU4YWFlZTU0NWUzMTk1YWE5MzAgPSAkKGA8ZGl2IGlkPSJodG1sX2M5OTg4NjViOGQwNjRlOGFhZWU1NDVlMzE5NWFhOTMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xMSBBdmUgJiBXIDU5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI5Nzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDA1NGRiNDkzOTcxNDJmZGEzNmViZGM5M2RmMzRjOGEuc2V0Q29udGVudChodG1sX2M5OTg4NjViOGQwNjRlOGFhZWU1NDVlMzE5NWFhOTMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU2NmQ3YzdiZWE2OTQ2YzVhNzg3MjcyMDBlY2VhYWRlLmJpbmRQb3B1cChwb3B1cF80MDU0ZGI0OTM5NzE0MmZkYTM2ZWJkYzkzZGYzNGM4YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTdkZDM4MTc2MDM1NDAwNTllZDBlYTJjMWJmZDlkMjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTg5MzkwNCwgLTczLjk5MjY2Mjg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZiOTNjNTExOGFkODQ2NmVhOTlmZWM2YWZhZGQ5YjBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NlMmE4NmVjZGM3NDdlNWFjNDU0YjA4MmVmNDI4OTcgPSAkKGA8ZGl2IGlkPSJodG1sXzNjZTJhODZlY2RjNzQ3ZTVhYzQ1NGIwODJlZjQyODk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Gb3JzeXRoIFN0ICYgQnJvb21lIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM5OTxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmI5M2M1MTE4YWQ4NDY2ZWE5OWZlYzZhZmFkZDliMGMuc2V0Q29udGVudChodG1sXzNjZTJhODZlY2RjNzQ3ZTVhYzQ1NGIwODJlZjQyODk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3ZGQzODE3NjAzNTQwMDU5ZWQwZWEyYzFiZmQ5ZDI3LmJpbmRQb3B1cChwb3B1cF82YjkzYzUxMThhZDg0NjZlYTk5ZmVjNmFmYWRkOWIwYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODNlNTkyOWEwMDEyNDI4MGE1ZjI3OTdmYTI5MjNjNTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTA0NTEsIC03My45NjA4NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNDU1OTI3ZDcxMjI0ZjM2YmY1M2U3ODU2MzkyZGEyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkNjJhNGE5NjQzYTQ5MWE4NjY4NDA4MzY4ODc1MThlID0gJChgPGRpdiBpZD0iaHRtbF85ZDYyYTRhOTY0M2E0OTFhODY2ODQwODM2ODg3NTE4ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UyA1IFBsICYgUyA0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxMjxicj4gbmV0IGRlcGFydHVyZXM6IC01Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDU1OTI3ZDcxMjI0ZjM2YmY1M2U3ODU2MzkyZGEyMy5zZXRDb250ZW50KGh0bWxfOWQ2MmE0YTk2NDNhNDkxYTg2Njg0MDgzNjg4NzUxOGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODNlNTkyOWEwMDEyNDI4MGE1ZjI3OTdmYTI5MjNjNTUuYmluZFBvcHVwKHBvcHVwX2Q0NTU5MjdkNzEyMjRmMzZiZjUzZTc4NTYzOTJkYTIzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZjZiYTc4YzE0YjU0ZWQ0OGQxYzU0YTdlOGY1NWYxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1Mjk5NjQxLCAtNzMuOTg3MjE2MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkYThhYWYwMDFkODRmMmQ5M2QzODhjYTg3NGJhODliID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzVhNmY0NTIxYTE4NDgyMjhmZmUzMTg0MzViMGExMDQgPSAkKGA8ZGl2IGlkPSJodG1sXzM1YTZmNDUyMWExODQ4MjI4ZmZlMzE4NDM1YjBhMTA0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFcgMzkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMxNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzc0PGJyPiBuZXQgZGVwYXJ0dXJlczogNjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGRhOGFhZjAwMWQ4NGYyZDkzZDM4OGNhODc0YmE4OWIuc2V0Q29udGVudChodG1sXzM1YTZmNDUyMWExODQ4MjI4ZmZlMzE4NDM1YjBhMTA0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmNmJhNzhjMTRiNTRlZDQ4ZDFjNTRhN2U4ZjU1ZjE3LmJpbmRQb3B1cChwb3B1cF84ZGE4YWFmMDAxZDg0ZjJkOTNkMzg4Y2E4NzRiYTg5YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQ1ZjYzNzYyOWRhNDYyMDhiNjAwYWUwZWFiOWY4ZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDI1NTA2NSwgLTc0LjAxMjcyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMWQ2MDBmOWVlOWQ0MDZjOTRlZTI1NzIxMThhNGRmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmMDJjMzhlZTQ0ODQ0MjRiNGY3ODBiMGZhYWE1Y2JhID0gJChgPGRpdiBpZD0iaHRtbF9iZjAyYzM4ZWU0NDg0NDI0YjRmNzgwYjBmYWFhNWNiYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2F0ZXIgLSBXaGl0ZWhhbGwgUGxhemE8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjY0PGJyPiBuZXQgZGVwYXJ0dXJlczogMTUxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxZDYwMGY5ZWU5ZDQwNmM5NGVlMjU3MjExOGE0ZGYyLnNldENvbnRlbnQoaHRtbF9iZjAyYzM4ZWU0NDg0NDI0YjRmNzgwYjBmYWFhNWNiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NDVmNjM3NjI5ZGE0NjIwOGI2MDBhZTBlYWI5ZjhlYi5iaW5kUG9wdXAocG9wdXBfZjFkNjAwZjllZTlkNDA2Yzk0ZWUyNTcyMTE4YTRkZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxOTA4YjE5OGY4ZjQxMTk4ZjNhOWQyZTcyMTFmODMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQxNDQzODcsIC03My45NzUzNjA4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ1ZTM4NWJlZThiNDJhNThjNDYzODRjZDMyMjEzYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZmNiZmQ4MzgwMGE0NTkxYWNhZjNjY2YwYmFmOGIyYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGZjYmZkODM4MDBhNDU5MWFjYWYzY2NmMGJhZjhiMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEgQXZlICYgRSAzMCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzA5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZDVlMzg1YmVlOGI0MmE1OGM0NjM4NGNkMzIyMTNiYS5zZXRDb250ZW50KGh0bWxfNGZjYmZkODM4MDBhNDU5MWFjYWYzY2NmMGJhZjhiMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjE5MDhiMTk4ZjhmNDExOThmM2E5ZDJlNzIxMWY4MzEuYmluZFBvcHVwKHBvcHVwX2VkNWUzODViZWU4YjQyYTU4YzQ2Mzg0Y2QzMjIxM2JhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYmVkODY5MzNkZDc0NzA0ODhhMWYxODg5MmIwZmU1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MDI1ODc4LCAtNzMuOTg0MDkyMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYjA4NTA0OWM5Y2Y0MDhjYjBhNDQ0YTVmNTNhMzdkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyYWVjYmM1OGMwNzQ5MGFhOWNlMDI3M2NiNDFhNmU5ID0gJChgPGRpdiBpZD0iaHRtbF9kMmFlY2JjNThjMDc0OTBhYTljZTAyNzNjYjQxYTZlOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGV4aW5ndG9uIEF2ZSAmIEUgMjQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM5Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzczPGJyPiBuZXQgZGVwYXJ0dXJlczogLTI0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiMDg1MDQ5YzljZjQwOGNiMGE0NDRhNWY1M2EzN2RiLnNldENvbnRlbnQoaHRtbF9kMmFlY2JjNThjMDc0OTBhYTljZTAyNzNjYjQxYTZlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYmVkODY5MzNkZDc0NzA0ODhhMWYxODg5MmIwZmU1Yy5iaW5kUG9wdXAocG9wdXBfYWIwODUwNDljOWNmNDA4Y2IwYTQ0NGE1ZjUzYTM3ZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzNzk1YjhhNTIxMjQ3MTg4N2JlZmVhYmVmMDhjNTAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE1MzQ4MjUsIC03My45NjAyNDExNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MTY1ZTg0MzQxYTk0Zjc3YjdhZTIwZjQ2OGY2ZGE5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhNjQ4NzcyMTZmNzQzMjA4OTQwYjYwZWVlMzBjZGY4ID0gJChgPGRpdiBpZD0iaHRtbF8xYTY0ODc3MjE2Zjc0MzIwODk0MGI2MGVlZTMwY2RmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWV0cm9wb2xpdGFuIEF2ZSAmIEJlZGZvcmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNzIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMyOTxicj4gbmV0IGRlcGFydHVyZXM6IC00My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTY1ZTg0MzQxYTk0Zjc3YjdhZTIwZjQ2OGY2ZGE5OC5zZXRDb250ZW50KGh0bWxfMWE2NDg3NzIxNmY3NDMyMDg5NDBiNjBlZWUzMGNkZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDM3OTViOGE1MjEyNDcxODg3YmVmZWFiZWYwOGM1MDIuYmluZFBvcHVwKHBvcHVwXzYxNjVlODQzNDFhOTRmNzdiN2FlMjBmNDY4ZjZkYTk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYzdmOTYyMDNkZGI0ZGVmYmNjMmJmMDZhZjg0ZGMzMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MzExNTU1Mzc2NDg2LCAtNzMuOTgyMTUzNTM0ODg5MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZjkwYzllYWRhYTA0NGQzOWZlYWY5OGFhMjE1MzdkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4NzdjZWQxNjlmODQ5Y2NhYjk2YzE1OGM2YWQ1Y2RkID0gJChgPGRpdiBpZD0iaHRtbF9jODc3Y2VkMTY5Zjg0OWNjYWI5NmMxNThjNmFkNWNkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGV4aW5ndG9uIEF2ZSAmIEUgMjkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU2NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjY2PGJyPiBuZXQgZGVwYXJ0dXJlczogMTAxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmOTBjOWVhZGFhMDQ0ZDM5ZmVhZjk4YWEyMTUzN2RiLnNldENvbnRlbnQoaHRtbF9jODc3Y2VkMTY5Zjg0OWNjYWI5NmMxNThjNmFkNWNkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYzdmOTYyMDNkZGI0ZGVmYmNjMmJmMDZhZjg0ZGMzMy5iaW5kUG9wdXAocG9wdXBfNGY5MGM5ZWFkYWEwNDRkMzlmZWFmOThhYTIxNTM3ZGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNiZWExNmExYzI4ZjQ3NjJiZDhjMGFmYmNmM2U5OThjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ0NDQ5MjEsIC03My45ODMwMzUyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWVlMDgwZDdhNmQ2NDMyZDg3YzhjNDg4MDZhMTM2MjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTVkOGQxZDRkNDM0MWU1OTcyYzZlMTYzMTliZjg1NSA9ICQoYDxkaXYgaWQ9Imh0bWxfYmU1ZDhkMWQ0ZDQzNDFlNTk3MmM2ZTE2MzE5YmY4NTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMzAgU3QgJiBQYXJrIEF2ZSBTPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ2OTxicj4gbmV0IGRlcGFydHVyZXM6IDEwOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWUwODBkN2E2ZDY0MzJkODdjOGM0ODgwNmExMzYyNC5zZXRDb250ZW50KGh0bWxfYmU1ZDhkMWQ0ZDQzNDFlNTk3MmM2ZTE2MzE5YmY4NTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2JlYTE2YTFjMjhmNDc2MmJkOGMwYWZiY2YzZTk5OGMuYmluZFBvcHVwKHBvcHVwXzFlZTA4MGQ3YTZkNjQzMmQ4N2M4YzQ4ODA2YTEzNjI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMTUzM2UwNGJlMGU0MDAyYjMzZGFiY2NhNjE2OWFjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMjU1MDg4LCAtNzMuOTg5NDAyMzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZWE3NjI0ODFhNTA0MDFmOWMyMGVkY2YwNjMyYjZkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyMDkzOTlhMzQ2NDRjM2Q4MDFkMWIzOGE3MDQ0NGUyID0gJChgPGRpdiBpZD0iaHRtbF84MjA5Mzk5YTM0NjQ0YzNkODAxZDFiMzhhNzA0NDRlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RnJvbnQgU3QgJiBXYXNoaW5ndG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMTQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQzMDxicj4gbmV0IGRlcGFydHVyZXM6IDIxNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZWE3NjI0ODFhNTA0MDFmOWMyMGVkY2YwNjMyYjZkZi5zZXRDb250ZW50KGh0bWxfODIwOTM5OWEzNDY0NGMzZDgwMWQxYjM4YTcwNDQ0ZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjE1MzNlMDRiZTBlNDAwMmIzM2RhYmNjYTYxNjlhY2EuYmluZFBvcHVwKHBvcHVwXzdlYTc2MjQ4MWE1MDQwMWY5YzIwZWRjZjA2MzJiNmRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNDczNmYyNTlhYWI0ZDM5YjBlNTcyZTQwZGNmNGMzOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5OTc3MywgLTczLjk3OTkyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FiZjYwNzI0MjU5MzQ5MjVhZDFjMTI2MDc1OWJkMTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTgwNjhjZjliYzEwNGI1YjliOTY1MWVmMzYwZTEyNjYgPSAkKGA8ZGl2IGlkPSJodG1sXzk4MDY4Y2Y5YmMxMDRiNWI5Yjk2NTFlZjM2MGUxMjY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TYW5kcyBTdCAmIE5hdnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1NDxicj4gbmV0IGRlcGFydHVyZXM6IDM5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiZjYwNzI0MjU5MzQ5MjVhZDFjMTI2MDc1OWJkMTYwLnNldENvbnRlbnQoaHRtbF85ODA2OGNmOWJjMTA0YjViOWI5NjUxZWYzNjBlMTI2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNDczNmYyNTlhYWI0ZDM5YjBlNTcyZTQwZGNmNGMzOC5iaW5kUG9wdXAocG9wdXBfYWJmNjA3MjQyNTkzNDkyNWFkMWMxMjYwNzU5YmQxNjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxMGFkOGYzOWE2YTQ2NzM5MDhjNTE2NmNkOWZiMjQxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2ODg3LCAtNzMuOTYzMTk3OTk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGY1ZTE3OWZmNmNmNDUwMGIyYTNjMTQ5YmMzZTlkM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YjQyMjBiNGUzM2Y0YjExYTk2YWIxOTg2MzA3NmMxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNGI0MjIwYjRlMzNmNGIxMWE5NmFiMTk4NjMwNzZjMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPld5dGhlIEF2ZSAmIE1ldHJvcG9saXRhbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMwNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjM3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTY5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmNWUxNzlmZjZjZjQ1MDBiMmEzYzE0OWJjM2U5ZDNhLnNldENvbnRlbnQoaHRtbF80YjQyMjBiNGUzM2Y0YjExYTk2YWIxOTg2MzA3NmMxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MTBhZDhmMzlhNmE0NjczOTA4YzUxNjZjZDlmYjI0MS5iaW5kUG9wdXAocG9wdXBfNGY1ZTE3OWZmNmNmNDUwMGIyYTNjMTQ5YmMzZTlkM2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4MmM5NTUwYzI3NzQwMGJhNzIwOTEyNWQ5YTBlMWE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMzODEyMTkxOTY2MzIsIC03My45ODA1NDQyMDk0ODAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTIuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcxNWQ2OWJlNjViNTQ2MGQ5NDZhYTk3MzM3YjQ2ODEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2M4YTdmYTA2YmJmNGI2MTgxMWQ2ODFhZWRlODA2MGQgPSAkKGA8ZGl2IGlkPSJodG1sXzdjOGE3ZmEwNmJiZjRiNjE4MTFkNjgxYWVkZTgwNjBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xIEF2ZSAmIEUgMTggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU3NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzI4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTI0Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MTVkNjliZTY1YjU0NjBkOTQ2YWE5NzMzN2I0NjgxMi5zZXRDb250ZW50KGh0bWxfN2M4YTdmYTA2YmJmNGI2MTgxMWQ2ODFhZWRlODA2MGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDgyYzk1NTBjMjc3NDAwYmE3MjA5MTI1ZDlhMGUxYTkuYmluZFBvcHVwKHBvcHVwXzcxNWQ2OWJlNjViNTQ2MGQ5NDZhYTk3MzM3YjQ2ODEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NjM5YWJiNzhhNmE0YTU5YTAwN2RjYjJjY2I4NWI3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNDM5OSwgLTc0LjAwNDcwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNy41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDVlNTljZmExNjA4NDY1YWE3MDJiOGQyYzM4YWYwZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNTgwZmIxOWE5NGE0MmEwOWNkOTE2MTMwZDlkZjliOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTU4MGZiMTlhOTRhNDJhMDljZDkxNjEzMGQ5ZGY5YjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjYgQXZlICYgQnJvb21lIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMjguMDxicj4gdG90YWwgYXJyaXZhbHM6IDM3ODxicj4gbmV0IGRlcGFydHVyZXM6IDE1MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NWU1OWNmYTE2MDg0NjVhYTcwMmI4ZDJjMzhhZjBmZi5zZXRDb250ZW50KGh0bWxfYTU4MGZiMTlhOTRhNDJhMDljZDkxNjEzMGQ5ZGY5YjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTYzOWFiYjc4YTZhNGE1OWEwMDdkY2IyY2NiODViNzIuYmluZFBvcHVwKHBvcHVwXzQ1ZTU5Y2ZhMTYwODQ2NWFhNzAyYjhkMmMzOGFmMGZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMTkwNDVhYTMxNjY0Zjk5OGI5M2Q4NWY2ZjI0MmQ0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwNTMxMTk0LCAtNzMuOTcxMDAwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IE5hTiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyZTdlNzk2MGY3NDRhNTNhNTM4ODA5YjE2NWQ2YmU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzZlYmFlMGRiZDBlNDdjNjkzNzM4YTYxZGQyYzFhM2QgPSAkKGA8ZGl2IGlkPSJodG1sXzc2ZWJhZTBkYmQwZTQ3YzY5MzczOGE2MWRkMmMxYTNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYWlscm9hZCBBdmUgJiBLYXkgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiBuYW48YnI+IHRvdGFsIGFycml2YWxzOiAxODxicj4gbmV0IGRlcGFydHVyZXM6IG5hbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjJlN2U3OTYwZjc0NGE1M2E1Mzg4MDliMTY1ZDZiZTYuc2V0Q29udGVudChodG1sXzc2ZWJhZTBkYmQwZTQ3YzY5MzczOGE2MWRkMmMxYTNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YxOTA0NWFhMzE2NjRmOTk4YjkzZDg1ZjZmMjQyZDQ0LmJpbmRQb3B1cChwb3B1cF8yMmU3ZTc5NjBmNzQ0YTUzYTUzODgwOWIxNjVkNmJlNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGFmMTcxYTEyMGNhNDQ3YjhmNzI5NjE4YzdhMjJjYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjU5MDkzNiwgLTczLjk3NjM0MTUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMi4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjMjgyYmY5ODY5YjQyOWZiYWY5YThmM2M4NTM1ZDVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmQxM2M1ZTI0NmU2NGFjOGFhODA1MTdjMjVjY2E1MDYgPSAkKGA8ZGl2IGlkPSJodG1sXzZkMTNjNWUyNDZlNjRhYzhhYTgwNTE3YzI1Y2NhNTA2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsIFBhcmsgUyAmIDYgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY5Mzxicj4gbmV0IGRlcGFydHVyZXM6IDI0My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzI4MmJmOTg2OWI0MjlmYmFmOWE4ZjNjODUzNWQ1Yy5zZXRDb250ZW50KGh0bWxfNmQxM2M1ZTI0NmU2NGFjOGFhODA1MTdjMjVjY2E1MDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGFmMTcxYTEyMGNhNDQ3YjhmNzI5NjE4YzdhMjJjYzUuYmluZFBvcHVwKHBvcHVwXzBjMjgyYmY5ODY5YjQyOWZiYWY5YThmM2M4NTM1ZDVjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTgxMmNjYjdlOGI0MmJiOGIyMDM1ZjQ0YjIyMGFkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwNTY5MjU0LCAtNzQuMDE2Nzc2ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lY2YyMGM1NjgwY2I0YzYxOWNhMThmNTEwODc0MGQwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1NzliNzgzNjA1YjQ1NzM5MGVkOGE3MjE5MWE1MTI1ID0gJChgPGRpdiBpZD0iaHRtbF83NTc5Yjc4MzYwNWI0NTczOTBlZDhhNzIxOTFhNTEyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGl0dGxlIFdlc3QgU3QgJiAxIFBsPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQzODxicj4gbmV0IGRlcGFydHVyZXM6IDMzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjZjIwYzU2ODBjYjRjNjE5Y2ExOGY1MTA4NzQwZDAwLnNldENvbnRlbnQoaHRtbF83NTc5Yjc4MzYwNWI0NTczOTBlZDhhNzIxOTFhNTEyNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTgxMmNjYjdlOGI0MmJiOGIyMDM1ZjQ0YjIyMGFkYi5iaW5kUG9wdXAocG9wdXBfZWNmMjBjNTY4MGNiNGM2MTljYTE4ZjUxMDg3NDBkMDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0MmFmZGVhMzI4NDQzMzg5Y2IzYmJhZmRhMDM0OTQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzExMTc0NDQsIC03My45OTY4MjYxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkMmU0MTUzYTQ1MTQ3YmM5ZWU5ZjZlOGU0NTdlOTlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NiMmNlNTEyMjQyNDVkMzlkMTY5MmZhNjI1YjhmNDIgPSAkKGA8ZGl2IGlkPSJodG1sXzNjYjJjZTUxMjI0MjQ1ZDM5ZDE2OTJmYTYyNWI4ZjQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXRoZXJpbmUgU3QgJiBNb25yb2UgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTAxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTExMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDJlNDE1M2E0NTE0N2JjOWVlOWY2ZThlNDU3ZTk5YS5zZXRDb250ZW50KGh0bWxfM2NiMmNlNTEyMjQyNDVkMzlkMTY5MmZhNjI1YjhmNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjQyYWZkZWEzMjg0NDMzODljYjNiYmFmZGEwMzQ5NDYuYmluZFBvcHVwKHBvcHVwX2JkMmU0MTUzYTQ1MTQ3YmM5ZWU5ZjZlOGU0NTdlOTlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZmFkNTUzOWEzMDM0NTEyODJmMmFhMWY4MjYyOWMyNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMTY1NDgxLCAtNzQuMDAyMzQ3MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZTA1N2YzM2YwNmM0YmIxODc1MzQ0NzZlNzUwNWFjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmMWI3NTM0YzZhNTRmNmE4N2ZkNTJmMzJmMzFhMjMzID0gJChgPGRpdiBpZD0iaHRtbF9iZjFiNzUzNGM2YTU0ZjZhODdmZDUyZjMyZjMxYTIzMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JhbmQgU3QgJiBHcmVlbmUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI4MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTQyPGJyPiBuZXQgZGVwYXJ0dXJlczogMjYyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlMDU3ZjMzZjA2YzRiYjE4NzUzNDQ3NmU3NTA1YWMxLnNldENvbnRlbnQoaHRtbF9iZjFiNzUzNGM2YTU0ZjZhODdmZDUyZjMyZjMxYTIzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZmFkNTUzOWEzMDM0NTEyODJmMmFhMWY4MjYyOWMyNy5iaW5kUG9wdXAocG9wdXBfM2UwNTdmMzNmMDZjNGJiMTg3NTM0NDc2ZTc1MDVhYzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhZmFhNjM4MDI1ZDQzZjM5MGE5MzQ0MGVjMGIwOTk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5NDQ1LCAtNzMuOTc2ODA2MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MzA4MDk1N2Q1MzQ0Mzk4ODc1OGY2ZTFjMTAzZmI4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkMzRjNGI5ODFjZDRjZTE4MWQ3OTFkNzgwOGJjNzg0ID0gJChgPGRpdiBpZD0iaHRtbF9mZDM0YzRiOTgxY2Q0Y2UxODFkNzkxZDc4MDhiYzc4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAyNyBTdCAmIDEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxOTxicj4gbmV0IGRlcGFydHVyZXM6IC0yNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzA4MDk1N2Q1MzQ0Mzk4ODc1OGY2ZTFjMTAzZmI4OC5zZXRDb250ZW50KGh0bWxfZmQzNGM0Yjk4MWNkNGNlMTgxZDc5MWQ3ODA4YmM3ODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmFmYWE2MzgwMjVkNDNmMzkwYTkzNDQwZWMwYjA5OTguYmluZFBvcHVwKHBvcHVwXzczMDgwOTU3ZDUzNDQzOTg4NzU4ZjZlMWMxMDNmYjg4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NjFlMzUwNzM0NjM0OWNmYmJmMjVmOGU4Zjc3ODk5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1MDIyMzkyLCAtNzMuOTcxMjE0MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuOSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4YzAxYzE5OWExNjRkYTViZTFiY2JmZWIzY2VkMmQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzc1ODVmM2Y4NDgyNGUwOWIzZTEyZWRmNTdjNzA2M2MgPSAkKGA8ZGl2IGlkPSJodG1sX2M3NTg1ZjNmODQ4MjRlMDliM2UxMmVkZjU3YzcwNjNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDQzIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDkyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzA8YnI+IG5ldCBkZXBhcnR1cmVzOiA3OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGMwMWMxOTlhMTY0ZGE1YmUxYmNiZmViM2NlZDJkNi5zZXRDb250ZW50KGh0bWxfYzc1ODVmM2Y4NDgyNGUwOWIzZTEyZWRmNTdjNzA2M2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTYxZTM1MDczNDYzNDljZmJiZjI1ZjhlOGY3Nzg5OWUuYmluZFBvcHVwKHBvcHVwXzg4YzAxYzE5OWExNjRkYTViZTFiY2JmZWIzY2VkMmQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzYzZmQyZWQ3MDY0M2NiYThmYTU0NGYwNjQ1YmY3OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc1OTI5MTI0LCAtNzMuOTg4NTk2NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjRjYjNiYjNhMGZiNDdjYzkyYzdhMjA3MzIzYTgxMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NWUwYjRkZmM1ZTI0Yzg0ODkxMDlkN2FlODJlYzE3YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzVlMGI0ZGZjNWUyNGM4NDg5MTA5ZDdhZTgyZWMxN2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNDUgU3QgJiA4IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjI1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1OTg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjRjYjNiYjNhMGZiNDdjYzkyYzdhMjA3MzIzYTgxMmQuc2V0Q29udGVudChodG1sXzc1ZTBiNGRmYzVlMjRjODQ4OTEwOWQ3YWU4MmVjMTdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzNjNmZDJlZDcwNjQzY2JhOGZhNTQ0ZjA2NDViZjc5LmJpbmRQb3B1cChwb3B1cF82NGNiM2JiM2EwZmI0N2NjOTJjN2EyMDczMjNhODEyZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTBlMTQ4NjdmYzI4NDY0NzkzOThhNTNmYTRlNTdkNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTkxMDcsIC03My45NTkyMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzAxZDQ5MTQ3YWQ0YWVhYWU3ZDM0ZDY2MGJmM2UzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0OGJjZmZmZGQ5NjQ2YmM4ZmVlNGUxYTM2NDI1NWNjID0gJChgPGRpdiBpZD0iaHRtbF83NDhiY2ZmZmRkOTY0NmJjOGZlZTRlMWEzNjQyNTVjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA2MCBTdCAmIFlvcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3MDFkNDkxNDdhZDRhZWFhZTdkMzRkNjYwYmYzZTMxLnNldENvbnRlbnQoaHRtbF83NDhiY2ZmZmRkOTY0NmJjOGZlZTRlMWEzNjQyNTVjYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MGUxNDg2N2ZjMjg0NjQ3OTM5OGE1M2ZhNGU1N2Q2OS5iaW5kUG9wdXAocG9wdXBfZDcwMWQ0OTE0N2FkNGFlYWFlN2QzNGQ2NjBiZjNlMzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIzYzQxZTU4OGNmMzQzMWNhYmRiOTZkMWQ0ZDM0NjBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU5NjgwODUsIC03My45NzAzMTM2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTY2NjRkMDRhMDYyNDBhMDhhOGJmOTg2MjdhM2IzZDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jZTc5NGMwZmIzY2U0Njg4YWEzN2Y4NmZmY2MwMzA0NCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2U3OTRjMGZiM2NlNDY4OGFhMzdmODZmZmNjMDMwNDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNTUgU3QgJiBMZXhpbmd0b24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA4PGJyPiBuZXQgZGVwYXJ0dXJlczogMzYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTY2NjRkMDRhMDYyNDBhMDhhOGJmOTg2MjdhM2IzZDUuc2V0Q29udGVudChodG1sX2NlNzk0YzBmYjNjZTQ2ODhhYTM3Zjg2ZmZjYzAzMDQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIzYzQxZTU4OGNmMzQzMWNhYmRiOTZkMWQ0ZDM0NjBjLmJpbmRQb3B1cChwb3B1cF9hNjY2NGQwNGEwNjI0MGEwOGE4YmY5ODYyN2EzYjNkNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjA5Nzc5YmRkMmIzNDk1OGJkYTQ2ZGE0Y2MyYWU4ZGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTE1MTIsIC03NC4wMTU3NTYwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4ZjFmYTQ3Y2E0NjQ0MjFiODViNWNmZTdiNTJkNTg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTgwMjJlMzQ3MjM2NDYxYWIwMTI5NTk1MzEyOWE0YjMgPSAkKGA8ZGl2IGlkPSJodG1sXzk4MDIyZTM0NzIzNjQ2MWFiMDEyOTU5NTMxMjlhNGIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aCBFbmQgQXZlICYgTGliZXJ0eSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNzE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3NTM8YnI+IG5ldCBkZXBhcnR1cmVzOiAzNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOGYxZmE0N2NhNDY0NDIxYjg1YjVjZmU3YjUyZDU4NS5zZXRDb250ZW50KGh0bWxfOTgwMjJlMzQ3MjM2NDYxYWIwMTI5NTk1MzEyOWE0YjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjA5Nzc5YmRkMmIzNDk1OGJkYTQ2ZGE0Y2MyYWU4ZGUuYmluZFBvcHVwKHBvcHVwX2I4ZjFmYTQ3Y2E0NjQ0MjFiODViNWNmZTdiNTJkNTg1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kN2VmMzk0NjkzZTA0NjYwOWZjMDI0OTk2ZjVlOTFiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMDM2Nzc1Mjk4NDU1LCAtNzMuOTYxNjUwNzI5MTc5MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTYwNTM5NTQ1YmIwNDQ0ZGJhYzQ2YmZmYzMwNjQzYTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNTFhNWRiMDE1YjI0N2E5YTc3YjgzMzFmMjdhMTk3MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzUxYTVkYjAxNWIyNDdhOWE3N2I4MzMxZjI3YTE5NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktlbnQgQXZlICYgTiA3IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI5Nzxicj4gbmV0IGRlcGFydHVyZXM6IC01OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NjA1Mzk1NDViYjA0NDRkYmFjNDZiZmZjMzA2NDNhNS5zZXRDb250ZW50KGh0bWxfYzUxYTVkYjAxNWIyNDdhOWE3N2I4MzMxZjI3YTE5NzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDdlZjM5NDY5M2UwNDY2MDlmYzAyNDk5NmY1ZTkxYjIuYmluZFBvcHVwKHBvcHVwXzk2MDUzOTU0NWJiMDQ0NGRiYWM0NmJmZmMzMDY0M2E1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMmUxZGZjMWZjODc0MGY1OWYyYjdjNTBjMWVhYzA2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3ODkwNjc5LCAtNzMuOTQxNDI3NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzhlNWRiMDEyODA1NDhkZThhZTRlNWRlZTYzOTAxMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YjA3OGRjMzA4NjE0ZDE5YWU5YTQ3MDVhODkyMzBlZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGIwNzhkYzMwODYxNGQxOWFlOWE0NzA1YTg5MjMwZWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPktpbmdzdG9uIEF2ZSAmIEhlcmtpbWVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOGU1ZGIwMTI4MDU0OGRlOGFlNGU1ZGVlNjM5MDExYi5zZXRDb250ZW50KGh0bWxfNGIwNzhkYzMwODYxNGQxOWFlOWE0NzA1YTg5MjMwZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjJlMWRmYzFmYzg3NDBmNTlmMmI3YzUwYzFlYWMwNmIuYmluZFBvcHVwKHBvcHVwXzM4ZTVkYjAxMjgwNTQ4ZGU4YWU0ZTVkZWU2MzkwMTFiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZDE1NzFmN2RhMmQ0ZDFhOTcxNmJlN2FkMGViOGVjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3OTQyNjgsIC03My45Mjk4OTEwOTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzYTY4NDE2YjhiNzQyYmViNjQ1ZDA0M2Y0NWI1ZGE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDUyMTkyYjFhZDlkNDY1M2FmNWE4NTdhYTcxYjY3YTAgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1MjE5MmIxYWQ5ZDQ2NTNhZjVhODU3YWE3MWI2N2EwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GdWx0b24gU3QgJiBVdGljYSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMzLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1MDxicj4gbmV0IGRlcGFydHVyZXM6IDE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzYTY4NDE2YjhiNzQyYmViNjQ1ZDA0M2Y0NWI1ZGE2LnNldENvbnRlbnQoaHRtbF9kNTIxOTJiMWFkOWQ0NjUzYWY1YTg1N2FhNzFiNjdhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZDE1NzFmN2RhMmQ0ZDFhOTcxNmJlN2FkMGViOGVjYS5iaW5kUG9wdXAocG9wdXBfZjNhNjg0MTZiOGI3NDJiZWI2NDVkMDQzZjQ1YjVkYTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkOWQ3NjY2M2EwODQ0MDlhODUzMzQ5NTgxNmNhMGViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgxNDU5OCwgLTczLjkzNDkwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5ZjA1ODAwMDY2NTQzNzI5ZGMwMDFmYTdiMjdiOTAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzYwZDNmZDgwOTcxNDIyNWE4Njk0NjhhNmI4YTFiOTEgPSAkKGA8ZGl2IGlkPSJodG1sX2M2MGQzZmQ4MDk3MTQyMjVhODY5NDY4YTZiOGExYjkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZXdpcyBBdmUgJiBEZWNhdHVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOWYwNTgwMDA2NjU0MzcyOWRjMDAxZmE3YjI3YjkwMC5zZXRDb250ZW50KGh0bWxfYzYwZDNmZDgwOTcxNDIyNWE4Njk0NjhhNmI4YTFiOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2Q5ZDc2NjYzYTA4NDQwOWE4NTMzNDk1ODE2Y2EwZWIuYmluZFBvcHVwKHBvcHVwX2Q5ZjA1ODAwMDY2NTQzNzI5ZGMwMDFmYTdiMjdiOTAwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yODU0NGQyMmEzZjA0YjY0YjRiZmZkODY3ZDNlYjc4OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MDAxMDUsIC03My45Mzg0NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDJhYWE3YmMxNTljNGQyNThiZjI4NDI4YTM0YmYyOTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZGY2YjliNWU5YTA0MmU2OGQxZmExYzc1MjVlZWIwOSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWRmNmI5YjVlOWEwNDJlNjhkMWZhMWM3NTI1ZWViMDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFsYmFueSBBdmUgJiBGdWx0b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzxicj4gbmV0IGRlcGFydHVyZXM6IC0xLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyYWFhN2JjMTU5YzRkMjU4YmYyODQyOGEzNGJmMjkzLnNldENvbnRlbnQoaHRtbF85ZGY2YjliNWU5YTA0MmU2OGQxZmExYzc1MjVlZWIwOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yODU0NGQyMmEzZjA0YjY0YjRiZmZkODY3ZDNlYjc4OS5iaW5kUG9wdXAocG9wdXBfMDJhYWE3YmMxNTljNGQyNThiZjI4NDI4YTM0YmYyOTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmOGJlMGZiODM0ZTRhODU5MDI1OTlmODJiMjE1NTNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyNjAxLCAtNzMuOTM4MDM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDhkZDg3ZjNlNWVkNDg2N2JmMjBkOGQ4ZWJhOTBhOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMTBmMDY3ZjFjOWQ0MGFlYTdhMzRmYzlmYzk3ZTlmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzEwZjA2N2YxYzlkNDBhZWE3YTM0ZmM5ZmM5N2U5ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1hcmN1cyBHYXJ2ZXkgQmx2ZCAmIE1hY29uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDhkZDg3ZjNlNWVkNDg2N2JmMjBkOGQ4ZWJhOTBhOTUuc2V0Q29udGVudChodG1sXzMxMGYwNjdmMWM5ZDQwYWVhN2EzNGZjOWZjOTdlOWY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZmOGJlMGZiODM0ZTRhODU5MDI1OTlmODJiMjE1NTNiLmJpbmRQb3B1cChwb3B1cF9kOGRkODdmM2U1ZWQ0ODY3YmYyMGQ4ZDhlYmE5MGE5NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjExZjU3ZGMwNTlmNDcwMTk5YjllNjBjN2FiYjE2YjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODIzNjg3MDAwMDAwMDUsIC03My45NDQxMThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTRlNzI1MjkzZDg1NDc0NmE2MjQ2MDIxN2NkZmM2N2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZGM2ZDUxY2Y5YzY0YWZlOTNiNTY4ZDAxYTFlNGYwZiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2RjNmQ1MWNmOWM2NGFmZTkzYjU2OGQwMWExZTRmMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhbHNleSBTdCAmIFRvbXBraW5zIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTQxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0ZTcyNTI5M2Q4NTQ3NDZhNjI0NjAyMTdjZGZjNjdjLnNldENvbnRlbnQoaHRtbF8zZGM2ZDUxY2Y5YzY0YWZlOTNiNTY4ZDAxYTFlNGYwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMTFmNTdkYzA1OWY0NzAxOTliOWU2MGM3YWJiMTZiOC5iaW5kUG9wdXAocG9wdXBfOTRlNzI1MjkzZDg1NDc0NmE2MjQ2MDIxN2NkZmM2N2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA4MTg0MjA2ODUzNDQ5ODBiNTNjNzFjYzAzODExYmE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg0MDIwMDAwMDAwMDA0LCAtNzMuOTQ5NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDM5YjQwMDBkYTk4NDZmYzg4ODA5Y2IwMzNkNDM1YmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjU4ZTM4Zjc0ODg0ZjU1YmI1ZDlhZDNjNmM4YjVlNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmI1OGUzOGY3NDg4NGY1NWJiNWQ5YWQzYzZjOGI1ZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlB1dG5hbSBBdmUgJiBOb3N0cmFuZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzliNDAwMGRhOTg0NmZjODg4MDljYjAzM2Q0MzViZC5zZXRDb250ZW50KGh0bWxfZmI1OGUzOGY3NDg4NGY1NWJiNWQ5YWQzYzZjOGI1ZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDgxODQyMDY4NTM0NDk4MGI1M2M3MWNjMDM4MTFiYTcuYmluZFBvcHVwKHBvcHVwXzAzOWI0MDAwZGE5ODQ2ZmM4ODgwOWNiMDMzZDQzNWJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYzQ0Y2QwZjFmMDc0NjY4YjFkYWQ4NzNjYTA4Y2RjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NDg4LCAtNzMuOTYzMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2M2ZDUwYWI2NmU2NGFhOGFiZTJjMGU4N2Q5NWM3NjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MjI5NTU5Mjg1OTE0NWZkODU1NDA4NDllMTEwOTlkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTIyOTU1OTI4NTkxNDVmZDg1NTQwODQ5ZTExMDk5ZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhbWJyaWRnZSBQbCAmIEdhdGVzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjNmQ1MGFiNjZlNjRhYThhYmUyYzBlODdkOTVjNzY4LnNldENvbnRlbnQoaHRtbF81MjI5NTU5Mjg1OTE0NWZkODU1NDA4NDllMTEwOTlkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYzQ0Y2QwZjFmMDc0NjY4YjFkYWQ4NzNjYTA4Y2RjOC5iaW5kUG9wdXAocG9wdXBfM2M2ZDUwYWI2NmU2NGFhOGFiZTJjMGU4N2Q5NWM3NjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhOGU3NGVlYTNkODRhOTBhMmY4YjMyMTQ5ZjE4YWNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg1MTUzMiwgLTczLjk0MTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmE2YTA1Y2Y3Nzk3NDkwMjg1NzM0Mzg1OWYyMTU0N2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTc0ZjViYjc2Zjc0NGQ5OGFkMDBmMWUyNTBkZDg4YSA9ICQoYDxkaXYgaWQ9Imh0bWxfODk3NGY1YmI3NmY3NDRkOThhZDAwZjFlMjUwZGQ4OGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlB1dG5hbSBBdmUgJiBUaHJvb3AgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmE2YTA1Y2Y3Nzk3NDkwMjg1NzM0Mzg1OWYyMTU0N2Iuc2V0Q29udGVudChodG1sXzg5NzRmNWJiNzZmNzQ0ZDk4YWQwMGYxZTI1MGRkODhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlhOGU3NGVlYTNkODRhOTBhMmY4YjMyMTQ5ZjE4YWNmLmJpbmRQb3B1cChwb3B1cF9mYTZhMDVjZjc3OTc0OTAyODU3MzQzODU5ZjIxNTQ3YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDdiMGI1ZTg2OGQyNDkzNDkyZTdkM2RhZTVlY2Y4MTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODYzMTIsIC03My45MzU3NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjg3MTkxYjkyYTI4NDdkYTk5MjRjYzJiNjU3NDczNzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YjYwZWViMTA2YTA0Y2IzYmRjODdjMGFmYjVmMWJhOSA9ICQoYDxkaXYgaWQ9Imh0bWxfOWI2MGVlYjEwNmEwNGNiM2JkYzg3YzBhZmI1ZjFiYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxld2lzIEF2ZSAmIE1hZGlzb24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjg3MTkxYjkyYTI4NDdkYTk5MjRjYzJiNjU3NDczNzIuc2V0Q29udGVudChodG1sXzliNjBlZWIxMDZhMDRjYjNiZGM4N2MwYWZiNWYxYmE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3YjBiNWU4NjhkMjQ5MzQ5MmU3ZDNkYWU1ZWNmODE2LmJpbmRQb3B1cChwb3B1cF8yODcxOTFiOTJhMjg0N2RhOTkyNGNjMmI2NTc0NzM3MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQzYjNmODk0YWE0NGY0ZGE0NDY0Nzk0NTFjNmNkY2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTAwODE1LCAtNzMuOTQ3OTE1MDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81M2YwYjMwNzcwMDM0OGI1YmRiMzVlZTZiZGRmNmU0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0ZTAzOTYzYzlmNjQyZjJhOWM0ZjIyYjc2MzQxNGRkID0gJChgPGRpdiBpZD0iaHRtbF8wNGUwMzk2M2M5ZjY0MmYyYTljNGYyMmI3NjM0MTRkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFyY3kgQXZlICYgTGFmYXlldHRlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTEwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzZjBiMzA3NzAwMzQ4YjViZGIzNWVlNmJkZGY2ZTRlLnNldENvbnRlbnQoaHRtbF8wNGUwMzk2M2M5ZjY0MmYyYTljNGYyMmI3NjM0MTRkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDNiM2Y4OTRhYTQ0ZjRkYTQ0NjQ3OTQ1MWM2Y2RjYy5iaW5kUG9wdXAocG9wdXBfNTNmMGIzMDc3MDAzNDhiNWJkYjM1ZWU2YmRkZjZlNGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwOGYzMGViNjllYzQ5NzZhOTQxODE2ZGU4ZGQ3NWE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg5NDkzMiwgLTczLjk0MjA2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwZDcwZGI4ZDNkMDRiMDNiODVjNmI1OWJmYzA4MGM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTlmYmIwYjEwY2EyNDM3MmE4ODdiMmFlYjZlMWZlNGIgPSAkKGA8ZGl2IGlkPSJodG1sXzE5ZmJiMGIxMGNhMjQzNzJhODg3YjJhZWI2ZTFmZTRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmVlbmUgQXZlICYgVGhyb29wIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTMwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwZDcwZGI4ZDNkMDRiMDNiODVjNmI1OWJmYzA4MGM2LnNldENvbnRlbnQoaHRtbF8xOWZiYjBiMTBjYTI0MzcyYTg4N2IyYWViNmUxZmU0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMDhmMzBlYjY5ZWM0OTc2YTk0MTgxNmRlOGRkNzVhOC5iaW5kUG9wdXAocG9wdXBfOTBkNzBkYjhkM2QwNGIwM2I4NWM2YjU5YmZjMDgwYzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3NzdkODRmMjIwODRiMzZiMmY2OTAzODJlNjk5ODVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg4MzMzNzAwMDAwMDEsIC03My45NTA5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzcwYWQ2NDkzY2E0MDg0OWQyMGY2ZDhhNmJiMDRkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M2MmQxN2JmYzdjNDQxZTBhYzNjMzBmZDZkZDRjOGEwID0gJChgPGRpdiBpZD0iaHRtbF9jNjJkMTdiZmM3YzQ0MWUwYWMzYzMwZmQ2ZGQ0YzhhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlZW5lIEF2ZSAmIE5vc3RyYW5kIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ2PGJyPiBuZXQgZGVwYXJ0dXJlczogMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NzcwYWQ2NDkzY2E0MDg0OWQyMGY2ZDhhNmJiMDRkMS5zZXRDb250ZW50KGh0bWxfYzYyZDE3YmZjN2M0NDFlMGFjM2MzMGZkNmRkNGM4YTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTc3N2Q4NGYyMjA4NGIzNmIyZjY5MDM4MmU2OTk4NWUuYmluZFBvcHVwKHBvcHVwXzg3NzBhZDY0OTNjYTQwODQ5ZDIwZjZkOGE2YmIwNGQxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZjJjNTEzYWM1NTY0NmZkYjZjY2ZiODMwODUzYjllYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MDcyNTQ5LCAtNzMuOTUxMzM0NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYWI5MmUyMjg3OWU0YjJmYjk4ZmI0YjFhNjU1MTVlZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4NzI1ZDJhOTA1MjQzYTA5MzAzMzFjMGFhYWFkYjBmID0gJChgPGRpdiBpZD0iaHRtbF8wODcyNWQyYTkwNTI0M2EwOTMwMzMxYzBhYWFhZGIwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S29zY2l1c3prbyBTdCAmIE5vc3RyYW5kIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM4PGJyPiBuZXQgZGVwYXJ0dXJlczogOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYWI5MmUyMjg3OWU0YjJmYjk4ZmI0YjFhNjU1MTVlZC5zZXRDb250ZW50KGh0bWxfMDg3MjVkMmE5MDUyNDNhMDkzMDMzMWMwYWFhYWRiMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWYyYzUxM2FjNTU2NDZmZGI2Y2NmYjgzMDg1M2I5ZWEuYmluZFBvcHVwKHBvcHVwXzJhYjkyZTIyODc5ZTRiMmZiOThmYjRiMWE2NTUxNWVkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYmU0MzgzMTc4OGY0N2VlYmZkNjZkZTc1ZGZmODMzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MTI4MjU4LCAtNzMuOTQ1MjQxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOGI5NDRmMWUzNWY0NDU3ODc4NTI3MTBiNDRhYWZjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViMDIwZTA2MTQ5MjQ5ODk4M2VjNDkwMDM5OWUzMzlmID0gJChgPGRpdiBpZD0iaHRtbF81YjAyMGUwNjE0OTI0OTg5ODNlYzQ5MDAzOTllMzM5ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+S29zY2l1c3prbyBTdCAmIFRvbXBraW5zIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogODEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTYxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4Yjk0NGYxZTM1ZjQ0NTc4Nzg1MjcxMGI0NGFhZmM2LnNldENvbnRlbnQoaHRtbF81YjAyMGUwNjE0OTI0OTg5ODNlYzQ5MDAzOTllMzM5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYmU0MzgzMTc4OGY0N2VlYmZkNjZkZTc1ZGZmODMzYi5iaW5kUG9wdXAocG9wdXBfZjhiOTQ0ZjFlMzVmNDQ1Nzg3ODUyNzEwYjQ0YWFmYzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkYjM3ZGE3MjA2NDQxMjdhOGI0YmJhNThhNzIwMzdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjkyMzcwNzQsIC03My45MzcwNTQyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyMTU3MzYzY2I4MDQ4MzRhODJjMGQ2Y2Y4MjA2MTkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI0ZjQ2NTRiMTIxNDIzYmI1Y2JkYjlhMDQ5ZDFjYTAgPSAkKGA8ZGl2IGlkPSJodG1sXzYyNGY0NjU0YjEyMTQyM2JiNWNiZGI5YTA0OWQxY2EwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5MZXdpcyBBdmUgJiBLb3NjaXVzemtvIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTIxNTczNjNjYjgwNDgzNGE4MmMwZDZjZjgyMDYxOTMuc2V0Q29udGVudChodG1sXzYyNGY0NjU0YjEyMTQyM2JiNWNiZGI5YTA0OWQxY2EwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJkYjM3ZGE3MjA2NDQxMjdhOGI0YmJhNThhNzIwMzdiLmJpbmRQb3B1cChwb3B1cF8xMjE1NzM2M2NiODA0ODM0YTgyYzBkNmNmODIwNjE5MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2M3MzFhOGU0YjdjNDAwZjliMzNhZjQzOGRmMmEwYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTMzOTgyMDAwMDAwMDQsIC03My45Mzk4NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTI1YjU4YWM5YzE4NDAzMGJlNDU3OTIyNDliMjU2YjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZTZiNGRlZWQ3N2M0YzMyYWI1MWJjY2Y2MGM0NTk4ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmU2YjRkZWVkNzdjNGMzMmFiNTFiY2NmNjBjNDU5OGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlB1bGFza2kgU3QgJiBNYXJjdXMgR2FydmV5IEJsdmQ8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjxicj4gbmV0IGRlcGFydHVyZXM6IC0xMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjViNThhYzljMTg0MDMwYmU0NTc5MjI0OWIyNTZiNS5zZXRDb250ZW50KGh0bWxfZmU2YjRkZWVkNzdjNGMzMmFiNTFiY2NmNjBjNDU5OGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2M3MzFhOGU0YjdjNDAwZjliMzNhZjQzOGRmMmEwYzIuYmluZFBvcHVwKHBvcHVwXzUyNWI1OGFjOWMxODQwMzBiZTQ1NzkyMjQ5YjI1NmI1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMGM0M2Y1N2ExNjg0MGQzYTQxZDkwNWYyNTkxY2NmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5NDI1NDAzLCAtNzMuOTQ2MjY5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjc1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjljNTMzOGJlZTI3NGE5NmEyOWUxMzUxMjBlYmMxNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2QxYjkwMWQwN2E0ZmI3OTdiODFjMjE2Mzc4MDZmNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTNkMWI5MDFkMDdhNGZiNzk3YjgxYzIxNjM3ODA2ZjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbGxvdWdoYnkgQXZlICYgVG9tcGtpbnMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjljNTMzOGJlZTI3NGE5NmEyOWUxMzUxMjBlYmMxNzAuc2V0Q29udGVudChodG1sXzEzZDFiOTAxZDA3YTRmYjc5N2I4MWMyMTYzNzgwNmY0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YwYzQzZjU3YTE2ODQwZDNhNDFkOTA1ZjI1OTFjY2ZhLmJpbmRQb3B1cChwb3B1cF9mOWM1MzM4YmVlMjc0YTk2YTI5ZTEzNTEyMGViYzE3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdhYmFhMzM2ZGE1NDRjNzhiY2E5YzRkODk1NDMyZTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTYyMjkzNywgLTczLjk0MzcxMDk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmYjYxNzE2NTM3MDRjYzA5MTdhNGJjNTEzNDRlODc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTI0N2QyYTdjNmQzNGUyOWEyMDg5MWNmZWVkYTc4NTUgPSAkKGA8ZGl2IGlkPSJodG1sX2EyNDdkMmE3YzZkMzRlMjlhMjA4OTFjZmVlZGE3ODU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaHJvb3AgQXZlICYgTXlydGxlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzxicj4gbmV0IGRlcGFydHVyZXM6IC0xLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmYjYxNzE2NTM3MDRjYzA5MTdhNGJjNTEzNDRlODc4LnNldENvbnRlbnQoaHRtbF9hMjQ3ZDJhN2M2ZDM0ZTI5YTIwODkxY2ZlZWRhNzg1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84N2FiYWEzMzZkYTU0NGM3OGJjYTljNGQ4OTU0MzJlNi5iaW5kUG9wdXAocG9wdXBfN2ZiNjE3MTY1MzcwNGNjMDkxN2E0YmM1MTM0NGU4NzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2ZTU3YWQxM2Y5NjQwNTU4MzJhZGViMWJmYTM1MTE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk1Mzk4MTcsIC03My45NDk1NDkwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWVhZGExYjZhZTE5NDYyYjljZjIzMjllZDRiNzFkMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTlkNjlkMTk4NTQ0YjRmYjE4NDk2YzVkOGRjZTQyMyA9ICQoYDxkaXYgaWQ9Imh0bWxfODE5ZDY5ZDE5ODU0NGI0ZmIxODQ5NmM1ZDhkY2U0MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk15cnRsZSBBdmUgJiBNYXJjeSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NTxicj4gbmV0IGRlcGFydHVyZXM6IDE2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlYWRhMWI2YWUxOTQ2MmI5Y2YyMzI5ZWQ0YjcxZDM1LnNldENvbnRlbnQoaHRtbF84MTlkNjlkMTk4NTQ0YjRmYjE4NDk2YzVkOGRjZTQyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNmU1N2FkMTNmOTY0MDU1ODMyYWRlYjFiZmEzNTExOS5iaW5kUG9wdXAocG9wdXBfZWVhZGExYjZhZTE5NDYyYjljZjIzMjllZDRiNzFkMzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhMGE2N2YxNTYxYjQzYWY5OTYzMzU3ZjI5NjM0ZTlhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk1MjcwMDgsIC03My45NTIzODEwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZmExMWQ1YTM5Y2I0Zjc4OWI1OTI4ZjljNzNiZDM2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjODU2MmJkODVkZDQyMWNiYTM2OWUyMmE5M2NkNGYxID0gJChgPGRpdiBpZD0iaHRtbF9mYzg1NjJiZDg1ZGQ0MjFjYmEzNjllMjJhOTNjZDRmMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9zdHJhbmQgQXZlICYgTXlydGxlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZhMTFkNWEzOWNiNGY3ODliNTkyOGY5YzczYmQzNjkuc2V0Q29udGVudChodG1sX2ZjODU2MmJkODVkZDQyMWNiYTM2OWUyMmE5M2NkNGYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlhMGE2N2YxNTYxYjQzYWY5OTYzMzU3ZjI5NjM0ZTlhLmJpbmRQb3B1cChwb3B1cF9hZmExMWQ1YTM5Y2I0Zjc4OWI1OTI4ZjljNzNiZDM2OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWFjODgxN2JjMjUwNGJhOTk3ODE1NTBlMDlhYjNkMWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTY4MTk2MywgLTczLjkzNzU2OTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwM2M2NDYxMGEzYTQ4NDA5MGRmNmNmYmUxNDJmYWQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjRmMWM5NjEwZDI5NDFlOGFmOWQ5NWJhNWQ1YTJjNWMgPSAkKGA8ZGl2IGlkPSJodG1sXzY0ZjFjOTYxMGQyOTQxZThhZjlkOTViYTVkNWEyYzVjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NeXJ0bGUgQXZlICYgTGV3aXMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogODc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDNjNjQ2MTBhM2E0ODQwOTBkZjZjZmJlMTQyZmFkMi5zZXRDb250ZW50KGh0bWxfNjRmMWM5NjEwZDI5NDFlOGFmOWQ5NWJhNWQ1YTJjNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWFjODgxN2JjMjUwNGJhOTk3ODE1NTBlMDlhYjNkMWMuYmluZFBvcHVwKHBvcHVwXzkwM2M2NDYxMGEzYTQ4NDA5MGRmNmNmYmUxNDJmYWQyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Mzc4YmJiYjZjMzM0YTlhODE5NzVlMTg0NGE1OTdjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwMDI5NTExLCAtNzMuOTUwMzIyODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzMWEzNGRmZTZhYzQzYTliODBiM2Q5MGQzYjhjZTQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGU1NTExMjhlNDAzNGQxMzlmNDM0NjIwOTQzYWQ1MTkgPSAkKGA8ZGl2IGlkPSJodG1sXzRlNTUxMTI4ZTQwMzRkMTM5ZjQzNDYyMDk0M2FkNTE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbmlvbiBBdmUgJiBXYWxsYWJvdXQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNDxicj4gbmV0IGRlcGFydHVyZXM6IDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDMxYTM0ZGZlNmFjNDNhOWI4MGIzZDkwZDNiOGNlNDAuc2V0Q29udGVudChodG1sXzRlNTUxMTI4ZTQwMzRkMTM5ZjQzNDYyMDk0M2FkNTE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzNzhiYmJiNmMzMzRhOWE4MTk3NWUxODQ0YTU5N2M0LmJpbmRQb3B1cChwb3B1cF9kMzFhMzRkZmU2YWM0M2E5YjgwYjNkOTBkM2I4Y2U0MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGI2ZjY0NjNhNWRmNDEzNWI3NTcxNzU2N2NkNjE0NzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTk1NzYwOCwgLTczLjk0NzA4NDE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOTY0MWU3MTc2OGU0NzM2YjE3NzQ3ZGFhODU1MGQzOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5NzU1NTc2NzhkOTQ0ZGViNTU1NTM0MTJiZWUxNWVjID0gJChgPGRpdiBpZD0iaHRtbF82OTc1NTU3Njc4ZDk0NGRlYjU1NTUzNDEyYmVlMTVlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG9tcGtpbnMgQXZlICYgSG9wa2lucyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDc2PGJyPiBuZXQgZGVwYXJ0dXJlczogNTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDk2NDFlNzE3NjhlNDczNmIxNzc0N2RhYTg1NTBkMzkuc2V0Q29udGVudChodG1sXzY5NzU1NTc2NzhkOTQ0ZGViNTU1NTM0MTJiZWUxNWVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhiNmY2NDYzYTVkZjQxMzViNzU3MTc1NjdjZDYxNDc3LmJpbmRQb3B1cChwb3B1cF9kOTY0MWU3MTc2OGU0NzM2YjE3NzQ3ZGFhODU1MGQzOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWZmNDIxNDMwOWRiNDA4Mjg3MmM1YzAxZTc4MmUzYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDE2NjU3LCAtNzMuOTQzNzMwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyZTI4NmNjMTliNjQzNWI4ZjgyM2ZjMDEzYmI3MDE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzA2ZDM5MTI5YzNkNDU4YWE1N2QzNGQyMThiNDg2NzYgPSAkKGA8ZGl2IGlkPSJodG1sXzcwNmQzOTEyOWMzZDQ1OGFhNTdkMzRkMjE4YjQ4Njc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9hZHdheSAmIFdoaXBwbGUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MDxicj4gbmV0IGRlcGFydHVyZXM6IC0yLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyZTI4NmNjMTliNjQzNWI4ZjgyM2ZjMDEzYmI3MDE0LnNldENvbnRlbnQoaHRtbF83MDZkMzkxMjljM2Q0NThhYTU3ZDM0ZDIxOGI0ODY3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmY0MjE0MzA5ZGI0MDgyODcyYzVjMDFlNzgyZTNiNi5iaW5kUG9wdXAocG9wdXBfNjJlMjg2Y2MxOWI2NDM1YjhmODIzZmMwMTNiYjcwMTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA3ZWEyZWZkOGJiODQ5MmRiYzQ1MzVmZjE1YmM3YTBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzAzMTcyNCwgLTczLjk0MDYzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwMWNjZjkwNWY2YTQwMDI4YzlhMzNmNDRhMDQ5OWJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTIwZWZjNjk1NmY1NGE3ZTg0OGEwNTQ5YmYzN2U5M2EgPSAkKGA8ZGl2IGlkPSJodG1sX2EyMGVmYzY5NTZmNTRhN2U4NDhhMDU0OWJmMzdlOTNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IdW1ib2xkdCBTdCAmIFZhcmV0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzAxY2NmOTA1ZjZhNDAwMjhjOWEzM2Y0NGEwNDk5YmIuc2V0Q29udGVudChodG1sX2EyMGVmYzY5NTZmNTRhN2U4NDhhMDU0OWJmMzdlOTNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3ZWEyZWZkOGJiODQ5MmRiYzQ1MzVmZjE1YmM3YTBmLmJpbmRQb3B1cChwb3B1cF9jMDFjY2Y5MDVmNmE0MDAyOGM5YTMzZjQ0YTA0OTliYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWE3YmI4MGZiZjZlNDNkNTg4MmU4YjM4ZmMwY2Y5YWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDQxMTc5MSwgLTczLjk0ODE4NTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjY4MGNhODgwNTA5NDViOWI3MWQwZWY4MDA0N2M1YjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OGY2ZmNhMmYzNjU0NDA3YTA1Yjg2NzM3OGFkYzNmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjhmNmZjYTJmMzY1NDQwN2EwNWI4NjczNzhhZGMzZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxvcmltZXIgU3QgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ4PGJyPiBuZXQgZGVwYXJ0dXJlczogMjEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjY4MGNhODgwNTA5NDViOWI3MWQwZWY4MDA0N2M1YjEuc2V0Q29udGVudChodG1sXzY4ZjZmY2EyZjM2NTQ0MDdhMDViODY3Mzc4YWRjM2Y4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVhN2JiODBmYmY2ZTQzZDU4ODJlOGIzOGZjMGNmOWFjLmJpbmRQb3B1cChwb3B1cF9iNjgwY2E4ODA1MDk0NWI5YjcxZDBlZjgwMDQ3YzViMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmIyNTZmZGVmOWM3NDI4MGJiZjQ5N2Q3YmFlOTM3YmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDUxMDkxOCwgLTczLjk0NDA3Mjc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlMjMxYzQyYWQ0MTQwNzNhNDQyMGM4YmRiOTAzMTMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI5MjA5NDhjZmQ3NDc5Njk2YmM1OGI2ZmQ5NDE2MjggPSAkKGA8ZGl2IGlkPSJodG1sXzkyOTIwOTQ4Y2ZkNzQ3OTY5NmJjNThiNmZkOTQxNjI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NY0tpYmJpbiBTdCAmIE1hbmhhdHRhbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzxicj4gbmV0IGRlcGFydHVyZXM6IC0xNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZTIzMWM0MmFkNDE0MDczYTQ0MjBjOGJkYjkwMzEzMy5zZXRDb250ZW50KGh0bWxfOTI5MjA5NDhjZmQ3NDc5Njk2YmM1OGI2ZmQ5NDE2MjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmIyNTZmZGVmOWM3NDI4MGJiZjQ5N2Q3YmFlOTM3YmIuYmluZFBvcHVwKHBvcHVwXzJlMjMxYzQyYWQ0MTQwNzNhNDQyMGM4YmRiOTAzMTMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ODdkYjJhMjBjYTU0MDliYWRhMWE2ZWFjZGRjMDZjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwNTM4MDc3LCAtNzMuOTQ5NzY1MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNDllYTlmNTFiZmY0MWE4ODY3OGZiYTFkNmY1ZjczMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0ZWI5ZWFiNmNjZDQ1YjJiOGE2YjY3NWNjY2I5NTQ4ID0gJChgPGRpdiBpZD0iaHRtbF85NGViOWVhYjZjY2Q0NWIyYjhhNmI2NzVjY2NiOTU0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Qm9lcnVtIFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNjxicj4gbmV0IGRlcGFydHVyZXM6IC0xNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDllYTlmNTFiZmY0MWE4ODY3OGZiYTFkNmY1ZjczMC5zZXRDb250ZW50KGh0bWxfOTRlYjllYWI2Y2NkNDViMmI4YTZiNjc1Y2NjYjk1NDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTg3ZGIyYTIwY2E1NDA5YmFkYTFhNmVhY2RkYzA2Y2UuYmluZFBvcHVwKHBvcHVwXzI0OWVhOWY1MWJmZjQxYTg4Njc4ZmJhMWQ2ZjVmNzMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MWM4NGZiZTk3Mzc0NjdjOWU2NThmNjljNGNiN2E1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwNTgzMzM5LCAtNzMuOTQ2NDQ1NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZDZjOWQzZTgwMjc0OTYzOTdiYTFkZGM3MjY5ZTlmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJiODEzMzc3M2JkNDRhMzhiZDVhMWUzMDMwZTQ2MzJmID0gJChgPGRpdiBpZD0iaHRtbF8yYjgxMzM3NzNiZDQ0YTM4YmQ1YTFlMzAzMGU0NjMyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGVvbmFyZCBTdCAmIEJvZXJ1bSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkNmM5ZDNlODAyNzQ5NjM5N2JhMWRkYzcyNjllOWY5LnNldENvbnRlbnQoaHRtbF8yYjgxMzM3NzNiZDQ0YTM4YmQ1YTFlMzAzMGU0NjMyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MWM4NGZiZTk3Mzc0NjdjOWU2NThmNjljNGNiN2E1Yi5iaW5kUG9wdXAocG9wdXBfZGQ2YzlkM2U4MDI3NDk2Mzk3YmExZGRjNzI2OWU5ZjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiNjhjMmY0YWM0NjRjZWZiYjZlYjhjMGZmNzMyNzhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzA2OTEyNTQsIC03My45NTQ0MTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOTdhODY4MzhiMTA0MTk5OTI1MDBmZDlkYzRiYjU1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmMjFlZWRjMzA3MzQ4MWFhYWIwMjJiOWQ2MmNlM2ZjID0gJChgPGRpdiBpZD0iaHRtbF9mZjIxZWVkYzMwNzM0ODFhYWFiMDIyYjlkNjJjZTNmYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGl2aXNpb24gQXZlICYgSG9vcGVyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzk3YTg2ODM4YjEwNDE5OTkyNTAwZmQ5ZGM0YmI1NTMuc2V0Q29udGVudChodG1sX2ZmMjFlZWRjMzA3MzQ4MWFhYWIwMjJiOWQ2MmNlM2ZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiNjhjMmY0YWM0NjRjZWZiYjZlYjhjMGZmNzMyNzhmLmJpbmRQb3B1cChwb3B1cF9jOTdhODY4MzhiMTA0MTk5OTI1MDBmZDlkYzRiYjU1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjYwMzlhYmMzNjM2NGI2ZGE4OTIwM2VkN2Y5ZTQ0MjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDc2Nzc4OCwgLTczLjk0MDE2MTcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDY1OTc0YmYwMDdhNGFiNmFkYTQxMWRlZWQ0Zjk2MzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNmU5NzhlZWUxZDA0MjcyYWFjMzNmZTVmZGRjYmUxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTZlOTc4ZWVlMWQwNDI3MmFhYzMzZmU1ZmRkY2JlMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1vbnRyb3NlIEF2ZSAmIEJ1c2h3aWNrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTIzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDY1OTc0YmYwMDdhNGFiNmFkYTQxMWRlZWQ0Zjk2MzUuc2V0Q29udGVudChodG1sX2E2ZTk3OGVlZTFkMDQyNzJhYWMzM2ZlNWZkZGNiZTEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY2MDM5YWJjMzYzNjRiNmRhODkyMDNlZDdmOWU0NDI5LmJpbmRQb3B1cChwb3B1cF9kNjU5NzRiZjAwN2E0YWI2YWRhNDExZGVlZDRmOTYzNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjliOGE4NzllY2U3NDdlNThkYTI1MWNjYzIwMjY0MjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDcwODcwMSwgLTczLjk1Nzk2NzgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTA2OGViYzRlNGJiNDM3N2FiNDRlNDZkZDkyNzVhZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZGNhOTY5ZDg3OTc0M2RiYTY1YjA0ZTQzMWZmOWYzOSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGRjYTk2OWQ4Nzk3NDNkYmE2NWIwNGU0MzFmZjlmMzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRpdmlzaW9uIEF2ZSAmIE1hcmN5IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM5PGJyPiBuZXQgZGVwYXJ0dXJlczogMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTA2OGViYzRlNGJiNDM3N2FiNDRlNDZkZDkyNzVhZDQuc2V0Q29udGVudChodG1sXzRkY2E5NjlkODc5NzQzZGJhNjViMDRlNDMxZmY5ZjM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I5YjhhODc5ZWNlNzQ3ZTU4ZGEyNTFjY2MyMDI2NDI0LmJpbmRQb3B1cChwb3B1cF81MDY4ZWJjNGU0YmI0Mzc3YWI0NGU0NmRkOTI3NWFkNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2IyNzMwN2NlZWI2NDExMTljN2IwZmZiM2EwMzRlZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDg3MDM2OCwgLTczLjk0NDg2MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MTU3MzdhNzc1MTk0MWJlYmNmOWFmYjRmYzJkOGRkMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkODkzOGVkZTU4OTQ2YzQ5YTViMjhkYThmYjJkNzk0ID0gJChgPGRpdiBpZD0iaHRtbF8wZDg5MzhlZGU1ODk0NmM0OWE1YjI4ZGE4ZmIyZDc5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2Nob2xlcyBTdCAmIE1hbmhhdHRhbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDg0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNDxicj4gbmV0IGRlcGFydHVyZXM6IC01MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MTU3MzdhNzc1MTk0MWJlYmNmOWFmYjRmYzJkOGRkMC5zZXRDb250ZW50KGh0bWxfMGQ4OTM4ZWRlNTg5NDZjNDlhNWIyOGRhOGZiMmQ3OTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2IyNzMwN2NlZWI2NDExMTljN2IwZmZiM2EwMzRlZTAuYmluZFBvcHVwKHBvcHVwXzUxNTczN2E3NzUxOTQxYmViY2Y5YWZiNGZjMmQ4ZGQwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NTMyYzU4MzMzN2I0ZTM3Yjc2ZWZlMWY0ODJlMjVmZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwODc3MDg0LCAtNzMuOTUwOTUyNTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMGJiNmY1ZWRkYmY0OTE4YTgyOWNkNWRhZGFiMDBhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5MDE5MWQ0ZmUzYzQ5OTc5NzRkMjhiOWU2Y2M4MTZkID0gJChgPGRpdiBpZD0iaHRtbF80OTAxOTFkNGZlM2M0OTk3OTc0ZDI4YjllNmNjODE2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3RhZ2cgU3QgJiBVbmlvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEyNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogODU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjBiYjZmNWVkZGJmNDkxOGE4MjljZDVkYWRhYjAwYWQuc2V0Q29udGVudChodG1sXzQ5MDE5MWQ0ZmUzYzQ5OTc5NzRkMjhiOWU2Y2M4MTZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc1MzJjNTgzMzM3YjRlMzdiNzZlZmUxZjQ4MmUyNWZlLmJpbmRQb3B1cChwb3B1cF9mMGJiNmY1ZWRkYmY0OTE4YTgyOWNkNWRhZGFiMDBhZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTkwNzhhNDE5NmM2NDBjZjg2ZDQ4MWYyYTI3MjY4ZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDkyNTU2MiwgLTczLjk1OTgyMjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZWZjNWMwZWY1OTE0Y2EzOTJkNWNkN2RkMjI2NDdhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE5ZGIzMDRlYjVjYTRhNTJhYjAwODI1NWQwYjk0NjE1ID0gJChgPGRpdiBpZD0iaHRtbF8xOWRiMzA0ZWI1Y2E0YTUyYWIwMDgyNTVkMGI5NDYxNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnJvYWR3YXkgJiBSb2VibGluZyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTIxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZWZjNWMwZWY1OTE0Y2EzOTJkNWNkN2RkMjI2NDdhOS5zZXRDb250ZW50KGh0bWxfMTlkYjMwNGViNWNhNGE1MmFiMDA4MjU1ZDBiOTQ2MTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTkwNzhhNDE5NmM2NDBjZjg2ZDQ4MWYyYTI3MjY4ZWEuYmluZFBvcHVwKHBvcHVwX2FlZmM1YzBlZjU5MTRjYTM5MmQ1Y2Q3ZGQyMjY0N2E5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzM4ZjZkNjMzZDQ0MjhiODc4YjNiYTViZDhkZTc0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMTAzNTM3LCAtNzMuOTQ3MTQzMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVkOWNiYWQ1MzE3NDY0ODkwNWExOGY4MWQ4MDViZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTVhMWUzNWM2OWI0Y2I0YjUwYjgxM2UyYWNmZDkwOSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDk1YTFlMzVjNjliNGNiNGI1MGI4MTNlMmFjZmQ5MDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxlb25hcmQgU3QgJiBHcmFuZCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTE5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3MDxicj4gbmV0IGRlcGFydHVyZXM6IC00OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNWQ5Y2JhZDUzMTc0NjQ4OTA1YTE4ZjgxZDgwNWJkMy5zZXRDb250ZW50KGh0bWxfMDk1YTFlMzVjNjliNGNiNGI1MGI4MTNlMmFjZmQ5MDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDMzOGY2ZDYzM2Q0NDI4Yjg3OGIzYmE1YmQ4ZGU3NDcuYmluZFBvcHVwKHBvcHVwX2Q1ZDljYmFkNTMxNzQ2NDg5MDVhMThmODFkODA1YmQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjYxYmQwMzc5ZmE0YTAyOTE4MTYxM2FiYzc5ODExZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcwOTM0MDAwMDAwMDAwNSwgLTczLjk1NjA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDc3ZjBmYjZkYWQ4NGQ2NmIyMWIxYmNmNjMyNzYwYTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZjk0ZjhiNzllOTU0M2ZkYjI1MTU1ZGE3MDZlMDg5YSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWY5NGY4Yjc5ZTk1NDNmZGIyNTE1NWRhNzA2ZTA4OWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlMgNCBTdCAmIFJvZG5leSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDc3ZjBmYjZkYWQ4NGQ2NmIyMWIxYmNmNjMyNzYwYTEuc2V0Q29udGVudChodG1sX2FmOTRmOGI3OWU5NTQzZmRiMjUxNTVkYTcwNmUwODlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiNjFiZDAzNzlmYTRhMDI5MTgxNjEzYWJjNzk4MTFmLmJpbmRQb3B1cChwb3B1cF8wNzdmMGZiNmRhZDg0ZDY2YjIxYjFiY2Y2MzI3NjBhMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk2N2Q2ZjFkYTVmNDRiODk0OTI5NzBhODYxZGM3NWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTE4NjMsIC03My45NDQwMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWE1YzgyODQ5NDI3NDQ5MTllZjQ1NmJlN2M4MDI2YjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTk3YzgyNGYxMjc0YjllOWQ1NGUzZTFhNmFjMWY1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTU5N2M4MjRmMTI3NGI5ZTlkNTRlM2UxYTZhYzFmNWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYWhhbSBBdmUgJiBHcmFuZCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTIzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNWM4Mjg0OTQyNzQ0OTE5ZWY0NTZiZTdjODAyNmI0LnNldENvbnRlbnQoaHRtbF8xNTk3YzgyNGYxMjc0YjllOWQ1NGUzZTFhNmFjMWY1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOTY3ZDZmMWRhNWY0NGI4OTQ5Mjk3MGE4NjFkYzc1YS5iaW5kUG9wdXAocG9wdXBfYWE1YzgyODQ5NDI3NDQ5MTllZjQ1NmJlN2M4MDI2YjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0M2ZmYTQyODRkNjRmODU5ZTcyYTc0NDI4YjU0NGI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzExNjczNTEsIC03My45NTE0MTMxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOWUxMWUzYWIzMGY0YzkxYjA2MjViMTUwNzE2M2Q5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyZDQxODU4NDJjZTRmMWRhMjIxNmFjZTQ4ZDBhOWRmID0gJChgPGRpdiBpZD0iaHRtbF85MmQ0MTg1ODQyY2U0ZjFkYTIyMTZhY2U0OGQwYTlkZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9wZSBTdCAmIFVuaW9uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTYxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Njxicj4gbmV0IGRlcGFydHVyZXM6IC05NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOWUxMWUzYWIzMGY0YzkxYjA2MjViMTUwNzE2M2Q5NC5zZXRDb250ZW50KGh0bWxfOTJkNDE4NTg0MmNlNGYxZGEyMjE2YWNlNDhkMGE5ZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzQzZmZhNDI4NGQ2NGY4NTllNzJhNzQ0MjhiNTQ0YjYuYmluZFBvcHVwKHBvcHVwXzE5ZTExZTNhYjMwZjRjOTFiMDYyNWIxNTA3MTYzZDk0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOGY1Yzk4YzViMWU0MWQxOWIxNDk3OTY4NWVhOWI1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxMjQ3NjYxLCAtNzMuOTQxMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZGI1MGU1YTk3MmM0MzNlYWU4OWRjNzg2ZGJhOWZlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhZWI3ZmM0MmNmNTQ2MmViZjE3NjcxODQxMmI3NDI5ID0gJChgPGRpdiBpZD0iaHRtbF8zYWViN2ZjNDJjZjU0NjJlYmYxNzY3MTg0MTJiNzQyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QnVzaHdpY2sgQXZlICYgUG93ZXJzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGRiNTBlNWE5NzJjNDMzZWFlODlkYzc4NmRiYTlmZWEuc2V0Q29udGVudChodG1sXzNhZWI3ZmM0MmNmNTQ2MmViZjE3NjcxODQxMmI3NDI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4ZjVjOThjNWIxZTQxZDE5YjE0OTc5Njg1ZWE5YjU3LmJpbmRQb3B1cChwb3B1cF80ZGI1MGU1YTk3MmM0MzNlYWU4OWRjNzg2ZGJhOWZlYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQ0NjhlN2RkYmQzNDZiZGFjYTMxMDA5Yzk4MTUwYTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTM0ODY1OCwgLTczLjk0NzkyNDU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTRjNzU4M2UwNDI1NDMwMmJhZjUyNmY0OWViNjcyMTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OGUwNmM5YTk4YjM0NDRiYjRkODQ3NTQ1YWYxY2RkZSA9ICQoYDxkaXYgaWQ9Imh0bWxfODhlMDZjOWE5OGIzNDQ0YmI0ZDg0NzU0NWFmMWNkZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRldm9lIFN0ICYgTGVvbmFyZCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTMyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0Yzc1ODNlMDQyNTQzMDJiYWY1MjZmNDllYjY3MjE3LnNldENvbnRlbnQoaHRtbF84OGUwNmM5YTk4YjM0NDRiYjRkODQ3NTQ1YWYxY2RkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZDQ2OGU3ZGRiZDM0NmJkYWNhMzEwMDljOTgxNTBhMi5iaW5kUG9wdXAocG9wdXBfOTRjNzU4M2UwNDI1NDMwMmJhZjUyNmY0OWViNjcyMTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyMmNjMDg5MjdmOTQyM2NhZWQ1NDU0MTBiMDU0OTI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE0NjkwMDAwMDAwMDA0LCAtNzMuOTU3MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM5ZDhmY2I4YjM3NGU2M2I0MzNlNGJjMzQ5NGYyZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYWM0NDRlZmQ2MWE0YzU2YmViNDczNDgwMDU2NTkxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmFjNDQ0ZWZkNjFhNGM1NmJlYjQ3MzQ4MDA1NjU5MTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJvZWJsaW5nIFN0ICYgTiA0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwNTxicj4gbmV0IGRlcGFydHVyZXM6IC0zLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljOWQ4ZmNiOGIzNzRlNjNiNDMzZTRiYzM0OTRmMmZjLnNldENvbnRlbnQoaHRtbF9mYWM0NDRlZmQ2MWE0YzU2YmViNDczNDgwMDU2NTkxNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MjJjYzA4OTI3Zjk0MjNjYWVkNTQ1NDEwYjA1NDkyOC5iaW5kUG9wdXAocG9wdXBfOWM5ZDhmY2I4YjM3NGU2M2I0MzNlNGJjMzQ5NGYyZmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiYjkxY2JiODg4NTRkMzQ5ZTcyODRjMTk3Y2MwOTQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE1MTQzLCAtNzMuOTQ0NTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lOTdkNjkzNjIxMWM0MmNiODI3YmFlMGUwMjY4ZmYwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllNWYxZWExNmRiNDQzOTI5ZjgxOWEwYTk4ZmFiY2EyID0gJChgPGRpdiBpZD0iaHRtbF85ZTVmMWVhMTZkYjQ0MzkyOWY4MTlhMGE5OGZhYmNhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JhaGFtIEF2ZSAmIENvbnNlbHllYSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTM0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzI8YnI+IG5ldCBkZXBhcnR1cmVzOiAzOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTdkNjkzNjIxMWM0MmNiODI3YmFlMGUwMjY4ZmYwZC5zZXRDb250ZW50KGh0bWxfOWU1ZjFlYTE2ZGI0NDM5MjlmODE5YTBhOThmYWJjYTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWJiOTFjYmI4ODg1NGQzNDllNzI4NGMxOTdjYzA5NDcuYmluZFBvcHVwKHBvcHVwX2U5N2Q2OTM2MjExYzQyY2I4MjdiYWUwZTAyNjhmZjBkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMGRiZDlkYmM5N2U0MTk4YTc2ZTAwNjA3Nzk1OWYwYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNDEzMzExLCAtNzMuOTUyMzQzODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWI3MDc3MWRiNzBlNGRmZjgxNmJkYmZjNDQwMzA5OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNDRhYmU3ZDQyZjQ0Njk0ODIyMjIyZDBjYjIzMTdmNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTQ0YWJlN2Q0MmY0NDY5NDgyMjIyMmQwY2IyMzE3ZjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1ldHJvcG9saXRhbiBBdmUgJiBNZWVrZXIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNDMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwMjxicj4gbmV0IGRlcGFydHVyZXM6IC00MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YjcwNzcxZGI3MGU0ZGZmODE2YmRiZmM0NDAzMDk5YS5zZXRDb250ZW50KGh0bWxfYTQ0YWJlN2Q0MmY0NDY5NDgyMjIyMmQwY2IyMzE3ZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzBkYmQ5ZGJjOTdlNDE5OGE3NmUwMDYwNzc5NTlmMGMuYmluZFBvcHVwKHBvcHVwXzliNzA3NzFkYjcwZTRkZmY4MTZiZGJmYzQ0MDMwOTlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MmE3MzcxYTVlN2U0N2JmOTUwMzA0NmYyNjE4OTJiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxNjA3NTEsIC03My45NTIwMjkwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkMGU1NDY2OWViNDRkMTY5ODU2MWNjNzU2YmVjYWEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTEyNTRhNzZmZmJiNGVjYThhODgwYTA0YzNlMmZhOTkgPSAkKGA8ZGl2IGlkPSJodG1sXzkxMjU0YTc2ZmZiYjRlY2E4YTg4MGEwNGMzZTJmYTk5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbmlvbiBBdmUgJiBKYWNrc29uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQwZTU0NjY5ZWI0NGQxNjk4NTYxY2M3NTZiZWNhYTIuc2V0Q29udGVudChodG1sXzkxMjU0YTc2ZmZiYjRlY2E4YTg4MGEwNGMzZTJmYTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUyYTczNzFhNWU3ZTQ3YmY5NTAzMDQ2ZjI2MTg5MmIwLmJpbmRQb3B1cChwb3B1cF84ZDBlNTQ2NjllYjQ0ZDE2OTg1NjFjYzc1NmJlY2FhMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTI5MTVkYjU0OGZkNDIzNDg1ZmU2ZjU2ODdlNDcxMjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTczMTg0MDM4NTU3ODUsIC03My45NDgyMDIxMzMxNzg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODRjMWY1MmVhZTJkNGJmMzkwM2JhYzYxNzI5OTAyNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZjdjODBlNmMwNzg0YTljOGYwNzRmMjFkOTZkNWNhOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmY3YzgwZTZjMDc4NGE5YzhmMDc0ZjIxZDk2ZDVjYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxlb25hcmQgU3QgJiBNZWVrZXIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODRjMWY1MmVhZTJkNGJmMzkwM2JhYzYxNzI5OTAyNTguc2V0Q29udGVudChodG1sX2ZmN2M4MGU2YzA3ODRhOWM4ZjA3NGYyMWQ5NmQ1Y2E5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEyOTE1ZGI1NDhmZDQyMzQ4NWZlNmY1Njg3ZTQ3MTI0LmJpbmRQb3B1cChwb3B1cF84NGMxZjUyZWFlMmQ0YmYzOTAzYmFjNjE3Mjk5MDI1OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzUxYzQ2YjQwNDBjNDkzZDg0ODQyZmZmMmI5ZDhmZGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTc3NDU5MiwgLTczLjk1NjAwMDk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjU2ZTg4MGY4ZGU0MzNkYTRiMDg4NjE1NmJlMmE1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1N2JlNGQwMWE4NTRhY2M4ZWMxMjQxMmRkZmZmN2Y2ID0gJChgPGRpdiBpZD0iaHRtbF8wNTdiZTRkMDFhODU0YWNjOGVjMTI0MTJkZGZmZjdmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TiA4IFN0ICYgRHJpZ2dzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjYyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI1NmU4ODBmOGRlNDMzZGE0YjA4ODYxNTZiZTJhNTcuc2V0Q29udGVudChodG1sXzA1N2JlNGQwMWE4NTRhY2M4ZWMxMjQxMmRkZmZmN2Y2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc1MWM0NmI0MDQwYzQ5M2Q4NDg0MmZmZjJiOWQ4ZmRlLmJpbmRQb3B1cChwb3B1cF8xYjU2ZTg4MGY4ZGU0MzNkYTRiMDg4NjE1NmJlMmE1NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTg1YWQzZjZmNDljNGYxN2FjOGVjZDQ0NjJiZmNmMDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTc2NCwgLTczLjk0ODgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWE4Nzg2Y2Y0NWMyNDBiYjlhMWI2MmEzYTE2NzIzZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZGM2ZGQxZmM0Mzk0Yzc4OTI2NGI3ZjU0YWM3YzY2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYmRjNmRkMWZjNDM5NGM3ODkyNjRiN2Y1NGFjN2M2NmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkZyb3N0IFN0ICYgTWVla2VyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWE4Nzg2Y2Y0NWMyNDBiYjlhMWI2MmEzYTE2NzIzZDYuc2V0Q29udGVudChodG1sX2JkYzZkZDFmYzQzOTRjNzg5MjY0YjdmNTRhYzdjNjZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE4NWFkM2Y2ZjQ5YzRmMTdhYzhlY2Q0NDYyYmZjZjA5LmJpbmRQb3B1cChwb3B1cF9lYTg3ODZjZjQ1YzI0MGJiOWExYjYyYTNhMTY3MjNkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzgzOTkzMzUyOTcxNGVkM2EyYmZhMjc5MDJjMTcwYmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkwMDk1LCAtNzMuOTU4NTI1MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjFmMDJiNjczMzI0MWRiYjg5MmYyNDM0YzJjZDlhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FmNmExZTFlNjEzNzQxZWI4YjQ2Njc4ZjJhM2NjOTI2ID0gJChgPGRpdiBpZD0iaHRtbF9hZjZhMWUxZTYxMzc0MWViOGI0NjY3OGYyYTNjYzkyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVycnkgU3QgJiBOIDggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTgxPGJyPiBuZXQgZGVwYXJ0dXJlczogMjcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTYxZjAyYjY3MzMyNDFkYmI4OTJmMjQzNGMyY2Q5YWMuc2V0Q29udGVudChodG1sX2FmNmExZTFlNjEzNzQxZWI4YjQ2Njc4ZjJhM2NjOTI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc4Mzk5MzM1Mjk3MTRlZDNhMmJmYTI3OTAyYzE3MGJmLmJpbmRQb3B1cChwb3B1cF8xNjFmMDJiNjczMzI0MWRiYjg5MmYyNDM0YzJjZDlhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2Q4MzZmMzJjM2Q2NGE0ZTliNDE2Y2Q5NTNhMWM2ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTc0NTE2OSwgLTczLjk1ODUwOTM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDJlMDJmOTBkMmM0NTRkODYwYWY0ZTgzNGE5YzBiMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkYTRjMTAwNjMwMzQwOGFiZmRjNmM0OTZlMmEzNmU1ID0gJChgPGRpdiBpZD0iaHRtbF9jZGE0YzEwMDYzMDM0MDhhYmZkYzZjNDk2ZTJhMzZlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TiA2IFN0ICYgQmVkZm9yZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI4Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDM4PGJyPiBuZXQgZGVwYXJ0dXJlczogMTUyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMmUwMmY5MGQyYzQ1NGQ4NjBhZjRlODM0YTljMGIzLnNldENvbnRlbnQoaHRtbF9jZGE0YzEwMDYzMDM0MDhhYmZkYzZjNDk2ZTJhMzZlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZDgzNmYzMmMzZDY0YTRlOWI0MTZjZDk1M2ExYzZkYy5iaW5kUG9wdXAocG9wdXBfMDAyZTAyZjkwZDJjNDU0ZDg2MGFmNGU4MzRhOWMwYjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2MDNjY2JjM2Y1NjRjNzZiMmI3NGZmM2UxZTllMjk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE2OTgxMSwgLTczLjk0NDg1OTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyOTdiODlkZDc1NTRjZjI5Yjg4MzBmMzEwZTM0OThkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjI0YWY2NDIyYjRiNDM2OGI1N2VmNzZiNWJkNGU3MTUgPSAkKGA8ZGl2IGlkPSJodG1sXzIyNGFmNjQyMmI0YjQzNjhiNTdlZjc2YjViZDRlNzE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFoYW0gQXZlICYgV2l0aGVycyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyOTdiODlkZDc1NTRjZjI5Yjg4MzBmMzEwZTM0OThkLnNldENvbnRlbnQoaHRtbF8yMjRhZjY0MjJiNGI0MzY4YjU3ZWY3NmI1YmQ0ZTcxNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNjAzY2NiYzNmNTY0Yzc2YjJiNzRmZjNlMWU5ZTI5NS5iaW5kUG9wdXAocG9wdXBfNTI5N2I4OWRkNzU1NGNmMjliODgzMGYzMTBlMzQ5OGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExNWI3NzE3NWU1YjRiNTRhNGQxZGM1ODdkZGQ5NGE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE5MjkzMDEsIC03My45NDUwMDM3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyMzk5YzlkY2MyNzQ0ZmY5OTYyZTc5ZmE0OTA3NTMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWE4YzdkY2U0MjcyNGI3ZWFmYThiZmNiYjE1NzA4OTQgPSAkKGA8ZGl2IGlkPSJodG1sXzlhOGM3ZGNlNDI3MjRiN2VhZmE4YmZjYmIxNTcwODk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFoYW0gQXZlICYgSGVyYmVydCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTMwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyMzk5YzlkY2MyNzQ0ZmY5OTYyZTc5ZmE0OTA3NTMyLnNldENvbnRlbnQoaHRtbF85YThjN2RjZTQyNzI0YjdlYWZhOGJmY2JiMTU3MDg5NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMTViNzcxNzVlNWI0YjU0YTRkMWRjNTg3ZGRkOTRhNi5iaW5kUG9wdXAocG9wdXBfMDIzOTljOWRjYzI3NDRmZjk5NjJlNzlmYTQ5MDc1MzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiYzBjNTRlNzQ3MzRiYzc4OTMyNzhiYjc3ZGU0OWE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE5MjQsIC03My45NTI0MTk5OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZmEzZDk1MTgyMjU0ZmMzOGQyYTU1ZjNmM2E4NTk0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkNTY3ZmYyMzllOTRlMjI4OGMxMDEwMmU0YzM0ODE3ID0gJChgPGRpdiBpZD0iaHRtbF80ZDU2N2ZmMjM5ZTk0ZTIyODhjMTAxMDJlNGMzNDgxNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VW5pb24gQXZlICYgTiAxMiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTY3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Njxicj4gbmV0IGRlcGFydHVyZXM6IC0xMDEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmZhM2Q5NTE4MjI1NGZjMzhkMmE1NWYzZjNhODU5NDMuc2V0Q29udGVudChodG1sXzRkNTY3ZmYyMzllOTRlMjI4OGMxMDEwMmU0YzM0ODE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NiYzBjNTRlNzQ3MzRiYzc4OTMyNzhiYjc3ZGU0OWE4LmJpbmRQb3B1cChwb3B1cF82ZmEzZDk1MTgyMjU0ZmMzOGQyYTU1ZjNmM2E4NTk0MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWVkZGUwYWY2MTc2NGIxMzhkYTg4NjUxM2JhM2NiM2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MTkyOCwgLTczLjk0ODYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzVhMGY2NjdkNDFiNGYyMTgyNzk1YmNkMjcwMDcyNmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YzE4YzUwNGRjODE0ZWY5ODg5ZDhiODUwZDBiNzE3ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWMxOGM1MDRkYzgxNGVmOTg4OWQ4Yjg1MGQwYjcxN2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkxlb25hcmQgU3QgJiBCYXlhcmQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzOTxicj4gbmV0IGRlcGFydHVyZXM6IC0xOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNWEwZjY2N2Q0MWI0ZjIxODI3OTViY2QyNzAwNzI2Zi5zZXRDb250ZW50KGh0bWxfOWMxOGM1MDRkYzgxNGVmOTg4OWQ4Yjg1MGQwYjcxN2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWVkZGUwYWY2MTc2NGIxMzhkYTg4NjUxM2JhM2NiM2UuYmluZFBvcHVwKHBvcHVwX2M1YTBmNjY3ZDQxYjRmMjE4Mjc5NWJjZDI3MDA3MjZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YTJjNTA0NzQ3NDM0NzI2ODZjMTQzZjk4NjA1ZmI0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMTUyMjQwMzM5MzAzLCAtNzMuOTQ4OTgyNjU2MDAyMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hODZjNTBhNTMwMDk0ZjgyODVlNTE4OTJiMDc0YTBiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1ZGZmYTVmMDY4YzQ0NDdhMTdlMmQ4ZGJmZWUwMGJkID0gJChgPGRpdiBpZD0iaHRtbF9kNWRmZmE1ZjA2OGM0NDQ3YTE3ZTJkOGRiZmVlMDBiZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGVvbmFyZCBTdCAmIE1hbmhhdHRhbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNTxicj4gbmV0IGRlcGFydHVyZXM6IC0xNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hODZjNTBhNTMwMDk0ZjgyODVlNTE4OTJiMDc0YTBiZi5zZXRDb250ZW50KGh0bWxfZDVkZmZhNWYwNjhjNDQ0N2ExN2UyZDhkYmZlZTAwYmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWEyYzUwNDc0NzQzNDcyNjg2YzE0M2Y5ODYwNWZiNGUuYmluZFBvcHVwKHBvcHVwX2E4NmM1MGE1MzAwOTRmODI4NWU1MTg5MmIwNzRhMGJmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTljMDU3MWNhODI0NjAwODEzNzA4MGI2MTEwNTg4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNDgxMjU2NDQwMDE3NSwgLTczLjk0NzUyNjIxNjUwNjk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjMjQ2OGI3ZmU1ZTRkNjA5ODNlNGFmYWFkZGFlMzI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDIxYTA4Y2VjYzQ0NDhlMThjM2E3NjFjZjZhYTMxNzcgPSAkKGA8ZGl2IGlkPSJodG1sXzQyMWEwOGNlY2M0NDQ4ZTE4YzNhNzYxY2Y2YWEzMTc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OYXNzYXUgQXZlICYgTmV3ZWxsIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTUxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBjMjQ2OGI3ZmU1ZTRkNjA5ODNlNGFmYWFkZGFlMzI5LnNldENvbnRlbnQoaHRtbF80MjFhMDhjZWNjNDQ0OGUxOGMzYTc2MWNmNmFhMzE3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTljMDU3MWNhODI0NjAwODEzNzA4MGI2MTEwNTg4Ny5iaW5kUG9wdXAocG9wdXBfMGMyNDY4YjdmZTVlNGQ2MDk4M2U0YWZhYWRkYWUzMjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlOWFjMTA3NDRjOTRmNDU4OTI3YjMwMzI5NWNiNTU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIwNzk4MjEsIC03My45NTQ4NDcxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNGJlY2ZiZjU2NzQ0NWUzODc2M2RjYmE0NWZmOTRkNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjYWE4ODQ4ZGRhMDRlYzA5YjgwZWJiYTc0M2QyMjkwID0gJChgPGRpdiBpZD0iaHRtbF8wY2FhODg0OGRkYTA0ZWMwOWI4MGViYmE3NDNkMjI5MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TiAxMiBTdCAmIEJlZGZvcmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTI5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0YmVjZmJmNTY3NDQ1ZTM4NzYzZGNiYTQ1ZmY5NGQ2LnNldENvbnRlbnQoaHRtbF8wY2FhODg0OGRkYTA0ZWMwOWI4MGViYmE3NDNkMjI5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZTlhYzEwNzQ0Yzk0ZjQ1ODkyN2IzMDMyOTVjYjU1Ny5iaW5kUG9wdXAocG9wdXBfMTRiZWNmYmY1Njc0NDVlMzg3NjNkY2JhNDVmZjk0ZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZiMGNiNTYwNDllNTQyZWM5NzIxZTQwZDRkMThmOGRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIxNzkxMzQsIC03My45NTA0MTU0MDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmMDBjNTY5ZjFhNTQ0ODZiNzI5YzA1YzIwMTU1ODFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzFjMmM5Y2UwZTk5NGJiOGJmOGQzNjM4NzcwMWU3NTkgPSAkKGA8ZGl2IGlkPSJodG1sXzcxYzJjOWNlMGU5OTRiYjhiZjhkMzYzODc3MDFlNzU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EcmlnZ3MgQXZlICYgTG9yaW1lciBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTI2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmMDBjNTY5ZjFhNTQ0ODZiNzI5YzA1YzIwMTU1ODFjLnNldENvbnRlbnQoaHRtbF83MWMyYzljZTBlOTk0YmI4YmY4ZDM2Mzg3NzAxZTc1OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YjBjYjU2MDQ5ZTU0MmVjOTcyMWU0MGQ0ZDE4ZjhkZC5iaW5kUG9wdXAocG9wdXBfNmYwMGM1NjlmMWE1NDQ4NmI3MjljMDVjMjAxNTU4MWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4NjQzMTNkOWZlNjQxMjNhMTJhNDA0NGQ5YTg5NzczID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIxNTMyNjcsIC03My45NTc4MjM1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ODAyNGU3MzBjODc0OWVjOGQ5MWE3M2YyZDE4YzExMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljNjg3MzY3OGRhMTQ2N2Q4NzFkZjg5NmUyMDIxNWY5ID0gJChgPGRpdiBpZD0iaHRtbF85YzY4NzM2NzhkYTE0NjdkODcxZGY4OTZlMjAyMTVmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TiAxMSBTdCAmIFd5dGhlIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTIzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4MDI0ZTczMGM4NzQ5ZWM4ZDkxYTczZjJkMThjMTEwLnNldENvbnRlbnQoaHRtbF85YzY4NzM2NzhkYTE0NjdkODcxZGY4OTZlMjAyMTVmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ODY0MzEzZDlmZTY0MTIzYTEyYTQwNDRkOWE4OTc3My5iaW5kUG9wdXAocG9wdXBfODgwMjRlNzMwYzg3NDllYzhkOTFhNzNmMmQxOGMxMTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3YmQ1ODYxNGEzNDQ3MmZiYWZkOWJmNDQxYWIyYjM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI0MDU1LCAtNzMuOTU1NzM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTRlNjdlMDIxYjc5NDJhNjlmNGViNTk2ZDFmYTUyZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NmQ3ODMzODhhOWM0MGQxYjM4MjUzMWU3YWUzYjY0MSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTZkNzgzMzg4YTljNDBkMWIzODI1MzFlN2FlM2I2NDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gMTUgU3QgJiBXeXRoZSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMjxicj4gbmV0IGRlcGFydHVyZXM6IC0xMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNGU2N2UwMjFiNzk0MmE2OWY0ZWI1OTZkMWZhNTJkOS5zZXRDb250ZW50KGh0bWxfNTZkNzgzMzg4YTljNDBkMWIzODI1MzFlN2FlM2I2NDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjdiZDU4NjE0YTM0NDcyZmJhZmQ5YmY0NDFhYjJiMzQuYmluZFBvcHVwKHBvcHVwX2U0ZTY3ZTAyMWI3OTQyYTY5ZjRlYjU5NmQxZmE1MmQ5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjg1Y2E4YTg1YTI0MWNlYWY1OTUyYzAxNDZiZTMzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyMzI1LCAtNzMuOTQzMDgwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWRhYTA0YmJmZjgyNDkzY2I5ZjYwYjk4ZTRkY2NlNjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZmQ2NWUxMzA2N2I0OTdkODE4ZmE2Mzc4YzQ2ODdhYSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2ZkNjVlMTMwNjdiNDk3ZDgxOGZhNjM3OGM0Njg3YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRyaWdncyBBdmUgJiBOIEhlbnJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDc3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTgxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkYWEwNGJiZmY4MjQ5M2NiOWY2MGI5OGU0ZGNjZTYyLnNldENvbnRlbnQoaHRtbF83ZmQ2NWUxMzA2N2I0OTdkODE4ZmE2Mzc4YzQ2ODdhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYjg1Y2E4YTg1YTI0MWNlYWY1OTUyYzAxNDZiZTMzYS5iaW5kUG9wdXAocG9wdXBfZWRhYTA0YmJmZjgyNDkzY2I5ZjYwYjk4ZTRkY2NlNjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY2MGQ2YzUyNzFlNTRkYWU5MzZlNGE1ZjdlNTkwZWZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIzMTE2NTEsIC03My45NTIxMjMyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZGRmNDQ5YjRkMmQ0YjhhOTcxOWRmZjhkNDdlMDJkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0NmY0ZTFmYWY5NDQ1NDNiZmVmZTdhODAyMDA2YTdhID0gJChgPGRpdiBpZD0iaHRtbF85NDZmNGUxZmFmOTQ0NTQzYmZlZmU3YTgwMjAwNmE3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVkZm9yZCBBdmUgJiBOYXNzYXUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDIyMDxicj4gbmV0IGRlcGFydHVyZXM6IC0xNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZGRmNDQ5YjRkMmQ0YjhhOTcxOWRmZjhkNDdlMDJkNC5zZXRDb250ZW50KGh0bWxfOTQ2ZjRlMWZhZjk0NDU0M2JmZWZlN2E4MDIwMDZhN2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjYwZDZjNTI3MWU1NGRhZTkzNmU0YTVmN2U1OTBlZmUuYmluZFBvcHVwKHBvcHVwX2ZkZGY0NDliNGQyZDRiOGE5NzE5ZGZmOGQ0N2UwMmQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNDE2NjNjZDc5NGI0ODZjODIwNWMzMTAyNWY1YzVjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNTU3MDAwMDAwMDAwNSwgLTczLjk0NDM0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmFlNWY0ZDZiNzgxNGMxMzhhOTE1NjY4ZWYyZmEwOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZWI0YzMyNzYxMmI0YjkyYTk2ZWJmZGZkZTNmYmQ2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWViNGMzMjc2MTJiNGI5MmE5NmViZmRmZGUzZmJkNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5hc3NhdSBBdmUgJiBSdXNzZWxsIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyNjxicj4gbmV0IGRlcGFydHVyZXM6IC04NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYWU1ZjRkNmI3ODE0YzEzOGE5MTU2NjhlZjJmYTA5NS5zZXRDb250ZW50KGh0bWxfNWViNGMzMjc2MTJiNGI5MmE5NmViZmRmZGUzZmJkNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjQxNjYzY2Q3OTRiNDg2YzgyMDVjMzEwMjVmNWM1YzAuYmluZFBvcHVwKHBvcHVwXzJhZTVmNGQ2Yjc4MTRjMTM4YTkxNTY2OGVmMmZhMDk1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMGM2MjlhNGY0YTY0NTExYjM3MzUwODMzZjYyNDg0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNjA2LCAtNzMuOTU2MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOTIyODVjZGEyZmU0Mzg5OWY0NzRhZWExZWU5MDU5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllZjQyMTQyMDRhYzQ2ODViYjBmYzU4ZTZiZDE1NjAzID0gJChgPGRpdiBpZD0iaHRtbF85ZWY0MjE0MjA0YWM0Njg1YmIwZmM1OGU2YmQxNTYwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmFua2VyIFN0ICYgTWVzZXJvbGUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5MjI4NWNkYTJmZTQzODk5ZjQ3NGFlYTFlZTkwNTlhLnNldENvbnRlbnQoaHRtbF85ZWY0MjE0MjA0YWM0Njg1YmIwZmM1OGU2YmQxNTYwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMGM2MjlhNGY0YTY0NTExYjM3MzUwODMzZjYyNDg0YS5iaW5kUG9wdXAocG9wdXBfYjkyMjg1Y2RhMmZlNDM4OTlmNDc0YWVhMWVlOTA1OWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4NGE5NGUwNmU1NDQ1NTJiNDNmYmFmZWE3YjJkMDRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI3MDg1ODQsIC03My45NTI5OTExN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhMzMzODVhZmQxMzRiNzQ4ZDUyM2I0NjA5YTVjMmU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2YyY2Q4MDYxMGZkNDA0ZDg4NmNmYjg5MDAzOGI3MGQgPSAkKGA8ZGl2IGlkPSJodG1sX2NmMmNkODA2MTBmZDQwNGQ4ODZjZmI4OTAwMzhiNzBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NZXNlcm9sZSBBdmUgJiBNYW5oYXR0YW4gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxOTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyNzxicj4gbmV0IGRlcGFydHVyZXM6IC02Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTMzMzg1YWZkMTM0Yjc0OGQ1MjNiNDYwOWE1YzJlOC5zZXRDb250ZW50KGh0bWxfY2YyY2Q4MDYxMGZkNDA0ZDg4NmNmYjg5MDAzOGI3MGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjg0YTk0ZTA2ZTU0NDU1MmI0M2ZiYWZlYTdiMmQwNGIuYmluZFBvcHVwKHBvcHVwXzRhMzMzODVhZmQxMzRiNzQ4ZDUyM2I0NjA5YTVjMmU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYWEyOGQyZmQ1NWY0ZWE4OGEzNjZhZmJmMWYyNDc1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNTg0ODI5OTk5OTk5NiwgLTczLjk1MDY0ODkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg0NjE2MGI1NmRkNGE1Zjg1MTBkOTE1MmRkZTZmODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDk3NmRjNzE3OGQ0MjRhYjUxY2EzMzViMDZmZDdmOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDQ5NzZkYzcxNzhkNDI0YWI1MWNhMzM1YjA2ZmQ3ZjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcm1hbiBBdmUgJiBMZW9uYXJkIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4NDYxNjBiNTZkZDRhNWY4NTEwZDkxNTJkZGU2ZjgxLnNldENvbnRlbnQoaHRtbF8wNDk3NmRjNzE3OGQ0MjRhYjUxY2EzMzViMDZmZDdmOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYWEyOGQyZmQ1NWY0ZWE4OGEzNjZhZmJmMWYyNDc1Ny5iaW5kUG9wdXAocG9wdXBfNTg0NjE2MGI1NmRkNGE1Zjg1MTBkOTE1MmRkZTZmODEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmN2FmZWVhOGE3MDQwYjBhNmNjYzEyODEyYjZkOGM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI5MDYsIC03My45NTc3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNC44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQ2NjE4YmMwZTdjNDc2YmE4MDZhZGFlOWE5N2ZjNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYTdmMDJmMzE2ODg0ZjExODkyNjYxODJkNGZkODc5NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZWE3ZjAyZjMxNjg4NGYxMTg5MjY2MTgyZDRmZDg3OTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pbHRvbiBTdCAmIEZyYW5rbGluIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMDEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI5Nzxicj4gbmV0IGRlcGFydHVyZXM6IDk2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0NjYxOGJjMGU3YzQ3NmJhODA2YWRhZTlhOTdmYzY5LnNldENvbnRlbnQoaHRtbF9lYTdmMDJmMzE2ODg0ZjExODkyNjYxODJkNGZkODc5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZjdhZmVlYThhNzA0MGIwYTZjY2MxMjgxMmI2ZDhjNC5iaW5kUG9wdXAocG9wdXBfNjQ2NjE4YmMwZTdjNDc2YmE4MDZhZGFlOWE5N2ZjNjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlNGNiNDJjOGEzZDRiOTNhZTFjMzU2Mzc5MWJkODE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMwMjU5OTk5OTk5OTk0LCAtNzMuOTUzOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYmIyMzExOTExMWU0ZTE3OGRlNDk0OTkzNTE5N2I2MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmZDM4ZDM0NjYzMTQ0MWU5ZGIwZGY4ZGFhZDg3ZDExID0gJChgPGRpdiBpZD0iaHRtbF85ZmQzOGQzNDY2MzE0NDFlOWRiMGRmOGRhYWQ4N2QxMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlZW5wb2ludCBBdmUgJiBNYW5oYXR0YW4gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxODMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExNTxicj4gbmV0IGRlcGFydHVyZXM6IC02OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYmIyMzExOTExMWU0ZTE3OGRlNDk0OTkzNTE5N2I2MS5zZXRDb250ZW50KGh0bWxfOWZkMzhkMzQ2NjMxNDQxZTlkYjBkZjhkYWFkODdkMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmU0Y2I0MmM4YTNkNGI5M2FlMWMzNTYzNzkxYmQ4MTcuYmluZFBvcHVwKHBvcHVwXzJiYjIzMTE5MTExZTRlMTc4ZGU0OTQ5OTM1MTk3YjYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zODMyY2ZiNGVlMGQ0NGNlYjE5ZDM5MmIwZmNmNDJlMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMTY1MTQxLCAtNzMuOTYxNjE4OTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MWI5NDQ0MWRjMjk0NGM3OWZiMGU3Y2Y1NmY1ODAyZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAyZTVlODQ0YmFkODQyNDNhNzQxZDJiNTFmYjRhOTM5ID0gJChgPGRpdiBpZD0iaHRtbF8wMmU1ZTg0NGJhZDg0MjQzYTc0MWQyYjUxZmI0YTkzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SW5kaWEgU3QgJiBFYXN0IFJpdmVyPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMS4wPGJyPiB0b3RhbCBhcnJpdmFsczogODA8YnI+IG5ldCBkZXBhcnR1cmVzOiA2OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MWI5NDQ0MWRjMjk0NGM3OWZiMGU3Y2Y1NmY1ODAyZC5zZXRDb250ZW50KGh0bWxfMDJlNWU4NDRiYWQ4NDI0M2E3NDFkMmI1MWZiNGE5MzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzgzMmNmYjRlZTBkNDRjZWIxOWQzOTJiMGZjZjQyZTEuYmluZFBvcHVwKHBvcHVwXzUxYjk0NDQxZGMyOTQ0Yzc5ZmIwZTdjZjU2ZjU4MDJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjQ1MGViZmFmY2M0MjYyOGE3NTlkYTViODM1OTRhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMjMyMTk0LCAtNzMuOTU1MDg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTdmYWUxYjBhYjQ0ZTE1ODdmZDMyODcxZWZlM2Q1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA4NmQzNTYxYjg0MzQzYjQ4MjA1OGVjMTJmNzI2YTZhID0gJChgPGRpdiBpZD0iaHRtbF8wODZkMzU2MWI4NDM0M2I0ODIwNThlYzEyZjcyNmE2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SW5kaWEgU3QgJiBNYW5oYXR0YW4gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwODxicj4gbmV0IGRlcGFydHVyZXM6IC02OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTdmYWUxYjBhYjQ0ZTE1ODdmZDMyODcxZWZlM2Q1Ny5zZXRDb250ZW50KGh0bWxfMDg2ZDM1NjFiODQzNDNiNDgyMDU4ZWMxMmY3MjZhNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2I0NTBlYmZhZmNjNDI2MjhhNzU5ZGE1YjgzNTk0YWEuYmluZFBvcHVwKHBvcHVwXzM1N2ZhZTFiMGFiNDRlMTU4N2ZkMzI4NzFlZmUzZDU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NDg5ZDc1MmU0MGM0ZTQ0YTJkYzVhNGYwYjAyNGEwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczMjY1OTk5OTk5OTk5NiwgLTczLjk1ODI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1MmEyMzAwM2RkNzRlNDZiYWZmZjRhNmQzN2VmNzhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTM5ZWU5ODQ1YzI5NDdjMWE3OGJkOTVhYjI2MTBhMWUgPSAkKGA8ZGl2IGlkPSJodG1sXzkzOWVlOTg0NWMyOTQ3YzFhNzhiZDk1YWIyNjEwYTFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IdXJvbiBTdCAmIEZyYW5rbGluIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNTJhMjMwMDNkZDc0ZTQ2YmFmZmY0YTZkMzdlZjc4ZS5zZXRDb250ZW50KGh0bWxfOTM5ZWU5ODQ1YzI5NDdjMWE3OGJkOTVhYjI2MTBhMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQ4OWQ3NTJlNDBjNGU0NGEyZGM1YTRmMGIwMjRhMDEuYmluZFBvcHVwKHBvcHVwX2M1MmEyMzAwM2RkNzRlNDZiYWZmZjRhNmQzN2VmNzhlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZTlhYzQ2ODYwNzc0YzkwYTFmZmE2MTFlNzgyYTI0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNTY0MDAwMDAwMDAwNCwgLTczLjk1ODY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4NGRjMzk0YjFhNjQ3NzQ4N2U4OTkxMzc2MjljODNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzRlZDk5MmNkZDljNGFkMDkzMmY0NTc2ZWQ1NmJjNTQgPSAkKGA8ZGl2IGlkPSJodG1sX2M0ZWQ5OTJjZGQ5YzRhZDA5MzJmNDU3NmVkNTZiYzU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GcmFua2xpbiBTdCAmIER1cG9udCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTAzLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1NDxicj4gbmV0IGRlcGFydHVyZXM6IC00OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zODRkYzM5NGIxYTY0Nzc0ODdlODk5MTM3NjI5YzgzYy5zZXRDb250ZW50KGh0bWxfYzRlZDk5MmNkZDljNGFkMDkzMmY0NTc2ZWQ1NmJjNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmU5YWM0Njg2MDc3NGM5MGExZmZhNjExZTc4MmEyNDUuYmluZFBvcHVwKHBvcHVwXzM4NGRjMzk0YjFhNjQ3NzQ4N2U4OTkxMzc2MjljODNjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hODhiMTcwYjI1NGU0MjUyYWU5MmEyNzkxOGQ0NDFhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjczNTU1LCAtNzMuOTUyODQwMDAwMDAwMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MjliMzQ0MDI0ZDI0N2M0YjZhODYyOTkxMjMwMDk1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzYzFiYjkyMTM1MzQzMjY4MGNjZTY5ZWE4NDViOGY5ID0gJChgPGRpdiBpZD0iaHRtbF8zM2MxYmI5MjEzNTM0MzI2ODBjY2U2OWVhODQ1YjhmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWNHdWlubmVzcyBCbHZkICYgRWFnbGUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzI5YjM0NDAyNGQyNDdjNGI2YTg2Mjk5MTIzMDA5NTUuc2V0Q29udGVudChodG1sXzMzYzFiYjkyMTM1MzQzMjY4MGNjZTY5ZWE4NDViOGY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4OGIxNzBiMjU0ZTQyNTJhZTkyYTI3OTE4ZDQ0MWFlLmJpbmRQb3B1cChwb3B1cF83MjliMzQ0MDI0ZDI0N2M0YjZhODYyOTkxMjMwMDk1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmQwMjI5YWJmMDNjNDlkNWFkNDFjODYxZmFiNTFjNDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDIzMjc0NCwgLTczLjk1NDExNzQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmMDkxMjUzYmU4ZTRjZmY5MzY2ZTM1NTlhMmFlYWVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODRkNGNmYjEyOTY5NDUxMDhjNTk4ZTdhZDdkNmNiNzMgPSAkKGA8ZGl2IGlkPSJodG1sXzg0ZDRjZmIxMjk2OTQ1MTA4YzU5OGU3YWQ3ZDZjYjczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WZXJub24gQmx2ZCAmIDUwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTIxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzOTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNjkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2YwOTEyNTNiZThlNGNmZjkzNjZlMzU1OWEyYWVhZWYuc2V0Q29udGVudChodG1sXzg0ZDRjZmIxMjk2OTQ1MTA4YzU5OGU3YWQ3ZDZjYjczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZkMDIyOWFiZjAzYzQ5ZDVhZDQxYzg2MWZhYjUxYzQ0LmJpbmRQb3B1cChwb3B1cF8zZjA5MTI1M2JlOGU0Y2ZmOTM2NmUzNTU5YTJhZWFlZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWVlNjI2OWRlMzA1NDhhMmExMjc1NzFjNTgxMjIzNTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDE2MDk5OTk5OTk5OTQsIC03My45NjA0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNWZkZjUyZjk0ZjM0MWE1OGIyNzE4ZDFlNTA3Yjg4MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliODk5YTUzZjJhZTQ3NzA5NzRiNmU0OTgyOWE2YTQ5ID0gJChgPGRpdiBpZD0iaHRtbF85Yjg5OWE1M2YyYWU0NzcwOTc0YjZlNDk4MjlhNmE0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudGVyIEJsdmQgJiBCb3JkZW4gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNWZkZjUyZjk0ZjM0MWE1OGIyNzE4ZDFlNTA3Yjg4Mi5zZXRDb250ZW50KGh0bWxfOWI4OTlhNTNmMmFlNDc3MDk3NGI2ZTQ5ODI5YTZhNDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWVlNjI2OWRlMzA1NDhhMmExMjc1NzFjNTgxMjIzNTIuYmluZFBvcHVwKHBvcHVwX2M1ZmRmNTJmOTRmMzQxYTU4YjI3MThkMWU1MDdiODgyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTljNjQ2Nzc1ZDY0NmYyYWY5MjE0ZTYxMTFjYjE4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NTI0NzY4LCAtNzMuOTQ3MzMyNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlZDViM2JmMGE1NTRjNThiODlkYWIyMTE3OWUxNTdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWM3NzUxZWU2MThmNDBlNWE3ZmMzYmY0ZjJlMTI0MzYgPSAkKGA8ZGl2IGlkPSJodG1sXzFjNzc1MWVlNjE4ZjQwZTVhN2ZjM2JmNGYyZTEyNDM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5KYWNrc29uIEF2ZSAmIDQ2IFJkPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWQ1YjNiZjBhNTU0YzU4Yjg5ZGFiMjExNzllMTU3Yi5zZXRDb250ZW50KGh0bWxfMWM3NzUxZWU2MThmNDBlNWE3ZmMzYmY0ZjJlMTI0MzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjU5YzY0Njc3NWQ2NDZmMmFmOTIxNGU2MTExY2IxOGYuYmluZFBvcHVwKHBvcHVwXzRlZDViM2JmMGE1NTRjNThiODlkYWIyMTE3OWUxNTdiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjZiOTZhZjRkN2M0OTlmYmIwNjMwMDVkNDhjZTZjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NDM2MzI4NzA2Njg4LCAtNzMuOTU1ODczMjUwOTYxMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGI4MDMyOTdlMjUyNGM5ZWJmOWFiOGIwMThiODNhMTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MzI3NTYyY2NmOWI0MDI5OGViNjliYTNiY2Y4YmZkYSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTMyNzU2MmNjZjliNDAyOThlYjY5YmEzYmNmOGJmZGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjQ4IEF2ZSAmIDUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNjxicj4gbmV0IGRlcGFydHVyZXM6IC0zMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjgwMzI5N2UyNTI0YzllYmY5YWI4YjAxOGI4M2ExMy5zZXRDb250ZW50KGh0bWxfOTMyNzU2MmNjZjliNDAyOThlYjY5YmEzYmNmOGJmZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2I2Yjk2YWY0ZDdjNDk5ZmJiMDYzMDA1ZDQ4Y2U2YzguYmluZFBvcHVwKHBvcHVwXzBiODAzMjk3ZTI1MjRjOWViZjlhYjhiMDE4YjgzYTEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjFlNzY1Mjk3Y2I0NzljOWU5N2NmN2JhNTVhN2RiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NDY5NzM4LCAtNzMuOTM1NDAzNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhMjNiNGEyN2ZmOTRhN2I5Zjk5ZWI3MzNmZmJiMTA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDc3NGMzMjI4MzIyNDVhMjkzYTA3NmI4M2RhODUyZTAgPSAkKGA8ZGl2IGlkPSJodG1sX2Q3NzRjMzIyODMyMjQ1YTI5M2EwNzZiODNkYTg1MmUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4zMSBTdCAmIFRob21zb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTIzYjRhMjdmZjk0YTdiOWY5OWViNzMzZmZiYjEwNS5zZXRDb250ZW50KGh0bWxfZDc3NGMzMjI4MzIyNDVhMjkzYTA3NmI4M2RhODUyZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2IxZTc2NTI5N2NiNDc5YzllOTdjZjdiYTU1YTdkYjcuYmluZFBvcHVwKHBvcHVwXzZhMjNiNGEyN2ZmOTRhN2I5Zjk5ZWI3MzNmZmJiMTA1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NzljYTQzYjc2ZDY0NmEwYjAzZjQ0OWQ2Y2E3MzEzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NzMxLCAtNzMuOTU0NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYzFiYzZhYjdjOGU0Y2YwOWE3MTAzYzdmYTA3NjQ1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1ZjMwYTA2NWMxYTRjZmZhMGJjZGU4NmYwNjFmZWEzID0gJChgPGRpdiBpZD0iaHRtbF82NWYzMGEwNjVjMWE0Y2ZmYTBiY2RlODZmMDYxZmVhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NDYgQXZlICYgNSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTY1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Nzxicj4gbmV0IGRlcGFydHVyZXM6IC05OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYzFiYzZhYjdjOGU0Y2YwOWE3MTAzYzdmYTA3NjQ1Ny5zZXRDb250ZW50KGh0bWxfNjVmMzBhMDY1YzFhNGNmZmEwYmNkZTg2ZjA2MWZlYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTc5Y2E0M2I3NmQ2NDZhMGIwM2Y0NDlkNmNhNzMxM2YuYmluZFBvcHVwKHBvcHVwX2ZjMWJjNmFiN2M4ZTRjZjA5YTcxMDNjN2ZhMDc2NDU3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMDI1ODE2YjNiNjg0MTUyOTcxY2I0MDVkZTNjNGQ5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0NzA4NTg2LCAtNzMuOTQ5NzcyMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMzBjZTMxZTVlYzE0OTNjOTVhZDY0Yjc2ZTE0YTFmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4OTgxNmNjMWZlMzQzMGViYTQyMzQ5OWU4NjU0ZGMyID0gJChgPGRpdiBpZD0iaHRtbF81ODk4MTZjYzFmZTM0MzBlYmE0MjM0OTllODY1NGRjMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NDUgUmQgJiAxMSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogOTIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwMzxicj4gbmV0IGRlcGFydHVyZXM6IDExLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzMGNlMzFlNWVjMTQ5M2M5NWFkNjRiNzZlMTRhMWYwLnNldENvbnRlbnQoaHRtbF81ODk4MTZjYzFmZTM0MzBlYmE0MjM0OTllODY1NGRjMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMDI1ODE2YjNiNjg0MTUyOTcxY2I0MDVkZTNjNGQ5ZC5iaW5kUG9wdXAocG9wdXBfMjMwY2UzMWU1ZWMxNDkzYzk1YWQ2NGI3NmUxNGExZjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3MDNkODRkODFmMzRiYTM5MmZhNGJjYzQ3NzYwN2FhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ3MTgyMzQsIC03My45NDMyNjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAyLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNjdkMWVjMDFhNjI0YzVjYWMxZDBjMWZhYjFkYjJiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzMzVjZWUzOWYyNzRhYmVhNzFiYTczZmM5YWUyMDYxID0gJChgPGRpdiBpZD0iaHRtbF81MzM1Y2VlMzlmMjc0YWJlYTcxYmE3M2ZjOWFlMjA2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NDQgRHIgJiBKYWNrc29uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyNTxicj4gbmV0IGRlcGFydHVyZXM6IDUyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2N2QxZWMwMWE2MjRjNWNhYzFkMGMxZmFiMWRiMmI3LnNldENvbnRlbnQoaHRtbF81MzM1Y2VlMzlmMjc0YWJlYTcxYmE3M2ZjOWFlMjA2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NzAzZDg0ZDgxZjM0YmEzOTJmYTRiY2M0Nzc2MDdhYS5iaW5kUG9wdXAocG9wdXBfMzY3ZDFlYzAxYTYyNGM1Y2FjMWQwYzFmYWIxZGIyYjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiZTJjZjA4MTJhMjQ5MDViYzJmZDE5ODEyY2E0MTdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzQ5NjYsIC03My45NTIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjA3MzA0YTJhMzk2NDMyNzgxMTllYzVlZWE5NmY0NmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTkxYjM0YWJmM2Q0YWJlOGY0ODIwNzU1ZmRhMGZmMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTU5MWIzNGFiZjNkNGFiZThmNDgyMDc1NWZkYTBmZjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkgU3QgJiA0NCBSZDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwNzMwNGEyYTM5NjQzMjc4MTE5ZWM1ZWVhOTZmNDZhLnNldENvbnRlbnQoaHRtbF8xNTkxYjM0YWJmM2Q0YWJlOGY0ODIwNzU1ZmRhMGZmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYmUyY2YwODEyYTI0OTA1YmMyZmQxOTgxMmNhNDE3YS5iaW5kUG9wdXAocG9wdXBfMjA3MzA0YTJhMzk2NDMyNzgxMTllYzVlZWE5NmY0NmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyZTg3MDQwN2E5NjRhYWJiZGFhN2ZlYTM2YTAyODMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUwNTI1MzQsIC03My45NDU5NDg0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkZTU0NjgwMDkyNzRlM2FhYzFkNDJmNDgyYjZmZDU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmVjMWVlYjdlZGVkNDAyOWJjMzJjYTI2YWIxZmI1YjggPSAkKGA8ZGl2IGlkPSJodG1sXzZlYzFlZWI3ZWRlZDQwMjliYzMyY2EyNmFiMWZiNWI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4yMSBTdCAmIDQzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmRlNTQ2ODAwOTI3NGUzYWFjMWQ0MmY0ODJiNmZkNTUuc2V0Q29udGVudChodG1sXzZlYzFlZWI3ZWRlZDQwMjliYzMyY2EyNmFiMWZiNWI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyZTg3MDQwN2E5NjRhYWJiZGFhN2ZlYTM2YTAyODMwLmJpbmRQb3B1cChwb3B1cF9mZGU1NDY4MDA5Mjc0ZTNhYWMxZDQyZjQ4MmI2ZmQ1NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODFjNmRjMGQ0MjgzNDNiMGI4NTQ5NWJiY2NiNDczODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTExMDE2NSwgLTczLjk0MDczNzE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0YmNmYWFmNzQ5MzRmNDRhYjU0YWY3N2M2OGE1ZDEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTE5MzkyYWJkZjRiNDY0ZmI3YmQxNzk5ZTY5NmY4OWMgPSAkKGA8ZGl2IGlkPSJodG1sXzkxOTM5MmFiZGY0YjQ2NGZiN2JkMTc5OWU2OTZmODljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5RdWVlbnMgUGxhemEgTm9ydGggJiBDcmVzY2VudCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjMzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjRiY2ZhYWY3NDkzNGY0NGFiNTRhZjc3YzY4YTVkMTIuc2V0Q29udGVudChodG1sXzkxOTM5MmFiZGY0YjQ2NGZiN2JkMTc5OWU2OTZmODljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgxYzZkYzBkNDI4MzQzYjBiODU0OTViYmNjYjQ3MzgyLmJpbmRQb3B1cChwb3B1cF82NGJjZmFhZjc0OTM0ZjQ0YWI1NGFmNzdjNjhhNWQxMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjFmMDhhYWY0ZDUzNGIxMmE3Yzg5ZDJjOGE5MDdmMzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjcxMjg0MDM0OTU0MiwgLTczLjk2MjI0NjE3OTU4MDY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMTk2YzJkMWUwZmI0MTU5YThhZDAxZjg1MjFjODI1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmZTNlZTExYmZkMjQ4NzI5YWZhYjY5MDI5N2M2M2NlID0gJChgPGRpdiBpZD0iaHRtbF80ZmUzZWUxMWJmZDI0ODcyOWFmYWI2OTAyOTdjNjNjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA2OCBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyNjxicj4gbmV0IGRlcGFydHVyZXM6IDIwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxOTZjMmQxZTBmYjQxNTlhOGFkMDFmODUyMWM4MjVjLnNldENvbnRlbnQoaHRtbF80ZmUzZWUxMWJmZDI0ODcyOWFmYWI2OTAyOTdjNjNjZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMWYwOGFhZjRkNTM0YjEyYTdjODlkMmM4YTkwN2YzMS5iaW5kUG9wdXAocG9wdXBfMzE5NmMyZDFlMGZiNDE1OWE4YWQwMWY4NTIxYzgyNWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MTRiNjA1NmMwNjQ5M2RiOTA4NTU3NGY3N2Y5N2QwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzYzNTA1MzIsIC03My45NzEwOTI0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5ZGI0YThmMjhiMDQ0Njk4Y2U3YjQ1MjEyN2Q2MGVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWMwM2Y3N2YyMDYwNDAwNGFkZjRhN2Y5MTYyYzVkODQgPSAkKGA8ZGl2IGlkPSJodG1sXzFjMDNmNzdmMjA2MDQwMDRhZGY0YTdmOTE2MmM1ZDg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDU5IFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTY4PGJyPiBuZXQgZGVwYXJ0dXJlczogMzMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTlkYjRhOGYyOGIwNDQ2OThjZTdiNDUyMTI3ZDYwZWEuc2V0Q29udGVudChodG1sXzFjMDNmNzdmMjA2MDQwMDRhZGY0YTdmOTE2MmM1ZDg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y5MTRiNjA1NmMwNjQ5M2RiOTA4NTU3NGY3N2Y5N2QwLmJpbmRQb3B1cChwb3B1cF8xOWRiNGE4ZjI4YjA0NDY5OGNlN2I0NTIxMjdkNjBlYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWJkZDVkMGNiOTRhNDk2OTk0ZmU3YTM1MzRjYTY0YzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjMxMjU4NCwgLTczLjk2NTI2ODk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODU3ZGJiZjFhMGVhNDU4MmI0NmMwM2M4YzM5MDJkNzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZGJjNjQ4ODc2OTQ0YTIyYmMwZGYwYTZhYmY3MzE2MSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2RiYzY0ODg3Njk0NGEyMmJjMGRmMGE2YWJmNzMxNjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgQXZlICYgRSA2MiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTgzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyOTA8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMDcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU3ZGJiZjFhMGVhNDU4MmI0NmMwM2M4YzM5MDJkNzQuc2V0Q29udGVudChodG1sXzdkYmM2NDg4NzY5NDRhMjJiYzBkZjBhNmFiZjczMTYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliZGQ1ZDBjYjk0YTQ5Njk5NGZlN2EzNTM0Y2E2NGM3LmJpbmRQb3B1cChwb3B1cF84NTdkYmJmMWEwZWE0NTgyYjQ2YzAzYzhjMzkwMmQ3NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDU1OTZjNTNjYmNkNDQ5OGE5YmU0ZTAyOWQzZGZiNDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzExMjkyNywgLTczLjk1NzcyMjk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTQ2NTNjN2NhYmUwNGQ2Nzk3N2IxMDc1ZjQxYmUzNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMjNiZDNjMDkzNWI0NDU4OWU5YTc3MDI5MzA5MzNjNiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzIzYmQzYzA5MzViNDQ1ODllOWE3NzAyOTMwOTMzYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNzUgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzE5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTU2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0NjUzYzdjYWJlMDRkNjc5NzdiMTA3NWY0MWJlMzRkLnNldENvbnRlbnQoaHRtbF9jMjNiZDNjMDkzNWI0NDU4OWU5YTc3MDI5MzA5MzNjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NTU5NmM1M2NiY2Q0NDk4YTliZTRlMDI5ZDNkZmI0OS5iaW5kUG9wdXAocG9wdXBfYTQ2NTNjN2NhYmUwNGQ2Nzk3N2IxMDc1ZjQxYmUzNGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmZmQ0ZGRkZWY2MDQ1NzQ4MDg2MWY3YzdmNjU5NDlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcyODI4MTcsIC03My45NjY4NTI3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzM0ZWZlZWU2OGQzNGMwMzg0MmEwMGFkMmYwOGFmYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYmY1NzY2MzhmM2Q0N2M0YjAwMGU0MjNjZTk3YjBjYyA9ICQoYDxkaXYgaWQ9Imh0bWxfM2JmNTc2NjM4ZjNkNDdjNGIwMDBlNDIzY2U5N2IwY2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjUgQXZlICYgRSA3MyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjUzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNTc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMDQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzM0ZWZlZWU2OGQzNGMwMzg0MmEwMGFkMmYwOGFmYTAuc2V0Q29udGVudChodG1sXzNiZjU3NjYzOGYzZDQ3YzRiMDAwZTQyM2NlOTdiMGNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FmZmQ0ZGRkZWY2MDQ1NzQ4MDg2MWY3YzdmNjU5NDlkLmJpbmRQb3B1cChwb3B1cF8zMzRlZmVlZTY4ZDM0YzAzODQyYTAwYWQyZjA4YWZhMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU4YWNmZjUwMWRkNDBlNzgxMWEyNGJiMjE4ZGI1ZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzExODI4NzU0MDY1OCwgLTczLjk2NDA5NDIyMTU5MTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWU0YjY2ZTE2N2RhNGMwNmJhMDJkY2RhOTU1MDAyYzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NzQxZDQ5M2ZkMmU0MTBhOTBhYTViZTJhMDY0MTM1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzc0MWQ0OTNmZDJlNDEwYTkwYWE1YmUyYTA2NDEzNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNzIgU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZTRiNjZlMTY3ZGE0YzA2YmEwMmRjZGE5NTUwMDJjNS5zZXRDb250ZW50KGh0bWxfNzc0MWQ0OTNmZDJlNDEwYTkwYWE1YmUyYTA2NDEzNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjU4YWNmZjUwMWRkNDBlNzgxMWEyNGJiMjE4ZGI1ZmYuYmluZFBvcHVwKHBvcHVwXzFlNGI2NmUxNjdkYTRjMDZiYTAyZGNkYTk1NTAwMmM1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zM2QwMzJkMTUwNWM0NDY0OWY4YWRkN2YzNzJkZjZhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MTQwNDI2LCAtNzMuOTUzNTE2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTE1LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NWYxMWZmMDRjZDk0MWY0YjIxOThhZmQzZDNlYmNjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmZjFkMGIwZDU4ZjQ0OTJhYzA1NDIyZmU0ZDFhYWFhID0gJChgPGRpdiBpZD0iaHRtbF8xZmYxZDBiMGQ1OGY0NDkyYWMwNTQyMmZlNGQxYWFhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MSBBdmUgJiBFIDc4IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1NjYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI2Njxicj4gbmV0IGRlcGFydHVyZXM6IC0zMDAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTVmMTFmZjA0Y2Q5NDFmNGIyMTk4YWZkM2QzZWJjYzMuc2V0Q29udGVudChodG1sXzFmZjFkMGIwZDU4ZjQ0OTJhYzA1NDIyZmU0ZDFhYWFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzZDAzMmQxNTA1YzQ0NjQ5ZjhhZGQ3ZjM3MmRmNmFkLmJpbmRQb3B1cChwb3B1cF81NWYxMWZmMDRjZDk0MWY0YjIxOThhZmQzZDNlYmNjMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzc1NGI1Mjc3ODBhNGI3Yjg5NjNjYzA5MDlkMWQxYzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NjUwMDUyNSwgLTczLjk1ODE4NDkxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZjRkM2YwMWJmZjI0MmI4OTcyYzE5MmVjMjliYmY4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmNGMyZjJhMmIwZDQyM2RhMWM5YWRiOWFhOTBhZmMzID0gJChgPGRpdiBpZD0iaHRtbF8yZjRjMmYyYTJiMGQ0MjNkYTFjOWFkYjlhYTkwYWZjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MSBBdmUgJiBFIDY4IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0OTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU5Mzxicj4gbmV0IGRlcGFydHVyZXM6IDEwMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZjRkM2YwMWJmZjI0MmI4OTcyYzE5MmVjMjliYmY4Yy5zZXRDb250ZW50KGh0bWxfMmY0YzJmMmEyYjBkNDIzZGExYzlhZGI5YWE5MGFmYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzc1NGI1Mjc3ODBhNGI3Yjg5NjNjYzA5MDlkMWQxYzIuYmluZFBvcHVwKHBvcHVwXzNmNGQzZjAxYmZmMjQyYjg5NzJjMTkyZWMyOWJiZjhjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZWE4Mjc0ZTRlNWM0ZTM4YTQ4MzYxOGY3ZDNlNDdiNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2MTIyNzM5OTk5OTk5NiwgLTczLjk2MDk0MDIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjQ5MzViYmI0YTJhNGZmNDk5NzI0YzY1YjM3YzAxZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80Y2RmN2IxYjUyODQ0MDk5OWZjOGViM2MwMDAxZTc5MiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGNkZjdiMWI1Mjg0NDA5OTlmYzhlYjNjMDAwMWU3OTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEgQXZlICYgRSA2MiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTEyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTA2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0OTM1YmJiNGEyYTRmZjQ5OTcyNGM2NWIzN2MwMWQ4LnNldENvbnRlbnQoaHRtbF80Y2RmN2IxYjUyODQ0MDk5OWZjOGViM2MwMDAxZTc5Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZWE4Mjc0ZTRlNWM0ZTM4YTQ4MzYxOGY3ZDNlNDdiNi5iaW5kUG9wdXAocG9wdXBfYjQ5MzViYmI0YTJhNGZmNDk5NzI0YzY1YjM3YzAxZDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY2YzM4M2IwNDc2YTQyMDc4ZDJhOTM3NjI3OTA1MmFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc2ODI4NjM0Mzk5NjgsIC03My45NjM4ODc2OTE0OTc3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNS4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTUzM2NjODRmZGU3NDQzNDlmNWU5NTZjZDAzN2M3YzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTlhY2UwMmE2ODg0NTI1ODdlZDc4ZjU1ZmRjMDVkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTU5YWNlMDJhNjg4NDUyNTg3ZWQ3OGY1NWZkYzA1ZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjUgQXZlICYgRSA3OCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTcyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNzg8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTUzM2NjODRmZGU3NDQzNDlmNWU5NTZjZDAzN2M3Yzguc2V0Q29udGVudChodG1sX2U1OWFjZTAyYTY4ODQ1MjU4N2VkNzhmNTVmZGMwNWQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY2YzM4M2IwNDc2YTQyMDc4ZDJhOTM3NjI3OTA1MmFmLmJpbmRQb3B1cChwb3B1cF85NTMzY2M4NGZkZTc0NDM0OWY1ZTk1NmNkMDM3YzdjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2I5ODAyZTc0MTU3NGRlM2I4ZjRjNjZjMzg5YTA5ODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzY3NzcwMiwgLTczLjk1OTAwOTcwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmY1ZDllMWRkNjRlNDI3YjlmMjEwMjJjODBhNmRlZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NDNjZDkzZDQyMjg0NmZjYWU3NTgwNGQyM2Q1MDgxNSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTQzY2Q5M2Q0MjI4NDZmY2FlNzU4MDRkMjNkNTA4MTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODEgU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogODQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTMwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmNWQ5ZTFkZDY0ZTQyN2I5ZjIxMDIyYzgwYTZkZWVmLnNldENvbnRlbnQoaHRtbF85NDNjZDkzZDQyMjg0NmZjYWU3NTgwNGQyM2Q1MDgxNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYjk4MDJlNzQxNTc0ZGUzYjhmNGM2NmMzODlhMDk4OS5iaW5kUG9wdXAocG9wdXBfYmY1ZDllMWRkNjRlNDI3YjlmMjEwMjJjODBhNmRlZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUzNjI2NGIwZmE4MjQzOGFhMzlkZWIxOGM2MjU5YjZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc4NjI2ODgsIC03My45NTc3MjA3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3OTNkZTVkZDQyMzQyYjJhY2U1YWNlNjgzM2I2OTM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI2M2Y3MjcyZGRhNDQ4ZDliNTA3ZWE1MTIxZGY5YmYgPSAkKGA8ZGl2IGlkPSJodG1sX2YyNjNmNzI3MmRkYTQ0OGQ5YjUwN2VhNTEyMWRmOWJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg0IFN0ICYgUGFyayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQ5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTcwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3OTNkZTVkZDQyMzQyYjJhY2U1YWNlNjgzM2I2OTM3LnNldENvbnRlbnQoaHRtbF9mMjYzZjcyNzJkZGE0NDhkOWI1MDdlYTUxMjFkZjliZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MzYyNjRiMGZhODI0MzhhYTM5ZGViMThjNjI1OWI2Yi5iaW5kUG9wdXAocG9wdXBfZDc5M2RlNWRkNDIzNDJiMmFjZTVhY2U2ODMzYjY5MzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkyZjcyY2IzYWU1MzQ1NTE5NDljZTYxYWYyN2UwZGIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc1NzMwMzQsIC03My45NTY3NTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVhMTY0MmQ0YzBiNDNiZWFjZjM0YmUxYjYyY2UyNGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTM0NDg2MWQ0YWE0NWUzOTQyMmIzMjkyNDM2YWIyYSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2UzNDQ4NjFkNGFhNDVlMzk0MjJiMzI5MjQzNmFiMmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODEgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjEzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTAyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1YTE2NDJkNGMwYjQzYmVhY2YzNGJlMWI2MmNlMjRmLnNldENvbnRlbnQoaHRtbF83ZTM0NDg2MWQ0YWE0NWUzOTQyMmIzMjkyNDM2YWIyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MmY3MmNiM2FlNTM0NTUxOTQ5Y2U2MWFmMjdlMGRiMC5iaW5kUG9wdXAocG9wdXBfZjVhMTY0MmQ0YzBiNDNiZWFjZjM0YmUxYjYyY2UyNGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1N2I5NTc1ZWQwYjRhMjZhY2FiZmJmN2VmZDMxNmM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc4MDEyMDMsIC03My45NTQwNzE0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyZDA4M2Q1NzI1ZTQ2NWVhZWZjMWJjNzBhMGQ1OTIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTY4NGQ1ZmExNjE3NGI0NDg4ZTNjMmEzNTg1NDVlZGYgPSAkKGA8ZGl2IGlkPSJodG1sX2U2ODRkNWZhMTYxNzRiNDQ4OGUzYzJhMzU4NTQ1ZWRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg1IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM2Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk5PGJyPiBuZXQgZGVwYXJ0dXJlczogMzMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjJkMDgzZDU3MjVlNDY1ZWFlZmMxYmM3MGEwZDU5MjIuc2V0Q29udGVudChodG1sX2U2ODRkNWZhMTYxNzRiNDQ4OGUzYzJhMzU4NTQ1ZWRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE1N2I5NTc1ZWQwYjRhMjZhY2FiZmJmN2VmZDMxNmM5LmJpbmRQb3B1cChwb3B1cF9iMmQwODNkNTcyNWU0NjVlYWVmYzFiYzcwYTBkNTkyMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTUyOGIwMzlkMTExNDdiZjljZjVjNmY4MzgwNDU3NzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzU2NTU0MSwgLTczLjk1MDY4NjE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTM2NmZhZWFjZGQzNDc0NGFiMmRlNjI1OTRhZDM4Y2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OGUyMDViNjI0ZDU0ODE4OWY5ZDM0OWEyMTQyY2IzYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzhlMjA1YjYyNGQ1NDgxODlmOWQzNDlhMjE0MmNiM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODQgU3QgJiAxIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTkyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA4MDxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTM2NmZhZWFjZGQzNDc0NGFiMmRlNjI1OTRhZDM4Y2Euc2V0Q29udGVudChodG1sXzc4ZTIwNWI2MjRkNTQ4MTg5ZjlkMzQ5YTIxNDJjYjNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk1MjhiMDM5ZDExMTQ3YmY5Y2Y1YzZmODM4MDQ1NzczLmJpbmRQb3B1cChwb3B1cF9lMzY2ZmFlYWNkZDM0NzQ0YWIyZGU2MjU5NGFkMzhjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTgxNjQzZWY3M2E2NGMwY2EwZGM2ZWI4YWZmNjQyYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzUzNjkwNSwgLTczLjk0ODAzMzkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4NTE5MzJhNmNlYjQzOTJiNmMxMTRiZmU4M2MyZTFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzVmM2RkNjZjMDZhNGE0OGEzYTFjMWQ0MmE1NDllOTIgPSAkKGA8ZGl2IGlkPSJodG1sXzc1ZjNkZDY2YzA2YTRhNDhhM2ExYzFkNDJhNTQ5ZTkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg1IFN0ICYgWW9yayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI2OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTI0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODUxOTMyYTZjZWI0MzkyYjZjMTE0YmZlODNjMmUxYS5zZXRDb250ZW50KGh0bWxfNzVmM2RkNjZjMDZhNGE0OGEzYTFjMWQ0MmE1NDllOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTgxNjQzZWY3M2E2NGMwY2EwZGM2ZWI4YWZmNjQyYjYuYmluZFBvcHVwKHBvcHVwX2U4NTE5MzJhNmNlYjQzOTJiNmMxMTRiZmU4M2MyZTFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Y2Y4MjA3OGY5MGI0YmI1ODZiYjdmN2Y2ZmNkZjg2MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MjgzODQsIC03My45NDk4OTIzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEyLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2U0ZDRkZTRlMmYzNDJlMThhNzgwNDNlYjY2NDdjNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzI3ZWEwZjQ1YzI0MDY0OTQ1OGY5YzFjNzY5ZmQ5YyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzMyN2VhMGY0NWMyNDA2NDk0NThmOWMxYzc2OWZkOWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODEgU3QgJiBZb3JrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzg0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMzE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjUzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlNGQ0ZGU0ZTJmMzQyZTE4YTc4MDQzZWI2NjQ3YzU4LnNldENvbnRlbnQoaHRtbF9jMzI3ZWEwZjQ1YzI0MDY0OTQ1OGY5YzFjNzY5ZmQ5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83Y2Y4MjA3OGY5MGI0YmI1ODZiYjdmN2Y2ZmNkZjg2My5iaW5kUG9wdXAocG9wdXBfN2U0ZDRkZTRlMmYzNDJlMThhNzgwNDNlYjY2NDdjNTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3MDBmNDU3YzhiNDQwNmY4MmJlMTgyZDdlYzNmMTA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY4NzM2ODcsIC03My45NjExOTk0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzE1YzllZmZjYzI0ZDhhODBlMTY1ODMzMWQ4ZjJmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3ZGExN2MxMzU2NzRhN2U4ZWExMzdlY2U3MzI5Y2M5ID0gJChgPGRpdiBpZD0iaHRtbF85N2RhMTdjMTM1Njc0YTdlOGVhMTM3ZWNlNzMyOWNjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MyBBdmUgJiBFIDcxIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwMTxicj4gbmV0IGRlcGFydHVyZXM6IC0xLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjMTVjOWVmZmNjMjRkOGE4MGUxNjU4MzMxZDhmMmY1LnNldENvbnRlbnQoaHRtbF85N2RhMTdjMTM1Njc0YTdlOGVhMTM3ZWNlNzMyOWNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNzAwZjQ1N2M4YjQ0MDZmODJiZTE4MmQ3ZWMzZjEwNS5iaW5kUG9wdXAocG9wdXBfN2MxNWM5ZWZmY2MyNGQ4YTgwZTE2NTgzMzFkOGYyZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzMmZlM2NmYmM1MjQ5MTdiNmY1OTM4YTc2ZWJiM2NjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY4MTc1NDY3NDIyNDUsIC03My45NTkxMDI2MzA2MTUyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1MDQ1OTY1M2UwMzRjYjBiMTllMWJkODg3ODk1MDMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWNlOGFhOTk0NGI4NDU2MjgzMTY4ODU1YjcxNWY3NmQgPSAkKGA8ZGl2IGlkPSJodG1sXzVjZThhYTk5NDRiODQ1NjI4MzE2ODg1NWI3MTVmNzZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDcxIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1MDQ1OTY1M2UwMzRjYjBiMTllMWJkODg3ODk1MDMzLnNldENvbnRlbnQoaHRtbF81Y2U4YWE5OTQ0Yjg0NTYyODMxNjg4NTViNzE1Zjc2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MzJmZTNjZmJjNTI0OTE3YjZmNTkzOGE3NmViYjNjYy5iaW5kUG9wdXAocG9wdXBfODUwNDU5NjUzZTAzNGNiMGIxOWUxYmQ4ODc4OTUwMzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJkMjQ2NjQzY2FiNTQyZjU4NjdmOGY4ZTViMTNiNTA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzczMTQyMzYsIC03My45NTg1NjE1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC42LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjNiYjU5NmQ5YWM1NDhkN2E5YTgwN2I1YTkyZTIyMmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTQ5YTU2Zjc4OWU0NmMyYmQwMTRkYmU4ODBmNmYwYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjk0OWE1NmY3ODllNDZjMmJkMDE0ZGJlODgwZjZmMGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNzcgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iM2JiNTk2ZDlhYzU0OGQ3YTlhODA3YjVhOTJlMjIyYS5zZXRDb250ZW50KGh0bWxfMjk0OWE1NmY3ODllNDZjMmJkMDE0ZGJlODgwZjZmMGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmQyNDY2NDNjYWI1NDJmNTg2N2Y4ZjhlNWIxM2I1MDcuYmluZFBvcHVwKHBvcHVwX2IzYmI1OTZkOWFjNTQ4ZDdhOWE4MDdiNWE5MmUyMjJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NzRjODhkNjJmNjM0NTM4OGU1MzhjNjBjYmY1OTFlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDQwMDIzLCAtNzMuOTY2NDg5NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDFjMjdlMDQ4MGE0NDdjYTczM2I5NDM1OTBhNjRlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E4NGQ4Njk0M2FhMTQ3NDY4OWYxZGY0YmRiNmMwMzdlID0gJChgPGRpdiBpZD0iaHRtbF9hODRkODY5NDNhYTE0NzQ2ODlmMWRmNGJkYjZjMDM3ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGV4aW5ndG9uIEF2ZSAmIEUgNjMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI0MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzQ0PGJyPiBuZXQgZGVwYXJ0dXJlczogMTAzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlkMWMyN2UwNDgwYTQ0N2NhNzMzYjk0MzU5MGE2NGVjLnNldENvbnRlbnQoaHRtbF9hODRkODY5NDNhYTE0NzQ2ODlmMWRmNGJkYjZjMDM3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NzRjODhkNjJmNjM0NTM4OGU1MzhjNjBjYmY1OTFlYy5iaW5kUG9wdXAocG9wdXBfOWQxYzI3ZTA0ODBhNDQ3Y2E3MzNiOTQzNTkwYTY0ZWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjNzMxMmE3MmE0ZDRlZDBhZGZkNjBkODQxMzg4OTg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY2NjM4MTQsIC03My45NTM0ODI5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5NGRlYjYyYWNlZTRkODQ5MTcxZDE5ZTYzMTFiMzRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRmNDY3ZTkwZTkxNDg3NzhlNzE4YzJjZGI3N2E0NGIgPSAkKGA8ZGl2IGlkPSJodG1sX2E0ZjQ2N2U5MGU5MTQ4Nzc4ZTcxOGMyY2RiNzdhNDRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDcyIFN0ICYgWW9yayBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM5My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzExPGJyPiBuZXQgZGVwYXJ0dXJlczogLTgyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5NGRlYjYyYWNlZTRkODQ5MTcxZDE5ZTYzMTFiMzRkLnNldENvbnRlbnQoaHRtbF9hNGY0NjdlOTBlOTE0ODc3OGU3MThjMmNkYjc3YTQ0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYzczMTJhNzJhNGQ0ZWQwYWRmZDYwZDg0MTM4ODk4OC5iaW5kUG9wdXAocG9wdXBfODk0ZGViNjJhY2VlNGQ4NDkxNzFkMTllNjMxMWIzNGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5MDk2MzUwNjE5NDQ2NzViMGQ2MzY1NWMyMjAyYmVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc1MTg2MTUsIC03My45NDQ0NjA1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3MWIwZTk0MzY1ZDQyNDhiZDk2OGMzNzBjYzQwMjYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWZhYjgwNjkyOTEyNDI2Y2EyYjExYmIyYjhlM2MyODcgPSAkKGA8ZGl2IGlkPSJodG1sXzVmYWI4MDY5MjkxMjQyNmNhMmIxMWJiMmI4ZTNjMjg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FYXN0IEVuZCBBdmUgJiBFIDg2IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTcwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3MWIwZTk0MzY1ZDQyNDhiZDk2OGMzNzBjYzQwMjYxLnNldENvbnRlbnQoaHRtbF81ZmFiODA2OTI5MTI0MjZjYTJiMTFiYjJiOGUzYzI4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOTA5NjM1MDYxOTQ0Njc1YjBkNjM2NTVjMjIwMmJlZS5iaW5kUG9wdXAocG9wdXBfNDcxYjBlOTQzNjVkNDI0OGJkOTY4YzM3MGNjNDAyNjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI4Nzc3NDQ0MDA2NTQ1NGVhNDc1NmM0MWJmNDdkY2ZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcxNjM4NTEsIC03My45ODI2MTQyOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNjg4MGM4MzY1ODQ0MTEyODIwODc1ODQ4ODMyOWFkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliOTMzYTNiMWY3NDQ0MGY4Njc5NjY2NjUzYTgwMzZmID0gJChgPGRpdiBpZD0iaHRtbF85YjkzM2EzYjFmNzQ0NDBmODY3OTY2NjY1M2E4MDM2ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA2MyBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0NDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQzNzxicj4gbmV0IGRlcGFydHVyZXM6IC03LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2ODgwYzgzNjU4NDQxMTI4MjA4NzU4NDg4MzI5YWRkLnNldENvbnRlbnQoaHRtbF85YjkzM2EzYjFmNzQ0NDBmODY3OTY2NjY1M2E4MDM2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yODc3NzQ0NDAwNjU0NTRlYTQ3NTZjNDFiZjQ3ZGNmZi5iaW5kUG9wdXAocG9wdXBfZjY4ODBjODM2NTg0NDExMjgyMDg3NTg0ODgzMjlhZGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3OGYzYmJiMDMzYjQ1YmU5ZWJlMzE3ZGQxZjllMjU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc0OTI1MTMsIC03My45ODI2NjU2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlMGUyZjkyYmI5ZTRjZGViOWZjOTNhMDkwYjM1MGQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDhjMTA2ZGE2OTZiNDA5MWE1MjFhMzA3N2RkZDI2MjQgPSAkKGA8ZGl2IGlkPSJodG1sXzQ4YzEwNmRhNjk2YjQwOTFhNTIxYTMwNzdkZGQyNjI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDY3IFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM5MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDE2PGJyPiBuZXQgZGVwYXJ0dXJlczogMjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2UwZTJmOTJiYjllNGNkZWI5ZmM5M2EwOTBiMzUwZDYuc2V0Q29udGVudChodG1sXzQ4YzEwNmRhNjk2YjQwOTFhNTIxYTMwNzdkZGQyNjI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3OGYzYmJiMDMzYjQ1YmU5ZWJlMzE3ZGQxZjllMjU2LmJpbmRQb3B1cChwb3B1cF83ZTBlMmY5MmJiOWU0Y2RlYjlmYzkzYTA5MGIzNTBkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDYyZDk1MjdkYmY0NDgxMmE5OTVmNzUyYjYyZWRjMzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Nzg5Njc4NCwgLTczLjk3Mzc0NzM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1ZmMxZTUxNWU2NTQzMjRiYzk1YmMyODA1MDM3NGFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWM5ZjkxMjExMmU2NGJhMTk5MThkNjBhODA0M2U1YjMgPSAkKGA8ZGl2IGlkPSJodG1sXzVjOWY5MTIxMTJlNjRiYTE5OTE4ZDYwYTgwNDNlNWIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsIFBhcmsgV2VzdCAmIFcgNzYgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTYzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1ZmMxZTUxNWU2NTQzMjRiYzk1YmMyODA1MDM3NGFkLnNldENvbnRlbnQoaHRtbF81YzlmOTEyMTEyZTY0YmExOTkxOGQ2MGE4MDQzZTViMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NjJkOTUyN2RiZjQ0ODEyYTk5NWY3NTJiNjJlZGMzOS5iaW5kUG9wdXAocG9wdXBfYjVmYzFlNTE1ZTY1NDMyNGJjOTViYzI4MDUwMzc0YWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0MjNmNzk0Nzk1ZTQxYWFhMWMzMGQ1MjNjNmZhNGRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzgwMTgzOTcyNDIzOSwgLTczLjk3NzI4NTMyNTUyNzE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0Mjc4MjUxYjQwNzRlMzBhYWI4ZWNmNzBhODQwZjk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVhNzA1MTFlYzE3NGVjNjg3ZTg1MDcyODgxZDg4ZGIgPSAkKGA8ZGl2IGlkPSJodG1sXzVlYTcwNTExZWMxNzRlYzY4N2U4NTA3Mjg4MWQ4OGRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDc2IFN0ICYgQ29sdW1idXMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMzAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3NTxicj4gbmV0IGRlcGFydHVyZXM6IC01NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNDI3ODI1MWI0MDc0ZTMwYWFiOGVjZjcwYTg0MGY5NC5zZXRDb250ZW50KGh0bWxfNWVhNzA1MTFlYzE3NGVjNjg3ZTg1MDcyODgxZDg4ZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzQyM2Y3OTQ3OTVlNDFhYWExYzMwZDUyM2M2ZmE0ZGIuYmluZFBvcHVwKHBvcHVwX2Q0Mjc4MjUxYjQwNzRlMzBhYWI4ZWNmNzBhODQwZjk0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjZkZmNjMmQwZmI0ZWEwYTMzZTgwMDFjNzY3M2VjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MzM5OTgxLCAtNzMuOTgwOTMxMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzU0YmUzZmZiYmY0NTU5OWU2YTc3MzM0ZThmMzc5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4YWM1YjZlYTI0MTQzZjk5MGE2MWIxZDNiNmVjMzA2ID0gJChgPGRpdiBpZD0iaHRtbF8zOGFjNWI2ZWEyNDE0M2Y5OTBhNjFiMWQzYjZlYzMwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA3OCBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE1MDxicj4gbmV0IGRlcGFydHVyZXM6IC03NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzU0YmUzZmZiYmY0NTU5OWU2YTc3MzM0ZThmMzc5NS5zZXRDb250ZW50KGh0bWxfMzhhYzViNmVhMjQxNDNmOTkwYTYxYjFkM2I2ZWMzMDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGY2ZGZjYzJkMGZiNGVhMGEzM2U4MDAxYzc2NzNlY2EuYmluZFBvcHVwKHBvcHVwXzAzNTRiZTNmZmJiZjQ1NTk5ZTZhNzczMzRlOGYzNzk1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzRiYWM3OTVjNDY0NWVmYTFhZGY1NjgxYjZjNGJmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3MzQwNjYsIC03My45Nzc4MjU0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjg2ZWNjOWI3ZDU1NGQxZjg3Yjk1OTdjZjAwODliNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYmFhZDkwY2UzNTQ0NzE4YWU0ZGU3M2I2MGUwMzgzNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMWJhYWQ5MGNlMzU0NDcxOGFlNGRlNzNiNjBlMDM4MzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWwgUGFyayBXZXN0ICYgVyA2OCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjgxLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzNDc8YnI+IG5ldCBkZXBhcnR1cmVzOiA2Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODZlY2M5YjdkNTU0ZDFmODdiOTU5N2NmMDA4OWI3NS5zZXRDb250ZW50KGh0bWxfMWJhYWQ5MGNlMzU0NDcxOGFlNGRlNzNiNjBlMDM4MzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDM0YmFjNzk1YzQ2NDVlZmExYWRmNTY4MWI2YzRiZjIuYmluZFBvcHVwKHBvcHVwX2Y4NmVjYzliN2Q1NTRkMWY4N2I5NTk3Y2YwMDg5Yjc1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZjMzM2E3YjRhYTg0OGQ1YmEwNGU1MzQwMGYwYWVmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NzA1NzUsIC03My45Nzg5ODQ3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODFkMzI2NDM3OGM0NWQ5YTZmOTA0OTAxMGY0MjUwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwMzM5NzM5MTlkZDQ0MmNhMTc0NGM2YzYxOTAxZmI5ID0gJChgPGRpdiBpZD0iaHRtbF83MDMzOTczOTE5ZGQ0NDJjYTE3NDRjNmM2MTkwMWZiOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1idXMgQXZlICYgVyA3MiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNDA2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDgxZDMyNjQzNzhjNDVkOWE2ZjkwNDkwMTBmNDI1MDIuc2V0Q29udGVudChodG1sXzcwMzM5NzM5MTlkZDQ0MmNhMTc0NGM2YzYxOTAxZmI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmMzMzYTdiNGFhODQ4ZDViYTA0ZTUzNDAwZjBhZWY3LmJpbmRQb3B1cChwb3B1cF8wODFkMzI2NDM3OGM0NWQ5YTZmOTA0OTAxMGY0MjUwMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODA0ZmJjYWQ0NzcwNDg2YWFiODhmZGVmZTNmNDI5NjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzU3OTM3NjY4MzY2NiwgLTczLjk3NjIwNTczNjM5ODcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzU3OTkwYjk5NWI5NDM4YWIxZjNjZWUyNzA5MzdhM2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMzRmY2YxODM2M2Y0OGU1OTQ5YWFjZTU4ZDhmZTk5NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMDM0ZmNmMTgzNjNmNDhlNTk0OWFhY2U1OGQ4ZmU5OTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWwgUGFyayBXZXN0ICYgVyA3MiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzIzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyOTk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzU3OTkwYjk5NWI5NDM4YWIxZjNjZWUyNzA5MzdhM2Uuc2V0Q29udGVudChodG1sXzAzNGZjZjE4MzYzZjQ4ZTU5NDlhYWNlNThkOGZlOTk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgwNGZiY2FkNDc3MDQ4NmFhYjg4ZmRlZmUzZjQyOTY0LmJpbmRQb3B1cChwb3B1cF9jNTc5OTBiOTk1Yjk0MzhhYjFmM2NlZTI3MDkzN2EzZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODlmNTkwYTQ0ODE5NDY2ZTk5NzdlMjEwMDA5NzhhNjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODA1Nzc5OTAxMDMzNDYsIC03My45ODU2MjQzMTMzNTQ0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEwLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzM5MTNlMmViYjBjNDc0ZWFkZWNhOGYzMDIyNTE3ZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MTk5NzdhZTk0OTc0MmZlODA1NmE2ZWU5NWU4MmQyOCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTE5OTc3YWU5NDk3NDJmZTgwNTZhNmVlOTVlODJkMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpdmVyc2lkZSBEciAmIFcgNzIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQ3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIwMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMzkxM2UyZWJiMGM0NzRlYWRlY2E4ZjMwMjI1MTdkYS5zZXRDb250ZW50KGh0bWxfNTE5OTc3YWU5NDk3NDJmZTgwNTZhNmVlOTVlODJkMjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODlmNTkwYTQ0ODE5NDY2ZTk5NzdlMjEwMDA5NzhhNjQuYmluZFBvcHVwKHBvcHVwXzMzOTEzZTJlYmIwYzQ3NGVhZGVjYThmMzAyMjUxN2RhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzczZjc0N2JlN2I0ZjcyOGI3M2FiMzI4ZjJhYmY5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3OTY2ODA5MDA3MzExNiwgLTczLjk4MDkzMDQ0NzU3ODQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzZlOGNjZTNkYWFmNDVhM2I2NzM3YThkOGMxMjNiYTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzNiMmJiYjUwNGQ0Y2RlODFhZmM3MDgyODA0ZjJjMSA9ICQoYDxkaXYgaWQ9Imh0bWxfODczYjJiYmI1MDRkNGNkZTgxYWZjNzA4MjgwNGYyYzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFtc3RlcmRhbSBBdmUgJiBXIDczIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2MTQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUxODxicj4gbmV0IGRlcGFydHVyZXM6IC05Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NmU4Y2NlM2RhYWY0NWEzYjY3MzdhOGQ4YzEyM2JhOC5zZXRDb250ZW50KGh0bWxfODczYjJiYmI1MDRkNGNkZTgxYWZjNzA4MjgwNGYyYzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjc3M2Y3NDdiZTdiNGY3MjhiNzNhYjMyOGYyYWJmOTMuYmluZFBvcHVwKHBvcHVwXzc2ZThjY2UzZGFhZjQ1YTNiNjczN2E4ZDhjMTIzYmE4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMjBkMWIyOWQyOGM0ZTYyOGEwNzg1ZmQ0MzNhYTkzMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NDcyNjc1LCAtNzMuOTY5NjE3MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Mzk2YzZjN2RhYjI0MGE3YWQ0ZGE4MTZiYTMzNGEzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlMWViOTkxYWQzZTRiYzBiMmU2ZDcwZTZkZTYxMzNjID0gJChgPGRpdiBpZD0iaHRtbF80ZTFlYjk5MWFkM2U0YmMwYjJlNmQ3MGU2ZGU2MTMzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbCBQYXJrIFdlc3QgJiBXIDg1IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Mzk2YzZjN2RhYjI0MGE3YWQ0ZGE4MTZiYTMzNGEzYS5zZXRDb250ZW50KGh0bWxfNGUxZWI5OTFhZDNlNGJjMGIyZTZkNzBlNmRlNjEzM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTIwZDFiMjlkMjhjNGU2MjhhMDc4NWZkNDMzYWE5MzEuYmluZFBvcHVwKHBvcHVwXzYzOTZjNmM3ZGFiMjQwYTdhZDRkYTgxNmJhMzM0YTNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NDU1NGI0MjNjODA0NDYyOWM1MzNhZmY5MjJmODVlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NzIwODY5LCAtNzMuOTgxMjgxMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNGJiMzgwM2E3Y2E0NzEzYjI2YTY0NmMzNzdjYjNiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM2OTQxNzFiYTQ5ZjQ2ZTdiNjllNWYwNTcwMzVkYjVkID0gJChgPGRpdiBpZD0iaHRtbF8zNjk0MTcxYmE0OWY0NmU3YjY5ZTVmMDU3MDM1ZGI1ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Uml2ZXJzaWRlIERyICYgVyA4MiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjIyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTE2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I0YmIzODAzYTdjYTQ3MTNiMjZhNjQ2YzM3N2NiM2JjLnNldENvbnRlbnQoaHRtbF8zNjk0MTcxYmE0OWY0NmU3YjY5ZTVmMDU3MDM1ZGI1ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NDU1NGI0MjNjODA0NDYyOWM1MzNhZmY5MjJmODVlOC5iaW5kUG9wdXAocG9wdXBfYjRiYjM4MDNhN2NhNDcxM2IyNmE2NDZjMzc3Y2IzYmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyMTU5MTdiMzg0MTRhZWM5OTdhOTNmMGYxMTc5ZmRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg0OTk5NzksIC03My45NzI4MzQwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOWQ4MjhhYmM2NmI0Zjk2OTliNjExYmQ4MmExYjNhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiMmI0Y2NlNGNlNDQ4ZDBiOTNhZTE0MDRkNmQxODlkID0gJChgPGRpdiBpZD0iaHRtbF9hYjJiNGNjZTRjZTQ0OGQwYjkzYWUxNDA0ZDZkMTg5ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA4NCBTdCAmIENvbHVtYnVzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzc4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMzM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTQ1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5ZDgyOGFiYzY2YjRmOTY5OWI2MTFiZDgyYTFiM2E3LnNldENvbnRlbnQoaHRtbF9hYjJiNGNjZTRjZTQ0OGQwYjkzYWUxNDA0ZDZkMTg5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MjE1OTE3YjM4NDE0YWVjOTk3YTkzZjBmMTE3OWZkYy5iaW5kUG9wdXAocG9wdXBfMzlkODI4YWJjNjZiNGY5Njk5YjYxMWJkODJhMWIzYTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU1ZDEyZDQ2ZWE2YjRmYTBhOTA1NTA4MDAxZjFjMDM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg1MjQ2NzIsIC03My45NzY2NzMyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTkuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZGU1NjAxNWFmOWM0NzNjYmNkMDdmOTFlODFjZjdiMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4ODcyMWFiN2M5NjRhYjk4ODAzMTJhMDVhM2Y2OGFjID0gJChgPGRpdiBpZD0iaHRtbF9iODg3MjFhYjdjOTY0YWI5ODgwMzEyYTA1YTNmNjhhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW1zdGVyZGFtIEF2ZSAmIFcgODIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTY4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZGU1NjAxNWFmOWM0NzNjYmNkMDdmOTFlODFjZjdiMC5zZXRDb250ZW50KGh0bWxfYjg4NzIxYWI3Yzk2NGFiOTg4MDMxMmEwNWEzZjY4YWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTVkMTJkNDZlYTZiNGZhMGE5MDU1MDgwMDFmMWMwMzguYmluZFBvcHVwKHBvcHVwXzNkZTU2MDE1YWY5YzQ3M2NiY2QwN2Y5MWU4MWNmN2IwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNjk0MTQ2ZDEyZDM0NGJjYTdhYTZiYTBlMTNkZGI1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3ODU2NjksIC03My45Nzc1NDk2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjMjQ3NzVkNzI2MDQ3MTNiMDQ0YzY1ZjlmMjZjOTViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTEzNzY4MTIyNDg5NGNlZGFhN2VjMDY4Nzk5ZjA4YWYgPSAkKGA8ZGl2IGlkPSJodG1sXzExMzc2ODEyMjQ4OTRjZWRhYTdlYzA2ODc5OWYwOGFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDc0IFN0ICYgQ29sdW1idXMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE2Mjxicj4gbmV0IGRlcGFydHVyZXM6IC00Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YzI0Nzc1ZDcyNjA0NzEzYjA0NGM2NWY5ZjI2Yzk1Yi5zZXRDb250ZW50KGh0bWxfMTEzNzY4MTIyNDg5NGNlZGFhN2VjMDY4Nzk5ZjA4YWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjY5NDE0NmQxMmQzNDRiY2E3YWE2YmEwZTEzZGRiNTkuYmluZFBvcHVwKHBvcHVwXzVjMjQ3NzVkNzI2MDQ3MTNiMDQ0YzY1ZjlmMjZjOTViKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMTFhYjgxNmE3NDc0NzFmYjhjNzUzZTU3YTliMjgzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NzUwNzAyNzU0Nzk3NiwgLTczLjk4ODg4NTg3OTUxNjU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5YWQwZTg2NjhiODQyNmNiZWM3Zjk2NzgwNzAzM2ZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWFiY2FlYTVjMWQ4NDY3MThlODJlNDA3OGJhM2E1YjYgPSAkKGA8ZGl2IGlkPSJodG1sX2FhYmNhZWE1YzFkODQ2NzE4ZTgyZTQwNzhiYTNhNWI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZlcnNpZGUgQmx2ZCAmIFcgNjcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjAzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOWFkMGU4NjY4Yjg0MjZjYmVjN2Y5Njc4MDcwMzNmZC5zZXRDb250ZW50KGh0bWxfYWFiY2FlYTVjMWQ4NDY3MThlODJlNDA3OGJhM2E1YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTExYWI4MTZhNzQ3NDcxZmI4Yzc1M2U1N2E5YjI4MzYuYmluZFBvcHVwKHBvcHVwXzE5YWQwZTg2NjhiODQyNmNiZWM3Zjk2NzgwNzAzM2ZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZGI5MTkzMWY4Yzk0YzQ4ODBmMmQxZDRlNGY0YTVhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NzQ4MDQ2LCAtNzMuOTgyODg1OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC02LjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODFhYzEyZmRhNWQ0NDZjOGVlZTdkNWNkZTNmODI0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkNmRjOGU4ODY0YjQ4MmI4YjVmNjQ0ODdhNTgwOGY1ID0gJChgPGRpdiBpZD0iaHRtbF83ZDZkYzhlODg2NGI0ODJiOGI1ZjY0NDg3YTU4MDhmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA3MCBTdCAmIEFtc3RlcmRhbSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM3Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjUwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTEyNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODFhYzEyZmRhNWQ0NDZjOGVlZTdkNWNkZTNmODI0ZC5zZXRDb250ZW50KGh0bWxfN2Q2ZGM4ZTg4NjRiNDgyYjhiNWY2NDQ4N2E1ODA4ZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGRiOTE5MzFmOGM5NGM0ODgwZjJkMWQ0ZTRmNGE1YTkuYmluZFBvcHVwKHBvcHVwXzI4MWFjMTJmZGE1ZDQ0NmM4ZWVlN2Q1Y2RlM2Y4MjRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81N2M1ZmMyMTk1MzE0YTc0OTEwNmU5OGJiYmEyNDM2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc3NDUyODM1LCAtNzMuOTg3NTM3NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC04Ljk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTM1NjBmN2FlZjg1NDVlNmFkZjNiOTdmYmM4N2QwZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOTMzZmUzODQwNzQ0OTk4OGMwNmQ4OGRkOTY1NWI0MCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDkzM2ZlMzg0MDc0NDk5ODhjMDZkODhkZDk2NTViNDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgNjQgU3QgJiBXZXN0IEVuZCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDM1Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTc3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE3OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMzU2MGY3YWVmODU0NWU2YWRmM2I5N2ZiYzg3ZDBlNC5zZXRDb250ZW50KGh0bWxfZDkzM2ZlMzg0MDc0NDk5ODhjMDZkODhkZDk2NTViNDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTdjNWZjMjE5NTMxNGE3NDkxMDZlOThiYmJhMjQzNmUuYmluZFBvcHVwKHBvcHVwXzEzNTYwZjdhZWY4NTQ1ZTZhZGYzYjk3ZmJjODdkMGU0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYTNlY2RlMTQwNDk0YzhkYjYyYTQ2MTY0Nzg1YTIwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4Njc5NDcsIC03My45NzcxMTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC03LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjQ2MTgzNjk0YjE0ZjRhOTlkMGM3YjYxYjgxMDY4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjODNkN2Q5NDc0YjQ2OGE4NTlkZDE3Y2VlYjJiNzZkID0gJChgPGRpdiBpZD0iaHRtbF81YzgzZDdkOTQ3NGI0NjhhODU5ZGQxN2NlZWIyYjc2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA4NCBTdCAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNjIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExNDxicj4gbmV0IGRlcGFydHVyZXM6IC0xNDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI0NjE4MzY5NGIxNGY0YTk5ZDBjN2I2MWI4MTA2OGQuc2V0Q29udGVudChodG1sXzVjODNkN2Q5NDc0YjQ2OGE4NTlkZDE3Y2VlYjJiNzZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBhM2VjZGUxNDA0OTRjOGRiNjJhNDYxNjQ3ODVhMjBiLmJpbmRQb3B1cChwb3B1cF81MjQ2MTgzNjk0YjE0ZjRhOTlkMGM3YjYxYjgxMDY4ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWExNzIyNTUxMTU3NGI4ZWExMTcyMDNjYTM5ODQ2MTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODQxNDQ3MiwgLTczLjk4MzYyNDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjYxYmNkZjYxNzBkNDViYjllYmI0OWVmNWIyMDI3OWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NGE1YzgzYjBkZDA0NDVhYTdkYzNhNGEzY2Y4NTAxYSA9ICQoYDxkaXYgaWQ9Imh0bWxfNzRhNWM4M2IwZGQwNDQ1YWE3ZGMzYTRhM2NmODUwMWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpdmVyc2lkZSBEciAmIFcgNzggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTUwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2MWJjZGY2MTcwZDQ1YmI5ZWJiNDllZjViMjAyNzlkLnNldENvbnRlbnQoaHRtbF83NGE1YzgzYjBkZDA0NDVhYTdkYzNhNGEzY2Y4NTAxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YTE3MjI1NTExNTc0YjhlYTExNzIwM2NhMzk4NDYxMi5iaW5kUG9wdXAocG9wdXBfMjYxYmNkZjYxNzBkNDViYjllYmI0OWVmNWIyMDI3OWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1ZGQ2ODY5OWQ0NjQ3Njc5MmM4OGRlMzIxYTE0MGU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk4NjE3LCAtNzMuOTQxMzQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzdlNzg1ZmEwZDgwNDdmNGI2N2UwYTM3NzgwMGE3YTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84M2I3OTNiZTBkNGI0MjE5ODMyZmUzMzVkNzU5Nzc5NCA9ICQoYDxkaXYgaWQ9Imh0bWxfODNiNzkzYmUwZDRiNDIxOTgzMmZlMzM1ZDc1OTc3OTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhcmsgQXZlICYgTWFyY3VzIEdhcnZleSBCbHZkPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTxicj4gbmV0IGRlcGFydHVyZXM6IC02LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3ZTc4NWZhMGQ4MDQ3ZjRiNjdlMGEzNzc4MDBhN2EzLnNldENvbnRlbnQoaHRtbF84M2I3OTNiZTBkNGI0MjE5ODMyZmUzMzVkNzU5Nzc5NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNWRkNjg2OTlkNDY0NzY3OTJjODhkZTMyMWExNDBlNC5iaW5kUG9wdXAocG9wdXBfNzdlNzg1ZmEwZDgwNDdmNGI2N2UwYTM3NzgwMGE3YTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwMDNiZWUzM2I1MjQ2YjBiZmE0YWU2MDQ3YmIwMTI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjk4NzgsIC03My45OTcxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViZTc4ZmU1YjEyMzQ0YjJhZDdmMTM0YTI1Mjc0NzcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmJlMmNkMWQ4ZGFmNGZhNmE0ZjU1YmYzNjMyN2ZiMDggPSAkKGA8ZGl2IGlkPSJodG1sXzZiZTJjZDFkOGRhZjRmYTZhNGY1NWJmMzYzMjdmYjA4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ccm9va2x5biBCcmlkZ2UgUGFyayAtIFBpZXIgMjxicj4gdG90YWwgZGVwYXJ0dXJlczogNzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgwPGJyPiBuZXQgZGVwYXJ0dXJlczogNS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YmU3OGZlNWIxMjM0NGIyYWQ3ZjEzNGEyNTI3NDc3MC5zZXRDb250ZW50KGh0bWxfNmJlMmNkMWQ4ZGFmNGZhNmE0ZjU1YmYzNjMyN2ZiMDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODAwM2JlZTMzYjUyNDZiMGJmYTRhZTYwNDdiYjAxMjkuYmluZFBvcHVwKHBvcHVwXzViZTc4ZmU1YjEyMzQ0YjJhZDdmMTM0YTI1Mjc0NzcwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzZjN2UzMThmMzY0ZDZmOTM5M2FmYWIzMmUzNDEwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyOTE5MywgLTczLjk3NjY1NTAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxMjA2OWYxOGIwMTQzNDA4ZDJiYTdjZTFkMGI5YTA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzUwMzUwMTg0N2MxNDVhYjhlY2Q1ZTY2ZWI3YWNiMGIgPSAkKGA8ZGl2IGlkPSJodG1sXzc1MDM1MDE4NDdjMTQ1YWI4ZWNkNWU2NmViN2FjYjBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OWUNCUyBEZXBvdCAtIFNUWTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDEyMDY5ZjE4YjAxNDM0MDhkMmJhN2NlMWQwYjlhMDcuc2V0Q29udGVudChodG1sXzc1MDM1MDE4NDdjMTQ1YWI4ZWNkNWU2NmViN2FjYjBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzNmM3ZTMxOGYzNjRkNmY5MzkzYWZhYjMyZTM0MTA4LmJpbmRQb3B1cChwb3B1cF9kMTIwNjlmMThiMDE0MzQwOGQyYmE3Y2UxZDBiOWEwNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzg2ZTcyMmIzNjlhNGUxNmJkMjY5N2RiNTE0NTU0NWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDMsIC03My45MzU2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkNTVkYjIyM2Q5YzRmNWQ5ODZiNjE1MzRiYWM3NDBkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTMyNzhjNmY0ZTIwNDQzNThhMTUwNTcyODQ5NjJiNzggPSAkKGA8ZGl2IGlkPSJodG1sXzkzMjc4YzZmNGUyMDQ0MzU4YTE1MDU3Mjg0OTYyYjc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij40NyBBdmUgJiAzMSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgzPGJyPiBuZXQgZGVwYXJ0dXJlczogNzMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQ1NWRiMjIzZDljNGY1ZDk4NmI2MTUzNGJhYzc0MGQuc2V0Q29udGVudChodG1sXzkzMjc4YzZmNGUyMDQ0MzU4YTE1MDU3Mjg0OTYyYjc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc4NmU3MjJiMzY5YTRlMTZiZDI2OTdkYjUxNDU1NDVlLmJpbmRQb3B1cChwb3B1cF80ZDU1ZGIyMjNkOWM0ZjVkOTg2YjYxNTM0YmFjNzQwZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2Y0ZDBiNDQwNTg5NGNmMWIxNjJmNDFmNGUwZmUzNTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTg5OTY1NTk2MDUxMTYsIC03My45Njg2NTM5NzY5MTcyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiNGY0OWE2NGE5NjQ3ZDA5MGY0OTlkYWU3YmRhNTIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI2NmY1ZDlkNTg0NDFkZmJmOTk5YjA3ZjMwOTljNWUgPSAkKGA8ZGl2IGlkPSJodG1sXzYyNjZmNWQ5ZDU4NDQxZGZiZjk5OWIwN2YzMDk5YzVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDU1IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjk5PGJyPiBuZXQgZGVwYXJ0dXJlczogMTY1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiNGY0OWE2NGE5NjQ3ZDA5MGY0OTlkYWU3YmRhNTIwLnNldENvbnRlbnQoaHRtbF82MjY2ZjVkOWQ1ODQ0MWRmYmY5OTliMDdmMzA5OWM1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZjRkMGI0NDA1ODk0Y2YxYjE2MmY0MWY0ZTBmZTM1NC5iaW5kUG9wdXAocG9wdXBfOGI0ZjQ5YTY0YTk2NDdkMDkwZjQ5OWRhZTdiZGE1MjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY2NWI4Y2RkZjE5OTRiZWY5YTM2ZWJhYTQ0ODliZmY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzM5OTczNTQxMDM0MDksIC03NC4wMDUxMzg3MjUwNDIzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MDcxODg1MDllZDY0NWMxOWZmZjk2ZmE4YmIwNjRkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1YWZjMWIxNTBhNDQ5MjM5NjYyYzdjM2FiNWNjYTEwID0gJChgPGRpdiBpZD0iaHRtbF85NWFmYzFiMTUwYTQ0OTIzOTY2MmM3YzNhYjVjY2ExMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAxMyBTdCAmIEh1ZHNvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjIyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2MTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODA3MTg4NTA5ZWQ2NDVjMTlmZmY5NmZhOGJiMDY0ZGEuc2V0Q29udGVudChodG1sXzk1YWZjMWIxNTBhNDQ5MjM5NjYyYzdjM2FiNWNjYTEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY2NWI4Y2RkZjE5OTRiZWY5YTM2ZWJhYTQ0ODliZmY5LmJpbmRQb3B1cChwb3B1cF84MDcxODg1MDllZDY0NWMxOWZmZjk2ZmE4YmIwNjRkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTQwOTUxZmNmZDM3NDk1YzhkYzRjMzdhODRkODI1MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODI3NSwgLTczLjk3MTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4zLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGNiY2M2NjFlOTFkNDVkY2JkYzM3MzczN2IzOTVjZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNWNlYzlkZjkwZTg0YTI3ODI2ZWQzNjU5MDlkZWExZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDVjZWM5ZGY5MGU4NGEyNzgyNmVkMzY1OTA5ZGVhMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgODIgU3QgJiBDZW50cmFsIFBhcmsgV2VzdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjQ2LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxODA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGNiY2M2NjFlOTFkNDVkY2JkYzM3MzczN2IzOTVjZWUuc2V0Q29udGVudChodG1sX2Q1Y2VjOWRmOTBlODRhMjc4MjZlZDM2NTkwOWRlYTFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0MDk1MWZjZmQzNzQ5NWM4ZGM0YzM3YTg0ZDgyNTExLmJpbmRQb3B1cChwb3B1cF8wY2JjYzY2MWU5MWQ0NWRjYmRjMzczNzM3YjM5NWNlZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzRlMzE5ODFjYTcxNDc2OThjZWE0Yjc3ZGY4ZTVlZWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTEyODM1OTY5NjIyOTYsIC03My45OTY5MjQ0NTk5MzQyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YWM2MDExYjZlMzA0OTMwYjdlMDI4ZDVlNTQ1YTNjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjY2E0MWIyNDA1YjRhMTRiYjQxNTcwM2IxZjBiNGNmID0gJChgPGRpdiBpZD0iaHRtbF9iY2NhNDFiMjQwNWI0YTE0YmI0MTU3MDNiMWYwYjRjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGVubiBTdGF0aW9uIFZhbGV0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyOTEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzMjxicj4gbmV0IGRlcGFydHVyZXM6IC0xNTkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmFjNjAxMWI2ZTMwNDkzMGI3ZTAyOGQ1ZTU0NWEzY2Iuc2V0Q29udGVudChodG1sX2JjY2E0MWIyNDA1YjRhMTRiYjQxNTcwM2IxZjBiNGNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M0ZTMxOTgxY2E3MTQ3Njk4Y2VhNGI3N2RmOGU1ZWViLmJpbmRQb3B1cChwb3B1cF82YWM2MDExYjZlMzA0OTMwYjdlMDI4ZDVlNTQ1YTNjYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDllZmI4NWU1NzFkNDkwZjgzZTgwNmZlZjMzODMzNzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43Njc4MDA4MDE0ODEzMiwgLTczLjk2NTkyMDgwNTkzMTA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGFmYTFjM2VhNWE4NDcwYzg2ZGM2MTc2ZGFmY2ZmNjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMjA4ODI0YmYzZDE0NTMyOTQ3YzBhNWQzZmRhOTBhZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzIwODgyNGJmM2QxNDUzMjk0N2MwYTVkM2ZkYTkwYWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNjcgU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTExLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjI8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYWZhMWMzZWE1YTg0NzBjODZkYzYxNzZkYWZjZmY2OC5zZXRDb250ZW50KGh0bWxfYzIwODgyNGJmM2QxNDUzMjk0N2MwYTVkM2ZkYTkwYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDllZmI4NWU1NzFkNDkwZjgzZTgwNmZlZjMzODMzNzEuYmluZFBvcHVwKHBvcHVwX2RhZmExYzNlYTVhODQ3MGM4NmRjNjE3NmRhZmNmZjY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NWI5Y2ZjNGYzMDc0ZWMyOGU4ODhjZDE1OGVkMGE2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4OTYyMTg4NzkwMzMzLCAtNzMuOTgzMDQyNjg3MTc3NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiOWZkM2UxZDcxNDQ2MDViODdhN2UyMWE1NzhiOWNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTdmMTYwZGM2MTE0NGQ3NmE0ZjliODk1MWQwOTg3YjIgPSAkKGA8ZGl2IGlkPSJodG1sX2E3ZjE2MGRjNjExNDRkNzZhNGY5Yjg5NTFkMDk4N2IyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Cb25kIFN0ICYgRnVsdG9uIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE0PGJyPiBuZXQgZGVwYXJ0dXJlczogMjguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2I5ZmQzZTFkNzE0NDYwNWI4N2E3ZTIxYTU3OGI5Y2Iuc2V0Q29udGVudChodG1sX2E3ZjE2MGRjNjExNDRkNzZhNGY5Yjg5NTFkMDk4N2IyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU1YjljZmM0ZjMwNzRlYzI4ZTg4OGNkMTU4ZWQwYTY0LmJpbmRQb3B1cChwb3B1cF83YjlmZDNlMWQ3MTQ0NjA1Yjg3YTdlMjFhNTc4YjljYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDhmNGIwMzZlN2QyNGExMTkwODhlNTBmZjczYjYwOWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTcyNDU2NzkxMTcyNiwgLTczLjk3ODA1OTE0MjgyNzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjIsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGY2ZGY2MTZmMGI0ZDU3OWFhOTNlOTVjZDE0NTFlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1NzA4ZDcxYjcwZjQzMWJiOThhOWU0MzZmMDI4MzcxID0gJChgPGRpdiBpZD0iaHRtbF8wNTcwOGQ3MWI3MGY0MzFiYjk4YTllNDM2ZjAyODM3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0OCBTdCAmIDUgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNjAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM0NDxicj4gbmV0IGRlcGFydHVyZXM6IDg0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkZjZkZjYxNmYwYjRkNTc5YWE5M2U5NWNkMTQ1MWU2LnNldENvbnRlbnQoaHRtbF8wNTcwOGQ3MWI3MGY0MzFiYjk4YTllNDM2ZjAyODM3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OGY0YjAzNmU3ZDI0YTExOTA4OGU1MGZmNzNiNjA5Yi5iaW5kUG9wdXAocG9wdXBfMmRmNmRmNjE2ZjBiNGQ1NzlhYTkzZTk1Y2QxNDUxZTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmYWYyZjVjZDdmNTQwZTZhMTM4YzRjNDk0N2QzYmU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUyMTY1MjgwNjIxOTY2LCAtNzMuOTc5OTIxOTM2OTg4ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83Nzk0OTJkZGQzNTc0MjdiYmE2ZTVlYWIwZmM5YjAxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzOWJhZTUyYzkwMDQ3MDNhMjYyZTc0NzMwMGM5MTUwID0gJChgPGRpdiBpZD0iaHRtbF9jMzliYWU1MmM5MDA0NzAzYTI2MmU3NDczMDBjOTE1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA0MSBTdCAmIE1hZGlzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3MDxicj4gbmV0IGRlcGFydHVyZXM6IDY5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3OTQ5MmRkZDM1NzQyN2JiYTZlNWVhYjBmYzliMDEwLnNldENvbnRlbnQoaHRtbF9jMzliYWU1MmM5MDA0NzAzYTI2MmU3NDczMDBjOTE1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZmFmMmY1Y2Q3ZjU0MGU2YTEzOGM0YzQ5NDdkM2JlNi5iaW5kUG9wdXAocG9wdXBfNzc5NDkyZGRkMzU3NDI3YmJhNmU1ZWFiMGZjOWIwMTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlNGYzYmRjMWRlZTQ3OWJiMjM0NzFmZTg2ZjI3YmJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU4OTg0ODEzOTk2MzQsIC03My45OTM3OTk2ODY0MzE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIwLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYThlM2MzZTcyODI0YWVmYWRiZmJiZTUyZWU4YjQwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNDgzYjg2NThmYjQ3OWFiNTlhYmE3Yjc1ODgyMmNjID0gJChgPGRpdiBpZD0iaHRtbF85MzQ4M2I4NjU4ZmI0NzlhYjU5YWJhN2I3NTg4MjJjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyA0MiBTdCAmIER5ZXIgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEwMzxicj4gbmV0IGRlcGFydHVyZXM6IC00MDIuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGE4ZTNjM2U3MjgyNGFlZmFkYmZiYmU1MmVlOGI0MDEuc2V0Q29udGVudChodG1sXzkzNDgzYjg2NThmYjQ3OWFiNTlhYmE3Yjc1ODgyMmNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NlNGYzYmRjMWRlZTQ3OWJiMjM0NzFmZTg2ZjI3YmJjLmJpbmRQb3B1cChwb3B1cF8wYThlM2MzZTcyODI0YWVmYWRiZmJiZTUyZWU4YjQwMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTU4N2Q2ZjI5ZTJlNDI4N2E1ZmZmYTQ3NTBlNzE1MGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTM4MzM0MzQzNzYyMiwgLTczLjk0MjY3Njc4MjYwODAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZmY2QzZDIxNmMxNzRmNzk4NTU0ZjIxZTEwOWMwMDg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTc4MzBiMmMzZjZiNDBiN2FmYTJjMTNmZGIzNzFiZTkgPSAkKGA8ZGl2IGlkPSJodG1sXzU3ODMwYjJjM2Y2YjQwYjdhZmEyYzEzZmRiMzcxYmU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4yMSBTdCAmIDQxIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTExLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZmY2QzZDIxNmMxNzRmNzk4NTU0ZjIxZTEwOWMwMDg0LnNldENvbnRlbnQoaHRtbF81NzgzMGIyYzNmNmI0MGI3YWZhMmMxM2ZkYjM3MWJlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNTg3ZDZmMjllMmU0Mjg3YTVmZmZhNDc1MGU3MTUwYi5iaW5kUG9wdXAocG9wdXBfZmZjZDNkMjE2YzE3NGY3OTg1NTRmMjFlMTA5YzAwODQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmMzdmOWY4OTZlMDQxNTU4ZGJmYzcxYWRhOWIyMzRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzczOTEzOTAyMzgxMTgsIC03My45NTQzOTUzNTM3OTQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtOS41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjOWM4NjA5NWI1MjQ3MzE4YmNmOTBkMzU3ZmExZTY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGIyNDYxZWMzNDA5NDgyNmI3NjJlMDY1OTVjNTllMjYgPSAkKGA8ZGl2IGlkPSJodG1sXzRiMjQ2MWVjMzQwOTQ4MjZiNzYyZTA2NTk1YzU5ZTI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDgwIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI4Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTkxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRjOWM4NjA5NWI1MjQ3MzE4YmNmOTBkMzU3ZmExZTY4LnNldENvbnRlbnQoaHRtbF80YjI0NjFlYzM0MDk0ODI2Yjc2MmUwNjU5NWM1OWUyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZjM3ZjlmODk2ZTA0MTU1OGRiZmM3MWFkYTliMjM0Yy5iaW5kUG9wdXAocG9wdXBfNGM5Yzg2MDk1YjUyNDczMThiY2Y5MGQzNTdmYTFlNjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1ZTBhNzljYTRjZTQxMjg5OTRmYWM1ODc2MzIzNjMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg2MjAzMDAwMDAwMDA2LCAtNzMuOTQ0Njk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY4MjUwZDUxZDA2MTRiMTNiNzc2Nzc2NzEyMWZmMDUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjkwNzdkOWZlYjM3NGYwYjljZjgwNmJjNDMzNjM0NTYgPSAkKGA8ZGl2IGlkPSJodG1sX2Y5MDc3ZDlmZWIzNzRmMGI5Y2Y4MDZiYzQzMzYzNDU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb25yb2UgU3QgJiBUb21wa2lucyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxODxicj4gbmV0IGRlcGFydHVyZXM6IC00OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODI1MGQ1MWQwNjE0YjEzYjc3Njc3NjcxMjFmZjA1My5zZXRDb250ZW50KGh0bWxfZjkwNzdkOWZlYjM3NGYwYjljZjgwNmJjNDMzNjM0NTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDVlMGE3OWNhNGNlNDEyODk5NGZhYzU4NzYzMjM2MzAuYmluZFBvcHVwKHBvcHVwXzY4MjUwZDUxZDA2MTRiMTNiNzc2Nzc2NzEyMWZmMDUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OGUyNWM2MDUwZDc0YjE1OThmNDdmYTYzZTBiNGU4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MTAyOTI1Njc3OTY4LCAtNzMuOTkxODMzNjI3MjIzOTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDUuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84OTdlMTFhNWU4MjQ0OGZjOWQyNDZkMTY1OTFjYWU3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmODg5ZWYwYmQ2ZDQ3ZjZiY2QwMzBjNTUxODY1ZWQ0ID0gJChgPGRpdiBpZD0iaHRtbF83Zjg4OWVmMGJkNmQ0N2Y2YmNkMDMwYzU1MTg2NWVkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U2NoZXJtZXJob3JuIFN0ICYgQ291cnQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEyNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjMzPGJyPiBuZXQgZGVwYXJ0dXJlczogMTA5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5N2UxMWE1ZTgyNDQ4ZmM5ZDI0NmQxNjU5MWNhZTc1LnNldENvbnRlbnQoaHRtbF83Zjg4OWVmMGJkNmQ0N2Y2YmNkMDMwYzU1MTg2NWVkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OGUyNWM2MDUwZDc0YjE1OThmNDdmYTYzZTBiNGU4Ny5iaW5kUG9wdXAocG9wdXBfODk3ZTExYTVlODI0NDhmYzlkMjQ2ZDE2NTkxY2FlNzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5NTk3M2NkNGM0NzRiMWNhZTVkMTkyNWRkM2M4YTkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzU4OTIzODYzNzc2OTUsIC03My45NjIyNjIyNzI4MzQ3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IzMDM1YTVhODgyODQwNTU4NmU1ZjdiYzNhZjJlNTExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTZjYTdlNzUwYmIxNDk1MmFiYTY0YzkzYzI1NjNiOGUgPSAkKGA8ZGl2IGlkPSJodG1sXzU2Y2E3ZTc1MGJiMTQ5NTJhYmE2NGM5M2MyNTYzYjhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDU4IFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQ2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTI2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzMDM1YTVhODgyODQwNTU4NmU1ZjdiYzNhZjJlNTExLnNldENvbnRlbnQoaHRtbF81NmNhN2U3NTBiYjE0OTUyYWJhNjRjOTNjMjU2M2I4ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOTU5NzNjZDRjNDc0YjFjYWU1ZDE5MjVkZDNjOGE5Mi5iaW5kUG9wdXAocG9wdXBfYjMwMzVhNWE4ODI4NDA1NTg2ZTVmN2JjM2FmMmU1MTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxNjBiZGE4OWJjZjRkNjdiNWYyYTczODMwN2M3MDY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzMxNDM3MjQwODUyMjgsIC03My45OTQ5MDM0MTU0NDE1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjZjMyM2I5YjYxMzQ5ZjdiODQ3YzE0ZjE3M2Q2NTI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzUzZjk0NzJhYWRjNDgxYTgwOTllOWEwZTVmNjU0YzIgPSAkKGA8ZGl2IGlkPSJodG1sXzc1M2Y5NDcyYWFkYzQ4MWE4MDk5ZTlhMGU1ZjY1NGMyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Vbml2ZXJzaXR5IFBsICYgRSA4IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MjcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQyNzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMDAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGNmMzIzYjliNjEzNDlmN2I4NDdjMTRmMTczZDY1MjYuc2V0Q29udGVudChodG1sXzc1M2Y5NDcyYWFkYzQ4MWE4MDk5ZTlhMGU1ZjY1NGMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxNjBiZGE4OWJjZjRkNjdiNWYyYTczODMwN2M3MDY1LmJpbmRQb3B1cChwb3B1cF8wY2YzMjNiOWI2MTM0OWY3Yjg0N2MxNGYxNzNkNjUyNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2I1NDg2ODFlYzNmNDhiZmE3MjYyOTU2ZTBkNjY1OGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42OTQyODExNDEzOTczMjYsIC03My45OTIzMDAzMzE1OTI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0YzQ2NmQ2M2RkZTQyOGM4YmUwOTZkNzI3MmQ1MTk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmE3ODI4Y2JkM2ZmNDkxNmJlOWZhMDA2NDJmNGZmYjQgPSAkKGA8ZGl2IGlkPSJodG1sX2JhNzgyOGNiZDNmZjQ5MTZiZTlmYTAwNjQyZjRmZmI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Nb250YWd1ZSBTdCAmIENsaW50b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEyMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg1PGJyPiBuZXQgZGVwYXJ0dXJlczogNjMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRjNDY2ZDYzZGRlNDI4YzhiZTA5NmQ3MjcyZDUxOTYuc2V0Q29udGVudChodG1sX2JhNzgyOGNiZDNmZjQ5MTZiZTlmYTAwNjQyZjRmZmI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiNTQ4NjgxZWMzZjQ4YmZhNzI2Mjk1NmUwZDY2NThhLmJpbmRQb3B1cChwb3B1cF8xNGM0NjZkNjNkZGU0MjhjOGJlMDk2ZDcyNzJkNTE5NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTRjYTc4YjQ3ZTE2NGM3NmJkMGUwODczZTc2YjQ0MTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODAzNTYwODQwNDMzOTYsIC03My45NDc2NzkxMDI0MjA3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4xNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkNWE2ZmMxMjc5MjQ4ZWRhZjgxMGIxNGYxNjk4ZTNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM3OWVkMDg0N2ViNGJmNjg1ZjcxM2RlNGQxNWZlMTMgPSAkKGA8ZGl2IGlkPSJodG1sX2IzNzllZDA4NDdlYjRiZjY4NWY3MTNkZTRkMTVmZTEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WZXJvbmEgUGwgJiBGdWx0b24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA0NTxicj4gbmV0IGRlcGFydHVyZXM6IDIzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkNWE2ZmMxMjc5MjQ4ZWRhZjgxMGIxNGYxNjk4ZTNkLnNldENvbnRlbnQoaHRtbF9iMzc5ZWQwODQ3ZWI0YmY2ODVmNzEzZGU0ZDE1ZmUxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NGNhNzhiNDdlMTY0Yzc2YmQwZTA4NzNlNzZiNDQxNS5iaW5kUG9wdXAocG9wdXBfZmQ1YTZmYzEyNzkyNDhlZGFmODEwYjE0ZjE2OThlM2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FiMDE5NmY5ZmQ0MDQxYzQ4OWMyOTQzNmEzN2I1YjhiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzUwNTg1MzQ3MDIxNSwgLTczLjk5NDY4NDgxNTQwNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZTQ2NWJjNjUyYTY0MTcxOWUzZWYyYWVmZTFmZTY2OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1ZTQwNWY5NGMzMjRkZmQ4MWZlZmU0ZjYwNWZmZWM1ID0gJChgPGRpdiBpZD0iaHRtbF9jNWU0MDVmOTRjMzI0ZGZkODFmZWZlNGY2MDVmZmVjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+OCBBdmUgJiBXIDMxIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY3NTxicj4gbmV0IGRlcGFydHVyZXM6IDExLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NlNDY1YmM2NTJhNjQxNzE5ZTNlZjJhZWZlMWZlNjY5LnNldENvbnRlbnQoaHRtbF9jNWU0MDVmOTRjMzI0ZGZkODFmZWZlNGY2MDVmZmVjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYjAxOTZmOWZkNDA0MWM0ODljMjk0MzZhMzdiNWI4Yi5iaW5kUG9wdXAocG9wdXBfY2U0NjViYzY1MmE2NDE3MTllM2VmMmFlZmUxZmU2NjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmN2FiMzBlMGYzOTQzNjY4ODRhM2QyY2E1MDM2M2E0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI3NzE0MDc3Nzc3OCwgLTc0LjAxMTI5NTczNTgzNjAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTdlZGE2YmY2MWU1NDIyM2JmMjU2NTA3NDI3MTc3NzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYjQ4NTc5NTQ0MTY0YTk0Yjk3ZGRlOWQzODFiZWY0OCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWI0ODU3OTU0NDE2NGE5NGI5N2RkZTlkMzgxYmVmNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpZXIgNDAgLSBIdWRzb24gUml2ZXIgUGFyazxicj4gdG90YWwgZGVwYXJ0dXJlczogNDIwLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Mzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTdlZGE2YmY2MWU1NDIyM2JmMjU2NTA3NDI3MTc3NzIuc2V0Q29udGVudChodG1sX2ViNDg1Nzk1NDQxNjRhOTRiOTdkZGU5ZDM4MWJlZjQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhmN2FiMzBlMGYzOTQzNjY4ODRhM2QyY2E1MDM2M2E0LmJpbmRQb3B1cChwb3B1cF85N2VkYTZiZjYxZTU0MjIzYmYyNTY1MDc0MjcxNzc3MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjVjZTQ4NzAwOWMyNDNhYTgzMzcyNDRhNDZkODFmZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NTAxODE1NjMyNTY4MjQsIC03NC4wMDIxODQyNzE4MTI0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTQuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTExYjkxMDYxOTI0OGY2OTI3YTFlZjg0NDAzNDhhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0ZjY1ZWY4MThjMzRjN2ZiMTc5YmZhOGNlNjk0ZWQxID0gJChgPGRpdiBpZD0iaHRtbF81NGY2NWVmODE4YzM0YzdmYjE3OWJmYThjZTY5NGVkMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VyAyNyBTdCAmIDEwIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzcyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NTc8YnI+IG5ldCBkZXBhcnR1cmVzOiAyODUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWExMWI5MTA2MTkyNDhmNjkyN2ExZWY4NDQwMzQ4YWQuc2V0Q29udGVudChodG1sXzU0ZjY1ZWY4MThjMzRjN2ZiMTc5YmZhOGNlNjk0ZWQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I1Y2U0ODcwMDljMjQzYWE4MzM3MjQ0YTQ2ZDgxZmZlLmJpbmRQb3B1cChwb3B1cF9lYTExYjkxMDYxOTI0OGY2OTI3YTFlZjg0NDAzNDhhZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTQ5ZjM3MDcxZTQ4NDY5OTliNzQwMmRkMmNiMjFmMjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDkzNzAyNDE5MzI3NywgLTczLjk5OTIzMzg0MTg5NjA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmVlYWMyNmY4ZjcwNDhmM2EzZGRiMjRkMzczYzgzNGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMTEzZjRhMDk1MzI0ZGVhOGQwZWVkNjQyZGVjYTZjNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjExM2Y0YTA5NTMyNGRlYThkMGVlZDY0MmRlY2E2YzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjkgQXZlICYgVyAyOCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzk1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0MTg8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZWVhYzI2ZjhmNzA0OGYzYTNkZGIyNGQzNzNjODM0ZS5zZXRDb250ZW50KGh0bWxfMjExM2Y0YTA5NTMyNGRlYThkMGVlZDY0MmRlY2E2YzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTQ5ZjM3MDcxZTQ4NDY5OTliNzQwMmRkMmNiMjFmMjkuYmluZFBvcHVwKHBvcHVwXzJlZWFjMjZmOGY3MDQ4ZjNhM2RkYjI0ZDM3M2M4MzRlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMDZiN2Q0MjUxODk0MDlkOWQwMTQ4ZjMyMzMyOGMzMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcyNzA2MzYzMzQ4MzA2LCAtNzMuOTk2NjIxMzcwMzE1NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZGVkNmJlNjc5MGE0YWI2OGJiOTI5YWIxYjQzMjhiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjZGIyMzI1M2NlNjRlODI4NzQ2MDhhNTdlMjc2Yzc1ID0gJChgPGRpdiBpZD0iaHRtbF9iY2RiMjMyNTNjZTY0ZTgyODc0NjA4YTU3ZTI3NmM3NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWVyY2VyIFN0ICYgQmxlZWNrZXIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUyMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTU1PGJyPiBuZXQgZGVwYXJ0dXJlczogMzUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmRlZDZiZTY3OTBhNGFiNjhiYjkyOWFiMWI0MzI4YmIuc2V0Q29udGVudChodG1sX2JjZGIyMzI1M2NlNjRlODI4NzQ2MDhhNTdlMjc2Yzc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IwNmI3ZDQyNTE4OTQwOWQ5ZDAxNDhmMzIzMzI4YzMxLmJpbmRQb3B1cChwb3B1cF9iZGVkNmJlNjc5MGE0YWI2OGJiOTI5YWIxYjQzMjhiYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWYyMDdjNDk0NDM5NDJiYmFjZDQ4ZWI1Y2M5MmI0MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjkyMzY0OTkxMDAwNiwgLTczLjk5MDg2ODAzMTk3ODYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMTAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhZDM2YzlhZGEzNDQxYjdiNzRmZDgyNmZlZTc2YzMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNmNjExYzFkNDAxNDg3NTkxYzMyNmM5Nzk5NjFjNjIgPSAkKGA8ZGl2IGlkPSJodG1sXzkzZjYxMWMxZDQwMTQ4NzU5MWMzMjZjOTc5OTYxYzYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db29wZXIgU3F1YXJlICYgRSA3IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzM3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTMxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTIwNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYWQzNmM5YWRhMzQ0MWI3Yjc0ZmQ4MjZmZWU3NmMzMi5zZXRDb250ZW50KGh0bWxfOTNmNjExYzFkNDAxNDg3NTkxYzMyNmM5Nzk5NjFjNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWYyMDdjNDk0NDM5NDJiYmFjZDQ4ZWI1Y2M5MmI0MWYuYmluZFBvcHVwKHBvcHVwX2JhZDM2YzlhZGEzNDQxYjdiNzRmZDgyNmZlZTc2YzMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZTk0YWNjOTFmNjg0ZTUyODJkOTFiYzQ1MDk5MzY1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2NDIxMDA3MTY5MDY0LCAtNzMuOTY5MTA0NTg4MDMxNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjYsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZTAwMDgxODU2MmM0NjI0ODUwODQ4MWRhNWFkY2JiNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyYmVkYThjZGJmNTRjMTNhODM5NDMwMTIyNDRmNzA3ID0gJChgPGRpdiBpZD0iaHRtbF8zMmJlZGE4Y2RiZjU0YzEzYTgzOTQzMDEyMjQ0ZjcwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA2MSBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4My4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzU1PGJyPiBuZXQgZGVwYXJ0dXJlczogMjcyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlMDAwODE4NTYyYzQ2MjQ4NTA4NDgxZGE1YWRjYmI2LnNldENvbnRlbnQoaHRtbF8zMmJlZGE4Y2RiZjU0YzEzYTgzOTQzMDEyMjQ0ZjcwNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZTk0YWNjOTFmNjg0ZTUyODJkOTFiYzQ1MDk5MzY1MS5iaW5kUG9wdXAocG9wdXBfZWUwMDA4MTg1NjJjNDYyNDg1MDg0ODFkYTVhZGNiYjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhZTQwYTFhYzE0YTRhZDc5MTc1YTAzY2Q3NzEyOTQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzI0NTYzNDI5MDQzMiwgLTczLjk4OTQ0Mzc3ODk5MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC02LjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2Y3NzY3ZTU2OTg0NmM0ODQ1MDZiMTYyY2NhMzkzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4ODM2YjI3NzU1NDRjZTJiMmE4ZGVlM2QzNDNjMGUyID0gJChgPGRpdiBpZD0iaHRtbF85ODgzNmIyNzc1NTQ0Y2UyYjJhOGRlZTNkMzQzYzBlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAyIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMwNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTEyMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81N2Y3NzY3ZTU2OTg0NmM0ODQ1MDZiMTYyY2NhMzkzMS5zZXRDb250ZW50KGh0bWxfOTg4MzZiMjc3NTU0NGNlMmIyYThkZWUzZDM0M2MwZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmFlNDBhMWFjMTRhNGFkNzkxNzVhMDNjZDc3MTI5NDMuYmluZFBvcHVwKHBvcHVwXzU3Zjc3NjdlNTY5ODQ2YzQ4NDUwNmIxNjJjY2EzOTMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjAxYzkyYjkxY2E0NTBhOGFiN2MwNjVjYjQ4ZWIwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MzA3LCAtNzMuOTU5MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZmRkZGMyNzZiYzM0NTQ1YTk1NjZmODYzZmQ3NDQxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxM2ZhMDQ4YWEyNzQxNDJhYWY3MjI0OWNmMTgwZGI2ID0gJChgPGRpdiBpZD0iaHRtbF9lMTNmYTA0OGFhMjc0MTQyYWFmNzIyNDljZjE4MGRiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NSBBdmUgJiBFIDg4IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMDAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI1Mzxicj4gbmV0IGRlcGFydHVyZXM6IDUzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmZGRkYzI3NmJjMzQ1NDVhOTU2NmY4NjNmZDc0NDEzLnNldENvbnRlbnQoaHRtbF9lMTNmYTA0OGFhMjc0MTQyYWFmNzIyNDljZjE4MGRiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjAxYzkyYjkxY2E0NTBhOGFiN2MwNjVjYjQ4ZWIwOC5iaW5kUG9wdXAocG9wdXBfNGZkZGRjMjc2YmMzNDU0NWE5NTY2Zjg2M2ZkNzQ0MTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2OGM0YzQ2MWVhMDQwYmViY2ZlNGVkY2FjN2ZiZTcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg4MjIxMywgLTczLjk3MDQxNTYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzOWEyYTI4NDJhMDQ5NzFhYTlkYTg0NGZjMmVjNTM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI0ZDk0NTdiMDdkNDI0MTgyNmE0MTdlMTQ2NTc0ZmUgPSAkKGA8ZGl2IGlkPSJodG1sXzkyNGQ5NDU3YjA3ZDQyNDE4MjZhNDE3ZTE0NjU3NGZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDg5IFN0ICYgQ29sdW1idXMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzOWEyYTI4NDJhMDQ5NzFhYTlkYTg0NGZjMmVjNTM1LnNldENvbnRlbnQoaHRtbF85MjRkOTQ1N2IwN2Q0MjQxODI2YTQxN2UxNDY1NzRmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjhjNGM0NjFlYTA0MGJlYmNmZTRlZGNhYzdmYmU3MS5iaW5kUG9wdXAocG9wdXBfNTM5YTJhMjg0MmEwNDk3MWFhOWRhODQ0ZmMyZWM1MzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFkYWUxYTRmMDk0NTQ2NjZhNGQxNDcxOGNkZTBmNDkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzgxNDEwNzAwMTkwMDE1LCAtNzMuOTU1OTU5MDgxNjQ5NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjM1NWMxNThkOTQzNDQ0OGIyYmE0Nzk4MzFlMWI3ZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNmY4ZWFjY2NkNzE0Zjg0OTE2YjU1ZjNhYzhiM2MxMSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjZmOGVhY2NjZDcxNGY4NDkxNmI1NWYzYWM4YjNjMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODggU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA2ODxicj4gbmV0IGRlcGFydHVyZXM6IC02My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzU1YzE1OGQ5NDM0NDQ4YjJiYTQ3OTgzMWUxYjdmZC5zZXRDb250ZW50KGh0bWxfMjZmOGVhY2NjZDcxNGY4NDkxNmI1NWYzYWM4YjNjMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWRhZTFhNGYwOTQ1NDY2NmE0ZDE0NzE4Y2RlMGY0OTIuYmluZFBvcHVwKHBvcHVwX2IzNTVjMTU4ZDk0MzQ0NDhiMmJhNDc5ODMxZTFiN2ZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNDhkNzViMjI4MzY0ZjlhOGUxMmNhMDNlMDc5YzgyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4ODM5LCAtNzMuOTc0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkMTIxNDU0OTEwZjQxMGFhYmIwMWY3YmEwNWQ3YTBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDYwYWUzMTE3N2EyNGQ0ZTkxOTQwNzdlZjQ4NjVlZmYgPSAkKGA8ZGl2IGlkPSJodG1sXzA2MGFlMzExNzdhMjRkNGU5MTk0MDc3ZWY0ODY1ZWZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDg3IFN0ICAmIEFtc3RlcmRhbSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI3Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE1Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZDEyMTQ1NDkxMGY0MTBhYWJiMDFmN2JhMDVkN2EwZS5zZXRDb250ZW50KGh0bWxfMDYwYWUzMTE3N2EyNGQ0ZTkxOTQwNzdlZjQ4NjVlZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjQ4ZDc1YjIyODM2NGY5YThlMTJjYTAzZTA3OWM4MjAuYmluZFBvcHVwKHBvcHVwXzFkMTIxNDU0OTEwZjQxMGFhYmIwMWY3YmEwNWQ3YTBlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYjMwOWVjZDk5ZTc0NDNlYjlhNWYxMWE4M2JiZGM5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MDYyODQsIC03My45NTIxNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTgyN2U4ODEyODY2NGMwM2JhYTI0YmQ3NjhkNjNlZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YTUzYWFjZmQ2ZTI0MWU0YWZhNTQ1NWUzNWMxYWNhMCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWE1M2FhY2ZkNmUyNDFlNGFmYTU0NTVlMzVjMWFjYTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODkgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjU4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTM4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4MjdlODgxMjg2NjRjMDNiYWEyNGJkNzY4ZDYzZWVhLnNldENvbnRlbnQoaHRtbF85YTUzYWFjZmQ2ZTI0MWU0YWZhNTQ1NWUzNWMxYWNhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYjMwOWVjZDk5ZTc0NDNlYjlhNWYxMWE4M2JiZGM5YS5iaW5kUG9wdXAocG9wdXBfNTgyN2U4ODEyODY2NGMwM2JhYTI0YmQ3NjhkNjNlZWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjZDk3MTljODE0YzQ1MDc5YWM3YzM3MjZiZTc2NjM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc4MzAxLCAtNzMuOTQ4ODEzNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTguNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkMWVkY2NjMjdiODRlYjNhZWZhYTFjZWYxMDBhOTA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBiN2RlNWZiMTVmNDNhOGJlZmZhYmU3NTYxNmFiMTggPSAkKGA8ZGl2IGlkPSJodG1sX2UwYjdkZTVmYjE1ZjQzYThiZWZmYWJlNzU2MTZhYjE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDg4IFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIyOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTc0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkMWVkY2NjMjdiODRlYjNhZWZhYTFjZWYxMDBhOTA0LnNldENvbnRlbnQoaHRtbF9lMGI3ZGU1ZmIxNWY0M2E4YmVmZmFiZTc1NjE2YWIxOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jY2Q5NzE5YzgxNGM0NTA3OWFjN2MzNzI2YmU3NjYzNC5iaW5kUG9wdXAocG9wdXBfNmQxZWRjY2MyN2I4NGViM2FlZmFhMWNlZjEwMGE5MDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmMjQ0MDQ4OWZkODRmZDQ5NWJkOWY3NGQyOGJiNDQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkwMTc5NDgwOTUwODEsIC03My45NzI4ODkxODQ5NTE3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmOGMwYmIxYTYzNTQ0NGViODcyMzZhOGFmOTgzYzI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODJkYjBlZDk5YWUzNGRmMTkxZjQ3NzBjMTE0ZTM3YTAgPSAkKGA8ZGl2IGlkPSJodG1sXzgyZGIwZWQ5OWFlMzRkZjE5MWY0NzcwYzExNGUzN2EwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDkwIFN0ICYgQW1zdGVyZGFtIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTM2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmOGMwYmIxYTYzNTQ0NGViODcyMzZhOGFmOTgzYzI3LnNldENvbnRlbnQoaHRtbF84MmRiMGVkOTlhZTM0ZGYxOTFmNDc3MGMxMTRlMzdhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZjI0NDA0ODlmZDg0ZmQ0OTViZDlmNzRkMjhiYjQ0OC5iaW5kUG9wdXAocG9wdXBfZGY4YzBiYjFhNjM1NDQ0ZWI4NzIzNmE4YWY5ODNjMjcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0MzRiMThlNjJlMzQ2Nzg4YmJhNmMzYTllOGUyN2NmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc3OTQ1MywgLTczLjk0NjA0MTAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTM0MzcyNGZiNGE4NDI0MThmMjU4NjI1ZmEyNzNhMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ODEwY2Q2NTA4Yzk0ZWYxOTg3Zjg3OGYyZGM2ZDIxMSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDgxMGNkNjUwOGM5NGVmMTk4N2Y4NzhmMmRjNmQyMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgODkgU3QgJiBZb3JrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjI2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4ODxicj4gbmV0IGRlcGFydHVyZXM6IC0xMzguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTM0MzcyNGZiNGE4NDI0MThmMjU4NjI1ZmEyNzNhMTguc2V0Q29udGVudChodG1sXzQ4MTBjZDY1MDhjOTRlZjE5ODdmODc4ZjJkYzZkMjExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0MzRiMThlNjJlMzQ2Nzg4YmJhNmMzYTllOGUyN2NmLmJpbmRQb3B1cChwb3B1cF9lMzQzNzI0ZmI0YTg0MjQxOGYyNTg2MjVmYTI3M2ExOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzk0MjE2MDcyMGVlNDhiNGFhNTg4YTk3ZTg3ZTQxNTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODU3ODUxMDAwMDAwMDUsIC03My45NTc0ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmMjYzZDAyZDYxYzQ4ZGY4NzNlMzIwOTZmZWJjMzVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmMyNzU0OGZkODU4NDIwYTliYjU1NjE3YjRlN2YyYWEgPSAkKGA8ZGl2IGlkPSJodG1sX2ZjMjc1NDhmZDg1ODQyMGE5YmI1NTYxN2I0ZTdmMmFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41IEF2ZSAmIEUgOTMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDcyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA0Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZjI2M2QwMmQ2MWM0OGRmODczZTMyMDk2ZmViYzM1YS5zZXRDb250ZW50KGh0bWxfZmMyNzU0OGZkODU4NDIwYTliYjU1NjE3YjRlN2YyYWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzk0MjE2MDcyMGVlNDhiNGFhNTg4YTk3ZTg3ZTQxNTYuYmluZFBvcHVwKHBvcHVwXzlmMjYzZDAyZDYxYzQ4ZGY4NzNlMzIwOTZmZWJjMzVhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZDNjNjBlZDhiZmU0NzJjYTMxOWZjMDk4OTdjZDE3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MjEsIC03My45NzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5NzQxZWQ0ZjhmZTRiZDE5ZDUwMjViZmQ4NTNjOTMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk0OWI3ODk5OTFlNGM0YmIxYjgwMDVkOThlNmNiNDYgPSAkKGA8ZGl2IGlkPSJodG1sXzA5NDliNzg5OTkxZTRjNGJiMWI4MDA1ZDk4ZTZjYjQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDkyIFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTU0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5NzQxZWQ0ZjhmZTRiZDE5ZDUwMjViZmQ4NTNjOTMwLnNldENvbnRlbnQoaHRtbF8wOTQ5Yjc4OTk5MWU0YzRiYjFiODAwNWQ5OGU2Y2I0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZDNjNjBlZDhiZmU0NzJjYTMxOWZjMDk4OTdjZDE3NC5iaW5kUG9wdXAocG9wdXBfMzk3NDFlZDRmOGZlNGJkMTlkNTAyNWJmZDg1M2M5MzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlNWI4YTJhN2VlZDRlZTI4ZjJkMjQ4MTUyNDBjZjlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzgzNTAxNiwgLTczLjk1NTMyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNzlkYWE0MWNlZGY0ZTgwOTkwN2U2YTMyNTQ5YWI2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzMzUzNzJmOTAzNzQxOTY5NTgyYWQyNjU2YjUwNGNiID0gJChgPGRpdiBpZD0iaHRtbF80MzM1MzcyZjkwMzc0MTk2OTU4MmFkMjY1NmI1MDRjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA5MSBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMjQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDgxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTQzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3OWRhYTQxY2VkZjRlODA5OTA3ZTZhMzI1NDlhYjYzLnNldENvbnRlbnQoaHRtbF80MzM1MzcyZjkwMzc0MTk2OTU4MmFkMjY1NmI1MDRjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZTViOGEyYTdlZWQ0ZWUyOGYyZDI0ODE1MjQwY2Y5ZC5iaW5kUG9wdXAocG9wdXBfMTc5ZGFhNDFjZWRmNGU4MDk5MDdlNmEzMjU0OWFiNjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZiMWJhNzJmYmVkYTQwMjhhOTMyNTA0YmQyMGVmYjNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkxMjcwMDAwMDAwMDA0LCAtNzMuOTY0ODM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTRjZmE5NDFjYjZmNDlkM2I3OTFlNTQxMDQ1MDc0Y2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMzExNmMwMGMzYWQ0ZDhiOTg3Y2NlODAwMDBkOTZjZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzMxMTZjMDBjM2FkNGQ4Yjk4N2NjZTgwMDAwZDk2Y2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWwgUGFyayBXICYgVyA5NiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtODguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTRjZmE5NDFjYjZmNDlkM2I3OTFlNTQxMDQ1MDc0Y2Uuc2V0Q29udGVudChodG1sXzMzMTE2YzAwYzNhZDRkOGI5ODdjY2U4MDAwMGQ5NmNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZiMWJhNzJmYmVkYTQwMjhhOTMyNTA0YmQyMGVmYjNiLmJpbmRQb3B1cChwb3B1cF81NGNmYTk0MWNiNmY0OWQzYjc5MWU1NDEwNDUwNzRjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWE1YTU2NWNmYmNiNDk1OWFiYTBjM2Q1NTk0NjgyM2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Njg2NjI3MDAwMDAwMDYsIC03My45Nzk4ODA2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjlkODAzNTVkZGY0YTQ2YWE3NjAyNDQzYzljNmMyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyYTliNmMxMTJhZjQ3NzFhZDdmMGQzZjg2ZWYzZjVmID0gJChgPGRpdiBpZD0iaHRtbF9lMmE5YjZjMTEyYWY0NzcxYWQ3ZjBkM2Y4NmVmM2Y1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NiBTdCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjlkODAzNTVkZGY0YTQ2YWE3NjAyNDQzYzljNmMyMS5zZXRDb250ZW50KGh0bWxfZTJhOWI2YzExMmFmNDc3MWFkN2YwZDNmODZlZjNmNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWE1YTU2NWNmYmNiNDk1OWFiYTBjM2Q1NTk0NjgyM2MuYmluZFBvcHVwKHBvcHVwX2IyOWQ4MDM1NWRkZjRhNDZhYTc2MDI0NDNjOWM2YzIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDAyN2IzODM0ZDU0NzgyODQxNjBhNGEyNzAwNmRkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NjM3MSwgLTczLjk5MzgzMzI0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODQ0ZmZhMTI1Zjg0NDI0YTYxODMyMmM2NmFkZmMzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5OGZjYWI0YjM4NzQ0ZTg4NWNlNjViOGE3MmI5Y2EzID0gJChgPGRpdiBpZD0iaHRtbF82OThmY2FiNGIzODc0NGU4ODVjZTY1YjhhNzJiOWNhMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2FycmVuIFN0ICYgQ291cnQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDk5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMTM8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODQ0ZmZhMTI1Zjg0NDI0YTYxODMyMmM2NmFkZmMzMC5zZXRDb250ZW50KGh0bWxfNjk4ZmNhYjRiMzg3NDRlODg1Y2U2NWI4YTcyYjljYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTQwMjdiMzgzNGQ1NDc4Mjg0MTYwYTRhMjcwMDZkZGEuYmluZFBvcHVwKHBvcHVwXzk4NDRmZmExMjVmODQ0MjRhNjE4MzIyYzY2YWRmYzMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMWRhYTY0MDIxNjQ0NDQzOWZiOWRhZDgzM2M3OTBlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2NTE0NjgxNTMzNzkyLCAtNzMuOTc2Mzc2MDU2NjcxMTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDJiNGUxZTMzNTg0MGRkODE1ZjVlYzRhNDY3ODg5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzM2YxMDc2YjkxYzRjMTViMjdhNTQ5OGVkOGUwMmU3ID0gJChgPGRpdiBpZD0iaHRtbF9mMzNmMTA3NmI5MWM0YzE1YjI3YTU0OThlZDhlMDJlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHJvc3BlY3QgUGFyayBXZXN0ICYgOCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY5PGJyPiBuZXQgZGVwYXJ0dXJlczogOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMDJiNGUxZTMzNTg0MGRkODE1ZjVlYzRhNDY3ODg5MS5zZXRDb250ZW50KGh0bWxfZjMzZjEwNzZiOTFjNGMxNWIyN2E1NDk4ZWQ4ZTAyZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjFkYWE2NDAyMTY0NDQ0MzlmYjlkYWQ4MzNjNzkwZTAuYmluZFBvcHVwKHBvcHVwXzIwMmI0ZTFlMzM1ODQwZGQ4MTVmNWVjNGE0Njc4ODkxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MGM2ZWM1MTc2NTg0NTBlOTA5YWFkNTdlN2QxZWM1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MTk1NTcsIC03My45NjgwODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDkyZmEwZTkxNjk0ZjJjOTg2ZTIyYjQ4ODQyOTI1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzNGMyNWYxMjczNjRhM2M4ODA0MWRkMjM0MDhmNmJjID0gJChgPGRpdiBpZD0iaHRtbF9iMzRjMjVmMTI3MzY0YTNjODgwNDFkZDIzNDA4ZjZiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1idXMgQXZlICYgVyA5NSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjc3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMTE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQ5MmZhMGU5MTY5NGYyYzk4NmUyMmI0ODg0MjkyNWMuc2V0Q29udGVudChodG1sX2IzNGMyNWYxMjczNjRhM2M4ODA0MWRkMjM0MDhmNmJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYwYzZlYzUxNzY1ODQ1MGU5MDlhYWQ1N2U3ZDFlYzU5LmJpbmRQb3B1cChwb3B1cF8wNDkyZmEwZTkxNjk0ZjJjOTg2ZTIyYjQ4ODQyOTI1YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTM5Nzg2YjE1OTkxNDIyNjhkMTI4OGIwZTU3ZDIzYzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTY5MzQ3LCAtNzMuOTY0MzQxMjI5MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOTU2YjRjZmE5Njk0MTIwYWI5MmM2OWU3ZWYzNWJlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhNTNjNTMyZGFiMjRjN2M5NDY5ODIxYjYyNWI5MGM0ID0gJChgPGRpdiBpZD0iaHRtbF9hYTUzYzUzMmRhYjI0YzdjOTQ2OTgyMWI2MjViOTBjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1idXMgQXZlICYgVyAxMDMgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDxicj4gbmV0IGRlcGFydHVyZXM6IC05LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5NTZiNGNmYTk2OTQxMjBhYjkyYzY5ZTdlZjM1YmU5LnNldENvbnRlbnQoaHRtbF9hYTUzYzUzMmRhYjI0YzdjOTQ2OTgyMWI2MjViOTBjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81Mzk3ODZiMTU5OTE0MjI2OGQxMjg4YjBlNTdkMjNjMC5iaW5kUG9wdXAocG9wdXBfMTk1NmI0Y2ZhOTY5NDEyMGFiOTJjNjllN2VmMzViZTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NlZTFiNzU1ZjA5NjRjMmFhOTgxMmE2Yzk5NDg1ZTA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg0OTg5NCwgLTczLjk5NDQwMzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNjMWEwNjk1NzZmNDY3Mjg2MmU0YThlZmJiZWU3ZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YmVkMmYxYjU0ZDk0OGNjYTI5YmIzYmZjZGJlODk3ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNGJlZDJmMWI1NGQ5NDhjY2EyOWJiM2JmY2RiZTg5N2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJ1dGxlciBTdCAmIENvdXJ0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMjYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTc4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzYzFhMDY5NTc2ZjQ2NzI4NjJlNGE4ZWZiYmVlN2VmLnNldENvbnRlbnQoaHRtbF80YmVkMmYxYjU0ZDk0OGNjYTI5YmIzYmZjZGJlODk3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZWUxYjc1NWYwOTY0YzJhYTk4MTJhNmM5OTQ4NWUwNy5iaW5kUG9wdXAocG9wdXBfNjNjMWEwNjk1NzZmNDY3Mjg2MmU0YThlZmJiZWU3ZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlZDliZDc4MzkxNDQ5MDVhNDc4Yzc2NWJkZTBiNTI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY4MTI3LCAtNzMuOTgzNzc2NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNGZjNjExMzI5Y2M0ZDY1YWU0NTAwMzE0NDRlYTA1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyMzRhOTkwYmQ1OTQxOTJiMmRmNjYxYzdmNzVjMDI2ID0gJChgPGRpdiBpZD0iaHRtbF82MjM0YTk5MGJkNTk0MTkyYjJkZjY2MWM3Zjc1YzAyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+NiBBdmUgJiA5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTRmYzYxMTMyOWNjNGQ2NWFlNDUwMDMxNDQ0ZWEwNTkuc2V0Q29udGVudChodG1sXzYyMzRhOTkwYmQ1OTQxOTJiMmRmNjYxYzdmNzVjMDI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlZDliZDc4MzkxNDQ5MDVhNDc4Yzc2NWJkZTBiNTI1LmJpbmRQb3B1cChwb3B1cF9hNGZjNjExMzI5Y2M0ZDY1YWU0NTAwMzE0NDRlYTA1OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDhjNzEzMTA3MTY4NDgwOTk5OTU3MDlhNTdlZGNmZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODExMjIyOTkzNDE2NTQsIC03My45NDk2NTU4OTA0NjQ3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTkuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjNTRmZjRmMWU1NzQ1ODZiNWYyMThhMDkxN2I5MzkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzFlMTU4MzlhNTcwNDhlNGI4N2VkYmViMDhjYTNkY2EgPSAkKGA8ZGl2IGlkPSJodG1sX2MxZTE1ODM5YTU3MDQ4ZTRiODdlZGJlYjA4Y2EzZGNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDkxIFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI5MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE4Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzU0ZmY0ZjFlNTc0NTg2YjVmMjE4YTA5MTdiOTM5Mi5zZXRDb250ZW50KGh0bWxfYzFlMTU4MzlhNTcwNDhlNGI4N2VkYmViMDhjYTNkY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDhjNzEzMTA3MTY4NDgwOTk5OTU3MDlhNTdlZGNmZDcuYmluZFBvcHVwKHBvcHVwXzBjNTRmZjRmMWU1NzQ1ODZiNWYyMThhMDkxN2I5MzkyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOWU2NTgzMTVmYmI0MTY4OTM0YWFiMDI1ZDJmMWY4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2NjIwNzc5OTk5OTk5NSwgLTczLjk4MTk5ODg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzg4MDcxMTRlMTE0NGZhMjgwNDA3MDAxOWIwMDI0YWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZDZjMjI2YWVmNzc0ODQwYWFlMDViMTg5YjhjNDc5OCA9ICQoYDxkaXYgaWQ9Imh0bWxfZWQ2YzIyNmFlZjc3NDg0MGFhZTA1YjE4OWI4YzQ3OTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEwIFN0ICYgNyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1MDxicj4gbmV0IGRlcGFydHVyZXM6IC0xOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zODgwNzExNGUxMTQ0ZmEyODA0MDcwMDE5YjAwMjRhYS5zZXRDb250ZW50KGh0bWxfZWQ2YzIyNmFlZjc3NDg0MGFhZTA1YjE4OWI4YzQ3OTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjllNjU4MzE1ZmJiNDE2ODkzNGFhYjAyNWQyZjFmODIuYmluZFBvcHVwKHBvcHVwXzM4ODA3MTE0ZTExNDRmYTI4MDQwNzAwMTliMDAyNGFhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzc1ZjczMGU1MTM0ZDI0OGFiOGIxNDc1ZWRkNTgwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5NDE2NTQsIC03My45NzQxMjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2ViNTA4NTRkNTU3NDAyYTkwNjExNTI5YmI2Zjg1Y2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOTQ5ODVkODA2MjQ0ODFlYTRjNmYxNTYzZTY5Y2UwZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMDk0OTg1ZDgwNjI0NDgxZWE0YzZmMTU2M2U2OWNlMGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgRW5kIEF2ZSAmIFcgOTQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIyMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTA5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTExMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZWI1MDg1NGQ1NTc0MDJhOTA2MTE1MjliYjZmODVjZS5zZXRDb250ZW50KGh0bWxfMDk0OTg1ZDgwNjI0NDgxZWE0YzZmMTU2M2U2OWNlMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzM3NWY3MzBlNTEzNGQyNDhhYjhiMTQ3NWVkZDU4MDguYmluZFBvcHVwKHBvcHVwXzNlYjUwODU0ZDU1NzQwMmE5MDYxMTUyOWJiNmY4NWNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjE4OWFlODBiODU0N2U0ODA2N2MyOTdjMTYzNjNiZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NjE3NTc5OTk5OTk5NCwgLTczLjk5NjQ1Mjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5YjhiZmNlMjhiYjQzMzNhNGVhYTQ2Mzg2MWRhZWM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjc5MmI0OTk3MTI3NGEwYjk3NjU4NmIwMzlhYjA0NDcgPSAkKGA8ZGl2IGlkPSJodG1sXzY3OTJiNDk5NzEyNzRhMGI5NzY1ODZiMDM5YWIwNDQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5LYW5lIFN0ICYgQ2xpbnRvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1NDxicj4gbmV0IGRlcGFydHVyZXM6IC03Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOWI4YmZjZTI4YmI0MzMzYTRlYWE0NjM4NjFkYWVjOS5zZXRDb250ZW50KGh0bWxfNjc5MmI0OTk3MTI3NGEwYjk3NjU4NmIwMzlhYjA0NDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWIxODlhZTgwYjg1NDdlNDgwNjdjMjk3YzE2MzYzYmYuYmluZFBvcHVwKHBvcHVwX2Q5YjhiZmNlMjhiYjQzMzNhNGVhYTQ2Mzg2MWRhZWM5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OWJlMmUyZTNlYjk0OWYzODU2NWE0ODIzNWE5NGI4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NTkyMDEsIC03My45NDg2MDI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmE1YzM3YjhjODM4NGZlM2E0YWZjYjUyYTZjMDFkYTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZjI5NjNhZmU4OTI0YWM3Yjg0ZmMzZjdiY2M5ZTFlZCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2YyOTYzYWZlODkyNGFjN2I4NGZjM2Y3YmNjOWUxZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgOTcgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDQwPGJyPiBuZXQgZGVwYXJ0dXJlczogMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTVjMzdiOGM4Mzg0ZmUzYTRhZmNiNTJhNmMwMWRhMi5zZXRDb250ZW50KGh0bWxfM2YyOTYzYWZlODkyNGFjN2I4NGZjM2Y3YmNjOWUxZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTliZTJlMmUzZWI5NDlmMzg1NjVhNDgyMzVhOTRiODIuYmluZFBvcHVwKHBvcHVwXzJhNWMzN2I4YzgzODRmZTNhNGFmY2I1MmE2YzAxZGEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmFjNjYwMjQ5ODQ0YzgwOTQ3OWM2ZDRhNTY5YzRmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2Mzc3OSwgLTczLjk4Mzk2ODQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTJkNWViMmMyYjUyNGU1MGFiMDRiZDM4ZGM3MWEzY2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZTg5M2JlMGVjYzY0NDcxOGJhZmU3YjAyYjZiZGY3YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMmU4OTNiZTBlY2M2NDQ3MThiYWZlN2IwMmI2YmRmN2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjE0IFN0ICYgNyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDg2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Mjxicj4gbmV0IGRlcGFydHVyZXM6IC00NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMmQ1ZWIyYzJiNTI0ZTUwYWIwNGJkMzhkYzcxYTNjZC5zZXRDb250ZW50KGh0bWxfMmU4OTNiZTBlY2M2NDQ3MThiYWZlN2IwMmI2YmRmN2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZhYzY2MDI0OTg0NGM4MDk0NzljNmQ0YTU2OWM0ZjIuYmluZFBvcHVwKHBvcHVwX2UyZDVlYjJjMmI1MjRlNTBhYjA0YmQzOGRjNzFhM2NkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMzVlZDg5OTE3YzE0NzZjOWQ1ZjU4ZmMzZWQ2ZWZmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NzYzMTU1LCAtNzQuMDAxNjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNWZlMmRhOTMzZWI0YzE1YjM4NjU3NjllYWQ2ZmI1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5ZmRlMDY3ZjQyOTRmNzlhZDBmNGM4NGFiZTk0ZTI0ID0gJChgPGRpdiBpZD0iaHRtbF8zOWZkZTA2N2Y0Mjk0Zjc5YWQwZjRjODRhYmU5NGUyNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1iaWEgU3QgJiBLYW5lIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNDYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU1PGJyPiBuZXQgZGVwYXJ0dXJlczogLTkxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1ZmUyZGE5MzNlYjRjMTViMzg2NTc2OWVhZDZmYjU4LnNldENvbnRlbnQoaHRtbF8zOWZkZTA2N2Y0Mjk0Zjc5YWQwZjRjODRhYmU5NGUyNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMzVlZDg5OTE3YzE0NzZjOWQ1ZjU4ZmMzZWQ2ZWZmZi5iaW5kUG9wdXAocG9wdXBfMDVmZTJkYTkzM2ViNGMxNWIzODY1NzY5ZWFkNmZiNTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlNjhlMTNhZjA1MjQzOWJiNTUzMjg3M2MxNGZhNDc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzgxNzIxMjAwMDAwMDEsIC03My45NDU5NDAwMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTcuNiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1MzZhMWQ4Y2Y4OTQ4MTRiZWU5ZTk3ZWQyMDdkNDA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjI4YTQxZTQ0OGYxNDE3ZDhhMGFhMzJlZWRiNTQ4YjIgPSAkKGA8ZGl2IGlkPSJodG1sX2YyOGE0MWU0NDhmMTQxN2Q4YTBhYTMyZWVkYjU0OGIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xIEF2ZSAmIEUgOTQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIyOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTUyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1MzZhMWQ4Y2Y4OTQ4MTRiZWU5ZTk3ZWQyMDdkNDA1LnNldENvbnRlbnQoaHRtbF9mMjhhNDFlNDQ4ZjE0MTdkOGEwYWEzMmVlZGI1NDhiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZTY4ZTEzYWYwNTI0MzliYjU1MzI4NzNjMTRmYTQ3OC5iaW5kUG9wdXAocG9wdXBfYjUzNmExZDhjZjg5NDgxNGJlZTllOTdlZDIwN2Q0MDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiMWExN2IyOGEwNjQwZWE4MmM3ODQ3N2NmM2Y4MWNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY2MzE4MTAwMDAwMDA1LCAtNzMuOTg1NDYxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuOCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1MjAzNjA4Y2Q2YTQzOGQ5MGJhNjlhZTdjMmM3MmJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZiZWIyOGI4YWE2NGMyNThkZmNlOTFiMjc2ZTJjOTcgPSAkKGA8ZGl2IGlkPSJodG1sXzhmYmViMjhiOGFhNjRjMjU4ZGZjZTkxYjI3NmUyYzk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij42IEF2ZSAmIDEyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTUyMDM2MDhjZDZhNDM4ZDkwYmE2OWFlN2MyYzcyYmUuc2V0Q29udGVudChodG1sXzhmYmViMjhiOGFhNjRjMjU4ZGZjZTkxYjI3NmUyYzk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRiMWExN2IyOGEwNjQwZWE4MmM3ODQ3N2NmM2Y4MWNiLmJpbmRQb3B1cChwb3B1cF9hNTIwMzYwOGNkNmE0MzhkOTBiYTY5YWU3YzJjNzJiZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDI5ZGQxYzAxYmYyNGM3OGJjNmQ1MjVjNDZlZTljNjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTM3NzA0LCAtNzMuOTcxODg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTE2MDQ2NDhiMmUyNGIxOGE2ZGM0YjE3Y2NlYjAyZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDU0NDI3NzE4NzE0NmVjYWViY2Q5NDkwNWE0ZmVhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzQ1NDQyNzcxODcxNDZlY2FlYmNkOTQ5MDVhNGZlYTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgOTUgU3QgJiBCcm9hZHdheTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTE2MDQ2NDhiMmUyNGIxOGE2ZGM0YjE3Y2NlYjAyZmQuc2V0Q29udGVudChodG1sXzM0NTQ0Mjc3MTg3MTQ2ZWNhZWJjZDk0OTA1YTRmZWEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQyOWRkMWMwMWJmMjRjNzhiYzZkNTI1YzQ2ZWU5YzY3LmJpbmRQb3B1cChwb3B1cF8xMTYwNDY0OGIyZTI0YjE4YTZkYzRiMTdjY2ViMDJmZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTYwMmVhYjgwZjg0NGJjMTg5MTdlODViN2YwMmY2ZTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODQ3NTEzOTk5OTk5OTYsIC03My45OTkxNzI1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTUuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODhjNjJhZTM3NTg0M2ZkYTQ4OWE3NDdkOGFlMTI3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhOGYxMmFiYjY3MzQ0MDliMDkwYzIyNDdlMjlkMTA4ID0gJChgPGRpdiBpZD0iaHRtbF9hYThmMTJhYmI2NzM0NDA5YjA5MGMyMjQ3ZTI5ZDEwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVucnkgU3QgJiBEZWdyYXcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIxMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogOTU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4OGM2MmFlMzc1ODQzZmRhNDg5YTc0N2Q4YWUxMjczLnNldENvbnRlbnQoaHRtbF9hYThmMTJhYmI2NzM0NDA5YjA5MGMyMjQ3ZTI5ZDEwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NjAyZWFiODBmODQ0YmMxODkxN2U4NWI3ZjAyZjZlOS5iaW5kUG9wdXAocG9wdXBfNzg4YzYyYWUzNzU4NDNmZGE0ODlhNzQ3ZDhhZTEyNzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiYzA2NmZhYzE5NDQ4ZjNiN2UyMjUwNGFjNjg3N2EyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzk4OTkzNzAwMDAwMDA0LCAtNzMuOTY2MjE3Mzc3Nzk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGU3N2UzNDI4YjcwNGVhMmI1NTM1Zjk0NjE4ZjNjZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZGE4OTA5YWQ4YTg0NDUwYjU0MDZlOGY1Mzc3YzM3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNGRhODkwOWFkOGE4NDQ1MGI1NDA2ZThmNTM3N2MzNzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTA0IFN0ICYgQW1zdGVyZGFtIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNzguMDxicj4gdG90YWwgYXJyaXZhbHM6IDQxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTM3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlNzdlMzQyOGI3MDRlYTJiNTUzNWY5NDYxOGYzY2Q5LnNldENvbnRlbnQoaHRtbF80ZGE4OTA5YWQ4YTg0NDUwYjU0MDZlOGY1Mzc3YzM3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YmMwNjZmYWMxOTQ0OGYzYjdlMjI1MDRhYzY4NzdhMi5iaW5kUG9wdXAocG9wdXBfMGU3N2UzNDI4YjcwNGVhMmI1NTM1Zjk0NjE4ZjNjZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlZjk4YTRmMmI4ZDRhMDliM2Q1YWVhNDdmZGNkYWI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY4NjI3MywgLTczLjk4NzAwMDUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGJlYjQ5Y2I5NTU0NGIwYzkwNDIxMzBlN2M2NTQ1ZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MTk0MjUwMDc4MzU0NGUzOTMzNjE5OGJhOWNiMTMwZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTE5NDI1MDA3ODM1NDRlMzkzMzYxOThiYTljYjEzMGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEwIFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDc2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Mjxicj4gbmV0IGRlcGFydHVyZXM6IC0zNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYmViNDljYjk1NTQ0YjBjOTA0MjEzMGU3YzY1NDVmZi5zZXRDb250ZW50KGh0bWxfOTE5NDI1MDA3ODM1NDRlMzkzMzYxOThiYTljYjEzMGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2VmOThhNGYyYjhkNGEwOWIzZDVhZWE0N2ZkY2RhYjkuYmluZFBvcHVwKHBvcHVwX2RiZWI0OWNiOTU1NDRiMGM5MDQyMTMwZTdjNjU0NWZmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OGQ5MTI4YzBjYzc0ODlmYTQ3MmJjOTQ1ZjcxMzE2NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2NjI4NywgLTczLjk4ODk1MDUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjgyYWU3YzhjYjI0NDZjZmFiNzg2MWE2MmM0N2IwNjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZTU1MTQ0YzhjMTU0NTNjYjc3NzAzYzhkMTFjNDQ0NiA9ICQoYDxkaXYgaWQ9Imh0bWxfMGU1NTE0NGM4YzE1NDUzY2I3NzcwM2M4ZDExYzQ0NDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjE0IFN0ICYgNSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDk3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0yNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODJhZTdjOGNiMjQ0NmNmYWI3ODYxYTYyYzQ3YjA2My5zZXRDb250ZW50KGh0bWxfMGU1NTE0NGM4YzE1NDUzY2I3NzcwM2M4ZDExYzQ0NDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNThkOTEyOGMwY2M3NDg5ZmE0NzJiYzk0NWY3MTMxNjUuYmluZFBvcHVwKHBvcHVwXzY4MmFlN2M4Y2IyNDQ2Y2ZhYjc4NjFhNjJjNDdiMDYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzEwNmY5YWIzNmU0ODE0OTBhNGQ2Y2M2OTIyNzkwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MzM5MywgLTczLjk2MzU1NTU5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwMGIwNDIyY2Y5NTQzYTRiNWIxMDk5ZmFmNmRjMDI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDRhNDFkZDdhZWVmNDhiYWE2ZmMwNzgyNDU0YmEwYzUgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0YTQxZGQ3YWVlZjQ4YmFhNmZjMDc4MjQ1NGJhMGM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsIFBhcmsgV2VzdCAmIFcgMTAwIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2NS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MDBiMDQyMmNmOTU0M2E0YjViMTA5OWZhZjZkYzAyOS5zZXRDb250ZW50KGh0bWxfZDRhNDFkZDdhZWVmNDhiYWE2ZmMwNzgyNDU0YmEwYzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTcxMDZmOWFiMzZlNDgxNDkwYTRkNmNjNjkyMjc5MDQuYmluZFBvcHVwKHBvcHVwXzcwMGIwNDIyY2Y5NTQzYTRiNWIxMDk5ZmFmNmRjMDI5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZTQxODg0OWJiMDU0NTFhYWU5ZDI0YjIwNWQyNGNkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MzExNjM5OTk5OTk5NiwgLTczLjk5Nzg1MjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDE5NmJkNTc4ODAzNDExOGE3YjE4YTllOGJiZGUyNTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjFiMjQxOWRhMWM0NjUzOTFkNjM2ZmM1M2YxYzU2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTIxYjI0MTlkYTFjNDY1MzkxZDYzNmZjNTNmMWM1NmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gU3QgJiBVbmlvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTExLjA8YnI+IHRvdGFsIGFycml2YWxzOiA1Mzxicj4gbmV0IGRlcGFydHVyZXM6IC01OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTk2YmQ1Nzg4MDM0MTE4YTdiMThhOWU4YmJkZTI1MS5zZXRDb250ZW50KGh0bWxfOTIxYjI0MTlkYTFjNDY1MzkxZDYzNmZjNTNmMWM1NmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2U0MTg4NDliYjA1NDUxYWFlOWQyNGIyMDVkMjRjZGYuYmluZFBvcHVwKHBvcHVwX2QxOTZiZDU3ODgwMzQxMThhN2IxOGE5ZThiYmRlMjUxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDMyMzgzNDhlMGE0YzhmOTU5MmI3NDVlNWJjYTVmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY2ODYwMzAwMDAwMDAwNCwgLTczLjk5MDQzOTQwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjY4MDU5YjNmOWZlNGIyMjlhOGYwYzJiMmQ0NDJhYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTU5ZDg2OWY2MWY0YTFjYWQ2MGY5ODkwOTI3OTI2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfOTk1OWQ4NjlmNjFmNGExY2FkNjBmOTg5MDkyNzkyNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjEyIFN0ICYgNCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMDxicj4gbmV0IGRlcGFydHVyZXM6IC0yOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNjgwNTliM2Y5ZmU0YjIyOWE4ZjBjMmIyZDQ0MmFiOC5zZXRDb250ZW50KGh0bWxfOTk1OWQ4NjlmNjFmNGExY2FkNjBmOTg5MDkyNzkyNmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmQzMjM4MzQ4ZTBhNGM4Zjk1OTJiNzQ1ZTViY2E1ZmIuYmluZFBvcHVwKHBvcHVwX2Y2ODA1OWIzZjlmZTRiMjI5YThmMGMyYjJkNDQyYWI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMDY1NGUzZDZmYjI0Y2UyYjdkNzJhZjUzODg4Y2VmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5ODE4NTYwMDAwMDAwNCwgLTczLjk2MDU5MDkwMDYwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGUzYjZiM2QzYTdjNDBjMzhkOTBhNWMzOGMyNjMyNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzQyNWYwYzI5NmQ0MTJmYjkwZDY4ZmE5M2E1ZDFiYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTc0MjVmMGMyOTZkNDEyZmI5MGQ2OGZhOTNhNWQxYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTA2IFN0ICYgQ2VudHJhbCBQYXJrIFdlc3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzE8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTM4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBlM2I2YjNkM2E3YzQwYzM4ZDkwYTVjMzhjMjYzMjQ4LnNldENvbnRlbnQoaHRtbF81NzQyNWYwYzI5NmQ0MTJmYjkwZDY4ZmE5M2E1ZDFiYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMDY1NGUzZDZmYjI0Y2UyYjdkNzJhZjUzODg4Y2VmMi5iaW5kUG9wdXAocG9wdXBfMGUzYjZiM2QzYTdjNDBjMzhkOTBhNWMzOGMyNjMyNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4ODc1ODhjNTk3NDQxMjk4YjM0ZWJkNjU5MmU5YzcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY4NTQ1NSwgLTczLjk5MzMzMjY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjUzN2NlNzQyZTE0NGE4ZDljZjBkY2Q3ODc0ZTQ0NGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMWI2ZDliYjUzM2I0MTVmYWQzZTgxZWVhN2MyM2Q1YSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzFiNmQ5YmI1MzNiNDE1ZmFkM2U4MWVlYTdjMjNkNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgQXZlICYgMTQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY0LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyODxicj4gbmV0IGRlcGFydHVyZXM6IC0zNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTM3Y2U3NDJlMTQ0YThkOWNmMGRjZDc4NzRlNDQ0Yi5zZXRDb250ZW50KGh0bWxfYzFiNmQ5YmI1MzNiNDE1ZmFkM2U4MWVlYTdjMjNkNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTg4NzU4OGM1OTc0NDEyOThiMzRlYmQ2NTkyZTljNzEuYmluZFBvcHVwKHBvcHVwXzY1MzdjZTc0MmUxNDRhOGQ5Y2YwZGNkNzg3NGU0NDRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMGMzMDUzNzhhZDI0YjZhYWNiMGNjMjNiMzVkMjc5ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NDkwMzIsIC03My45NTA1MDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQ3ZTAzMDdiN2Q5NDg5Zjk0NDRiYmI2YzYzZjQzMjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hODJiODk5ZjViYWE0ZTBlODI2ZWE5Yjc2MDdhMmZjNCA9ICQoYDxkaXYgaWQ9Imh0bWxfYTgyYjg5OWY1YmFhNGUwZTgyNmVhOWI3NjA3YTJmYzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgOTUgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTk2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQ3ZTAzMDdiN2Q5NDg5Zjk0NDRiYmI2YzYzZjQzMjUuc2V0Q29udGVudChodG1sX2E4MmI4OTlmNWJhYTRlMGU4MjZlYTliNzYwN2EyZmM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UwYzMwNTM3OGFkMjRiNmFhY2IwY2MyM2IzNWQyNzlkLmJpbmRQb3B1cChwb3B1cF9lNDdlMDMwN2I3ZDk0ODlmOTQ0NGJiYjZjNjNmNDMyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2IzZTRjYzQwNTc3NDg4M2JlYjg4MWQwM2I3YjFlZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzQzNCwgLTc0LjAwMTk0Njk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjQ1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTZjNDhjMTQxNzM0NGU4ODk5MmRmYzMzM2E1NmJmMzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNmY2ZDAwZmQ2MzU0YWI2YmI3OWRlZDMyZWExMzQ2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTZmNmQwMGZkNjM1NGFiNmJiNzlkZWQzMmVhMTM0NjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNsaW50b24gU3QgJiBDZW50cmUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDE3PGJyPiBuZXQgZGVwYXJ0dXJlczogOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNmM0OGMxNDE3MzQ0ZTg4OTkyZGZjMzMzYTU2YmYzMS5zZXRDb250ZW50KGh0bWxfMTZmNmQwMGZkNjM1NGFiNmJiNzlkZWQzMmVhMTM0NjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2IzZTRjYzQwNTc3NDg4M2JlYjg4MWQwM2I3YjFlZWQuYmluZFBvcHVwKHBvcHVwXzE2YzQ4YzE0MTczNDRlODg5OTJkZmMzMzNhNTZiZjMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ODFlMzBhYjJiNjE0MmNmODVjMzMyNThmZTBiMjg2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4NzcyMTM5OTk5OTk5NSwgLTczLjk0NzI4MzMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZkMWU3YTVhMTUyNGE0MjljY2VhOTBhMzY1MjJmYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZWExMmY4NmRlYjI0MGQwOGY3N2E1ZjMwZjc3MzA0ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfOGVhMTJmODZkZWIyNDBkMDhmNzdhNWYzMGY3NzMwNGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgQXZlICYgRSAxMDAgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMjxicj4gbmV0IGRlcGFydHVyZXM6IDAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmZkMWU3YTVhMTUyNGE0MjljY2VhOTBhMzY1MjJmYzQuc2V0Q29udGVudChodG1sXzhlYTEyZjg2ZGViMjQwZDA4Zjc3YTVmMzBmNzczMDRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ4MWUzMGFiMmI2MTQyY2Y4NWMzMzI1OGZlMGIyODYxLmJpbmRQb3B1cChwb3B1cF9iZmQxZTdhNWExNTI0YTQyOWNjZWE5MGEzNjUyMmZjNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTIwYWU2MTYzY2I5NGQyYmIyMDA1ZTI0YmRkN2M1N2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTUsIC03My45NjQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS43LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODVhMmFjMDRkYTNlNDJhOGFjMTU5MDBjMjYzYjZiNzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOGUxYTg2MjdmYjU0ZmUyOGJkMmNhNzU4ZGUyOGU5NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMThlMWE4NjI3ZmI1NGZlMjhiZDJjYTc1OGRlMjhlOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTAwIFN0ICYgTWFuaGF0dGFuIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogODQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTM0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1YTJhYzA0ZGEzZTQyYThhYzE1OTAwYzI2M2I2Yjc0LnNldENvbnRlbnQoaHRtbF8xOGUxYTg2MjdmYjU0ZmUyOGJkMmNhNzU4ZGUyOGU5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81MjBhZTYxNjNjYjk0ZDJiYjIwMDVlMjRiZGQ3YzU3YS5iaW5kUG9wdXAocG9wdXBfODVhMmFjMDRkYTNlNDJhOGFjMTU5MDBjMjYzYjZiNzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlM2RhZTU0Yzc2YTQ4NTY4ZmQ2OWExZGY2NDI5N2ZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyOTE1MSwgLTczLjk5MzE4MjA4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTIzODA0M2I2NzAwNGM2OWEwN2I0NGIzMzdlZWVjYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDZhZGU4YzMwNWI0MDM5YmI1NTY0OTdmNmFlMmMzOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMDQ2YWRlOGMzMDViNDAzOWJiNTU2NDk3ZjZhZTJjMzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlZ3JhdyBTdCAmIFNtaXRoIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMjQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTIzODA0M2I2NzAwNGM2OWEwN2I0NGIzMzdlZWVjYTcuc2V0Q29udGVudChodG1sXzA0NmFkZThjMzA1YjQwMzliYjU1NjQ5N2Y2YWUyYzM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFlM2RhZTU0Yzc2YTQ4NTY4ZmQ2OWExZGY2NDI5N2ZhLmJpbmRQb3B1cChwb3B1cF81MjM4MDQzYjY3MDA0YzY5YTA3YjQ0YjMzN2VlZWNhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzljODdjMTQxMWMyNDEwNThiZDc3NmJhM2EyNGY2MjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzI1MDU3OTk5OTk5OTYsIC03NC4wMDQ5NDY5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMDUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTJkM2JjYmQ1OWI0YzVmYTExM2ZkOGQ1YmNkMDQ4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0NzQxMTI2NDEwYTRhMjNhZDNjZTU0YjRmYjIwYjc2ID0gJChgPGRpdiBpZD0iaHRtbF8yNDc0MTEyNjQxMGE0YTIzYWQzY2U1NGI0ZmIyMGI3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVucnkgU3QgJiBCYXkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIwLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxOTxicj4gbmV0IGRlcGFydHVyZXM6IC0xLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlMmQzYmNiZDU5YjRjNWZhMTEzZmQ4ZDViY2QwNDhjLnNldENvbnRlbnQoaHRtbF8yNDc0MTEyNjQxMGE0YTIzYWQzY2U1NGI0ZmIyMGI3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOWM4N2MxNDExYzI0MTA1OGJkNzc2YmEzYTI0ZjYyMC5iaW5kUG9wdXAocG9wdXBfMmUyZDNiY2JkNTliNGM1ZmExMTNmZDhkNWJjZDA0OGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0ZTBiMDMxZGZlZjQ2MDliYWMyOWYzNjc3NzliM2M3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAxMzQzNCwgLTczLjk3MTE0NTc0MzkwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhOTJlMzEwYmM5ZDQ0NTY4NzllZTUyNzg5ZjRkZWNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGVhOTlkNjhiYTAwNGZiM2JiNzcxMTNmNGM5N2JjNjUgPSAkKGA8ZGl2IGlkPSJodG1sX2RlYTk5ZDY4YmEwMDRmYjNiYjc3MTEzZjRjOTdiYzY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SaXZlcnNpZGUgRHIgJiBXIDEwNCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTcyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Mzxicj4gbmV0IGRlcGFydHVyZXM6IC05OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTkyZTMxMGJjOWQ0NDU2ODc5ZWU1Mjc4OWY0ZGVjYi5zZXRDb250ZW50KGh0bWxfZGVhOTlkNjhiYTAwNGZiM2JiNzcxMTNmNGM5N2JjNjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzRlMGIwMzFkZmVmNDYwOWJhYzI5ZjM2Nzc3OWIzYzcuYmluZFBvcHVwKHBvcHVwXzNhOTJlMzEwYmM5ZDQ0NTY4NzllZTUyNzg5ZjRkZWNiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZmUxMzQ1Y2MwNGQ0YmVlYTA4ZDJkNjJiNTU0MzgwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MTk5MDQ0MjcwNzAzLCAtNzMuOTkwNzkwMjQ3OTE3MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2JlYmExYjU1N2QyNDZhOThjYWU2NTA2MTgwNWNjZTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMGM2ZmUxMzhlNjI0M2UzYjBlYmU4MzBkMjQ3Mjk3MyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDBjNmZlMTM4ZTYyNDNlM2IwZWJlODMwZDI0NzI5NzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlZ3JhdyBTdCAmIEhveXQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0xMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYmViYTFiNTU3ZDI0NmE5OGNhZTY1MDYxODA1Y2NlOS5zZXRDb250ZW50KGh0bWxfZDBjNmZlMTM4ZTYyNDNlM2IwZWJlODMwZDI0NzI5NzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmZlMTM0NWNjMDRkNGJlZWEwOGQyZDYyYjU1NDM4MDcuYmluZFBvcHVwKHBvcHVwXzNiZWJhMWI1NTdkMjQ2YTk4Y2FlNjUwNjE4MDVjY2U5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNjBlZDgxNzQ5ZGY0YzM3YWQ4YTk1NjdkZjBlNmE0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NDcwNTUsIC03NC4wMDc1NTcyMDAwMDAwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OTU3NDJkMzU5Yzk0OTJmOGJiZTU4MDMzZmYzOGVjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5NWI3NDkxZjY2ZjQ4YzliNGEzMjk3MGRkYTlhMTNkID0gJChgPGRpdiBpZD0iaHRtbF81OTViNzQ5MWY2NmY0OGM5YjRhMzI5NzBkZGE5YTEzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1iaWEgU3QgJiBMb3JyYWluZSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTk1NzQyZDM1OWM5NDkyZjhiYmU1ODAzM2ZmMzhlY2Yuc2V0Q29udGVudChodG1sXzU5NWI3NDkxZjY2ZjQ4YzliNGEzMjk3MGRkYTlhMTNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U2MGVkODE3NDlkZjRjMzdhZDhhOTU2N2RmMGU2YTQ3LmJpbmRQb3B1cChwb3B1cF81OTU3NDJkMzU5Yzk0OTJmOGJiZTU4MDMzZmYzOGVjZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2M1NmM4MDIxNDA2NDg3ZTg0NzU5ZDU5OGU4MTg0OTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzcyNzQ0LCAtNzMuOTgyODIwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjY1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDE3ZTEwNmViYzk0NGUxOWI2Y2JiNjI5MGQ2ZDk2NmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDE4Yzg4OTU3YTk0N2M1ODQ1ODZmN2EzZGY4OGJkMyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTAxOGM4ODk1N2E5NDdjNTg0NTg2ZjdhM2RmODhiZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlVuaW9uIFN0ICYgNCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTE3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTMzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxN2UxMDZlYmM5NDRlMTliNmNiYjYyOTBkNmQ5NjZhLnNldENvbnRlbnQoaHRtbF8xMDE4Yzg4OTU3YTk0N2M1ODQ1ODZmN2EzZGY4OGJkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YzU2YzgwMjE0MDY0ODdlODQ3NTlkNTk4ZTgxODQ5MC5iaW5kUG9wdXAocG9wdXBfZDE3ZTEwNmViYzk0NGUxOWI2Y2JiNjI5MGQ2ZDk2NmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM3YjQ2NWUzNTAwMTQ5OTg5OWU3YzE0MjZiMDNkODRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg3ODAxLCAtNzMuOTUzNTU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDJiMDYwMjI3ODViNDZlN2FlMDJkMmQzMTZiMGJjMWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNTA5ZGM5ODZlOTY0MmZiOWQyNjMzNzdmMTc1MzQ2ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjUwOWRjOTg2ZTk2NDJmYjlkMjYzMzc3ZjE3NTM0NmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgOTcgU3QgJiBNYWRpc29uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogOTkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExMDxicj4gbmV0IGRlcGFydHVyZXM6IDExLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QyYjA2MDIyNzg1YjQ2ZTdhZTAyZDJkMzE2YjBiYzFiLnNldENvbnRlbnQoaHRtbF8yNTA5ZGM5ODZlOTY0MmZiOWQyNjMzNzdmMTc1MzQ2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zN2I0NjVlMzUwMDE0OTk4OTllN2MxNDI2YjAzZDg0ZC5iaW5kUG9wdXAocG9wdXBfZDJiMDYwMjI3ODViNDZlN2FlMDJkMmQzMTZiMGJjMWIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwNGMyYWU1ZjVjMzQ1MWI5YjhjMDRiODYxNDY0ZTJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg2MjU4NjAwMDAwMDA0LCAtNzMuOTQ1NTI1NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzYzliYzU3NDE5MDQ4YzA5MzEyZDY3ZmZiMWVhOWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTY0ZDcyM2Y0ZTY4NDZhNmE0N2E5NWMzZWE4YzI5NWIgPSAkKGA8ZGl2IGlkPSJodG1sX2U2NGQ3MjNmNGU2ODQ2YTZhNDdhOTVjM2VhOGMyOTViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4yIEF2ZSAmIEUgOTkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAyNTxicj4gbmV0IGRlcGFydHVyZXM6IDYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzNjOWJjNTc0MTkwNDhjMDkzMTJkNjdmZmIxZWE5YzIuc2V0Q29udGVudChodG1sX2U2NGQ3MjNmNGU2ODQ2YTZhNDdhOTVjM2VhOGMyOTViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkwNGMyYWU1ZjVjMzQ1MWI5YjhjMDRiODYxNDY0ZTJjLmJpbmRQb3B1cChwb3B1cF9jM2M5YmM1NzQxOTA0OGMwOTMxMmQ2N2ZmYjFlYTljMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGU5MDljYTJkNGNlNGEzNzlkNTdlNTQ2ZGE5OGQ4YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzY1MzA0LCAtNzMuOTc4NDY4NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2FmMTA2YjgzMGJlNGNhMThhOWE3NDZmNjQ2NTA0NDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83NTMyZTkyZjNjNGU0MzEwYmMyMzgxYTZlNjc2NTQ2YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzUzMmU5MmYzYzRlNDMxMGJjMjM4MWE2ZTY3NjU0NmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkJlcmtlbGV5IFBsICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwOC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNTc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2FmMTA2YjgzMGJlNGNhMThhOWE3NDZmNjQ2NTA0NDIuc2V0Q29udGVudChodG1sXzc1MzJlOTJmM2M0ZTQzMTBiYzIzODFhNmU2NzY1NDZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlOTA5Y2EyZDRjZTRhMzc5ZDU3ZTU0NmRhOThkOGE4LmJpbmRQb3B1cChwb3B1cF9jYWYxMDZiODMwYmU0Y2ExOGE5YTc0NmY2NDY1MDQ0MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTY5YTlhYmNiODM5NDBkODljZjZiNjQzM2VmOTQ2NmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzUzMjc0LCAtNzQuMDEwMDY5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZmQwZGMzMDVlZmY0NGM4YjkyNjhkNWU0ZDVkM2NjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxMGJiMGM3OWU2NjQxN2U4ODc5NTU1Y2ZhOGM1NGIzID0gJChgPGRpdiBpZD0iaHRtbF8yMTBiYjBjNzllNjY0MTdlODg3OTU1NWNmYThjNTRiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V29sY290dCBTdCAmIER3aWdodCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDExPGJyPiBuZXQgZGVwYXJ0dXJlczogLTExLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmZDBkYzMwNWVmZjQ0YzhiOTI2OGQ1ZTRkNWQzY2M3LnNldENvbnRlbnQoaHRtbF8yMTBiYjBjNzllNjY0MTdlODg3OTU1NWNmYThjNTRiMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNjlhOWFiY2I4Mzk0MGQ4OWNmNmI2NDMzZWY5NDY2YS5iaW5kUG9wdXAocG9wdXBfOWZkMGRjMzA1ZWZmNDRjOGI5MjY4ZDVlNGQ1ZDNjYzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViNjhhMmViYzI0ZTRmMGM5NTdlNmU4YWI2Zjg5ZmNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzk1MzQ2LCAtNzMuOTYxODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjI1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTk1MDFkMzYwZWRjNDhjYTkzZmU3YzkyZTI3M2IzMGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMjNlYmQwY2Y1M2Y0MGE4YWUxMDQ1YjYwNTEzNTZjYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTIzZWJkMGNmNTNmNDBhOGFlMTA0NWI2MDUxMzU2Y2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWwgUGFyayBXZXN0ICYgVyAxMDIgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEzMC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTk1MDFkMzYwZWRjNDhjYTkzZmU3YzkyZTI3M2IzMGQuc2V0Q29udGVudChodG1sXzEyM2ViZDBjZjUzZjQwYThhZTEwNDViNjA1MTM1NmNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViNjhhMmViYzI0ZTRmMGM5NTdlNmU4YWI2Zjg5ZmNlLmJpbmRQb3B1cChwb3B1cF9lOTUwMWQzNjBlZGM0OGNhOTNmZTdjOTJlMjczYjMwZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWY0ZTJiOTRiOWRlNDYyZGEyYzJkZDg4MzQ3YWJkODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzc3NzQ3OTk5OTk5OTUsIC03NC4wMDk0NjEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA4YjE3ZTNiNWJhNDgwNGE3NDZhMWMyOWEwMWExNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MmY5Yzk2YzBmOTY0YjBjOGMxMTg3NmJjNTI2MDI1YyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTJmOWM5NmMwZjk2NGIwYzhjMTE4NzZiYzUyNjAyNWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBpb25lZXIgU3QgJiBSaWNoYXJkcyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMDhiMTdlM2I1YmE0ODA0YTc0NmExYzI5YTAxYTE1ZS5zZXRDb250ZW50KGh0bWxfNTJmOWM5NmMwZjk2NGIwYzhjMTE4NzZiYzUyNjAyNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWY0ZTJiOTRiOWRlNDYyZGEyYzJkZDg4MzQ3YWJkODYuYmluZFBvcHVwKHBvcHVwXzMwOGIxN2UzYjViYTQ4MDRhNzQ2YTFjMjlhMDFhMTVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYzUxYTQ4MGRiYWQ0NTM5YjI4M2QzODVhMmFhMjAwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5OTc1NjgsIC03My45NjIxMTI4Njc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0NDIzZDc2YzBkYTQ0MDliZjI2ODlmZmM4ZTZkN2M5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzE0OTM0YTRhYjQ5NDcwM2E3YmU0Nzc0NzgyNTM5MGIgPSAkKGA8ZGl2IGlkPSJodG1sXzcxNDkzNGE0YWI0OTQ3MDNhN2JlNDc3NDc4MjUzOTBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDEwNyBTdCAmIENvbHVtYnVzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogODQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTM1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0NDIzZDc2YzBkYTQ0MDliZjI2ODlmZmM4ZTZkN2M5LnNldENvbnRlbnQoaHRtbF83MTQ5MzRhNGFiNDk0NzAzYTdiZTQ3NzQ3ODI1MzkwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYzUxYTQ4MGRiYWQ0NTM5YjI4M2QzODVhMmFhMjAwOC5iaW5kUG9wdXAocG9wdXBfNzQ0MjNkNzZjMGRhNDQwOWJmMjY4OWZmYzhlNmQ3YzkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiNzk3NzZkMDI0MTRmN2JhYjAxNmYzNDkyMjk5YWMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc5MDQzLCAtNzQuMDExMTY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3NWE2YjQ5N2VhMTQ0NzU4MTY2ZjkwNzkwMjFkOWJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQyNzRiMjhkNGJkNDg3OGI3YTUxYjkwODIwYzFkNDAgPSAkKGA8ZGl2IGlkPSJodG1sX2E0Mjc0YjI4ZDRiZDQ4NzhiN2E1MWI5MDgyMGMxZDQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaW9uZWVyIFN0ICYgVmFuIEJydW50IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTc1YTZiNDk3ZWExNDQ3NTgxNjZmOTA3OTAyMWQ5YmMuc2V0Q29udGVudChodG1sX2E0Mjc0YjI4ZDRiZDQ4NzhiN2E1MWI5MDgyMGMxZDQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiNzk3NzZkMDI0MTRmN2JhYjAxNmYzNDkyMjk5YWMyLmJpbmRQb3B1cChwb3B1cF81NzVhNmI0OTdlYTE0NDc1ODE2NmY5MDc5MDIxZDliYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWE1ODc4NGYyNDZhNDg1OGFkYTFiMGI5NTA4YmU3YzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43ODk0ODU0MTU1MzIxNSwgLTczLjk1MjQyOTI5NDU4NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDMuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkY2QwMjM0ZjBlMzQyOGJhMmI4NGY5MGRmY2E1OWNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmZlMjJjODI2NDEwNDE5MWEwMjc0NzQ2MGIzZDU0MzggPSAkKGA8ZGl2IGlkPSJodG1sX2JmZTIyYzgyNjQxMDQxOTFhMDI3NDc0NjBiM2Q1NDM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NYWRpc29uIEF2ZSAmIEUgOTkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDU4LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjQ8YnI+IG5ldCBkZXBhcnR1cmVzOiA2Ni4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZGNkMDIzNGYwZTM0MjhiYTJiODRmOTBkZmNhNTljYy5zZXRDb250ZW50KGh0bWxfYmZlMjJjODI2NDEwNDE5MWEwMjc0NzQ2MGIzZDU0MzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWE1ODc4NGYyNDZhNDg1OGFkYTFiMGI5NTA4YmU3YzEuYmluZFBvcHVwKHBvcHVwXzFkY2QwMjM0ZjBlMzQyOGJhMmI4NGY5MGRmY2E1OWNjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMWI5M2QyNGM1MTE0MzYyOWMzYmI3MDFhMTM5OTExMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTE0NjgzODcwOTc4NiwgLTczLjk3NTIzMjA5NDUyNjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwODI0MWYyODA4MjQyY2M5Y2Y5ZjBiZWJmYzhlNzZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODk3ODExMzUwYmUzNDFlOGE3NTlhNmE4MjM1MzBiNWIgPSAkKGA8ZGl2IGlkPSJodG1sXzg5NzgxMTM1MGJlMzQxZThhNzU5YTZhODIzNTMwYjViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZXJrZWxleSBQbCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzM8YnI+IG5ldCBkZXBhcnR1cmVzOiA0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwODI0MWYyODA4MjQyY2M5Y2Y5ZjBiZWJmYzhlNzZkLnNldENvbnRlbnQoaHRtbF84OTc4MTEzNTBiZTM0MWU4YTc1OWE2YTgyMzUzMGI1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMWI5M2QyNGM1MTE0MzYyOWMzYmI3MDFhMTM5OTExMy5iaW5kUG9wdXAocG9wdXBfOTA4MjQxZjI4MDgyNDJjYzljZjlmMGJlYmZjOGU3NmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JhM2YwYTcwMDEwYTRiY2M5YzQyNzdlNDdkNGE0M2YzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc3MzQyOSwgLTc0LjAxMjc1MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyMmRhZjk4YzI5NzQwYjU5NzA1ZTllNDE4ZDFjZWIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTVhZmNlODJlNjYyNDc0OGEwYzEyNGQ4OGYzZTdkNTAgPSAkKGA8ZGl2IGlkPSJodG1sXzk1YWZjZTgyZTY2MjQ3NDhhMGMxMjRkODhmM2U3ZDUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5WYW4gQnJ1bnQgU3QgJiBXb2xjb3R0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA4OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDIyZGFmOThjMjk3NDBiNTk3MDVlOWU0MThkMWNlYjMuc2V0Q29udGVudChodG1sXzk1YWZjZTgyZTY2MjQ3NDhhMGMxMjRkODhmM2U3ZDUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JhM2YwYTcwMDEwYTRiY2M5YzQyNzdlNDdkNGE0M2YzLmJpbmRQb3B1cChwb3B1cF8wMjJkYWY5OGMyOTc0MGI1OTcwNWU5ZTQxOGQxY2ViMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWRlZTkxYzEwNWM3NDk5Y2E2YzNkNzFlNDEwNmQ0YTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzcyMzYsIC03NC4wMTU2NjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjM5Yjk4YmFjNTM0ZjM4OWM4Njg2OTA0YmFjNmY0NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3ZjNlMDM0OWU3MDQ2NTk5MDNjNWQxNDY1ZTNmNDU5ID0gJChgPGRpdiBpZD0iaHRtbF8xN2YzZTAzNDllNzA0NjU5OTAzYzVkMTQ2NWUzZjQ1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29mZmV5IFN0ICYgQ29ub3ZlciBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM3PGJyPiBuZXQgZGVwYXJ0dXJlczogNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjM5Yjk4YmFjNTM0ZjM4OWM4Njg2OTA0YmFjNmY0NC5zZXRDb250ZW50KGh0bWxfMTdmM2UwMzQ5ZTcwNDY1OTkwM2M1ZDE0NjVlM2Y0NTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWRlZTkxYzEwNWM3NDk5Y2E2YzNkNzFlNDEwNmQ0YTEuYmluZFBvcHVwKHBvcHVwXzEyMzliOThiYWM1MzRmMzg5Yzg2ODY5MDRiYWM2ZjQ0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNzBhOWUzYzAzNDY0ZmZmOGY1MDNhOWNiNjQzNzU3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3Mjk2NzksIC03My45NzA4Nzk4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMjQ3OTY3NDVhMTQzYjViODg3MTM0ODM5OTIxNDQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2NlOGRmZTAzYzUwNDE4ZDkzNjdiYTNiMDE4ZjE2NDQgPSAkKGA8ZGl2IGlkPSJodG1sXzdjZThkZmUwM2M1MDQxOGQ5MzY3YmEzYjAxOGYxNjQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HcmFuZCBBcm15IFBsYXphICYgUGxhemEgU3QgV2VzdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTEzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAzMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZTI0Nzk2NzQ1YTE0M2I1Yjg4NzEzNDgzOTkyMTQ0OS5zZXRDb250ZW50KGh0bWxfN2NlOGRmZTAzYzUwNDE4ZDkzNjdiYTNiMDE4ZjE2NDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTcwYTllM2MwMzQ2NGZmZjhmNTAzYTljYjY0Mzc1NzYuYmluZFBvcHVwKHBvcHVwXzVlMjQ3OTY3NDVhMTQzYjViODg3MTM0ODM5OTIxNDQ5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYWM3MzllMzA4MzM0MjBlOTgwNzc2MjMyNzIyZDZlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5NzM3MjEwMDAwMDAwNCwgLTczLjk3MDQxMTkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFlNzg5YWFkYjMzNDY1NmJmN2QxNmViYmU2ZDcwOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNDdlMzA1MDExM2U0OGYxODA5ZWFhNGVhZTNkN2FjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfMTQ3ZTMwNTAxMTNlNDhmMTgwOWVhYTRlYWUzZDdhYzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTAwIFN0ICYgQnJvYWR3YXk8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIzNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTUzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTgyLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhZTc4OWFhZGIzMzQ2NTZiZjdkMTZlYmJlNmQ3MDhiLnNldENvbnRlbnQoaHRtbF8xNDdlMzA1MDExM2U0OGYxODA5ZWFhNGVhZTNkN2FjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYWM3MzllMzA4MzM0MjBlOTgwNzc2MjMyNzIyZDZlMy5iaW5kUG9wdXAocG9wdXBfOGFlNzg5YWFkYjMzNDY1NmJmN2QxNmViYmU2ZDcwOGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmZDk0MjQwZjMyMTRhMDliNTdhMTIxYTk1YTBlNWRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg2OTk0NiwgLTczLjk0MTY0ODAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc0NDg3M2ZhY2M3NzRlMDA4YTRlYjViYzE5ZjZjYzhlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmM3NjlkYjFmNzJiNDJkYjhiYjc1MjE1OTUwNTdjOWUgPSAkKGA8ZGl2IGlkPSJodG1sX2JjNzY5ZGIxZjcyYjQyZGI4YmI3NTIxNTk1MDU3YzllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDEwMiBTdCAmIDEgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNDguMDxicj4gdG90YWwgYXJyaXZhbHM6IDY5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTc5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc0NDg3M2ZhY2M3NzRlMDA4YTRlYjViYzE5ZjZjYzhlLnNldENvbnRlbnQoaHRtbF9iYzc2OWRiMWY3MmI0MmRiOGJiNzUyMTU5NTA1N2M5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZmQ5NDI0MGYzMjE0YTA5YjU3YTEyMWE5NWEwZTVkYi5iaW5kUG9wdXAocG9wdXBfNzQ0ODczZmFjYzc3NGUwMDhhNGViNWJjMTlmNmNjOGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5ODRjYzhjMjRlYTQ0ODhiYzViOWU1ZWY2Njc2NTliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc0Nzg0NCwgLTc0LjAxNjEyODQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODJmNzZhMWY0YWJhNGExNDliNDU2NmU2MDI5NTY3ZTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZGQ1ZTFhZWFlOGY0OGFlYTFkMDM0OGYzYjRiMDBiNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmRkNWUxYWVhZThmNDhhZWExZDAzNDhmM2I0YjAwYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJlZWQgU3QgJiBWYW4gQnJ1bnQgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY5LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2NTxicj4gbmV0IGRlcGFydHVyZXM6IC00LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyZjc2YTFmNGFiYTRhMTQ5YjQ1NjZlNjAyOTU2N2U5LnNldENvbnRlbnQoaHRtbF9mZGQ1ZTFhZWFlOGY0OGFlYTFkMDM0OGYzYjRiMDBiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yOTg0Y2M4YzI0ZWE0NDg4YmM1YjllNWVmNjY3NjU5Yi5iaW5kUG9wdXAocG9wdXBfODJmNzZhMWY0YWJhNGExNDliNDU2NmU2MDI5NTY3ZTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkNTY4NmI3YzM4YTRjZTdhNGRkODZjMTE3ZTc0YWY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjY4MTMyLCAtNzMuOTczNjM4MzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzA3MTllODUwOGRiNGY5OThmNDljM2YwYmFiMzdhOWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNTE2Zjg0NmZmNzg0NzFhOTkwYWQwYjliMmU2Zjk1YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDUxNmY4NDZmZjc4NDcxYTk5MGFkMGI5YjJlNmY5NWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgU3QgJiBQcm9zcGVjdCBQYXJrIFdlc3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDg4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA4MTxicj4gbmV0IGRlcGFydHVyZXM6IC03LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwNzE5ZTg1MDhkYjRmOTk4ZjQ5YzNmMGJhYjM3YTllLnNldENvbnRlbnQoaHRtbF9kNTE2Zjg0NmZmNzg0NzFhOTkwYWQwYjliMmU2Zjk1Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZDU2ODZiN2MzOGE0Y2U3YTRkZDg2YzExN2U3NGFmNS5iaW5kUG9wdXAocG9wdXBfNzA3MTllODUwOGRiNGY5OThmNDljM2YwYmFiMzdhOWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNjNTRmOGI2NTRiYTRjMzFiODYxOGY5MjYxOGQxZDQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY4MDA4ODkzMDU5NDY2LCAtNzMuOTY4NDUyODExMjQxMTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDIuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwYTA4YjhmODUzNTRjNDRhY2QzMWQ4ZjY1MmYzNjFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk3M2Q3MWY4ZGM4NDcwNWI0M2IzOGY4MzliYjg0ZWIgPSAkKGA8ZGl2IGlkPSJodG1sXzA5NzNkNzFmOGRjODQ3MDViNDNiMzhmODM5YmI4NGViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDY2IFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA5Nzxicj4gbmV0IGRlcGFydHVyZXM6IDQ2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwYTA4YjhmODUzNTRjNDRhY2QzMWQ4ZjY1MmYzNjFlLnNldENvbnRlbnQoaHRtbF8wOTczZDcxZjhkYzg0NzA1YjQzYjM4ZjgzOWJiODRlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYzU0ZjhiNjU0YmE0YzMxYjg2MThmOTI2MThkMWQ0OS5iaW5kUG9wdXAocG9wdXBfYjBhMDhiOGY4NTM1NGM0NGFjZDMxZDhmNjUyZjM2MWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3YTk3N2U1MWEzMzQ3ZDRhY2MyM2ExMDA4N2IwZDcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzc0NjY3MSwgLTczLjk4NDcwNTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTk3ZDhhMjhkODMxNGQ3ODgyZmNiYjkyMWRjNjJlYWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMjBlYmQ4OTk0NzY0YWFlYmU4Zjc5ZjU0NWNiZjgxYSA9ICQoYDxkaXYgaWQ9Imh0bWxfZjIwZWJkODk5NDc2NGFhZWJlOGY3OWY1NDVjYmY4MWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFtc3RlcmRhbSBBdmUgJiBXIDY2IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5N2Q4YTI4ZDgzMTRkNzg4MmZjYmI5MjFkYzYyZWFhLnNldENvbnRlbnQoaHRtbF9mMjBlYmQ4OTk0NzY0YWFlYmU4Zjc5ZjU0NWNiZjgxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hN2E5NzdlNTFhMzM0N2Q0YWNjMjNhMTAwODdiMGQ3Mi5iaW5kUG9wdXAocG9wdXBfYTk3ZDhhMjhkODMxNGQ3ODgyZmNiYjkyMWRjNjJlYWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4MzkyMTdhNTFiMjQ5MDg4MWZmOTQxOThmMzg4Mzc0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAwODM2Mjk5OTk5OTksIC03My45NjY0NDkyNDcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDhlMjIzMTBiNDk1NDg2Mjk2Mjk3YmZkMDUyNDhlM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YjY1NDhkNzJlMTE0MWMxOWQwMDdlY2MxMDQ3ZjQxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfN2I2NTQ4ZDcyZTExNDFjMTlkMDA3ZWNjMTA0N2Y0MTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlcgMTA2IFN0ICYgQW1zdGVyZGFtIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI2LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Njxicj4gbmV0IGRlcGFydHVyZXM6IC01MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOGUyMjMxMGI0OTU0ODYyOTYyOTdiZmQwNTI0OGUzYS5zZXRDb250ZW50KGh0bWxfN2I2NTQ4ZDcyZTExNDFjMTlkMDA3ZWNjMTA0N2Y0MTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjgzOTIxN2E1MWIyNDkwODgxZmY5NDE5OGYzODgzNzQuYmluZFBvcHVwKHBvcHVwXzA4ZTIyMzEwYjQ5NTQ4NjI5NjI5N2JmZDA1MjQ4ZTNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDU5ZjNlY2RiMmU0YmFiOTA3NGI5NzA3Y2EzMjBmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MTE5Nzc5OTk5OTk5NSwgLTczLjk3NDg0MTI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2MzJjZGI2ZWE2ODRjOWNhZThlYjU3YzcyZjJmM2Q5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGMwOTUxNTBiNjM0NDZjZjlkNmUyMzQ2NTZhODFhYTggPSAkKGA8ZGl2IGlkPSJodG1sXzBjMDk1MTUwYjYzNDQ2Y2Y5ZDZlMjM0NjU2YTgxYWE4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5HYXJmaWVsZCBQbCAmIDggQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMjcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTc5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2MzJjZGI2ZWE2ODRjOWNhZThlYjU3YzcyZjJmM2Q5LnNldENvbnRlbnQoaHRtbF8wYzA5NTE1MGI2MzQ0NmNmOWQ2ZTIzNDY1NmE4MWFhOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMDU5ZjNlY2RiMmU0YmFiOTA3NGI5NzA3Y2EzMjBmZi5iaW5kUG9wdXAocG9wdXBfMTYzMmNkYjZlYTY4NGM5Y2FlOGViNTdjNzJmMmYzZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3ZTgxNjdmYTk0NTRiNmY5ZDI5NmFjZmM5NWEyZTAwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY5MTU3MiwgLTczLjk2NzAzNDY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MDZhZmMwNjU5YTQ0NWU1OWM3OTc0MGQ3OTQ3Mzc3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliMDM2YzdiYTYzNjQzNDA4MTJhYjRkMzJjNGE0NjY2ID0gJChgPGRpdiBpZD0iaHRtbF85YjAzNmM3YmE2MzY0MzQwODEyYWI0ZDMyYzRhNDY2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSA2OCBTdCAmIE1hZGlzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAxNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDZhZmMwNjU5YTQ0NWU1OWM3OTc0MGQ3OTQ3Mzc3Ny5zZXRDb250ZW50KGh0bWxfOWIwMzZjN2JhNjM2NDM0MDgxMmFiNGQzMmM0YTQ2NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTdlODE2N2ZhOTQ1NGI2ZjlkMjk2YWNmYzk1YTJlMDAuYmluZFBvcHVwKHBvcHVwXzkwNmFmYzA2NTlhNDQ1ZTU5Yzc5NzQwZDc5NDczNzc3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNjg1YTljMWZjZmY0NDYzYmVlNmU0MDBiYzk2NDdiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc4MjkzOTEsIC03My45Nzg2NTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNS44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGNkYjRhZDQxMGQ0NDBhYTg2Y2Y0OGJkODcxMTUzODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMmIzZDkwNDA2ZDQ0NTE4ODc4ZGRlNmJkY2FkMTY0OSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTJiM2Q5MDQwNmQ0NDUxODg3OGRkZTZiZGNhZDE2NDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFtc3RlcmRhbSBBdmUgJiBXIDc5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNDQuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEyODxicj4gbmV0IGRlcGFydHVyZXM6IC0xMTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNkYjRhZDQxMGQ0NDBhYTg2Y2Y0OGJkODcxMTUzODIuc2V0Q29udGVudChodG1sXzEyYjNkOTA0MDZkNDQ1MTg4NzhkZGU2YmRjYWQxNjQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U2ODVhOWMxZmNmZjQ0NjNiZWU2ZTQwMGJjOTY0N2IzLmJpbmRQb3B1cChwb3B1cF9kY2RiNGFkNDEwZDQ0MGFhODZjZjQ4YmQ4NzExNTM4MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWE3MTYwODM1ODFhNGUyYTkxNGYwMGE5MWFjN2ZkNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzQwODg2LCAtNzMuOTc4NzI4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZmY2E2NWM4ZDJlYjRjOGFhNGM3NjMyYWFhOTdlZTgzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWFjYzFhYzhiYjFiNDY4MThiNzM1MGU0N2E0ZjkyYWMgPSAkKGA8ZGl2IGlkPSJodG1sXzFhY2MxYWM4YmIxYjQ2ODE4YjczNTBlNDdhNGY5MmFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXJyb2xsIFN0ICYgNiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1My4wPGJyPiB0b3RhbCBhcnJpdmFsczogODM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmZjYTY1YzhkMmViNGM4YWE0Yzc2MzJhYWE5N2VlODMuc2V0Q29udGVudChodG1sXzFhY2MxYWM4YmIxYjQ2ODE4YjczNTBlNDdhNGY5MmFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFhNzE2MDgzNTgxYTRlMmE5MTRmMDBhOTFhYzdmZDRkLmJpbmRQb3B1cChwb3B1cF9mZmNhNjVjOGQyZWI0YzhhYTRjNzYzMmFhYTk3ZWU4MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzkwZDIwOTlkYWY5NDQxOWI2NmVhODZlOTQ2ZDdlODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzgxMzE0LCAtNzMuOTYwNjkzOTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NTc4NTA4ZDI0NDk0ODM2YjE0NzU5ZWQ0ZjVlZGQ3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkMDhiNmE3ZGNkZDQxNjliYmFiODZiNWM1ZmQxODg1ID0gJChgPGRpdiBpZD0iaHRtbF82ZDA4YjZhN2RjZGQ0MTY5YmJhYjg2YjVjNWZkMTg4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWFkaXNvbiBBdmUgJiBFIDgyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDk2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU3ODUwOGQyNDQ5NDgzNmIxNDc1OWVkNGY1ZWRkNzkuc2V0Q29udGVudChodG1sXzZkMDhiNmE3ZGNkZDQxNjliYmFiODZiNWM1ZmQxODg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc5MGQyMDk5ZGFmOTQ0MTliNjZlYTg2ZTk0NmQ3ZTg0LmJpbmRQb3B1cChwb3B1cF84NTc4NTA4ZDI0NDk0ODM2YjE0NzU5ZWQ0ZjVlZGQ3OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTcyMDU4MDQ2NzczNDhhYWJiYTc3NjY0ZjJhMDk3YjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTA0ODI4LCAtNzMuOTUwMzMwNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjNDliOTQxZmVkMjRkY2Y4NjM0OWEwY2Y5NTQxOGNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjM3MjcyZDA5NmM1NGNmMjg4MjIwZjc0NjdlMzU1ZDEgPSAkKGA8ZGl2IGlkPSJodG1sXzYzNzI3MmQwOTZjNTRjZjI4ODIyMGY3NDY3ZTM1NWQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDEwMiBTdCAmIFBhcmsgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNy4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjM8YnI+IG5ldCBkZXBhcnR1cmVzOiAyNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzQ5Yjk0MWZlZDI0ZGNmODYzNDlhMGNmOTU0MThjZi5zZXRDb250ZW50KGh0bWxfNjM3MjcyZDA5NmM1NGNmMjg4MjIwZjc0NjdlMzU1ZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTcyMDU4MDQ2NzczNDhhYWJiYTc3NjY0ZjJhMDk3YjQuYmluZFBvcHVwKHBvcHVwXzhjNDliOTQxZmVkMjRkY2Y4NjM0OWEwY2Y5NTQxOGNmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNDFlOTlmODA3ZWY0OTUyYTQxMzkwMjdmZjAxNWMwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTE2MjIsIC03My45ODE0ODMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjhhMjNhOTMxNDk3NDFmOWE0ZDEyYjMwMmVlMWJjN2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjE4OTc1YzgxNWM0NTBiYTEwZTcyMTQwMWJjZjEzOSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjIxODk3NWM4MTVjNDUwYmExMGU3MjE0MDFiY2YxMzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcnJvbGwgU3QgJiA1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2Nzxicj4gbmV0IGRlcGFydHVyZXM6IC03OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOGEyM2E5MzE0OTc0MWY5YTRkMTJiMzAyZWUxYmM3Yi5zZXRDb250ZW50KGh0bWxfMjIxODk3NWM4MTVjNDUwYmExMGU3MjE0MDFiY2YxMzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTQxZTk5ZjgwN2VmNDk1MmE0MTM5MDI3ZmYwMTVjMGYuYmluZFBvcHVwKHBvcHVwX2I4YTIzYTkzMTQ5NzQxZjlhNGQxMmIzMDJlZTFiYzdiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDI0OTZmY2I3YTY0M2U5OGJiNmNlZTA4ZjQ4NmUxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MDM4MzcwMDAwMDAxLCAtNzMuOTc4Mzk2NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMDEzNTdlOTFlN2U0ZGRmOGJhNDFlNjVhMzNjNmNhZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA5MzFlNjRhODY2NzQzMjA5Y2E2MTBhZmI0NTJlNzFiID0gJChgPGRpdiBpZD0iaHRtbF8wOTMxZTY0YTg2Njc0MzIwOWNhNjEwYWZiNDUyZTcxYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MyBTdCAmIDcgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxNTguMDxicj4gdG90YWwgYXJyaXZhbHM6IDcwPGJyPiBuZXQgZGVwYXJ0dXJlczogLTg4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwMTM1N2U5MWU3ZTRkZGY4YmE0MWU2NWEzM2M2Y2FkLnNldENvbnRlbnQoaHRtbF8wOTMxZTY0YTg2Njc0MzIwOWNhNjEwYWZiNDUyZTcxYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZDI0OTZmY2I3YTY0M2U5OGJiNmNlZTA4ZjQ4NmUxNS5iaW5kUG9wdXAocG9wdXBfMjAxMzU3ZTkxZTdlNGRkZjhiYTQxZTY1YTMzYzZjYWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc2MzUzNjNkMTk4MTRlZTU4NTMzYTA5Njc4NTBiYjkzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuODAyMTE3NCwgLTczLjk2ODE4MDUzMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzc0YWY0MzczOTI4NDE3M2JhNGViMTNjOTVhZWY3MTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yM2YyZTVhMDM3NzA0MmJhYjk4MTY2OTY2Y2I1NzhjYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjNmMmU1YTAzNzcwNDJiYWI5ODE2Njk2NmNiNTc4Y2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgRW5kIEF2ZSAmIFcgMTA3IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA5OC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNTEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzc0YWY0MzczOTI4NDE3M2JhNGViMTNjOTVhZWY3MTEuc2V0Q29udGVudChodG1sXzIzZjJlNWEwMzc3MDQyYmFiOTgxNjY5NjZjYjU3OGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc2MzUzNjNkMTk4MTRlZTU4NTMzYTA5Njc4NTBiYjkzLmJpbmRQb3B1cChwb3B1cF83NzRhZjQzNzM5Mjg0MTczYmE0ZWIxM2M5NWFlZjcxMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzY0MzU1MmI0OGZiNDZjM2FlZDdmN2U2NmJkYWIwMGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTIyNTUyOTk5OTk5OTQsIC03My45NTI0OTkzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0OTZkODhmOTE4YjRlMjA4NjY5M2Y5NmMyNmQ4ZGE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGFhZjc1MGFmZmRhNGVjYThhMGM5Zjk2MmNlMTZmODAgPSAkKGA8ZGl2IGlkPSJodG1sXzBhYWY3NTBhZmZkYTRlY2E4YTBjOWY5NjJjZTE2ZjgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij41IEF2ZSAmIEUgMTAzIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAxMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NDk2ZDg4ZjkxOGI0ZTIwODY2OTNmOTZjMjZkOGRhNC5zZXRDb250ZW50KGh0bWxfMGFhZjc1MGFmZmRhNGVjYThhMGM5Zjk2MmNlMTZmODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzY0MzU1MmI0OGZiNDZjM2FlZDdmN2U2NmJkYWIwMGYuYmluZFBvcHVwKHBvcHVwXzk0OTZkODhmOTE4YjRlMjA4NjY5M2Y5NmMyNmQ4ZGE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZmI3NTg5OWJjN2E0NDE1OTY2MWRiZDljZDg4MTA0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MjgxNTUwMDAwMDAwNiwgLTczLjk4MzUyMzU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNi44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTc2NmI5YzEyYjU3NGVjMmI2MTNlMTg5ZjRjMDZlMjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjM4NWNhNTYwNDM0NWJkYjM2ZmMyNDZmMjkyMDAwZSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmIzODVjYTU2MDQzNDViZGIzNmZjMjQ2ZjI5MjAwMGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjUgQXZlICYgMyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjM5LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTM2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3NjZiOWMxMmI1NzRlYzJiNjEzZTE4OWY0YzA2ZTI4LnNldENvbnRlbnQoaHRtbF9mYjM4NWNhNTYwNDM0NWJkYjM2ZmMyNDZmMjkyMDAwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZmI3NTg5OWJjN2E0NDE1OTY2MWRiZDljZDg4MTA0MS5iaW5kUG9wdXAocG9wdXBfMTc2NmI5YzEyYjU3NGVjMmI2MTNlMTg5ZjRjMDZlMjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmZTFiZmIxYzZhNjRlMzU4N2Y0MjAwMjFlOGY1YjU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzcyNzk2NiwgLTczLjk1NTc3ODAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNC40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzMjUyZDc5NTY4ZTQ2MjRhOWM5NGZkMGY5OGQ5YTJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2I4NGM1MDM3YTc3NGRiNmFhNjVjNmFkNDMyYjJkODIgPSAkKGA8ZGl2IGlkPSJodG1sXzNiODRjNTAzN2E3NzRkYjZhYTY1YzZhZDQzMmIyZDgyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDc4IFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTAxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTg5LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzMjUyZDc5NTY4ZTQ2MjRhOWM5NGZkMGY5OGQ5YTJjLnNldENvbnRlbnQoaHRtbF8zYjg0YzUwMzdhNzc0ZGI2YWE2NWM2YWQ0MzJiMmQ4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZmUxYmZiMWM2YTY0ZTM1ODdmNDIwMDIxZThmNWI1OC5iaW5kUG9wdXAocG9wdXBfNDMyNTJkNzk1NjhlNDYyNGE5Yzk0ZmQwZjk4ZDlhMmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FmNGZhNDVmNGIwZjRlZmNiZDdiMjJiNjU2MzczYjQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY4OTczOCwgLTczLjk1NDgyMjczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4wNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5OGRkZjdmOGEzNTQ5MTBiODVjM2E5ZTUxOWY5OWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDBlMzUyNjNiMDQ2NDRlOGI5ZTQ1YzcwNDM3MmJkNWQgPSAkKGA8ZGl2IGlkPSJodG1sX2QwZTM1MjYzYjA0NjQ0ZThiOWU0NWM3MDQzNzJiZDVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDc0IFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDMxMy4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTcyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOThkZGY3ZjhhMzU0OTEwYjg1YzNhOWU1MTlmOTlmMS5zZXRDb250ZW50KGh0bWxfZDBlMzUyNjNiMDQ2NDRlOGI5ZTQ1YzcwNDM3MmJkNWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWY0ZmE0NWY0YjBmNGVmY2JkN2IyMmI2NTYzNzNiNDMuYmluZFBvcHVwKHBvcHVwXzE5OGRkZjdmOGEzNTQ5MTBiODVjM2E5ZTUxOWY5OWYxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mYjFkM2UxOGEzZGY0MzQwYTllZTJlYmY0ODZhMTcwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTA3MDUwMDAwMDAwNCwgLTczLjk4Nzc1MjI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjk1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGIwODJhOWQ3ZGVmNGViYTlhN2UwZjMyN2FlY2JiNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjA0NTc5NjE4ZGQ0Yjc0YWZkMmVkMGYxZThiNjZhNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDYwNDU3OTYxOGRkNGI3NGFmZDJlZDBmMWU4YjY2YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjMgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAzOS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjA4MmE5ZDdkZWY0ZWJhOWE3ZTBmMzI3YWVjYmI0ZC5zZXRDb250ZW50KGh0bWxfMDYwNDU3OTYxOGRkNGI3NGFmZDJlZDBmMWU4YjY2YTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmIxZDNlMThhM2RmNDM0MGE5ZWUyZWJmNDg2YTE3MDMuYmluZFBvcHVwKHBvcHVwX2RiMDgyYTlkN2RlZjRlYmE5YTdlMGYzMjdhZWNiYjRkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMDQzN2FhZTc3OGM0ODFlOGQ3MzQ0NTZmN2I2YjNmNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5OTQ4NCwgLTczLjk1NTYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTQuOTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTE2ZGIxODFmYWM0YmRhOGI0NzhkZThmZGRlYWI2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1ODk1MGEyYTAxYTQ3NmY5NGVhMTU5NDE3MDk3OWZmID0gJChgPGRpdiBpZD0iaHRtbF9mNTg5NTBhMmEwMWE0NzZmOTRlYTE1OTQxNzA5NzlmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbCBQYXJrIE5vcnRoICYgQWRhbSBDbGF5dG9uIFBvd2VsbCBCbHZkPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI3ODxicj4gbmV0IGRlcGFydHVyZXM6IC05OS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MTE2ZGIxODFmYWM0YmRhOGI0NzhkZThmZGRlYWI2Ny5zZXRDb250ZW50KGh0bWxfZjU4OTUwYTJhMDFhNDc2Zjk0ZWExNTk0MTcwOTc5ZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTA0MzdhYWU3NzhjNDgxZThkNzM0NDU2ZjdiNmIzZjQuYmluZFBvcHVwKHBvcHVwXzcxMTZkYjE4MWZhYzRiZGE4YjQ3OGRlOGZkZGVhYjY3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOTFlNjA1ZjU2NzA0OWU0OTgwYWIxODc4YTljZjA3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc2OTk0MjYsIC03My45NjA2MDcxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YWFlNjllZjNiY2Q0NjI4YTEzOWFjNGU2NTJiNmM3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQyNmZlNzdlYzljYTQ2MGZhYmM5ZWU5MjQwMmNhMDM1ID0gJChgPGRpdiBpZD0iaHRtbF80MjZmZTc3ZWM5Y2E0NjBmYWJjOWVlOTI0MDJjYTAzNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MyBBdmUgJiBFIDcyIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDk3PGJyPiBuZXQgZGVwYXJ0dXJlczogLTEzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhYWU2OWVmM2JjZDQ2MjhhMTM5YWM0ZTY1MmI2YzdhLnNldENvbnRlbnQoaHRtbF80MjZmZTc3ZWM5Y2E0NjBmYWJjOWVlOTI0MDJjYTAzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOTFlNjA1ZjU2NzA0OWU0OTgwYWIxODc4YTljZjA3Ni5iaW5kUG9wdXAocG9wdXBfOGFhZTY5ZWYzYmNkNDYyOGExMzlhYzRlNjUyYjZjN2EpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI1YjE2YWRhMjIzZDQ1ODNiOTk3Yzg4M2IzZTM0Mzc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzY0NzE4NTE5NDQzMzksIC03My45NjIyMjA2OTg1OTUwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwODMzNjgxYTQ0ZjQ5YTg4Y2FjZWUyYjU2Yzg2NjYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2MyNDE4OGI3N2I0NGVjNGI4MTBlZGEzZjIzMDcxYmYgPSAkKGA8ZGl2IGlkPSJodG1sXzdjMjQxODhiNzdiNDRlYzRiODEwZWRhM2YyMzA3MWJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDY1IFN0ICYgMiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDgyLjA8YnI+IHRvdGFsIGFycml2YWxzOiA4MDxicj4gbmV0IGRlcGFydHVyZXM6IC0yLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwODMzNjgxYTQ0ZjQ5YTg4Y2FjZWUyYjU2Yzg2NjYwLnNldENvbnRlbnQoaHRtbF83YzI0MTg4Yjc3YjQ0ZWM0YjgxMGVkYTNmMjMwNzFiZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNWIxNmFkYTIyM2Q0NTgzYjk5N2M4ODNiM2UzNDM3Ni5iaW5kUG9wdXAocG9wdXBfNTA4MzM2ODFhNDRmNDlhODhjYWNlZTJiNTZjODY2NjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1MWYyOWRhOTA5ZTQzN2Y5MTUwNzQwODcxYzM2MzE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc4NjExNSwgLTczLjk5MDM3MjkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC45LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmZiN2I3NGY1ZGFiNDI3ZDk3NDQ5MzFkOWZiOGRlNWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NWI3MzczNDFjNGI0OGNjOTUzN2ZjYTk4YWQ0N2Q0MyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTViNzM3MzQxYzRiNDhjYzk1MzdmY2E5OGFkNDdkNDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhcnJvbGwgU3QgJiBCb25kIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1Ni4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzg8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmZiN2I3NGY1ZGFiNDI3ZDk3NDQ5MzFkOWZiOGRlNWEuc2V0Q29udGVudChodG1sXzU1YjczNzM0MWM0YjQ4Y2M5NTM3ZmNhOThhZDQ3ZDQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg1MWYyOWRhOTA5ZTQzN2Y5MTUwNzQwODcxYzM2MzE5LmJpbmRQb3B1cChwb3B1cF82ZmI3Yjc0ZjVkYWI0MjdkOTc0NDkzMWQ5ZmI4ZGU1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTgzMmFkMDdjMzcwNDEyOWE4OTZlYjJjMmYwYmRkYjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NzM3NjMsIC03My45NjIyMjA4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMy4wLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTU1NmMxNTI4YTg5NDZiM2E4ZDc0NjJmMTdjNmU3Y2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMWJhYWU5NTVkOGM0ZmQwYWFjYWU1MTA2YzQwYzk3YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjFiYWFlOTU1ZDhjNGZkMGFhY2FlNTEwNmM0MGM5N2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgNzYgU3QgJiBQYXJrIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTEyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNzI8YnI+IG5ldCBkZXBhcnR1cmVzOiA2MC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTU2YzE1MjhhODk0NmIzYThkNzQ2MmYxN2M2ZTdjYS5zZXRDb250ZW50KGh0bWxfMjFiYWFlOTU1ZDhjNGZkMGFhY2FlNTEwNmM0MGM5N2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTgzMmFkMDdjMzcwNDEyOWE4OTZlYjJjMmYwYmRkYjkuYmluZFBvcHVwKHBvcHVwXzU1NTZjMTUyOGE4OTQ2YjNhOGQ3NDYyZjE3YzZlN2NhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmQ0M2Y2NmJmZTI0NjZjYmE2OTdiZDIxMTNhNmFhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MDMwNTEwMDAwMDAwNSwgLTczLjk0NzU1NzU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZWU3MmNmYzJkMWY0ZTkwOWUzODFjY2JhMGUxN2IyMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0NzBjOGE0MmJhMDQ5MzRiYWYzOTVlY2ZjMDI1ODk0ID0gJChgPGRpdiBpZD0iaHRtbF85NDcwYzhhNDJiYTA0OTM0YmFmMzk1ZWNmYzAyNTg5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMDMgU3QgJiBMZXhpbmd0b24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzM8YnI+IG5ldCBkZXBhcnR1cmVzOiAyMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZWU3MmNmYzJkMWY0ZTkwOWUzODFjY2JhMGUxN2IyMi5zZXRDb250ZW50KGh0bWxfOTQ3MGM4YTQyYmEwNDkzNGJhZjM5NWVjZmMwMjU4OTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2ZkNDNmNjZiZmUyNDY2Y2JhNjk3YmQyMTEzYTZhYTUuYmluZFBvcHVwKHBvcHVwXzBlZTcyY2ZjMmQxZjRlOTA5ZTM4MWNjYmEwZTE3YjIyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYzIxNjgyMmVlZDk0ZTUwYTk2MTlhNTA1ODgwNDQ4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NzcyODcsIC03My45OTM2NDEyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMS4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1OGRiNjQ0NmUxODQ4Yjc5MjIwZGY3OWVhMDk1MzQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTkzYjU5OGExNWZkNDA1Mzg1Y2IyZDc4ZmFlOTA5MTIgPSAkKGA8ZGl2IGlkPSJodG1sXzk5M2I1OThhMTVmZDQwNTM4NWNiMmQ3OGZhZTkwOTEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4zIFN0ICYgSG95dCBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMzcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYyPGJyPiBuZXQgZGVwYXJ0dXJlczogMjUuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU4ZGI2NDQ2ZTE4NDhiNzkyMjBkZjc5ZWEwOTUzNDUuc2V0Q29udGVudChodG1sXzk5M2I1OThhMTVmZDQwNTM4NWNiMmQ3OGZhZTkwOTEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJjMjE2ODIyZWVkOTRlNTBhOTYxOWE1MDU4ODA0NDhhLmJpbmRQb3B1cChwb3B1cF84NThkYjY0NDZlMTg0OGI3OTIyMGRmNzllYTA5NTM0NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDEzMTE1NTNiYTA5NDhlY2I1OGQ0MDcyZGJiNzQ1OTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODA2MTEsIC03My45OTQ3NTgyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkMGMxODlmNzk2NjQyZDc5NmM0ZmRiMThhNmMzODU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjhhZThiNjNiNzIzNGYzZmIwMmY4MWE1NjI1ZGFkYTMgPSAkKGA8ZGl2IGlkPSJodG1sX2Y4YWU4YjYzYjcyMzRmM2ZiMDJmODFhNTYyNWRhZGEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXJyb2xsIFN0ICYgU21pdGggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTU3PGJyPiBuZXQgZGVwYXJ0dXJlczogNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDBjMTg5Zjc5NjY0MmQ3OTZjNGZkYjE4YTZjMzg1OS5zZXRDb250ZW50KGh0bWxfZjhhZThiNjNiNzIzNGYzZmIwMmY4MWE1NjI1ZGFkYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDEzMTE1NTNiYTA5NDhlY2I1OGQ0MDcyZGJiNzQ1OTYuYmluZFBvcHVwKHBvcHVwX2JkMGMxODlmNzk2NjQyZDc5NmM0ZmRiMThhNmMzODU5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjQ2MjkyZjllZjk0OWVkYTRhOGRkMjRiNTUwNjZjMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjgwNDIxMywgLTczLjk2Njk5MTA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5MzFkZjMzNTc1MDRjN2E4MzdhN2I4MmZlMzVmYTcxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTU1MTdlNjZiNmY3NDg1MTkyOTM5MDgwN2NiMTk4MzQgPSAkKGA8ZGl2IGlkPSJodG1sX2E1NTE3ZTY2YjZmNzQ4NTE5MjkzOTA4MDdjYjE5ODM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXRoZWRyYWwgUGt3eSAmIEJyb2Fkd2F5PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyODguMDxicj4gdG90YWwgYXJyaXZhbHM6IDI1NTxicj4gbmV0IGRlcGFydHVyZXM6IC0zMy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTMxZGYzMzU3NTA0YzdhODM3YTdiODJmZTM1ZmE3MS5zZXRDb250ZW50KGh0bWxfYTU1MTdlNjZiNmY3NDg1MTkyOTM5MDgwN2NiMTk4MzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmI0NjI5MmY5ZWY5NDllZGE0YThkZDI0YjU1MDY2YzMuYmluZFBvcHVwKHBvcHVwX2E5MzFkZjMzNTc1MDRjN2E4MzdhN2I4MmZlMzVmYTcxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmFlN2MzYTNhZmY0ZDg2OWVkZTdkMjZjNjY2OTA1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3ODcyNDIwMDAwMDAwNSwgLTczLjk5NTk5MDk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTZlNzk0NmVkM2VlNDliMjkzNjFkNDkwNTY3MjgxN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTQ3MTc3YmI4ODM0OGI4YmZiYTFjODkzYzUwYWNkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfOTk0NzE3N2JiODgzNDhiOGJmYmExYzg5M2M1MGFjZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNtaXRoIFN0ICYgMyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUxPGJyPiBuZXQgZGVwYXJ0dXJlczogLTEwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U2ZTc5NDZlZDNlZTQ5YjI5MzYxZDQ5MDU2NzI4MTdjLnNldENvbnRlbnQoaHRtbF85OTQ3MTc3YmI4ODM0OGI4YmZiYTFjODkzYzUwYWNkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZmFlN2MzYTNhZmY0ZDg2OWVkZTdkMjZjNjY2OTA1YS5iaW5kUG9wdXAocG9wdXBfZTZlNzk0NmVkM2VlNDliMjkzNjFkNDkwNTY3MjgxN2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2YThiMGFlMmFiNzRhMWI4OWRmZTlkYjU4ZDIyOTAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgwOTU5MSwgLTczLjk5OTA1NzA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy4yNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2NTNkZTFkYTJmYzQ4M2Y4NGU1ODFlYjllMDRjODhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQwMDA3NTdlZTA3NGI5NmE5NWQ3ZTM5OTM2ZjQyYTUgPSAkKGA8ZGl2IGlkPSJodG1sXzE0MDAwNzU3ZWUwNzRiOTZhOTVkN2UzOTkzNmY0MmE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4xIFBsICYgQ2xpbnRvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogODkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI0PGJyPiBuZXQgZGVwYXJ0dXJlczogLTY1LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2NTNkZTFkYTJmYzQ4M2Y4NGU1ODFlYjllMDRjODhjLnNldENvbnRlbnQoaHRtbF8xNDAwMDc1N2VlMDc0Yjk2YTk1ZDdlMzk5MzZmNDJhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNmE4YjBhZTJhYjc0YTFiODlkZmU5ZGI1OGQyMjkwMy5iaW5kUG9wdXAocG9wdXBfODY1M2RlMWRhMmZjNDgzZjg0ZTU4MWViOWUwNGM4OGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4MjY5NjYyZDk0MTRjNzU5MDc5YWRhNjAzYjZkNTU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkzNDMzNzAwMDAwMDEsIC03My45NDk0NTAwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0YzBhODhmN2U1NTQwOTI5YmYwMDU0NjliMWZjYTY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODFkNGZlMWY3OTU3NDc2NDk0NTAzMTZmYjEwZThiZjMgPSAkKGA8ZGl2IGlkPSJodG1sXzgxZDRmZTFmNzk1NzQ3NjQ5NDUwMzE2ZmIxMGU4YmYzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FIDEwNiBTdCAmIE1hZGlzb24gQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA0Ny4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTQuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzRjMGE4OGY3ZTU1NDA5MjliZjAwNTQ2OWIxZmNhNjcuc2V0Q29udGVudChodG1sXzgxZDRmZTFmNzk1NzQ3NjQ5NDUwMzE2ZmIxMGU4YmYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg4MjY5NjYyZDk0MTRjNzU5MDc5YWRhNjAzYjZkNTU4LmJpbmRQb3B1cChwb3B1cF8zNGMwYTg4ZjdlNTU0MDkyOWJmMDA1NDY5YjFmY2E2NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGI1MDI0NzZjNTgyNDVlYjlhODZjMzY2ZDIzNGU3YzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODI4MDAzLCAtNzMuOTk5OTA0MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTNkMjVmOGNiNzBhNGE5YWE0MmNlMjlkYTNlOWMyNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMGZkNGYyYjAwODc0YmIyOWU0ZmVmMTY3MGRmNmQ5NiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDBmZDRmMmIwMDg3NGJiMjllNGZlZjE2NzBkZjZkOTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlByZXNpZGVudCBTdCAmIEhlbnJ5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTgxLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEzZDI1ZjhjYjcwYTRhOWFhNDJjZTI5ZGEzZTljMjU2LnNldENvbnRlbnQoaHRtbF9kMGZkNGYyYjAwODc0YmIyOWU0ZmVmMTY3MGRmNmQ5Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYjUwMjQ3NmM1ODI0NWViOWE4NmMzNjZkMjM0ZTdjNy5iaW5kUG9wdXAocG9wdXBfMTNkMjVmOGNiNzBhNGE5YWE0MmNlMjlkYTNlOWMyNTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MGU1NTdlZDU2NTQ5NTk5MmFlMzI2MGEwZDFjMzUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgzMDQ1NiwgLTc0LjAwMzQ4NTU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy40NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0YmQ0MzhlNTY2ODQ3NmRhYWJhZDZhNDUzOWFlNGRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWYwOTM1OTdmNjIzNDZiYTk5NDdhMDBmM2RhNDdiNzMgPSAkKGA8ZGl2IGlkPSJodG1sXzFmMDkzNTk3ZjYyMzQ2YmE5OTQ3YTAwZjNkYTQ3YjczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DYXJyb2xsIFN0ICYgQ29sdW1iaWEgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwOS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjRiZDQzOGU1NjY4NDc2ZGFhYmFkNmE0NTM5YWU0ZGMuc2V0Q29udGVudChodG1sXzFmMDkzNTk3ZjYyMzQ2YmE5OTQ3YTAwZjNkYTQ3YjczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0MGU1NTdlZDU2NTQ5NTk5MmFlMzI2MGEwZDFjMzUyLmJpbmRQb3B1cChwb3B1cF9mNGJkNDM4ZTU2Njg0NzZkYWFiYWQ2YTQ1MzlhZTRkYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU2ZjQyNjgwZTA4NDEzZDkxODEzYjlkZDdiNWQ5NGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43OTMyOTY2OCwgLTczLjk0MzIwODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjcsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NDE0OWFhNTk1ZTU0ODRmYmNkMDVkY2VkY2Q0NTFlOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1NDUyMDE2ZmJlODRiYWJiYzVkZTQ1Mjk4ZjY2YTNkID0gJChgPGRpdiBpZD0iaHRtbF8xNTQ1MjAxNmZiZTg0YmFiYmM1ZGU0NTI5OGY2NmEzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAxMDkgU3QgJiAzIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDUyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0MTQ5YWE1OTVlNTQ4NGZiY2QwNWRjZWRjZDQ1MWU5LnNldENvbnRlbnQoaHRtbF8xNTQ1MjAxNmZiZTg0YmFiYmM1ZGU0NTI5OGY2NmEzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNTZmNDI2ODBlMDg0MTNkOTE4MTNiOWRkN2I1ZDk0Yy5iaW5kUG9wdXAocG9wdXBfODQxNDlhYTU5NWU1NDg0ZmJjZDA1ZGNlZGNkNDUxZTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzViMTFhZWRkMWRkZjRmZjFhNjNjNTk1ZDQ0YjAyMzAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg5MjUyOSwgLTczLjkzOTU2MjM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDFkOWJlOTkwOTA5NDJiZWI5ODhkYTYzMDU0NzUwMzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTIwZjE4NjE2ODI0ZjE3YWM1YzU0YzI4OTA2ODJmYSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjkyMGYxODYxNjgyNGYxN2FjNWM1NGMyODkwNjgyZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTA2IFN0ICYgMSBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDUzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAyMzxicj4gbmV0IGRlcGFydHVyZXM6IC0zMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MWQ5YmU5OTA5MDk0MmJlYjk4OGRhNjMwNTQ3NTAzNC5zZXRDb250ZW50KGh0bWxfMjkyMGYxODYxNjgyNGYxN2FjNWM1NGMyODkwNjgyZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWIxMWFlZGQxZGRmNGZmMWE2M2M1OTVkNDRiMDIzMDMuYmluZFBvcHVwKHBvcHVwXzQxZDliZTk5MDkwOTQyYmViOTg4ZGE2MzA1NDc1MDM0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MjdiMGFjNzgxYjY0OTE0ODkxNTFmZDU0NDRhMmY3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MTIxMTcwMDAwMDAwNiwgLTc0LjAwODYwOTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjZiN2U0YzZjNmY3NDEzM2JmNmQ2ZTY4MzhmOTI2M2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNWRiNGYwM2ExZDQ0OTYzYTU3OTJkMzE3MDI3YmQ4NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYTVkYjRmMDNhMWQ0NDk2M2E1NzkyZDMxNzAyN2JkODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbW1lcmNlIFN0ICYgVmFuIEJydW50IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjZiN2U0YzZjNmY3NDEzM2JmNmQ2ZTY4MzhmOTI2M2Quc2V0Q29udGVudChodG1sX2E1ZGI0ZjAzYTFkNDQ5NjNhNTc5MmQzMTcwMjdiZDg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgyN2IwYWM3ODFiNjQ5MTQ4OTE1MWZkNTQ0NGEyZjc2LmJpbmRQb3B1cChwb3B1cF82NmI3ZTRjNmM2Zjc0MTMzYmY2ZDZlNjgzOGY5MjYzZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjhmYmNkYjVkYjBiNDFmMGJkNzVkOGNmNzU2MjYwNWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42Nzk0MzI3MDAwMDAwMSwgLTc0LjAwNzg1MDQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC41LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU3OWI3MWJkZGI5NGRhNjliYzk0MmM0OTUwMDVjNjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YmY3ODdiZTI3NWI0ZWI1YjA4MGQyZDZkZWIyMjJjMCA9ICQoYDxkaXYgaWQ9Imh0bWxfNmJmNzg3YmUyNzViNGViNWIwODBkMmQ2ZGViMjIyYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJpY2hhcmRzIFN0ICYgRGVsYXZhbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWU3OWI3MWJkZGI5NGRhNjliYzk0MmM0OTUwMDVjNjIuc2V0Q29udGVudChodG1sXzZiZjc4N2JlMjc1YjRlYjViMDgwZDJkNmRlYjIyMmMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY4ZmJjZGI1ZGIwYjQxZjBiZDc1ZDhjZjc1NjI2MDVhLmJpbmRQb3B1cChwb3B1cF85ZTc5YjcxYmRkYjk0ZGE2OWJjOTQyYzQ5NTAwNWM2MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2NmMGM2YjZhNTcwNGNkZjkyZmQzMmJiNzBlZmY4NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzY5OTkzLCAtNzQuMDA2NDcxMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYTMzYzAxYzcyNDQ0N2Q1ODNmN2E1YTQ3MjRlODg3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiNGEwN2IzZTNiYjQ2MzdhNTc5MDE3M2Q3Njc5Yjk0ID0gJChgPGRpdiBpZD0iaHRtbF9iYjRhMDdiM2UzYmI0NjM3YTU3OTAxNzNkNzY3OWI5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1iaWEgU3QgJiBXIDkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDIyLjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMjxicj4gbmV0IGRlcGFydHVyZXM6IC0xMC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYTMzYzAxYzcyNDQ0N2Q1ODNmN2E1YTQ3MjRlODg3OC5zZXRDb250ZW50KGh0bWxfYmI0YTA3YjNlM2JiNDYzN2E1NzkwMTczZDc2NzliOTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2NmMGM2YjZhNTcwNGNkZjkyZmQzMmJiNzBlZmY4NzIuYmluZFBvcHVwKHBvcHVwX2NhMzNjMDFjNzI0NDQ3ZDU4M2Y3YTVhNDcyNGU4ODc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjM2Mjk5MTk5YjM0ODNiYWUyZmU4MWJlZTBlODkwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NjM3NDQsIC03NC4wMDMyNDk1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODE2OWM2ZTAzZjE0OGMzOWM5OTRjYmJiZjkyMmVmYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmZTUxOWUxZmJjODQxZWZhMDRlNGExNGQzNjU0ODc2ID0gJChgPGRpdiBpZD0iaHRtbF9jZmU1MTllMWZiYzg0MWVmYTA0ZTRhMTRkMzY1NDg3NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGVucnkgU3QgJiBXIDkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE3LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxNDxicj4gbmV0IGRlcGFydHVyZXM6IC0zLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk4MTY5YzZlMDNmMTQ4YzM5Yzk5NGNiYmJmOTIyZWZjLnNldENvbnRlbnQoaHRtbF9jZmU1MTllMWZiYzg0MWVmYTA0ZTRhMTRkMzY1NDg3Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YjM2Mjk5MTk5YjM0ODNiYWUyZmU4MWJlZTBlODkwNC5iaW5kUG9wdXAocG9wdXBfOTgxNjljNmUwM2YxNDhjMzljOTk0Y2JiYmY5MjJlZmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0OTVjYmIwNDIzNDQwOGI5YzE0MjMwZWIyNjFkOGJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc4MzU2MywgLTc0LjAwMDE0NTAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy43NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFjNWZhNmQxYjM5ODRjZmRiMWQ2YjBkNDU2ZDYzYjc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODdmNGU0OGQ0MGRmNGQ4ZDgwNjYwYzY1YzU3YjQ0ZjAgPSAkKGA8ZGl2IGlkPSJodG1sXzg3ZjRlNDhkNDBkZjRkOGQ4MDY2MGM2NWM1N2I0NGYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DbGludG9uIFN0ICYgNCBQbGFjZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTI1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1MDxicj4gbmV0IGRlcGFydHVyZXM6IC03NS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzVmYTZkMWIzOTg0Y2ZkYjFkNmIwZDQ1NmQ2M2I3OS5zZXRDb250ZW50KGh0bWxfODdmNGU0OGQ0MGRmNGQ4ZDgwNjYwYzY1YzU3YjQ0ZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDQ5NWNiYjA0MjM0NDA4YjljMTQyMzBlYjI2MWQ4YmEuYmluZFBvcHVwKHBvcHVwXzFjNWZhNmQxYjM5ODRjZmRiMWQ2YjBkNDU2ZDYzYjc5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMTZkN2VhNjRkNzk0Zjk4OTVjY2NkMDUyOWQxMTk4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NjM5NDcsIC03My45OTg2OTg5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTIuNjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODQxY2VmMzYyYzA0MTM1YmYwNGRkOGZjMjA2NzRjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhNDFhYjQ1NTE3YzRhNTRhODU1Yzc1OTE3Zjg2NDExID0gJChgPGRpdiBpZD0iaHRtbF83YTQxYWI0NTUxN2M0YTU0YTg1NWM3NTkxN2Y4NjQxMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q291cnQgU3QgJiBOZWxzb24gU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDk1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Mjxicj4gbmV0IGRlcGFydHVyZXM6IC01My4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODQxY2VmMzYyYzA0MTM1YmYwNGRkOGZjMjA2NzRjMy5zZXRDb250ZW50KGh0bWxfN2E0MWFiNDU1MTdjNGE1NGE4NTVjNzU5MTdmODY0MTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjE2ZDdlYTY0ZDc5NGY5ODk1Y2NjZDA1MjlkMTE5ODQuYmluZFBvcHVwKHBvcHVwXzI4NDFjZWYzNjJjMDQxMzViZjA0ZGQ4ZmMyMDY3NGMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NjMwNzQ4YTA5OWQ0ZTBjOTMyZmE5NDVhYjg0MmIxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NDY5NTcwMDAwMDAxLCAtNzMuOTk3ODU3NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEuNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmOWJjZGRjZDdiMzQ4ZDJhNjQzZTJhN2E4Nzc1ZTA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjhkMzY3MWRmNWViNDhlNzhlMzY2MDQ4YjVmNmRmYTcgPSAkKGA8ZGl2IGlkPSJodG1sX2I4ZDM2NzFkZjVlYjQ4ZTc4ZTM2NjA0OGI1ZjZkZmE3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5TbWl0aCBTdCAmIDkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQ3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3Nzxicj4gbmV0IGRlcGFydHVyZXM6IDMwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmOWJjZGRjZDdiMzQ4ZDJhNjQzZTJhN2E4Nzc1ZTA1LnNldENvbnRlbnQoaHRtbF9iOGQzNjcxZGY1ZWI0OGU3OGUzNjYwNDhiNWY2ZGZhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NjMwNzQ4YTA5OWQ0ZTBjOTMyZmE5NDVhYjg0MmIxOS5iaW5kUG9wdXAocG9wdXBfNmY5YmNkZGNkN2IzNDhkMmE2NDNlMmE3YTg3NzVlMDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JkZGM0OTMzNGVmZDQ1MWU5NmNhYzRiYTRjZWZkZWY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjcyNjAyOTgxNTAxMjYsIC03My45ODk4MzAwMTcwODk4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZmYjliYzM2YTVkNDQwYmY4Y2U2ZTUzZWU0ZDgzNTZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDUyYzA5MTEyMjE1NDczN2FiMTIyZWIzOGQ4OWEyZjAgPSAkKGA8ZGl2IGlkPSJodG1sXzQ1MmMwOTExMjIxNTQ3MzdhYjEyMmViMzhkODlhMmYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43IFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDY3LjA8YnI+IHRvdGFsIGFycml2YWxzOiA0Mzxicj4gbmV0IGRlcGFydHVyZXM6IC0yNC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZmI5YmMzNmE1ZDQ0MGJmOGNlNmU1M2VlNGQ4MzU2Yi5zZXRDb250ZW50KGh0bWxfNDUyYzA5MTEyMjE1NDczN2FiMTIyZWIzOGQ4OWEyZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmRkYzQ5MzM0ZWZkNDUxZTk2Y2FjNGJhNGNlZmRlZjUuYmluZFBvcHVwKHBvcHVwX2ZmYjliYzM2YTVkNDQwYmY4Y2U2ZTUzZWU0ZDgzNTZiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZWNiZDU5OGVmNWQ0MWEyYjI0MjVmOTRjOGRmYjIxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5NjE1MzQ5OTk5OTk5NiwgLTczLjk0NzgyMTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjM1ZTkyY2M2NWNkNDFiODgxYTE1NmRjODZkNmEzNjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZWI4Nzc5OWJhODk0YjJjOTkxOGE0ZGZhOWEyNTM1NSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmViODc3OTliYTg5NGIyYzk5MThhNGRmYTlhMjUzNTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTEwIFN0ICYgTWFkaXNvbiBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE1My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzc8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjM1ZTkyY2M2NWNkNDFiODgxYTE1NmRjODZkNmEzNjAuc2V0Q29udGVudChodG1sXzZlYjg3Nzk5YmE4OTRiMmM5OTE4YTRkZmE5YTI1MzU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRlY2JkNTk4ZWY1ZDQxYTJiMjQyNWY5NGM4ZGZiMjFjLmJpbmRQb3B1cChwb3B1cF82MzVlOTJjYzY1Y2Q0MWI4ODFhMTU2ZGM4NmQ2YTM2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzYzMjE0ZTYwMDExNGI2Nzk0YWE3ZGYzZjgxY2QxMWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzI0ODExLCAtNzMuOTkzMzEzOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0wLjMsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85N2RhOTVlNmIxNDM0YjdhOTY0OGQwODJmYzBkNWExNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmN2E5NDliODQ5NTQxYmVhNGQwZWRkZmI0NTIzNDdlID0gJChgPGRpdiBpZD0iaHRtbF8xZjdhOTQ5Yjg0OTU0MWJlYTRkMGVkZGZiNDUyMzQ3ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+MiBBdmUgJiA5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzNS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85N2RhOTVlNmIxNDM0YjdhOTY0OGQwODJmYzBkNWExNS5zZXRDb250ZW50KGh0bWxfMWY3YTk0OWI4NDk1NDFiZWE0ZDBlZGRmYjQ1MjM0N2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzYzMjE0ZTYwMDExNGI2Nzk0YWE3ZGYzZjgxY2QxMWIuYmluZFBvcHVwKHBvcHVwXzk3ZGE5NWU2YjE0MzRiN2E5NjQ4ZDA4MmZjMGQ1YTE1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNGNiMDZkMTk1NWM0MzA3YTMxNTRmNzJmNzQ0NzBmMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY5MDIzNzUsIC03My45OTIwMzA3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC4xLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTMwNjIxY2YzNmM1NGFhZGI0MTRiMTZlNzg1N2QzMGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zY2Y0NGRmY2YxNGY0YTgwYmIyMjY4NDEwMmJhMmU1NCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2NmNDRkZmNmMTRmNGE4MGJiMjI2ODQxMDJiYTJlNTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvdXJ0IFN0ICYgU3RhdGUgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE2OS4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTcxPGJyPiBuZXQgZGVwYXJ0dXJlczogMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMzA2MjFjZjM2YzU0YWFkYjQxNGIxNmU3ODU3ZDMwYy5zZXRDb250ZW50KGh0bWxfM2NmNDRkZmNmMTRmNGE4MGJiMjI2ODQxMDJiYTJlNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjRjYjA2ZDE5NTVjNDMwN2EzMTU0ZjcyZjc0NDcwZjMuYmluZFBvcHVwKHBvcHVwXzEzMDYyMWNmMzZjNTRhYWRiNDE0YjE2ZTc4NTdkMzBjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZWFhNzU5MDEyYWU0OGUxYjY2MmI4ZGM2NGNmYWEwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MDUxMzUsIC03My45ODg3NjU4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmVjNzIwN2UyZWYwNDQ3ODljMTZjNjg4Njk5NTc5ZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZmQ5ZDA2YTA0ODU0MTdjYWJkOTgyZjk1MDQyM2YzNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZmZkOWQwNmEwNDg1NDE3Y2FiZDk4MmY5NTA0MjNmMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjQgQXZlICYgOSBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDY1PGJyPiBuZXQgZGVwYXJ0dXJlczogOC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZWM3MjA3ZTJlZjA0NDc4OWMxNmM2ODg2OTk1NzlmNS5zZXRDb250ZW50KGh0bWxfZmZkOWQwNmEwNDg1NDE3Y2FiZDk4MmY5NTA0MjNmMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2VhYTc1OTAxMmFlNDhlMWI2NjJiOGRjNjRjZmFhMDAuYmluZFBvcHVwKHBvcHVwX2JlYzcyMDdlMmVmMDQ0Nzg5YzE2YzY4ODY5OTU3OWY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMWU2ODc0ZmMwZTk0ZjMyYjAwOWVlZDAzMDk1MjhmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3MDQ5MjIwMDAwMDAwNSwgLTczLjk4NTQxNjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMi4yLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzM4YWEzNGE3MTQ4NDlkYTgwMmIwNDZiMzY0Mjk5OTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjY4NzMzNjRiYjQ0YTJkYTA0OWIyNDY5NTQ5YjZhYiA9ICQoYDxkaXYgaWQ9Imh0bWxfNzI2ODczMzY0YmI0NGEyZGEwNDliMjQ2OTU0OWI2YWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjcgU3QgJiA1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogODcuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTQ0LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MzOGFhMzRhNzE0ODQ5ZGE4MDJiMDQ2YjM2NDI5OTkwLnNldENvbnRlbnQoaHRtbF83MjY4NzMzNjRiYjQ0YTJkYTA0OWIyNDY5NTQ5YjZhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMWU2ODc0ZmMwZTk0ZjMyYjAwOWVlZDAzMDk1MjhmYS5iaW5kUG9wdXAocG9wdXBfYzM4YWEzNGE3MTQ4NDlkYTgwMmIwNDZiMzY0Mjk5OTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1OGM3NThlODFiODRhMzQ4NTFmYzlhMzA5YjM2ZDljID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjcwNDgzNjAwMDAwMDA0LCAtNzMuOTgyMDg5NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjM1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzc2NDAzNmMxZWQ4NDUxMmJmOWNhOGExMWU4YmE1M2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDA1ODAxNjM2Yzc0MjhmYjIxNTZmN2ZkYzdlMjJkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfODQwNTgwMTYzNmM3NDI4ZmIyMTU2ZjdmZGM3ZTIyZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjUgU3QgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogNjMuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM2PGJyPiBuZXQgZGVwYXJ0dXJlczogLTI3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3NjQwMzZjMWVkODQ1MTJiZjljYThhMTFlOGJhNTNmLnNldENvbnRlbnQoaHRtbF84NDA1ODAxNjM2Yzc0MjhmYjIxNTZmN2ZkYzdlMjJkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NThjNzU4ZTgxYjg0YTM0ODUxZmM5YTMwOWIzNmQ5Yy5iaW5kUG9wdXAocG9wdXBfYzc2NDAzNmMxZWQ4NDUxMmJmOWNhOGExMWU4YmE1M2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjYTBlYWExMzI1NjQ4N2I5OTE4Mjg0ZDZiMTkxNzU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjc5MDk3OTk3MjE2ODQsIC03My45ODc2NTQ3NDU1Nzg3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTAuMywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0M2M5MzcwOTUzYjQ0YTRiZWM5MDEwYTljMTA0YzIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTI5NmU1NmI5OTczNDE5NmE4OWI4YmE3NDAxY2M3ZWIgPSAkKGA8ZGl2IGlkPSJodG1sXzkyOTZlNTZiOTk3MzQxOTZhODliOGJhNzQwMWNjN2ViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5VbmlvbiBTdCAmIE5ldmlucyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDQ5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTYuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQzYzkzNzA5NTNiNDRhNGJlYzkwMTBhOWMxMDRjMjAuc2V0Q29udGVudChodG1sXzkyOTZlNTZiOTk3MzQxOTZhODliOGJhNzQwMWNjN2ViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjYTBlYWExMzI1NjQ4N2I5OTE4Mjg0ZDZiMTkxNzU0LmJpbmRQb3B1cChwb3B1cF8wNDNjOTM3MDk1M2I0NGE0YmVjOTAxMGE5YzEwNGMyMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWMyNTZiMzc3OWI5NGUyOGFhNWY0YTZmY2IwOTgxOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODgxNTI5LCAtNzMuOTk1MjA5MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0zLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWMwNTQ2MzU2NjI4NDMxMTg3MjExYjlmZjI2ZDc1NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZjY2NzNlNjJlMWI0Nzg1YWJjNGQwZmYyMGY0ODI2OCA9ICQoYDxkaXYgaWQ9Imh0bWxfOGY2NjczZTYyZTFiNDc4NWFiYzRkMGZmMjBmNDgyNjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbmdyZXNzIFN0ICYgQ2xpbnRvbiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMTQ1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA3NDxicj4gbmV0IGRlcGFydHVyZXM6IC03MS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzA1NDYzNTY2Mjg0MzExODcyMTFiOWZmMjZkNzU2My5zZXRDb250ZW50KGh0bWxfOGY2NjczZTYyZTFiNDc4NWFiYzRkMGZmMjBmNDgyNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWMyNTZiMzc3OWI5NGUyOGFhNWY0YTZmY2IwOTgxOTAuYmluZFBvcHVwKHBvcHVwXzFjMDU0NjM1NjYyODQzMTE4NzIxMWI5ZmYyNmQ3NTYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NDE2ZWU2MzY4YTA0YjBjOTM4NGFlZTFlZTRkZWQyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4Njc0NDI5OTk5OTk5NCwgLTczLjk5MDYzMTY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLjAsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjFhMDI4MzY2YjI0YzAyYTcxYjI5MGM5MjdiMzU4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4ZGM0NDA4ZThmYTQyNDY5OTk2ODBhNzdjNzNhM2Y5ID0gJChgPGRpdiBpZD0iaHRtbF8xOGRjNDQwOGU4ZmE0MjQ2OTk5NjgwYTc3YzczYTNmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QmVyZ2VuIFN0ICYgU21pdGggU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE5Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMjEyPGJyPiBuZXQgZGVwYXJ0dXJlczogMjAuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzIxYTAyODM2NmIyNGMwMmE3MWIyOTBjOTI3YjM1OGIuc2V0Q29udGVudChodG1sXzE4ZGM0NDA4ZThmYTQyNDY5OTk2ODBhNzdjNzNhM2Y5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0MTZlZTYzNjhhMDRiMGM5Mzg0YWVlMWVlNGRlZDJmLmJpbmRQb3B1cChwb3B1cF8zMjFhMDI4MzY2YjI0YzAyYTcxYjI5MGM5MjdiMzU4YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTQ1MGM3YmQ4NWIyNGJjMTkzN2M5YWRkNzkxYzEzYmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODY0NDQyMDAwMDAwMDQsIC03My45ODc1OTEwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjRTM3MjIyIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0UzNzIyMiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMC40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjY3YmFhYjhjNzI2NGE2Y2EyMWJkYjFiOGM3Mjk3NjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDk4NWRiNjNhZmY0MGEzOTI2ZTQ0ZjZjMzNmMjRiYiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjQ5ODVkYjYzYWZmNDBhMzkyNmU0NGY2YzMzZjI0YmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRlYW4gU3QgJiBIb3l0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA2My4wPGJyPiB0b3RhbCBhcnJpdmFsczogNzE8YnI+IG5ldCBkZXBhcnR1cmVzOiA4LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2N2JhYWI4YzcyNjRhNmNhMjFiZGIxYjhjNzI5NzY5LnNldENvbnRlbnQoaHRtbF8yNDk4NWRiNjNhZmY0MGEzOTI2ZTQ0ZjZjMzNmMjRiYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNDUwYzdiZDg1YjI0YmMxOTM3YzlhZGQ3OTFjMTNiZC5iaW5kUG9wdXAocG9wdXBfYjY3YmFhYjhjNzI2NGE2Y2EyMWJkYjFiOGM3Mjk3NjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZjOGRmZjljYzkyNjQ3MDM5NGUzMTRhOWE4MjhlYWRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg0OTY2OCwgLTczLjk4NjIwNzcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxNzBmNDVlNDA4NjQwNmQ5NzA0NTc1ZTUxMmFjMzIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWJkYmYyNzg2ZDY2NGU5Yzk4ODI1ZTNiMDA1YWIxOGEgPSAkKGA8ZGl2IGlkPSJodG1sXzViZGJmMjc4NmQ2NjRlOWM5ODgyNWUzYjAwNWFiMThhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Cb25kIFN0ICYgQmVyZ2VuIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNjQ8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMTcwZjQ1ZTQwODY0MDZkOTcwNDU3NWU1MTJhYzMyMy5zZXRDb250ZW50KGh0bWxfNWJkYmYyNzg2ZDY2NGU5Yzk4ODI1ZTNiMDA1YWIxOGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmM4ZGZmOWNjOTI2NDcwMzk0ZTMxNGE5YTgyOGVhZGQuYmluZFBvcHVwKHBvcHVwX2MxNzBmNDVlNDA4NjQwNmQ5NzA0NTc1ZTUxMmFjMzIzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZTQ5MTY2NTBhNDI0MzA1OTY0MjM3M2E0NDkzNDhlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4NTM3NjEsIC03My45ODMwMjEzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMTUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kM2RiNDRmYTI3ZmQ0ZjJiYWMzNmZiZTc0YTJkODE0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzM2E3NDVmMDZhNjRiM2RhMWNmOTdlZjY0MWFkY2RkID0gJChgPGRpdiBpZD0iaHRtbF80MzNhNzQ1ZjA2YTY0YjNkYTFjZjk3ZWY2NDFhZGNkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFjaWZpYyBTdCAmIE5ldmlucyBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNjIuMDxicj4gdG90YWwgYXJyaXZhbHM6IDM5PGJyPiBuZXQgZGVwYXJ0dXJlczogLTIzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzZGI0NGZhMjdmZDRmMmJhYzM2ZmJlNzRhMmQ4MTQ4LnNldENvbnRlbnQoaHRtbF80MzNhNzQ1ZjA2YTY0YjNkYTFjZjk3ZWY2NDFhZGNkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZTQ5MTY2NTBhNDI0MzA1OTY0MjM3M2E0NDkzNDhlNi5iaW5kUG9wdXAocG9wdXBfZDNkYjQ0ZmEyN2ZkNGYyYmFjMzZmYmU3NGEyZDgxNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmOTgzMTY1MjQyYjQ0YTRiM2M4N2QwOWI4Yjg0YWZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgyNzU0OSwgLTczLjk4MjU4NTU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC41NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwNmNlMTIzNDdjZjRmMzk5MTU2MDU2NjU0MTgwMzAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGEzMjkxMDlmOGZkNDg5Nzk4MzFhODM2ODAxY2I3ZjMgPSAkKGA8ZGl2IGlkPSJodG1sX2RhMzI5MTA5ZjhmZDQ4OTc5ODMxYTgzNjgwMWNiN2YzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XeWNrb2ZmIFN0ICYgMyBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDQzLjA8YnI+IHRvdGFsIGFycml2YWxzOiAzMjxicj4gbmV0IGRlcGFydHVyZXM6IC0xMS4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDZjZTEyMzQ3Y2Y0ZjM5OTE1NjA1NjY1NDE4MDMwMC5zZXRDb250ZW50KGh0bWxfZGEzMjkxMDlmOGZkNDg5Nzk4MzFhODM2ODAxY2I3ZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGY5ODMxNjUyNDJiNDRhNGIzYzg3ZDA5YjhiODRhZmYuYmluZFBvcHVwKHBvcHVwXzAwNmNlMTIzNDdjZjRmMzk5MTU2MDU2NjU0MTgwMzAwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZWJjMDQ1MzBkYzY0Mjc1YWIyNTcyOTc0MzlkY2Y1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY4MDk0NDcyMzQ3NzI5NiwgLTczLjk3NTY3MzMxNzkwOTIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBhMjMzMDA3ZTlhMTRhYWY5Y2E5ZTVlNzE5NDE4NDAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzY0NmJiMGVkZGFlNDcxN2JhNDZkYjVkZWI3OGFkZDIgPSAkKGA8ZGl2IGlkPSJodG1sX2M2NDZiYjBlZGRhZTQ3MTdiYTQ2ZGI1ZGViNzhhZGQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CZXJnZW4gU3QgJiBGbGF0YnVzaCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDk1LjA8YnI+IHRvdGFsIGFycml2YWxzOiA2ODxicj4gbmV0IGRlcGFydHVyZXM6IC0yNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYTIzMzAwN2U5YTE0YWFmOWNhOWU1ZTcxOTQxODQwMi5zZXRDb250ZW50KGh0bWxfYzY0NmJiMGVkZGFlNDcxN2JhNDZkYjVkZWI3OGFkZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmViYzA0NTMwZGM2NDI3NWFiMjU3Mjk3NDM5ZGNmNTMuYmluZFBvcHVwKHBvcHVwXzBhMjMzMDA3ZTlhMTRhYWY5Y2E5ZTVlNzE5NDE4NDAyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNTBhOGEzNTI4ZmI0NjJmOGY3NzMxODk3NjJhNDNhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3OTMzMDcsIC03My45NzUxOTUyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTEuMzUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYTUzYzRlZDUxODA0ZjI1OTEwNTM0NTUzZTRkMGE3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0ZDY4ODIxZDE0ZTQ2MDU4NTJlNGMyOGQ5OGYwYWVhID0gJChgPGRpdiBpZD0iaHRtbF85NGQ2ODgyMWQxNGU0NjA1ODUyZTRjMjhkOThmMGFlYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UHJvc3BlY3QgUGwgJiA2IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTAxLjA8YnI+IHRvdGFsIGFycml2YWxzOiA3NDxicj4gbmV0IGRlcGFydHVyZXM6IC0yNy4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYTUzYzRlZDUxODA0ZjI1OTEwNTM0NTUzZTRkMGE3YS5zZXRDb250ZW50KGh0bWxfOTRkNjg4MjFkMTRlNDYwNTg1MmU0YzI4ZDk4ZjBhZWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzUwYThhMzUyOGZiNDYyZjhmNzczMTg5NzYyYTQzYWUuYmluZFBvcHVwKHBvcHVwXzFhNTNjNGVkNTE4MDRmMjU5MTA1MzQ1NTNlNGQwYTdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNWVjMmNmOTUzNjM0N2YyYjEyNjJjMWRjNzJmNjQ0ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NzYxNDcwMDAwMDAxLCAtNzMuOTczMjQyODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiI0UzNzIyMiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNFMzcyMjIiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDAuMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmZmMxZDEyNDhlZjQ4NDdiMDBhYTkwOGIyZjQxMjU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTFkMzcxMzA1ODZlNGZjYTgwOTYyMTEzYzVhNGMxNjYgPSAkKGA8ZGl2IGlkPSJodG1sX2ExZDM3MTMwNTg2ZTRmY2E4MDk2MjExM2M1YTRjMTY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43IEF2ZSAmIFBhcmsgUGw8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTQyPGJyPiBuZXQgZGVwYXJ0dXJlczogMi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZmZjMWQxMjQ4ZWY0ODQ3YjAwYWE5MDhiMmY0MTI1Ni5zZXRDb250ZW50KGh0bWxfYTFkMzcxMzA1ODZlNGZjYTgwOTYyMTEzYzVhNGMxNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTVlYzJjZjk1MzYzNDdmMmIxMjYyYzFkYzcyZjY0NGQuYmluZFBvcHVwKHBvcHVwXzNmZmMxZDEyNDhlZjQ4NDdiMDBhYTkwOGIyZjQxMjU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NjU2MDAyMjgxMWE0Nzc5YmQ2MjQ3ZTI1M2IyMzkwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3OTU3NjYsIC03My45Nzg1NDk3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuMiwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1ZGQwZGFlZTE5ODQ0ZmI5ZTc1YzNlMzI3YWQxMzFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzU0OWMyMjlkOWY0NDc3MDgxODNhZDc2ZDM0ZDU3ZjggPSAkKGA8ZGl2IGlkPSJodG1sXzc1NDljMjI5ZDlmNDQ3NzA4MTgzYWQ3NmQzNGQ1N2Y4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYWx0aWMgU3QgJiA1IEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMTE4LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1NDxicj4gbmV0IGRlcGFydHVyZXM6IC02NC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNWRkMGRhZWUxOTg0NGZiOWU3NWMzZTMyN2FkMTMxZS5zZXRDb250ZW50KGh0bWxfNzU0OWMyMjlkOWY0NDc3MDgxODNhZDc2ZDM0ZDU3ZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODY1NjAwMjI4MTFhNDc3OWJkNjI0N2UyNTNiMjM5MDUuYmluZFBvcHVwKHBvcHVwX2Y1ZGQwZGFlZTE5ODQ0ZmI5ZTc1YzNlMzI3YWQxMzFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMWUxYWY4YmQ1OWE0YmUzYWFmMTc5MTZlZDE1ZGZjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjY3NTAyMDcwMDAwMDAwNSwgLTczLjk3MTExNDczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0LjE1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDFjNTQ2MjBlYWRkNGFhYjliMDVkYmY2ZTc5YzQ3ZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNzM0ZmIwYjA0M2Y0MjQ4OTBmYWI3YjBiNDk3OTdiNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjczNGZiMGIwNDNmNDI0ODkwZmFiN2IwYjQ5Nzk3YjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBsYXphIFN0IFdlc3QgJiBGbGF0YnVzaCBBdmU8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDEwNC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMTg3PGJyPiBuZXQgZGVwYXJ0dXJlczogODMuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDFjNTQ2MjBlYWRkNGFhYjliMDVkYmY2ZTc5YzQ3ZTAuc2V0Q29udGVudChodG1sXzI3MzRmYjBiMDQzZjQyNDg5MGZhYjdiMGI0OTc5N2I2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MxZTFhZjhiZDU5YTRiZTNhYWYxNzkxNmVkMTVkZmMyLmJpbmRQb3B1cChwb3B1cF8wMWM1NDYyMGVhZGQ0YWFiOWIwNWRiZjZlNzljNDdlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmMwNDE1MTY0NzAxNDIyMTg0N2M5NDNiYzA2ZTMyMzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NzkyNzg3OTk5OTk5OSwgLTczLjk4MTU0MDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMS42NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlYzUzM2ZiYzU2ZjQwMTBiODVhZDkxMTY3YmE4YjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2YyZmNiYWMxZDY3NDhhOThjZDU5ZWRjNjFiYzBlNDYgPSAkKGA8ZGl2IGlkPSJodG1sXzdmMmZjYmFjMWQ2NzQ4YTk4Y2Q1OWVkYzYxYmMwZTQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb3VnbGFzcyBTdCAmIDQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDcyPGJyPiBuZXQgZGVwYXJ0dXJlczogLTMzLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlYzUzM2ZiYzU2ZjQwMTBiODVhZDkxMTY3YmE4YjQ0LnNldENvbnRlbnQoaHRtbF83ZjJmY2JhYzFkNjc0OGE5OGNkNTllZGM2MWJjMGU0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzA0MTUxNjQ3MDE0MjIxODQ3Yzk0M2JjMDZlMzIzMy5iaW5kUG9wdXAocG9wdXBfMWVjNTMzZmJjNTZmNDAxMGI4NWFkOTExNjdiYThiNDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QxNzVmNmViNWY1YzQyNDJiNGRlNDU1M2Y5YThmZjgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjgwMjEzMywgLTczLjk4NDMyNjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC44NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkZDRhMzI4ZWZkZTQ4YzE5ZDI2NTVlODI4OTc4MDE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDAzNzViZDk3M2FiNGNlNDkxNTEwZDc4OGQ4NTM2NjIgPSAkKGA8ZGl2IGlkPSJodG1sXzQwMzc1YmQ5NzNhYjRjZTQ5MTUxMGQ3ODhkODUzNjYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Eb3VnbGFzcyBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAxMDUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdkZDRhMzI4ZWZkZTQ4YzE5ZDI2NTVlODI4OTc4MDE3LnNldENvbnRlbnQoaHRtbF80MDM3NWJkOTczYWI0Y2U0OTE1MTBkNzg4ZDg1MzY2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMTc1ZjZlYjVmNWM0MjQyYjRkZTQ1NTNmOWE4ZmY4MC5iaW5kUG9wdXAocG9wdXBfN2RkNGEzMjhlZmRlNDhjMTlkMjY1NWU4Mjg5NzgwMTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMzNzgxNGZhNzEzNDQwZjlhNjBhMTQ2YTZlY2RlNjEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNjg0MzU0OSwgLTczLjk4OTAxNjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC45NSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5OWY0NTE2ZDg1MjQyZGZhNWY4MTNhZTNlNDRlOTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTk3MjE0Mjk1NzA1NGRhMWFiMzM0ZjcyNDQ5Yzg1ZmMgPSAkKGA8ZGl2IGlkPSJodG1sX2E5NzIxNDI5NTcwNTRkYTFhYjMzNGY3MjQ0OWM4NWZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib3l0IFN0ICYgV2FycmVuIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1Mi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzM8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTkuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTk5ZjQ1MTZkODUyNDJkZmE1ZjgxM2FlM2U0NGU5NjAuc2V0Q29udGVudChodG1sX2E5NzIxNDI5NTcwNTRkYTFhYjMzNGY3MjQ0OWM4NWZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMzNzgxNGZhNzEzNDQwZjlhNjBhMTQ2YTZlY2RlNjEzLmJpbmRQb3B1cChwb3B1cF9hOTlmNDUxNmQ4NTI0MmRmYTVmODEzYWUzZTQ0ZTk2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzIxNjRiODdkNGVjNDJhN2JmMmVkZDc1YjAxOWEwM2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODU5Mjk2LCAtNzQuMDAyNDIzNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC00LjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZGQ3YTY0ZTRiNTQ0NmQ1OTk2ZjQ4MzFmZmU5OWJjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FhMTU1NWQyYTM1YjRhNDE4OWUwM2RiZTY0YjgzZTAyID0gJChgPGRpdiBpZD0iaHRtbF9hYTE1NTVkMmEzNWI0YTQxODllMDNkYmU2NGI4M2UwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29sdW1iaWEgU3QgJiBEZWdyYXcgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDE0NC4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtOTguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2RkN2E2NGU0YjU0NDZkNTk5NmY0ODMxZmZlOTliYzguc2V0Q29udGVudChodG1sX2FhMTU1NWQyYTM1YjRhNDE4OWUwM2RiZTY0YjgzZTAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMyMTY0Yjg3ZDRlYzQyYTdiZjJlZGQ3NWIwMTlhMDNiLmJpbmRQb3B1cChwb3B1cF9jZGQ3YTY0ZTRiNTQ0NmQ1OTk2ZjQ4MzFmZmU5OWJjOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTdmMGQ2ZGUwM2I2NDUwZjg5YmVmMjI5ZDY5YzRiZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42NjEwNjMzNzE5MDA2LCAtNzMuOTc5NDUyNTUwNDExMjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC01LjUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNTE2ZjlhM2IxZDU0MWI5YjQ4ODZhNTExYWY5ZTJiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmYzkxODRlMGQ5MTQ3Y2FhNWJlZTkzYTc0N2VlMGEwID0gJChgPGRpdiBpZD0iaHRtbF8zZmM5MTg0ZTBkOTE0N2NhYTViZWU5M2E3NDdlZTBhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VzdCBEcml2ZSAmIFByb3NwZWN0IFBhcmsgV2VzdDxicj4gdG90YWwgZGVwYXJ0dXJlczogMjE1LjA8YnI+IHRvdGFsIGFycml2YWxzOiAxMDU8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMTEwLjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1MTZmOWEzYjFkNTQxYjliNDg4NmE1MTFhZjllMmJlLnNldENvbnRlbnQoaHRtbF8zZmM5MTg0ZTBkOTE0N2NhYTViZWU5M2E3NDdlZTBhMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85N2YwZDZkZTAzYjY0NTBmODliZWYyMjlkNjljNGJlMS5iaW5kUG9wdXAocG9wdXBfYTUxNmY5YTNiMWQ1NDFiOWI0ODg2YTUxMWFmOWUyYmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5MWE1MWZlMWEyYTQ2Y2U5NjE4Mzc3ZWQwZGQxMmNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzkxOTc2LCAtNzMuOTQ1OTkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMC44LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWUzN2QyYmI5NTU4NDk5Y2EwMTUwYTgxZWU2YzQxMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMmE5OTE5NjU0NTg0Njg4YjQwNThjYTVmMjgwOTRhMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMjJhOTkxOTY1NDU4NDY4OGI0MDU4Y2E1ZjI4MDk0YTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkUgMTA2IFN0ICYgTGV4aW5ndG9uIEF2ZTxicj4gdG90YWwgZGVwYXJ0dXJlczogMjkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDEzPGJyPiBuZXQgZGVwYXJ0dXJlczogLTE2LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllMzdkMmJiOTU1ODQ5OWNhMDE1MGE4MWVlNmM0MTE4LnNldENvbnRlbnQoaHRtbF8yMmE5OTE5NjU0NTg0Njg4YjQwNThjYTVmMjgwOTRhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OTFhNTFmZTFhMmE0NmNlOTYxODM3N2VkMGRkMTJjZi5iaW5kUG9wdXAocG9wdXBfOWUzN2QyYmI5NTU4NDk5Y2EwMTUwYTgxZWU2YzQxMTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwYTAwZDUxMDg1ZjRkYTk5NGY4MGMzYzk0NzEzNzIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzg5MjEwNDk5OTk5OTk2LCAtNzMuOTQzNzA3ODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0xLjU1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTRjNzQ4NjM4MmU0NDkxYzk2OTc0MjU3NTU5MWQ0M2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZDJkNTE4ZmY2OGI0YTRmODJkMzVjODJjNmU0YjA2MCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2QyZDUxOGZmNjhiNGE0ZjgyZDM1YzgyYzZlNGIwNjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjIgQXZlICAmIEUgMTA0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA3MS4wPGJyPiB0b3RhbCBhcnJpdmFsczogNDA8YnI+IG5ldCBkZXBhcnR1cmVzOiAtMzEuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRjNzQ4NjM4MmU0NDkxYzk2OTc0MjU3NTU5MWQ0M2Uuc2V0Q29udGVudChodG1sXzNkMmQ1MThmZjY4YjRhNGY4MmQzNWM4MmM2ZTRiMDYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUwYTAwZDUxMDg1ZjRkYTk5NGY4MGMzYzk0NzEzNzIxLmJpbmRQb3B1cChwb3B1cF8xNGM3NDg2MzgyZTQ0OTFjOTY5NzQyNTc1NTkxZDQzZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGY3Mjg1ZTcyN2Q2NGMzNjkxYjUxMTE3ZmIxMzk0NTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MjQzMDUyNzI1MDMzMiwgLTczLjk5NjAwOTgyNjY2MDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA5LjksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85N2ViODc2ODEyYzU0MjFkYTQ3ZWNjOGQ5ZmY4MjZlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2NmZiZDE2ZDhmZTQxMDk4OWZjNjgyZTg5MWY4N2IxID0gJChgPGRpdiBpZD0iaHRtbF9kNjZmYmQxNmQ4ZmU0MTA5ODlmYzY4MmU4OTFmODdiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TGFmYXlldHRlIFN0ICYgSmVyc2V5IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1NzkuMDxicj4gdG90YWwgYXJyaXZhbHM6IDc3Nzxicj4gbmV0IGRlcGFydHVyZXM6IDE5OC4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85N2ViODc2ODEyYzU0MjFkYTQ3ZWNjOGQ5ZmY4MjZlNi5zZXRDb250ZW50KGh0bWxfZDY2ZmJkMTZkOGZlNDEwOTg5ZmM2ODJlODkxZjg3YjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGY3Mjg1ZTcyN2Q2NGMzNjkxYjUxMTE3ZmIxMzk0NTEuYmluZFBvcHVwKHBvcHVwXzk3ZWI4NzY4MTJjNTQyMWRhNDdlY2M4ZDlmZjgyNmU2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDc2OTMyZmNkOGQ0MDhjYjNhMDRiODBhMzlkZTk1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc0MDk4MywgLTc0LjAwMTcwMjAwMDAwMDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtMy40LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQxOTlhNzJjMzBiNGE5ZThkMTExMGQ2ZGE2Yzk4MjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Y2FiN2MwNDk5ODg0ZmNhOGMwNzcyNzg2ZWVkNDU5NyA9ICQoYDxkaXYgaWQ9Imh0bWxfN2NhYjdjMDQ5OTg4NGZjYThjMDc3Mjc4NmVlZDQ1OTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjggQXZlICYgVyAxNiBTdDxicj4gdG90YWwgZGVwYXJ0dXJlczogNTg0LjA8YnI+IHRvdGFsIGFycml2YWxzOiA1MTY8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNjguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQxOTlhNzJjMzBiNGE5ZThkMTExMGQ2ZGE2Yzk4MjUuc2V0Q29udGVudChodG1sXzdjYWI3YzA0OTk4ODRmY2E4YzA3NzI3ODZlZWQ0NTk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVkNzY5MzJmY2Q4ZDQwOGNiM2EwNGI4MGEzOWRlOTUwLmJpbmRQb3B1cChwb3B1cF8zNDE5OWE3MmMzMGI0YTllOGQxMTEwZDZkYTZjOTgyNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzljYTUyYzk3M2QwNDgwZjhkMTlkYTM2M2FlMmJkYmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC42ODUwNjgwNzMwODE3NywgLTczLjk3NzkwNzU5ODAxODYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1Ljg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2IyNDk2OTVlNzIyNGI4ZWIzMzJmMTg3MThjNGYzZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMmQwZGUyYmU0OTU0Y2IzOWJkMGNhMzZlNDVmN2U3NyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTJkMGRlMmJlNDk1NGNiMzliZDBjYTM2ZTQ1ZjdlNzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhbnNvbiBQbCAmIEFzaGxhbmQgUGw8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDI4MC4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk3PGJyPiBuZXQgZGVwYXJ0dXJlczogMTE3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiMjQ5Njk1ZTcyMjRiOGViMzMyZjE4NzE4YzRmM2ZhLnNldENvbnRlbnQoaHRtbF9hMmQwZGUyYmU0OTU0Y2IzOWJkMGNhMzZlNDVmN2U3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOWNhNTJjOTczZDA0ODBmOGQxOWRhMzYzYWUyYmRiZi5iaW5kUG9wdXAocG9wdXBfY2IyNDk2OTVlNzIyNGI4ZWIzMzJmMTg3MThjNGYzZmEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzNjYyODc1NDU3NzRjZTRhOWZlYzQ5NzQ5NzllMTRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzE5MDc4OTExNzk1NjQsIC03My45NDIyMzY5MDAzMjk1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMEE4QTlGIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBBOEE5RiIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogLTMuODUsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNTliODljMDVhODQ0YzQyOWYwYTZkZjE1ZTQ2ZmI4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllNDNiY2UyNzNhZDQ0ZWZiYzIyNDVmNjMyOWExZWFjID0gJChgPGRpdiBpZD0iaHRtbF85ZTQzYmNlMjczYWQ0NGVmYmMyMjQ1ZjYzMjlhMWVhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmljaGFyZHNvbiBTdCAmIE4gSGVucnkgU3Q8YnI+IHRvdGFsIGRlcGFydHVyZXM6IDExNi4wPGJyPiB0b3RhbCBhcnJpdmFsczogMzk8YnI+IG5ldCBkZXBhcnR1cmVzOiAtNzcuMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjU5Yjg5YzA1YTg0NGM0MjlmMGE2ZGYxNWU0NmZiODMuc2V0Q29udGVudChodG1sXzllNDNiY2UyNzNhZDQ0ZWZiYzIyNDVmNjMyOWExZWFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQzNjYyODc1NDU3NzRjZTRhOWZlYzQ5NzQ5NzllMTRmLmJpbmRQb3B1cChwb3B1cF9mNTliODljMDVhODQ0YzQyOWYwYTZkZjE1ZTQ2ZmI4MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjFiYTIyNmM0ZjkzNDY0MGI5YzVkOThmNmM4MGFkZjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43NDY1MjQsIC03My45Nzc4ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzBBOEE5RiIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwQThBOUYiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IC0yLjEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYzg0MTNiZGI4YWU0ZGU4YjJlMmVkMTRmYWI0NzEyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxMjBhNDUzMDE4ODQ4ODY4NjljOTNiNTk1OTBjMjRjID0gJChgPGRpdiBpZD0iaHRtbF8yMTIwYTQ1MzAxODg0ODg2ODY5YzkzYjU5NTkwYzI0YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RSAzNSBTdCAmIDMgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMzEuMDxicj4gdG90YWwgYXJyaXZhbHM6IDI4OTxicj4gbmV0IGRlcGFydHVyZXM6IC00Mi4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYzg0MTNiZGI4YWU0ZGU4YjJlMmVkMTRmYWI0NzEyNC5zZXRDb250ZW50KGh0bWxfMjEyMGE0NTMwMTg4NDg4Njg2OWM5M2I1OTU5MGMyNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjFiYTIyNmM0ZjkzNDY0MGI5YzVkOThmNmM4MGFkZjQuYmluZFBvcHVwKHBvcHVwX2NjODQxM2JkYjhhZTRkZThiMmUyZWQxNGZhYjQ3MTI0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMDBhODk3MzdmZWU0MzFmODczZGUyODYzNDAyMzU5YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjc5MDI1NDE3MzMwNDE4NCwgLTczLjk3NzE4MzQwMTU4NDYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwQThBOUYiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMEE4QTlGIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAtNy4zNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FhMmU2MmY5MWNkOTQ2MmZhZjA0MmJhMTkyYTI1ZTY0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2ZGYzZDFiMWJlYjRkZWZiOWE5ZjBmM2IwY2FjZTY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTFhYjZlYmNkYjY2NGY4YWI1MzdmOTMyZDMxYzExZTAgPSAkKGA8ZGl2IGlkPSJodG1sXzkxYWI2ZWJjZGI2NjRmOGFiNTM3ZjkzMmQzMWMxMWUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XIDg4IFN0ICYgV2VzdCBFbmQgQXZlPGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAyMzUuMDxicj4gdG90YWwgYXJyaXZhbHM6IDg4PGJyPiBuZXQgZGVwYXJ0dXJlczogLTE0Ny4wPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNmRmM2QxYjFiZWI0ZGVmYjlhOWYwZjNiMGNhY2U2Ni5zZXRDb250ZW50KGh0bWxfOTFhYjZlYmNkYjY2NGY4YWI1MzdmOTMyZDMxYzExZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzAwYTg5NzM3ZmVlNDMxZjg3M2RlMjg2MzQwMjM1OWMuYmluZFBvcHVwKHBvcHVwXzM2ZGYzZDFiMWJlYjRkZWZiOWE5ZjBmM2IwY2FjZTY2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTQ4NDkyODIyMTM0ZTAzOWViNzk1OWIwNmZmYTY3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjcxODgyMTk5OTk5OTk5NiwgLTczLjk5NTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA0Ljg1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfYWEyZTYyZjkxY2Q5NDYyZmFmMDQyYmExOTJhMjVlNjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTkzZjI5NmYzYjhiNDljNmJiZTQyNjkxOGY5OGQ0ZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCcKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMzNiMmU4NDAxYTM0NTQyYTJmZjk5M2M2ODQzZDBjZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZDMzYjJlODQwMWEzNDU0MmEyZmY5OTNjNjg0M2QwY2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkdyYW5kIFN0ICYgRWxpemFiZXRoIFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiA1MjYuMDxicj4gdG90YWwgYXJyaXZhbHM6IDYyMzxicj4gbmV0IGRlcGFydHVyZXM6IDk3LjA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5M2YyOTZmM2I4YjQ5YzZiYmU0MjY5MThmOThkNGQzLnNldENvbnRlbnQoaHRtbF9kMzNiMmU4NDAxYTM0NTQyYTJmZjk5M2M2ODQzZDBjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZTQ4NDkyODIyMTM0ZTAzOWViNzk1OWIwNmZmYTY3Ny5iaW5kUG9wdXAocG9wdXBfMTkzZjI5NmYzYjhiNDljNmJiZTQyNjkxOGY5OGQ0ZDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhNzhhZjUxMTYzNDQ4MGI4NGFmODkzZWQ4Njk2NzAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNzIxMzE5LCAtNzQuMDEwMDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiNFMzcyMjIiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRTM3MjIyIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAwLjQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9hYTJlNjJmOTFjZDk0NjJmYWYwNDJiYTE5MmEyNWU2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDM1YjY5MzVkNzM0MjNlYTA4Yjc0OGRjNTkyNmJmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjYzMxOWFiNGE5NDQxZTY5ZTdiMWI0MjFmMjk0NGM2ID0gJChgPGRpdiBpZD0iaHRtbF9lY2MzMTlhYjRhOTQ0MWU2OWU3YjFiNDIxZjI5NDRjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+R3JlZW53aWNoIFN0ICYgSHViZXJ0IFN0PGJyPiB0b3RhbCBkZXBhcnR1cmVzOiAzMDAuMDxicj4gdG90YWwgYXJyaXZhbHM6IDMwODxicj4gbmV0IGRlcGFydHVyZXM6IDguMDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDAzNWI2OTM1ZDczNDIzZWEwOGI3NDhkYzU5MjZiZjkuc2V0Q29udGVudChodG1sX2VjYzMxOWFiNGE5NDQxZTY5ZTdiMWI0MjFmMjk0NGM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdhNzhhZjUxMTYzNDQ4MGI4NGFmODkzZWQ4Njk2NzAyLmJpbmRQb3B1cChwb3B1cF8wMDM1YjY5MzVkNzM0MjNlYTA4Yjc0OGRjNTkyNmJmOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x12471d7b8>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# plot net departures at 6PM\n",
"\n",
"trip_counts = get_trip_counts_by_hour(18)\n",
"folium_map = plot_station_counts(trip_counts)\n",
"folium_map"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2018-11-28T12:43:39.164530Z",
"start_time": "2018-11-28T12:43:37.925216Z"
}
},
"outputs": [],
"source": [
"folium_map.save(\"part_1.html\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}